codekin 0.6.0 → 0.6.2
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 +7 -4
- package/dist/assets/index-C8GlUCii.js +182 -0
- package/dist/assets/index-DgeUVGjz.css +1 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/server/dist/approval-manager.d.ts +7 -2
- package/server/dist/approval-manager.js +11 -3
- package/server/dist/approval-manager.js.map +1 -1
- package/server/dist/claude-process.js +11 -5
- package/server/dist/claude-process.js.map +1 -1
- package/server/dist/docs-routes.js +12 -5
- package/server/dist/docs-routes.js.map +1 -1
- package/server/dist/native-permissions.js +1 -1
- package/server/dist/native-permissions.js.map +1 -1
- package/server/dist/opencode-process.d.ts +16 -0
- package/server/dist/opencode-process.js +164 -7
- package/server/dist/opencode-process.js.map +1 -1
- package/server/dist/orchestrator-reports.js +9 -4
- package/server/dist/orchestrator-reports.js.map +1 -1
- package/server/dist/prompt-router.js +4 -0
- package/server/dist/prompt-router.js.map +1 -1
- package/server/dist/session-lifecycle.d.ts +1 -1
- package/server/dist/session-lifecycle.js +80 -20
- package/server/dist/session-lifecycle.js.map +1 -1
- package/server/dist/session-manager.d.ts +1 -1
- package/server/dist/session-manager.js +93 -61
- package/server/dist/session-manager.js.map +1 -1
- package/server/dist/session-naming.js +25 -2
- package/server/dist/session-naming.js.map +1 -1
- package/server/dist/session-persistence.js +4 -0
- package/server/dist/session-persistence.js.map +1 -1
- package/server/dist/session-restart-scheduler.d.ts +12 -2
- package/server/dist/session-restart-scheduler.js +27 -5
- package/server/dist/session-restart-scheduler.js.map +1 -1
- package/server/dist/session-routes.js +2 -2
- package/server/dist/session-routes.js.map +1 -1
- package/server/dist/tsconfig.tsbuildinfo +1 -1
- package/server/dist/types.d.ts +16 -1
- package/server/dist/types.js +0 -1
- package/server/dist/types.js.map +1 -1
- package/server/dist/upload-routes.js +8 -0
- package/server/dist/upload-routes.js.map +1 -1
- package/server/dist/webhook-config.d.ts +9 -0
- package/server/dist/webhook-config.js +41 -3
- package/server/dist/webhook-config.js.map +1 -1
- package/server/dist/webhook-github-setup.d.ts +48 -0
- package/server/dist/webhook-github-setup.js +172 -0
- package/server/dist/webhook-github-setup.js.map +1 -0
- package/server/dist/webhook-setup-routes.d.ts +14 -0
- package/server/dist/webhook-setup-routes.js +233 -0
- package/server/dist/webhook-setup-routes.js.map +1 -0
- package/server/dist/webhook-types.d.ts +65 -0
- package/server/dist/workflow-routes.js +1 -0
- package/server/dist/workflow-routes.js.map +1 -1
- package/server/dist/ws-server.js +46 -13
- package/server/dist/ws-server.js.map +1 -1
- package/server/workflows/pr-review.md +27 -0
- package/dist/assets/index-BvKzbtKg.css +0 -1
- package/dist/assets/index-D59Xr9pK.js +0 -182
|
@@ -36,6 +36,9 @@ export class SessionLifecycle {
|
|
|
36
36
|
clearTimeout(session._restartTimer);
|
|
37
37
|
session._restartTimer = undefined;
|
|
38
38
|
}
|
|
39
|
+
// Bump generation so any in-flight restart timers from a previous process
|
|
40
|
+
// become stale and no-op when they fire.
|
|
41
|
+
session._processGeneration = (session._processGeneration ?? 0) + 1;
|
|
39
42
|
// Validate that the working directory still exists. Worktree directories
|
|
40
43
|
// can be removed externally (cleanup, manual deletion, failed creation that
|
|
41
44
|
// left a stale placeholder). Fall back to groupDir (the original repo) so
|
|
@@ -149,21 +152,24 @@ export class SessionLifecycle {
|
|
|
149
152
|
waitForReady(sessionId, timeoutMs = 30_000) {
|
|
150
153
|
const session = this.deps.getSession(sessionId);
|
|
151
154
|
if (!session?.claudeProcess)
|
|
152
|
-
return Promise.resolve();
|
|
155
|
+
return Promise.resolve(false);
|
|
153
156
|
// If the process is already fully initialized, resolve immediately.
|
|
154
157
|
// Uses isReady() which accounts for provider differences: Claude is ready
|
|
155
158
|
// as soon as alive (stdin buffered), OpenCode needs alive + opencodeSessionId.
|
|
156
159
|
if (session.claudeProcess.isReady())
|
|
157
|
-
return Promise.resolve();
|
|
160
|
+
return Promise.resolve(true);
|
|
158
161
|
return new Promise((resolve) => {
|
|
159
|
-
const
|
|
162
|
+
const onReady = () => { clearTimeout(timer); cp.removeListener('exit', onExit); resolve(true); };
|
|
163
|
+
const onExit = () => { clearTimeout(timer); cp.removeListener('system_init', onReady); resolve(false); };
|
|
164
|
+
const cp = session.claudeProcess;
|
|
160
165
|
const timer = setTimeout(() => {
|
|
161
166
|
console.warn(`[waitForReady] Timed out waiting for system_init on ${sessionId} after ${timeoutMs}ms`);
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
cp.removeListener('system_init', onReady);
|
|
168
|
+
cp.removeListener('exit', onExit);
|
|
169
|
+
resolve(false);
|
|
164
170
|
}, timeoutMs);
|
|
165
|
-
|
|
166
|
-
|
|
171
|
+
cp.once('system_init', onReady);
|
|
172
|
+
cp.once('exit', onExit); // fail-fast if process dies during init
|
|
167
173
|
});
|
|
168
174
|
}
|
|
169
175
|
/**
|
|
@@ -228,18 +234,32 @@ export class SessionLifecycle {
|
|
|
228
234
|
const producedOutput = proc.hadOutput ? proc.hadOutput() : true;
|
|
229
235
|
const spawnFailed = proc.hasSpawnFailed ? proc.hasSpawnFailed() : false;
|
|
230
236
|
// If the process exited without ever producing stdout output, --resume
|
|
231
|
-
// hung on a broken/stale session.
|
|
232
|
-
//
|
|
233
|
-
//
|
|
237
|
+
// likely hung on a broken/stale session. But one failure could be transient
|
|
238
|
+
// (slow startup, brief network blip), so we track consecutive no-output exits
|
|
239
|
+
// and only clear claudeSessionId after 2 consecutive failures. This avoids
|
|
240
|
+
// silent context loss from a single unlucky exit.
|
|
234
241
|
// Exception: if spawn() itself failed (ENOENT/EACCES), the process never
|
|
235
|
-
// started — the session data on disk is fine, so preserve the ID
|
|
236
|
-
|
|
237
|
-
console.warn(`[restart] Session ${sessionId} produced no output before exit — clearing claudeSessionId to force fresh session`);
|
|
238
|
-
session.claudeSessionId = null;
|
|
239
|
-
}
|
|
242
|
+
// started — the session data on disk is fine, so preserve the ID and don't
|
|
243
|
+
// count it.
|
|
240
244
|
if (spawnFailed) {
|
|
241
245
|
console.warn(`[restart] Session ${sessionId} spawn failed (binary not found) — preserving claudeSessionId for retry`);
|
|
242
246
|
}
|
|
247
|
+
else if (!producedOutput && session.claudeSessionId) {
|
|
248
|
+
session._noOutputExitCount = (session._noOutputExitCount ?? 0) + 1;
|
|
249
|
+
const NO_OUTPUT_THRESHOLD = 2;
|
|
250
|
+
if (session._noOutputExitCount >= NO_OUTPUT_THRESHOLD) {
|
|
251
|
+
console.warn(`[restart] Session ${sessionId} produced no output ${session._noOutputExitCount} consecutive times — clearing claudeSessionId to force fresh session`);
|
|
252
|
+
session.claudeSessionId = null;
|
|
253
|
+
session._noOutputExitCount = 0;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
console.warn(`[restart] Session ${sessionId} produced no output before exit (${session._noOutputExitCount}/${NO_OUTPUT_THRESHOLD}) — will retry with same session ID`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else if (producedOutput) {
|
|
260
|
+
// Successful output resets the consecutive no-output counter
|
|
261
|
+
session._noOutputExitCount = 0;
|
|
262
|
+
}
|
|
243
263
|
// Before evaluating restart, check if the working directory still exists.
|
|
244
264
|
// If a worktree was deleted mid-session, fall back to the original repo
|
|
245
265
|
// instead of entering a guaranteed restart death loop where every attempt
|
|
@@ -286,7 +306,27 @@ export class SessionLifecycle {
|
|
|
286
306
|
restartCount: session.restartCount,
|
|
287
307
|
lastRestartAt: session.lastRestartAt,
|
|
288
308
|
stoppedByUser: session._stoppedByUser || sessionConflict,
|
|
309
|
+
exitCode: code,
|
|
310
|
+
exitSignal: signal,
|
|
311
|
+
lifetimeRestarts: session._lifetimeRestarts,
|
|
289
312
|
});
|
|
313
|
+
if (action.kind === 'non_retryable') {
|
|
314
|
+
for (const listener of this.deps.exitListeners) {
|
|
315
|
+
try {
|
|
316
|
+
listener(sessionId, code, signal, false);
|
|
317
|
+
}
|
|
318
|
+
catch { /* listener error */ }
|
|
319
|
+
}
|
|
320
|
+
const msg = {
|
|
321
|
+
type: 'system_message',
|
|
322
|
+
subtype: 'error',
|
|
323
|
+
text: `Claude process exited with non-retryable error (code=${action.exitCode}). This usually indicates a configuration or argument problem. Please check your session settings and restart manually.`,
|
|
324
|
+
};
|
|
325
|
+
this.deps.addToHistory(session, msg);
|
|
326
|
+
this.deps.broadcast(session, msg);
|
|
327
|
+
this.deps.broadcast(session, { type: 'exit', code: code ?? -1, signal });
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
290
330
|
if (action.kind === 'stopped_by_user') {
|
|
291
331
|
for (const listener of this.deps.exitListeners) {
|
|
292
332
|
try {
|
|
@@ -306,6 +346,7 @@ export class SessionLifecycle {
|
|
|
306
346
|
if (action.kind === 'restart') {
|
|
307
347
|
session.restartCount = action.updatedCount;
|
|
308
348
|
session.lastRestartAt = action.updatedLastRestartAt;
|
|
349
|
+
session._lifetimeRestarts = action.updatedLifetimeCount;
|
|
309
350
|
for (const listener of this.deps.exitListeners) {
|
|
310
351
|
try {
|
|
311
352
|
listener(sessionId, code, signal, true);
|
|
@@ -322,24 +363,43 @@ export class SessionLifecycle {
|
|
|
322
363
|
// Clear any previously scheduled restart to prevent duplicate spawns
|
|
323
364
|
if (session._restartTimer)
|
|
324
365
|
clearTimeout(session._restartTimer);
|
|
366
|
+
const generationAtSchedule = session._processGeneration ?? 0;
|
|
325
367
|
session._restartTimer = setTimeout(() => {
|
|
326
368
|
session._restartTimer = undefined;
|
|
327
|
-
// Verify session still exists
|
|
369
|
+
// Verify session still exists, hasn't been stopped, and no newer
|
|
370
|
+
// process was started (by sendInput, manual restart, etc.) while
|
|
371
|
+
// this timer was pending.
|
|
328
372
|
if (!this.deps.hasSession(sessionId) || session._stoppedByUser)
|
|
329
373
|
return;
|
|
374
|
+
if (session._processGeneration !== generationAtSchedule) {
|
|
375
|
+
console.log(`[restart] Skipping stale restart timer for session ${sessionId} (generation ${generationAtSchedule} → ${session._processGeneration})`);
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
330
378
|
// startClaude uses --resume when claudeSessionId exists, so the CLI
|
|
331
379
|
// picks up the full conversation history from the JSONL automatically.
|
|
332
380
|
this.startClaude(sessionId);
|
|
333
381
|
// Fallback: if claudeSessionId was already null (fresh session that
|
|
334
382
|
// crashed before system_init), inject a context summary so the new
|
|
335
383
|
// session has some awareness of prior conversation.
|
|
336
|
-
if (!session.claudeSessionId && session.claudeProcess
|
|
337
|
-
|
|
384
|
+
if (!session.claudeSessionId && session.claudeProcess) {
|
|
385
|
+
const pendingInput = session._lastUserInput;
|
|
386
|
+
const inputAge = session._lastUserInputAt ? Date.now() - session._lastUserInputAt : Infinity;
|
|
387
|
+
const hasPendingInput = pendingInput && inputAge < 60_000;
|
|
388
|
+
if (session.outputHistory.length > 0) {
|
|
338
389
|
const context = this.deps.buildSessionContext(session);
|
|
339
390
|
if (context) {
|
|
340
|
-
|
|
391
|
+
const msg = hasPendingInput
|
|
392
|
+
? context + '\n\n' + pendingInput
|
|
393
|
+
: context + '\n\n[Session resumed after process restart. Continue where you left off. If you were in the middle of a task, resume it.]';
|
|
394
|
+
session.claudeProcess?.sendMessage(msg);
|
|
395
|
+
return;
|
|
341
396
|
}
|
|
342
|
-
}
|
|
397
|
+
}
|
|
398
|
+
// No output history but pending input (brand new session that
|
|
399
|
+
// crashed before responding) — re-send the user's message.
|
|
400
|
+
if (hasPendingInput) {
|
|
401
|
+
session.claudeProcess?.sendMessage(pendingInput);
|
|
402
|
+
}
|
|
343
403
|
}
|
|
344
404
|
}, action.delayMs);
|
|
345
405
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -186,7 +186,7 @@ export declare class SessionManager {
|
|
|
186
186
|
* Wait for a session's Claude process to emit its system_init event.
|
|
187
187
|
* Delegates to SessionLifecycle.
|
|
188
188
|
*/
|
|
189
|
-
waitForReady(sessionId: string, timeoutMs?: number): Promise<
|
|
189
|
+
waitForReady(sessionId: string, timeoutMs?: number): Promise<boolean>;
|
|
190
190
|
/** Broadcast a message and add it to the session's output history. */
|
|
191
191
|
private broadcastAndHistory;
|
|
192
192
|
/**
|
|
@@ -57,10 +57,10 @@ const API_RETRY_PATTERNS = [
|
|
|
57
57
|
/internal server error/i,
|
|
58
58
|
/overloaded/i,
|
|
59
59
|
/rate.?limit/i,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
/\b529\b/,
|
|
61
|
+
/\b500\b/,
|
|
62
|
+
/\b502\b/,
|
|
63
|
+
/\b503\b/,
|
|
64
64
|
];
|
|
65
65
|
/** Sources that represent headless (non-interactive) sessions managed by their own lifecycles. */
|
|
66
66
|
const HEADLESS_SOURCES = new Set(['webhook', 'workflow', 'stepflow', 'agent', 'orchestrator']);
|
|
@@ -264,11 +264,15 @@ export class SessionManager {
|
|
|
264
264
|
restartCount: 0,
|
|
265
265
|
lastRestartAt: null,
|
|
266
266
|
_stoppedByUser: false,
|
|
267
|
+
_isStarting: false,
|
|
267
268
|
_wasActiveBeforeRestart: false,
|
|
268
269
|
_apiRetry: { count: 0 },
|
|
269
270
|
_turnCount: 0,
|
|
270
271
|
_claudeTurnCount: 0,
|
|
271
272
|
_namingAttempts: 0,
|
|
273
|
+
_processGeneration: 0,
|
|
274
|
+
_noOutputExitCount: 0,
|
|
275
|
+
_lifetimeRestarts: 0,
|
|
272
276
|
isProcessing: false,
|
|
273
277
|
pendingControlRequests: new Map(),
|
|
274
278
|
pendingToolApprovals: new Map(),
|
|
@@ -610,6 +614,7 @@ export class SessionManager {
|
|
|
610
614
|
connectedClients: s.clients.size,
|
|
611
615
|
lastActivity: new Date(s._lastActivityAt).toISOString(),
|
|
612
616
|
source: s.source,
|
|
617
|
+
provider: s.provider,
|
|
613
618
|
};
|
|
614
619
|
}
|
|
615
620
|
list() {
|
|
@@ -670,6 +675,8 @@ export class SessionManager {
|
|
|
670
675
|
this.clientSessionMap.delete(ws);
|
|
671
676
|
// If no clients remain, wait a grace period before auto-denying.
|
|
672
677
|
// This prevents false denials when the user is just refreshing the page.
|
|
678
|
+
// The grace period must be long enough for the client to complete its
|
|
679
|
+
// reconnect flow: zombie retry pings (up to 6s) + auth check + WS handshake.
|
|
673
680
|
if (session.clients.size === 0) {
|
|
674
681
|
if (session._leaveGraceTimer)
|
|
675
682
|
clearTimeout(session._leaveGraceTimer);
|
|
@@ -693,7 +700,7 @@ export class SessionManager {
|
|
|
693
700
|
session.pendingToolApprovals.clear();
|
|
694
701
|
}
|
|
695
702
|
}
|
|
696
|
-
},
|
|
703
|
+
}, 10_000);
|
|
697
704
|
}
|
|
698
705
|
}
|
|
699
706
|
}
|
|
@@ -756,7 +763,7 @@ export class SessionManager {
|
|
|
756
763
|
.filter((m) => m.type === 'output')
|
|
757
764
|
.reduce((sum, m) => sum + m.data.length, 0);
|
|
758
765
|
if (totalOutputLength < 150)
|
|
759
|
-
return;
|
|
766
|
+
return; // Too short to be meaningful session output
|
|
760
767
|
// If session was never named (still has hub: prefix), derive a name from the
|
|
761
768
|
// first user message or fall back to a short ID-based placeholder.
|
|
762
769
|
let archiveName = session.name;
|
|
@@ -817,11 +824,10 @@ export class SessionManager {
|
|
|
817
824
|
}
|
|
818
825
|
onSystemInit(cp, session, model) {
|
|
819
826
|
session.claudeSessionId = cp.getSessionId();
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
}
|
|
827
|
+
session._lastReportedModel = model;
|
|
828
|
+
// Always broadcast — this is the single "session is ready" notification.
|
|
829
|
+
// The text includes the model so the user knows which model is active.
|
|
830
|
+
this.broadcastAndHistory(session, { type: 'system_message', subtype: 'init', text: `Model: ${model}`, model });
|
|
825
831
|
}
|
|
826
832
|
onTextEvent(session, sessionId, text) {
|
|
827
833
|
this.broadcastAndHistory(session, { type: 'output', data: text });
|
|
@@ -960,6 +966,7 @@ export class SessionManager {
|
|
|
960
966
|
// Suppress noise from orchestrator/agent sessions
|
|
961
967
|
if ((session.source === 'orchestrator' || session.source === 'agent') && !isError) {
|
|
962
968
|
const turnText = this.extractCurrentTurnText(session);
|
|
969
|
+
// Short canned responses like "no response requested" — skip archiving
|
|
963
970
|
if (turnText && turnText.length < 80 && /^(no response requested|please approve|nothing to do|no action needed|acknowledged)[.!]?$/i.test(turnText.trim())) {
|
|
964
971
|
this.stripCurrentTurnOutput(session);
|
|
965
972
|
console.log(`[noise-filter] suppressed orchestrator noise: "${turnText.trim().slice(0, 60)}"`);
|
|
@@ -998,47 +1005,30 @@ export class SessionManager {
|
|
|
998
1005
|
session._lastActivityAt = Date.now();
|
|
999
1006
|
// Reset stopped-by-user flag so idle-reaped sessions can auto-start
|
|
1000
1007
|
session._stoppedByUser = false;
|
|
1008
|
+
// --- Phase 1: ensure process is alive ---
|
|
1001
1009
|
if (!session.claudeProcess?.isAlive()) {
|
|
1010
|
+
// Race guard: prevent concurrent startClaude calls when multiple sendInput
|
|
1011
|
+
// requests arrive for an inactive session
|
|
1012
|
+
if (session._isStarting)
|
|
1013
|
+
return;
|
|
1014
|
+
session._isStarting = true;
|
|
1002
1015
|
// Claude not running (e.g. after server restart or idle reap) — auto-start first.
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
this.startClaude(sessionId);
|
|
1006
|
-
// If we have a saved claudeSessionId, Claude CLI resumes with full
|
|
1007
|
-
// conversation history from its own session storage — no need for our
|
|
1008
|
-
// lossy 4000-char context summary. Only fall back to buildSessionContext
|
|
1009
|
-
// for sessions without a saved Claude session ID.
|
|
1010
|
-
if (!session.claudeSessionId) {
|
|
1011
|
-
const context = this.buildSessionContext(session);
|
|
1012
|
-
if (context) {
|
|
1013
|
-
const combined = context + '\n\n' + data;
|
|
1014
|
-
session._lastUserInput = combined;
|
|
1015
|
-
session._lastUserInputAt = Date.now();
|
|
1016
|
-
session._apiRetry.count = 0;
|
|
1017
|
-
if (!session.isProcessing) {
|
|
1018
|
-
session.isProcessing = true;
|
|
1019
|
-
this._globalBroadcast?.({ type: 'sessions_updated' });
|
|
1020
|
-
}
|
|
1021
|
-
if (session.claudeProcess && !session.claudeProcess.isReady()) {
|
|
1022
|
-
void this.waitForReady(sessionId).then(() => session.claudeProcess?.sendMessage(combined));
|
|
1023
|
-
}
|
|
1024
|
-
else {
|
|
1025
|
-
session.claudeProcess?.sendMessage(combined);
|
|
1026
|
-
}
|
|
1027
|
-
return;
|
|
1028
|
-
}
|
|
1016
|
+
try {
|
|
1017
|
+
this.startClaude(sessionId);
|
|
1029
1018
|
}
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1019
|
+
finally {
|
|
1020
|
+
session._isStarting = false;
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
// --- Phase 2: determine message content (with context injection if needed) ---
|
|
1024
|
+
let messageToSend = data;
|
|
1025
|
+
// If we auto-started above and have no saved claudeSessionId, Claude CLI
|
|
1026
|
+
// starts a fresh session without conversation history. Inject a context
|
|
1027
|
+
// summary so the new process has awareness of prior conversation.
|
|
1028
|
+
if (!session.claudeSessionId) {
|
|
1029
|
+
const context = this.buildSessionContext(session);
|
|
1030
|
+
if (context) {
|
|
1031
|
+
messageToSend = context + '\n\n' + data;
|
|
1042
1032
|
}
|
|
1043
1033
|
}
|
|
1044
1034
|
// Track turn count; retry naming on subsequent interactions if still unnamed
|
|
@@ -1049,14 +1039,27 @@ export class SessionManager {
|
|
|
1049
1039
|
// Session still unnamed after initial attempt — retry on user interaction
|
|
1050
1040
|
this.retrySessionNamingOnInteraction(sessionId);
|
|
1051
1041
|
}
|
|
1052
|
-
session._lastUserInput =
|
|
1042
|
+
session._lastUserInput = messageToSend;
|
|
1053
1043
|
session._lastUserInputAt = Date.now();
|
|
1044
|
+
if (!session._namingUserInput)
|
|
1045
|
+
session._namingUserInput = data;
|
|
1054
1046
|
session._apiRetry.count = 0;
|
|
1055
1047
|
if (!session.isProcessing) {
|
|
1056
1048
|
session.isProcessing = true;
|
|
1057
1049
|
this._globalBroadcast?.({ type: 'sessions_updated' });
|
|
1058
1050
|
}
|
|
1059
|
-
|
|
1051
|
+
// --- Phase 3: send, waiting for readiness if needed ---
|
|
1052
|
+
if (session.claudeProcess && !session.claudeProcess.isReady()) {
|
|
1053
|
+
void this.waitForReady(sessionId).then((ready) => {
|
|
1054
|
+
if (ready)
|
|
1055
|
+
session.claudeProcess?.sendMessage(messageToSend);
|
|
1056
|
+
// If not ready (process exited), message stays in _lastUserInput
|
|
1057
|
+
// and will be re-sent on auto-restart
|
|
1058
|
+
});
|
|
1059
|
+
}
|
|
1060
|
+
else {
|
|
1061
|
+
session.claudeProcess?.sendMessage(messageToSend);
|
|
1062
|
+
}
|
|
1060
1063
|
}
|
|
1061
1064
|
/**
|
|
1062
1065
|
* Route a user's prompt response to the correct handler.
|
|
@@ -1085,15 +1088,22 @@ export class SessionManager {
|
|
|
1085
1088
|
return true;
|
|
1086
1089
|
session.provider = provider;
|
|
1087
1090
|
session.claudeSessionId = null;
|
|
1091
|
+
// Clear any pending restart timer from a prior crash to prevent a stale
|
|
1092
|
+
// timer from spawning a second process after we restart below.
|
|
1093
|
+
if (session._restartTimer) {
|
|
1094
|
+
clearTimeout(session._restartTimer);
|
|
1095
|
+
session._restartTimer = undefined;
|
|
1096
|
+
}
|
|
1088
1097
|
this.persistToDiskDebounced();
|
|
1089
1098
|
if (session.claudeProcess?.isAlive()) {
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
if (this.sessions.has(sessionId)
|
|
1099
|
+
// Use stopClaudeAndWait to ensure the old process fully exits before
|
|
1100
|
+
// spawning a new one — avoids concurrent processes in the same worktree.
|
|
1101
|
+
void this.stopClaudeAndWait(sessionId).then(() => {
|
|
1102
|
+
if (this.sessions.has(sessionId)) {
|
|
1103
|
+
session._stoppedByUser = false;
|
|
1094
1104
|
this.startClaude(sessionId);
|
|
1095
1105
|
}
|
|
1096
|
-
}
|
|
1106
|
+
});
|
|
1097
1107
|
}
|
|
1098
1108
|
return true;
|
|
1099
1109
|
}
|
|
@@ -1103,6 +1113,12 @@ export class SessionManager {
|
|
|
1103
1113
|
if (!session)
|
|
1104
1114
|
return false;
|
|
1105
1115
|
session.model = model || undefined;
|
|
1116
|
+
// Clear any pending restart timer from a prior crash to prevent a stale
|
|
1117
|
+
// timer from spawning a second process after we restart below.
|
|
1118
|
+
if (session._restartTimer) {
|
|
1119
|
+
clearTimeout(session._restartTimer);
|
|
1120
|
+
session._restartTimer = undefined;
|
|
1121
|
+
}
|
|
1106
1122
|
this.persistToDiskDebounced();
|
|
1107
1123
|
// Restart Claude with the new model if it's running.
|
|
1108
1124
|
// Use stopClaudeAndWait to ensure the old process fully exits before
|
|
@@ -1124,6 +1140,12 @@ export class SessionManager {
|
|
|
1124
1140
|
return false;
|
|
1125
1141
|
const previousMode = session.permissionMode;
|
|
1126
1142
|
session.permissionMode = permissionMode;
|
|
1143
|
+
// Clear any pending restart timer from a prior crash to prevent a stale
|
|
1144
|
+
// timer from spawning a second process after we restart below.
|
|
1145
|
+
if (session._restartTimer) {
|
|
1146
|
+
clearTimeout(session._restartTimer);
|
|
1147
|
+
session._restartTimer = undefined;
|
|
1148
|
+
}
|
|
1127
1149
|
this.persistToDiskDebounced();
|
|
1128
1150
|
// Audit log for dangerous mode changes
|
|
1129
1151
|
if (permissionMode === 'bypassPermissions') {
|
|
@@ -1245,7 +1267,7 @@ export class SessionManager {
|
|
|
1245
1267
|
return null;
|
|
1246
1268
|
// Cap total context size
|
|
1247
1269
|
let context = lines.join('\n');
|
|
1248
|
-
if (context.length > 4000) {
|
|
1270
|
+
if (context.length > 4000) { // Truncate to keep context injection reasonable
|
|
1249
1271
|
// Keep the most recent exchanges
|
|
1250
1272
|
while (context.length > 4000 && lines.length > 2) {
|
|
1251
1273
|
lines.shift();
|
|
@@ -1355,13 +1377,23 @@ export class SessionManager {
|
|
|
1355
1377
|
this._approvalManager.persistRepoApprovals();
|
|
1356
1378
|
// Kill all Claude child processes and wait for them to exit so their
|
|
1357
1379
|
// session locks are released before the next server start.
|
|
1380
|
+
// Mark all sessions as stopped-by-user and remove exit listeners BEFORE
|
|
1381
|
+
// sending SIGTERM — otherwise handleClaudeExit fires, sees stoppedByUser
|
|
1382
|
+
// is false, and injects a spurious "Restarting (attempt 1/3)" message.
|
|
1358
1383
|
const exitPromises = [];
|
|
1359
1384
|
for (const session of this.sessions.values()) {
|
|
1360
1385
|
if (session.claudeProcess?.isAlive()) {
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
session.
|
|
1364
|
-
|
|
1386
|
+
session._stoppedByUser = true;
|
|
1387
|
+
if (session._restartTimer) {
|
|
1388
|
+
clearTimeout(session._restartTimer);
|
|
1389
|
+
session._restartTimer = undefined;
|
|
1390
|
+
}
|
|
1391
|
+
if (session._apiRetry?.timer)
|
|
1392
|
+
clearTimeout(session._apiRetry.timer);
|
|
1393
|
+
const cp = session.claudeProcess;
|
|
1394
|
+
cp.removeAllListeners();
|
|
1395
|
+
exitPromises.push(cp.waitForExit());
|
|
1396
|
+
cp.stop();
|
|
1365
1397
|
}
|
|
1366
1398
|
}
|
|
1367
1399
|
this.archive.shutdown();
|