@telora/daemon 0.22.13 → 0.22.52
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/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +1 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/ci/ci-status.d.ts.map +1 -1
- package/dist/ci/ci-status.js +1 -0
- package/dist/ci/ci-status.js.map +1 -1
- package/dist/completion/detector.d.ts +9 -0
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +18 -0
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/event-phases.d.ts +20 -0
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +46 -13
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +69 -9
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +109 -22
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/liveness-firing.d.ts +27 -0
- package/dist/completion/liveness-firing.d.ts.map +1 -0
- package/dist/completion/liveness-firing.js +79 -0
- package/dist/completion/liveness-firing.js.map +1 -0
- package/dist/completion/review-exit-phase.js +4 -4
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +8 -0
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/stdin-turn-tracker.d.ts +19 -0
- package/dist/completion/stdin-turn-tracker.d.ts.map +1 -0
- package/dist/completion/stdin-turn-tracker.js +57 -0
- package/dist/completion/stdin-turn-tracker.js.map +1 -0
- package/dist/completion/supervision-firing-record.d.ts +242 -0
- package/dist/completion/supervision-firing-record.d.ts.map +1 -0
- package/dist/completion/supervision-firing-record.js +292 -0
- package/dist/completion/supervision-firing-record.js.map +1 -0
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +9 -0
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts +7 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +105 -39
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-executor.d.ts +1 -10
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +51 -33
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +35 -9
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +15 -8
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/directive-verify-hold-gate.d.ts +33 -0
- package/dist/directive/directive-verify-hold-gate.d.ts.map +1 -0
- package/dist/directive/directive-verify-hold-gate.js +57 -0
- package/dist/directive/directive-verify-hold-gate.js.map +1 -0
- package/dist/directive/phase-sync.d.ts +11 -0
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +12 -0
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/drift/staleness-sensor.d.ts +62 -67
- package/dist/drift/staleness-sensor.d.ts.map +1 -1
- package/dist/drift/staleness-sensor.js +233 -68
- package/dist/drift/staleness-sensor.js.map +1 -1
- package/dist/drift/staleness.d.ts +8 -0
- package/dist/drift/staleness.d.ts.map +1 -1
- package/dist/drift/staleness.js +7 -1
- package/dist/drift/staleness.js.map +1 -1
- package/dist/focus/focus-engine.js +1 -1
- package/dist/focus/focus-engine.js.map +1 -1
- package/dist/focus/focus-team-state.d.ts.map +1 -1
- package/dist/focus/focus-team-state.js +2 -0
- package/dist/focus/focus-team-state.js.map +1 -1
- package/dist/focus/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus/focus-worktree-state.js +5 -2
- package/dist/focus/focus-worktree-state.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts +39 -0
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +140 -24
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +53 -25
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/session-health.d.ts +25 -3
- package/dist/focus/session-health.d.ts.map +1 -1
- package/dist/focus/session-health.js +32 -1
- package/dist/focus/session-health.js.map +1 -1
- package/dist/focus/team-actionable-work.d.ts +41 -2
- package/dist/focus/team-actionable-work.d.ts.map +1 -1
- package/dist/focus/team-actionable-work.js +52 -7
- package/dist/focus/team-actionable-work.js.map +1 -1
- package/dist/merge/focus-merge.d.ts +12 -1
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +33 -2
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/nexus/return.d.ts +105 -1
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +237 -47
- package/dist/nexus/return.js.map +1 -1
- package/dist/queries/schemas.d.ts +12 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +7 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +1 -0
- package/dist/queries/sessions.js.map +1 -1
- package/dist/shell/heartbeat-metadata.d.ts +102 -0
- package/dist/shell/heartbeat-metadata.d.ts.map +1 -0
- package/dist/shell/heartbeat-metadata.js +172 -0
- package/dist/shell/heartbeat-metadata.js.map +1 -0
- package/dist/shell/heartbeat.d.ts +7 -22
- package/dist/shell/heartbeat.d.ts.map +1 -1
- package/dist/shell/heartbeat.js +120 -89
- package/dist/shell/heartbeat.js.map +1 -1
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +21 -12
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +7 -1
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/process-spawn.d.ts +32 -1
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +43 -5
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/session.d.ts +11 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/update/auto-update-idle.d.ts +22 -0
- package/dist/update/auto-update-idle.d.ts.map +1 -1
- package/dist/update/auto-update-idle.js +8 -1
- package/dist/update/auto-update-idle.js.map +1 -1
- package/dist/update/auto-update.d.ts +0 -6
- package/dist/update/auto-update.d.ts.map +1 -1
- package/dist/update/auto-update.js +20 -6
- package/dist/update/auto-update.js.map +1 -1
- package/dist/update/version-check.d.ts +73 -0
- package/dist/update/version-check.d.ts.map +1 -1
- package/dist/update/version-check.js +107 -11
- package/dist/update/version-check.js.map +1 -1
- package/dist/verify/stall-detector-config.d.ts +26 -0
- package/dist/verify/stall-detector-config.d.ts.map +1 -1
- package/dist/verify/stall-detector-config.js +32 -0
- package/dist/verify/stall-detector-config.js.map +1 -1
- package/dist/verify/stall-detectors.d.ts +40 -0
- package/dist/verify/stall-detectors.d.ts.map +1 -1
- package/dist/verify/stall-detectors.js +60 -6
- package/dist/verify/stall-detectors.js.map +1 -1
- package/dist/verify/stalled-team-backstop.d.ts +43 -0
- package/dist/verify/stalled-team-backstop.d.ts.map +1 -0
- package/dist/verify/stalled-team-backstop.js +131 -0
- package/dist/verify/stalled-team-backstop.js.map +1 -0
- package/dist/worktree/verify-interlock.d.ts.map +1 -1
- package/dist/worktree/verify-interlock.js +3 -1
- package/dist/worktree/verify-interlock.js.map +1 -1
- package/package.json +3 -3
|
@@ -35,6 +35,15 @@ import type { AgentSession } from '../types/index.js';
|
|
|
35
35
|
export declare const SESSION_HEALTH_GRACE_PERIOD_MS: number;
|
|
36
36
|
/** A session is a TEAM session iff it carries an agent role; role-less rows are system spawns. */
|
|
37
37
|
export declare function isSystemSession(session: Pick<AgentSession, 'agent_role_id'>): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* The session's durable last-activity instant (activity_summary.updatedAt) as
|
|
40
|
+
* epoch ms, or null when the row has no such signal (never flushed activity, or a
|
|
41
|
+
* read edge that predates activity_summary projection) or it fails to parse. Null
|
|
42
|
+
* is the conservative floor: absence of a call-activity signal is never treated as
|
|
43
|
+
* abandonment, so the silence check no-ops rather than reaping a session it cannot
|
|
44
|
+
* measure.
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseLastActivityMs(session: Pick<AgentSession, 'activity_summary'>): number | null;
|
|
38
47
|
export interface SessionHealthContext {
|
|
39
48
|
/** leadSessionIds of the in-memory active teams. */
|
|
40
49
|
trackedTeamSessionIds: ReadonlySet<string>;
|
|
@@ -44,6 +53,16 @@ export interface SessionHealthContext {
|
|
|
44
53
|
graceMs?: number;
|
|
45
54
|
/** Liveness probe: true when the pid is a live process. */
|
|
46
55
|
isProcessAlive: (pid: number) => boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Silence window in ms for the CALL-ACTIVITY abandonment check. When set, a
|
|
58
|
+
* non-tracked session whose process is ALIVE but whose durable last-activity
|
|
59
|
+
* signal (activity_summary.updatedAt) is older than this is classified
|
|
60
|
+
* `silent_abandoned` -- a live-but-dead session the blind process scan cannot
|
|
61
|
+
* see. Omitted / no durable signal -> the process-liveness skip stands (the
|
|
62
|
+
* pre-existing, conservative behavior), so this is inert until the read edge
|
|
63
|
+
* projects activity_summary.
|
|
64
|
+
*/
|
|
65
|
+
silenceThresholdMs?: number;
|
|
47
66
|
}
|
|
48
67
|
export type SessionHealthSkipReason = 'tracked_team' | 'no_started_at' | 'within_grace' | 'live_process';
|
|
49
68
|
export interface SessionHealthDecision {
|
|
@@ -57,10 +76,13 @@ export interface SessionHealthDecision {
|
|
|
57
76
|
skipReason?: SessionHealthSkipReason;
|
|
58
77
|
/**
|
|
59
78
|
* Present when verdict === 'close'. `team_orphan` = a role-bearing team lead
|
|
60
|
-
* whose process is
|
|
61
|
-
* row left running
|
|
79
|
+
* whose process is GONE; `system_straggler` = a role-less one-shot audit/merge
|
|
80
|
+
* row left running with a dead process; `silent_abandoned` = a session whose
|
|
81
|
+
* process is ALIVE but which has made no observed call past the silence
|
|
82
|
+
* threshold (a live-but-dead session -- the case the process scan is blind to).
|
|
83
|
+
* Callers log/attribute the three differently.
|
|
62
84
|
*/
|
|
63
|
-
kind?: 'team_orphan' | 'system_straggler';
|
|
85
|
+
kind?: 'team_orphan' | 'system_straggler' | 'silent_abandoned';
|
|
64
86
|
}
|
|
65
87
|
/**
|
|
66
88
|
* Classify one active session for the health sweep. Pure: no I/O, no clock read.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-health.d.ts","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAAgB,CAAC;AAE5D,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,OAAO,CAErF;AAED,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"session-health.d.ts","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAAgB,CAAC;AAE5D,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,OAAO,CAErF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,GAAG,MAAM,GAAG,IAAI,CAKlG;AAED,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,uBAAuB,GAC/B,cAAc,GACd,eAAe,GACf,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,uCAAuC;IACvC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,aAAa,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;CAChE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,oBAAoB,GACxB,qBAAqB,CAqDvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,GAAG,EAAE,oBAAoB,GACxB,qBAAqB,EAAE,CAEzB"}
|
|
@@ -11,6 +11,21 @@ export const SESSION_HEALTH_GRACE_PERIOD_MS = 2 * 60 * 1000; // 2 minutes
|
|
|
11
11
|
export function isSystemSession(session) {
|
|
12
12
|
return session.agent_role_id == null;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* The session's durable last-activity instant (activity_summary.updatedAt) as
|
|
16
|
+
* epoch ms, or null when the row has no such signal (never flushed activity, or a
|
|
17
|
+
* read edge that predates activity_summary projection) or it fails to parse. Null
|
|
18
|
+
* is the conservative floor: absence of a call-activity signal is never treated as
|
|
19
|
+
* abandonment, so the silence check no-ops rather than reaping a session it cannot
|
|
20
|
+
* measure.
|
|
21
|
+
*/
|
|
22
|
+
export function parseLastActivityMs(session) {
|
|
23
|
+
const updatedAt = session.activity_summary?.updatedAt;
|
|
24
|
+
if (typeof updatedAt !== 'string')
|
|
25
|
+
return null;
|
|
26
|
+
const ms = Date.parse(updatedAt);
|
|
27
|
+
return Number.isNaN(ms) ? null : ms;
|
|
28
|
+
}
|
|
14
29
|
/**
|
|
15
30
|
* Classify one active session for the health sweep. Pure: no I/O, no clock read.
|
|
16
31
|
*/
|
|
@@ -36,8 +51,24 @@ export function classifySessionHealth(session, ctx) {
|
|
|
36
51
|
if (ctx.now - new Date(startedAt).getTime() < graceMs) {
|
|
37
52
|
return { ...base, verdict: 'skip', skipReason: 'within_grace' };
|
|
38
53
|
}
|
|
39
|
-
// A row whose process is still alive is not stale
|
|
54
|
+
// A row whose process is still alive is not stale by the process scan -- BUT a
|
|
55
|
+
// live process can hold a session that is functionally dead (a hung/abandoned
|
|
56
|
+
// session that has made no call for a long time). The process scan is blind to
|
|
57
|
+
// that (the reproduced incident: "1 active session" every 30s for 40+ min on a
|
|
58
|
+
// live pid). When a durable CALL-ACTIVITY signal exists and is older than the
|
|
59
|
+
// silence threshold, classify the session abandoned rather than skipping it
|
|
60
|
+
// forever. Applies only here -- a tracked team returned above, so a legitimately
|
|
61
|
+
// parked live team (owned by the outcome/idle stall detectors) is never touched.
|
|
40
62
|
if (session.pid != null && ctx.isProcessAlive(session.pid)) {
|
|
63
|
+
const lastActivityMs = parseLastActivityMs(session);
|
|
64
|
+
if (ctx.silenceThresholdMs !== undefined &&
|
|
65
|
+
lastActivityMs !== null &&
|
|
66
|
+
ctx.now - lastActivityMs > ctx.silenceThresholdMs) {
|
|
67
|
+
return { ...base, verdict: 'close', kind: 'silent_abandoned' };
|
|
68
|
+
}
|
|
69
|
+
// No durable activity signal (never flushed / edge does not yet project it) or
|
|
70
|
+
// still within the silence window -> the live process is left alone, exactly as
|
|
71
|
+
// before. Conservative: absence of a signal is never treated as abandonment.
|
|
41
72
|
return { ...base, verdict: 'skip', skipReason: 'live_process' };
|
|
42
73
|
}
|
|
43
74
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-health.js","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,8DAA8D;AAC9D,gBAAgB;AAiChB;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAEzE,kGAAkG;AAClG,MAAM,UAAU,eAAe,CAAC,OAA4C;IAC1E,OAAO,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;AACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"session-health.js","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,10 +42,24 @@ export interface TeamActionableWorkInput {
|
|
|
42
42
|
* would run one turn and terminate.
|
|
43
43
|
*/
|
|
44
44
|
underVerifyHold: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Whether the daemon has sent THIS team a merge-conflict resolution request it
|
|
47
|
+
* has not yet answered (teamState.resolvingMergeConflict, set in
|
|
48
|
+
* merge/focus-merge.ts requestTeamLeadResolution). An outstanding resolution is
|
|
49
|
+
* itself team-actionable work: the team is mid-resolution, and the exit path
|
|
50
|
+
* must not tear it down -- doing so strands the conflict markers in the worktree
|
|
51
|
+
* and forces a respawn + fallback agent to clean up the mess the daemon made
|
|
52
|
+
* (delivery 61ee33eb, the 2026-09-07 incident). Absent (falsy) for every caller
|
|
53
|
+
* that is not the completion team-exit decision.
|
|
54
|
+
*/
|
|
55
|
+
mergeResolutionOutstanding?: boolean;
|
|
45
56
|
}
|
|
46
57
|
/**
|
|
47
|
-
* The one predicate.
|
|
48
|
-
* work regardless of
|
|
58
|
+
* The one predicate. An outstanding merge-conflict resolution request the daemon
|
|
59
|
+
* sent this team IS actionable work regardless of delivery state -- it takes
|
|
60
|
+
* precedence so a team finishing its last delivery is never torn down mid-merge.
|
|
61
|
+
* Otherwise a focus held by an in-flight verify has NO team-actionable work
|
|
62
|
+
* regardless of its delivery state, and failing both, the caller's own
|
|
49
63
|
* actionable-work fact stands. Pure, so both the spawn gate and the team-exit
|
|
50
64
|
* decision read the identical answer for a given state.
|
|
51
65
|
*/
|
|
@@ -61,8 +75,33 @@ export declare function resolveTeamActionableWork(args: {
|
|
|
61
75
|
focusWorktreePath: string | null;
|
|
62
76
|
hasUnheldActionableWork: boolean;
|
|
63
77
|
isWorktreeUnderVerify: (worktreePath: string) => boolean;
|
|
78
|
+
/** See TeamActionableWorkInput.mergeResolutionOutstanding. Optional; defaults
|
|
79
|
+
* to false so callers that do not track it are unaffected. */
|
|
80
|
+
mergeResolutionOutstanding?: boolean;
|
|
64
81
|
}): {
|
|
65
82
|
underVerifyHold: boolean;
|
|
66
83
|
teamHasActionableWork: boolean;
|
|
67
84
|
};
|
|
85
|
+
/** Injectable seam for {@link anyFocusUnderVerifyHold}. */
|
|
86
|
+
export interface AnyFocusHoldDeps {
|
|
87
|
+
getAllFocusWorktrees?: () => ReadonlyMap<string, {
|
|
88
|
+
worktreePath: string;
|
|
89
|
+
}>;
|
|
90
|
+
isWorktreeUnderVerify?: (worktreePath: string) => boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Whether ANY registered focus worktree is currently held by an in-flight
|
|
94
|
+
* verify. Reads the same hold source the per-focus predicate does
|
|
95
|
+
* (focus-worktree-state + verify-interlock), so the drain/idle gate agrees with
|
|
96
|
+
* the spawn gate and the team-exit classifier about "is a verify in flight".
|
|
97
|
+
*
|
|
98
|
+
* The auto-updater consumes this: a verify runs as a spawned child inside a
|
|
99
|
+
* worktree (verification-deterministic.ts) that can last up to ~30 min, and
|
|
100
|
+
* during that hold there is often NO active team (the coding team already
|
|
101
|
+
* exited, which is why the delivery is deferred at coding->verify). Restarting
|
|
102
|
+
* the daemon then would kill the verify mid-run, so an in-flight hold must read
|
|
103
|
+
* as "not idle" REGARDLESS of team count or queue depth -- robustly, not by the
|
|
104
|
+
* incidental fact that a held focus happens to stay in the ready set.
|
|
105
|
+
*/
|
|
106
|
+
export declare function anyFocusUnderVerifyHold(deps?: AnyFocusHoldDeps): boolean;
|
|
68
107
|
//# sourceMappingURL=team-actionable-work.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-actionable-work.d.ts","sourceRoot":"","sources":["../../src/focus/team-actionable-work.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"team-actionable-work.d.ts","sourceRoot":"","sources":["../../src/focus/team-actionable-work.ts"],"names":[],"mappings":"AA4CA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,uGAAuG;IACvG,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7E,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAMvF;AAED,0DAA0D;AAC1D,MAAM,WAAW,uBAAuB;IACtC;;;;;;OAMG;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;;OASG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAIlF;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uBAAuB,EAAE,OAAO,CAAC;IACjC,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IACzD;mEAC+D;IAC/D,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,GAAG;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,qBAAqB,EAAE,OAAO,CAAA;CAAE,CAW/D;AAED,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,CAAC,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAO5E"}
|
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by: packages/daemon/src/
|
|
2
|
+
// Pinned by: packages/daemon/src/directive/directive-verify-hold-disposal-convergence.test.ts,
|
|
3
|
+
// packages/daemon/src/focus/pending-spawn-verify-hold.test.ts,
|
|
4
|
+
// packages/daemon/src/focus/team-actionable-work.test.ts
|
|
3
5
|
// PINNED-BY-END
|
|
4
6
|
/**
|
|
5
7
|
* The single definition of "is there team-actionable work for this focus right
|
|
6
|
-
* now?", read by
|
|
7
|
-
*
|
|
8
|
-
*
|
|
8
|
+
* now?", read by every controller that can spawn, hold, or exit a team so they
|
|
9
|
+
* cannot disagree about the same focus state:
|
|
10
|
+
* - the spawn gate (focus/listener-spawn.ts, decideFocusSpawn)
|
|
11
|
+
* - the team-exit decision (completion/event-phases.ts, computeCompletionFacts)
|
|
12
|
+
* - the directive executor's spawn-producing paths
|
|
13
|
+
* (directive/directive-verify-hold-gate.ts, consumed
|
|
14
|
+
* by executeInjectDirective's no-team fallback and
|
|
15
|
+
* executeSpawnDirective in directive/directive-dispatch.ts)
|
|
16
|
+
* - the drain/idle gate (update/auto-update-idle.ts isBatchSafeIdle, wired in
|
|
17
|
+
* shell/unified-shell.ts via anyFocusUnderVerifyHold --
|
|
18
|
+
* never restart the daemon while a verify is in flight)
|
|
19
|
+
*
|
|
20
|
+
* That set is the WHOLE converged surface: no other module re-derives the
|
|
21
|
+
* held-vs-unheld actionable-work verdict from delivery state. (spawn-decision.ts
|
|
22
|
+
* findActionableDeliveries answers a different question -- WHICH deliveries a
|
|
23
|
+
* focus already cleared to spawn should hand its team -- and is downstream of
|
|
24
|
+
* this gate, not a peer of it.)
|
|
9
25
|
*
|
|
10
26
|
* Why one predicate: the spawn path historically decided readiness from delivery
|
|
11
27
|
* execution_status alone (getReadyFocuses) and never saw the verify-interlock
|
|
@@ -21,7 +37,7 @@
|
|
|
21
37
|
*
|
|
22
38
|
* @module focus/team-actionable-work
|
|
23
39
|
*/
|
|
24
|
-
import { getFocusWorktree } from './focus-worktree-state.js';
|
|
40
|
+
import { getFocusWorktree, getAllFocusWorktrees } from './focus-worktree-state.js';
|
|
25
41
|
import { isWorktreeUnderVerify } from '../worktree/verify-interlock.js';
|
|
26
42
|
/**
|
|
27
43
|
* Whether the focus's worktree is currently held by an in-flight verify command.
|
|
@@ -45,12 +61,17 @@ export function focusUnderVerifyHold(focusId, deps = {}) {
|
|
|
45
61
|
return underVerify(worktreePath);
|
|
46
62
|
}
|
|
47
63
|
/**
|
|
48
|
-
* The one predicate.
|
|
49
|
-
* work regardless of
|
|
64
|
+
* The one predicate. An outstanding merge-conflict resolution request the daemon
|
|
65
|
+
* sent this team IS actionable work regardless of delivery state -- it takes
|
|
66
|
+
* precedence so a team finishing its last delivery is never torn down mid-merge.
|
|
67
|
+
* Otherwise a focus held by an in-flight verify has NO team-actionable work
|
|
68
|
+
* regardless of its delivery state, and failing both, the caller's own
|
|
50
69
|
* actionable-work fact stands. Pure, so both the spawn gate and the team-exit
|
|
51
70
|
* decision read the identical answer for a given state.
|
|
52
71
|
*/
|
|
53
72
|
export function focusHasTeamActionableWork(input) {
|
|
73
|
+
if (input.mergeResolutionOutstanding)
|
|
74
|
+
return true;
|
|
54
75
|
if (input.underVerifyHold)
|
|
55
76
|
return false;
|
|
56
77
|
return input.hasUnheldActionableWork;
|
|
@@ -69,7 +90,31 @@ export function resolveTeamActionableWork(args) {
|
|
|
69
90
|
teamHasActionableWork: focusHasTeamActionableWork({
|
|
70
91
|
hasUnheldActionableWork: args.hasUnheldActionableWork,
|
|
71
92
|
underVerifyHold,
|
|
93
|
+
mergeResolutionOutstanding: args.mergeResolutionOutstanding,
|
|
72
94
|
}),
|
|
73
95
|
};
|
|
74
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Whether ANY registered focus worktree is currently held by an in-flight
|
|
99
|
+
* verify. Reads the same hold source the per-focus predicate does
|
|
100
|
+
* (focus-worktree-state + verify-interlock), so the drain/idle gate agrees with
|
|
101
|
+
* the spawn gate and the team-exit classifier about "is a verify in flight".
|
|
102
|
+
*
|
|
103
|
+
* The auto-updater consumes this: a verify runs as a spawned child inside a
|
|
104
|
+
* worktree (verification-deterministic.ts) that can last up to ~30 min, and
|
|
105
|
+
* during that hold there is often NO active team (the coding team already
|
|
106
|
+
* exited, which is why the delivery is deferred at coding->verify). Restarting
|
|
107
|
+
* the daemon then would kill the verify mid-run, so an in-flight hold must read
|
|
108
|
+
* as "not idle" REGARDLESS of team count or queue depth -- robustly, not by the
|
|
109
|
+
* incidental fact that a held focus happens to stay in the ready set.
|
|
110
|
+
*/
|
|
111
|
+
export function anyFocusUnderVerifyHold(deps = {}) {
|
|
112
|
+
const resolveAll = deps.getAllFocusWorktrees ?? getAllFocusWorktrees;
|
|
113
|
+
const underVerify = deps.isWorktreeUnderVerify ?? isWorktreeUnderVerify;
|
|
114
|
+
for (const info of resolveAll().values()) {
|
|
115
|
+
if (underVerify(info.worktreePath))
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
75
120
|
//# sourceMappingURL=team-actionable-work.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-actionable-work.js","sourceRoot":"","sources":["../../src/focus/team-actionable-work.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,
|
|
1
|
+
{"version":3,"file":"team-actionable-work.js","sourceRoot":"","sources":["../../src/focus/team-actionable-work.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,+FAA+F;AAC/F,iEAAiE;AACjE,2DAA2D;AAC3D,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAcxE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,OAAsB,EAAE;IAC5E,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;IAClE,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,CAAC;IACxE,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC;IACpE,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAgCD;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAA8B;IACvE,IAAI,KAAK,CAAC,0BAA0B;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,KAAK,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,KAAK,CAAC,uBAAuB,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAOzC;IACC,MAAM,eAAe,GACnB,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxF,OAAO;QACL,eAAe;QACf,qBAAqB,EAAE,0BAA0B,CAAC;YAChD,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,eAAe;YACf,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;SAC5D,CAAC;KACH,CAAC;AACJ,CAAC;AAQD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAyB,EAAE;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,IAAI,oBAAoB,CAAC;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -80,6 +80,17 @@ export declare function refuseMergeIfWorktreeDirty(params: {
|
|
|
80
80
|
refused: boolean;
|
|
81
81
|
deferred: boolean;
|
|
82
82
|
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Whether the resolver the daemon asked to fix the merge conflict is still alive
|
|
85
|
+
* to do it. The wait must end the moment its resolver stops being alive rather
|
|
86
|
+
* than run the full timeout window out against a dead process (delivery 61ee33eb
|
|
87
|
+
* AC#2 -- the 2026-09-07 five-minute stall against a lead the daemon had already
|
|
88
|
+
* killed). A resolver can resolve only while its lead process is running AND the
|
|
89
|
+
* team is still executing: a team torn down for any reason (e.g. a concurrent
|
|
90
|
+
* terminate) is no longer a resolver. Pure over the two fields + an injectable
|
|
91
|
+
* liveness probe, so the wait's bound is unit-testable without stubbing git.
|
|
92
|
+
*/
|
|
93
|
+
export declare function isResolverStillAlive(teamState: Pick<FocusTeamState, 'leadPid' | 'phase'>, isAlive?: (pid: number) => boolean): boolean;
|
|
83
94
|
/**
|
|
84
95
|
* Request the team lead to resolve merge conflicts in the worktree.
|
|
85
96
|
*
|
|
@@ -89,7 +100,7 @@ export declare function refuseMergeIfWorktreeDirty(params: {
|
|
|
89
100
|
*
|
|
90
101
|
* Returns when resolution is detected or timeout expires.
|
|
91
102
|
*/
|
|
92
|
-
export declare function requestTeamLeadResolution(teamState: FocusTeamState, conflictFiles: string[], branchName: string, integrationBranch: string, timeoutMs?: number): Promise<MergeConflictResolutionResult>;
|
|
103
|
+
export declare function requestTeamLeadResolution(teamState: FocusTeamState, conflictFiles: string[], branchName: string, integrationBranch: string, timeoutMs?: number, isAlive?: (pid: number) => boolean): Promise<MergeConflictResolutionResult>;
|
|
93
104
|
/**
|
|
94
105
|
* Merge the focus branch to integration.
|
|
95
106
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-merge.d.ts","sourceRoot":"","sources":["../../src/merge/focus-merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"focus-merge.d.ts","sourceRoot":"","sources":["../../src/merge/focus-merge.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,gBAAgB,EAAE,8BAA8B,EAA4G,MAAM,2BAA2B,CAAC;AAWvM,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AASrE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,OAAO,CAAC;AAEvD;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACrE,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,8BAA8B,CAAC,EAAE,OAAO,8BAA8B,CAAC;CACxE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE;IACN,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAiGlD;AAWD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,OAAO,CAAC,EACpD,OAAO,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAwB,GACjD,OAAO,CAIT;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,cAAc,EACzB,aAAa,EAAE,MAAM,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,MAA6C,EACxD,OAAO,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAwB,GACjD,OAAO,CAAC,6BAA6B,CAAC,CA2ExC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,mBAAmB,GAAE,mBAAgC,GACpD,OAAO,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA0M1D;AAiCD;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiHf"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
2
|
// Pinned by: packages/daemon/src/integration/agent-owned-scoping-integration.test.ts,
|
|
3
3
|
// packages/daemon/src/merge/dirty-worktree-merge-refusal.test.ts,
|
|
4
|
-
// packages/daemon/src/merge/focus-merge-empty-deliveries.test.ts
|
|
4
|
+
// packages/daemon/src/merge/focus-merge-empty-deliveries.test.ts,
|
|
5
|
+
// packages/daemon/src/merge/focus-merge-resolver-liveness.test.ts
|
|
5
6
|
// PINNED-BY-END
|
|
6
7
|
import { runGitSync } from '../git/index.js';
|
|
7
8
|
import { fetchEffectiveWorkflow } from '../queries/workflows.js';
|
|
@@ -17,6 +18,7 @@ import { withRetry, sendMessage, ESCALATION_REASONS, ESCALATION_DISPOSITIONS } f
|
|
|
17
18
|
// would close a static import cycle (focus-merge -> spawn/index ->
|
|
18
19
|
// focus-executor -> focus-merge).
|
|
19
20
|
import { spawnResolutionAgent } from '../spawn/lifecycle.js';
|
|
21
|
+
import { isProcessAlive } from '../spawn/liveness.js';
|
|
20
22
|
import { getFocusWorktree } from '../focus/focus-worktree-state.js';
|
|
21
23
|
import { worktreeHasUncommittedChanges } from '../worktree/index.js';
|
|
22
24
|
import { classifyMergeFailure } from './merge-failure-classify.js';
|
|
@@ -130,6 +132,23 @@ export async function refuseMergeIfWorktreeDirty(params, deps = {}) {
|
|
|
130
132
|
const MERGE_CONFLICT_RESOLUTION_TIMEOUT_MS = 5 * 60 * 1000;
|
|
131
133
|
/** Poll interval when waiting for conflict resolution (5 seconds). */
|
|
132
134
|
const RESOLUTION_POLL_INTERVAL_MS = 5000;
|
|
135
|
+
/**
|
|
136
|
+
* Whether the resolver the daemon asked to fix the merge conflict is still alive
|
|
137
|
+
* to do it. The wait must end the moment its resolver stops being alive rather
|
|
138
|
+
* than run the full timeout window out against a dead process (delivery 61ee33eb
|
|
139
|
+
* AC#2 -- the 2026-09-07 five-minute stall against a lead the daemon had already
|
|
140
|
+
* killed). A resolver can resolve only while its lead process is running AND the
|
|
141
|
+
* team is still executing: a team torn down for any reason (e.g. a concurrent
|
|
142
|
+
* terminate) is no longer a resolver. Pure over the two fields + an injectable
|
|
143
|
+
* liveness probe, so the wait's bound is unit-testable without stubbing git.
|
|
144
|
+
*/
|
|
145
|
+
export function isResolverStillAlive(teamState, isAlive = isProcessAlive) {
|
|
146
|
+
if (teamState.phase !== 'executing')
|
|
147
|
+
return false;
|
|
148
|
+
if (teamState.leadPid == null)
|
|
149
|
+
return false;
|
|
150
|
+
return isAlive(teamState.leadPid);
|
|
151
|
+
}
|
|
133
152
|
/**
|
|
134
153
|
* Request the team lead to resolve merge conflicts in the worktree.
|
|
135
154
|
*
|
|
@@ -139,7 +158,7 @@ const RESOLUTION_POLL_INTERVAL_MS = 5000;
|
|
|
139
158
|
*
|
|
140
159
|
* Returns when resolution is detected or timeout expires.
|
|
141
160
|
*/
|
|
142
|
-
export async function requestTeamLeadResolution(teamState, conflictFiles, branchName, integrationBranch, timeoutMs = MERGE_CONFLICT_RESOLUTION_TIMEOUT_MS) {
|
|
161
|
+
export async function requestTeamLeadResolution(teamState, conflictFiles, branchName, integrationBranch, timeoutMs = MERGE_CONFLICT_RESOLUTION_TIMEOUT_MS, isAlive = isProcessAlive) {
|
|
143
162
|
const { leadStdin, worktreePath, focusName } = teamState;
|
|
144
163
|
if (!leadStdin || !worktreePath) {
|
|
145
164
|
return { resolved: false, reason: 'No active team lead stdin or worktree' };
|
|
@@ -180,6 +199,18 @@ export async function requestTeamLeadResolution(teamState, conflictFiles, branch
|
|
|
180
199
|
return { resolved: true };
|
|
181
200
|
}
|
|
182
201
|
}
|
|
202
|
+
// Not resolved yet: bound the wait by the poll interval, not the full
|
|
203
|
+
// timeout. If the resolver the daemon asked is no longer alive (process
|
|
204
|
+
// gone, or the team no longer executing), stop waiting NOW rather than run
|
|
205
|
+
// the window out against a dead process (delivery 61ee33eb AC#2). The
|
|
206
|
+
// conflict is reclassified and retried on the next poll tick
|
|
207
|
+
// (checkResolvedMergeConflicts) instead of after the full window.
|
|
208
|
+
if (!isResolverStillAlive(teamState, isAlive)) {
|
|
209
|
+
log.warn(`[focus-merge] Merge-conflict resolver for "${focusName}" is no longer alive -- ` +
|
|
210
|
+
`ending the wait after ~${RESOLUTION_POLL_INTERVAL_MS / 1000}s instead of the full ` +
|
|
211
|
+
`${timeoutMs / 1000}s window; the conflict will be retried on the next tick`);
|
|
212
|
+
return { resolved: false, reason: 'resolver_exited' };
|
|
213
|
+
}
|
|
183
214
|
}
|
|
184
215
|
// Timeout expired
|
|
185
216
|
log.warn(`[focus-merge] Team lead did not resolve merge conflicts within ${timeoutMs / 1000}s for "${focusName}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-merge.js","sourceRoot":"","sources":["../../src/merge/focus-merge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"focus-merge.js","sourceRoot":"","sources":["../../src/merge/focus-merge.ts"],"names":[],"mappings":"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"}
|
package/dist/nexus/return.d.ts
CHANGED
|
@@ -33,6 +33,9 @@ export interface Req {
|
|
|
33
33
|
id: string;
|
|
34
34
|
status?: string;
|
|
35
35
|
materializedDeliveryId?: string | null;
|
|
36
|
+
materializedFocusId?: string | null;
|
|
37
|
+
/** When the target called deliver-with-findings (closure third gate). */
|
|
38
|
+
deliveredAt?: string | null;
|
|
36
39
|
sourceFocusId?: string | null;
|
|
37
40
|
sourceProductId?: string | null;
|
|
38
41
|
sourceDeliveryId?: string | null;
|
|
@@ -45,6 +48,32 @@ export interface Req {
|
|
|
45
48
|
/** Contract-fulfillment results carried back by the target's deliver step. */
|
|
46
49
|
findings?: string | null;
|
|
47
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* The escalation `description` hard cap enforced server-side by
|
|
53
|
+
* supabase/functions/_shared/validation.ts (validateMaxLength(description, 5000)).
|
|
54
|
+
* The Nexus producer imports this ONE number so producer and consumer agree on
|
|
55
|
+
* the limit instead of the producer composing blind and the consumer rejecting --
|
|
56
|
+
* the exact disagreement that let an 8407-char description be re-submitted 3012
|
|
57
|
+
* times against a 5000 cap.
|
|
58
|
+
*/
|
|
59
|
+
export declare const ESCALATION_DESCRIPTION_MAX = 5000;
|
|
60
|
+
/**
|
|
61
|
+
* Fit a Nexus source-notification description to the escalation cap. The `head`
|
|
62
|
+
* (prefix + reason + action sentence) is invariant and always kept; only the
|
|
63
|
+
* variable-length `findings` tail is truncated, with a pointer to the full record
|
|
64
|
+
* (the Nexus request) so no content is silently dropped and no write is ever
|
|
65
|
+
* rejected for length. Pure + exported for direct unit testing.
|
|
66
|
+
*/
|
|
67
|
+
export declare function fitNotificationDescription(head: string, findings: string | null | undefined, requestId: string, cap?: number): string;
|
|
68
|
+
/**
|
|
69
|
+
* True when a write error is a DETERMINISTIC rejection -- one that will fail
|
|
70
|
+
* identically on every retry (a hard length cap or a shape/validation reject),
|
|
71
|
+
* as opposed to a transient error (network, 5xx) worth retrying. Matching the
|
|
72
|
+
* length/validation message lets the return loop classify such a rejection
|
|
73
|
+
* permanent on FIRST occurrence and stop re-submitting an impossible write.
|
|
74
|
+
* Pure + exported for direct unit testing.
|
|
75
|
+
*/
|
|
76
|
+
export declare function isDeterministicWriteRejection(err: unknown): boolean;
|
|
48
77
|
/**
|
|
49
78
|
* gate_state written onto a source delivery the Nexus gate pauses. It carries
|
|
50
79
|
* the dashboard "Waiting on" blocker (rendered from `blocking[].guardName`) plus
|
|
@@ -68,8 +97,33 @@ export interface SourceDeliveryState {
|
|
|
68
97
|
* product_request_resolve; this mirror keeps the gate explicit + unit-tested.)
|
|
69
98
|
*/
|
|
70
99
|
export declare function shouldResolve(deliveryStatus: string | undefined): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Three-valued outcome of the server's FIRST resolve gate (classify the
|
|
102
|
+
* materialized delivery):
|
|
103
|
+
* - 'resolvable' -- the delivery is done; the loop can close.
|
|
104
|
+
* - 'unreachable' -- the delivery is absent (deleted) or cancelled; it can
|
|
105
|
+
* NEVER reach done, so the request is a permanent hold that
|
|
106
|
+
* will not clear on its own (a human must re-point/close it),
|
|
107
|
+
* not a transient wait.
|
|
108
|
+
* - 'waiting' -- any in-flight state (queued/coding/verify/verify_failed/
|
|
109
|
+
* paused/...); a genuine transient wait that a later cycle
|
|
110
|
+
* converges once the delivery reaches done.
|
|
111
|
+
* Mirrors the edge gate in product_request_resolve so the daemon can tell a
|
|
112
|
+
* dead-ended incoming request apart from a live one instead of treating every
|
|
113
|
+
* non-done state identically (the bug that let 11-week zombies read as "in
|
|
114
|
+
* progress"). The authoritative decision is server-side; this keeps the
|
|
115
|
+
* classification explicit + unit-tested.
|
|
116
|
+
*/
|
|
117
|
+
export type ResolveGateOutcome = 'resolvable' | 'unreachable' | 'waiting';
|
|
118
|
+
export declare function classifyMaterializedDelivery(deliveryPresent: boolean, deliveryStatus: string | undefined): ResolveGateOutcome;
|
|
71
119
|
export interface NexusReturnDeps {
|
|
72
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Incoming requests still in_progress. Includes those with NO materialized
|
|
122
|
+
* delivery: a null-materialized in_progress request that carries delivered_at
|
|
123
|
+
* (the mode-2 zombies held since 2026-06-21 / 2026-08-16) is a permanent hold
|
|
124
|
+
* the server gate classifies + PUBLISHES to hold_state -- but only if resolve
|
|
125
|
+
* is called for it, so it must not be filtered out here.
|
|
126
|
+
*/
|
|
73
127
|
listIncomingInProgress: (productId: string) => Promise<Req[]>;
|
|
74
128
|
/** Read a delivery's execution_status (org_nodes). Kept for completeness/testing. */
|
|
75
129
|
getDeliveryStatus: (deliveryId: string) => Promise<string | undefined>;
|
|
@@ -79,6 +133,25 @@ export interface NexusReturnDeps {
|
|
|
79
133
|
listOutgoing: (productId: string) => Promise<Req[]>;
|
|
80
134
|
/** Notify the source side (escalation on the blocked focus) about a terminal state. */
|
|
81
135
|
notifySource: (req: Req) => Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Permanent-failure path: report ONCE that a source notification whose write was
|
|
138
|
+
* rejected DETERMINISTICALLY (hard length cap / validation) is undeliverable --
|
|
139
|
+
* a compact, anchored, under-cap escalation -- rather than re-submitting the
|
|
140
|
+
* impossible write every poll. Optional so existing NexusReturnDeps literals need
|
|
141
|
+
* not supply it; production always does.
|
|
142
|
+
*/
|
|
143
|
+
notifySourceUndeliverable?: (req: Req, reason: string) => Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Permanent-failure path: mark the REQUEST RECORD ITSELF visibly undeliverable
|
|
146
|
+
* (a distinct hold_state on the request, surfaced on the Nexus tab) AND stamp
|
|
147
|
+
* the retry guard atomically -- so a permanently-failed notification is
|
|
148
|
+
* distinguishable from a successfully-delivered one instead of sharing the same
|
|
149
|
+
* source_notified_at stamp. Optional so existing NexusReturnDeps literals need
|
|
150
|
+
* not supply it; production always does. When absent the loop falls back to the
|
|
151
|
+
* plain markSourceNotified stamp (stops the retry storm, but leaves the record
|
|
152
|
+
* indistinguishable -- the pre-fix behaviour).
|
|
153
|
+
*/
|
|
154
|
+
markSourceUndeliverable?: (requestId: string, reason: string) => Promise<void>;
|
|
82
155
|
/** Stamp source_notified_at so the request is not re-notified. */
|
|
83
156
|
markSourceNotified: (requestId: string) => Promise<void>;
|
|
84
157
|
/** Notify the source side that the target requested clarification. */
|
|
@@ -114,6 +187,37 @@ export interface NexusReturnDeps {
|
|
|
114
187
|
}
|
|
115
188
|
/** Production deps backed by the product-api over callApi + createEscalation. */
|
|
116
189
|
export declare function defaultNexusReturnDeps(config: DaemonConfig): NexusReturnDeps;
|
|
190
|
+
/**
|
|
191
|
+
* Deps for the auto-deliver pass. Kept SEPARATE from NexusReturnDeps (and its
|
|
192
|
+
* factory) so this new capability does not grow the floored defaultNexusReturnDeps.
|
|
193
|
+
*/
|
|
194
|
+
export interface NexusAutoDeliverDeps {
|
|
195
|
+
/** in_progress incoming requests whose materialized delivery is done but delivered_at is null. */
|
|
196
|
+
listIncomingAwaitingDeliver: (productId: string) => Promise<Req[]>;
|
|
197
|
+
/** The materialized focus's latest completed review summary, trimmed; null when none. */
|
|
198
|
+
getFocusReviewSummary: (focusId: string) => Promise<string | null>;
|
|
199
|
+
/** Attach carried-back findings + stamp delivered_at (product_request_deliver). */
|
|
200
|
+
deliverRequest: (requestId: string, findings: string) => Promise<void>;
|
|
201
|
+
log?: (msg: string) => void;
|
|
202
|
+
}
|
|
203
|
+
/** Production auto-deliver deps over callApi + the focus-review query. */
|
|
204
|
+
export declare function defaultNexusAutoDeliverDeps(_config: DaemonConfig): NexusAutoDeliverDeps;
|
|
205
|
+
/**
|
|
206
|
+
* Auto-deliver pass: for each incoming request whose materialized delivery is
|
|
207
|
+
* DONE but never had deliver-with-findings called (the mode-1 zombies -- 6 of the
|
|
208
|
+
* 8 held requests), derive findings from the materialized focus's completed
|
|
209
|
+
* review summary and call deliver -- so closure never depends on the target team
|
|
210
|
+
* VOLUNTEERING that call.
|
|
211
|
+
*
|
|
212
|
+
* When the focus has no completed review summary there is no genuine carried-back
|
|
213
|
+
* content, so the request is LEFT untouched (it keeps the published
|
|
214
|
+
* deliver_findings hold the resolve gate already writes) rather than closed with
|
|
215
|
+
* empty findings -- honest closure over a flattering number, and reversible via
|
|
216
|
+
* reopen. The delivery-status gate still owns the actual close; this pass only
|
|
217
|
+
* removes the volunteer-deliver dependency. Best-effort + per-request try/catch,
|
|
218
|
+
* mirroring the rest of the return pass.
|
|
219
|
+
*/
|
|
220
|
+
export declare function autoDeliverCompletedRequests(config: DaemonConfig, deps?: NexusAutoDeliverDeps): Promise<void>;
|
|
117
221
|
/**
|
|
118
222
|
* Poll one product for return-path loop closure. Runs both sides:
|
|
119
223
|
* TARGET -- resolve materialized in_progress incoming requests (server gates
|