* Best-effort startup recovery for non-task chats so restart auto-retry can resume * interrupted turns before the user explicitly opens each workspace.
()
| 2054 | * interrupted turns before the user explicitly opens each workspace. |
| 2055 | */ |
| 2056 | async initialize(): Promise<void> { |
| 2057 | const startupStartedAt = Date.now(); |
| 2058 | |
| 2059 | try { |
| 2060 | const allMetadata = await this.config.getAllWorkspaceMetadata(); |
| 2061 | let scheduledCount = 0; |
| 2062 | let skippedTaskCount = 0; |
| 2063 | let skippedArchivedCount = 0; |
| 2064 | |
| 2065 | for (const metadata of allMetadata) { |
| 2066 | if (metadata.taskStatus) { |
| 2067 | skippedTaskCount += 1; |
| 2068 | continue; |
| 2069 | } |
| 2070 | |
| 2071 | if (isWorkspaceArchived(metadata.archivedAt, metadata.unarchivedAt)) { |
| 2072 | skippedArchivedCount += 1; |
| 2073 | continue; |
| 2074 | } |
| 2075 | |
| 2076 | this.startStartupRecovery(metadata.id); |
| 2077 | scheduledCount += 1; |
| 2078 | } |
| 2079 | |
| 2080 | log.info("[startup] WorkspaceService.initialize completed", { |
| 2081 | totalMs: Date.now() - startupStartedAt, |
| 2082 | scheduledCount, |
| 2083 | skippedTaskCount, |
| 2084 | skippedArchivedCount, |
| 2085 | }); |
| 2086 | } catch (error) { |
| 2087 | log.warn("[startup] WorkspaceService.initialize failed", { |
| 2088 | totalMs: Date.now() - startupStartedAt, |
| 2089 | error: error instanceof Error ? error.message : String(error), |
| 2090 | }); |
| 2091 | } |
| 2092 | } |
| 2093 | |
| 2094 | isExperimentEnabled(experimentId: (typeof EXPERIMENT_IDS)[keyof typeof EXPERIMENT_IDS]): boolean { |
| 2095 | return this.experimentsService?.isExperimentEnabled(experimentId) === true; |
nothing calls this directly
no test coverage detected