@telora/daemon 0.14.1 → 0.14.3
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/build-info.json +2 -2
- package/dist/completion-handler.d.ts.map +1 -1
- package/dist/completion-handler.js +3 -0
- package/dist/completion-handler.js.map +1 -1
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +2 -0
- package/dist/control-state.js.map +1 -1
- package/dist/crash-recovery-cleanup.d.ts.map +1 -1
- package/dist/crash-recovery-cleanup.js +1 -0
- package/dist/crash-recovery-cleanup.js.map +1 -1
- package/dist/crash-recovery.d.ts.map +1 -1
- package/dist/crash-recovery.js +2 -0
- package/dist/crash-recovery.js.map +1 -1
- package/dist/qa-orchestrator.d.ts.map +1 -1
- package/dist/qa-orchestrator.js +7 -5
- package/dist/qa-orchestrator.js.map +1 -1
- package/dist/queries/schemas.d.ts +4 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +1 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts +1 -0
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +2 -0
- package/dist/queries/sessions.js.map +1 -1
- package/dist/session-lifecycle.d.ts.map +1 -1
- package/dist/session-lifecycle.js +2 -0
- package/dist/session-lifecycle.js.map +1 -1
- package/dist/spawner-lifecycle.d.ts +43 -0
- package/dist/spawner-lifecycle.d.ts.map +1 -0
- package/dist/spawner-lifecycle.js +152 -0
- package/dist/spawner-lifecycle.js.map +1 -0
- package/dist/spawner-liveness.d.ts.map +1 -1
- package/dist/spawner-liveness.js +1 -0
- package/dist/spawner-liveness.js.map +1 -1
- package/dist/spawner-stream-handlers.d.ts +67 -0
- package/dist/spawner-stream-handlers.d.ts.map +1 -0
- package/dist/spawner-stream-handlers.js +193 -0
- package/dist/spawner-stream-handlers.js.map +1 -0
- package/dist/spawner.d.ts +15 -36
- package/dist/spawner.d.ts.map +1 -1
- package/dist/spawner.js +29 -327
- package/dist/spawner.js.map +1 -1
- package/dist/strategy-completion-event.d.ts +29 -0
- package/dist/strategy-completion-event.d.ts.map +1 -0
- package/dist/strategy-completion-event.js +69 -0
- package/dist/strategy-completion-event.js.map +1 -0
- package/dist/strategy-completion.d.ts.map +1 -1
- package/dist/strategy-completion.js +8 -0
- package/dist/strategy-completion.js.map +1 -1
- package/dist/strategy-executor.d.ts +8 -45
- package/dist/strategy-executor.d.ts.map +1 -1
- package/dist/strategy-executor.js +24 -422
- package/dist/strategy-executor.js.map +1 -1
- package/dist/strategy-spawn-helpers.d.ts +67 -0
- package/dist/strategy-spawn-helpers.d.ts.map +1 -0
- package/dist/strategy-spawn-helpers.js +160 -0
- package/dist/strategy-spawn-helpers.js.map +1 -0
- package/dist/strategy-team-lifecycle.d.ts +50 -0
- package/dist/strategy-team-lifecycle.d.ts.map +1 -0
- package/dist/strategy-team-lifecycle.js +218 -0
- package/dist/strategy-team-lifecycle.js.map +1 -0
- package/dist/types/session.d.ts +2 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +1 -1
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.d.ts +36 -0
- package/dist/unified-engine-lifecycle.d.ts.map +1 -0
- package/dist/unified-engine-lifecycle.js +250 -0
- package/dist/unified-engine-lifecycle.js.map +1 -0
- package/dist/unified-shell-config.d.ts +25 -0
- package/dist/unified-shell-config.d.ts.map +1 -1
- package/dist/unified-shell-config.js +45 -0
- package/dist/unified-shell-config.js.map +1 -1
- package/dist/unified-shell-status.d.ts.map +1 -1
- package/dist/unified-shell-status.js +16 -2
- package/dist/unified-shell-status.js.map +1 -1
- package/dist/unified-shell.d.ts +2 -15
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +18 -619
- package/dist/unified-shell.js.map +1 -1
- package/package.json +1 -1
package/dist/spawner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../src/spawner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../src/spawner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAmB,YAAY,EAAY,MAAM,YAAY,CAAC;AAOnG,OAAO,EAAuE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAiBjI,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAExD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAE5D;AAID,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,oCAAoC;AACpC,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,mCAAmC;AACnC,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,+DAA+D;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,6CAA6C;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAmI3E;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Mf"}
|
package/dist/spawner.js
CHANGED
|
@@ -8,23 +8,24 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Each agent runs in an isolated git worktree created from the integration branch.
|
|
10
10
|
* On successful completion, the agent's branch is merged into integration.
|
|
11
|
+
*
|
|
12
|
+
* Stream/process handling: ./spawner-stream-handlers.ts
|
|
13
|
+
* Lifecycle management: ./spawner-lifecycle.ts
|
|
11
14
|
*/
|
|
12
15
|
import { spawn } from 'node:child_process';
|
|
13
16
|
import { mkdirSync, existsSync } from 'node:fs';
|
|
14
17
|
import { join } from 'node:path';
|
|
15
|
-
import { runGitSync } from './git-types.js';
|
|
16
18
|
import { updateSession, createSession, getDeliveryContext, fetchEffectiveWorkflow, getResolvedTransitionBlockForDelivery, reportGitState } from './supabase.js';
|
|
17
19
|
import { buildSpawnEnvironment } from './spawn-environment.js';
|
|
18
20
|
import { sanitizeGitSegment } from './git-utils.js';
|
|
19
21
|
import { createWorktree, removeWorktree, syncIntegrationWithMain } from './git.js';
|
|
20
22
|
import { getRunningAgents as _getRunningAgents, recordActivity } from './agent-state.js';
|
|
21
23
|
import { getStageByName } from './workflow-engine.js';
|
|
22
|
-
import { StreamJsonParser, sendMessage, buildStreamJsonArgs,
|
|
24
|
+
import { StreamJsonParser, sendMessage, buildStreamJsonArgs, createLogStream } from '@telora/daemon-core';
|
|
23
25
|
import { CompletionDetector } from './completion-detector.js';
|
|
24
26
|
import { buildDeliveryPrompt } from './prompt-builder.js';
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import { ActivityTracker } from './activity-tracker.js';
|
|
27
|
+
import { attachStreamHandlers, attachProcessHandlers, safeSendSignal, safeCloseStdin } from './spawner-stream-handlers.js';
|
|
28
|
+
import { terminateAgent as _terminateAgent, terminateAllAgents as _terminateAllAgents, isAgentRunning as _isAgentRunning, getRunningAgentCount as _getRunningAgentCount, } from './spawner-lifecycle.js';
|
|
28
29
|
// Running agents map: shared via agent-state module
|
|
29
30
|
const runningAgents = _getRunningAgents();
|
|
30
31
|
// Resource governor (optional, injected by StrategyEngine)
|
|
@@ -40,28 +41,28 @@ export function initGovernor(gov) {
|
|
|
40
41
|
export function getRunningAgents() {
|
|
41
42
|
return runningAgents;
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
process.kill(pid, signal);
|
|
49
|
-
}
|
|
50
|
-
catch (e) {
|
|
51
|
-
console.debug(`[spawner] safeSendSignal(${pid}, ${signal}) failed (process may have exited):`, e.message);
|
|
52
|
-
}
|
|
44
|
+
// ── Re-exports with module-level state bound ────────────────────────
|
|
45
|
+
/** Terminate a running agent. */
|
|
46
|
+
export function terminateAgent(sessionId) {
|
|
47
|
+
return _terminateAgent(sessionId, runningAgents);
|
|
53
48
|
}
|
|
54
|
-
/**
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
function safeCloseStdin(stdin) {
|
|
58
|
-
try {
|
|
59
|
-
stdin.end();
|
|
60
|
-
}
|
|
61
|
-
catch (e) {
|
|
62
|
-
console.debug('[spawner] safeCloseStdin failed (stdin may already be closed):', e.message);
|
|
63
|
-
}
|
|
49
|
+
/** Terminate all running agents. */
|
|
50
|
+
export function terminateAllAgents() {
|
|
51
|
+
_terminateAllAgents(runningAgents);
|
|
64
52
|
}
|
|
53
|
+
/** Check if an agent is running for a session. */
|
|
54
|
+
export function isAgentRunning(sessionId) {
|
|
55
|
+
return _isAgentRunning(sessionId, runningAgents);
|
|
56
|
+
}
|
|
57
|
+
/** Get count of running agents. */
|
|
58
|
+
export function getRunningAgentCount() {
|
|
59
|
+
return _getRunningAgentCount(runningAgents);
|
|
60
|
+
}
|
|
61
|
+
/** Re-export spawnResolutionAgent (no module state needed). */
|
|
62
|
+
export { spawnResolutionAgent } from './spawner-lifecycle.js';
|
|
63
|
+
/** Re-export stale agent liveness checks. */
|
|
64
|
+
export { isProcessAlive, checkAgentLiveness } from './spawner-liveness.js';
|
|
65
|
+
// ── Spawn helpers ───────────────────────────────────────────────────
|
|
65
66
|
/**
|
|
66
67
|
* Build Claude Code CLI arguments for stream-json I/O.
|
|
67
68
|
*
|
|
@@ -157,6 +158,7 @@ function generateBranchName(role, deliveryName) {
|
|
|
157
158
|
const sanitizedDeliveryName = sanitizeGitSegment(deliveryName);
|
|
158
159
|
return `agent/${sanitizedRoleName}/${sanitizedDeliveryName}`;
|
|
159
160
|
}
|
|
161
|
+
// ── Core spawn function ─────────────────────────────────────────────
|
|
160
162
|
/**
|
|
161
163
|
* Spawn a Claude Code agent to work on a delivery.
|
|
162
164
|
*
|
|
@@ -329,7 +331,7 @@ export async function spawnAgentForDelivery(config, deliveryId, role, strategyId
|
|
|
329
331
|
const activityTracker = attachStreamHandlers({
|
|
330
332
|
proc, streamParser, completionDetector, runningAgent,
|
|
331
333
|
deliveryId, deliveryName: context.delivery.name, branchName,
|
|
332
|
-
stdoutLogStream, jsonlStream,
|
|
334
|
+
stdoutLogStream, jsonlStream, runningAgents,
|
|
333
335
|
});
|
|
334
336
|
// Send the initial prompt via stdin as stream-json
|
|
335
337
|
sendMessage(proc.stdin, prompt);
|
|
@@ -348,307 +350,7 @@ export async function spawnAgentForDelivery(config, deliveryId, role, strategyId
|
|
|
348
350
|
branchName, worktreePath, deliveryId,
|
|
349
351
|
sessionId: session.id, completionDetector, activityTracker,
|
|
350
352
|
stdoutLogStream, stderrStream, jsonlStream,
|
|
351
|
-
getTimedOut,
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Attach stream parser, logging, activity tracking, and completion detection
|
|
356
|
-
* event handlers to a spawned agent process.
|
|
357
|
-
*/
|
|
358
|
-
function attachStreamHandlers(params) {
|
|
359
|
-
const { proc, streamParser, completionDetector, runningAgent, deliveryId, deliveryName, branchName, stdoutLogStream, jsonlStream } = params;
|
|
360
|
-
streamParser.attach(proc.stdout);
|
|
361
|
-
completionDetector.attach(streamParser);
|
|
362
|
-
const activityTracker = new ActivityTracker(runningAgent.sessionId);
|
|
363
|
-
activityTracker.attach(streamParser);
|
|
364
|
-
// Raw NDJSON log
|
|
365
|
-
streamParser.on('event', (event) => {
|
|
366
|
-
jsonlStream.write(JSON.stringify(event) + '\n');
|
|
367
|
-
});
|
|
368
|
-
// Human-readable log
|
|
369
|
-
streamParser.on('event', (event) => {
|
|
370
|
-
const line = formatEventForLog(event);
|
|
371
|
-
if (line)
|
|
372
|
-
stdoutLogStream.write(line + '\n');
|
|
373
|
-
});
|
|
374
|
-
// Session state tracking
|
|
375
|
-
streamParser.on('init', (event) => {
|
|
376
|
-
runningAgent.claudeSessionId = event.session_id;
|
|
377
|
-
runningAgent.streamState = 'active';
|
|
378
|
-
console.log(` Session initialized (model: ${event.model}, tools: ${event.tools.length})`);
|
|
379
|
-
reportGitState(deliveryId, 'worktree_active', branchName).catch(err => console.warn('[spawner] reportGitState worktree_active failed:', err.message));
|
|
380
|
-
});
|
|
381
|
-
streamParser.on('teammate', (event) => {
|
|
382
|
-
if (event.subtype === 'teammate_spawned') {
|
|
383
|
-
console.log(` [team] Teammate spawned: ${event.agent_name}`);
|
|
384
|
-
}
|
|
385
|
-
else if (event.subtype === 'teammate_completed') {
|
|
386
|
-
const status = event.is_error ? 'FAILED' : 'completed';
|
|
387
|
-
console.log(` [team] Teammate ${status}: ${event.agent_name}`);
|
|
388
|
-
}
|
|
389
|
-
const state = completionDetector.getState();
|
|
390
|
-
runningAgent.activeTeammateCount = state.activeTeammateCount;
|
|
391
|
-
runningAgent.activeTeammates = state.activeTeammates;
|
|
392
|
-
});
|
|
393
|
-
streamParser.on('result', (result) => {
|
|
394
|
-
const cost = result.total_cost_usd?.toFixed(4) ?? '?';
|
|
395
|
-
console.log(` [result] ${result.is_error ? 'ERROR' : 'Success'}: ${result.num_turns} turns, $${cost}`);
|
|
396
|
-
});
|
|
397
|
-
streamParser.on('error', (err, line) => {
|
|
398
|
-
console.warn(` [stream-json] Parse error: ${err.message} — line: ${line.slice(0, 200)}`);
|
|
399
|
-
});
|
|
400
|
-
completionDetector.on('complete', (info) => {
|
|
401
|
-
console.log(`Agent for "${deliveryName}" completed: ` +
|
|
402
|
-
`${info.turnCount} turns, $${info.totalCostUsd.toFixed(4)}, ` +
|
|
403
|
-
`all teammates done: ${info.allTeammatesComplete}`);
|
|
404
|
-
runningAgent.streamState = 'idle';
|
|
405
|
-
initiateGracefulShutdown(runningAgent, deliveryName);
|
|
406
|
-
});
|
|
407
|
-
completionDetector.on('idle', (info) => {
|
|
408
|
-
console.warn(`Agent for "${deliveryName}" idle for ${info.idleDurationMs / 1000}s ` +
|
|
409
|
-
`with ${info.activeTeammateCount} active teammates`);
|
|
410
|
-
});
|
|
411
|
-
return activityTracker;
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* Attach process close and error handlers to a spawned agent.
|
|
415
|
-
*/
|
|
416
|
-
function attachProcessHandlers(params) {
|
|
417
|
-
const { proc, config, context, runningAgent, workflow, branchName, worktreePath, deliveryId, sessionId, completionDetector, activityTracker, stdoutLogStream, stderrStream, jsonlStream, getTimedOut, } = params;
|
|
418
|
-
const codingStage = getStageByName(workflow, 'coding');
|
|
419
|
-
const currentStageId = codingStage?.id;
|
|
420
|
-
proc.on('close', async (code, signal) => {
|
|
421
|
-
governor?.releaseSlot('strategy');
|
|
422
|
-
try {
|
|
423
|
-
await activityTracker.finalFlush();
|
|
424
|
-
}
|
|
425
|
-
catch (err) {
|
|
426
|
-
console.warn('[spawner] activityTracker.finalFlush failed:', err.message);
|
|
427
|
-
}
|
|
428
|
-
handleAgentCompletion(code, signal, {
|
|
429
|
-
config,
|
|
430
|
-
context,
|
|
431
|
-
runningAgent,
|
|
432
|
-
workflow,
|
|
433
|
-
branchName,
|
|
434
|
-
currentStageId,
|
|
435
|
-
timedOut: getTimedOut(),
|
|
436
|
-
timeoutMs: config.sessionTimeoutMs,
|
|
437
|
-
sessionId,
|
|
438
|
-
deliveryId,
|
|
439
|
-
completionDetector,
|
|
440
|
-
stdoutLogStream,
|
|
441
|
-
stderrStream,
|
|
442
|
-
jsonlStream,
|
|
443
|
-
runningAgents,
|
|
444
|
-
});
|
|
445
|
-
});
|
|
446
|
-
proc.on('error', async (err) => {
|
|
447
|
-
console.error(`Agent for "${context.delivery.name}" error:`, err.message);
|
|
448
|
-
governor?.releaseSlot('strategy');
|
|
449
|
-
if (runningAgent.warningTimer)
|
|
450
|
-
clearTimeout(runningAgent.warningTimer);
|
|
451
|
-
if (runningAgent.timeoutTimer)
|
|
452
|
-
clearTimeout(runningAgent.timeoutTimer);
|
|
453
|
-
completionDetector?.destroy();
|
|
454
|
-
runningAgents.delete(sessionId);
|
|
455
|
-
removeWorktree(config.repoPath, worktreePath, {
|
|
456
|
-
branchName,
|
|
457
|
-
integrationBranch: config.integrationBranch,
|
|
458
|
-
deliveryName: context.delivery.name,
|
|
459
|
-
mergeSucceeded: false,
|
|
460
|
-
});
|
|
461
|
-
await updateSession(sessionId, {
|
|
462
|
-
status: 'failed',
|
|
463
|
-
exit_reason: 'Agent process error',
|
|
464
|
-
ended_at: new Date().toISOString(),
|
|
465
|
-
});
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
/**
|
|
469
|
-
* Initiate graceful shutdown for an agent session.
|
|
470
|
-
*
|
|
471
|
-
* Sends a wrap-up message via stdin, waits for the process to exit,
|
|
472
|
-
* and escalates to SIGTERM/SIGKILL if needed.
|
|
473
|
-
*/
|
|
474
|
-
function initiateGracefulShutdown(agent, deliveryName) {
|
|
475
|
-
const GRACE_PERIOD_MS = 60000; // 60s for agent to wrap up
|
|
476
|
-
const ESCALATION_STEP_MS = 10000; // 10s between escalation steps
|
|
477
|
-
// Send wrap-up message
|
|
478
|
-
sendMessage(agent.stdin, 'All work is complete. Please commit any remaining changes, clean up, and exit.');
|
|
479
|
-
// Flat escalation chain using absolute offsets from now
|
|
480
|
-
// Step 1: Close stdin after grace period
|
|
481
|
-
const graceTimer = setTimeout(() => {
|
|
482
|
-
if (!runningAgents.has(agent.sessionId))
|
|
483
|
-
return;
|
|
484
|
-
console.warn(`[shutdown] Agent for "${deliveryName}" did not exit within grace period. Closing stdin...`);
|
|
485
|
-
safeCloseStdin(agent.stdin);
|
|
486
|
-
}, GRACE_PERIOD_MS);
|
|
487
|
-
// Step 2: SIGTERM after grace period + one escalation step
|
|
488
|
-
setTimeout(() => {
|
|
489
|
-
if (!runningAgents.has(agent.sessionId))
|
|
490
|
-
return;
|
|
491
|
-
console.warn(`[shutdown] Agent for "${deliveryName}" did not exit after stdin close. Sending SIGTERM...`);
|
|
492
|
-
safeSendSignal(agent.pid, 'SIGTERM');
|
|
493
|
-
}, GRACE_PERIOD_MS + ESCALATION_STEP_MS);
|
|
494
|
-
// Step 3: SIGKILL after grace period + two escalation steps
|
|
495
|
-
setTimeout(() => {
|
|
496
|
-
if (!runningAgents.has(agent.sessionId))
|
|
497
|
-
return;
|
|
498
|
-
console.error(`[shutdown] Agent for "${deliveryName}" still running. Sending SIGKILL...`);
|
|
499
|
-
safeSendSignal(agent.pid, 'SIGKILL');
|
|
500
|
-
}, GRACE_PERIOD_MS + ESCALATION_STEP_MS * 2);
|
|
501
|
-
// Clean up timer if process exits before grace period
|
|
502
|
-
const checkExit = setInterval(() => {
|
|
503
|
-
if (!runningAgents.has(agent.sessionId)) {
|
|
504
|
-
clearTimeout(graceTimer);
|
|
505
|
-
clearInterval(checkExit);
|
|
506
|
-
}
|
|
507
|
-
}, 1000);
|
|
508
|
-
}
|
|
509
|
-
/**
|
|
510
|
-
* Terminate a running agent.
|
|
511
|
-
* Sends a shutdown message via stdin, then escalates to SIGTERM/SIGKILL.
|
|
512
|
-
*/
|
|
513
|
-
export function terminateAgent(sessionId) {
|
|
514
|
-
const agent = runningAgents.get(sessionId);
|
|
515
|
-
if (!agent)
|
|
516
|
-
return false;
|
|
517
|
-
// Clear timeout timers since we're manually terminating
|
|
518
|
-
if (agent.warningTimer)
|
|
519
|
-
clearTimeout(agent.warningTimer);
|
|
520
|
-
if (agent.timeoutTimer)
|
|
521
|
-
clearTimeout(agent.timeoutTimer);
|
|
522
|
-
try {
|
|
523
|
-
// Send shutdown message, then escalate with flat setTimeout chain
|
|
524
|
-
agent.streamState = 'shutting_down';
|
|
525
|
-
sendMessage(agent.stdin, 'Session is being terminated. Commit your work and exit immediately.');
|
|
526
|
-
// Step 1: Close stdin after 5s
|
|
527
|
-
setTimeout(() => safeCloseStdin(agent.stdin), 5000);
|
|
528
|
-
// Step 2: SIGTERM after 10s (5s after stdin close)
|
|
529
|
-
setTimeout(() => {
|
|
530
|
-
if (!runningAgents.has(sessionId))
|
|
531
|
-
return;
|
|
532
|
-
safeSendSignal(agent.pid, 'SIGTERM');
|
|
533
|
-
}, 10000);
|
|
534
|
-
return true;
|
|
535
|
-
}
|
|
536
|
-
catch (err) {
|
|
537
|
-
console.error(`Failed to terminate agent ${sessionId}:`, err instanceof Error ? err.message : String(err));
|
|
538
|
-
return false;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* Terminate all running agents.
|
|
543
|
-
*/
|
|
544
|
-
export function terminateAllAgents() {
|
|
545
|
-
for (const [sessionId] of runningAgents) {
|
|
546
|
-
terminateAgent(sessionId);
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
/**
|
|
550
|
-
* Check if an agent is running for a session.
|
|
551
|
-
*/
|
|
552
|
-
export function isAgentRunning(sessionId) {
|
|
553
|
-
return runningAgents.has(sessionId);
|
|
554
|
-
}
|
|
555
|
-
/**
|
|
556
|
-
* Get count of running agents.
|
|
557
|
-
*/
|
|
558
|
-
export function getRunningAgentCount() {
|
|
559
|
-
return runningAgents.size;
|
|
560
|
-
}
|
|
561
|
-
// ── Merge Conflict Resolution Agent ──────────────────────────────────
|
|
562
|
-
/** Timeout for the resolution agent (10 minutes). */
|
|
563
|
-
const RESOLUTION_AGENT_TIMEOUT_MS = 10 * 60 * 1000;
|
|
564
|
-
/**
|
|
565
|
-
* Spawn a short-lived, single-purpose Claude Code agent for merge conflict resolution.
|
|
566
|
-
*
|
|
567
|
-
* Used when no active team exists for a strategy but merge conflicts need resolution.
|
|
568
|
-
* The agent receives a focused prompt with conflict details, resolves in the existing
|
|
569
|
-
* worktree, and exits. No session DB record, no streaming, no team mode.
|
|
570
|
-
*/
|
|
571
|
-
export async function spawnResolutionAgent(params) {
|
|
572
|
-
const { config, worktreePath, branchName, integrationBranch, conflictFiles, strategyDescription } = params;
|
|
573
|
-
const prompt = [
|
|
574
|
-
`You are resolving merge conflicts in a git worktree.`,
|
|
575
|
-
``,
|
|
576
|
-
`**Worktree:** ${worktreePath}`,
|
|
577
|
-
`**Branch:** ${branchName}`,
|
|
578
|
-
`**Merge source:** origin/${integrationBranch}`,
|
|
579
|
-
``,
|
|
580
|
-
`**Conflicted files:**`,
|
|
581
|
-
...conflictFiles.map(f => `- ${f}`),
|
|
582
|
-
``,
|
|
583
|
-
`**Strategy context:** ${strategyDescription}`,
|
|
584
|
-
``,
|
|
585
|
-
`**Instructions:**`,
|
|
586
|
-
`1. Open each conflicted file and resolve the conflict markers (<<<<<<< / ======= / >>>>>>>)`,
|
|
587
|
-
`2. Stage each resolved file with: git add <file>`,
|
|
588
|
-
`3. Commit the merge resolution: git commit --no-edit`,
|
|
589
|
-
`4. Run: npm run build && npm test`,
|
|
590
|
-
`5. If build or test fails, fix the issues, commit, and re-run until passing`,
|
|
591
|
-
``,
|
|
592
|
-
`Do NOT run git merge --abort. Your goal is to produce a clean merge commit that passes build and tests.`,
|
|
593
|
-
`Follow the coding standards in CLAUDE.md.`,
|
|
594
|
-
].join('\n');
|
|
595
|
-
const args = [
|
|
596
|
-
'--print',
|
|
597
|
-
'--dangerously-skip-permissions',
|
|
598
|
-
'--setting-sources', 'project,local',
|
|
599
|
-
prompt,
|
|
600
|
-
];
|
|
601
|
-
// Build a clean environment (strip Claude Code session vars)
|
|
602
|
-
const spawnEnv = stripClaudeCodeEnvVars(process.env);
|
|
603
|
-
console.log(`[spawner] Spawning resolution agent for branch ${branchName} (${conflictFiles.length} conflicts)`);
|
|
604
|
-
return new Promise((resolve) => {
|
|
605
|
-
const proc = spawn(config.claudeCodePath, args, {
|
|
606
|
-
cwd: worktreePath,
|
|
607
|
-
env: spawnEnv,
|
|
608
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
609
|
-
});
|
|
610
|
-
// Close stdin immediately -- prompt is passed as CLI arg
|
|
611
|
-
proc.stdin?.end();
|
|
612
|
-
// Timeout with escalating shutdown
|
|
613
|
-
const timeout = setTimeout(() => {
|
|
614
|
-
console.warn(`[spawner] Resolution agent timed out after ${RESOLUTION_AGENT_TIMEOUT_MS / 1000}s, killing`);
|
|
615
|
-
try {
|
|
616
|
-
process.kill(proc.pid, 'SIGTERM');
|
|
617
|
-
}
|
|
618
|
-
catch { /* ignore */ }
|
|
619
|
-
setTimeout(() => {
|
|
620
|
-
try {
|
|
621
|
-
process.kill(proc.pid, 'SIGKILL');
|
|
622
|
-
}
|
|
623
|
-
catch { /* ignore */ }
|
|
624
|
-
}, 10000);
|
|
625
|
-
}, RESOLUTION_AGENT_TIMEOUT_MS);
|
|
626
|
-
proc.on('close', (code) => {
|
|
627
|
-
clearTimeout(timeout);
|
|
628
|
-
// Verify resolution by checking for remaining unmerged files
|
|
629
|
-
const unmergedResult = runGitSync(['diff', '--name-only', '--diff-filter=U'], worktreePath);
|
|
630
|
-
const unmergedFiles = unmergedResult.success
|
|
631
|
-
? unmergedResult.output.split('\n').filter(Boolean)
|
|
632
|
-
: [];
|
|
633
|
-
if (unmergedFiles.length === 0) {
|
|
634
|
-
console.log(`[spawner] Resolution agent succeeded for branch ${branchName} (exit code: ${code})`);
|
|
635
|
-
resolve({ success: true });
|
|
636
|
-
}
|
|
637
|
-
else {
|
|
638
|
-
const msg = `Conflicts remain in: ${unmergedFiles.join(', ')}`;
|
|
639
|
-
console.warn(`[spawner] Resolution agent failed for branch ${branchName}: ${msg}`);
|
|
640
|
-
resolve({ success: false, error: msg });
|
|
641
|
-
}
|
|
642
|
-
});
|
|
643
|
-
proc.on('error', (err) => {
|
|
644
|
-
clearTimeout(timeout);
|
|
645
|
-
console.error(`[spawner] Resolution agent spawn error: ${err.message}`);
|
|
646
|
-
resolve({ success: false, error: `Spawn error: ${err.message}` });
|
|
647
|
-
});
|
|
353
|
+
getTimedOut, runningAgents, governor,
|
|
648
354
|
});
|
|
649
355
|
}
|
|
650
|
-
// ── Stale Agent Process Detection ────────────────────────────────────
|
|
651
|
-
// Canonical implementations live in spawner-liveness.ts (dependency-injected).
|
|
652
|
-
// Re-export for backwards compatibility with existing consumers (e.g. tests).
|
|
653
|
-
export { isProcessAlive, checkAgentLiveness } from './spawner-liveness.js';
|
|
654
356
|
//# sourceMappingURL=spawner.js.map
|
package/dist/spawner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../src/spawner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../src/spawner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy completion event handler - reacts to CompletionDetector events.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from strategy-executor.ts. Handles the decision logic when a
|
|
5
|
+
* team lead completes a work cycle: terminate if done, or send more work.
|
|
6
|
+
*/
|
|
7
|
+
import type { ChildProcess } from 'node:child_process';
|
|
8
|
+
import type { StrategyTeamState } from './types.js';
|
|
9
|
+
import { CompletionDetector, type CompletionInfo } from './completion-detector.js';
|
|
10
|
+
export interface CompletionEventContext {
|
|
11
|
+
strategyId: string;
|
|
12
|
+
strategyName: string;
|
|
13
|
+
teamState: StrategyTeamState;
|
|
14
|
+
completionDetector: CompletionDetector;
|
|
15
|
+
proc: ChildProcess;
|
|
16
|
+
completionInfo: CompletionInfo;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handle a 'complete' event from the CompletionDetector.
|
|
20
|
+
*
|
|
21
|
+
* Queries current delivery and issue state to decide whether to:
|
|
22
|
+
* - Terminate the team (all deliveries terminal or no open issues remain), or
|
|
23
|
+
* - Send a mid-strategy handoff message with remaining work.
|
|
24
|
+
*
|
|
25
|
+
* Extracted from the inline event callback in spawnStrategyTeam to eliminate
|
|
26
|
+
* deep nesting inside an async Promise chain inside an event listener.
|
|
27
|
+
*/
|
|
28
|
+
export declare function handleCompletionEvent(ctx: CompletionEventContext): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=strategy-completion-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-completion-event.d.ts","sourceRoot":"","sources":["../src/strategy-completion-event.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AASnF,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;AAID;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEtF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy completion event handler - reacts to CompletionDetector events.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from strategy-executor.ts. Handles the decision logic when a
|
|
5
|
+
* team lead completes a work cycle: terminate if done, or send more work.
|
|
6
|
+
*/
|
|
7
|
+
import { sendMessage } from '@telora/daemon-core';
|
|
8
|
+
import { isStatusTerminal, isStatusAgentActionable } from './stage-classifier.js';
|
|
9
|
+
import { getStrategyDeliveries, getStrategyIssues } from './queries/strategies.js';
|
|
10
|
+
import { buildWakeMessage } from './strategy-prompt-builder.js';
|
|
11
|
+
import { OPEN_ISSUE_STATUSES } from './constants.js';
|
|
12
|
+
import { terminateTeam } from './strategy-team-lifecycle.js';
|
|
13
|
+
// ── Handler ─────────────────────────────────────────────────────────────
|
|
14
|
+
/**
|
|
15
|
+
* Handle a 'complete' event from the CompletionDetector.
|
|
16
|
+
*
|
|
17
|
+
* Queries current delivery and issue state to decide whether to:
|
|
18
|
+
* - Terminate the team (all deliveries terminal or no open issues remain), or
|
|
19
|
+
* - Send a mid-strategy handoff message with remaining work.
|
|
20
|
+
*
|
|
21
|
+
* Extracted from the inline event callback in spawnStrategyTeam to eliminate
|
|
22
|
+
* deep nesting inside an async Promise chain inside an event listener.
|
|
23
|
+
*/
|
|
24
|
+
export async function handleCompletionEvent(ctx) {
|
|
25
|
+
const { strategyId, strategyName, teamState, completionDetector, proc } = ctx;
|
|
26
|
+
const [currentDeliveries, currentIssues] = await Promise.all([
|
|
27
|
+
getStrategyDeliveries(strategyId),
|
|
28
|
+
getStrategyIssues(strategyId),
|
|
29
|
+
]);
|
|
30
|
+
// If all deliveries are terminal, shut down.
|
|
31
|
+
const allTerminal = currentDeliveries.every(d => isStatusTerminal(d.executionStatus ?? ''));
|
|
32
|
+
if (allTerminal) {
|
|
33
|
+
console.log(`[strategy-executor] All deliveries terminal for "${strategyName}" -- terminating team`);
|
|
34
|
+
teamState.shutdownReason = 'work_complete';
|
|
35
|
+
terminateTeam(strategyId);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Check if there are actionable deliveries with open issues.
|
|
39
|
+
const actionableDeliveryIds = new Set(currentDeliveries
|
|
40
|
+
.filter(d => isStatusAgentActionable(d.executionStatus ?? ''))
|
|
41
|
+
.map(d => d.id));
|
|
42
|
+
if (actionableDeliveryIds.size === 0) {
|
|
43
|
+
console.log(`[strategy-executor] No actionable deliveries for "${strategyName}" -- terminating team`);
|
|
44
|
+
teamState.shutdownReason = 'work_complete';
|
|
45
|
+
terminateTeam(strategyId);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Check for open issues across actionable deliveries.
|
|
49
|
+
const hasOpenIssues = currentIssues.some(i => actionableDeliveryIds.has(i.deliveryId) && OPEN_ISSUE_STATUSES.has(i.status));
|
|
50
|
+
if (!hasOpenIssues) {
|
|
51
|
+
console.log(`[strategy-executor] Actionable deliveries have no open issues for "${strategyName}" -- ` +
|
|
52
|
+
`terminating team. Auto-advance will handle verify transition.`);
|
|
53
|
+
teamState.shutdownReason = 'work_complete';
|
|
54
|
+
terminateTeam(strategyId);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Mid-strategy handoff: actionable work with open issues remains.
|
|
58
|
+
// Send work immediately and reset the completion detector for the next cycle.
|
|
59
|
+
console.log(`[strategy-executor] Mid-strategy handoff for "${strategyName}" -- sending new work`);
|
|
60
|
+
const message = buildWakeMessage(currentDeliveries, currentIssues, teamState.knownDeliveryIds);
|
|
61
|
+
// Update tracking state
|
|
62
|
+
for (const d of currentDeliveries) {
|
|
63
|
+
teamState.knownDeliveryIds.add(d.id);
|
|
64
|
+
teamState.deliveryStageIds.set(d.id, d.currentWorkflowStageId);
|
|
65
|
+
}
|
|
66
|
+
completionDetector.reset();
|
|
67
|
+
sendMessage(proc.stdin, message);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=strategy-completion-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-completion-event.js","sourceRoot":"","sources":["../src/strategy-completion-event.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAa7D,2EAA2E;AAE3E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAA2B;IACrE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IAE9E,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3D,qBAAqB,CAAC,UAAU,CAAC;QACjC,iBAAiB,CAAC,UAAU,CAAC;KAC9B,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAC9C,gBAAgB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAC1C,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,oDAAoD,YAAY,uBAAuB,CACxF,CAAC;QACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;QAC3C,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,MAAM,qBAAqB,GAAG,IAAI,GAAG,CACnC,iBAAiB;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;SAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;IAEF,IAAI,qBAAqB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CACT,qDAAqD,YAAY,uBAAuB,CACzF,CAAC;QACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;QAC3C,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,sDAAsD;IACtD,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAClF,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CACT,sEAAsE,YAAY,OAAO;YACzF,+DAA+D,CAChE,CAAC;QACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;QAC3C,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,kEAAkE;IAClE,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CACT,iDAAiD,YAAY,uBAAuB,CACrF,CAAC;IACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE/F,wBAAwB;IACxB,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACjE,CAAC;IAED,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAC3B,WAAW,CAAC,IAAI,CAAC,KAAM,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy-completion.d.ts","sourceRoot":"","sources":["../src/strategy-completion.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAcpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAelE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAIlF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"strategy-completion.d.ts","sourceRoot":"","sources":["../src/strategy-completion.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAcpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAelE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAIlF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoStF;AAID;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC/E,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5H,uBAAuB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7H,oBAAoB,EAAE,CAAC,MAAM,EAAE;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnC;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,iBAAiB,EAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,mBAAiC,GACtC,OAAO,CAAC,IAAI,CAAC,CAkHf"}
|
|
@@ -104,6 +104,7 @@ export async function handleTeamCompletion(params) {
|
|
|
104
104
|
await withRetry(() => updateSession(sessionId, {
|
|
105
105
|
status: 'failed',
|
|
106
106
|
exit_reason: exitReason,
|
|
107
|
+
exit_category: 'error',
|
|
107
108
|
ended_at: new Date().toISOString(),
|
|
108
109
|
}), { maxAttempts: 3, baseDelayMs: 1000, label: 'session-update-readonly-violation' });
|
|
109
110
|
}
|
|
@@ -206,11 +207,18 @@ export async function handleTeamCompletion(params) {
|
|
|
206
207
|
catch (err) {
|
|
207
208
|
console.debug(`[strategy-executor] Failed to compute git diff stats for "${strategyName}":`, err.message);
|
|
208
209
|
}
|
|
210
|
+
// Determine exit category for failed sessions
|
|
211
|
+
const exitCategory = succeeded
|
|
212
|
+
? null
|
|
213
|
+
: teamState.shutdownReason === 'user_stopped'
|
|
214
|
+
? 'user_stopped'
|
|
215
|
+
: 'error';
|
|
209
216
|
// Update session
|
|
210
217
|
try {
|
|
211
218
|
await withRetry(() => updateSession(sessionId, {
|
|
212
219
|
status: succeeded ? 'completed' : 'failed',
|
|
213
220
|
exit_reason: exitReason,
|
|
221
|
+
...(exitCategory ? { exit_category: exitCategory } : {}),
|
|
214
222
|
ended_at: new Date().toISOString(),
|
|
215
223
|
lines_added: diffStats.linesAdded,
|
|
216
224
|
lines_removed: diffStats.linesRemoved,
|