@telora/daemon 0.14.2 → 0.14.4

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.
Files changed (51) hide show
  1. package/build-info.json +2 -2
  2. package/dist/queries/schemas.d.ts +4 -4
  3. package/dist/queries/schemas.js +1 -1
  4. package/dist/queries/schemas.js.map +1 -1
  5. package/dist/spawner-lifecycle.d.ts +43 -0
  6. package/dist/spawner-lifecycle.d.ts.map +1 -0
  7. package/dist/spawner-lifecycle.js +152 -0
  8. package/dist/spawner-lifecycle.js.map +1 -0
  9. package/dist/spawner-stream-handlers.d.ts +67 -0
  10. package/dist/spawner-stream-handlers.d.ts.map +1 -0
  11. package/dist/spawner-stream-handlers.js +193 -0
  12. package/dist/spawner-stream-handlers.js.map +1 -0
  13. package/dist/spawner.d.ts +15 -36
  14. package/dist/spawner.d.ts.map +1 -1
  15. package/dist/spawner.js +29 -327
  16. package/dist/spawner.js.map +1 -1
  17. package/dist/strategy-completion-event.d.ts +29 -0
  18. package/dist/strategy-completion-event.d.ts.map +1 -0
  19. package/dist/strategy-completion-event.js +69 -0
  20. package/dist/strategy-completion-event.js.map +1 -0
  21. package/dist/strategy-completion.d.ts.map +1 -1
  22. package/dist/strategy-completion.js +27 -11
  23. package/dist/strategy-completion.js.map +1 -1
  24. package/dist/strategy-executor.d.ts +8 -45
  25. package/dist/strategy-executor.d.ts.map +1 -1
  26. package/dist/strategy-executor.js +22 -423
  27. package/dist/strategy-executor.js.map +1 -1
  28. package/dist/strategy-spawn-helpers.d.ts +67 -0
  29. package/dist/strategy-spawn-helpers.d.ts.map +1 -0
  30. package/dist/strategy-spawn-helpers.js +160 -0
  31. package/dist/strategy-spawn-helpers.js.map +1 -0
  32. package/dist/strategy-team-lifecycle.d.ts +50 -0
  33. package/dist/strategy-team-lifecycle.d.ts.map +1 -0
  34. package/dist/strategy-team-lifecycle.js +218 -0
  35. package/dist/strategy-team-lifecycle.js.map +1 -0
  36. package/dist/unified-engine-lifecycle.d.ts +36 -0
  37. package/dist/unified-engine-lifecycle.d.ts.map +1 -0
  38. package/dist/unified-engine-lifecycle.js +250 -0
  39. package/dist/unified-engine-lifecycle.js.map +1 -0
  40. package/dist/unified-shell-config.d.ts +25 -0
  41. package/dist/unified-shell-config.d.ts.map +1 -1
  42. package/dist/unified-shell-config.js +45 -0
  43. package/dist/unified-shell-config.js.map +1 -1
  44. package/dist/unified-shell-status.d.ts.map +1 -1
  45. package/dist/unified-shell-status.js +16 -2
  46. package/dist/unified-shell-status.js.map +1 -1
  47. package/dist/unified-shell.d.ts +2 -15
  48. package/dist/unified-shell.d.ts.map +1 -1
  49. package/dist/unified-shell.js +18 -619
  50. package/dist/unified-shell.js.map +1 -1
  51. package/package.json +1 -1
package/dist/spawner.d.ts CHANGED
@@ -8,6 +8,9 @@
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 type { DaemonConfig, AgentRole, RunningAgent } from './types.js';
13
16
  import { type ResourceGovernor } from '@telora/daemon-core';
@@ -18,47 +21,23 @@ export declare function initGovernor(gov: ResourceGovernor): void;
18
21
  * Re-exported from agent-state for backward compatibility.
19
22
  */
20
23
  export declare function getRunningAgents(): Map<string, RunningAgent>;
21
- /**
22
- * Spawn a Claude Code agent to work on a delivery.
23
- *
24
- * The agent runs in an isolated git worktree created from the integration branch.
25
- * On successful completion, the agent's changes are merged back to integration.
26
- */
27
- export declare function spawnAgentForDelivery(config: DaemonConfig, deliveryId: string, role: AgentRole, strategyId: string): Promise<void>;
28
- /**
29
- * Terminate a running agent.
30
- * Sends a shutdown message via stdin, then escalates to SIGTERM/SIGKILL.
31
- */
24
+ /** Terminate a running agent. */
32
25
  export declare function terminateAgent(sessionId: string): boolean;
33
- /**
34
- * Terminate all running agents.
35
- */
26
+ /** Terminate all running agents. */
36
27
  export declare function terminateAllAgents(): void;
37
- /**
38
- * Check if an agent is running for a session.
39
- */
28
+ /** Check if an agent is running for a session. */
40
29
  export declare function isAgentRunning(sessionId: string): boolean;
41
- /**
42
- * Get count of running agents.
43
- */
30
+ /** Get count of running agents. */
44
31
  export declare function getRunningAgentCount(): number;
32
+ /** Re-export spawnResolutionAgent (no module state needed). */
33
+ export { spawnResolutionAgent } from './spawner-lifecycle.js';
34
+ /** Re-export stale agent liveness checks. */
35
+ export { isProcessAlive, checkAgentLiveness } from './spawner-liveness.js';
45
36
  /**
46
- * Spawn a short-lived, single-purpose Claude Code agent for merge conflict resolution.
37
+ * Spawn a Claude Code agent to work on a delivery.
47
38
  *
48
- * Used when no active team exists for a strategy but merge conflicts need resolution.
49
- * The agent receives a focused prompt with conflict details, resolves in the existing
50
- * worktree, and exits. No session DB record, no streaming, no team mode.
39
+ * The agent runs in an isolated git worktree created from the integration branch.
40
+ * On successful completion, the agent's changes are merged back to integration.
51
41
  */
52
- export declare function spawnResolutionAgent(params: {
53
- config: DaemonConfig;
54
- worktreePath: string;
55
- branchName: string;
56
- integrationBranch: string;
57
- conflictFiles: string[];
58
- strategyDescription: string;
59
- }): Promise<{
60
- success: boolean;
61
- error?: string;
62
- }>;
63
- export { isProcessAlive, checkAgentLiveness } from './spawner-liveness.js';
42
+ export declare function spawnAgentForDelivery(config: DaemonConfig, deliveryId: string, role: AgentRole, strategyId: string): Promise<void>;
64
43
  //# sourceMappingURL=spawner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../src/spawner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAmB,YAAY,EAAY,MAAM,YAAY,CAAC;AAQnG,OAAO,EAA+F,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAczJ,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAExD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAE5D;AAsJD;;;;;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;AAmND;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA2BzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAOD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkFhD;AAKD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
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, stripClaudeCodeEnvVars, createLogStream } from '@telora/daemon-core';
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 { handleAgentCompletion } from './completion-handler.js';
26
- import { formatEventForLog } from '@telora/daemon-core';
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
- * Safely send a signal to a process, ignoring errors if the process has already exited.
45
- */
46
- function safeSendSignal(pid, signal) {
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
- * Safely close a writable stdin stream, ignoring errors if already closed.
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
@@ -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