mstro-app 0.4.52 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -5
- package/bin/mstro.js +1 -1
- package/dist/server/cli/headless/claude-invoker-stall.d.ts.map +1 -1
- package/dist/server/cli/headless/claude-invoker-stall.js +7 -2
- package/dist/server/cli/headless/claude-invoker-stall.js.map +1 -1
- package/dist/server/cli/headless/claude-invoker.js +1 -1
- package/dist/server/cli/headless/claude-invoker.js.map +1 -1
- package/dist/server/cli/headless/runner.d.ts.map +1 -1
- package/dist/server/cli/headless/runner.js +63 -67
- package/dist/server/cli/headless/runner.js.map +1 -1
- package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
- package/dist/server/cli/headless/stall-assessor.js +9 -4
- package/dist/server/cli/headless/stall-assessor.js.map +1 -1
- package/dist/server/cli/improvisation-history-store.d.ts +16 -0
- package/dist/server/cli/improvisation-history-store.d.ts.map +1 -0
- package/dist/server/cli/improvisation-history-store.js +52 -0
- package/dist/server/cli/improvisation-history-store.js.map +1 -0
- package/dist/server/cli/improvisation-movements.d.ts +31 -0
- package/dist/server/cli/improvisation-movements.d.ts.map +1 -0
- package/dist/server/cli/improvisation-movements.js +93 -0
- package/dist/server/cli/improvisation-movements.js.map +1 -0
- package/dist/server/cli/improvisation-output-queue.d.ts +13 -0
- package/dist/server/cli/improvisation-output-queue.d.ts.map +1 -0
- package/dist/server/cli/improvisation-output-queue.js +40 -0
- package/dist/server/cli/improvisation-output-queue.js.map +1 -0
- package/dist/server/cli/improvisation-retry.d.ts +21 -51
- package/dist/server/cli/improvisation-retry.d.ts.map +1 -1
- package/dist/server/cli/improvisation-retry.js +18 -433
- package/dist/server/cli/improvisation-retry.js.map +1 -1
- package/dist/server/cli/improvisation-session-manager.d.ts +10 -8
- package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
- package/dist/server/cli/improvisation-session-manager.js +53 -148
- package/dist/server/cli/improvisation-session-manager.js.map +1 -1
- package/dist/server/cli/retry/retry-best-result.d.ts +4 -0
- package/dist/server/cli/retry/retry-best-result.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-best-result.js +61 -0
- package/dist/server/cli/retry/retry-best-result.js.map +1 -0
- package/dist/server/cli/retry/retry-context-loss.d.ts +6 -0
- package/dist/server/cli/retry/retry-context-loss.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-context-loss.js +68 -0
- package/dist/server/cli/retry/retry-context-loss.js.map +1 -0
- package/dist/server/cli/retry/retry-premature-completion.d.ts +5 -0
- package/dist/server/cli/retry/retry-premature-completion.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-premature-completion.js +81 -0
- package/dist/server/cli/retry/retry-premature-completion.js.map +1 -0
- package/dist/server/cli/retry/retry-recovery-strategies.d.ts +13 -0
- package/dist/server/cli/retry/retry-recovery-strategies.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-recovery-strategies.js +166 -0
- package/dist/server/cli/retry/retry-recovery-strategies.js.map +1 -0
- package/dist/server/cli/retry/retry-resume-strategy.d.ts +12 -0
- package/dist/server/cli/retry/retry-resume-strategy.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-resume-strategy.js +22 -0
- package/dist/server/cli/retry/retry-resume-strategy.js.map +1 -0
- package/dist/server/cli/retry/retry-runner-factory.d.ts +11 -0
- package/dist/server/cli/retry/retry-runner-factory.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-runner-factory.js +60 -0
- package/dist/server/cli/retry/retry-runner-factory.js.map +1 -0
- package/dist/server/cli/retry/retry-tool-results.d.ts +9 -0
- package/dist/server/cli/retry/retry-tool-results.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-tool-results.js +24 -0
- package/dist/server/cli/retry/retry-tool-results.js.map +1 -0
- package/dist/server/cli/retry/retry-types.d.ts +30 -0
- package/dist/server/cli/retry/retry-types.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-types.js +4 -0
- package/dist/server/cli/retry/retry-types.js.map +1 -0
- package/dist/server/index.js +21 -109
- package/dist/server/index.js.map +1 -1
- package/dist/server/server-setup.d.ts +16 -1
- package/dist/server/server-setup.d.ts.map +1 -1
- package/dist/server/server-setup.js +107 -0
- package/dist/server/server-setup.js.map +1 -1
- package/dist/server/services/plan/board-config.d.ts +21 -0
- package/dist/server/services/plan/board-config.d.ts.map +1 -0
- package/dist/server/services/plan/board-config.js +112 -0
- package/dist/server/services/plan/board-config.js.map +1 -0
- package/dist/server/services/plan/composer.d.ts +1 -1
- package/dist/server/services/plan/composer.d.ts.map +1 -1
- package/dist/server/services/plan/composer.js +7 -5
- package/dist/server/services/plan/composer.js.map +1 -1
- package/dist/server/services/plan/executor.d.ts +48 -48
- package/dist/server/services/plan/executor.d.ts.map +1 -1
- package/dist/server/services/plan/executor.js +157 -455
- package/dist/server/services/plan/executor.js.map +1 -1
- package/dist/server/services/plan/issue-loader.d.ts +16 -0
- package/dist/server/services/plan/issue-loader.d.ts.map +1 -0
- package/dist/server/services/plan/issue-loader.js +46 -0
- package/dist/server/services/plan/issue-loader.js.map +1 -0
- package/dist/server/services/plan/issue-writer.d.ts +34 -0
- package/dist/server/services/plan/issue-writer.d.ts.map +1 -0
- package/dist/server/services/plan/issue-writer.js +110 -0
- package/dist/server/services/plan/issue-writer.js.map +1 -0
- package/dist/server/services/plan/output-manager.d.ts.map +1 -1
- package/dist/server/services/plan/output-manager.js +2 -1
- package/dist/server/services/plan/output-manager.js.map +1 -1
- package/dist/server/services/plan/progress-log.d.ts +11 -0
- package/dist/server/services/plan/progress-log.d.ts.map +1 -0
- package/dist/server/services/plan/progress-log.js +81 -0
- package/dist/server/services/plan/progress-log.js.map +1 -0
- package/dist/server/services/plan/prompt-builder.d.ts.map +1 -1
- package/dist/server/services/plan/prompt-builder.js +48 -31
- package/dist/server/services/plan/prompt-builder.js.map +1 -1
- package/dist/server/services/plan/readiness-planner.d.ts +15 -0
- package/dist/server/services/plan/readiness-planner.d.ts.map +1 -0
- package/dist/server/services/plan/readiness-planner.js +41 -0
- package/dist/server/services/plan/readiness-planner.js.map +1 -0
- package/dist/server/services/plan/review-gate.d.ts +31 -0
- package/dist/server/services/plan/review-gate.d.ts.map +1 -1
- package/dist/server/services/plan/review-gate.js +52 -2
- package/dist/server/services/plan/review-gate.js.map +1 -1
- package/dist/server/services/platform.d.ts +56 -0
- package/dist/server/services/platform.d.ts.map +1 -1
- package/dist/server/services/platform.js +154 -52
- package/dist/server/services/platform.js.map +1 -1
- package/dist/server/services/websocket/file-download-handler.d.ts +17 -0
- package/dist/server/services/websocket/file-download-handler.d.ts.map +1 -0
- package/dist/server/services/websocket/file-download-handler.js +165 -0
- package/dist/server/services/websocket/file-download-handler.js.map +1 -0
- package/dist/server/services/websocket/git-worktree-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/git-worktree-handlers.js +28 -2
- package/dist/server/services/websocket/git-worktree-handlers.js.map +1 -1
- package/dist/server/services/websocket/handler-context.d.ts +15 -0
- package/dist/server/services/websocket/handler-context.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.d.ts +7 -0
- package/dist/server/services/websocket/handler.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.js +73 -11
- package/dist/server/services/websocket/handler.js.map +1 -1
- package/dist/server/services/websocket/msg-id-tracker.d.ts +21 -0
- package/dist/server/services/websocket/msg-id-tracker.d.ts.map +1 -0
- package/dist/server/services/websocket/msg-id-tracker.js +77 -0
- package/dist/server/services/websocket/msg-id-tracker.js.map +1 -0
- package/dist/server/services/websocket/quality-handlers.js +15 -3
- package/dist/server/services/websocket/quality-handlers.js.map +1 -1
- package/dist/server/services/websocket/quality-review-agent.js +2 -2
- package/dist/server/services/websocket/session-handlers.d.ts +48 -2
- package/dist/server/services/websocket/session-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/session-handlers.js +204 -65
- package/dist/server/services/websocket/session-handlers.js.map +1 -1
- package/dist/server/services/websocket/session-initialization.d.ts +2 -2
- package/dist/server/services/websocket/session-initialization.d.ts.map +1 -1
- package/dist/server/services/websocket/session-initialization.js +75 -17
- package/dist/server/services/websocket/session-initialization.js.map +1 -1
- package/dist/server/services/websocket/session-registry.d.ts +29 -1
- package/dist/server/services/websocket/session-registry.d.ts.map +1 -1
- package/dist/server/services/websocket/session-registry.js +53 -4
- package/dist/server/services/websocket/session-registry.js.map +1 -1
- package/dist/server/services/websocket/tab-broadcast.d.ts +24 -0
- package/dist/server/services/websocket/tab-broadcast.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-broadcast.js +13 -0
- package/dist/server/services/websocket/tab-broadcast.js.map +1 -0
- package/dist/server/services/websocket/tab-event-buffer.d.ts +103 -0
- package/dist/server/services/websocket/tab-event-buffer.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-event-buffer.js +107 -0
- package/dist/server/services/websocket/tab-event-buffer.js.map +1 -0
- package/dist/server/services/websocket/tab-event-replay.d.ts +20 -0
- package/dist/server/services/websocket/tab-event-replay.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-event-replay.js +21 -0
- package/dist/server/services/websocket/tab-event-replay.js.map +1 -0
- package/dist/server/services/websocket/tab-handlers.d.ts +0 -1
- package/dist/server/services/websocket/tab-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/tab-handlers.js +2 -9
- package/dist/server/services/websocket/tab-handlers.js.map +1 -1
- package/dist/server/services/websocket/types.d.ts +15 -6
- package/dist/server/services/websocket/types.d.ts.map +1 -1
- package/dist/server/services/websocket/types.js +6 -4
- package/dist/server/services/websocket/types.js.map +1 -1
- package/package.json +1 -1
- package/server/README.md +1 -1
- package/server/cli/headless/claude-invoker-stall.ts +7 -2
- package/server/cli/headless/claude-invoker.ts +1 -1
- package/server/cli/headless/runner.ts +67 -72
- package/server/cli/headless/stall-assessor.ts +9 -4
- package/server/cli/headless/types.ts +1 -1
- package/server/cli/improvisation-history-store.ts +62 -0
- package/server/cli/improvisation-movements.ts +120 -0
- package/server/cli/improvisation-output-queue.ts +42 -0
- package/server/cli/improvisation-retry.ts +25 -600
- package/server/cli/improvisation-session-manager.ts +74 -160
- package/server/cli/retry/retry-best-result.ts +70 -0
- package/server/cli/retry/retry-context-loss.ts +87 -0
- package/server/cli/retry/retry-premature-completion.ts +113 -0
- package/server/cli/retry/retry-recovery-strategies.ts +247 -0
- package/server/cli/retry/retry-resume-strategy.ts +33 -0
- package/server/cli/retry/retry-runner-factory.ts +70 -0
- package/server/cli/retry/retry-tool-results.ts +31 -0
- package/server/cli/retry/retry-types.ts +32 -0
- package/server/index.ts +37 -123
- package/server/server-setup.ts +126 -1
- package/server/services/plan/agents/assess-stall.md +11 -4
- package/server/services/plan/board-config.ts +122 -0
- package/server/services/plan/composer.ts +7 -5
- package/server/services/plan/executor.ts +214 -467
- package/server/services/plan/issue-loader.ts +64 -0
- package/server/services/plan/issue-writer.ts +137 -0
- package/server/services/plan/output-manager.ts +2 -1
- package/server/services/plan/progress-log.ts +92 -0
- package/server/services/plan/prompt-builder.ts +73 -35
- package/server/services/plan/readiness-planner.ts +50 -0
- package/server/services/plan/review-gate.ts +102 -2
- package/server/services/platform.ts +163 -58
- package/server/services/websocket/file-download-handler.ts +191 -0
- package/server/services/websocket/git-worktree-handlers.ts +29 -2
- package/server/services/websocket/handler-context.ts +15 -0
- package/server/services/websocket/handler.ts +76 -12
- package/server/services/websocket/msg-id-tracker.ts +84 -0
- package/server/services/websocket/quality-handlers.ts +16 -3
- package/server/services/websocket/quality-review-agent.ts +2 -2
- package/server/services/websocket/session-handlers.ts +213 -68
- package/server/services/websocket/session-initialization.ts +83 -19
- package/server/services/websocket/session-registry.ts +61 -4
- package/server/services/websocket/tab-broadcast.ts +38 -0
- package/server/services/websocket/tab-event-buffer.ts +159 -0
- package/server/services/websocket/tab-event-replay.ts +42 -0
- package/server/services/websocket/tab-handlers.ts +2 -9
- package/server/services/websocket/types.ts +17 -4
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Copyright (c) 2025-present Mstro, Inc. All rights reserved.
|
|
2
2
|
// Licensed under the MIT License. See LICENSE file for details.
|
|
3
|
+
import { ImprovisationSessionManager } from '../../cli/improvisation-session-manager.js';
|
|
3
4
|
import { getEffortLevel, getModel } from '../settings.js';
|
|
4
5
|
import { runQualityScan } from './quality-service.js';
|
|
5
6
|
import { resolveSkillPrompt } from './skill-handlers.js';
|
|
7
|
+
import { broadcastTabEvent } from './tab-broadcast.js';
|
|
6
8
|
// Re-export from extracted modules for backward compatibility
|
|
7
9
|
export { handleHistoryMessage } from './session-history.js';
|
|
8
10
|
export { initializeTab, resumeHistoricalSession } from './session-initialization.js';
|
|
@@ -34,6 +36,19 @@ function convertToolHistoryToLines(tools, ts) {
|
|
|
34
36
|
}
|
|
35
37
|
return lines;
|
|
36
38
|
}
|
|
39
|
+
function formatElapsedDuration(totalSeconds) {
|
|
40
|
+
const seconds = Math.floor(totalSeconds) % 60;
|
|
41
|
+
const minutes = Math.floor(totalSeconds / 60) % 60;
|
|
42
|
+
const hours = Math.floor(totalSeconds / 3600) % 24;
|
|
43
|
+
const days = Math.floor(totalSeconds / 86400);
|
|
44
|
+
if (days > 0)
|
|
45
|
+
return `${days}d ${hours}h ${minutes}m ${seconds}s`;
|
|
46
|
+
if (hours > 0)
|
|
47
|
+
return `${hours}h ${minutes}m ${seconds}s`;
|
|
48
|
+
if (minutes > 0)
|
|
49
|
+
return `${minutes}m ${seconds}s`;
|
|
50
|
+
return `${seconds}s`;
|
|
51
|
+
}
|
|
37
52
|
/** Convert a single movement record into OutputLine-compatible entries */
|
|
38
53
|
function convertMovementToLines(movement) {
|
|
39
54
|
const lines = [];
|
|
@@ -52,25 +67,99 @@ function convertMovementToLines(movement) {
|
|
|
52
67
|
lines.push({ type: 'error', text: `Error: ${movement.errorOutput}`, timestamp: ts });
|
|
53
68
|
}
|
|
54
69
|
const durationText = movement.durationMs
|
|
55
|
-
? `Completed in ${(movement.durationMs / 1000)
|
|
70
|
+
? `Completed in ${formatElapsedDuration(movement.durationMs / 1000)}`
|
|
56
71
|
: 'Completed';
|
|
57
72
|
lines.push({ type: 'system', text: durationText, timestamp: ts });
|
|
58
73
|
return lines;
|
|
59
74
|
}
|
|
60
75
|
function requireSession(ctx, ws, tabId) {
|
|
61
|
-
const session =
|
|
76
|
+
const session = resolveTabSession(ctx, ws, tabId);
|
|
62
77
|
if (!session)
|
|
63
78
|
throw new Error(`No session found for tab ${tabId}`);
|
|
64
79
|
return session;
|
|
65
80
|
}
|
|
66
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Canonical tab → session resolver.
|
|
83
|
+
*
|
|
84
|
+
* Returns the `ImprovisationSessionManager` for `tabId`, attaching it to `ws`
|
|
85
|
+
* if needed. Contract: after a successful return, the session is mapped in
|
|
86
|
+
* `ctx.connections.get(ws)` and its event listeners are wired to this `ws`.
|
|
87
|
+
*
|
|
88
|
+
* Resolution order (cheapest first, each step caches for subsequent calls):
|
|
89
|
+
* 1. Per-connection `tabMap` — the session is already attached to this `ws`.
|
|
90
|
+
* 2. Registry + in-memory — another connection has the session loaded;
|
|
91
|
+
* re-attach listeners to this `ws` without re-reading disk.
|
|
92
|
+
* 3. Registry + disk — session is persisted but not in memory (e.g. after
|
|
93
|
+
* a CLI restart); construct the manager from history and cache it.
|
|
94
|
+
*
|
|
95
|
+
* Returns `null` only when the tab is truly unknown (no registry entry AND
|
|
96
|
+
* no history file). That is the only case where handlers should surface an
|
|
97
|
+
* error to the caller — everything else self-heals so session ops never
|
|
98
|
+
* race the `initTab` handshake.
|
|
99
|
+
*
|
|
100
|
+
* Also restores worktree bindings from the registry on miss so git/file ops
|
|
101
|
+
* against this tab route to the correct directory even without initTab.
|
|
102
|
+
*/
|
|
103
|
+
export function resolveTabSession(ctx, ws, tabId) {
|
|
67
104
|
const tabMap = ctx.connections.get(ws);
|
|
68
|
-
|
|
105
|
+
const mappedSessionId = tabMap?.get(tabId);
|
|
106
|
+
if (mappedSessionId) {
|
|
107
|
+
const session = ctx.sessions.get(mappedSessionId);
|
|
108
|
+
if (session)
|
|
109
|
+
return session;
|
|
110
|
+
}
|
|
111
|
+
const workingDir = ws._workingDir;
|
|
112
|
+
if (!workingDir)
|
|
69
113
|
return null;
|
|
70
|
-
const
|
|
71
|
-
|
|
114
|
+
const registry = ctx.getRegistry(workingDir);
|
|
115
|
+
const registrySessionId = registry.getTabSession(tabId);
|
|
116
|
+
if (!registrySessionId)
|
|
72
117
|
return null;
|
|
73
|
-
|
|
118
|
+
const inMemorySession = ctx.sessions.get(registrySessionId);
|
|
119
|
+
if (inMemorySession) {
|
|
120
|
+
return attachSessionToConnection(ctx, ws, tabId, inMemorySession, registry);
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const diskSession = ImprovisationSessionManager.resumeFromHistory(workingDir, registrySessionId);
|
|
124
|
+
ctx.sessions.set(diskSession.getSessionInfo().sessionId, diskSession);
|
|
125
|
+
registry.markTabPersisted(tabId);
|
|
126
|
+
return attachSessionToConnection(ctx, ws, tabId, diskSession, registry);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// History file doesn't exist — either the tab has never had a first
|
|
130
|
+
// prompt (lazy persistence) or the file was deleted and the registry
|
|
131
|
+
// hasn't been swept yet. Either way, construct a fresh session bound to
|
|
132
|
+
// the registered sessionId so the tab keeps its identity.
|
|
133
|
+
const freshSession = new ImprovisationSessionManager({
|
|
134
|
+
workingDir,
|
|
135
|
+
sessionId: registrySessionId,
|
|
136
|
+
model: getModel(),
|
|
137
|
+
effortLevel: getEffortLevel(),
|
|
138
|
+
});
|
|
139
|
+
ctx.sessions.set(freshSession.getSessionInfo().sessionId, freshSession);
|
|
140
|
+
return attachSessionToConnection(ctx, ws, tabId, freshSession, registry);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** Wire listeners + update caches when a resolved session first attaches to this ws. */
|
|
144
|
+
function attachSessionToConnection(ctx, ws, tabId, session, registry) {
|
|
145
|
+
setupSessionListeners(ctx, session, ws, tabId);
|
|
146
|
+
const tabMap = ctx.connections.get(ws);
|
|
147
|
+
if (tabMap)
|
|
148
|
+
tabMap.set(tabId, session.getSessionInfo().sessionId);
|
|
149
|
+
registry.touchTab(tabId);
|
|
150
|
+
restoreWorktreeFromRegistry(ctx, registry, tabId);
|
|
151
|
+
return session;
|
|
152
|
+
}
|
|
153
|
+
/** Copy worktree bindings from the persistent registry into the live context. */
|
|
154
|
+
export function restoreWorktreeFromRegistry(ctx, registry, tabId) {
|
|
155
|
+
if (ctx.gitDirectories.has(tabId))
|
|
156
|
+
return;
|
|
157
|
+
const regTab = registry.getTab(tabId);
|
|
158
|
+
if (!regTab?.worktreePath)
|
|
159
|
+
return;
|
|
160
|
+
ctx.gitDirectories.set(tabId, regTab.worktreePath);
|
|
161
|
+
if (regTab.worktreeBranch)
|
|
162
|
+
ctx.gitBranches.set(tabId, regTab.worktreeBranch);
|
|
74
163
|
}
|
|
75
164
|
export function buildOutputHistory(session) {
|
|
76
165
|
const history = session.getHistory();
|
|
@@ -82,20 +171,47 @@ export function buildOutputHistory(session) {
|
|
|
82
171
|
.filter((m) => (m.durationMs ?? 0) > 0)
|
|
83
172
|
.flatMap(convertMovementToLines);
|
|
84
173
|
}
|
|
85
|
-
|
|
174
|
+
/**
|
|
175
|
+
* Wire session events to the WebSocket fan-out.
|
|
176
|
+
*
|
|
177
|
+
* All session-driven messages broadcast to `allConnections` rather than the
|
|
178
|
+
* `ws` that called `initTab`/`execute`. The CLI has exactly one live socket
|
|
179
|
+
* at a time (the platform relay), and `allConnections` is maintained by
|
|
180
|
+
* `handleConnection`/`handleClose` — so a broadcast always lands on the
|
|
181
|
+
* *current* relay socket, even after a reconnect, and is fanned out to every
|
|
182
|
+
* paired web client by the platform.
|
|
183
|
+
*
|
|
184
|
+
* Sending to the captured `ws` was the prior shape and silently dropped
|
|
185
|
+
* streaming output for any tab whose `setupSessionListeners` hadn't been
|
|
186
|
+
* re-run after a relay reconnect (i.e. background tabs the user wasn't
|
|
187
|
+
* actively viewing). The `tabStateChanged` events still fired — they were
|
|
188
|
+
* already broadcast — so the tab's executing dot showed up but the actual
|
|
189
|
+
* stream content (`output`/`thinking`/`toolUse`/...) went nowhere.
|
|
190
|
+
*
|
|
191
|
+
* `ws` is retained in the signature for symmetry with other handlers and to
|
|
192
|
+
* keep the call sites unchanged.
|
|
193
|
+
*/
|
|
194
|
+
export function setupSessionListeners(ctx, session, _ws, tabId) {
|
|
86
195
|
session.removeAllListeners();
|
|
196
|
+
session.on('onHistoryPersisted', () => {
|
|
197
|
+
const registry = ctx.getRegistry('');
|
|
198
|
+
try {
|
|
199
|
+
registry.markTabPersisted(tabId);
|
|
200
|
+
}
|
|
201
|
+
catch { /* ignore */ }
|
|
202
|
+
});
|
|
87
203
|
session.on('onOutput', (text) => {
|
|
88
|
-
ctx
|
|
204
|
+
broadcastTabEvent(ctx, tabId, 'output', { text, timestamp: Date.now() });
|
|
89
205
|
});
|
|
90
206
|
session.on('onThinking', (text) => {
|
|
91
|
-
ctx
|
|
207
|
+
broadcastTabEvent(ctx, tabId, 'thinking', { text });
|
|
92
208
|
});
|
|
93
209
|
session.on('onMovementStart', (sequenceNumber, prompt, isAutoContinue) => {
|
|
94
|
-
ctx
|
|
210
|
+
broadcastTabEvent(ctx, tabId, 'movementStart', { sequenceNumber, prompt, timestamp: Date.now(), executionStartTimestamp: session.executionStartTimestamp, isAutoContinue });
|
|
95
211
|
ctx.broadcastToAll({ type: 'tabStateChanged', data: { tabId, isExecuting: true, executionStartTimestamp: session.executionStartTimestamp } });
|
|
96
212
|
});
|
|
97
213
|
session.on('onMovementComplete', (movement) => {
|
|
98
|
-
ctx
|
|
214
|
+
broadcastTabEvent(ctx, tabId, 'movementComplete', movement);
|
|
99
215
|
const registry = ctx.getRegistry('');
|
|
100
216
|
// Use a try/catch since getRegistry may not have been initialized with the right workingDir
|
|
101
217
|
try {
|
|
@@ -117,20 +233,20 @@ export function setupSessionListeners(ctx, session, ws, tabId) {
|
|
|
117
233
|
}
|
|
118
234
|
});
|
|
119
235
|
session.on('onMovementError', (error) => {
|
|
120
|
-
ctx
|
|
236
|
+
broadcastTabEvent(ctx, tabId, 'movementError', { message: error.message });
|
|
121
237
|
ctx.broadcastToAll({ type: 'tabStateChanged', data: { tabId, isExecuting: false } });
|
|
122
238
|
});
|
|
123
239
|
session.on('onSessionUpdate', (history) => {
|
|
124
|
-
ctx
|
|
240
|
+
broadcastTabEvent(ctx, tabId, 'sessionUpdate', history);
|
|
125
241
|
});
|
|
126
242
|
session.on('onPlanNeedsConfirmation', (plan) => {
|
|
127
|
-
ctx
|
|
243
|
+
broadcastTabEvent(ctx, tabId, 'approvalRequired', plan);
|
|
128
244
|
});
|
|
129
245
|
session.on('onToolUse', (event) => {
|
|
130
|
-
ctx
|
|
246
|
+
broadcastTabEvent(ctx, tabId, 'toolUse', { ...event, timestamp: Date.now() });
|
|
131
247
|
});
|
|
132
248
|
session.on('onTokenUsage', (usage) => {
|
|
133
|
-
ctx
|
|
249
|
+
broadcastTabEvent(ctx, tabId, 'streamingTokens', usage);
|
|
134
250
|
});
|
|
135
251
|
}
|
|
136
252
|
/** Merge pre-uploaded files (from chunked upload) with any inline attachments */
|
|
@@ -157,39 +273,79 @@ export function mergePreUploadedAttachments(ctx, tabId, inlineAttachments) {
|
|
|
157
273
|
return merged;
|
|
158
274
|
}
|
|
159
275
|
const WRITE_OPS = new Set(['execute', 'cancel', 'new', 'approve', 'reject']);
|
|
276
|
+
function emitExecuteAck(ctx, tabId, sessionId, msgId, duplicate = false) {
|
|
277
|
+
ctx.broadcastToAll({
|
|
278
|
+
type: 'executeAck',
|
|
279
|
+
tabId,
|
|
280
|
+
data: duplicate ? { msgId, sessionId, duplicate: true } : { msgId, sessionId },
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Handle an `execute` request: validate, dedupe on msgId, run the prompt,
|
|
285
|
+
* and ack every paired web so their outbox drains.
|
|
286
|
+
*
|
|
287
|
+
* Extracted from `handleSessionMessage` to keep its cyclomatic complexity
|
|
288
|
+
* within the biome threshold; the switch-body pattern was pushing past 15.
|
|
289
|
+
*/
|
|
290
|
+
function handleExecuteMessage(ctx, ws, msg, tabId) {
|
|
291
|
+
if (!msg.data?.prompt)
|
|
292
|
+
throw new Error('Prompt is required');
|
|
293
|
+
const session = requireSession(ctx, ws, tabId);
|
|
294
|
+
const { sessionId } = session.getSessionInfo();
|
|
295
|
+
const msgId = typeof msg.data.msgId === 'string' ? msg.data.msgId : undefined;
|
|
296
|
+
// Idempotency: a web reconnect may replay the same msgId. Re-ack so its
|
|
297
|
+
// outbox drains, but don't run the prompt a second time.
|
|
298
|
+
if (msgId && !ctx.msgIdTracker.recordIfFirst(tabId, msgId)) {
|
|
299
|
+
console.log(`[session] execute duplicate msgId=${msgId} tabId=${tabId} — re-acking without re-run`);
|
|
300
|
+
emitExecuteAck(ctx, tabId, sessionId, msgId, /* duplicate */ true);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (msgId) {
|
|
304
|
+
console.log(`[session] execute accepted msgId=${msgId} tabId=${tabId} sessionId=${sessionId}`);
|
|
305
|
+
}
|
|
306
|
+
const worktreeDir = ctx.gitDirectories.get(tabId);
|
|
307
|
+
const attachments = mergePreUploadedAttachments(ctx, tabId, msg.data.attachments);
|
|
308
|
+
// Resolve slash commands (e.g. "/code-review") to their SKILL.md content.
|
|
309
|
+
// Claude Code's -p headless mode doesn't support skills natively, so we
|
|
310
|
+
// load the skill's instructions and pass them as the actual prompt.
|
|
311
|
+
const rawPrompt = msg.data.prompt;
|
|
312
|
+
const effectiveDir = worktreeDir || session.getSessionInfo().workingDir;
|
|
313
|
+
const resolved = resolveSkillPrompt(rawPrompt, effectiveDir);
|
|
314
|
+
session.executePrompt(resolved ? resolved.prompt : rawPrompt, attachments, {
|
|
315
|
+
workingDir: worktreeDir,
|
|
316
|
+
displayPrompt: resolved ? rawPrompt : undefined,
|
|
317
|
+
});
|
|
318
|
+
// Ack AFTER enqueue so the web knows the CLI accepted the work.
|
|
319
|
+
if (msgId)
|
|
320
|
+
emitExecuteAck(ctx, tabId, sessionId, msgId);
|
|
321
|
+
}
|
|
322
|
+
function handleNewSessionMessage(ctx, ws, tabId) {
|
|
323
|
+
const oldSession = requireSession(ctx, ws, tabId);
|
|
324
|
+
const oldSessionId = oldSession.getSessionInfo().sessionId;
|
|
325
|
+
const newSession = oldSession.startNewSession({ model: getModel(), effortLevel: getEffortLevel() });
|
|
326
|
+
oldSession.destroy();
|
|
327
|
+
ctx.sessions.delete(oldSessionId);
|
|
328
|
+
setupSessionListeners(ctx, newSession, ws, tabId);
|
|
329
|
+
const newSessionId = newSession.getSessionInfo().sessionId;
|
|
330
|
+
ctx.sessions.set(newSessionId, newSession);
|
|
331
|
+
const tabMap = ctx.connections.get(ws);
|
|
332
|
+
if (tabMap)
|
|
333
|
+
tabMap.set(tabId, newSessionId);
|
|
334
|
+
const registry = ctx.getRegistry('');
|
|
335
|
+
try {
|
|
336
|
+
registry.updateTabSession(tabId, newSessionId);
|
|
337
|
+
}
|
|
338
|
+
catch { /* ignore */ }
|
|
339
|
+
ctx.send(ws, { type: 'newSession', tabId, data: newSession.getSessionInfo() });
|
|
340
|
+
}
|
|
160
341
|
export function handleSessionMessage(ctx, ws, msg, tabId, permission) {
|
|
161
342
|
if (permission === 'view' && WRITE_OPS.has(msg.type)) {
|
|
162
343
|
throw new Error('View-only users cannot perform write operations');
|
|
163
344
|
}
|
|
164
345
|
switch (msg.type) {
|
|
165
|
-
case 'execute':
|
|
166
|
-
|
|
167
|
-
throw new Error('Prompt is required');
|
|
168
|
-
const session = requireSession(ctx, ws, tabId);
|
|
169
|
-
const worktreeDir = ctx.gitDirectories.get(tabId);
|
|
170
|
-
const attachments = mergePreUploadedAttachments(ctx, tabId, msg.data.attachments);
|
|
171
|
-
// Resolve slash commands (e.g. "/code-review") to their SKILL.md prompt content.
|
|
172
|
-
// Claude Code's -p headless mode doesn't support skills natively, so we load
|
|
173
|
-
// the skill's instructions and pass them as the actual prompt.
|
|
174
|
-
const rawPrompt = msg.data.prompt;
|
|
175
|
-
const effectiveDir = worktreeDir || session.getSessionInfo().workingDir;
|
|
176
|
-
const resolved = resolveSkillPrompt(rawPrompt, effectiveDir);
|
|
177
|
-
// Authoritative prompt-input clear for all connected devices. The
|
|
178
|
-
// submitter already cleared locally; this guarantees other devices
|
|
179
|
-
// clear even if the submitter's debounced syncPromptText never fires
|
|
180
|
-
// (e.g. mobile tab suspended after Send). Clients suppress this via
|
|
181
|
-
// locallyEditingTabs if the user is actively typing a new prompt.
|
|
182
|
-
ctx.broadcastToAll({
|
|
183
|
-
type: 'promptTextSync',
|
|
184
|
-
tabId,
|
|
185
|
-
data: { tabId, text: '' },
|
|
186
|
-
});
|
|
187
|
-
session.executePrompt(resolved ? resolved.prompt : rawPrompt, attachments, {
|
|
188
|
-
workingDir: worktreeDir,
|
|
189
|
-
displayPrompt: resolved ? rawPrompt : undefined,
|
|
190
|
-
});
|
|
346
|
+
case 'execute':
|
|
347
|
+
handleExecuteMessage(ctx, ws, msg, tabId);
|
|
191
348
|
break;
|
|
192
|
-
}
|
|
193
349
|
case 'cancel': {
|
|
194
350
|
const session = requireSession(ctx, ws, tabId);
|
|
195
351
|
session.cancel();
|
|
@@ -200,36 +356,19 @@ export function handleSessionMessage(ctx, ws, msg, tabId, permission) {
|
|
|
200
356
|
ctx.send(ws, { type: 'history', tabId, data: session.getHistory() });
|
|
201
357
|
break;
|
|
202
358
|
}
|
|
203
|
-
case 'new':
|
|
204
|
-
|
|
205
|
-
const oldSessionId = oldSession.getSessionInfo().sessionId;
|
|
206
|
-
const newSession = oldSession.startNewSession({ model: getModel(), effortLevel: getEffortLevel() });
|
|
207
|
-
oldSession.destroy();
|
|
208
|
-
ctx.sessions.delete(oldSessionId);
|
|
209
|
-
setupSessionListeners(ctx, newSession, ws, tabId);
|
|
210
|
-
const newSessionId = newSession.getSessionInfo().sessionId;
|
|
211
|
-
ctx.sessions.set(newSessionId, newSession);
|
|
212
|
-
const tabMap = ctx.connections.get(ws);
|
|
213
|
-
if (tabMap)
|
|
214
|
-
tabMap.set(tabId, newSessionId);
|
|
215
|
-
const registry = ctx.getRegistry('');
|
|
216
|
-
try {
|
|
217
|
-
registry.updateTabSession(tabId, newSessionId);
|
|
218
|
-
}
|
|
219
|
-
catch { /* ignore */ }
|
|
220
|
-
ctx.send(ws, { type: 'newSession', tabId, data: newSession.getSessionInfo() });
|
|
359
|
+
case 'new':
|
|
360
|
+
handleNewSessionMessage(ctx, ws, tabId);
|
|
221
361
|
break;
|
|
222
|
-
}
|
|
223
362
|
case 'approve': {
|
|
224
363
|
const session = requireSession(ctx, ws, tabId);
|
|
225
364
|
session.respondToApproval(true);
|
|
226
|
-
ctx
|
|
365
|
+
broadcastTabEvent(ctx, tabId, 'output', { text: '\n✅ Approved - proceeding with operation\n' });
|
|
227
366
|
break;
|
|
228
367
|
}
|
|
229
368
|
case 'reject': {
|
|
230
369
|
const session = requireSession(ctx, ws, tabId);
|
|
231
370
|
session.respondToApproval(false);
|
|
232
|
-
ctx
|
|
371
|
+
broadcastTabEvent(ctx, tabId, 'output', { text: '\n🚫 Rejected - operation cancelled\n' });
|
|
233
372
|
break;
|
|
234
373
|
}
|
|
235
374
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-handlers.js","sourceRoot":"","sources":["../../../../server/services/websocket/session-handlers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-handlers.js","sourceRoot":"","sources":["../../../../server/services/websocket/session-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HandlerContext } from './handler-context.js';
|
|
2
2
|
import type { WSContext } from './types.js';
|
|
3
|
-
export declare function initializeTab(ctx: HandlerContext, ws: WSContext, tabId: string, workingDir: string, tabName?: string): Promise<void>;
|
|
4
|
-
export declare function resumeHistoricalSession(ctx: HandlerContext, ws: WSContext, tabId: string, workingDir: string, historicalSessionId: string): Promise<void>;
|
|
3
|
+
export declare function initializeTab(ctx: HandlerContext, ws: WSContext, tabId: string, workingDir: string, tabName?: string, rawData?: unknown): Promise<void>;
|
|
4
|
+
export declare function resumeHistoricalSession(ctx: HandlerContext, ws: WSContext, tabId: string, workingDir: string, historicalSessionId: string, rawData?: unknown): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=session-initialization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-initialization.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/session-initialization.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-initialization.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/session-initialization.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAiE5C,wBAAsB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE7J;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,cAAc,EACnB,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAyDf"}
|
|
@@ -3,7 +3,22 @@
|
|
|
3
3
|
import { ImprovisationSessionManager } from '../../cli/improvisation-session-manager.js';
|
|
4
4
|
import { getEffortLevel, getModel } from '../settings.js';
|
|
5
5
|
import { buildOutputHistory, setupSessionListeners } from './session-handlers.js';
|
|
6
|
-
|
|
6
|
+
import { replayTabEventsSince } from './tab-event-replay.js';
|
|
7
|
+
/**
|
|
8
|
+
* Extract `lastSeenSeq` from an initTab/resumeSession data payload.
|
|
9
|
+
*
|
|
10
|
+
* Keeps the narrow-typing scoped to the initialization module instead of
|
|
11
|
+
* leaking into the broader `HandlerContext`. Returns `undefined` for first
|
|
12
|
+
* init (no replay needed) or malformed payloads (treated as first init —
|
|
13
|
+
* safer than surfacing an error the user can't act on).
|
|
14
|
+
*/
|
|
15
|
+
function extractLastSeenSeq(data) {
|
|
16
|
+
if (!data || typeof data !== 'object')
|
|
17
|
+
return undefined;
|
|
18
|
+
const candidate = data.lastSeenSeq;
|
|
19
|
+
return typeof candidate === 'number' && Number.isFinite(candidate) ? candidate : undefined;
|
|
20
|
+
}
|
|
21
|
+
function tryResumeFromDisk(ctx, ws, tabId, workingDir, registrySessionId, tabMap, registry, lastSeenSeq) {
|
|
7
22
|
try {
|
|
8
23
|
const diskSession = ImprovisationSessionManager.resumeFromHistory(workingDir, registrySessionId);
|
|
9
24
|
setupSessionListeners(ctx, diskSession, ws, tabId);
|
|
@@ -12,6 +27,7 @@ function tryResumeFromDisk(ctx, ws, tabId, workingDir, registrySessionId, tabMap
|
|
|
12
27
|
if (tabMap)
|
|
13
28
|
tabMap.set(tabId, diskSessionId);
|
|
14
29
|
registry.touchTab(tabId);
|
|
30
|
+
registry.markTabPersisted(tabId);
|
|
15
31
|
// Restore worktree state from registry
|
|
16
32
|
const regTab = registry.getTab(tabId);
|
|
17
33
|
if (regTab?.worktreePath && !ctx.gitDirectories.has(tabId)) {
|
|
@@ -21,12 +37,17 @@ function tryResumeFromDisk(ctx, ws, tabId, workingDir, registrySessionId, tabMap
|
|
|
21
37
|
}
|
|
22
38
|
const worktreePath = ctx.gitDirectories.get(tabId);
|
|
23
39
|
const worktreeBranch = ctx.gitBranches.get(tabId);
|
|
40
|
+
// Replay any tab-scoped events the web missed during the transport gap
|
|
41
|
+
// BEFORE tabInitialized so they arrive in the right order. Web-side
|
|
42
|
+
// handlers append; `tabInitialized` does NOT reset when `resumedFromSeq`
|
|
43
|
+
// is set, preserving the replayed additions.
|
|
44
|
+
replayTabEventsSince(ctx, ws, tabId, lastSeenSeq);
|
|
24
45
|
ctx.send(ws, {
|
|
25
46
|
type: 'tabInitialized',
|
|
26
47
|
tabId,
|
|
27
48
|
data: {
|
|
28
49
|
...diskSession.getSessionInfo(),
|
|
29
|
-
outputHistory: buildOutputHistory(diskSession),
|
|
50
|
+
...(lastSeenSeq === undefined ? { outputHistory: buildOutputHistory(diskSession) } : { resumedFromSeq: true }),
|
|
30
51
|
...(worktreePath ? { worktreePath, worktreeBranch } : {}),
|
|
31
52
|
}
|
|
32
53
|
});
|
|
@@ -36,15 +57,16 @@ function tryResumeFromDisk(ctx, ws, tabId, workingDir, registrySessionId, tabMap
|
|
|
36
57
|
return false;
|
|
37
58
|
}
|
|
38
59
|
}
|
|
39
|
-
export async function initializeTab(ctx, ws, tabId, workingDir, tabName) {
|
|
60
|
+
export async function initializeTab(ctx, ws, tabId, workingDir, tabName, rawData) {
|
|
40
61
|
const tabMap = ctx.connections.get(ws);
|
|
41
62
|
const registry = ctx.getRegistry(workingDir);
|
|
63
|
+
const lastSeenSeq = extractLastSeenSeq(rawData);
|
|
42
64
|
// 1. Check per-connection map (same WS reconnect)
|
|
43
65
|
const existingSessionId = tabMap?.get(tabId);
|
|
44
66
|
if (existingSessionId) {
|
|
45
67
|
const existingSession = ctx.sessions.get(existingSessionId);
|
|
46
68
|
if (existingSession) {
|
|
47
|
-
reattachSession(ctx, existingSession, ws, tabId, registry);
|
|
69
|
+
reattachSession(ctx, existingSession, ws, tabId, registry, lastSeenSeq);
|
|
48
70
|
return;
|
|
49
71
|
}
|
|
50
72
|
}
|
|
@@ -53,41 +75,56 @@ export async function initializeTab(ctx, ws, tabId, workingDir, tabName) {
|
|
|
53
75
|
if (registrySessionId) {
|
|
54
76
|
const inMemorySession = ctx.sessions.get(registrySessionId);
|
|
55
77
|
if (inMemorySession) {
|
|
56
|
-
reattachSession(ctx, inMemorySession, ws, tabId, registry);
|
|
78
|
+
reattachSession(ctx, inMemorySession, ws, tabId, registry, lastSeenSeq);
|
|
57
79
|
return;
|
|
58
80
|
}
|
|
59
|
-
if (tryResumeFromDisk(ctx, ws, tabId, workingDir, registrySessionId, tabMap, registry)) {
|
|
81
|
+
if (tryResumeFromDisk(ctx, ws, tabId, workingDir, registrySessionId, tabMap, registry, lastSeenSeq)) {
|
|
60
82
|
return;
|
|
61
83
|
}
|
|
62
84
|
}
|
|
63
|
-
// 3. Create new session
|
|
64
|
-
|
|
85
|
+
// 3. Create new session. If the tab is already registered (no file on
|
|
86
|
+
// disk — tab is pending first prompt or file was deleted), reuse its
|
|
87
|
+
// sessionId so the tab keeps its identity across restarts.
|
|
88
|
+
const existingTab = registry.getTab(tabId);
|
|
89
|
+
const session = new ImprovisationSessionManager({
|
|
90
|
+
workingDir,
|
|
91
|
+
...(registrySessionId ? { sessionId: registrySessionId } : {}),
|
|
92
|
+
model: getModel(),
|
|
93
|
+
effortLevel: getEffortLevel(),
|
|
94
|
+
});
|
|
65
95
|
setupSessionListeners(ctx, session, ws, tabId);
|
|
66
96
|
const sessionId = session.getSessionInfo().sessionId;
|
|
67
97
|
ctx.sessions.set(sessionId, session);
|
|
68
98
|
if (tabMap) {
|
|
69
99
|
tabMap.set(tabId, sessionId);
|
|
70
100
|
}
|
|
71
|
-
registry.registerTab(tabId, sessionId, tabName);
|
|
101
|
+
registry.registerTab(tabId, sessionId, tabName || existingTab?.tabName);
|
|
72
102
|
const registeredTab = registry.getTab(tabId);
|
|
73
103
|
ctx.broadcastToAll({
|
|
74
104
|
type: 'tabCreated',
|
|
75
105
|
data: { tabId, tabName: registeredTab?.tabName || 'Chat', createdAt: registeredTab?.createdAt, order: registeredTab?.order, sessionInfo: session.getSessionInfo() }
|
|
76
106
|
});
|
|
107
|
+
// Fresh session (no disk/memory predecessor) has nothing to replay,
|
|
108
|
+
// but we still pass lastSeenSeq through so the web flag is consistent.
|
|
109
|
+
replayTabEventsSince(ctx, ws, tabId, lastSeenSeq);
|
|
77
110
|
ctx.send(ws, {
|
|
78
111
|
type: 'tabInitialized',
|
|
79
112
|
tabId,
|
|
80
|
-
data:
|
|
113
|
+
data: {
|
|
114
|
+
...session.getSessionInfo(),
|
|
115
|
+
...(lastSeenSeq !== undefined ? { resumedFromSeq: true } : {}),
|
|
116
|
+
}
|
|
81
117
|
});
|
|
82
118
|
}
|
|
83
|
-
export async function resumeHistoricalSession(ctx, ws, tabId, workingDir, historicalSessionId) {
|
|
119
|
+
export async function resumeHistoricalSession(ctx, ws, tabId, workingDir, historicalSessionId, rawData) {
|
|
84
120
|
const tabMap = ctx.connections.get(ws);
|
|
85
121
|
const registry = ctx.getRegistry(workingDir);
|
|
122
|
+
const lastSeenSeq = extractLastSeenSeq(rawData);
|
|
86
123
|
const existingSessionId = tabMap?.get(tabId);
|
|
87
124
|
if (existingSessionId) {
|
|
88
125
|
const existingSession = ctx.sessions.get(existingSessionId);
|
|
89
126
|
if (existingSession) {
|
|
90
|
-
reattachSession(ctx, existingSession, ws, tabId, registry);
|
|
127
|
+
reattachSession(ctx, existingSession, ws, tabId, registry, lastSeenSeq);
|
|
91
128
|
return;
|
|
92
129
|
}
|
|
93
130
|
}
|
|
@@ -95,7 +132,7 @@ export async function resumeHistoricalSession(ctx, ws, tabId, workingDir, histor
|
|
|
95
132
|
if (registrySessionId) {
|
|
96
133
|
const inMemorySession = ctx.sessions.get(registrySessionId);
|
|
97
134
|
if (inMemorySession) {
|
|
98
|
-
reattachSession(ctx, inMemorySession, ws, tabId, registry);
|
|
135
|
+
reattachSession(ctx, inMemorySession, ws, tabId, registry, lastSeenSeq);
|
|
99
136
|
return;
|
|
100
137
|
}
|
|
101
138
|
}
|
|
@@ -116,18 +153,19 @@ export async function resumeHistoricalSession(ctx, ws, tabId, workingDir, histor
|
|
|
116
153
|
tabMap.set(tabId, sessionId);
|
|
117
154
|
}
|
|
118
155
|
registry.registerTab(tabId, sessionId);
|
|
156
|
+
replayTabEventsSince(ctx, ws, tabId, lastSeenSeq);
|
|
119
157
|
ctx.send(ws, {
|
|
120
158
|
type: 'tabInitialized',
|
|
121
159
|
tabId,
|
|
122
160
|
data: {
|
|
123
161
|
...session.getSessionInfo(),
|
|
124
|
-
outputHistory: buildOutputHistory(session),
|
|
162
|
+
...(lastSeenSeq === undefined ? { outputHistory: buildOutputHistory(session) } : { resumedFromSeq: true }),
|
|
125
163
|
resumeFailed: isNewSession,
|
|
126
164
|
originalSessionId: isNewSession ? historicalSessionId : undefined
|
|
127
165
|
}
|
|
128
166
|
});
|
|
129
167
|
}
|
|
130
|
-
function reattachSession(ctx, session, ws, tabId, registry) {
|
|
168
|
+
function reattachSession(ctx, session, ws, tabId, registry, lastSeenSeq) {
|
|
131
169
|
setupSessionListeners(ctx, session, ws, tabId);
|
|
132
170
|
const tabMap = ctx.connections.get(ws);
|
|
133
171
|
const sessionId = session.getSessionInfo().sessionId;
|
|
@@ -141,12 +179,32 @@ function reattachSession(ctx, session, ws, tabId, registry) {
|
|
|
141
179
|
if (regTab.worktreeBranch)
|
|
142
180
|
ctx.gitBranches.set(tabId, regTab.worktreeBranch);
|
|
143
181
|
}
|
|
182
|
+
const worktreePath = ctx.gitDirectories.get(tabId);
|
|
183
|
+
const worktreeBranch = ctx.gitBranches.get(tabId);
|
|
184
|
+
// Fast path: the web already has local state (via Zustand), so just replay
|
|
185
|
+
// anything newer than `lastSeenSeq` and tell the client to skip the
|
|
186
|
+
// destructive reset in its tabInitialized handler.
|
|
187
|
+
if (lastSeenSeq !== undefined) {
|
|
188
|
+
replayTabEventsSince(ctx, ws, tabId, lastSeenSeq);
|
|
189
|
+
ctx.send(ws, {
|
|
190
|
+
type: 'tabInitialized',
|
|
191
|
+
tabId,
|
|
192
|
+
data: {
|
|
193
|
+
...session.getSessionInfo(),
|
|
194
|
+
resumedFromSeq: true,
|
|
195
|
+
isExecuting: session.isExecuting,
|
|
196
|
+
...(session.isExecuting && session.executionStartTimestamp ? { executionStartTimestamp: session.executionStartTimestamp } : {}),
|
|
197
|
+
...(worktreePath ? { worktreePath, worktreeBranch } : {}),
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// Cold-start reattach (no prior seq): send the full snapshot so the web
|
|
203
|
+
// can rebuild from scratch.
|
|
144
204
|
const outputHistory = buildOutputHistory(session);
|
|
145
205
|
const executionEvents = session.isExecuting
|
|
146
206
|
? session.getExecutionEventLog()
|
|
147
207
|
: undefined;
|
|
148
|
-
const worktreePath = ctx.gitDirectories.get(tabId);
|
|
149
|
-
const worktreeBranch = ctx.gitBranches.get(tabId);
|
|
150
208
|
ctx.send(ws, {
|
|
151
209
|
type: 'tabInitialized',
|
|
152
210
|
tabId,
|