@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directive-executor.js","sourceRoot":"","sources":["../src/directive-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"directive-executor.js","sourceRoot":"","sources":["../src/directive-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,12 +35,12 @@ export declare function buildFactoryEvaluationContext(params: {
|
|
|
35
35
|
status: string;
|
|
36
36
|
}>;
|
|
37
37
|
gateResults: Array<{
|
|
38
|
-
|
|
38
|
+
focusId: string;
|
|
39
39
|
gateType: string;
|
|
40
40
|
iteration: number;
|
|
41
41
|
passed: boolean;
|
|
42
42
|
}>;
|
|
43
|
-
|
|
43
|
+
focusId?: string;
|
|
44
44
|
}): EvaluationContext;
|
|
45
45
|
/**
|
|
46
46
|
* Build evaluation context by querying current delivery state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluation-context.d.ts","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,wBAAwB,EAAE,MAAM,CAAC;QACjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,SAAS,EAAE;QACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,WAAW,EAAE,KAAK,CAAC;QAAE,
|
|
1
|
+
{"version":3,"file":"evaluation-context.d.ts","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,wBAAwB,EAAE,MAAM,CAAC;QACjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,SAAS,EAAE;QACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,WAAW,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,iBAAiB,CAqDpB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA4B5B"}
|
|
@@ -22,7 +22,7 @@ import { getDeliveryIssues, getDeliverySessionCount, } from './supabase.js';
|
|
|
22
22
|
* gate results from its own queries).
|
|
23
23
|
*/
|
|
24
24
|
export function buildFactoryEvaluationContext(params) {
|
|
25
|
-
const { instanceState, blueprint, workUnits, gateResults,
|
|
25
|
+
const { instanceState, blueprint, workUnits, gateResults, focusId } = params;
|
|
26
26
|
// Count work units by status
|
|
27
27
|
const workUnitsByStatus = {};
|
|
28
28
|
for (const wu of workUnits) {
|
|
@@ -37,9 +37,9 @@ export function buildFactoryEvaluationContext(params) {
|
|
|
37
37
|
const wallClockLimitSeconds = blueprint.maxWallClockHours != null
|
|
38
38
|
? blueprint.maxWallClockHours * 3600
|
|
39
39
|
: null;
|
|
40
|
-
// Filter gate results by
|
|
41
|
-
const scopedGateResults =
|
|
42
|
-
? gateResults.filter(r => r.
|
|
40
|
+
// Filter gate results by focus if scoped
|
|
41
|
+
const scopedGateResults = focusId
|
|
42
|
+
? gateResults.filter(r => r.focusId === focusId)
|
|
43
43
|
: gateResults;
|
|
44
44
|
// Build configValues for dynamic guard thresholds
|
|
45
45
|
const configValues = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluation-context.js","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAMvB,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAE/C;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAe7C;IACC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"evaluation-context.js","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus completion event handler - reacts to CompletionDetector events.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from focus-executor.ts. Handles the decision logic when a
|
|
5
|
+
* team lead completes a work cycle: terminate if done, send more work, or
|
|
6
|
+
* (for planning teams) refresh from MCP-written deliveries / escalate.
|
|
7
|
+
*/
|
|
8
|
+
import type { ChildProcess } from 'node:child_process';
|
|
9
|
+
import type { FocusTeamState, FocusDeliveryInfo, FocusIssueInfo, ProgressSnapshot } from './types.js';
|
|
10
|
+
import { CompletionDetector, type CompletionInfo } from './completion-detector.js';
|
|
11
|
+
/** Reason string emitted when a planning team produces no deliveries. */
|
|
12
|
+
export declare const PLANNING_NO_DELIVERIES_REASON = "planning produced no deliveries";
|
|
13
|
+
/** Reason string emitted when re-engagement is bounded by no-progress limit. */
|
|
14
|
+
export declare const NO_PROGRESS_ESCALATION_REASON = "team unable to make progress on remaining deliveries";
|
|
15
|
+
/**
|
|
16
|
+
* Maximum consecutive re-engagement cycles with no measurable progress before
|
|
17
|
+
* the scope-coverage guard escalates. Configurable via env so operators can
|
|
18
|
+
* relax or tighten the bound without a code change.
|
|
19
|
+
*/
|
|
20
|
+
export declare const SCOPE_COVERAGE_NO_PROGRESS_LIMIT: number;
|
|
21
|
+
export interface CompletionEventContext {
|
|
22
|
+
focusId: string;
|
|
23
|
+
focusName: string;
|
|
24
|
+
teamState: FocusTeamState;
|
|
25
|
+
completionDetector: CompletionDetector;
|
|
26
|
+
proc: ChildProcess;
|
|
27
|
+
completionInfo: CompletionInfo;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Injectable dependencies. Defaults to the real implementations; tests can
|
|
31
|
+
* override them to assert behavior without spinning up Supabase/MCP.
|
|
32
|
+
*/
|
|
33
|
+
export interface CompletionEventDeps {
|
|
34
|
+
getFocusDeliveries: (focusId: string) => Promise<FocusDeliveryInfo[]>;
|
|
35
|
+
getFocusIssues: (focusId: string) => Promise<FocusIssueInfo[]>;
|
|
36
|
+
createEscalation: (params: {
|
|
37
|
+
organizationId: string;
|
|
38
|
+
sessionId: string;
|
|
39
|
+
issueId: string | null;
|
|
40
|
+
reasonType: string;
|
|
41
|
+
description: string;
|
|
42
|
+
whatWasTried?: string;
|
|
43
|
+
helpNeeded?: string;
|
|
44
|
+
}) => Promise<void>;
|
|
45
|
+
terminateTeam: (focusId: string) => boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Escalate when a planning team finishes its initial turn without writing
|
|
49
|
+
* any deliveries via MCP. The team is then terminated -- no respawn.
|
|
50
|
+
*
|
|
51
|
+
* Exported so tests and sister deliveries can verify the contract.
|
|
52
|
+
*/
|
|
53
|
+
export declare function escalatePlanningFailure(params: {
|
|
54
|
+
organizationId: string;
|
|
55
|
+
sessionId: string;
|
|
56
|
+
focusId: string;
|
|
57
|
+
focusName: string;
|
|
58
|
+
agentRoleId: string;
|
|
59
|
+
}, deps?: Pick<CompletionEventDeps, 'createEscalation'>): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Handle a 'complete' event from the CompletionDetector.
|
|
62
|
+
*
|
|
63
|
+
* Queries current delivery and issue state to decide whether to:
|
|
64
|
+
* - Terminate the team (all deliveries terminal or no open issues remain), or
|
|
65
|
+
* - Send a mid-focus handoff message with remaining work.
|
|
66
|
+
*
|
|
67
|
+
* Extracted from the inline event callback in spawnFocusTeam to eliminate
|
|
68
|
+
* deep nesting inside an async Promise chain inside an event listener.
|
|
69
|
+
*/
|
|
70
|
+
export declare function handleCompletionEvent(ctx: CompletionEventContext, deps?: CompletionEventDeps): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Build a progress snapshot from the current focus state.
|
|
73
|
+
*
|
|
74
|
+
* Captures the two values that must change for the team to be making
|
|
75
|
+
* progress: each delivery's execution_status and the total issue count.
|
|
76
|
+
*/
|
|
77
|
+
export declare function takeProgressSnapshot(deliveries: Pick<FocusDeliveryInfo, 'id' | 'executionStatus'>[], issues: {
|
|
78
|
+
id: string;
|
|
79
|
+
}[]): ProgressSnapshot;
|
|
80
|
+
/** True when two snapshots have identical delivery statuses and issue count. */
|
|
81
|
+
export declare function snapshotsEqual(a: ProgressSnapshot, b: ProgressSnapshot): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Escalate when the team has been re-engaged repeatedly without making
|
|
84
|
+
* any measurable progress on the remaining non-terminal deliveries.
|
|
85
|
+
*
|
|
86
|
+
* Exported so tests can verify the contract.
|
|
87
|
+
*/
|
|
88
|
+
export declare function escalateNoProgress(params: {
|
|
89
|
+
organizationId: string;
|
|
90
|
+
sessionId: string;
|
|
91
|
+
focusId: string;
|
|
92
|
+
focusName: string;
|
|
93
|
+
agentRoleId: string;
|
|
94
|
+
cycles: number;
|
|
95
|
+
remaining: FocusDeliveryInfo[];
|
|
96
|
+
}, deps?: Pick<CompletionEventDeps, 'createEscalation'>): Promise<void>;
|
|
97
|
+
//# sourceMappingURL=focus-completion-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-completion-event.d.ts","sourceRoot":"","sources":["../src/focus-completion-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus completion event handler - reacts to CompletionDetector events.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from focus-executor.ts. Handles the decision logic when a
|
|
5
|
+
* team lead completes a work cycle: terminate if done, send more work, or
|
|
6
|
+
* (for planning teams) refresh from MCP-written deliveries / escalate.
|
|
7
|
+
*/
|
|
8
|
+
import { sendMessage, withRetry, ESCALATION_REASONS } from '@telora/daemon-core';
|
|
9
|
+
import { isStatusCascadable, isStatusAgentActionable } from './stage-classifier.js';
|
|
10
|
+
import { getFocusDeliveries, getFocusIssues } from './queries/focuses.js';
|
|
11
|
+
import { buildWakeMessage, buildReEngagementMessage } from './focus-prompt-builder.js';
|
|
12
|
+
import { OPEN_ISSUE_STATUSES } from './constants.js';
|
|
13
|
+
import { terminateTeam as defaultTerminateTeam } from './focus-team-lifecycle.js';
|
|
14
|
+
import { createEscalation as defaultCreateEscalation } from './queries/issues.js';
|
|
15
|
+
/** Reason string emitted when a planning team produces no deliveries. */
|
|
16
|
+
export const PLANNING_NO_DELIVERIES_REASON = 'planning produced no deliveries';
|
|
17
|
+
/** Reason string emitted when re-engagement is bounded by no-progress limit. */
|
|
18
|
+
export const NO_PROGRESS_ESCALATION_REASON = 'team unable to make progress on remaining deliveries';
|
|
19
|
+
/**
|
|
20
|
+
* Maximum consecutive re-engagement cycles with no measurable progress before
|
|
21
|
+
* the scope-coverage guard escalates. Configurable via env so operators can
|
|
22
|
+
* relax or tighten the bound without a code change.
|
|
23
|
+
*/
|
|
24
|
+
export const SCOPE_COVERAGE_NO_PROGRESS_LIMIT = (() => {
|
|
25
|
+
const raw = process.env.TELORA_SCOPE_COVERAGE_NO_PROGRESS_LIMIT;
|
|
26
|
+
if (!raw)
|
|
27
|
+
return 3;
|
|
28
|
+
const parsed = Number.parseInt(raw, 10);
|
|
29
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 3;
|
|
30
|
+
})();
|
|
31
|
+
const defaultDeps = {
|
|
32
|
+
getFocusDeliveries,
|
|
33
|
+
getFocusIssues,
|
|
34
|
+
createEscalation: defaultCreateEscalation,
|
|
35
|
+
terminateTeam: defaultTerminateTeam,
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Escalate when a planning team finishes its initial turn without writing
|
|
39
|
+
* any deliveries via MCP. The team is then terminated -- no respawn.
|
|
40
|
+
*
|
|
41
|
+
* Exported so tests and sister deliveries can verify the contract.
|
|
42
|
+
*/
|
|
43
|
+
export async function escalatePlanningFailure(params, deps = defaultDeps) {
|
|
44
|
+
const { sessionId, focusName, agentRoleId } = params;
|
|
45
|
+
try {
|
|
46
|
+
await withRetry(() => deps.createEscalation({
|
|
47
|
+
organizationId: params.organizationId,
|
|
48
|
+
sessionId,
|
|
49
|
+
issueId: null,
|
|
50
|
+
reasonType: ESCALATION_REASONS.NEEDS_CLARIFICATION,
|
|
51
|
+
description: `Planning team for focus "${focusName}" finished its initial turn without ` +
|
|
52
|
+
`creating any deliveries. Reason: ${PLANNING_NO_DELIVERIES_REASON}.\n\n` +
|
|
53
|
+
`**Focus:** ${focusName}\n` +
|
|
54
|
+
`**Focus ID:** ${params.focusId}\n` +
|
|
55
|
+
`**Agent role:** ${agentRoleId}\n\n` +
|
|
56
|
+
`The team has been terminated. A human must either scope the focus ` +
|
|
57
|
+
`manually or re-queue it after clarifying intent.`,
|
|
58
|
+
whatWasTried: `Spawned a planning team to scope deliveries for "${focusName}".`,
|
|
59
|
+
helpNeeded: `Review the focus intent and either scope deliveries manually or update the focus description so the next planning attempt can succeed.`,
|
|
60
|
+
}), { maxAttempts: 3, label: `escalation-planning-no-deliveries-${params.focusId}` });
|
|
61
|
+
console.log(`[focus-executor] Created planning-failure escalation for "${focusName}" ` +
|
|
62
|
+
`(reason: ${PLANNING_NO_DELIVERIES_REASON})`);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.error(`[focus-executor] Failed to create planning-failure escalation for "${focusName}": ${err.message}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// ── Handler ─────────────────────────────────────────────────────────────
|
|
69
|
+
/**
|
|
70
|
+
* Handle a 'complete' event from the CompletionDetector.
|
|
71
|
+
*
|
|
72
|
+
* Queries current delivery and issue state to decide whether to:
|
|
73
|
+
* - Terminate the team (all deliveries terminal or no open issues remain), or
|
|
74
|
+
* - Send a mid-focus handoff message with remaining work.
|
|
75
|
+
*
|
|
76
|
+
* Extracted from the inline event callback in spawnFocusTeam to eliminate
|
|
77
|
+
* deep nesting inside an async Promise chain inside an event listener.
|
|
78
|
+
*/
|
|
79
|
+
export async function handleCompletionEvent(ctx, deps = defaultDeps) {
|
|
80
|
+
const { focusId, focusName, teamState, completionDetector, proc } = ctx;
|
|
81
|
+
const [currentDeliveries, currentIssues] = await Promise.all([
|
|
82
|
+
deps.getFocusDeliveries(focusId),
|
|
83
|
+
deps.getFocusIssues(focusId),
|
|
84
|
+
]);
|
|
85
|
+
// Wake-cycle refresh (Option A): planning teams spawn with knownDeliveryIds
|
|
86
|
+
// empty. The MCP-driven planning turn writes deliveries to the DB, so we
|
|
87
|
+
// re-snapshot them here before any downstream merge/completion logic looks
|
|
88
|
+
// at the set. WHY Option A: keeps the refresh on the existing wake path
|
|
89
|
+
// instead of polling, so it runs exactly when new deliveries become visible.
|
|
90
|
+
if (teamState.planningPhase) {
|
|
91
|
+
if (currentDeliveries.length === 0) {
|
|
92
|
+
console.warn(`[focus-executor] Planning team for "${focusName}" produced no deliveries ` +
|
|
93
|
+
`-- escalating and terminating`);
|
|
94
|
+
await escalatePlanningFailure({
|
|
95
|
+
organizationId: teamState.organizationId,
|
|
96
|
+
sessionId: teamState.leadSessionId ?? '',
|
|
97
|
+
focusId,
|
|
98
|
+
focusName,
|
|
99
|
+
agentRoleId: teamState.roleId,
|
|
100
|
+
}, deps);
|
|
101
|
+
teamState.shutdownReason = 'work_complete';
|
|
102
|
+
deps.terminateTeam(focusId);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
for (const d of currentDeliveries) {
|
|
106
|
+
teamState.knownDeliveryIds.add(d.id);
|
|
107
|
+
teamState.deliveryStageIds.set(d.id, d.currentWorkflowStageId);
|
|
108
|
+
}
|
|
109
|
+
teamState.planningPhase = false;
|
|
110
|
+
console.log(`[focus-executor] Planning refresh for "${focusName}": ` +
|
|
111
|
+
`${currentDeliveries.length} delivery(ies) discovered`);
|
|
112
|
+
}
|
|
113
|
+
// Scope-coverage guard: only terminate when EVERY delivery is in a
|
|
114
|
+
// terminal-for-the-team state (verify, in_review, done, cancelled). The
|
|
115
|
+
// existing isStatusCascadable() classifier matches that set; non-terminal
|
|
116
|
+
// states (planning, queued, iterating, coding, paused) block termination
|
|
117
|
+
// so the team is re-engaged on remaining work instead of idle-quitting
|
|
118
|
+
// while unfinished deliveries are still in flight.
|
|
119
|
+
const nonTerminal = currentDeliveries.filter(d => !isStatusCascadable(d.executionStatus ?? ''));
|
|
120
|
+
if (nonTerminal.length === 0) {
|
|
121
|
+
console.log(`[focus-executor] All deliveries terminal for "${focusName}" -- terminating team`);
|
|
122
|
+
teamState.shutdownReason = 'work_complete';
|
|
123
|
+
deps.terminateTeam(focusId);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Capture the current snapshot for progress detection. Treat both null
|
|
127
|
+
// and undefined as "no prior snapshot" -- legacy test fixtures may not set
|
|
128
|
+
// the field, and a fresh team has lastProgressSnapshot=null.
|
|
129
|
+
const snapshot = takeProgressSnapshot(currentDeliveries, currentIssues);
|
|
130
|
+
const priorSnapshot = teamState.lastProgressSnapshot ?? null;
|
|
131
|
+
const madeProgress = priorSnapshot === null
|
|
132
|
+
? true
|
|
133
|
+
: !snapshotsEqual(priorSnapshot, snapshot);
|
|
134
|
+
if (madeProgress) {
|
|
135
|
+
teamState.noProgressCycles = 0;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
teamState.noProgressCycles = (teamState.noProgressCycles ?? 0) + 1;
|
|
139
|
+
}
|
|
140
|
+
teamState.lastProgressSnapshot = snapshot;
|
|
141
|
+
// If we have crossed the no-progress threshold, escalate and shut the
|
|
142
|
+
// team down so a human can intervene. This prevents an infinite loop of
|
|
143
|
+
// "re-engage -> no-op -> re-engage" while the team is stuck.
|
|
144
|
+
if (teamState.noProgressCycles >= SCOPE_COVERAGE_NO_PROGRESS_LIMIT) {
|
|
145
|
+
console.warn(`[focus-executor] Scope-coverage guard tripped for "${focusName}" -- ` +
|
|
146
|
+
`${teamState.noProgressCycles} consecutive cycles with no progress on ${nonTerminal.length} ` +
|
|
147
|
+
`non-terminal delivery(ies); escalating and terminating`);
|
|
148
|
+
await escalateNoProgress({
|
|
149
|
+
organizationId: teamState.organizationId,
|
|
150
|
+
sessionId: teamState.leadSessionId ?? '',
|
|
151
|
+
focusId,
|
|
152
|
+
focusName,
|
|
153
|
+
agentRoleId: teamState.roleId,
|
|
154
|
+
cycles: teamState.noProgressCycles,
|
|
155
|
+
remaining: nonTerminal,
|
|
156
|
+
}, deps);
|
|
157
|
+
teamState.shutdownReason = 'work_complete';
|
|
158
|
+
deps.terminateTeam(focusId);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
// If actionable deliveries with open issues remain, the existing wake
|
|
162
|
+
// message handles them. Otherwise the team needs a re-engagement nudge
|
|
163
|
+
// for non-actionable but still non-terminal deliveries (planning,
|
|
164
|
+
// iterating).
|
|
165
|
+
const actionableDeliveryIds = new Set(currentDeliveries
|
|
166
|
+
.filter(d => isStatusAgentActionable(d.executionStatus ?? ''))
|
|
167
|
+
.map(d => d.id));
|
|
168
|
+
const hasActionableWithOpenIssues = currentIssues.some(i => actionableDeliveryIds.has(i.deliveryId) && OPEN_ISSUE_STATUSES.has(i.status));
|
|
169
|
+
let message;
|
|
170
|
+
if (actionableDeliveryIds.size > 0 && hasActionableWithOpenIssues) {
|
|
171
|
+
console.log(`[focus-executor] Mid-focus handoff for "${focusName}" -- sending new work`);
|
|
172
|
+
message = buildWakeMessage(currentDeliveries, currentIssues, teamState.knownDeliveryIds);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
console.log(`[focus-executor] Re-engaging "${focusName}" -- ${nonTerminal.length} non-terminal ` +
|
|
176
|
+
`delivery(ies) remain (cycle ${teamState.noProgressCycles}/${SCOPE_COVERAGE_NO_PROGRESS_LIMIT})`);
|
|
177
|
+
message = buildReEngagementMessage(nonTerminal, currentIssues);
|
|
178
|
+
}
|
|
179
|
+
// Update tracking state
|
|
180
|
+
for (const d of currentDeliveries) {
|
|
181
|
+
teamState.knownDeliveryIds.add(d.id);
|
|
182
|
+
teamState.deliveryStageIds.set(d.id, d.currentWorkflowStageId);
|
|
183
|
+
}
|
|
184
|
+
completionDetector.reset();
|
|
185
|
+
sendMessage(proc.stdin, message);
|
|
186
|
+
}
|
|
187
|
+
// ── Progress snapshot helpers ───────────────────────────────────────────
|
|
188
|
+
/**
|
|
189
|
+
* Build a progress snapshot from the current focus state.
|
|
190
|
+
*
|
|
191
|
+
* Captures the two values that must change for the team to be making
|
|
192
|
+
* progress: each delivery's execution_status and the total issue count.
|
|
193
|
+
*/
|
|
194
|
+
export function takeProgressSnapshot(deliveries, issues) {
|
|
195
|
+
const deliveryStatuses = {};
|
|
196
|
+
for (const d of deliveries) {
|
|
197
|
+
deliveryStatuses[d.id] = d.executionStatus ?? '';
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
deliveryStatuses,
|
|
201
|
+
totalIssueCount: issues.length,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/** True when two snapshots have identical delivery statuses and issue count. */
|
|
205
|
+
export function snapshotsEqual(a, b) {
|
|
206
|
+
if (a.totalIssueCount !== b.totalIssueCount)
|
|
207
|
+
return false;
|
|
208
|
+
const aKeys = Object.keys(a.deliveryStatuses);
|
|
209
|
+
const bKeys = Object.keys(b.deliveryStatuses);
|
|
210
|
+
if (aKeys.length !== bKeys.length)
|
|
211
|
+
return false;
|
|
212
|
+
for (const key of aKeys) {
|
|
213
|
+
if (a.deliveryStatuses[key] !== b.deliveryStatuses[key])
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
// ── Escalation ──────────────────────────────────────────────────────────
|
|
219
|
+
/**
|
|
220
|
+
* Escalate when the team has been re-engaged repeatedly without making
|
|
221
|
+
* any measurable progress on the remaining non-terminal deliveries.
|
|
222
|
+
*
|
|
223
|
+
* Exported so tests can verify the contract.
|
|
224
|
+
*/
|
|
225
|
+
export async function escalateNoProgress(params, deps = defaultDeps) {
|
|
226
|
+
const remainingList = params.remaining
|
|
227
|
+
.slice()
|
|
228
|
+
.sort((a, b) => a.priorityRank - b.priorityRank)
|
|
229
|
+
.map(d => `- "${d.name}" [${d.executionStatus ?? 'draft'}] (rank ${d.priorityRank})`)
|
|
230
|
+
.join('\n');
|
|
231
|
+
try {
|
|
232
|
+
await withRetry(() => deps.createEscalation({
|
|
233
|
+
organizationId: params.organizationId,
|
|
234
|
+
sessionId: params.sessionId,
|
|
235
|
+
issueId: null,
|
|
236
|
+
reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
|
|
237
|
+
description: `Team for focus "${params.focusName}" has been re-engaged ${params.cycles} ` +
|
|
238
|
+
`consecutive cycles without measurable progress. Reason: ${NO_PROGRESS_ESCALATION_REASON}.\n\n` +
|
|
239
|
+
`**Focus:** ${params.focusName}\n` +
|
|
240
|
+
`**Focus ID:** ${params.focusId}\n` +
|
|
241
|
+
`**Agent role:** ${params.agentRoleId}\n` +
|
|
242
|
+
`**Remaining non-terminal deliveries:**\n${remainingList}\n\n` +
|
|
243
|
+
`The team has been terminated. A human must intervene to unblock the focus.`,
|
|
244
|
+
whatWasTried: `Re-engaged the team via the daemon-push channel (${params.cycles} cycles). ` +
|
|
245
|
+
`No delivery status transitions and no new issues were observed between cycles.`,
|
|
246
|
+
helpNeeded: `Inspect the remaining deliveries above. Either scope missing issues, cancel ` +
|
|
247
|
+
`the deliveries that should not proceed, or update the focus intent so the ` +
|
|
248
|
+
`next team can complete the work.`,
|
|
249
|
+
}), { maxAttempts: 3, label: `escalation-no-progress-${params.focusId}` });
|
|
250
|
+
console.log(`[focus-executor] Created no-progress escalation for "${params.focusName}" ` +
|
|
251
|
+
`(reason: ${NO_PROGRESS_ESCALATION_REASON})`);
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
console.error(`[focus-executor] Failed to create no-progress escalation for "${params.focusName}": ${err.message}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=focus-completion-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-completion-event.js","sourceRoot":"","sources":["../src/focus-completion-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus team completion handling.
|
|
3
|
+
*
|
|
4
|
+
* Manages the post-execution lifecycle: advancing delivery statuses
|
|
5
|
+
* based on issue completion, merging the focus branch, cleaning up
|
|
6
|
+
* worktrees, and updating session records.
|
|
7
|
+
*/
|
|
8
|
+
import type { DaemonConfig, FocusTeamState, FocusDeliveryInfo, Workflow, PolicyFailureMode } from './types.js';
|
|
9
|
+
import type { StageAdvanceResult } from './delivery-lifecycle.js';
|
|
10
|
+
export { isStatusTerminal, isStatusAgentActionable } from './stage-classifier.js';
|
|
11
|
+
/**
|
|
12
|
+
* Decide whether to attempt mergeFocusBranch on team exit.
|
|
13
|
+
*
|
|
14
|
+
* Skip merge when:
|
|
15
|
+
* - The team did not succeed (failed exit or unclean shutdown), OR
|
|
16
|
+
* - The team is still in its planning phase (no deliveries scoped, nothing
|
|
17
|
+
* to merge -- this covers cancellation mid-planning).
|
|
18
|
+
*
|
|
19
|
+
* Exported for unit testing the gate logic in isolation.
|
|
20
|
+
*/
|
|
21
|
+
export declare function shouldAttemptMerge(succeeded: boolean, teamState: Pick<FocusTeamState, 'planningPhase'>): boolean;
|
|
22
|
+
export interface TeamCompletionParams {
|
|
23
|
+
config: DaemonConfig;
|
|
24
|
+
teamState: FocusTeamState;
|
|
25
|
+
sessionId: string;
|
|
26
|
+
code: number | null;
|
|
27
|
+
signal: string | null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Handle the team lead process exiting.
|
|
31
|
+
*
|
|
32
|
+
* Responsibilities:
|
|
33
|
+
* - Report git state for all known deliveries
|
|
34
|
+
* - Advance delivery statuses based on issue completion
|
|
35
|
+
* - Merge focus branch to integration (if successful)
|
|
36
|
+
* - Clean up worktree
|
|
37
|
+
* - Update session record
|
|
38
|
+
* - Record heartbeat counters
|
|
39
|
+
* - Trigger re-poll for next work
|
|
40
|
+
*/
|
|
41
|
+
export declare function handleTeamCompletion(params: TeamCompletionParams): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* External dependencies for advanceDeliveryStatuses.
|
|
44
|
+
* Defaults to real implementations; overridable in tests.
|
|
45
|
+
*/
|
|
46
|
+
export interface AdvanceDeliveryDeps {
|
|
47
|
+
getFocusDeliveries: (focusId: string) => Promise<FocusDeliveryInfo[]>;
|
|
48
|
+
getDeliveryIssues: (deliveryId: string) => Promise<Array<{
|
|
49
|
+
id: string;
|
|
50
|
+
title: string;
|
|
51
|
+
status: string;
|
|
52
|
+
issueType: string;
|
|
53
|
+
}>>;
|
|
54
|
+
getDeliverySessionCount: (deliveryId: string) => Promise<number>;
|
|
55
|
+
updateIssueStatus: (issueId: string, status: string) => Promise<void>;
|
|
56
|
+
fetchEffectiveWorkflow: (deliveryId: string) => Promise<Workflow>;
|
|
57
|
+
updateDeliveryStatus: (deliveryId: string, executionStatus: string, currentWorkflowStageId?: string | null) => Promise<void>;
|
|
58
|
+
advanceDeliveryStage: (params: {
|
|
59
|
+
deliveryId: string;
|
|
60
|
+
deliveryName: string;
|
|
61
|
+
organizationId: string;
|
|
62
|
+
workflow: Workflow;
|
|
63
|
+
currentStageId: string;
|
|
64
|
+
exitCode: number;
|
|
65
|
+
openIssueCount: number;
|
|
66
|
+
sessionCount: number;
|
|
67
|
+
policyFailureMode: PolicyFailureMode;
|
|
68
|
+
sessionId: string | null;
|
|
69
|
+
}) => Promise<StageAdvanceResult>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Advance delivery statuses after team completion.
|
|
73
|
+
*
|
|
74
|
+
* Re-queries all deliveries for the focus from the database rather
|
|
75
|
+
* than relying on the spawn-time snapshot in teamState.knownDeliveryIds.
|
|
76
|
+
* This ensures deliveries added mid-flight (after the team was spawned)
|
|
77
|
+
* are discovered and advanced, and that stale deliveryStageIds don't
|
|
78
|
+
* cause deliveries to be skipped.
|
|
79
|
+
*
|
|
80
|
+
* For each delivery in 'coding' status:
|
|
81
|
+
* - All issues Done (or no issues): advance via workflow (coding -> verify -> done)
|
|
82
|
+
* - Open issues remain: re-queue to 'queued' so the next team session picks it up
|
|
83
|
+
*/
|
|
84
|
+
export declare function advanceDeliveryStatuses(config: DaemonConfig, teamState: FocusTeamState, sessionId: string, deps?: AdvanceDeliveryDeps): Promise<void>;
|
|
85
|
+
//# sourceMappingURL=focus-completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-completion.d.ts","sourceRoot":"","sources":["../src/focus-completion.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,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;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,GAC/C,OAAO,CAET;AAID,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,cAAc,CAAC;IAC1B,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,CA2TtF;AAID;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,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,cAAc,EACzB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,mBAAiC,GACtC,OAAO,CAAC,IAAI,CAAC,CAkHf"}
|