@nexus-cortex/core 4.108.16 → 4.108.18
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/.env.defaults +28 -0
- package/dist/config/RuntimeConfigRegistry.d.ts.map +1 -1
- package/dist/config/RuntimeConfigRegistry.js +3 -0
- package/dist/config/RuntimeConfigRegistry.js.map +1 -1
- package/dist/config/SettingsLoader.d.ts.map +1 -1
- package/dist/config/SettingsLoader.js +3 -0
- package/dist/config/SettingsLoader.js.map +1 -1
- package/dist/config/SettingsSchema.d.ts +3 -0
- package/dist/config/SettingsSchema.d.ts.map +1 -1
- package/dist/config/SettingsSchema.js +27 -0
- package/dist/config/SettingsSchema.js.map +1 -1
- package/dist/config/effectiveConfig.d.ts.map +1 -1
- package/dist/config/effectiveConfig.js +3 -0
- package/dist/config/effectiveConfig.js.map +1 -1
- package/dist/orchestrator/CortexOrchestrator.d.ts +11 -0
- package/dist/orchestrator/CortexOrchestrator.d.ts.map +1 -1
- package/dist/orchestrator/CortexOrchestrator.js +89 -6
- package/dist/orchestrator/CortexOrchestrator.js.map +1 -1
- package/dist/orchestrator/HerdrSubAgentRunner.d.ts +132 -0
- package/dist/orchestrator/HerdrSubAgentRunner.d.ts.map +1 -0
- package/dist/orchestrator/HerdrSubAgentRunner.js +371 -0
- package/dist/orchestrator/HerdrSubAgentRunner.js.map +1 -0
- package/dist/orchestrator/SubAgentProcessManager.d.ts +2 -0
- package/dist/orchestrator/SubAgentProcessManager.d.ts.map +1 -1
- package/dist/orchestrator/SubAgentProcessManager.js +4 -0
- package/dist/orchestrator/SubAgentProcessManager.js.map +1 -1
- package/dist/orchestrator/SubAgentTypes.d.ts +6 -0
- package/dist/orchestrator/SubAgentTypes.d.ts.map +1 -1
- package/dist/orchestrator/index.d.ts +2 -0
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +2 -0
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/tools/registries/BaseToolRegistry.d.ts.map +1 -1
- package/dist/tools/registries/BaseToolRegistry.js +34 -4
- package/dist/tools/registries/BaseToolRegistry.js.map +1 -1
- package/dist/training/DecisionStore.d.ts +1 -1
- package/dist/training/DecisionStore.d.ts.map +1 -1
- package/dist/training/DecisionStore.js.map +1 -1
- package/dist/training/loopLadder.js +1 -1
- package/dist/training/loopLadder.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HerdrSubAgentRunner — HB-HERDR-DELEGATES (R147, 2026-09-14).
|
|
3
|
+
*
|
|
4
|
+
* Runs a Task sub-agent as a herdr pane instead of a forked IPC child: the operator sees
|
|
5
|
+
* every delegate live in the herdr UI and can `agent attach --takeover`; the delegate's own
|
|
6
|
+
* R145 lifecycle reports (working/idle/blocked) populate herdr's status for its pane because
|
|
7
|
+
* the child inherits HERDR_ENV and gets its own HERDR_PANE_ID from `pane run`.
|
|
8
|
+
*
|
|
9
|
+
* The in-process/IPC path (SubAgentProcessManager) stays the default. Runtime selection:
|
|
10
|
+
* CORTEX_SUBAGENT_RUNTIME=auto|process|herdr (auto = herdr when HERDR_ENV=1, the herdr
|
|
11
|
+
* terminal backend resolves AND the parent auto-approves tools — a pane child has no IPC
|
|
12
|
+
* approval channel, so it runs auto-approved; explicit lever/`runtime` input skip that guard).
|
|
13
|
+
* Task input `runtime: "process"|"herdr"` overrides per dispatch.
|
|
14
|
+
*
|
|
15
|
+
* herdr 0.9.0 wire shapes (verified live on session `bench` 2026-09-14):
|
|
16
|
+
* pane split <parent> --direction down --no-focus --cwd P -> JSON .result.pane.pane_id (env rides the task file, not --env)
|
|
17
|
+
* pane rename <pane> <name> -> JSON ok (cosmetic)
|
|
18
|
+
* pane run <pane> <command> -> (no output)
|
|
19
|
+
* agent wait <pane> --until idle --until done --timeout MS -> JSON .result.agent.agent_status
|
|
20
|
+
* before the child reports: .error.code == "agent_not_found" (rc 1) -- NOT an error for us
|
|
21
|
+
* slice elapsed: .error.code == "timeout" (rc 1)
|
|
22
|
+
* agent rename <pane> <name> -> JSON (needs a seen agent)
|
|
23
|
+
* pane read <pane> --source recent-unwrapped --lines N -> plain text
|
|
24
|
+
* pane send-keys <pane> C-c -> (no output)
|
|
25
|
+
* pane close <pane> -> JSON .result.type == "ok"
|
|
26
|
+
* `cortex` is not a recognized `agent start --kind`, so the delegate is started with `pane run`
|
|
27
|
+
* and addressed by pane id throughout. A reported idle renders as `done` until seen: both count.
|
|
28
|
+
*
|
|
29
|
+
* Completion evidence (any one is enough): result.json written by the child (agent-mode
|
|
30
|
+
* --result-file), `agent wait` reporting idle/done, or the shell exit sentinel printed after
|
|
31
|
+
* the child exits (crash / nonzero exit -> status error). The runner's hard deadline is
|
|
32
|
+
* timeoutMs + a grace so the child's own R133 turn-deadline result (status timeout, partial
|
|
33
|
+
* response, Files Modified) is preferred over the runner's C-c.
|
|
34
|
+
*
|
|
35
|
+
* Env parity with the IPC child (which inherits the parent's process.env): the pane shell's
|
|
36
|
+
* env comes from the herdr SERVER, so the parent's env snapshot + the overrides ride the 0600
|
|
37
|
+
* task file (`env`), never `pane split --env` / the command line (ps-visible secrets). HERDR_*
|
|
38
|
+
* is excluded so the child keeps its own pane identity (HERDR_PANE_ID, verified inherited).
|
|
39
|
+
*
|
|
40
|
+
* Final status: the child's R145 reporter throttles (250 ms coalescing) and the process exits
|
|
41
|
+
* ~100 ms after completion, so its last `idle` can be lost (live: pane stuck at `working`).
|
|
42
|
+
* The runner therefore reports the terminal state for the pane itself once the result is in.
|
|
43
|
+
*/
|
|
44
|
+
import type { AgentDefinition, SubAgentResult } from './SubAgentTypes.js';
|
|
45
|
+
export type SubAgentRuntime = 'process' | 'herdr';
|
|
46
|
+
export type SubAgentRuntimeLever = 'auto' | SubAgentRuntime;
|
|
47
|
+
export interface DelegateExecResult {
|
|
48
|
+
stdout: string;
|
|
49
|
+
stderr: string;
|
|
50
|
+
code: number | null;
|
|
51
|
+
}
|
|
52
|
+
export type DelegateExecFn = (bin: string, args: string[], opts?: {
|
|
53
|
+
timeoutMs?: number;
|
|
54
|
+
env?: NodeJS.ProcessEnv;
|
|
55
|
+
}) => Promise<DelegateExecResult>;
|
|
56
|
+
/** One `agent wait` slice; the loop re-arms until the deadline. */
|
|
57
|
+
export declare const HERDR_WAIT_SLICE_MS = 2000;
|
|
58
|
+
/** Runner deadline = timeoutMs + this, so the child's own deadline result wins when it converges. */
|
|
59
|
+
export declare const HERDR_DELEGATE_GRACE_MS = 15000;
|
|
60
|
+
/** After idle/done is seen, how long to wait for result.json to land (the child writes then exits). */
|
|
61
|
+
export declare const HERDR_RESULT_SETTLE_MS = 5000;
|
|
62
|
+
export declare const HERDR_TRANSCRIPT_LINES = 200;
|
|
63
|
+
export declare function readSubAgentRuntimeLever(env?: NodeJS.ProcessEnv): SubAgentRuntimeLever;
|
|
64
|
+
/** Default keep=1: the operator can inspect / take over the delegate pane after it finishes. */
|
|
65
|
+
export declare function readKeepDelegatePanes(env?: NodeJS.ProcessEnv): boolean;
|
|
66
|
+
export interface ResolveSubAgentRuntimeInput {
|
|
67
|
+
lever: SubAgentRuntimeLever;
|
|
68
|
+
/** Task input `runtime` (per-dispatch override); anything but process|herdr is ignored. */
|
|
69
|
+
requested?: unknown;
|
|
70
|
+
/** HERDR_ENV=1 + binary + socket reachable (the caller probes the terminal backend). */
|
|
71
|
+
herdrAvailable: boolean;
|
|
72
|
+
/** Parent approval mode auto-approves tools (a pane child has no IPC approval channel). */
|
|
73
|
+
parentAutoApprove: boolean;
|
|
74
|
+
warn?: (line: string) => void;
|
|
75
|
+
}
|
|
76
|
+
export declare function resolveSubAgentRuntime(input: ResolveSubAgentRuntimeInput): {
|
|
77
|
+
runtime: SubAgentRuntime;
|
|
78
|
+
reason: string;
|
|
79
|
+
};
|
|
80
|
+
export declare function shellQuote(value: string): string;
|
|
81
|
+
/** The parent's own agent-mode entry (core/dist/orchestrator -> cli/dist/agent-mode.js), else argv-relative. */
|
|
82
|
+
export declare function resolveAgentModulePath(): string;
|
|
83
|
+
export declare const defaultDelegateExec: DelegateExecFn;
|
|
84
|
+
/** The JSON the child reads (agent-mode --task-file); mirrors IPCStartMessage.payload + permissionMode. */
|
|
85
|
+
export interface DelegateTaskFile {
|
|
86
|
+
agentId: string;
|
|
87
|
+
agentDefinition: AgentDefinition;
|
|
88
|
+
taskPrompt: string;
|
|
89
|
+
modelId: string;
|
|
90
|
+
projectPath: string;
|
|
91
|
+
timeoutMs: number;
|
|
92
|
+
maxTurns: number;
|
|
93
|
+
debug?: boolean;
|
|
94
|
+
/** Pane delegates have no IPC approval channel; auto is the only mode that can complete unattended. */
|
|
95
|
+
permissionMode: 'auto' | 'interactive';
|
|
96
|
+
/** Parent env snapshot + overrides, applied by agent-mode before the orchestrator boots (HERDR_* excluded). */
|
|
97
|
+
env?: Record<string, string>;
|
|
98
|
+
}
|
|
99
|
+
export interface HerdrDelegateOptions {
|
|
100
|
+
agentDef: AgentDefinition;
|
|
101
|
+
taskPrompt: string;
|
|
102
|
+
/** herdr agent/pane label (sanitized to [a-z][a-z0-9_-]{0,31}). */
|
|
103
|
+
name: string;
|
|
104
|
+
cwd: string;
|
|
105
|
+
envOverrides?: Record<string, string>;
|
|
106
|
+
timeoutMs: number;
|
|
107
|
+
modelOverride?: string;
|
|
108
|
+
agentId?: string;
|
|
109
|
+
maxTurns?: number;
|
|
110
|
+
debug?: boolean;
|
|
111
|
+
/** Test/explicit seams. */
|
|
112
|
+
exec?: DelegateExecFn;
|
|
113
|
+
env?: NodeJS.ProcessEnv;
|
|
114
|
+
bin?: string;
|
|
115
|
+
parentPaneId?: string;
|
|
116
|
+
/** Pass `--session <name>` (only needed when the parent is NOT itself inside a herdr pane). */
|
|
117
|
+
session?: string;
|
|
118
|
+
nodeBin?: string;
|
|
119
|
+
agentModulePath?: string;
|
|
120
|
+
tmpRoot?: string;
|
|
121
|
+
now?: () => number;
|
|
122
|
+
sleep?: (ms: number) => Promise<void>;
|
|
123
|
+
waitSliceMs?: number;
|
|
124
|
+
warn?: (line: string) => void;
|
|
125
|
+
}
|
|
126
|
+
export interface HerdrDelegateResult extends SubAgentResult {
|
|
127
|
+
runtime: 'herdr';
|
|
128
|
+
paneId: string;
|
|
129
|
+
transcriptTail: string;
|
|
130
|
+
}
|
|
131
|
+
export declare function runDelegateInHerdr(opts: HerdrDelegateOptions): Promise<HerdrDelegateResult>;
|
|
132
|
+
//# sourceMappingURL=HerdrSubAgentRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerdrSubAgentRunner.d.ts","sourceRoot":"","sources":["../../src/orchestrator/HerdrSubAgentRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG1E,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,eAAe,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AACD,MAAM,MAAM,cAAc,GAAG,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KACnD,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjC,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,qGAAqG;AACrG,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,uGAAuG;AACvG,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAI1C,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,oBAAoB,CAInG;AAED,gGAAgG;AAChG,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAGnF;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,oBAAoB,CAAC;IAC5B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wFAAwF;IACxF,cAAc,EAAE,OAAO,CAAC;IACxB,2FAA2F;IAC3F,iBAAiB,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBvH;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,gHAAgH;AAChH,wBAAgB,sBAAsB,IAAI,MAAM,CAc/C;AAED,eAAO,MAAM,mBAAmB,EAAE,cAkB9B,CAAC;AAmBL,2GAA2G;AAC3G,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uGAAuG;IACvG,cAAc,EAAE,MAAM,GAAG,aAAa,CAAC;IACvC,+GAA+G;IAC/G,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmKjG"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HerdrSubAgentRunner — HB-HERDR-DELEGATES (R147, 2026-09-14).
|
|
3
|
+
*
|
|
4
|
+
* Runs a Task sub-agent as a herdr pane instead of a forked IPC child: the operator sees
|
|
5
|
+
* every delegate live in the herdr UI and can `agent attach --takeover`; the delegate's own
|
|
6
|
+
* R145 lifecycle reports (working/idle/blocked) populate herdr's status for its pane because
|
|
7
|
+
* the child inherits HERDR_ENV and gets its own HERDR_PANE_ID from `pane run`.
|
|
8
|
+
*
|
|
9
|
+
* The in-process/IPC path (SubAgentProcessManager) stays the default. Runtime selection:
|
|
10
|
+
* CORTEX_SUBAGENT_RUNTIME=auto|process|herdr (auto = herdr when HERDR_ENV=1, the herdr
|
|
11
|
+
* terminal backend resolves AND the parent auto-approves tools — a pane child has no IPC
|
|
12
|
+
* approval channel, so it runs auto-approved; explicit lever/`runtime` input skip that guard).
|
|
13
|
+
* Task input `runtime: "process"|"herdr"` overrides per dispatch.
|
|
14
|
+
*
|
|
15
|
+
* herdr 0.9.0 wire shapes (verified live on session `bench` 2026-09-14):
|
|
16
|
+
* pane split <parent> --direction down --no-focus --cwd P -> JSON .result.pane.pane_id (env rides the task file, not --env)
|
|
17
|
+
* pane rename <pane> <name> -> JSON ok (cosmetic)
|
|
18
|
+
* pane run <pane> <command> -> (no output)
|
|
19
|
+
* agent wait <pane> --until idle --until done --timeout MS -> JSON .result.agent.agent_status
|
|
20
|
+
* before the child reports: .error.code == "agent_not_found" (rc 1) -- NOT an error for us
|
|
21
|
+
* slice elapsed: .error.code == "timeout" (rc 1)
|
|
22
|
+
* agent rename <pane> <name> -> JSON (needs a seen agent)
|
|
23
|
+
* pane read <pane> --source recent-unwrapped --lines N -> plain text
|
|
24
|
+
* pane send-keys <pane> C-c -> (no output)
|
|
25
|
+
* pane close <pane> -> JSON .result.type == "ok"
|
|
26
|
+
* `cortex` is not a recognized `agent start --kind`, so the delegate is started with `pane run`
|
|
27
|
+
* and addressed by pane id throughout. A reported idle renders as `done` until seen: both count.
|
|
28
|
+
*
|
|
29
|
+
* Completion evidence (any one is enough): result.json written by the child (agent-mode
|
|
30
|
+
* --result-file), `agent wait` reporting idle/done, or the shell exit sentinel printed after
|
|
31
|
+
* the child exits (crash / nonzero exit -> status error). The runner's hard deadline is
|
|
32
|
+
* timeoutMs + a grace so the child's own R133 turn-deadline result (status timeout, partial
|
|
33
|
+
* response, Files Modified) is preferred over the runner's C-c.
|
|
34
|
+
*
|
|
35
|
+
* Env parity with the IPC child (which inherits the parent's process.env): the pane shell's
|
|
36
|
+
* env comes from the herdr SERVER, so the parent's env snapshot + the overrides ride the 0600
|
|
37
|
+
* task file (`env`), never `pane split --env` / the command line (ps-visible secrets). HERDR_*
|
|
38
|
+
* is excluded so the child keeps its own pane identity (HERDR_PANE_ID, verified inherited).
|
|
39
|
+
*
|
|
40
|
+
* Final status: the child's R145 reporter throttles (250 ms coalescing) and the process exits
|
|
41
|
+
* ~100 ms after completion, so its last `idle` can be lost (live: pane stuck at `working`).
|
|
42
|
+
* The runner therefore reports the terminal state for the pane itself once the result is in.
|
|
43
|
+
*/
|
|
44
|
+
import { spawn } from 'child_process';
|
|
45
|
+
import * as crypto from 'crypto';
|
|
46
|
+
import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'fs';
|
|
47
|
+
import { dirname, join } from 'path';
|
|
48
|
+
import { tmpdir } from 'os';
|
|
49
|
+
import { fileURLToPath } from 'url';
|
|
50
|
+
import { resolveHerdrReporting, sanitizeHerdrAgentName, sanitizeHerdrSummary, HERDR_SOURCE, HERDR_DISPLAY_SOURCE } from './herdrReporter.js';
|
|
51
|
+
/** One `agent wait` slice; the loop re-arms until the deadline. */
|
|
52
|
+
export const HERDR_WAIT_SLICE_MS = 2000;
|
|
53
|
+
/** Runner deadline = timeoutMs + this, so the child's own deadline result wins when it converges. */
|
|
54
|
+
export const HERDR_DELEGATE_GRACE_MS = 15_000;
|
|
55
|
+
/** After idle/done is seen, how long to wait for result.json to land (the child writes then exits). */
|
|
56
|
+
export const HERDR_RESULT_SETTLE_MS = 5000;
|
|
57
|
+
export const HERDR_TRANSCRIPT_LINES = 200;
|
|
58
|
+
const EXEC_GRACE_MS = 5000;
|
|
59
|
+
const SETTLE_POLL_MS = 200;
|
|
60
|
+
export function readSubAgentRuntimeLever(env = process.env) {
|
|
61
|
+
const raw = (env.CORTEX_SUBAGENT_RUNTIME || '').trim().toLowerCase();
|
|
62
|
+
if (raw === 'process' || raw === 'herdr')
|
|
63
|
+
return raw;
|
|
64
|
+
return 'auto';
|
|
65
|
+
}
|
|
66
|
+
/** Default keep=1: the operator can inspect / take over the delegate pane after it finishes. */
|
|
67
|
+
export function readKeepDelegatePanes(env = process.env) {
|
|
68
|
+
const raw = (env.CORTEX_HERDR_KEEP_DELEGATE_PANES || '').trim().toLowerCase();
|
|
69
|
+
return !(raw === '0' || raw === 'false');
|
|
70
|
+
}
|
|
71
|
+
export function resolveSubAgentRuntime(input) {
|
|
72
|
+
const warn = input.warn ?? ((line) => console.warn(line));
|
|
73
|
+
const requested = typeof input.requested === 'string' ? input.requested.trim().toLowerCase() : '';
|
|
74
|
+
const explicit = requested === 'process' || requested === 'herdr' ? requested
|
|
75
|
+
: input.lever === 'process' || input.lever === 'herdr' ? input.lever
|
|
76
|
+
: undefined;
|
|
77
|
+
const via = requested === 'process' || requested === 'herdr' ? 'Task runtime input' : 'CORTEX_SUBAGENT_RUNTIME';
|
|
78
|
+
if (explicit === 'process')
|
|
79
|
+
return { runtime: 'process', reason: `${via}=process` };
|
|
80
|
+
if (explicit === 'herdr') {
|
|
81
|
+
if (input.herdrAvailable)
|
|
82
|
+
return { runtime: 'herdr', reason: `${via}=herdr` };
|
|
83
|
+
warn(`[WARN] ${via}=herdr but herdr is unavailable (needs HERDR_ENV=1 + reachable herdr socket); running the sub-agent as a child process`);
|
|
84
|
+
return { runtime: 'process', reason: `${via}=herdr but unavailable` };
|
|
85
|
+
}
|
|
86
|
+
if (!input.herdrAvailable)
|
|
87
|
+
return { runtime: 'process', reason: 'auto: herdr unavailable' };
|
|
88
|
+
if (!input.parentAutoApprove)
|
|
89
|
+
return { runtime: 'process', reason: 'auto: parent is not auto-approving (pane delegates have no approval channel)' };
|
|
90
|
+
return { runtime: 'herdr', reason: 'auto: herdr available' };
|
|
91
|
+
}
|
|
92
|
+
export function shellQuote(value) {
|
|
93
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
94
|
+
}
|
|
95
|
+
/** The parent's own agent-mode entry (core/dist/orchestrator -> cli/dist/agent-mode.js), else argv-relative. */
|
|
96
|
+
export function resolveAgentModulePath() {
|
|
97
|
+
try {
|
|
98
|
+
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
99
|
+
const candidate = join(thisDir, '..', '..', '..', 'cli', 'dist', 'agent-mode.js');
|
|
100
|
+
if (existsSync(candidate))
|
|
101
|
+
return candidate;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
/* fall through */
|
|
105
|
+
}
|
|
106
|
+
const argv1 = process.argv[1] || '';
|
|
107
|
+
if (argv1) {
|
|
108
|
+
const sibling = join(dirname(argv1), 'agent-mode.js');
|
|
109
|
+
if (existsSync(sibling))
|
|
110
|
+
return sibling;
|
|
111
|
+
}
|
|
112
|
+
return join(process.cwd(), 'packages', 'cli', 'dist', 'agent-mode.js');
|
|
113
|
+
}
|
|
114
|
+
export const defaultDelegateExec = (bin, args, opts) => new Promise((resolve, reject) => {
|
|
115
|
+
let stdout = '';
|
|
116
|
+
let stderr = '';
|
|
117
|
+
let settled = false;
|
|
118
|
+
const child = spawn(bin, args, { env: opts?.env ?? process.env, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
119
|
+
const timer = opts?.timeoutMs
|
|
120
|
+
? setTimeout(() => {
|
|
121
|
+
if (settled)
|
|
122
|
+
return;
|
|
123
|
+
settled = true;
|
|
124
|
+
try {
|
|
125
|
+
child.kill('SIGKILL');
|
|
126
|
+
}
|
|
127
|
+
catch { /* gone */ }
|
|
128
|
+
reject(new Error(`${bin} ${args.slice(0, 2).join(' ')} did not return within ${opts.timeoutMs}ms`));
|
|
129
|
+
}, opts.timeoutMs)
|
|
130
|
+
: undefined;
|
|
131
|
+
child.stdout?.on('data', (d) => { stdout += d.toString(); });
|
|
132
|
+
child.stderr?.on('data', (d) => { stderr += d.toString(); });
|
|
133
|
+
child.on('error', (e) => { if (settled)
|
|
134
|
+
return; settled = true; if (timer)
|
|
135
|
+
clearTimeout(timer); reject(e); });
|
|
136
|
+
child.on('close', (code) => { if (settled)
|
|
137
|
+
return; settled = true; if (timer)
|
|
138
|
+
clearTimeout(timer); resolve({ stdout, stderr, code }); });
|
|
139
|
+
});
|
|
140
|
+
function parseEnvelope(res, what) {
|
|
141
|
+
for (const t of [res.stdout.trim(), res.stderr.trim()]) {
|
|
142
|
+
if (t.startsWith('{')) {
|
|
143
|
+
try {
|
|
144
|
+
return JSON.parse(t);
|
|
145
|
+
}
|
|
146
|
+
catch { /* next */ }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (res.code !== 0) {
|
|
150
|
+
throw new Error(`herdr ${what} failed (exit ${res.code}): ${(res.stderr || res.stdout).trim() || 'no output'}`);
|
|
151
|
+
}
|
|
152
|
+
return { result: res.stdout.trim() };
|
|
153
|
+
}
|
|
154
|
+
function reviveResult(raw) {
|
|
155
|
+
const parsed = JSON.parse(raw);
|
|
156
|
+
parsed.startTime = new Date(parsed.startTime);
|
|
157
|
+
parsed.endTime = new Date(parsed.endTime);
|
|
158
|
+
return parsed;
|
|
159
|
+
}
|
|
160
|
+
function stripSentinelLines(text, token) {
|
|
161
|
+
return text.split('\n').filter((l) => !l.includes(`__CORTEX_DELEGATE_EXIT_${token}_`)).join('\n');
|
|
162
|
+
}
|
|
163
|
+
export async function runDelegateInHerdr(opts) {
|
|
164
|
+
const env = opts.env ?? process.env;
|
|
165
|
+
const exec = opts.exec ?? defaultDelegateExec;
|
|
166
|
+
const now = opts.now ?? Date.now;
|
|
167
|
+
const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
168
|
+
const warn = opts.warn ?? ((line) => console.warn(line));
|
|
169
|
+
const sliceMs = Math.max(250, opts.waitSliceMs ?? HERDR_WAIT_SLICE_MS);
|
|
170
|
+
let bin = opts.bin;
|
|
171
|
+
let parentPaneId = opts.parentPaneId;
|
|
172
|
+
if (!bin || !parentPaneId) {
|
|
173
|
+
const res = resolveHerdrReporting({ ...env, CORTEX_HERDR_REPORTING: '' });
|
|
174
|
+
if (!res.enabled || !res.bin || !res.paneId)
|
|
175
|
+
throw new Error(`herdr delegate unavailable: ${res.reason}`);
|
|
176
|
+
bin = bin ?? res.bin;
|
|
177
|
+
parentPaneId = parentPaneId ?? res.paneId;
|
|
178
|
+
}
|
|
179
|
+
const sessionArgs = opts.session ? ['--session', opts.session] : [];
|
|
180
|
+
const call = (args, timeoutMs = EXEC_GRACE_MS) => exec(bin, [...sessionArgs, ...args], { timeoutMs, env });
|
|
181
|
+
const name = sanitizeHerdrAgentName(opts.name);
|
|
182
|
+
const agentId = opts.agentId ?? `${opts.agentDef.name}-${crypto.randomBytes(3).toString('hex')}`;
|
|
183
|
+
const modelId = opts.modelOverride ?? opts.agentDef.model;
|
|
184
|
+
const startTime = new Date(now());
|
|
185
|
+
const keepPane = readKeepDelegatePanes(env);
|
|
186
|
+
// Task + result files (the prompt never rides the command line).
|
|
187
|
+
const tmpRoot = opts.tmpRoot ?? join(tmpdir(), 'cortex-delegates');
|
|
188
|
+
mkdirSync(tmpRoot, { recursive: true });
|
|
189
|
+
const dir = mkdtempSync(join(tmpRoot, `${name}-`));
|
|
190
|
+
const taskFile = join(dir, 'task.json');
|
|
191
|
+
const resultFile = join(dir, 'result.json');
|
|
192
|
+
const childEnv = {};
|
|
193
|
+
for (const [k, v] of Object.entries(env)) {
|
|
194
|
+
if (typeof v === 'string' && !k.startsWith('HERDR_'))
|
|
195
|
+
childEnv[k] = v;
|
|
196
|
+
}
|
|
197
|
+
Object.assign(childEnv, {
|
|
198
|
+
CORTEX_AGENT_MODE: 'true',
|
|
199
|
+
CORTEX_AGENT_ID: agentId,
|
|
200
|
+
CORTEX_HERDR_AGENT_NAME: name,
|
|
201
|
+
CORTEX_TURN_DEADLINE_MS: String(opts.timeoutMs),
|
|
202
|
+
}, opts.envOverrides ?? {});
|
|
203
|
+
const task = {
|
|
204
|
+
agentId,
|
|
205
|
+
agentDefinition: opts.agentDef,
|
|
206
|
+
taskPrompt: opts.taskPrompt,
|
|
207
|
+
modelId,
|
|
208
|
+
projectPath: opts.cwd,
|
|
209
|
+
timeoutMs: opts.timeoutMs,
|
|
210
|
+
maxTurns: opts.maxTurns ?? 50,
|
|
211
|
+
debug: opts.debug,
|
|
212
|
+
permissionMode: 'auto',
|
|
213
|
+
env: childEnv,
|
|
214
|
+
};
|
|
215
|
+
writeFileSync(taskFile, JSON.stringify(task), { encoding: 'utf-8', mode: 0o600 });
|
|
216
|
+
try {
|
|
217
|
+
chmodSync(taskFile, 0o600);
|
|
218
|
+
}
|
|
219
|
+
catch { /* best effort */ }
|
|
220
|
+
// 1. Sibling pane under the parent, down, no focus (env rides the task file, not argv).
|
|
221
|
+
const split = parseEnvelope(await call(['pane', 'split', parentPaneId, '--direction', 'down', '--no-focus', '--cwd', opts.cwd]), 'pane split');
|
|
222
|
+
if (split.error)
|
|
223
|
+
throw new Error(`herdr pane split failed: ${split.error.message ?? split.error.code}`);
|
|
224
|
+
const paneId = split.result?.pane?.pane_id;
|
|
225
|
+
if (!paneId)
|
|
226
|
+
throw new Error('herdr pane split returned no pane_id');
|
|
227
|
+
try {
|
|
228
|
+
await call(['pane', 'rename', paneId, name]);
|
|
229
|
+
}
|
|
230
|
+
catch { /* cosmetic */ }
|
|
231
|
+
// 2. Run the parent's own agent-mode entry in the pane with an exit sentinel.
|
|
232
|
+
const token = crypto.randomBytes(4).toString('hex');
|
|
233
|
+
const nodeBin = opts.nodeBin ?? process.execPath;
|
|
234
|
+
const agentModule = opts.agentModulePath ?? resolveAgentModulePath();
|
|
235
|
+
const command = `${shellQuote(nodeBin)} ${shellQuote(agentModule)} --task-file ${shellQuote(taskFile)} --result-file ${shellQuote(resultFile)}` +
|
|
236
|
+
`; printf '__CORTEX_DELEGATE_EXIT_${token}_%s__\\n' $?`;
|
|
237
|
+
parseEnvelope(await call(['pane', 'run', paneId, command]), 'pane run');
|
|
238
|
+
// 3. Wait: agent wait slices + result.json + exit sentinel, until the deadline.
|
|
239
|
+
const deadline = now() + opts.timeoutMs + HERDR_DELEGATE_GRACE_MS;
|
|
240
|
+
const exitRe = new RegExp(`__CORTEX_DELEGATE_EXIT_${token}_(\\d+)__`);
|
|
241
|
+
let agentSeen = false;
|
|
242
|
+
let idleSeen = false;
|
|
243
|
+
let exitCode = null;
|
|
244
|
+
let timedOut = false;
|
|
245
|
+
const readPane = async () => {
|
|
246
|
+
const res = await call(['pane', 'read', paneId, '--source', 'recent-unwrapped', '--lines', String(HERDR_TRANSCRIPT_LINES)]);
|
|
247
|
+
if (res.code !== 0)
|
|
248
|
+
parseEnvelope(res, 'pane read');
|
|
249
|
+
return res.stdout;
|
|
250
|
+
};
|
|
251
|
+
for (;;) {
|
|
252
|
+
if (existsSync(resultFile))
|
|
253
|
+
break;
|
|
254
|
+
if (now() >= deadline) {
|
|
255
|
+
timedOut = true;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
const remaining = deadline - now();
|
|
259
|
+
const slice = Math.max(250, Math.min(sliceMs, remaining));
|
|
260
|
+
const waited = parseEnvelope(await call(['agent', 'wait', paneId, '--until', 'idle', '--until', 'done', '--timeout', String(slice)], slice + EXEC_GRACE_MS), 'agent wait');
|
|
261
|
+
if (!waited.error) {
|
|
262
|
+
agentSeen = true;
|
|
263
|
+
idleSeen = true;
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
const code = waited.error.code;
|
|
267
|
+
if (code === 'timeout') {
|
|
268
|
+
agentSeen = true;
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (code === 'agent_not_found') {
|
|
272
|
+
// Not reported yet (starting) or already gone (exited): the exit sentinel disambiguates.
|
|
273
|
+
const m = (await readPane()).match(exitRe);
|
|
274
|
+
if (m) {
|
|
275
|
+
exitCode = Number(m[1]);
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
await sleep(Math.min(slice, 1000));
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
throw new Error(`herdr agent wait failed: ${waited.error.message ?? code}`);
|
|
282
|
+
}
|
|
283
|
+
// Idle seen: give the child a moment to flush result.json and exit.
|
|
284
|
+
if (idleSeen && !existsSync(resultFile)) {
|
|
285
|
+
const settleUntil = now() + HERDR_RESULT_SETTLE_MS;
|
|
286
|
+
while (!existsSync(resultFile) && now() < settleUntil)
|
|
287
|
+
await sleep(SETTLE_POLL_MS);
|
|
288
|
+
}
|
|
289
|
+
if (timedOut) {
|
|
290
|
+
try {
|
|
291
|
+
await call(['pane', 'send-keys', paneId, 'C-c']);
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
warn(`[WARN] herdr delegate ${name}: C-c failed: ${e.message}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (agentSeen) {
|
|
298
|
+
try {
|
|
299
|
+
await call(['agent', 'rename', paneId, name]);
|
|
300
|
+
}
|
|
301
|
+
catch { /* cosmetic */ }
|
|
302
|
+
}
|
|
303
|
+
let transcriptTail = '';
|
|
304
|
+
try {
|
|
305
|
+
transcriptTail = stripSentinelLines(await readPane(), token);
|
|
306
|
+
}
|
|
307
|
+
catch (e) {
|
|
308
|
+
warn(`[WARN] herdr delegate ${name}: pane read failed: ${e.message}`);
|
|
309
|
+
}
|
|
310
|
+
// 4. Assemble the SubAgentResult.
|
|
311
|
+
let result;
|
|
312
|
+
if (existsSync(resultFile)) {
|
|
313
|
+
try {
|
|
314
|
+
result = reviveResult(readFileSync(resultFile, 'utf-8'));
|
|
315
|
+
}
|
|
316
|
+
catch (e) {
|
|
317
|
+
result = errorResult(agentId, opts.agentDef.name, modelId, startTime, now, `result.json unreadable: ${e.message}`, transcriptTail);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
else if (timedOut) {
|
|
321
|
+
result = {
|
|
322
|
+
...errorResult(agentId, opts.agentDef.name, modelId, startTime, now, `delegate did not finish within ${opts.timeoutMs}ms (C-c sent to pane ${paneId})`, transcriptTail),
|
|
323
|
+
status: 'timeout',
|
|
324
|
+
summary: `Agent "${opts.agentDef.name}" timeout in herdr pane ${paneId}; partial transcript attached`,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
result = errorResult(agentId, opts.agentDef.name, modelId, startTime, now, exitCode !== null ? `delegate process exited with code ${exitCode} before writing its result` : 'delegate ended without a result', transcriptTail);
|
|
329
|
+
}
|
|
330
|
+
// 5. Terminal state for the pane: the child's throttled last report can die with its process.
|
|
331
|
+
try {
|
|
332
|
+
await call(['pane', 'report-agent', paneId, '--source', HERDR_SOURCE, '--agent', name, '--state', 'idle']);
|
|
333
|
+
await call(['pane', 'report-metadata', paneId, '--source', HERDR_DISPLAY_SOURCE, '--token', `summary=${sanitizeHerdrSummary(`delegate:${result.status}`)}`]);
|
|
334
|
+
}
|
|
335
|
+
catch { /* cosmetic */ }
|
|
336
|
+
// 6. Pane hygiene: keep by default (operator inspection); close + scrub when asked.
|
|
337
|
+
if (!keepPane) {
|
|
338
|
+
try {
|
|
339
|
+
await call(['pane', 'close', paneId]);
|
|
340
|
+
}
|
|
341
|
+
catch (e) {
|
|
342
|
+
warn(`[WARN] herdr delegate ${name}: pane close failed: ${e.message}`);
|
|
343
|
+
}
|
|
344
|
+
try {
|
|
345
|
+
rmSync(dir, { recursive: true, force: true });
|
|
346
|
+
}
|
|
347
|
+
catch { /* best effort */ }
|
|
348
|
+
}
|
|
349
|
+
return { ...result, runtime: 'herdr', paneId, transcriptTail };
|
|
350
|
+
}
|
|
351
|
+
function errorResult(agentId, agentName, model, startTime, now, message, transcriptTail) {
|
|
352
|
+
const endTime = new Date(now());
|
|
353
|
+
return {
|
|
354
|
+
agentId,
|
|
355
|
+
agentName,
|
|
356
|
+
model,
|
|
357
|
+
startTime,
|
|
358
|
+
endTime,
|
|
359
|
+
durationMs: endTime.getTime() - startTime.getTime(),
|
|
360
|
+
turnCount: 0,
|
|
361
|
+
status: 'error',
|
|
362
|
+
summary: `Agent "${agentName}" error: ${message}`,
|
|
363
|
+
fullResponse: transcriptTail,
|
|
364
|
+
toolsUsed: [],
|
|
365
|
+
filesRead: [],
|
|
366
|
+
filesModified: [],
|
|
367
|
+
cost: { inputTokens: 0, outputTokens: 0, estimatedCost: 0, cacheHits: 0 },
|
|
368
|
+
error: { message, type: 'HerdrDelegateError' },
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=HerdrSubAgentRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerdrSubAgentRunner.js","sourceRoot":"","sources":["../../src/orchestrator/HerdrSubAgentRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -213,6 +213,8 @@ export declare class SubAgentProcessManager implements ISubAgentManager {
|
|
|
213
213
|
*/
|
|
214
214
|
cleanup(): Promise<void>;
|
|
215
215
|
private getSubagentStoreDir;
|
|
216
|
+
/** R147: a delegate that did not run through this manager's IPC (herdr pane) still gets the durable orphan-recovery record. */
|
|
217
|
+
persistExternalResult(toolUseId: string, result: SubAgentResult): void;
|
|
216
218
|
private persistSubAgentResult;
|
|
217
219
|
/**
|
|
218
220
|
* Look up a durably persisted sub-agent result by tool_use_id.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubAgentProcessManager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/SubAgentProcessManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SubAgentProcessManager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/SubAgentProcessManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -634,6 +634,10 @@ export class SubAgentProcessManager {
|
|
|
634
634
|
const root = process.env.PROJECT_ROOT || this.config.projectPath || process.cwd();
|
|
635
635
|
return join(root, sessionDir, `${this.config.parentSessionId}.subagents`);
|
|
636
636
|
}
|
|
637
|
+
/** R147: a delegate that did not run through this manager's IPC (herdr pane) still gets the durable orphan-recovery record. */
|
|
638
|
+
persistExternalResult(toolUseId, result) {
|
|
639
|
+
this.persistSubAgentResult(toolUseId, result);
|
|
640
|
+
}
|
|
637
641
|
persistSubAgentResult(toolUseId, result) {
|
|
638
642
|
try {
|
|
639
643
|
const dir = this.getSubagentStoreDir();
|