@telora/daemon 0.15.1 → 0.15.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/README.md +11 -11
- package/build-info.json +2 -2
- package/dist/assembly-engine.d.ts +1 -1
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-resolvers.js +41 -41
- package/dist/assembly-resolvers.js.map +1 -1
- package/dist/branch-status.d.ts +4 -4
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +23 -23
- package/dist/branch-status.js.map +1 -1
- package/dist/cli/connect.js +1 -1
- package/dist/cli/connect.js.map +1 -1
- package/dist/completion-detector.d.ts +1 -1
- package/dist/completion-detector.js +1 -1
- package/dist/completion-handler.d.ts +1 -1
- package/dist/completion-handler.js +4 -4
- package/dist/completion-handler.js.map +1 -1
- package/dist/condition-evaluators.js +4 -4
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/control-state.d.ts +6 -6
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +43 -43
- package/dist/control-state.js.map +1 -1
- package/dist/crash-recovery-scan.d.ts +1 -1
- package/dist/crash-recovery-scan.js +20 -20
- package/dist/crash-recovery-scan.js.map +1 -1
- package/dist/crash-recovery-types.d.ts +3 -3
- package/dist/crash-recovery-types.d.ts.map +1 -1
- package/dist/crash-recovery-types.js +2 -2
- package/dist/crash-recovery-types.js.map +1 -1
- package/dist/crash-recovery.d.ts +3 -3
- package/dist/crash-recovery.d.ts.map +1 -1
- package/dist/crash-recovery.js +21 -21
- package/dist/crash-recovery.js.map +1 -1
- package/dist/daemon-process.d.ts +1 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/dag-validator.d.ts +6 -6
- package/dist/dag-validator.d.ts.map +1 -1
- package/dist/dag-validator.js +2 -2
- package/dist/dag-validator.js.map +1 -1
- package/dist/delivery-guards.d.ts +1 -1
- package/dist/delivery-guards.js +1 -1
- package/dist/delivery-lifecycle.d.ts +5 -5
- package/dist/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery-lifecycle.js +12 -12
- package/dist/delivery-lifecycle.js.map +1 -1
- package/dist/delivery-merge.js +1 -1
- package/dist/delivery-merge.js.map +1 -1
- package/dist/dependency-resolver.d.ts +7 -7
- package/dist/dependency-resolver.d.ts.map +1 -1
- package/dist/dependency-resolver.js.map +1 -1
- package/dist/directive-executor.d.ts +15 -15
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +76 -76
- package/dist/directive-executor.js.map +1 -1
- package/dist/evaluation-context.d.ts +2 -2
- package/dist/evaluation-context.d.ts.map +1 -1
- package/dist/evaluation-context.js +4 -4
- package/dist/evaluation-context.js.map +1 -1
- package/dist/focus-completion-event.d.ts +97 -0
- package/dist/focus-completion-event.d.ts.map +1 -0
- package/dist/focus-completion-event.js +257 -0
- package/dist/focus-completion-event.js.map +1 -0
- package/dist/focus-completion.d.ts +85 -0
- package/dist/focus-completion.d.ts.map +1 -0
- package/dist/focus-completion.js +459 -0
- package/dist/focus-completion.js.map +1 -0
- package/dist/focus-engine.d.ts +47 -0
- package/dist/focus-engine.d.ts.map +1 -0
- package/dist/focus-engine.js +421 -0
- package/dist/focus-engine.js.map +1 -0
- package/dist/focus-executor.d.ts +55 -0
- package/dist/focus-executor.d.ts.map +1 -0
- package/dist/focus-executor.js +549 -0
- package/dist/focus-executor.js.map +1 -0
- package/dist/focus-lifecycle.d.ts +61 -0
- package/dist/focus-lifecycle.d.ts.map +1 -0
- package/dist/focus-lifecycle.js +544 -0
- package/dist/focus-lifecycle.js.map +1 -0
- package/dist/focus-merge.d.ts +77 -0
- package/dist/focus-merge.d.ts.map +1 -0
- package/dist/focus-merge.js +378 -0
- package/dist/focus-merge.js.map +1 -0
- package/dist/focus-prompt-builder.d.ts +35 -0
- package/dist/focus-prompt-builder.d.ts.map +1 -0
- package/dist/focus-prompt-builder.js +138 -0
- package/dist/focus-prompt-builder.js.map +1 -0
- package/dist/focus-provisioning.d.ts +16 -0
- package/dist/focus-provisioning.d.ts.map +1 -0
- package/dist/focus-provisioning.js +119 -0
- package/dist/focus-provisioning.js.map +1 -0
- package/dist/focus-spawn-helpers.d.ts +67 -0
- package/dist/focus-spawn-helpers.d.ts.map +1 -0
- package/dist/focus-spawn-helpers.js +160 -0
- package/dist/focus-spawn-helpers.js.map +1 -0
- package/dist/focus-team-lifecycle.d.ts +50 -0
- package/dist/focus-team-lifecycle.d.ts.map +1 -0
- package/dist/focus-team-lifecycle.js +256 -0
- package/dist/focus-team-lifecycle.js.map +1 -0
- package/dist/focus-team-state.d.ts +24 -0
- package/dist/focus-team-state.d.ts.map +1 -0
- package/dist/focus-team-state.js +43 -0
- package/dist/focus-team-state.js.map +1 -0
- package/dist/focus-worktree-state.d.ts +47 -0
- package/dist/focus-worktree-state.d.ts.map +1 -0
- package/dist/focus-worktree-state.js +104 -0
- package/dist/focus-worktree-state.js.map +1 -0
- package/dist/git-merge.d.ts +5 -5
- package/dist/git-merge.d.ts.map +1 -1
- package/dist/git-merge.js +5 -5
- package/dist/git-merge.js.map +1 -1
- package/dist/git-state-detector.d.ts +1 -1
- package/dist/git-state-detector.js +9 -9
- package/dist/git-state-detector.js.map +1 -1
- package/dist/git-utils.d.ts +1 -1
- package/dist/git-utils.js +1 -1
- package/dist/git.d.ts +2 -2
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +3 -3
- package/dist/git.js.map +1 -1
- package/dist/heartbeat.d.ts +4 -4
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +7 -7
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/listener-auto-advance.d.ts +2 -2
- package/dist/listener-auto-advance.js +21 -21
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.d.ts +12 -12
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +80 -75
- package/dist/listener.js.map +1 -1
- package/dist/loop-engine.d.ts +20 -20
- package/dist/loop-engine.d.ts.map +1 -1
- package/dist/loop-engine.js +82 -82
- package/dist/loop-engine.js.map +1 -1
- package/dist/loop-event-bus.d.ts +5 -5
- package/dist/loop-event-bus.d.ts.map +1 -1
- package/dist/loop-event-bus.js +3 -3
- package/dist/loop-llm-client.d.ts +1 -1
- package/dist/loop-llm-client.js +1 -1
- package/dist/loop-variance.d.ts +1 -1
- package/dist/loop-variance.js +1 -1
- package/dist/merge-detector.d.ts +6 -6
- package/dist/merge-detector.d.ts.map +1 -1
- package/dist/merge-detector.js +47 -47
- package/dist/merge-detector.js.map +1 -1
- package/dist/otlp-log-parser.js +2 -2
- package/dist/otlp-log-parser.js.map +1 -1
- package/dist/otlp-metric-parser.js +1 -1
- package/dist/otlp-metric-parser.js.map +1 -1
- package/dist/otlp-receiver.d.ts +1 -1
- package/dist/otlp-receiver.js +7 -7
- package/dist/otlp-receiver.js.map +1 -1
- package/dist/otlp-types.d.ts +1 -1
- package/dist/otlp-types.d.ts.map +1 -1
- package/dist/otlp-types.js +3 -3
- package/dist/otlp-types.js.map +1 -1
- package/dist/output-monitor.d.ts +6 -6
- package/dist/output-monitor.d.ts.map +1 -1
- package/dist/output-monitor.js +11 -11
- package/dist/output-monitor.js.map +1 -1
- package/dist/planning-prompt-builder.d.ts +17 -15
- package/dist/planning-prompt-builder.d.ts.map +1 -1
- package/dist/planning-prompt-builder.js +34 -32
- package/dist/planning-prompt-builder.js.map +1 -1
- package/dist/pm/mitigation-correlator.d.ts +7 -7
- package/dist/pm/mitigation-correlator.d.ts.map +1 -1
- package/dist/pm/mitigation-correlator.js +33 -33
- package/dist/pm/mitigation-correlator.js.map +1 -1
- package/dist/pm-engine.js +1 -1
- package/dist/pm-engine.js.map +1 -1
- package/dist/prompt-builder.d.ts +1 -1
- package/dist/prompt-builder.js +9 -9
- package/dist/prompt-builder.js.map +1 -1
- package/dist/prompts/starter-prompt.d.ts +2 -2
- package/dist/prompts/starter-prompt.d.ts.map +1 -1
- package/dist/prompts/starter-prompt.js +6 -6
- package/dist/qa-crash-recovery.d.ts +10 -10
- package/dist/qa-crash-recovery.d.ts.map +1 -1
- package/dist/qa-crash-recovery.js +32 -32
- package/dist/qa-crash-recovery.js.map +1 -1
- package/dist/qa-dev-server.d.ts +3 -3
- package/dist/qa-dev-server.d.ts.map +1 -1
- package/dist/qa-dev-server.js +3 -3
- package/dist/qa-dev-server.js.map +1 -1
- package/dist/qa-orchestrator.d.ts +18 -18
- package/dist/qa-orchestrator.d.ts.map +1 -1
- package/dist/qa-orchestrator.js +47 -47
- package/dist/qa-orchestrator.js.map +1 -1
- package/dist/qa-provisioner.d.ts +3 -3
- package/dist/qa-provisioner.d.ts.map +1 -1
- package/dist/qa-provisioner.js +14 -14
- package/dist/qa-provisioner.js.map +1 -1
- package/dist/qa-state.d.ts +10 -10
- package/dist/qa-state.d.ts.map +1 -1
- package/dist/qa-state.js +11 -11
- package/dist/qa-state.js.map +1 -1
- package/dist/queries/control-state.d.ts +5 -5
- package/dist/queries/control-state.d.ts.map +1 -1
- package/dist/queries/control-state.js +4 -4
- package/dist/queries/control-state.js.map +1 -1
- package/dist/queries/deliveries.d.ts +28 -24
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +32 -28
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +97 -0
- package/dist/queries/focuses.d.ts.map +1 -0
- package/dist/queries/focuses.js +136 -0
- package/dist/queries/focuses.js.map +1 -0
- package/dist/queries/index.d.ts +3 -3
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +2 -2
- package/dist/queries/index.js.map +1 -1
- package/dist/queries/qa.d.ts +16 -16
- package/dist/queries/qa.d.ts.map +1 -1
- package/dist/queries/qa.js +22 -22
- package/dist/queries/qa.js.map +1 -1
- package/dist/queries/schemas.d.ts +40 -34
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +31 -26
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts +1 -1
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +2 -2
- package/dist/queries/sessions.js.map +1 -1
- package/dist/queries/shared.js +10 -10
- package/dist/queries/shared.js.map +1 -1
- package/dist/queries/workflows.d.ts +1 -1
- package/dist/queries/workflows.js +1 -1
- package/dist/queries/worktrees.d.ts +7 -7
- package/dist/queries/worktrees.d.ts.map +1 -1
- package/dist/queries/worktrees.js +7 -7
- package/dist/queries/worktrees.js.map +1 -1
- package/dist/review-defect-detector.d.ts +125 -0
- package/dist/review-defect-detector.d.ts.map +1 -0
- package/dist/review-defect-detector.js +289 -0
- package/dist/review-defect-detector.js.map +1 -0
- package/dist/session-lifecycle.d.ts +17 -17
- package/dist/session-lifecycle.d.ts.map +1 -1
- package/dist/session-lifecycle.js +82 -82
- package/dist/session-lifecycle.js.map +1 -1
- package/dist/spawn-cooldown.d.ts +8 -8
- package/dist/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn-cooldown.js +15 -15
- package/dist/spawn-cooldown.js.map +1 -1
- package/dist/spawn-environment.d.ts +2 -2
- package/dist/spawn-environment.d.ts.map +1 -1
- package/dist/spawn-environment.js +3 -3
- package/dist/spawn-environment.js.map +1 -1
- package/dist/spawner-lifecycle.d.ts +2 -2
- package/dist/spawner-lifecycle.d.ts.map +1 -1
- package/dist/spawner-lifecycle.js +3 -3
- package/dist/spawner-lifecycle.js.map +1 -1
- package/dist/spawner-resolution.d.ts +3 -3
- package/dist/spawner-resolution.d.ts.map +1 -1
- package/dist/spawner-resolution.js +4 -4
- package/dist/spawner-resolution.js.map +1 -1
- package/dist/spawner-stream-handlers.js +2 -2
- package/dist/spawner-stream-handlers.js.map +1 -1
- package/dist/spawner.d.ts +1 -1
- package/dist/spawner.d.ts.map +1 -1
- package/dist/spawner.js +6 -6
- package/dist/spawner.js.map +1 -1
- package/dist/stage-classifier.d.ts +1 -1
- package/dist/stage-classifier.js +1 -1
- package/dist/state-cascade.d.ts +25 -25
- package/dist/state-cascade.d.ts.map +1 -1
- package/dist/state-cascade.js +89 -89
- package/dist/state-cascade.js.map +1 -1
- package/dist/strategy-completion-event.d.ts +37 -3
- package/dist/strategy-completion-event.d.ts.map +1 -1
- package/dist/strategy-completion-event.js +78 -9
- package/dist/strategy-completion-event.js.map +1 -1
- package/dist/strategy-completion.d.ts +11 -0
- package/dist/strategy-completion.d.ts.map +1 -1
- package/dist/strategy-completion.js +22 -1
- package/dist/strategy-completion.js.map +1 -1
- package/dist/strategy-executor.d.ts.map +1 -1
- package/dist/strategy-executor.js +46 -14
- package/dist/strategy-executor.js.map +1 -1
- package/dist/strategy-merge.d.ts.map +1 -1
- package/dist/strategy-merge.js +4 -0
- package/dist/strategy-merge.js.map +1 -1
- package/dist/strategy-team-lifecycle.d.ts.map +1 -1
- package/dist/strategy-team-lifecycle.js +3 -0
- package/dist/strategy-team-lifecycle.js.map +1 -1
- package/dist/supabase.d.ts +4 -4
- package/dist/supabase.d.ts.map +1 -1
- package/dist/supabase.js +5 -5
- package/dist/supabase.js.map +1 -1
- package/dist/task-converter.d.ts +4 -4
- package/dist/task-converter.d.ts.map +1 -1
- package/dist/task-converter.js +1 -1
- package/dist/task-converter.js.map +1 -1
- package/dist/team-prompt-base.d.ts +59 -19
- package/dist/team-prompt-base.d.ts.map +1 -1
- package/dist/team-prompt-base.js +206 -25
- package/dist/team-prompt-base.js.map +1 -1
- package/dist/team-spawner.d.ts +9 -9
- package/dist/team-spawner.d.ts.map +1 -1
- package/dist/team-spawner.js +87 -83
- package/dist/team-spawner.js.map +1 -1
- package/dist/telemetry-writer.d.ts +2 -2
- package/dist/telemetry-writer.d.ts.map +1 -1
- package/dist/templates/claude-md.js +8 -8
- package/dist/templates/claude-settings.d.ts +1 -1
- package/dist/templates/claude-settings.js +2 -2
- package/dist/templates/claude-settings.js.map +1 -1
- package/dist/trigger-executor.d.ts +4 -4
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +11 -11
- package/dist/trigger-executor.js.map +1 -1
- package/dist/types/dag.d.ts +1 -1
- package/dist/types/delivery.d.ts +3 -3
- package/dist/types/delivery.d.ts.map +1 -1
- package/dist/types/focus.d.ts +214 -0
- package/dist/types/focus.d.ts.map +1 -0
- package/dist/types/focus.js +5 -0
- package/dist/types/focus.js.map +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/merge.d.ts +1 -1
- package/dist/types/session.d.ts +2 -2
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +7 -0
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +11 -11
- package/dist/unified-engine-lifecycle.js.map +1 -1
- package/dist/unified-init.d.ts +1 -1
- package/dist/unified-init.js +9 -9
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell-config.d.ts +4 -4
- package/dist/unified-shell-config.d.ts.map +1 -1
- package/dist/unified-shell-config.js +5 -5
- package/dist/unified-shell-config.js.map +1 -1
- package/dist/unified-shell-status.js +3 -3
- package/dist/unified-shell-status.js.map +1 -1
- package/dist/unified-shell.d.ts +1 -1
- package/dist/unified-shell.js +4 -4
- package/dist/unified-shell.js.map +1 -1
- package/dist/workflow-engine.d.ts +1 -1
- package/dist/workflow-engine.d.ts.map +1 -1
- package/dist/worktree-focus.d.ts +69 -0
- package/dist/worktree-focus.d.ts.map +1 -0
- package/dist/worktree-focus.js +214 -0
- package/dist/worktree-focus.js.map +1 -0
- package/dist/worktree.d.ts +10 -10
- package/dist/worktree.d.ts.map +1 -1
- package/dist/worktree.js +39 -39
- package/dist/worktree.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Session lifecycle management for
|
|
2
|
+
* Session lifecycle management for focus teams.
|
|
3
3
|
*
|
|
4
|
-
* Extracted from
|
|
4
|
+
* Extracted from focus-executor.ts. Contains functions for session
|
|
5
5
|
* start/end, cleanup, error handling, team completion detection,
|
|
6
6
|
* termination, and deactivation checks.
|
|
7
7
|
*/
|
|
8
8
|
import { updateSession } from './supabase.js';
|
|
9
|
-
import {
|
|
9
|
+
import { getReadyFocuses } from './supabase.js';
|
|
10
10
|
import { withRetry, sendMessage } from '@telora/daemon-core';
|
|
11
11
|
import { recordActivity, clearNarration } from './heartbeat.js';
|
|
12
|
-
import { buildWakeMessage } from './
|
|
13
|
-
import {
|
|
12
|
+
import { buildWakeMessage } from './focus-prompt-builder.js';
|
|
13
|
+
import { getFocusDeliveries, getFocusIssues } from './queries/focuses.js';
|
|
14
14
|
import { OPEN_ISSUE_STATUSES } from './constants.js';
|
|
15
|
-
import { getActiveTeams, } from './
|
|
16
|
-
import {
|
|
17
|
-
import { handleTeamCompletion, } from './
|
|
15
|
+
import { getActiveTeams, } from './focus-team-state.js';
|
|
16
|
+
import { mergeFocusBranch, escalateMergeConflict } from './focus-merge.js';
|
|
17
|
+
import { handleTeamCompletion, } from './focus-completion.js';
|
|
18
18
|
import { isStatusTerminal, isStatusAgentActionable } from './stage-classifier.js';
|
|
19
19
|
import { getGovernor } from './team-spawner.js';
|
|
20
20
|
/**
|
|
@@ -22,22 +22,22 @@ import { getGovernor } from './team-spawner.js';
|
|
|
22
22
|
*
|
|
23
23
|
* Queries current delivery and issue state to decide whether to:
|
|
24
24
|
* - Terminate the team (all deliveries terminal or no open issues remain), or
|
|
25
|
-
* - Send a mid-
|
|
25
|
+
* - Send a mid-focus handoff message with remaining work.
|
|
26
26
|
*
|
|
27
|
-
* Extracted from the inline event callback in
|
|
27
|
+
* Extracted from the inline event callback in spawnFocusTeam to eliminate
|
|
28
28
|
* deep nesting inside an async Promise chain inside an event listener.
|
|
29
29
|
*/
|
|
30
30
|
async function handleCompletionEvent(ctx) {
|
|
31
|
-
const {
|
|
31
|
+
const { focusId, focusName, teamState, completionDetector, proc } = ctx;
|
|
32
32
|
const [currentDeliveries, currentIssues] = await Promise.all([
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
getFocusDeliveries(focusId),
|
|
34
|
+
getFocusIssues(focusId),
|
|
35
35
|
]);
|
|
36
36
|
// If all deliveries are terminal, shut down
|
|
37
37
|
const allTerminal = currentDeliveries.every(d => isStatusTerminal(d.executionStatus ?? ''));
|
|
38
38
|
if (allTerminal) {
|
|
39
|
-
console.log(`[
|
|
40
|
-
terminateTeam(
|
|
39
|
+
console.log(`[focus-executor] All deliveries terminal for "${focusName}" -- terminating team`);
|
|
40
|
+
terminateTeam(focusId);
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
// Check if there are actionable deliveries with open issues
|
|
@@ -45,21 +45,21 @@ async function handleCompletionEvent(ctx) {
|
|
|
45
45
|
.filter(d => isStatusAgentActionable(d.executionStatus ?? ''))
|
|
46
46
|
.map(d => d.id));
|
|
47
47
|
if (actionableDeliveryIds.size === 0) {
|
|
48
|
-
console.log(`[
|
|
49
|
-
terminateTeam(
|
|
48
|
+
console.log(`[focus-executor] No actionable deliveries for "${focusName}" -- terminating team`);
|
|
49
|
+
terminateTeam(focusId);
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
52
|
// Check for open issues across actionable deliveries.
|
|
53
53
|
const hasOpenIssues = currentIssues.some(i => actionableDeliveryIds.has(i.deliveryId) && OPEN_ISSUE_STATUSES.has(i.status));
|
|
54
54
|
if (!hasOpenIssues) {
|
|
55
|
-
console.log(`[
|
|
55
|
+
console.log(`[focus-executor] Actionable deliveries have no open issues for "${focusName}" -- ` +
|
|
56
56
|
`terminating team. Auto-advance will handle verify transition.`);
|
|
57
|
-
terminateTeam(
|
|
57
|
+
terminateTeam(focusId);
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
// Mid-
|
|
60
|
+
// Mid-focus handoff: actionable work with open issues remains.
|
|
61
61
|
// Send work immediately and reset the completion detector for the next cycle.
|
|
62
|
-
console.log(`[
|
|
62
|
+
console.log(`[focus-executor] Mid-focus handoff for "${focusName}" -- sending new work`);
|
|
63
63
|
const message = buildWakeMessage(currentDeliveries, currentIssues, teamState.knownDeliveryIds);
|
|
64
64
|
// Update tracking state
|
|
65
65
|
for (const d of currentDeliveries) {
|
|
@@ -77,34 +77,34 @@ async function handleCompletionEvent(ctx) {
|
|
|
77
77
|
* resume-failure retry, cleanup, and error reporting.
|
|
78
78
|
*/
|
|
79
79
|
export function attachSessionLifecycle(ctx) {
|
|
80
|
-
const { proc, params, teamState, sessionId,
|
|
80
|
+
const { proc, params, teamState, sessionId, focusId, focusName, completionDetector, activityTracker, logStreams, resumeId, spawnedAt, config, } = ctx;
|
|
81
81
|
const { stdoutLogStream, stderrStream, jsonlStream } = logStreams;
|
|
82
82
|
const governor = getGovernor();
|
|
83
83
|
// Handle completion -- check for more work or terminate.
|
|
84
|
-
// No idle phase: if actionable work remains, send it immediately (mid-
|
|
84
|
+
// No idle phase: if actionable work remains, send it immediately (mid-focus
|
|
85
85
|
// handoff). If all work is done, terminate. A fresh team is spawned if new
|
|
86
86
|
// deliveries arrive later (~$0.50-1.00 exploration cost, but clean context).
|
|
87
87
|
completionDetector.on('complete', (info) => {
|
|
88
|
-
console.log(`[
|
|
88
|
+
console.log(`[focus-executor] Team lead for "${focusName}" completed work cycle: ` +
|
|
89
89
|
`${info.turnCount} turns, $${info.totalCostUsd.toFixed(4)}`);
|
|
90
|
-
handleCompletionEvent({
|
|
91
|
-
console.warn(`[
|
|
90
|
+
handleCompletionEvent({ focusId, focusName, teamState, completionDetector, proc }).catch(err => {
|
|
91
|
+
console.warn(`[focus-executor] Failed to check delivery state for "${focusName}":`, err.message);
|
|
92
92
|
// Fallback: terminate to avoid idle money burn.
|
|
93
|
-
terminateTeam(
|
|
93
|
+
terminateTeam(focusId);
|
|
94
94
|
});
|
|
95
95
|
});
|
|
96
96
|
// Handle process exit
|
|
97
97
|
proc.on('close', async (code, signal) => {
|
|
98
|
-
console.log(`[
|
|
98
|
+
console.log(`[focus-executor] Team lead for "${focusName}" exited (code: ${code}, signal: ${signal})`);
|
|
99
99
|
// Detect --resume failure: if the process exits quickly with a non-zero
|
|
100
100
|
// code and --resume was used, retry without resume. This handles cases
|
|
101
101
|
// where the session file was cleaned up, corrupted, or incompatible.
|
|
102
102
|
const RESUME_FAILURE_THRESHOLD_MS = 15_000;
|
|
103
103
|
const elapsedMs = Date.now() - spawnedAt;
|
|
104
104
|
if (resumeId && code !== 0 && code !== null && elapsedMs < RESUME_FAILURE_THRESHOLD_MS) {
|
|
105
|
-
console.warn(`[
|
|
105
|
+
console.warn(`[focus-executor] Resume failed for "${focusName}" (exited in ${elapsedMs}ms), retrying without resume`);
|
|
106
106
|
// Release governor slot and clean up minimal state
|
|
107
|
-
governor?.releaseSlot('
|
|
107
|
+
governor?.releaseSlot('focus');
|
|
108
108
|
completionDetector.destroy();
|
|
109
109
|
stdoutLogStream.end();
|
|
110
110
|
stderrStream.end();
|
|
@@ -119,18 +119,18 @@ export function attachSessionLifecycle(ctx) {
|
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
catch (updateErr) {
|
|
122
|
-
console.warn('[
|
|
122
|
+
console.warn('[focus-executor] Failed to update session after resume failure:', updateErr.message);
|
|
123
123
|
}
|
|
124
124
|
teamState.phase = 'terminated';
|
|
125
125
|
const activeTeams = getActiveTeams();
|
|
126
|
-
activeTeams.delete(
|
|
126
|
+
activeTeams.delete(focusId);
|
|
127
127
|
// Re-spawn without --resume (dynamic import to avoid circular dependency)
|
|
128
|
-
const {
|
|
129
|
-
await
|
|
128
|
+
const { spawnFocusTeam } = await import('./team-spawner.js');
|
|
129
|
+
await spawnFocusTeam({ ...params, lastClaudeSessionId: null });
|
|
130
130
|
return;
|
|
131
131
|
}
|
|
132
132
|
// Release governor slot (if governor is configured)
|
|
133
|
-
governor?.releaseSlot('
|
|
133
|
+
governor?.releaseSlot('focus');
|
|
134
134
|
// Null out stdin so post-exit merge logic falls through to the
|
|
135
135
|
// fallback resolution agent instead of sending messages to a dead process.
|
|
136
136
|
teamState.leadStdin = null;
|
|
@@ -139,7 +139,7 @@ export function attachSessionLifecycle(ctx) {
|
|
|
139
139
|
await activityTracker.finalFlush();
|
|
140
140
|
}
|
|
141
141
|
catch (err) {
|
|
142
|
-
console.warn('[
|
|
142
|
+
console.warn('[focus-executor] activityTracker.finalFlush failed:', err.message);
|
|
143
143
|
}
|
|
144
144
|
// Clean up streams
|
|
145
145
|
completionDetector.destroy();
|
|
@@ -156,9 +156,9 @@ export function attachSessionLifecycle(ctx) {
|
|
|
156
156
|
});
|
|
157
157
|
});
|
|
158
158
|
proc.on('error', async (err) => {
|
|
159
|
-
console.error(`[
|
|
159
|
+
console.error(`[focus-executor] Team lead for "${focusName}" error:`, err.message);
|
|
160
160
|
// Release governor slot (if governor is configured)
|
|
161
|
-
governor?.releaseSlot('
|
|
161
|
+
governor?.releaseSlot('focus');
|
|
162
162
|
try {
|
|
163
163
|
await withRetry(() => updateSession(sessionId, {
|
|
164
164
|
status: 'failed',
|
|
@@ -168,37 +168,37 @@ export function attachSessionLifecycle(ctx) {
|
|
|
168
168
|
}), { maxAttempts: 3, baseDelayMs: 1000, label: 'session-update-error' });
|
|
169
169
|
}
|
|
170
170
|
catch (updateErr) {
|
|
171
|
-
console.warn(`[
|
|
171
|
+
console.warn(`[focus-executor] Failed to update session after retries:`, updateErr.message);
|
|
172
172
|
}
|
|
173
173
|
completionDetector.destroy();
|
|
174
174
|
stdoutLogStream.end();
|
|
175
175
|
stderrStream.end();
|
|
176
176
|
jsonlStream.end();
|
|
177
|
-
// Worktree is
|
|
177
|
+
// Worktree is focus-owned -- do not remove on team error
|
|
178
178
|
teamState.phase = 'terminated';
|
|
179
179
|
const activeTeams = getActiveTeams();
|
|
180
|
-
activeTeams.delete(
|
|
180
|
+
activeTeams.delete(focusId);
|
|
181
181
|
});
|
|
182
182
|
}
|
|
183
183
|
// ── Team lifecycle management ────────────────────────────────────────
|
|
184
184
|
/**
|
|
185
|
-
* Terminate a
|
|
185
|
+
* Terminate a focus team.
|
|
186
186
|
*
|
|
187
187
|
* Sends a deactivation message via stdin (if open) before SIGTERM
|
|
188
188
|
* to allow the team lead to process the shutdown gracefully.
|
|
189
189
|
*/
|
|
190
|
-
export function terminateTeam(
|
|
190
|
+
export function terminateTeam(focusId) {
|
|
191
191
|
const activeTeams = getActiveTeams();
|
|
192
|
-
const team = activeTeams.get(
|
|
192
|
+
const team = activeTeams.get(focusId);
|
|
193
193
|
if (!team || !team.leadPid)
|
|
194
194
|
return false;
|
|
195
195
|
// Warn if terminating while conflict resolution is in progress
|
|
196
196
|
if (team.resolvingMergeConflict) {
|
|
197
|
-
console.warn(`[
|
|
197
|
+
console.warn(`[focus-executor] Terminating team "${team.focusName}" while merge conflict resolution is in progress`);
|
|
198
198
|
}
|
|
199
|
-
console.log(`[
|
|
199
|
+
console.log(`[focus-executor] Terminating team for focus "${team.focusName}" (phase: ${team.phase})`);
|
|
200
200
|
team.phase = 'shutting_down';
|
|
201
|
-
clearNarration(
|
|
201
|
+
clearNarration(focusId);
|
|
202
202
|
try {
|
|
203
203
|
// Send a deactivation message first to let the team lead process it
|
|
204
204
|
if (team.leadStdin) {
|
|
@@ -209,7 +209,7 @@ export function terminateTeam(strategyId) {
|
|
|
209
209
|
team.leadStdin?.end();
|
|
210
210
|
}
|
|
211
211
|
catch (e) {
|
|
212
|
-
console.debug('[
|
|
212
|
+
console.debug('[focus-executor] stdin.end() failed (may already be closed):', e.message);
|
|
213
213
|
}
|
|
214
214
|
}, 5000);
|
|
215
215
|
}
|
|
@@ -217,48 +217,48 @@ export function terminateTeam(strategyId) {
|
|
|
217
217
|
process.kill(team.leadPid, 'SIGTERM');
|
|
218
218
|
// Escalate to SIGKILL after timeout
|
|
219
219
|
setTimeout(() => {
|
|
220
|
-
if (activeTeams.has(
|
|
220
|
+
if (activeTeams.has(focusId) && team.leadPid) {
|
|
221
221
|
try {
|
|
222
222
|
process.kill(team.leadPid, 'SIGKILL');
|
|
223
223
|
}
|
|
224
224
|
catch (e) {
|
|
225
|
-
console.debug('[
|
|
225
|
+
console.debug('[focus-executor] SIGKILL failed (process may have exited):', e.message);
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
228
|
}, 30000);
|
|
229
229
|
return true;
|
|
230
230
|
}
|
|
231
231
|
catch (e) {
|
|
232
|
-
console.debug(`[
|
|
232
|
+
console.debug(`[focus-executor] terminateTeam: process may have already exited:`, e.message);
|
|
233
233
|
return false;
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
/**
|
|
237
237
|
* Wait for a team's process to exit (leave activeTeams).
|
|
238
238
|
*
|
|
239
|
-
* Polls activeTeams until the
|
|
239
|
+
* Polls activeTeams until the focus is no longer present,
|
|
240
240
|
* which happens when handleTeamCompletion runs on the 'close' event.
|
|
241
241
|
* If the timeout expires, sends SIGKILL and waits briefly.
|
|
242
242
|
*
|
|
243
|
-
* @param
|
|
243
|
+
* @param focusId - Focus to wait for
|
|
244
244
|
* @param timeoutMs - Max wait time in ms (default 30s)
|
|
245
245
|
* @returns true if team exited within timeout, false if forced
|
|
246
246
|
*/
|
|
247
|
-
export async function waitForTeamExit(
|
|
247
|
+
export async function waitForTeamExit(focusId, timeoutMs = 30000) {
|
|
248
248
|
const activeTeams = getActiveTeams();
|
|
249
|
-
const team = activeTeams.get(
|
|
249
|
+
const team = activeTeams.get(focusId);
|
|
250
250
|
if (!team)
|
|
251
251
|
return true; // Already gone
|
|
252
252
|
const deadline = Date.now() + timeoutMs;
|
|
253
253
|
const pollMs = 500;
|
|
254
254
|
while (Date.now() < deadline) {
|
|
255
|
-
if (!activeTeams.has(
|
|
255
|
+
if (!activeTeams.has(focusId))
|
|
256
256
|
return true;
|
|
257
257
|
await new Promise(resolve => setTimeout(resolve, pollMs));
|
|
258
258
|
}
|
|
259
259
|
// Timeout expired -- escalate to SIGKILL
|
|
260
260
|
if (team.leadPid) {
|
|
261
|
-
console.warn(`[
|
|
261
|
+
console.warn(`[focus-executor] Team "${team.focusName}" did not exit within ${timeoutMs}ms, sending SIGKILL`);
|
|
262
262
|
try {
|
|
263
263
|
process.kill(team.leadPid, 'SIGKILL');
|
|
264
264
|
}
|
|
@@ -266,42 +266,42 @@ export async function waitForTeamExit(strategyId, timeoutMs = 30000) {
|
|
|
266
266
|
// Brief wait for SIGKILL to take effect
|
|
267
267
|
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
268
268
|
}
|
|
269
|
-
return !activeTeams.has(
|
|
269
|
+
return !activeTeams.has(focusId);
|
|
270
270
|
}
|
|
271
271
|
/**
|
|
272
272
|
* Terminate all active teams.
|
|
273
273
|
*/
|
|
274
274
|
export function terminateAllTeams() {
|
|
275
275
|
const activeTeams = getActiveTeams();
|
|
276
|
-
for (const
|
|
277
|
-
terminateTeam(
|
|
276
|
+
for (const focusId of activeTeams.keys()) {
|
|
277
|
+
terminateTeam(focusId);
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
/**
|
|
281
|
-
* Detect
|
|
281
|
+
* Detect focuses that have been deactivated (agent role removed)
|
|
282
282
|
* and shut down their active teams.
|
|
283
283
|
*/
|
|
284
|
-
export async function
|
|
284
|
+
export async function detectDeactivatedFocuses(config) {
|
|
285
285
|
const activeTeams = getActiveTeams();
|
|
286
286
|
if (activeTeams.size === 0)
|
|
287
287
|
return;
|
|
288
288
|
try {
|
|
289
|
-
const
|
|
290
|
-
const
|
|
291
|
-
for (const [
|
|
292
|
-
if (!
|
|
293
|
-
console.log(`[
|
|
294
|
-
terminateTeam(
|
|
289
|
+
const readyFocuses = await getReadyFocuses(config.organizationId, config.productId);
|
|
290
|
+
const activeFocusIds = new Set(readyFocuses.map(s => s.focus_id));
|
|
291
|
+
for (const [focusId, team] of activeTeams) {
|
|
292
|
+
if (!activeFocusIds.has(focusId) && team.phase !== 'shutting_down' && team.phase !== 'terminated') {
|
|
293
|
+
console.log(`[focus-executor] Focus "${team.focusName}" deactivated -- shutting down team`);
|
|
294
|
+
terminateTeam(focusId);
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
298
|
catch (err) {
|
|
299
|
-
console.warn(`[
|
|
299
|
+
console.warn(`[focus-executor] Failed to check for deactivated focuses:`, err.message);
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
302
|
/**
|
|
303
303
|
* Check active teams for newly completed deliveries and merge
|
|
304
|
-
* the
|
|
304
|
+
* the focus branch to integration incrementally.
|
|
305
305
|
*
|
|
306
306
|
* Called from the poll loop. For each active team, queries delivery
|
|
307
307
|
* statuses and triggers a merge when any delivery reaches verify/done
|
|
@@ -309,42 +309,42 @@ export async function detectDeactivatedStrategies(config) {
|
|
|
309
309
|
*
|
|
310
310
|
* After processing merges, checks if ALL active deliveries are terminal
|
|
311
311
|
* and merged. If so, terminates the team proactively since no more work
|
|
312
|
-
* remains. The
|
|
312
|
+
* remains. The focus stays active in the DB -- if new deliveries
|
|
313
313
|
* arrive later, the next poll cycle spawns a fresh team.
|
|
314
314
|
*/
|
|
315
315
|
export async function checkAndMergeCompletedDeliveries(config) {
|
|
316
316
|
const activeTeams = getActiveTeams();
|
|
317
317
|
if (activeTeams.size === 0)
|
|
318
318
|
return;
|
|
319
|
-
for (const [
|
|
319
|
+
for (const [focusId, team] of activeTeams) {
|
|
320
320
|
// Only check teams that are actively executing
|
|
321
321
|
if (team.phase !== 'executing')
|
|
322
322
|
continue;
|
|
323
323
|
// Skip merge attempts while team lead is resolving a merge conflict
|
|
324
324
|
if (team.resolvingMergeConflict) {
|
|
325
|
-
console.log(`[
|
|
325
|
+
console.log(`[focus-executor] Skipping merge check for "${team.focusName}" -- conflict resolution in progress`);
|
|
326
326
|
continue;
|
|
327
327
|
}
|
|
328
328
|
try {
|
|
329
|
-
const deliveries = await
|
|
329
|
+
const deliveries = await getFocusDeliveries(focusId);
|
|
330
330
|
// Find deliveries in verify/done that we haven't merged for yet
|
|
331
331
|
const newlyCompleted = deliveries.filter(d => (d.executionStatus === 'verify' || d.executionStatus === 'done')
|
|
332
332
|
&& !team.mergedDeliveryIds.has(d.id));
|
|
333
333
|
if (newlyCompleted.length > 0) {
|
|
334
334
|
const completedNames = newlyCompleted.map(d => d.name).join(', ');
|
|
335
|
-
console.log(`[
|
|
335
|
+
console.log(`[focus-executor] ${newlyCompleted.length} delivery(ies) completed mid-flight for "${team.focusName}": ${completedNames} -- merging to integration`);
|
|
336
336
|
// One merge covers all completed deliveries (same branch).
|
|
337
337
|
// Pass the newly-completed IDs so git state is recorded only for
|
|
338
338
|
// these — never for queued/planning deliveries on the same branch.
|
|
339
|
-
const mergeResult = await
|
|
339
|
+
const mergeResult = await mergeFocusBranch(config, team, team.leadSessionId ?? '', team.branchName, newlyCompleted.map(d => d.id));
|
|
340
340
|
if (mergeResult.mergeSucceeded) {
|
|
341
|
-
// Track merged deliveries (git state already reported by
|
|
341
|
+
// Track merged deliveries (git state already reported by mergeFocusBranch)
|
|
342
342
|
for (const d of newlyCompleted) {
|
|
343
343
|
team.mergedDeliveryIds.add(d.id);
|
|
344
344
|
}
|
|
345
345
|
}
|
|
346
346
|
else {
|
|
347
|
-
console.warn(`[
|
|
347
|
+
console.warn(`[focus-executor] Mid-flight merge failed for "${team.focusName}": ${mergeResult.exitReason}`);
|
|
348
348
|
// Escalate merge conflict for each unmerged delivery
|
|
349
349
|
for (const d of newlyCompleted) {
|
|
350
350
|
escalateMergeConflict({
|
|
@@ -355,7 +355,7 @@ export async function checkAndMergeCompletedDeliveries(config) {
|
|
|
355
355
|
branchName: team.branchName,
|
|
356
356
|
integrationBranch: config.integrationBranch,
|
|
357
357
|
mergeError: mergeResult.exitReason,
|
|
358
|
-
}).catch(err => console.warn(`[
|
|
358
|
+
}).catch(err => console.warn(`[focus-executor] escalateMergeConflict failed for ${d.id}:`, err.message));
|
|
359
359
|
}
|
|
360
360
|
// Don't mark as merged -- will retry next poll. Team continues working.
|
|
361
361
|
}
|
|
@@ -365,15 +365,15 @@ export async function checkAndMergeCompletedDeliveries(config) {
|
|
|
365
365
|
// Otherwise the team is idle, waiting for the daemon to push new work.
|
|
366
366
|
const teamWork = deliveries.filter(d => isStatusAgentActionable(d.executionStatus ?? ''));
|
|
367
367
|
if (teamWork.length > 0) {
|
|
368
|
-
console.log(`[
|
|
368
|
+
console.log(`[focus-executor] ${teamWork.length} delivery(ies) still queued/running for "${team.focusName}" -- team continues`);
|
|
369
369
|
continue;
|
|
370
370
|
}
|
|
371
371
|
// No queued/running deliveries -- team is idle, completion detector
|
|
372
372
|
// handles the actual idle transition. Log for observability.
|
|
373
|
-
console.log(`[
|
|
373
|
+
console.log(`[focus-executor] All deliveries complete for "${team.focusName}" -- team is idle`);
|
|
374
374
|
}
|
|
375
375
|
catch (err) {
|
|
376
|
-
console.warn(`[
|
|
376
|
+
console.warn(`[focus-executor] Failed to check completed deliveries for "${team.focusName}":`, err.message);
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
379
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../src/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../src/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/spawn-cooldown.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Spawn cooldown: prevents crash loops by tracking recently-torn-down
|
|
2
|
+
* Spawn cooldown: prevents crash loops by tracking recently-torn-down focuses.
|
|
3
3
|
*
|
|
4
|
-
* When a
|
|
4
|
+
* When a focus is torn down, it enters a cooldown period before it can be
|
|
5
5
|
* respawned. Consecutive teardowns increase the cooldown exponentially
|
|
6
6
|
* (1min, 2min, 4min, 8min, capped at 10min).
|
|
7
7
|
*/
|
|
8
|
-
/** Record a
|
|
9
|
-
export declare function
|
|
10
|
-
/** Check if a
|
|
11
|
-
export declare function isInSpawnCooldown(
|
|
12
|
-
/** Clear cooldown for a
|
|
13
|
-
export declare function clearSpawnCooldown(
|
|
8
|
+
/** Record a focus teardown for spawn cooldown tracking. */
|
|
9
|
+
export declare function recordFocusTeardown(focusId: string): void;
|
|
10
|
+
/** Check if a focus is in spawn cooldown. */
|
|
11
|
+
export declare function isInSpawnCooldown(focusId: string): boolean;
|
|
12
|
+
/** Clear cooldown for a focus (e.g. after successful long-running session). */
|
|
13
|
+
export declare function clearSpawnCooldown(focusId: string): void;
|
|
14
14
|
//# sourceMappingURL=spawn-cooldown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-cooldown.d.ts","sourceRoot":"","sources":["../src/spawn-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,
|
|
1
|
+
{"version":3,"file":"spawn-cooldown.d.ts","sourceRoot":"","sources":["../src/spawn-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOzD;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAS1D;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAExD"}
|
package/dist/spawn-cooldown.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Spawn cooldown: prevents crash loops by tracking recently-torn-down
|
|
2
|
+
* Spawn cooldown: prevents crash loops by tracking recently-torn-down focuses.
|
|
3
3
|
*
|
|
4
|
-
* When a
|
|
4
|
+
* When a focus is torn down, it enters a cooldown period before it can be
|
|
5
5
|
* respawned. Consecutive teardowns increase the cooldown exponentially
|
|
6
6
|
* (1min, 2min, 4min, 8min, capped at 10min).
|
|
7
7
|
*/
|
|
@@ -17,25 +17,25 @@ const COOLDOWN_CLEANUP_THRESHOLD_MS = 2 * SPAWN_COOLDOWN_MAX_MS;
|
|
|
17
17
|
*/
|
|
18
18
|
function cleanupStaleEntries() {
|
|
19
19
|
const now = Date.now();
|
|
20
|
-
for (const [
|
|
20
|
+
for (const [focusId, entry] of teardownTimestamps) {
|
|
21
21
|
if (now - entry.time > COOLDOWN_CLEANUP_THRESHOLD_MS) {
|
|
22
|
-
teardownTimestamps.delete(
|
|
22
|
+
teardownTimestamps.delete(focusId);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
/** Record a
|
|
27
|
-
export function
|
|
26
|
+
/** Record a focus teardown for spawn cooldown tracking. */
|
|
27
|
+
export function recordFocusTeardown(focusId) {
|
|
28
28
|
cleanupStaleEntries();
|
|
29
|
-
const existing = teardownTimestamps.get(
|
|
29
|
+
const existing = teardownTimestamps.get(focusId);
|
|
30
30
|
const count = existing ? existing.count + 1 : 1;
|
|
31
|
-
teardownTimestamps.set(
|
|
31
|
+
teardownTimestamps.set(focusId, { time: Date.now(), count });
|
|
32
32
|
const cooldownMs = Math.min(SPAWN_COOLDOWN_BASE_MS * Math.pow(2, count - 1), SPAWN_COOLDOWN_MAX_MS);
|
|
33
|
-
console.log(`[spawn-cooldown]
|
|
33
|
+
console.log(`[spawn-cooldown] Focus ${focusId} torn down (count=${count}, cooldown=${Math.round(cooldownMs / 1000)}s)`);
|
|
34
34
|
}
|
|
35
|
-
/** Check if a
|
|
36
|
-
export function isInSpawnCooldown(
|
|
35
|
+
/** Check if a focus is in spawn cooldown. */
|
|
36
|
+
export function isInSpawnCooldown(focusId) {
|
|
37
37
|
cleanupStaleEntries();
|
|
38
|
-
const entry = teardownTimestamps.get(
|
|
38
|
+
const entry = teardownTimestamps.get(focusId);
|
|
39
39
|
if (!entry)
|
|
40
40
|
return false;
|
|
41
41
|
const cooldownMs = Math.min(SPAWN_COOLDOWN_BASE_MS * Math.pow(2, entry.count - 1), SPAWN_COOLDOWN_MAX_MS);
|
|
@@ -44,8 +44,8 @@ export function isInSpawnCooldown(strategyId) {
|
|
|
44
44
|
}
|
|
45
45
|
return true;
|
|
46
46
|
}
|
|
47
|
-
/** Clear cooldown for a
|
|
48
|
-
export function clearSpawnCooldown(
|
|
49
|
-
teardownTimestamps.delete(
|
|
47
|
+
/** Clear cooldown for a focus (e.g. after successful long-running session). */
|
|
48
|
+
export function clearSpawnCooldown(focusId) {
|
|
49
|
+
teardownTimestamps.delete(focusId);
|
|
50
50
|
}
|
|
51
51
|
//# sourceMappingURL=spawn-cooldown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-cooldown.js","sourceRoot":"","sources":["../src/spawn-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAC9E,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,yBAAyB;AAChE,MAAM,qBAAqB,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,yBAAyB;AAEpE,uEAAuE;AACvE,MAAM,6BAA6B,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAEhE;;;;GAIG;AACH,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"spawn-cooldown.js","sourceRoot":"","sources":["../src/spawn-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAC9E,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,yBAAyB;AAChE,MAAM,qBAAqB,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,yBAAyB;AAEpE,uEAAuE;AACvE,MAAM,6BAA6B,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAEhE;;;;GAIG;AACH,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAClD,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,6BAA6B,EAAE,CAAC;YACrD,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,mBAAmB,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,0BAA0B,OAAO,qBAAqB,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1H,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,mBAAmB,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC1G,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,UAAU,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared spawn environment builder for daemon agent processes.
|
|
3
3
|
*
|
|
4
4
|
* Consolidates the environment setup that was previously duplicated between
|
|
5
|
-
* spawner.ts (buildSpawnEnvironment) and
|
|
5
|
+
* spawner.ts (buildSpawnEnvironment) and focus-executor.ts (buildTeamSpawnEnvironment).
|
|
6
6
|
*
|
|
7
7
|
* CRITICAL: Strips Claude Code session vars (CLAUDECODE, CLAUDE_CODE_*, CLAUDECODE_*)
|
|
8
8
|
* via the shared stripClaudeCodeEnvVars utility from daemon-core. If the daemon was
|
|
@@ -17,7 +17,7 @@ import type { DaemonConfig } from './types.js';
|
|
|
17
17
|
*/
|
|
18
18
|
export interface SpawnIds {
|
|
19
19
|
orgId?: string;
|
|
20
|
-
|
|
20
|
+
focusId?: string;
|
|
21
21
|
sessionId?: string;
|
|
22
22
|
deliveryId?: string;
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-environment.d.ts","sourceRoot":"","sources":["../src/spawn-environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"spawn-environment.d.ts","sourceRoot":"","sources":["../src/spawn-environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,QAAQ,GACZ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CA4BpC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared spawn environment builder for daemon agent processes.
|
|
3
3
|
*
|
|
4
4
|
* Consolidates the environment setup that was previously duplicated between
|
|
5
|
-
* spawner.ts (buildSpawnEnvironment) and
|
|
5
|
+
* spawner.ts (buildSpawnEnvironment) and focus-executor.ts (buildTeamSpawnEnvironment).
|
|
6
6
|
*
|
|
7
7
|
* CRITICAL: Strips Claude Code session vars (CLAUDECODE, CLAUDE_CODE_*, CLAUDECODE_*)
|
|
8
8
|
* via the shared stripClaudeCodeEnvVars utility from daemon-core. If the daemon was
|
|
@@ -28,7 +28,7 @@ export function buildSpawnEnvironment(config, ids) {
|
|
|
28
28
|
...process.env,
|
|
29
29
|
TELORA_DAEMON_AGENT: '1',
|
|
30
30
|
TELORA_MCP_PROFILE: 'execution',
|
|
31
|
-
// Agent Teams always enabled --
|
|
31
|
+
// Agent Teams always enabled -- focus-level execution model
|
|
32
32
|
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1',
|
|
33
33
|
}, { preserve: ['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'] });
|
|
34
34
|
// Inject OTel telemetry env vars when telemetry is enabled
|
|
@@ -37,7 +37,7 @@ export function buildSpawnEnvironment(config, ids) {
|
|
|
37
37
|
port: config.telemetry.port,
|
|
38
38
|
resourceAttributes: {
|
|
39
39
|
'telora.org_id': ids.orgId,
|
|
40
|
-
'telora.
|
|
40
|
+
'telora.focus_id': ids.focusId,
|
|
41
41
|
'telora.delivery_id': ids.deliveryId,
|
|
42
42
|
'telora.session_id': ids.sessionId,
|
|
43
43
|
},
|