@telora/daemon 0.17.36 → 0.17.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +5 -3
- package/dist/assembly-engine.d.ts +6 -0
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js +19 -0
- package/dist/assembly-engine.js.map +1 -1
- package/dist/assembly-resolvers.d.ts +17 -8
- package/dist/assembly-resolvers.d.ts.map +1 -1
- package/dist/assembly-resolvers.js +19 -8
- package/dist/assembly-resolvers.js.map +1 -1
- package/dist/cli/session-state.d.ts +10 -0
- package/dist/cli/session-state.d.ts.map +1 -1
- package/dist/cli/session-state.js +31 -0
- package/dist/cli/session-state.js.map +1 -1
- package/dist/completion/completion-decision.d.ts +83 -0
- package/dist/completion/completion-decision.d.ts.map +1 -0
- package/dist/completion/completion-decision.js +48 -0
- package/dist/completion/completion-decision.js.map +1 -0
- package/dist/completion/event-escalations.d.ts +97 -0
- package/dist/completion/event-escalations.d.ts.map +1 -0
- package/dist/completion/event-escalations.js +213 -0
- package/dist/completion/event-escalations.js.map +1 -0
- package/dist/completion/event.d.ts +1 -72
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +148 -322
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/exit-classification.d.ts +82 -0
- package/dist/completion/exit-classification.d.ts.map +1 -0
- package/dist/completion/exit-classification.js +61 -0
- package/dist/completion/exit-classification.js.map +1 -0
- package/dist/completion/index.d.ts +14 -5
- package/dist/completion/index.d.ts.map +1 -1
- package/dist/completion/index.js +14 -5
- package/dist/completion/index.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +114 -0
- package/dist/completion/merge-phase.d.ts.map +1 -0
- package/dist/completion/merge-phase.js +198 -0
- package/dist/completion/merge-phase.js.map +1 -0
- package/dist/completion/review-exit-phase.d.ts +82 -0
- package/dist/completion/review-exit-phase.d.ts.map +1 -0
- package/dist/completion/review-exit-phase.js +228 -0
- package/dist/completion/review-exit-phase.js.map +1 -0
- package/dist/completion/status-advance-phase.d.ts +61 -0
- package/dist/completion/status-advance-phase.d.ts.map +1 -0
- package/dist/completion/status-advance-phase.js +182 -0
- package/dist/completion/status-advance-phase.js.map +1 -0
- package/dist/completion/team-completion.d.ts +28 -269
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +145 -676
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/daemon-process.d.ts +18 -2
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/daemon-process.js +7 -2
- package/dist/daemon-process.js.map +1 -1
- package/dist/directive/close-loop-stage.d.ts +50 -0
- package/dist/directive/close-loop-stage.d.ts.map +1 -0
- package/dist/directive/close-loop-stage.js +196 -0
- package/dist/directive/close-loop-stage.js.map +1 -0
- package/dist/directive/directive-assembly.d.ts +33 -0
- package/dist/directive/directive-assembly.d.ts.map +1 -0
- package/dist/directive/directive-assembly.js +77 -0
- package/dist/directive/directive-assembly.js.map +1 -0
- package/dist/directive/directive-dispatch.d.ts +103 -0
- package/dist/directive/directive-dispatch.d.ts.map +1 -0
- package/dist/directive/directive-dispatch.js +279 -0
- package/dist/directive/directive-dispatch.js.map +1 -0
- package/dist/directive/phase-sync.d.ts +89 -0
- package/dist/directive/phase-sync.d.ts.map +1 -0
- package/dist/directive/phase-sync.js +173 -0
- package/dist/directive/phase-sync.js.map +1 -0
- package/dist/directive-executor.d.ts +21 -223
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +28 -687
- package/dist/directive-executor.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +8 -0
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +29 -8
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +29 -10
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-stage-lifecycle.d.ts +7 -5
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +11 -6
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline-config.d.ts +13 -0
- package/dist/pipeline-config.d.ts.map +1 -1
- package/dist/pipeline-config.js +15 -0
- package/dist/pipeline-config.js.map +1 -1
- package/dist/resolvers/agent-escalations.d.ts +8 -1
- package/dist/resolvers/agent-escalations.d.ts.map +1 -1
- package/dist/resolvers/agent-escalations.js +25 -22
- package/dist/resolvers/agent-escalations.js.map +1 -1
- package/dist/resolvers/agent-session-summaries.d.ts +8 -1
- package/dist/resolvers/agent-session-summaries.d.ts.map +1 -1
- package/dist/resolvers/agent-session-summaries.js +21 -18
- package/dist/resolvers/agent-session-summaries.js.map +1 -1
- package/dist/resolvers/delivery-acceptance-criteria.d.ts +7 -1
- package/dist/resolvers/delivery-acceptance-criteria.d.ts.map +1 -1
- package/dist/resolvers/delivery-acceptance-criteria.js +14 -11
- package/dist/resolvers/delivery-acceptance-criteria.js.map +1 -1
- package/dist/resolvers/delivery-description.d.ts +7 -1
- package/dist/resolvers/delivery-description.d.ts.map +1 -1
- package/dist/resolvers/delivery-description.js +14 -11
- package/dist/resolvers/delivery-description.js.map +1 -1
- package/dist/resolvers/delivery-issues.d.ts +8 -1
- package/dist/resolvers/delivery-issues.d.ts.map +1 -1
- package/dist/resolvers/delivery-issues.js +51 -48
- package/dist/resolvers/delivery-issues.js.map +1 -1
- package/dist/resolvers/delivery-listing.d.ts +16 -1
- package/dist/resolvers/delivery-listing.d.ts.map +1 -1
- package/dist/resolvers/delivery-listing.js +36 -33
- package/dist/resolvers/delivery-listing.js.map +1 -1
- package/dist/resolvers/delivery-tech-context.d.ts +7 -1
- package/dist/resolvers/delivery-tech-context.d.ts.map +1 -1
- package/dist/resolvers/delivery-tech-context.js +14 -11
- package/dist/resolvers/delivery-tech-context.js.map +1 -1
- package/dist/resolvers/deployment-profile.d.ts +8 -1
- package/dist/resolvers/deployment-profile.d.ts.map +1 -1
- package/dist/resolvers/deployment-profile.js +20 -17
- package/dist/resolvers/deployment-profile.js.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts +26 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.js +91 -88
- package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
- package/dist/resolvers/focus-context.d.ts +9 -1
- package/dist/resolvers/focus-context.d.ts.map +1 -1
- package/dist/resolvers/focus-context.js +38 -35
- package/dist/resolvers/focus-context.js.map +1 -1
- package/dist/resolvers/focus-injections.d.ts +13 -1
- package/dist/resolvers/focus-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-injections.js +60 -57
- package/dist/resolvers/focus-injections.js.map +1 -1
- package/dist/resolvers/focus-last-review-report.d.ts +2 -1
- package/dist/resolvers/focus-last-review-report.d.ts.map +1 -1
- package/dist/resolvers/focus-last-review-report.js +33 -30
- package/dist/resolvers/focus-last-review-report.js.map +1 -1
- package/dist/resolvers/focus-reality-tree.d.ts +15 -1
- package/dist/resolvers/focus-reality-tree.d.ts.map +1 -1
- package/dist/resolvers/focus-reality-tree.js +35 -32
- package/dist/resolvers/focus-reality-tree.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts +8 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +33 -30
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/guards-evaluation-results.d.ts +7 -1
- package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -1
- package/dist/resolvers/guards-evaluation-results.js +25 -22
- package/dist/resolvers/guards-evaluation-results.js.map +1 -1
- package/dist/resolvers/index.d.ts +22 -40
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +112 -41
- package/dist/resolvers/index.js.map +1 -1
- package/dist/resolvers/loop-context.d.ts +18 -1
- package/dist/resolvers/loop-context.d.ts.map +1 -1
- package/dist/resolvers/loop-context.js +21 -18
- package/dist/resolvers/loop-context.js.map +1 -1
- package/dist/resolvers/loop-delivery-index.d.ts +17 -1
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
- package/dist/resolvers/loop-delivery-index.js +51 -48
- package/dist/resolvers/loop-delivery-index.js.map +1 -1
- package/dist/resolvers/loop-documents.d.ts +9 -1
- package/dist/resolvers/loop-documents.d.ts.map +1 -1
- package/dist/resolvers/loop-documents.js +22 -19
- package/dist/resolvers/loop-documents.js.map +1 -1
- package/dist/resolvers/loop-expected-effects.d.ts +11 -1
- package/dist/resolvers/loop-expected-effects.d.ts.map +1 -1
- package/dist/resolvers/loop-expected-effects.js +53 -50
- package/dist/resolvers/loop-expected-effects.js.map +1 -1
- package/dist/resolvers/loop-frt-statement.d.ts +11 -1
- package/dist/resolvers/loop-frt-statement.d.ts.map +1 -1
- package/dist/resolvers/loop-frt-statement.js +28 -25
- package/dist/resolvers/loop-frt-statement.js.map +1 -1
- package/dist/resolvers/loop-injection.d.ts +10 -1
- package/dist/resolvers/loop-injection.d.ts.map +1 -1
- package/dist/resolvers/loop-injection.js +38 -35
- package/dist/resolvers/loop-injection.js.map +1 -1
- package/dist/resolvers/loop-persona.d.ts +20 -1
- package/dist/resolvers/loop-persona.d.ts.map +1 -1
- package/dist/resolvers/loop-persona.js +20 -17
- package/dist/resolvers/loop-persona.js.map +1 -1
- package/dist/resolvers/loop-questions.d.ts +8 -1
- package/dist/resolvers/loop-questions.d.ts.map +1 -1
- package/dist/resolvers/loop-questions.js +39 -36
- package/dist/resolvers/loop-questions.js.map +1 -1
- package/dist/resolvers/loop-upstream-udes.d.ts +11 -1
- package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -1
- package/dist/resolvers/loop-upstream-udes.js +74 -71
- package/dist/resolvers/loop-upstream-udes.js.map +1 -1
- package/dist/resolvers/prd-context.d.ts +2 -0
- package/dist/resolvers/prd-context.d.ts.map +1 -1
- package/dist/resolvers/prd-context.js +16 -13
- package/dist/resolvers/prd-context.js.map +1 -1
- package/dist/resolvers/prd-persona.d.ts +2 -0
- package/dist/resolvers/prd-persona.d.ts.map +1 -1
- package/dist/resolvers/prd-persona.js +6 -3
- package/dist/resolvers/prd-persona.js.map +1 -1
- package/dist/resolvers/reality-metrics.d.ts +8 -1
- package/dist/resolvers/reality-metrics.d.ts.map +1 -1
- package/dist/resolvers/reality-metrics.js +73 -70
- package/dist/resolvers/reality-metrics.js.map +1 -1
- package/dist/resolvers/reality-projections.d.ts +7 -1
- package/dist/resolvers/reality-projections.d.ts.map +1 -1
- package/dist/resolvers/reality-projections.js +35 -32
- package/dist/resolvers/reality-projections.js.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.d.ts +10 -1
- package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.js +34 -31
- package/dist/resolvers/reality-tree-snapshot.js.map +1 -1
- package/dist/resolvers/retired-injections.d.ts +10 -1
- package/dist/resolvers/retired-injections.d.ts.map +1 -1
- package/dist/resolvers/retired-injections.js +68 -65
- package/dist/resolvers/retired-injections.js.map +1 -1
- package/dist/resolvers/review-outcomes.d.ts +11 -1
- package/dist/resolvers/review-outcomes.d.ts.map +1 -1
- package/dist/resolvers/review-outcomes.js +27 -24
- package/dist/resolvers/review-outcomes.js.map +1 -1
- package/dist/resolvers/security-advisory.d.ts +2 -1
- package/dist/resolvers/security-advisory.d.ts.map +1 -1
- package/dist/resolvers/security-advisory.js +47 -44
- package/dist/resolvers/security-advisory.js.map +1 -1
- package/dist/resolvers/wiki-search.d.ts +8 -1
- package/dist/resolvers/wiki-search.d.ts.map +1 -1
- package/dist/resolvers/wiki-search.js +17 -14
- package/dist/resolvers/wiki-search.js.map +1 -1
- package/dist/resolvers/wiki-topic.d.ts +9 -1
- package/dist/resolvers/wiki-topic.d.ts.map +1 -1
- package/dist/resolvers/wiki-topic.js +21 -18
- package/dist/resolvers/wiki-topic.js.map +1 -1
- package/dist/resolvers/workflow-stages.d.ts +7 -1
- package/dist/resolvers/workflow-stages.d.ts.map +1 -1
- package/dist/resolvers/workflow-stages.js +20 -17
- package/dist/resolvers/workflow-stages.js.map +1 -1
- package/dist/self-update.d.ts +6 -0
- package/dist/self-update.d.ts.map +1 -1
- package/dist/self-update.js +6 -1
- package/dist/self-update.js.map +1 -1
- package/dist/spawner/index.d.ts +2 -1
- package/dist/spawner/index.d.ts.map +1 -1
- package/dist/spawner/index.js +2 -1
- package/dist/spawner/index.js.map +1 -1
- package/dist/spawner/spawn-team.d.ts +14 -52
- package/dist/spawner/spawn-team.d.ts.map +1 -1
- package/dist/spawner/spawn-team.js +14 -469
- package/dist/spawner/spawn-team.js.map +1 -1
- package/dist/staleness.d.ts +124 -0
- package/dist/staleness.d.ts.map +1 -0
- package/dist/staleness.js +215 -0
- package/dist/staleness.js.map +1 -0
- package/dist/state-cascade.d.ts +3 -2
- package/dist/state-cascade.d.ts.map +1 -1
- package/dist/state-cascade.js +7 -3
- package/dist/state-cascade.js.map +1 -1
- package/dist/types/focus.d.ts +5 -4
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/session.d.ts +2 -3
- package/dist/types/session.d.ts.map +1 -1
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +21 -12
- package/dist/unified-shell.js.map +1 -1
- package/package.json +2 -2
- package/dist/session-lifecycle.d.ts +0 -78
- package/dist/session-lifecycle.d.ts.map +0 -1
- package/dist/session-lifecycle.js +0 -382
- package/dist/session-lifecycle.js.map +0 -1
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escalation builders for the completion event handler.
|
|
3
|
+
*
|
|
4
|
+
* The three human-signal paths handleCompletionEvent (event.ts) can take
|
|
5
|
+
* when a team cannot make progress: a planning team that scoped nothing, a
|
|
6
|
+
* team re-engaged past the no-progress limit, and a structurally
|
|
7
|
+
* non-advanceable delivery (the respawn-thrash guard). Extracted from
|
|
8
|
+
* completion/event.ts; bodies verbatim; event.ts re-exports the surface.
|
|
9
|
+
*/
|
|
10
|
+
import { withRetry, ESCALATION_REASONS } from '@telora/daemon-core';
|
|
11
|
+
import { createEscalation as defaultCreateEscalation } from '../queries/issues.js';
|
|
12
|
+
/** Reason string emitted when a planning team produces no deliveries. */
|
|
13
|
+
export const PLANNING_NO_DELIVERIES_REASON = 'planning produced no deliveries';
|
|
14
|
+
/** Reason string emitted when re-engagement is bounded by no-progress limit. */
|
|
15
|
+
export const NO_PROGRESS_ESCALATION_REASON = 'team unable to make progress on remaining deliveries';
|
|
16
|
+
/**
|
|
17
|
+
* Reason string emitted when the team has no actionable work AND a remaining
|
|
18
|
+
* non-terminal delivery cannot be advanced by the daemon either -- a structural
|
|
19
|
+
* dead end (missing workflow stage / no automatic transition out). Filed once,
|
|
20
|
+
* never re-fired, so the focus stops thrashing spawn->idle-exit->respawn.
|
|
21
|
+
*/
|
|
22
|
+
export const NON_ADVANCEABLE_ESCALATION_REASON = 'delivery cannot be advanced and the team has no actionable work';
|
|
23
|
+
/**
|
|
24
|
+
* Cause discriminator stamped on the escalation metadata. The escalation_kind
|
|
25
|
+
* stays 'team_failure' (a value the agent_escalations CHECK constraint already
|
|
26
|
+
* accepts AND that the existing respawn guard -- hasOpenTeamFailureEscalation /
|
|
27
|
+
* applyRespawnGuard -- already suppresses), so no migration is required and
|
|
28
|
+
* respawn suppression composes for free. metadata.cause distinguishes this
|
|
29
|
+
* structural dead-end from a genuine effort-based no-progress failure during
|
|
30
|
+
* triage.
|
|
31
|
+
*/
|
|
32
|
+
export const NON_ADVANCEABLE_CAUSE = 'non_advanceable_delivery';
|
|
33
|
+
const defaultEscalationDeps = {
|
|
34
|
+
createEscalation: defaultCreateEscalation,
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Escalate when a planning team finishes its initial turn without writing
|
|
38
|
+
* any deliveries via MCP. The team is then terminated -- no respawn.
|
|
39
|
+
*
|
|
40
|
+
* Exported so tests and sister deliveries can verify the contract.
|
|
41
|
+
*/
|
|
42
|
+
export async function escalatePlanningFailure(params, deps = defaultEscalationDeps) {
|
|
43
|
+
const { sessionId, focusName, agentRoleId } = params;
|
|
44
|
+
try {
|
|
45
|
+
await withRetry(() => deps.createEscalation({
|
|
46
|
+
organizationId: params.organizationId,
|
|
47
|
+
sessionId,
|
|
48
|
+
issueId: null,
|
|
49
|
+
reasonType: ESCALATION_REASONS.NEEDS_CLARIFICATION,
|
|
50
|
+
description: `Planning team for focus "${focusName}" finished its initial turn without ` +
|
|
51
|
+
`creating any deliveries. Reason: ${PLANNING_NO_DELIVERIES_REASON}.\n\n` +
|
|
52
|
+
`**Focus:** ${focusName}\n` +
|
|
53
|
+
`**Focus ID:** ${params.focusId}\n` +
|
|
54
|
+
`**Agent role:** ${agentRoleId}\n\n` +
|
|
55
|
+
`The team has been terminated. A human must either scope the focus ` +
|
|
56
|
+
`manually or re-queue it after clarifying intent.`,
|
|
57
|
+
whatWasTried: `Spawned a planning team to scope deliveries for "${focusName}".`,
|
|
58
|
+
helpNeeded: `Review the focus intent and either scope deliveries manually or update the focus description so the next planning attempt can succeed.`,
|
|
59
|
+
}), { maxAttempts: 3, label: `escalation-planning-no-deliveries-${params.focusId}` });
|
|
60
|
+
console.log(`[focus-executor] Created planning-failure escalation for "${focusName}" ` +
|
|
61
|
+
`(reason: ${PLANNING_NO_DELIVERIES_REASON})`);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
console.error(`[focus-executor] Failed to create planning-failure escalation for "${focusName}": ${err.message}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Escalate when the team has been re-engaged repeatedly without making
|
|
69
|
+
* any measurable progress on the remaining non-terminal deliveries.
|
|
70
|
+
*
|
|
71
|
+
* Exported so tests can verify the contract.
|
|
72
|
+
*/
|
|
73
|
+
export async function escalateNoProgress(params, deps = defaultEscalationDeps) {
|
|
74
|
+
const remainingList = params.remaining
|
|
75
|
+
.slice()
|
|
76
|
+
.sort((a, b) => a.priorityRank - b.priorityRank)
|
|
77
|
+
.map(d => `- "${d.name}" [${d.executionStatus ?? 'draft'}] (rank ${d.priorityRank})`)
|
|
78
|
+
.join('\n');
|
|
79
|
+
// Cause classification: if every remaining non-terminal delivery is
|
|
80
|
+
// sitting on a populated gate_state, the team didn't fail -- the daemon's
|
|
81
|
+
// gate refused to advance them. Route as daemon_gate_stuck so substantive
|
|
82
|
+
// team-failure signals don't drown in daemon-gap noise. Otherwise fall
|
|
83
|
+
// back to the explicit team_failure kind.
|
|
84
|
+
const gateStuckDeliveries = params.remaining.filter(d => d.gateState != null);
|
|
85
|
+
const allDaemonGateStuck = params.remaining.length > 0 && gateStuckDeliveries.length === params.remaining.length;
|
|
86
|
+
const escalationKind = allDaemonGateStuck ? 'daemon_gate_stuck' : 'team_failure';
|
|
87
|
+
const metadata = {
|
|
88
|
+
focusId: params.focusId,
|
|
89
|
+
focusName: params.focusName,
|
|
90
|
+
cycles: params.cycles,
|
|
91
|
+
cause: escalationKind,
|
|
92
|
+
};
|
|
93
|
+
if (allDaemonGateStuck) {
|
|
94
|
+
metadata.gateStates = gateStuckDeliveries.map(d => ({
|
|
95
|
+
deliveryId: d.id,
|
|
96
|
+
deliveryName: d.name,
|
|
97
|
+
executionStatus: d.executionStatus,
|
|
98
|
+
gateState: d.gateState,
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
const description = allDaemonGateStuck
|
|
102
|
+
? `Team for focus "${params.focusName}" terminated because the daemon's verify gate ` +
|
|
103
|
+
`has not advanced any of the ${params.remaining.length} remaining delivery(ies) ` +
|
|
104
|
+
`across ${params.cycles} re-engagement cycles. This is a daemon-side gap, not a team failure.\n\n` +
|
|
105
|
+
`**Focus:** ${params.focusName}\n` +
|
|
106
|
+
`**Focus ID:** ${params.focusId}\n` +
|
|
107
|
+
`**Agent role:** ${params.agentRoleId}\n` +
|
|
108
|
+
`**Remaining (all gate-stuck):**\n${remainingList}\n\n` +
|
|
109
|
+
`Inspect each delivery's gate_state to determine the specific blocking condition. ` +
|
|
110
|
+
`See docs/runbook-verify-gate.md.`
|
|
111
|
+
: `Team for focus "${params.focusName}" has been re-engaged ${params.cycles} ` +
|
|
112
|
+
`consecutive cycles without measurable progress. Reason: ${NO_PROGRESS_ESCALATION_REASON}.\n\n` +
|
|
113
|
+
`**Focus:** ${params.focusName}\n` +
|
|
114
|
+
`**Focus ID:** ${params.focusId}\n` +
|
|
115
|
+
`**Agent role:** ${params.agentRoleId}\n` +
|
|
116
|
+
`**Remaining non-terminal deliveries:**\n${remainingList}\n\n` +
|
|
117
|
+
`The team has been terminated. A human must intervene to unblock the focus.`;
|
|
118
|
+
try {
|
|
119
|
+
await withRetry(() => deps.createEscalation({
|
|
120
|
+
organizationId: params.organizationId,
|
|
121
|
+
sessionId: params.sessionId,
|
|
122
|
+
issueId: null,
|
|
123
|
+
reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
|
|
124
|
+
escalationKind,
|
|
125
|
+
metadata,
|
|
126
|
+
description,
|
|
127
|
+
whatWasTried: `Re-engaged the team via the daemon-push channel (${params.cycles} cycles). ` +
|
|
128
|
+
`No delivery status transitions and no new issues were observed between cycles.`,
|
|
129
|
+
helpNeeded: allDaemonGateStuck
|
|
130
|
+
? `Inspect the gate_state on each delivery to identify the specific blocking ` +
|
|
131
|
+
`condition. The condition is documented in docs/runbook-verify-gate.md.`
|
|
132
|
+
: `Inspect the remaining deliveries above. Either scope missing issues, cancel ` +
|
|
133
|
+
`the deliveries that should not proceed, or update the focus intent so the ` +
|
|
134
|
+
`next team can complete the work.`,
|
|
135
|
+
}), { maxAttempts: 3, label: `escalation-no-progress-${params.focusId}` });
|
|
136
|
+
console.log(`[focus-executor] Created ${escalationKind} escalation for "${params.focusName}" ` +
|
|
137
|
+
`(reason: ${NO_PROGRESS_ESCALATION_REASON})`);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
console.error(`[focus-executor] Failed to create no-progress escalation for "${params.focusName}": ${err.message}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Escalate when the team has no actionable work AND a remaining non-terminal
|
|
145
|
+
* delivery is structurally non-advanceable (NULL workflow stage, or no
|
|
146
|
+
* automatic transition out of its current stage). This is the thrash-guard:
|
|
147
|
+
* without it the focus respawns a team every poll that immediately idle-exits,
|
|
148
|
+
* burning budget unbounded.
|
|
149
|
+
*
|
|
150
|
+
* Filed as escalation_kind 'team_failure' so the existing respawn guard
|
|
151
|
+
* (hasOpenTeamFailureEscalation / applyRespawnGuard) suppresses respawn until a
|
|
152
|
+
* human resolves it. metadata.cause = NON_ADVANCEABLE_CAUSE distinguishes it
|
|
153
|
+
* from an effort-based no-progress failure during triage.
|
|
154
|
+
*
|
|
155
|
+
* Exported so tests and sister deliveries can verify the contract.
|
|
156
|
+
*/
|
|
157
|
+
export async function escalateNonAdvanceable(params, deps = defaultEscalationDeps) {
|
|
158
|
+
const { stuck } = params;
|
|
159
|
+
const remainingList = params.remaining
|
|
160
|
+
.slice()
|
|
161
|
+
.sort((a, b) => a.priorityRank - b.priorityRank)
|
|
162
|
+
.map(d => `- "${d.name}" [${d.executionStatus ?? 'draft'}] (rank ${d.priorityRank}, stage ${d.currentWorkflowStageId ?? 'NULL'})`)
|
|
163
|
+
.join('\n');
|
|
164
|
+
const stageDesc = stuck.currentWorkflowStageId
|
|
165
|
+
? `its current workflow stage (${stuck.currentWorkflowStageId}) has no automatic transition out`
|
|
166
|
+
: 'it has no resolved workflow stage (current_workflow_stage_id is NULL)';
|
|
167
|
+
const metadata = {
|
|
168
|
+
focusId: params.focusId,
|
|
169
|
+
focusName: params.focusName,
|
|
170
|
+
cause: NON_ADVANCEABLE_CAUSE,
|
|
171
|
+
stuckDeliveryId: stuck.id,
|
|
172
|
+
stuckDeliveryName: stuck.name,
|
|
173
|
+
stuckDeliveryStatus: stuck.executionStatus,
|
|
174
|
+
stuckDeliveryStageId: stuck.currentWorkflowStageId,
|
|
175
|
+
};
|
|
176
|
+
const description = `Team for focus "${params.focusName}" terminated because delivery "${stuck.name}" ` +
|
|
177
|
+
`[${stuck.executionStatus ?? 'draft'}] cannot be advanced: ${stageDesc}, and the team ` +
|
|
178
|
+
`has no actionable work. Reason: ${NON_ADVANCEABLE_ESCALATION_REASON}.\n\n` +
|
|
179
|
+
`Left unhandled this loops: the listener re-spawns a team every poll, the team ` +
|
|
180
|
+
`immediately idle-exits with nothing to do, and the delivery never moves -- burning ` +
|
|
181
|
+
`budget with no progress.\n\n` +
|
|
182
|
+
`**Focus:** ${params.focusName}\n` +
|
|
183
|
+
`**Focus ID:** ${params.focusId}\n` +
|
|
184
|
+
`**Agent role:** ${params.agentRoleId}\n` +
|
|
185
|
+
`**Stuck delivery:** "${stuck.name}" (${stuck.id})\n` +
|
|
186
|
+
`**Remaining non-terminal deliveries:**\n${remainingList}\n\n` +
|
|
187
|
+
`The team has been terminated and the focus will not be respawned while this ` +
|
|
188
|
+
`escalation stays open. A human must either give the delivery a workflow stage with ` +
|
|
189
|
+
`an automatic transition, cancel it, or otherwise unblock the focus.`;
|
|
190
|
+
try {
|
|
191
|
+
await withRetry(() => deps.createEscalation({
|
|
192
|
+
organizationId: params.organizationId,
|
|
193
|
+
sessionId: params.sessionId,
|
|
194
|
+
issueId: null,
|
|
195
|
+
reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
|
|
196
|
+
escalationKind: 'team_failure',
|
|
197
|
+
metadata,
|
|
198
|
+
description,
|
|
199
|
+
whatWasTried: `Spawned a team for "${params.focusName}"; it found no actionable work, and the ` +
|
|
200
|
+
`daemon could not advance the remaining non-terminal delivery "${stuck.name}" ` +
|
|
201
|
+
`(${stageDesc}).`,
|
|
202
|
+
helpNeeded: `Give delivery "${stuck.name}" a workflow stage with an automatic transition out ` +
|
|
203
|
+
`(or re-anchor it to the correct workflow), cancel it if it should not proceed, or ` +
|
|
204
|
+
`update the focus so the next team can complete the work.`,
|
|
205
|
+
}), { maxAttempts: 3, label: `escalation-non-advanceable-${params.focusId}` });
|
|
206
|
+
console.log(`[focus-executor] Created non-advanceable (team_failure) escalation for "${params.focusName}" ` +
|
|
207
|
+
`(cause: ${NON_ADVANCEABLE_CAUSE}, delivery: "${stuck.name}")`);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
console.error(`[focus-executor] Failed to create non-advanceable escalation for "${params.focusName}": ${err.message}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=event-escalations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-escalations.js","sourceRoot":"","sources":["../../src/completion/event-escalations.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,27 +8,7 @@
|
|
|
8
8
|
import type { ChildProcess } from 'node:child_process';
|
|
9
9
|
import type { DaemonConfig, FocusTeamState, FocusDeliveryInfo, FocusIssueInfo, ProgressSnapshot, Workflow } from '../types.js';
|
|
10
10
|
import { CompletionDetector, type CompletionInfo } from './detector.js';
|
|
11
|
-
|
|
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
|
-
* Reason string emitted when the team has no actionable work AND a remaining
|
|
17
|
-
* non-terminal delivery cannot be advanced by the daemon either -- a structural
|
|
18
|
-
* dead end (missing workflow stage / no automatic transition out). Filed once,
|
|
19
|
-
* never re-fired, so the focus stops thrashing spawn->idle-exit->respawn.
|
|
20
|
-
*/
|
|
21
|
-
export declare const NON_ADVANCEABLE_ESCALATION_REASON = "delivery cannot be advanced and the team has no actionable work";
|
|
22
|
-
/**
|
|
23
|
-
* Cause discriminator stamped on the escalation metadata. The escalation_kind
|
|
24
|
-
* stays 'team_failure' (a value the agent_escalations CHECK constraint already
|
|
25
|
-
* accepts AND that the existing respawn guard -- hasOpenTeamFailureEscalation /
|
|
26
|
-
* applyRespawnGuard -- already suppresses), so no migration is required and
|
|
27
|
-
* respawn suppression composes for free. metadata.cause distinguishes this
|
|
28
|
-
* structural dead-end from a genuine effort-based no-progress failure during
|
|
29
|
-
* triage.
|
|
30
|
-
*/
|
|
31
|
-
export declare const NON_ADVANCEABLE_CAUSE = "non_advanceable_delivery";
|
|
11
|
+
export { PLANNING_NO_DELIVERIES_REASON, NO_PROGRESS_ESCALATION_REASON, NON_ADVANCEABLE_ESCALATION_REASON, NON_ADVANCEABLE_CAUSE, type EscalationDeps, escalatePlanningFailure, escalateNoProgress, escalateNonAdvanceable, } from './event-escalations.js';
|
|
32
12
|
/**
|
|
33
13
|
* Maximum consecutive re-engagement cycles with no measurable progress before
|
|
34
14
|
* the scope-coverage guard escalates. Configurable via env so operators can
|
|
@@ -113,19 +93,6 @@ export interface CompletionEventDeps {
|
|
|
113
93
|
* exported for direct unit testing.
|
|
114
94
|
*/
|
|
115
95
|
export declare function isInReviewWindow(reviewRequestedAt: string | null, deliveries: FocusDeliveryInfo[]): boolean;
|
|
116
|
-
/**
|
|
117
|
-
* Escalate when a planning team finishes its initial turn without writing
|
|
118
|
-
* any deliveries via MCP. The team is then terminated -- no respawn.
|
|
119
|
-
*
|
|
120
|
-
* Exported so tests and sister deliveries can verify the contract.
|
|
121
|
-
*/
|
|
122
|
-
export declare function escalatePlanningFailure(params: {
|
|
123
|
-
organizationId: string;
|
|
124
|
-
sessionId: string;
|
|
125
|
-
focusId: string;
|
|
126
|
-
focusName: string;
|
|
127
|
-
agentRoleId: string;
|
|
128
|
-
}, deps?: Pick<CompletionEventDeps, 'createEscalation'>): Promise<void>;
|
|
129
96
|
/**
|
|
130
97
|
* A delivery is *non-advanceable* when neither the team nor the daemon can move
|
|
131
98
|
* it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
|
|
@@ -190,42 +157,4 @@ export declare function takeProgressSnapshot(deliveries: Pick<FocusDeliveryInfo,
|
|
|
190
157
|
}[]): ProgressSnapshot;
|
|
191
158
|
/** True when two snapshots have identical delivery statuses and issue count. */
|
|
192
159
|
export declare function snapshotsEqual(a: ProgressSnapshot, b: ProgressSnapshot): boolean;
|
|
193
|
-
/**
|
|
194
|
-
* Escalate when the team has been re-engaged repeatedly without making
|
|
195
|
-
* any measurable progress on the remaining non-terminal deliveries.
|
|
196
|
-
*
|
|
197
|
-
* Exported so tests can verify the contract.
|
|
198
|
-
*/
|
|
199
|
-
export declare function escalateNoProgress(params: {
|
|
200
|
-
organizationId: string;
|
|
201
|
-
sessionId: string;
|
|
202
|
-
focusId: string;
|
|
203
|
-
focusName: string;
|
|
204
|
-
agentRoleId: string;
|
|
205
|
-
cycles: number;
|
|
206
|
-
remaining: FocusDeliveryInfo[];
|
|
207
|
-
}, deps?: Pick<CompletionEventDeps, 'createEscalation'>): Promise<void>;
|
|
208
|
-
/**
|
|
209
|
-
* Escalate when the team has no actionable work AND a remaining non-terminal
|
|
210
|
-
* delivery is structurally non-advanceable (NULL workflow stage, or no
|
|
211
|
-
* automatic transition out of its current stage). This is the thrash-guard:
|
|
212
|
-
* without it the focus respawns a team every poll that immediately idle-exits,
|
|
213
|
-
* burning budget unbounded.
|
|
214
|
-
*
|
|
215
|
-
* Filed as escalation_kind 'team_failure' so the existing respawn guard
|
|
216
|
-
* (hasOpenTeamFailureEscalation / applyRespawnGuard) suppresses respawn until a
|
|
217
|
-
* human resolves it. metadata.cause = NON_ADVANCEABLE_CAUSE distinguishes it
|
|
218
|
-
* from an effort-based no-progress failure during triage.
|
|
219
|
-
*
|
|
220
|
-
* Exported so tests and sister deliveries can verify the contract.
|
|
221
|
-
*/
|
|
222
|
-
export declare function escalateNonAdvanceable(params: {
|
|
223
|
-
organizationId: string;
|
|
224
|
-
sessionId: string;
|
|
225
|
-
focusId: string;
|
|
226
|
-
focusName: string;
|
|
227
|
-
agentRoleId: string;
|
|
228
|
-
stuck: FocusDeliveryInfo;
|
|
229
|
-
remaining: FocusDeliveryInfo[];
|
|
230
|
-
}, deps?: Pick<CompletionEventDeps, 'createEscalation'>): Promise<void>;
|
|
231
160
|
//# sourceMappingURL=event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE/H,OAAO,EAAE,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"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"}
|