fix: address PR #1641 review comments (round 2)

- Remove duplicate TranscriptWatcher/config imports in worker-service.ts
- Use normalizePlatformSource in handleSessionInitByClaudeId for consistency
- Don't skip DB completion when session not in memory (completeByClaudeId)
- Add try-catch around fetch in useContextPreview refresh callback
- Deduplicate store.getAllProjects() call in DataRoutes
- Fix malformed comment separators in migration runner
- Fix missing closing brace and JSDoc opener (merge artifact) in migration runner

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alex Newman
2026-04-07 13:22:58 -07:00
parent c21e49d9fa
commit 25bb93a995
8 changed files with 218 additions and 213 deletions
@@ -284,10 +284,11 @@ export class DataRoutes extends BaseRouteHandler {
const platformSource = req.query.platformSource as string | undefined;
if (platformSource) {
const projects = store.getAllProjects(platformSource);
res.json({
projects: store.getAllProjects(platformSource),
projects,
sources: [platformSource],
projectsBySource: { [platformSource]: store.getAllProjects(platformSource) }
projectsBySource: { [platformSource]: projects }
});
return;
}
@@ -706,15 +706,14 @@ export class SessionRoutes extends BaseRouteHandler {
const activeSession = this.sessionManager.getSession(sessionDbId);
if (!activeSession) {
// Session may not be in memory (already completed or never initialized)
logger.debug('SESSION', 'session-complete: Session not in active map', {
// Still proceed with DB-backed completion so the row gets marked completed
logger.debug('SESSION', 'session-complete: Session not in active map; continuing with DB-backed completion', {
contentSessionId,
sessionDbId
});
res.json({ status: 'skipped', reason: 'not_active' });
return;
}
// Complete the session (removes from active sessions map)
// Complete the session (removes from active sessions map if present)
// Note: The Stop hook (summarize handler) waits for pending work before calling
// this endpoint. No polling here — that's the hook's responsibility.
await this.completionHandler.completeByDbId(sessionDbId);
@@ -724,7 +723,7 @@ export class SessionRoutes extends BaseRouteHandler {
sessionDbId
});
res.json({ status: 'completed', sessionDbId });
res.json({ status: activeSession ? 'completed' : 'completed_db_only', sessionDbId });
});
/**
@@ -746,7 +745,7 @@ export class SessionRoutes extends BaseRouteHandler {
// may omit prompt/project in their payload (#838, #1049)
const project = req.body.project || 'unknown';
const prompt = req.body.prompt || '[media prompt]';
const platformSource = req.body.platformSource || 'claude';
const platformSource = normalizePlatformSource(req.body.platformSource);
const customTitle = req.body.customTitle || undefined;
logger.info('HTTP', 'SessionRoutes: handleSessionInitByClaudeId called', {