@telora/daemon 0.20.28 → 0.20.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +2 -2
- package/dist/agent-state.d.ts +4 -6
- package/dist/agent-state.d.ts.map +1 -1
- package/dist/agent-state.js +4 -10
- package/dist/agent-state.js.map +1 -1
- package/dist/auto-update.d.ts +87 -0
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +142 -8
- package/dist/auto-update.js.map +1 -1
- package/dist/branch-status.d.ts +25 -3
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +130 -59
- package/dist/branch-status.js.map +1 -1
- package/dist/completion/completion-decision.d.ts +29 -3
- package/dist/completion/completion-decision.d.ts.map +1 -1
- package/dist/completion/completion-decision.js +15 -3
- package/dist/completion/completion-decision.js.map +1 -1
- package/dist/completion/event-entry-phases.d.ts +57 -0
- package/dist/completion/event-entry-phases.d.ts.map +1 -0
- package/dist/completion/event-entry-phases.js +205 -0
- package/dist/completion/event-entry-phases.js.map +1 -0
- package/dist/completion/event-phases.d.ts +14 -42
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +63 -190
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +11 -1
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +5 -2
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/index.d.ts +0 -3
- package/dist/completion/index.d.ts.map +1 -1
- package/dist/completion/index.js +0 -3
- package/dist/completion/index.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +2 -1
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +41 -1
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/status-advance-phase.d.ts +2 -0
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +14 -28
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-completion.js +1 -1
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
- package/dist/completion/terminated-work-reconcile.js +10 -0
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/constants.d.ts +0 -8
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -8
- package/dist/constants.js.map +1 -1
- package/dist/delivery-close-actions.d.ts +39 -0
- package/dist/delivery-close-actions.d.ts.map +1 -0
- package/dist/delivery-close-actions.js +53 -0
- package/dist/delivery-close-actions.js.map +1 -0
- package/dist/delivery-lifecycle.d.ts +11 -0
- package/dist/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery-lifecycle.js +13 -14
- package/dist/delivery-lifecycle.js.map +1 -1
- package/dist/delivery-reconciler.d.ts +18 -4
- package/dist/delivery-reconciler.d.ts.map +1 -1
- package/dist/delivery-reconciler.js +18 -4
- package/dist/delivery-reconciler.js.map +1 -1
- package/dist/directive-executor.d.ts +1 -1
- package/dist/directive-executor.js +1 -1
- package/dist/discovery-fetch.d.ts +76 -0
- package/dist/discovery-fetch.d.ts.map +1 -0
- package/dist/discovery-fetch.js +206 -0
- package/dist/discovery-fetch.js.map +1 -0
- package/dist/discovery-poll.d.ts +1 -51
- package/dist/discovery-poll.d.ts.map +1 -1
- package/dist/discovery-poll.js +10 -192
- package/dist/discovery-poll.js.map +1 -1
- package/dist/drain-teardown.d.ts +11 -6
- package/dist/drain-teardown.d.ts.map +1 -1
- package/dist/drain-teardown.js +3 -2
- package/dist/drain-teardown.js.map +1 -1
- package/dist/focus-branch-ahead.d.ts +42 -0
- package/dist/focus-branch-ahead.d.ts.map +1 -0
- package/dist/focus-branch-ahead.js +45 -0
- package/dist/focus-branch-ahead.js.map +1 -0
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +21 -43
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.js +2 -2
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus-lifecycle.js +32 -3
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus-loop-registry.js +27 -0
- package/dist/focus-loop-registry.js.map +1 -1
- package/dist/focus-loop.d.ts +34 -12
- package/dist/focus-loop.d.ts.map +1 -1
- package/dist/focus-loop.js +78 -15
- package/dist/focus-loop.js.map +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +6 -1
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-phase.d.ts +18 -3
- package/dist/focus-phase.d.ts.map +1 -1
- package/dist/focus-phase.js +85 -31
- package/dist/focus-phase.js.map +1 -1
- package/dist/focus-prompt-builder.d.ts.map +1 -1
- package/dist/focus-prompt-builder.js +13 -1
- package/dist/focus-prompt-builder.js.map +1 -1
- package/dist/focus-provisioning.d.ts.map +1 -1
- package/dist/focus-provisioning.js +4 -0
- package/dist/focus-provisioning.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts +35 -17
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.js +53 -22
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -1
- package/dist/focus-worktree-state.d.ts +17 -6
- package/dist/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus-worktree-state.js +21 -11
- package/dist/focus-worktree-state.js.map +1 -1
- package/dist/guard-engine.d.ts +1 -2
- package/dist/guard-engine.d.ts.map +1 -1
- package/dist/guard-engine.js +1 -2
- package/dist/guard-engine.js.map +1 -1
- package/dist/health-events.d.ts +10 -0
- package/dist/health-events.d.ts.map +1 -0
- package/dist/health-events.js +10 -0
- package/dist/health-events.js.map +1 -0
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +98 -21
- package/dist/heartbeat.js.map +1 -1
- package/dist/host-control/catalog.d.ts.map +1 -1
- package/dist/host-control/catalog.js +4 -1
- package/dist/host-control/catalog.js.map +1 -1
- package/dist/host-control/client.d.ts +3 -4
- package/dist/host-control/client.d.ts.map +1 -1
- package/dist/host-control/client.js +4 -5
- package/dist/host-control/client.js.map +1 -1
- package/dist/listener-auto-advance.d.ts +2 -1
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +36 -40
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.d.ts +2 -7
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +11 -9
- package/dist/listener.js.map +1 -1
- package/dist/operator-hold.d.ts +66 -0
- package/dist/operator-hold.d.ts.map +1 -0
- package/dist/operator-hold.js +99 -0
- package/dist/operator-hold.js.map +1 -0
- package/dist/poll-trigger.d.ts +28 -0
- package/dist/poll-trigger.d.ts.map +1 -0
- package/dist/poll-trigger.js +31 -0
- package/dist/poll-trigger.js.map +1 -0
- package/dist/prompt-listing.d.ts +25 -0
- package/dist/prompt-listing.d.ts.map +1 -1
- package/dist/prompt-listing.js +67 -0
- package/dist/prompt-listing.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +24 -0
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/queries/context-lock-queries.d.ts.map +1 -1
- package/dist/queries/context-lock-queries.js +4 -1
- package/dist/queries/context-lock-queries.js.map +1 -1
- package/dist/queries/deliveries.d.ts +17 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/issues.d.ts +98 -0
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +135 -0
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/schemas.d.ts +3 -3
- package/dist/security-scan-engine.d.ts +9 -1
- package/dist/security-scan-engine.d.ts.map +1 -1
- package/dist/security-scan-engine.js +25 -2
- package/dist/security-scan-engine.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +2 -0
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/spawner/index.d.ts +7 -9
- package/dist/spawner/index.d.ts.map +1 -1
- package/dist/spawner/index.js +13 -11
- package/dist/spawner/index.js.map +1 -1
- package/dist/spawner/lifecycle.d.ts +1 -18
- package/dist/spawner/lifecycle.d.ts.map +1 -1
- package/dist/spawner/lifecycle.js +1 -54
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/liveness.d.ts +5 -14
- package/dist/spawner/liveness.d.ts.map +1 -1
- package/dist/spawner/liveness.js +5 -67
- package/dist/spawner/liveness.js.map +1 -1
- package/dist/spawner/state.d.ts +8 -20
- package/dist/spawner/state.d.ts.map +1 -1
- package/dist/spawner/state.js +8 -34
- package/dist/spawner/state.js.map +1 -1
- package/dist/staleness-sensor.d.ts +153 -0
- package/dist/staleness-sensor.d.ts.map +1 -0
- package/dist/staleness-sensor.js +308 -0
- package/dist/staleness-sensor.js.map +1 -0
- package/dist/types/focus.d.ts +9 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/session.d.ts +0 -44
- package/dist/types/session.d.ts.map +1 -1
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +19 -0
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-engine.d.ts +6 -4
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +9 -43
- package/dist/verification-engine.js.map +1 -1
- package/dist/verification-feedback.d.ts +42 -0
- package/dist/verification-feedback.d.ts.map +1 -1
- package/dist/verification-feedback.js +93 -0
- package/dist/verification-feedback.js.map +1 -1
- package/dist/version-check.d.ts +6 -0
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +1 -1
- package/dist/version-check.js.map +1 -1
- package/package.json +2 -3
- package/dist/completion/agent-completion.d.ts +0 -48
- package/dist/completion/agent-completion.d.ts.map +0 -1
- package/dist/completion/agent-completion.js +0 -205
- package/dist/completion/agent-completion.js.map +0 -1
- package/dist/delivery-guards.d.ts +0 -41
- package/dist/delivery-guards.d.ts.map +0 -1
- package/dist/delivery-guards.js +0 -200
- package/dist/delivery-guards.js.map +0 -1
- package/dist/spawner/spawn-team.d.ts +0 -20
- package/dist/spawner/spawn-team.d.ts.map +0 -1
- package/dist/spawner/spawn-team.js +0 -19
- package/dist/spawner/spawn-team.js.map +0 -1
- package/dist/spawner/timeout.d.ts +0 -32
- package/dist/spawner/timeout.d.ts.map +0 -1
- package/dist/spawner/timeout.js +0 -126
- package/dist/spawner/timeout.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telora/daemon",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.53",
|
|
4
4
|
"description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,8 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"//testRunner": "Uses Node.js built-in test runner (node:test) via tsx for TypeScript support. The root package uses Vitest; this is a deliberate choice for the daemon package to avoid framework dependencies. See src/__tests__/ for test files.",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@telora/daemon": "^0.
|
|
41
|
-
"@telora/daemon-core": "^0.2.72",
|
|
40
|
+
"@telora/daemon-core": "^0.2.73",
|
|
42
41
|
"@telora/mcp-products": "^0.22.104",
|
|
43
42
|
"commander": "^14.0.3",
|
|
44
43
|
"yaml": "^2.4.0",
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Completion handler - processes agent exit events.
|
|
3
|
-
*
|
|
4
|
-
* Handles the post-completion lifecycle for the legacy per-delivery model:
|
|
5
|
-
* - Querying open issues and session counts
|
|
6
|
-
* - Workflow-driven transition determination
|
|
7
|
-
* - Guard evaluation at stage transitions
|
|
8
|
-
* - Merge operations (integration branch, CI/CD)
|
|
9
|
-
* - Delivery status updates and session finalization
|
|
10
|
-
* - Worktree cleanup and re-poll triggering
|
|
11
|
-
*
|
|
12
|
-
* For the focus team model, see delivery-lifecycle.ts which provides
|
|
13
|
-
* reusable functions (evaluateGuardsForDeliveryTransition, mergeDeliveryBranch,
|
|
14
|
-
* advanceDeliveryStage) that the team lead calls directly.
|
|
15
|
-
*/
|
|
16
|
-
import type { WriteStream } from 'node:fs';
|
|
17
|
-
import type { DaemonConfig, DeliveryContext, RunningAgent, Workflow } from '../types.js';
|
|
18
|
-
import type { CompletionDetector } from './detector.js';
|
|
19
|
-
/**
|
|
20
|
-
* Parameters passed to the completion handler from the spawner's closure context.
|
|
21
|
-
*/
|
|
22
|
-
export interface CompletionHandlerParams {
|
|
23
|
-
config: DaemonConfig;
|
|
24
|
-
context: DeliveryContext;
|
|
25
|
-
runningAgent: RunningAgent;
|
|
26
|
-
workflow: Workflow;
|
|
27
|
-
branchName: string;
|
|
28
|
-
currentStageId: string | undefined;
|
|
29
|
-
timedOut: boolean;
|
|
30
|
-
timeoutMs: number;
|
|
31
|
-
sessionId: string;
|
|
32
|
-
deliveryId: string;
|
|
33
|
-
completionDetector: CompletionDetector;
|
|
34
|
-
stdoutLogStream: WriteStream;
|
|
35
|
-
stderrStream: WriteStream;
|
|
36
|
-
jsonlStream: WriteStream;
|
|
37
|
-
/** Mutable reference to the running agents map for cleanup. */
|
|
38
|
-
runningAgents: Map<string, RunningAgent>;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Handle agent process exit.
|
|
42
|
-
*
|
|
43
|
-
* This is the main post-completion handler that runs when a Claude Code agent
|
|
44
|
-
* process exits. It determines the workflow transition, evaluates guards,
|
|
45
|
-
* performs merge operations, and updates delivery/session status.
|
|
46
|
-
*/
|
|
47
|
-
export declare function handleAgentCompletion(code: number | null, signal: string | null, params: CompletionHandlerParams): Promise<void>;
|
|
48
|
-
//# sourceMappingURL=agent-completion.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-completion.d.ts","sourceRoot":"","sources":["../../src/completion/agent-completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAqC,MAAM,aAAa,CAAC;AAQ5H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAQxD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,+DAA+D;IAC/D,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqMf"}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Completion handler - processes agent exit events.
|
|
3
|
-
*
|
|
4
|
-
* Handles the post-completion lifecycle for the legacy per-delivery model:
|
|
5
|
-
* - Querying open issues and session counts
|
|
6
|
-
* - Workflow-driven transition determination
|
|
7
|
-
* - Guard evaluation at stage transitions
|
|
8
|
-
* - Merge operations (integration branch, CI/CD)
|
|
9
|
-
* - Delivery status updates and session finalization
|
|
10
|
-
* - Worktree cleanup and re-poll triggering
|
|
11
|
-
*
|
|
12
|
-
* For the focus team model, see delivery-lifecycle.ts which provides
|
|
13
|
-
* reusable functions (evaluateGuardsForDeliveryTransition, mergeDeliveryBranch,
|
|
14
|
-
* advanceDeliveryStage) that the team lead calls directly.
|
|
15
|
-
*/
|
|
16
|
-
import { updateSession, updateDeliveryStatus, getDeliveryIssues, getDeliverySessionCount, reportGitState } from '../supabase.js';
|
|
17
|
-
import { removeWorktree } from '../git.js';
|
|
18
|
-
import { getStageByName, determineTransition } from '../workflow-engine.js';
|
|
19
|
-
import { evaluateGuardsForDeliveryTransition, mergeDeliveryBranch } from '../delivery-lifecycle.js';
|
|
20
|
-
import { recordSessionCompleted, recordActivity } from '../agent-state.js';
|
|
21
|
-
import { triggerCheck } from '../listener.js';
|
|
22
|
-
import { createLogger } from '../log.js';
|
|
23
|
-
const log = createLogger({ module: 'reportGitState' });
|
|
24
|
-
const MAX_RETRY_ATTEMPTS = 5;
|
|
25
|
-
/**
|
|
26
|
-
* Handle agent process exit.
|
|
27
|
-
*
|
|
28
|
-
* This is the main post-completion handler that runs when a Claude Code agent
|
|
29
|
-
* process exits. It determines the workflow transition, evaluates guards,
|
|
30
|
-
* performs merge operations, and updates delivery/session status.
|
|
31
|
-
*/
|
|
32
|
-
export async function handleAgentCompletion(code, signal, params) {
|
|
33
|
-
const { config, context, runningAgent, workflow, branchName, currentStageId, timedOut, timeoutMs, sessionId, deliveryId, completionDetector, stdoutLogStream, stderrStream, jsonlStream, runningAgents, } = params;
|
|
34
|
-
log.info(`Agent for "${context.delivery.name}" exited with code ${code}, signal ${signal}`);
|
|
35
|
-
recordActivity();
|
|
36
|
-
// Clear timeout timers
|
|
37
|
-
if (runningAgent.warningTimer)
|
|
38
|
-
clearTimeout(runningAgent.warningTimer);
|
|
39
|
-
if (runningAgent.timeoutTimer)
|
|
40
|
-
clearTimeout(runningAgent.timeoutTimer);
|
|
41
|
-
// Clean up completion detector
|
|
42
|
-
completionDetector?.destroy();
|
|
43
|
-
runningAgents.delete(sessionId);
|
|
44
|
-
// Close log streams
|
|
45
|
-
stdoutLogStream.end();
|
|
46
|
-
stderrStream.end();
|
|
47
|
-
jsonlStream.end();
|
|
48
|
-
// Report worktree_complete now that the agent has finished (success or failure)
|
|
49
|
-
reportGitState(deliveryId, 'worktree_complete').catch(err => log.warn(`worktree_complete failed:`, err.message));
|
|
50
|
-
// Query issues and session count for transition decision
|
|
51
|
-
let openIssueCount = 0;
|
|
52
|
-
let attemptCount = 0;
|
|
53
|
-
if (code === 0) {
|
|
54
|
-
try {
|
|
55
|
-
const [issues, count] = await Promise.all([
|
|
56
|
-
getDeliveryIssues(deliveryId),
|
|
57
|
-
getDeliverySessionCount(deliveryId),
|
|
58
|
-
]);
|
|
59
|
-
openIssueCount = issues.filter(i => i.status !== 'Done').length;
|
|
60
|
-
attemptCount = count;
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
log.warn(`Failed to query issues/sessions for "${context.delivery.name}":`, err.message);
|
|
64
|
-
// Fall through with 0 open issues (treat as all done) to avoid blocking on API errors
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
try {
|
|
69
|
-
attemptCount = await getDeliverySessionCount(deliveryId);
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
log.warn(`Failed to query session count for "${context.delivery.name}":`, err.message);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// Build failure reason for non-zero exits
|
|
76
|
-
const failureReason = code !== 0
|
|
77
|
-
? (timedOut
|
|
78
|
-
? `Timeout exceeded (${timeoutMs / 60000} min limit)`
|
|
79
|
-
: signal
|
|
80
|
-
? `Terminated by signal: ${signal}`
|
|
81
|
-
: `Exit code: ${code}`)
|
|
82
|
-
: undefined;
|
|
83
|
-
// Determine transition via workflow engine
|
|
84
|
-
const transition = currentStageId
|
|
85
|
-
? determineTransition({
|
|
86
|
-
workflow,
|
|
87
|
-
currentStageId,
|
|
88
|
-
exitCode: code ?? 1,
|
|
89
|
-
openIssueCount,
|
|
90
|
-
attemptCount,
|
|
91
|
-
maxRetries: MAX_RETRY_ATTEMPTS,
|
|
92
|
-
failureReason,
|
|
93
|
-
})
|
|
94
|
-
: {
|
|
95
|
-
// No workflow stage -- legacy fallback
|
|
96
|
-
nextStage: null,
|
|
97
|
-
workflowTransition: null,
|
|
98
|
-
shouldMerge: code === 0 && openIssueCount === 0,
|
|
99
|
-
shouldTriggerRepoll: code === 0 && openIssueCount === 0,
|
|
100
|
-
sessionStatus: (code === 0 && openIssueCount === 0 ? 'completed' : 'failed'),
|
|
101
|
-
exitReason: failureReason ?? (openIssueCount === 0 ? 'Completed.' : `${openIssueCount} open issues.`),
|
|
102
|
-
};
|
|
103
|
-
let { exitReason } = transition;
|
|
104
|
-
let { shouldMerge, shouldTriggerRepoll, sessionStatus } = transition;
|
|
105
|
-
// -- Guard evaluation at stage transitions --
|
|
106
|
-
const evalResult = await evaluateGuardsForDeliveryTransition({
|
|
107
|
-
deliveryId,
|
|
108
|
-
organizationId: context.delivery.organization_id,
|
|
109
|
-
workflowTransition: transition.workflowTransition ?? null,
|
|
110
|
-
exitCode: code ?? 1,
|
|
111
|
-
policyFailureMode: config.policyFailureMode,
|
|
112
|
-
deliveryName: context.delivery.name,
|
|
113
|
-
sessionId,
|
|
114
|
-
});
|
|
115
|
-
const evalBlocked = evalResult.blocked;
|
|
116
|
-
if (evalBlocked) {
|
|
117
|
-
shouldMerge = evalResult.shouldMerge;
|
|
118
|
-
shouldTriggerRepoll = evalResult.shouldTriggerRepoll;
|
|
119
|
-
sessionStatus = evalResult.sessionStatus;
|
|
120
|
-
exitReason = evalResult.exitReason;
|
|
121
|
-
}
|
|
122
|
-
else if (evalResult.exitReason && evalResult.exitReason !== exitReason) {
|
|
123
|
-
exitReason += ` ${evalResult.exitReason}`;
|
|
124
|
-
}
|
|
125
|
-
// Determine delivery status from transition
|
|
126
|
-
let deliveryStatus;
|
|
127
|
-
let deliveryStageId;
|
|
128
|
-
if (evalBlocked) {
|
|
129
|
-
// Guard already set delivery to 'paused' -- don't overwrite
|
|
130
|
-
deliveryStatus = 'paused';
|
|
131
|
-
deliveryStageId = currentStageId;
|
|
132
|
-
}
|
|
133
|
-
else if (transition.nextStage) {
|
|
134
|
-
deliveryStatus = transition.nextStage.name;
|
|
135
|
-
deliveryStageId = transition.nextStage.id;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
// Staying on current stage means re-queuing
|
|
139
|
-
const queuedStage = getStageByName(workflow, 'queued');
|
|
140
|
-
deliveryStatus = queuedStage?.name ?? 'queued';
|
|
141
|
-
deliveryStageId = queuedStage?.id;
|
|
142
|
-
}
|
|
143
|
-
if (exitReason !== transition.exitReason) {
|
|
144
|
-
// exitReason was modified -- log the warning
|
|
145
|
-
log.warn(`Delivery "${context.delivery.name}": ${exitReason}`);
|
|
146
|
-
}
|
|
147
|
-
// Merge branch if warranted
|
|
148
|
-
let mergeOutcome = { mergeSucceeded: false, exitReason };
|
|
149
|
-
if (shouldMerge) {
|
|
150
|
-
mergeOutcome = await mergeDeliveryBranch({
|
|
151
|
-
config,
|
|
152
|
-
branchName,
|
|
153
|
-
deliveryId,
|
|
154
|
-
deliveryName: context.delivery.name,
|
|
155
|
-
organizationId: context.delivery.organization_id,
|
|
156
|
-
sessionId,
|
|
157
|
-
workflow,
|
|
158
|
-
});
|
|
159
|
-
exitReason = mergeOutcome.exitReason;
|
|
160
|
-
}
|
|
161
|
-
if (mergeOutcome.overrideDeliveryStatus) {
|
|
162
|
-
deliveryStatus = mergeOutcome.overrideDeliveryStatus;
|
|
163
|
-
deliveryStageId = mergeOutcome.overrideDeliveryStageId;
|
|
164
|
-
}
|
|
165
|
-
// Update delivery status with workflow stage
|
|
166
|
-
try {
|
|
167
|
-
await updateDeliveryStatus(deliveryId, deliveryStatus, deliveryStageId);
|
|
168
|
-
log.info(`Delivery "${context.delivery.name}" set to ${deliveryStatus}`);
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
log.warn(`Failed to set delivery "${context.delivery.name}" to ${deliveryStatus}:`, err.message);
|
|
172
|
-
}
|
|
173
|
-
// Clean up worktree (branch is preserved for PR/review)
|
|
174
|
-
// Safety guards will refuse to delete if uncommitted changes or unmerged commits exist
|
|
175
|
-
removeWorktree(config.repoPath, runningAgent.worktreePath, {
|
|
176
|
-
branchName,
|
|
177
|
-
integrationBranch: config.integrationBranch,
|
|
178
|
-
deliveryName: context.delivery.name,
|
|
179
|
-
mergeSucceeded: mergeOutcome.mergeSucceeded,
|
|
180
|
-
});
|
|
181
|
-
// Report worktree_cleaned if merge succeeded (worktree was actually removed)
|
|
182
|
-
if (mergeOutcome.mergeSucceeded) {
|
|
183
|
-
reportGitState(deliveryId, 'worktree_cleaned').catch(err => log.warn(`worktree_cleaned failed:`, err.message));
|
|
184
|
-
}
|
|
185
|
-
await updateSession(sessionId, {
|
|
186
|
-
status: sessionStatus,
|
|
187
|
-
exit_reason: exitReason,
|
|
188
|
-
...(sessionStatus === 'failed' && {
|
|
189
|
-
exit_category: timedOut ? 'timeout' : 'error',
|
|
190
|
-
}),
|
|
191
|
-
ended_at: new Date().toISOString(),
|
|
192
|
-
});
|
|
193
|
-
// Record session completion for heartbeat counters
|
|
194
|
-
recordSessionCompleted(0, 0); // Token/cost tracking can be enriched later
|
|
195
|
-
// Trigger re-poll to pick up next delivery in the focus's priority queue
|
|
196
|
-
if (shouldTriggerRepoll) {
|
|
197
|
-
log.info(`Delivery "${context.delivery.name}" completed, checking for next delivery in focus...`);
|
|
198
|
-
triggerCheck();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
// Note: MergeOutcome type and merge functions are now in delivery-lifecycle.ts.
|
|
202
|
-
// The handleMergeIfNeeded and handleCiMerge functions have been extracted to
|
|
203
|
-
// mergeDeliveryBranch() in delivery-lifecycle.ts for reuse by both the
|
|
204
|
-
// legacy per-delivery handler and the focus team lead.
|
|
205
|
-
//# sourceMappingURL=agent-completion.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-completion.js","sourceRoot":"","sources":["../../src/completion/agent-completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Guard evaluation for delivery stage transitions.
|
|
3
|
-
*
|
|
4
|
-
* Core guard evaluation logic, failure mode resolution, fail-closed
|
|
5
|
-
* handling, and audit trail recording.
|
|
6
|
-
*/
|
|
7
|
-
import type { PolicyFailureMode } from './types.js';
|
|
8
|
-
import { GuardEvaluationError } from './guard-engine.js';
|
|
9
|
-
import type { GuardEvalOutcome, GuardEvalParams } from './delivery-lifecycle.js';
|
|
10
|
-
/**
|
|
11
|
-
* Evaluate guards at a stage transition for a delivery.
|
|
12
|
-
*
|
|
13
|
-
* This is the core guard evaluation logic extracted from completion-handler.ts.
|
|
14
|
-
* Can be called by:
|
|
15
|
-
* - The per-delivery completion handler (legacy)
|
|
16
|
-
* - The focus team lead (after detecting delivery issue completion)
|
|
17
|
-
*/
|
|
18
|
-
export declare function evaluateGuardsForDeliveryTransition(params: GuardEvalParams): Promise<GuardEvalOutcome>;
|
|
19
|
-
/**
|
|
20
|
-
* Resolve the effective failure mode for a guard evaluation error.
|
|
21
|
-
*/
|
|
22
|
-
export declare function resolveGuardFailureMode(daemonMode: PolicyFailureMode, guardError: GuardEvaluationError | null): PolicyFailureMode;
|
|
23
|
-
interface GuardFailClosedParams {
|
|
24
|
-
err: Error;
|
|
25
|
-
guardError: GuardEvaluationError | null;
|
|
26
|
-
deliveryId: string;
|
|
27
|
-
deliveryName: string;
|
|
28
|
-
organizationId: string;
|
|
29
|
-
sessionId: string | null;
|
|
30
|
-
transitionId: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Handle fail-closed for guard evaluation errors.
|
|
34
|
-
*/
|
|
35
|
-
export declare function handleGuardFailClosed(params: GuardFailClosedParams): Promise<GuardEvalOutcome>;
|
|
36
|
-
/**
|
|
37
|
-
* Record guard evaluation errors in the audit trail (best-effort).
|
|
38
|
-
*/
|
|
39
|
-
export declare function recordGuardEvaluationError(err: Error, guardError: GuardEvaluationError | null, deliveryId: string, organizationId: string, transitionId: string, effectiveMode: PolicyFailureMode): Promise<void>;
|
|
40
|
-
export {};
|
|
41
|
-
//# sourceMappingURL=delivery-guards.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-guards.d.ts","sourceRoot":"","sources":["../src/delivery-guards.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAA+C,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEtG,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAQjF;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAoH3B;AAID;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,oBAAoB,GAAG,IAAI,GACtC,iBAAiB,CAQnB;AAED,UAAU,qBAAqB;IAC7B,GAAG,EAAE,KAAK,CAAC;IACX,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAyD3B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,KAAK,EACV,UAAU,EAAE,oBAAoB,GAAG,IAAI,EACvC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,iBAAiB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
package/dist/delivery-guards.js
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Guard evaluation for delivery stage transitions.
|
|
3
|
-
*
|
|
4
|
-
* Core guard evaluation logic, failure mode resolution, fail-closed
|
|
5
|
-
* handling, and audit trail recording.
|
|
6
|
-
*/
|
|
7
|
-
import { updateDeliveryStatus, createEscalation, createTransitionEvaluation } from './supabase.js';
|
|
8
|
-
import { evaluateGuardsAtTransition, executeTriggers, GuardEvaluationError } from './guard-engine.js';
|
|
9
|
-
import { withRetry, ESCALATION_REASONS, ESCALATION_DISPOSITIONS } from '@telora/daemon-core';
|
|
10
|
-
import { createLogger } from './log.js';
|
|
11
|
-
const log = createLogger({ module: 'guard' });
|
|
12
|
-
// ── Guard evaluation (unified workflow system) ──────────────────────
|
|
13
|
-
/**
|
|
14
|
-
* Evaluate guards at a stage transition for a delivery.
|
|
15
|
-
*
|
|
16
|
-
* This is the core guard evaluation logic extracted from completion-handler.ts.
|
|
17
|
-
* Can be called by:
|
|
18
|
-
* - The per-delivery completion handler (legacy)
|
|
19
|
-
* - The focus team lead (after detecting delivery issue completion)
|
|
20
|
-
*/
|
|
21
|
-
export async function evaluateGuardsForDeliveryTransition(params) {
|
|
22
|
-
const { deliveryId, organizationId, workflowTransition, exitCode, policyFailureMode, deliveryName, sessionId, } = params;
|
|
23
|
-
const baseOutcome = {
|
|
24
|
-
blocked: false,
|
|
25
|
-
shouldMerge: false,
|
|
26
|
-
shouldTriggerRepoll: false,
|
|
27
|
-
sessionStatus: 'completed',
|
|
28
|
-
exitReason: '',
|
|
29
|
-
};
|
|
30
|
-
if (!workflowTransition) {
|
|
31
|
-
return baseOutcome;
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
const guardResult = await evaluateGuardsAtTransition(deliveryId, organizationId, workflowTransition.id, exitCode);
|
|
35
|
-
// Log warnings (soft enforcement failures)
|
|
36
|
-
for (const warning of guardResult.warnings) {
|
|
37
|
-
log.warn(`[guard] Soft warning on "${deliveryName}": ` +
|
|
38
|
-
`guard "${warning.guard_name}" conditions not met`);
|
|
39
|
-
}
|
|
40
|
-
if (!guardResult.should_proceed) {
|
|
41
|
-
// Hard guard blocked the transition
|
|
42
|
-
log.info(`[guard] Transition blocked for "${deliveryName}": ` +
|
|
43
|
-
`${guardResult.blocks.length} hard guard(s) failed`);
|
|
44
|
-
// Execute blocking triggers
|
|
45
|
-
const triggerResult = await executeTriggers(deliveryId, organizationId, workflowTransition.id, guardResult.triggers_to_execute);
|
|
46
|
-
let exitReason = `Guard blocked: ${guardResult.blocks.map(b => b.guard_name).join(', ')}.`;
|
|
47
|
-
if (triggerResult.spawnedSessionIds.length > 0) {
|
|
48
|
-
exitReason += ` Spawned ${triggerResult.spawnedSessionIds.length} guard agent(s).`;
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
blocked: true,
|
|
52
|
-
shouldMerge: false,
|
|
53
|
-
shouldTriggerRepoll: false,
|
|
54
|
-
sessionStatus: 'completed',
|
|
55
|
-
exitReason,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
// All guards passed or only soft warnings -- execute pass/enter triggers
|
|
59
|
-
if (guardResult.triggers_to_execute.length > 0) {
|
|
60
|
-
await executeTriggers(deliveryId, organizationId, workflowTransition.id, guardResult.triggers_to_execute);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
const guardError = err instanceof GuardEvaluationError ? err : null;
|
|
65
|
-
const effectiveMode = resolveGuardFailureMode(policyFailureMode, guardError);
|
|
66
|
-
// Record evaluation error in audit trail
|
|
67
|
-
await recordGuardEvaluationError(err, guardError, deliveryId, organizationId, workflowTransition.id, effectiveMode);
|
|
68
|
-
if (effectiveMode === 'fail-closed') {
|
|
69
|
-
return await handleGuardFailClosed({
|
|
70
|
-
err: err,
|
|
71
|
-
guardError,
|
|
72
|
-
deliveryId,
|
|
73
|
-
deliveryName,
|
|
74
|
-
organizationId,
|
|
75
|
-
sessionId,
|
|
76
|
-
transitionId: workflowTransition.id,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
// Fail-open: log and proceed
|
|
80
|
-
log.error(`[guard] GUARD EVALUATION FAILED for "${deliveryName}": ` +
|
|
81
|
-
`${err.message}. Proceeding without guard checks (fail-open).`);
|
|
82
|
-
return {
|
|
83
|
-
...baseOutcome,
|
|
84
|
-
exitReason: `Warning: guard evaluation skipped due to error.`,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
return baseOutcome;
|
|
88
|
-
}
|
|
89
|
-
// ── Guard failure helpers ───────────────────────────────────────────
|
|
90
|
-
/**
|
|
91
|
-
* Resolve the effective failure mode for a guard evaluation error.
|
|
92
|
-
*/
|
|
93
|
-
export function resolveGuardFailureMode(daemonMode, guardError) {
|
|
94
|
-
if (guardError?.hasHardEnforcementGuards) {
|
|
95
|
-
return 'fail-closed';
|
|
96
|
-
}
|
|
97
|
-
if (guardError?.fetchedGuards !== null && guardError?.fetchedGuards !== undefined) {
|
|
98
|
-
return 'fail-open';
|
|
99
|
-
}
|
|
100
|
-
return daemonMode;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Handle fail-closed for guard evaluation errors.
|
|
104
|
-
*/
|
|
105
|
-
export async function handleGuardFailClosed(params) {
|
|
106
|
-
const { err, guardError, deliveryId, deliveryName, organizationId, sessionId, transitionId } = params;
|
|
107
|
-
const guardNames = guardError?.guardNames ?? [];
|
|
108
|
-
const guardInfo = guardNames.length > 0
|
|
109
|
-
? ` Guards: ${guardNames.join(', ')}.`
|
|
110
|
-
: '';
|
|
111
|
-
log.error(`[guard] GUARD EVALUATION FAILED for "${deliveryName}": ` +
|
|
112
|
-
`${err.message}. Transition blocked per fail-closed configuration.${guardInfo}`);
|
|
113
|
-
const exitReason = `Guard evaluation failed, transition blocked per fail-closed configuration.${guardInfo}`;
|
|
114
|
-
try {
|
|
115
|
-
await updateDeliveryStatus(deliveryId, 'paused');
|
|
116
|
-
}
|
|
117
|
-
catch (statusErr) {
|
|
118
|
-
log.error(`Failed to pause delivery "${deliveryName}":`, statusErr.message);
|
|
119
|
-
}
|
|
120
|
-
try {
|
|
121
|
-
await withRetry(() => createEscalation({
|
|
122
|
-
organizationId,
|
|
123
|
-
sessionId: sessionId ?? '',
|
|
124
|
-
issueId: null,
|
|
125
|
-
reasonType: ESCALATION_REASONS.ERROR_ENCOUNTERED,
|
|
126
|
-
// Operator triage: investigate the fail-closed guard error.
|
|
127
|
-
disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
|
|
128
|
-
anchor: { deliveryId },
|
|
129
|
-
description: `Guard evaluation failed (fail-closed). Transition blocked.\n\n` +
|
|
130
|
-
`**Delivery:** ${deliveryName}\n` +
|
|
131
|
-
`**Transition:** ${transitionId}\n` +
|
|
132
|
-
`**Error:** ${err.message}\n` +
|
|
133
|
-
(guardNames.length > 0 ? `**Affected guards:** ${guardNames.join(', ')}\n` : '') +
|
|
134
|
-
`\nThe delivery has been paused. Review the error and re-queue when resolved.`,
|
|
135
|
-
whatWasTried: `Guard evaluation at stage transition failed after retries. ` +
|
|
136
|
-
`Fail-closed mode is active${guardError?.hasHardEnforcementGuards ? ' (hard enforcement guards detected)' : ''}.`,
|
|
137
|
-
helpNeeded: `Investigate the guard evaluation failure, resolve the underlying issue, then re-queue the delivery.`,
|
|
138
|
-
}), { maxAttempts: 3, label: 'escalation-guard-fail-closed' });
|
|
139
|
-
log.info(`Created escalation for guard evaluation failure (fail-closed)`);
|
|
140
|
-
}
|
|
141
|
-
catch (escErr) {
|
|
142
|
-
log.error(`CRITICAL: Failed to create escalation for guard fail-closed after retries: ${escErr.message}. ` +
|
|
143
|
-
`Delivery: "${deliveryName}"`);
|
|
144
|
-
}
|
|
145
|
-
return {
|
|
146
|
-
blocked: true,
|
|
147
|
-
shouldMerge: false,
|
|
148
|
-
shouldTriggerRepoll: false,
|
|
149
|
-
sessionStatus: 'completed',
|
|
150
|
-
exitReason,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Record guard evaluation errors in the audit trail (best-effort).
|
|
155
|
-
*/
|
|
156
|
-
export async function recordGuardEvaluationError(err, guardError, deliveryId, organizationId, transitionId, effectiveMode) {
|
|
157
|
-
const errorDetails = {
|
|
158
|
-
error: err.message,
|
|
159
|
-
failure_mode: effectiveMode,
|
|
160
|
-
};
|
|
161
|
-
if (guardError?.fetchedGuards && guardError.fetchedGuards.length > 0) {
|
|
162
|
-
for (const guard of guardError.fetchedGuards) {
|
|
163
|
-
try {
|
|
164
|
-
await createTransitionEvaluation({
|
|
165
|
-
organization_id: organizationId,
|
|
166
|
-
entity_type: 'delivery',
|
|
167
|
-
entity_id: deliveryId,
|
|
168
|
-
transition_id: transitionId,
|
|
169
|
-
guard_id: guard.id,
|
|
170
|
-
result: 'error',
|
|
171
|
-
blocked: effectiveMode === 'fail-closed',
|
|
172
|
-
enforcement_level: guard.enforcement,
|
|
173
|
-
evaluation_details: errorDetails,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
catch (auditErr) {
|
|
177
|
-
log.warn(`[guard] Failed to record evaluation error for "${guard.name}":`, auditErr.message);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
try {
|
|
183
|
-
await createTransitionEvaluation({
|
|
184
|
-
organization_id: organizationId,
|
|
185
|
-
entity_type: 'delivery',
|
|
186
|
-
entity_id: deliveryId,
|
|
187
|
-
transition_id: transitionId,
|
|
188
|
-
guard_id: null,
|
|
189
|
-
result: 'error',
|
|
190
|
-
blocked: effectiveMode === 'fail-closed',
|
|
191
|
-
enforcement_level: null,
|
|
192
|
-
evaluation_details: errorDetails,
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
catch (auditErr) {
|
|
196
|
-
log.warn(`Failed to record evaluation error in audit trail:`, auditErr.message);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
//# sourceMappingURL=delivery-guards.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-guards.js","sourceRoot":"","sources":["../src/delivery-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DEPRECATED SHIM -- the real spawn implementation lives in focus-executor.ts.
|
|
3
|
-
*
|
|
4
|
-
* This file held a 612-line decomposed near-duplicate of focus-executor's
|
|
5
|
-
* spawnFocusTeam. The two copies had to be kept in sync by hand, and the
|
|
6
|
-
* duplicate (reachable only via the dead session-lifecycle retry loop)
|
|
7
|
-
* silently drifted: it resolved its resume-failure respawn and its resource
|
|
8
|
-
* governor from module-local bindings nothing initialized. The Daemon
|
|
9
|
-
* Orchestration Decomposition focus (injection #12) unified the paths: ONE
|
|
10
|
-
* spawn implementation -- focus-executor.spawnFocusTeam -- serves all callers
|
|
11
|
-
* (the listener poll loop, directive spawn mode via the pending-directive
|
|
12
|
-
* queue, and the resume-failure retry injected into
|
|
13
|
-
* spawner/helpers.handleTeamProcessClose).
|
|
14
|
-
*
|
|
15
|
-
* Kept as a re-export shim so the spawner barrel (index.ts) and any direct
|
|
16
|
-
* importers keep resolving the SAME live symbols. Do not add logic here.
|
|
17
|
-
*/
|
|
18
|
-
export { spawnFocusTeam, generateFocusBranchName, buildAgentArgs, initGovernor, getGovernor, type SpawnFocusTeamParams, } from '../focus-executor.js';
|
|
19
|
-
export type { LogStreams } from '../types.js';
|
|
20
|
-
//# sourceMappingURL=spawn-team.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-team.d.ts","sourceRoot":"","sources":["../../src/spawner/spawn-team.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DEPRECATED SHIM -- the real spawn implementation lives in focus-executor.ts.
|
|
3
|
-
*
|
|
4
|
-
* This file held a 612-line decomposed near-duplicate of focus-executor's
|
|
5
|
-
* spawnFocusTeam. The two copies had to be kept in sync by hand, and the
|
|
6
|
-
* duplicate (reachable only via the dead session-lifecycle retry loop)
|
|
7
|
-
* silently drifted: it resolved its resume-failure respawn and its resource
|
|
8
|
-
* governor from module-local bindings nothing initialized. The Daemon
|
|
9
|
-
* Orchestration Decomposition focus (injection #12) unified the paths: ONE
|
|
10
|
-
* spawn implementation -- focus-executor.spawnFocusTeam -- serves all callers
|
|
11
|
-
* (the listener poll loop, directive spawn mode via the pending-directive
|
|
12
|
-
* queue, and the resume-failure retry injected into
|
|
13
|
-
* spawner/helpers.handleTeamProcessClose).
|
|
14
|
-
*
|
|
15
|
-
* Kept as a re-export shim so the spawner barrel (index.ts) and any direct
|
|
16
|
-
* importers keep resolving the SAME live symbols. Do not add logic here.
|
|
17
|
-
*/
|
|
18
|
-
export { spawnFocusTeam, generateFocusBranchName, buildAgentArgs, initGovernor, getGovernor, } from '../focus-executor.js';
|
|
19
|
-
//# sourceMappingURL=spawn-team.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-team.js","sourceRoot":"","sources":["../../src/spawner/spawn-team.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,WAAW,GAEZ,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Timeout enforcement and graceful shutdown for agent sessions.
|
|
3
|
-
*
|
|
4
|
-
* Handles per-agent timeout warnings, escalating shutdown sequences
|
|
5
|
-
* (stdin close -> SIGTERM -> SIGKILL), and graceful completion shutdown.
|
|
6
|
-
*/
|
|
7
|
-
import type { Writable } from 'node:stream';
|
|
8
|
-
import type { DaemonConfig, RunningAgent } from '../types.js';
|
|
9
|
-
/**
|
|
10
|
-
* Safely send a signal to a process, ignoring errors if the process has already exited.
|
|
11
|
-
*/
|
|
12
|
-
export declare function safeSendSignal(pid: number, signal: NodeJS.Signals): void;
|
|
13
|
-
/**
|
|
14
|
-
* Safely close a writable stdin stream, ignoring errors if already closed.
|
|
15
|
-
*/
|
|
16
|
-
export declare function safeCloseStdin(stdin: Writable): void;
|
|
17
|
-
/**
|
|
18
|
-
* Set up per-agent timeout enforcement with warning at 80% and escalating shutdown.
|
|
19
|
-
*
|
|
20
|
-
* Returns a `timedOut` accessor function (closure over mutable state).
|
|
21
|
-
*/
|
|
22
|
-
export declare function setupTimeoutEnforcement(config: DaemonConfig, runningAgent: RunningAgent, deliveryName: string, sessionId: string, runningAgents: Map<string, RunningAgent>): {
|
|
23
|
-
getTimedOut: () => boolean;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Initiate graceful shutdown for an agent session.
|
|
27
|
-
*
|
|
28
|
-
* Sends a wrap-up message via stdin, waits for the process to exit,
|
|
29
|
-
* and escalates to SIGTERM/SIGKILL if needed.
|
|
30
|
-
*/
|
|
31
|
-
export declare function initiateGracefulShutdown(agent: RunningAgent, deliveryName: string, runningAgents: Map<string, RunningAgent>): void;
|
|
32
|
-
//# sourceMappingURL=timeout.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/spawner/timeout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO9D;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAMxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAMpD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC;IAAE,WAAW,EAAE,MAAM,OAAO,CAAA;CAAE,CAuChC;AA8BD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC,IAAI,CAuCN"}
|