@enderfga/claw-orchestrator 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -28
- package/dist/bin/cli.js +107 -1
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/acp-server.d.ts +5 -5
- package/dist/src/acp-server.js +3 -3
- package/dist/src/acp-server.js.map +1 -1
- package/dist/src/autoloop/dispatcher.d.ts +22 -0
- package/dist/src/autoloop/dispatcher.js +71 -13
- package/dist/src/autoloop/dispatcher.js.map +1 -1
- package/dist/src/autoloop/messages.d.ts +10 -0
- package/dist/src/autoloop/messages.js.map +1 -1
- package/dist/src/autoloop/runner.js +6 -0
- package/dist/src/autoloop/runner.js.map +1 -1
- package/dist/src/constants.d.ts +0 -6
- package/dist/src/constants.js +0 -6
- package/dist/src/constants.js.map +1 -1
- package/dist/src/council.d.ts +15 -0
- package/dist/src/council.js +48 -35
- package/dist/src/council.js.map +1 -1
- package/dist/src/dashboard/index.html +191 -6
- package/dist/src/embedded-server.js +132 -9
- package/dist/src/embedded-server.js.map +1 -1
- package/dist/src/fanout.d.ts +30 -1
- package/dist/src/fanout.js +32 -3
- package/dist/src/fanout.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +360 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/kernel/agent-step.d.ts +59 -0
- package/dist/src/kernel/agent-step.js +100 -0
- package/dist/src/kernel/agent-step.js.map +1 -0
- package/dist/src/kernel/conditions.d.ts +11 -0
- package/dist/src/kernel/conditions.js +24 -0
- package/dist/src/kernel/conditions.js.map +1 -0
- package/dist/src/kernel/engine.d.ts +319 -0
- package/dist/src/kernel/engine.js +1047 -0
- package/dist/src/kernel/engine.js.map +1 -0
- package/dist/src/kernel/exec.d.ts +43 -0
- package/dist/src/kernel/exec.js +112 -0
- package/dist/src/kernel/exec.js.map +1 -0
- package/dist/src/kernel/file-lock.d.ts +50 -0
- package/dist/src/kernel/file-lock.js +135 -0
- package/dist/src/kernel/file-lock.js.map +1 -0
- package/dist/src/kernel/nodes/agent.d.ts +4 -0
- package/dist/src/kernel/nodes/agent.js +35 -0
- package/dist/src/kernel/nodes/agent.js.map +1 -0
- package/dist/src/kernel/nodes/autoloop.d.ts +78 -0
- package/dist/src/kernel/nodes/autoloop.js +75 -0
- package/dist/src/kernel/nodes/autoloop.js.map +1 -0
- package/dist/src/kernel/nodes/council.d.ts +12 -0
- package/dist/src/kernel/nodes/council.js +88 -0
- package/dist/src/kernel/nodes/council.js.map +1 -0
- package/dist/src/kernel/nodes/fanout.d.ts +11 -0
- package/dist/src/kernel/nodes/fanout.js +63 -0
- package/dist/src/kernel/nodes/fanout.js.map +1 -0
- package/dist/src/kernel/nodes/human-gate.d.ts +4 -0
- package/dist/src/kernel/nodes/human-gate.js +7 -0
- package/dist/src/kernel/nodes/human-gate.js.map +1 -0
- package/dist/src/kernel/nodes/index.d.ts +12 -0
- package/dist/src/kernel/nodes/index.js +21 -0
- package/dist/src/kernel/nodes/index.js.map +1 -0
- package/dist/src/kernel/nodes/router.d.ts +4 -0
- package/dist/src/kernel/nodes/router.js +12 -0
- package/dist/src/kernel/nodes/router.js.map +1 -0
- package/dist/src/kernel/nodes/subflow.d.ts +13 -0
- package/dist/src/kernel/nodes/subflow.js +38 -0
- package/dist/src/kernel/nodes/subflow.js.map +1 -0
- package/dist/src/kernel/nodes/ultraapp.d.ts +60 -0
- package/dist/src/kernel/nodes/ultraapp.js +62 -0
- package/dist/src/kernel/nodes/ultraapp.js.map +1 -0
- package/dist/src/kernel/nodes/verifier.d.ts +14 -0
- package/dist/src/kernel/nodes/verifier.js +84 -0
- package/dist/src/kernel/nodes/verifier.js.map +1 -0
- package/dist/src/kernel/projections.d.ts +42 -0
- package/dist/src/kernel/projections.js +133 -0
- package/dist/src/kernel/projections.js.map +1 -0
- package/dist/src/kernel/repo.d.ts +13 -0
- package/dist/src/kernel/repo.js +64 -0
- package/dist/src/kernel/repo.js.map +1 -0
- package/dist/src/kernel/secrets.d.ts +25 -0
- package/dist/src/kernel/secrets.js +48 -0
- package/dist/src/kernel/secrets.js.map +1 -0
- package/dist/src/kernel/store.d.ts +225 -0
- package/dist/src/kernel/store.js +838 -0
- package/dist/src/kernel/store.js.map +1 -0
- package/dist/src/kernel/templates/index.d.ts +140 -0
- package/dist/src/kernel/templates/index.js +266 -0
- package/dist/src/kernel/templates/index.js.map +1 -0
- package/dist/src/kernel/types.d.ts +326 -0
- package/dist/src/kernel/types.js +19 -0
- package/dist/src/kernel/types.js.map +1 -0
- package/dist/src/models.d.ts +1 -1
- package/dist/src/models.js +31 -3
- package/dist/src/models.js.map +1 -1
- package/dist/src/persistent-cursor-session.js +6 -1
- package/dist/src/persistent-cursor-session.js.map +1 -1
- package/dist/src/persistent-grok-session.d.ts +40 -0
- package/dist/src/persistent-grok-session.js +197 -0
- package/dist/src/persistent-grok-session.js.map +1 -0
- package/dist/src/run-ledger.d.ts +57 -3
- package/dist/src/run-ledger.js +45 -2
- package/dist/src/run-ledger.js.map +1 -1
- package/dist/src/session-manager.d.ts +176 -129
- package/dist/src/session-manager.js +657 -603
- package/dist/src/session-manager.js.map +1 -1
- package/dist/src/types.d.ts +37 -4
- package/dist/src/types.js +15 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/ultraapp/build.d.ts +117 -3
- package/dist/src/ultraapp/build.js +319 -3
- package/dist/src/ultraapp/build.js.map +1 -1
- package/dist/src/ultraapp/contract.d.ts +52 -0
- package/dist/src/ultraapp/contract.js +83 -0
- package/dist/src/ultraapp/contract.js.map +1 -0
- package/dist/src/ultraapp/conventions.js +9 -2
- package/dist/src/ultraapp/conventions.js.map +1 -1
- package/dist/src/ultraapp/fix-on-failure.d.ts +21 -2
- package/dist/src/ultraapp/fix-on-failure.js +46 -62
- package/dist/src/ultraapp/fix-on-failure.js.map +1 -1
- package/dist/src/ultraapp/manager.d.ts +107 -2
- package/dist/src/ultraapp/manager.js +305 -86
- package/dist/src/ultraapp/manager.js.map +1 -1
- package/dist/src/verify/baseline.d.ts +73 -0
- package/dist/src/verify/baseline.js +186 -0
- package/dist/src/verify/baseline.js.map +1 -0
- package/dist/src/verify/contract.d.ts +116 -0
- package/dist/src/verify/contract.js +142 -0
- package/dist/src/verify/contract.js.map +1 -0
- package/dist/src/verify/evidence.d.ts +61 -0
- package/dist/src/verify/evidence.js +133 -0
- package/dist/src/verify/evidence.js.map +1 -0
- package/dist/src/verify/runner.d.ts +63 -0
- package/dist/src/verify/runner.js +317 -0
- package/dist/src/verify/runner.js.map +1 -0
- package/openclaw.plugin.json +8 -0
- package/package.json +2 -2
- package/skills/SKILL.md +121 -80
- package/skills/references/acp.md +18 -18
- package/skills/references/autoloop.md +148 -72
- package/skills/references/claude-cli-tracking.md +4 -4
- package/skills/references/cli.md +103 -60
- package/skills/references/council.md +109 -37
- package/skills/references/dashboard.md +34 -6
- package/skills/references/getting-started.md +14 -14
- package/skills/references/inbox.md +4 -4
- package/skills/references/mcp.md +39 -34
- package/skills/references/multi-engine.md +109 -51
- package/skills/references/observability.md +88 -27
- package/skills/references/openai-compat.md +40 -40
- package/skills/references/sessions.md +44 -26
- package/skills/references/tools.md +402 -309
- package/skills/references/ultra.md +45 -45
- package/skills/references/ultraapp.md +126 -50
- package/skills/references/verification.md +187 -0
- package/skills/references/workflow.md +362 -0
- package/dist/src/ultraapp/fix-on-failure-session.d.ts +0 -23
- package/dist/src/ultraapp/fix-on-failure-session.js +0 -51
- package/dist/src/ultraapp/fix-on-failure-session.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/kernel/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one child-process wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Before this module the repo had four, with three different failure contracts:
|
|
5
|
+
* `council.ts` `spawnAsync` rejects on a non-zero exit (so every caller wraps it
|
|
6
|
+
* in `.catch(() => ({stdout:'',stderr:''}))` and loses the exit code),
|
|
7
|
+
* `autoloop/dispatcher.ts` `runGit` returns `{code,out,err}`, and ultraapp had
|
|
8
|
+
* both a `spawnSync` and its own `realShell`. This takes the non-throwing shape
|
|
9
|
+
* — a non-zero exit is data, not an exception — and adds the two things none of
|
|
10
|
+
* them had: a timeout that actually kills, and a cap on captured output.
|
|
11
|
+
*
|
|
12
|
+
* Kill discipline follows the same rule as the rest of our recovery paths: a
|
|
13
|
+
* wedged process does not respond to SIGTERM, and killing only the direct child
|
|
14
|
+
* orphans its grandchildren (an `npm test` that spawned a watcher). So the child
|
|
15
|
+
* gets its own process group via `detached` and the timeout kills the group with
|
|
16
|
+
* SIGKILL.
|
|
17
|
+
*/
|
|
18
|
+
export interface ExecResult {
|
|
19
|
+
code: number | null;
|
|
20
|
+
out: string;
|
|
21
|
+
err: string;
|
|
22
|
+
/** True when the timeout fired. `code` is then the signal-terminated null. */
|
|
23
|
+
timedOut: boolean;
|
|
24
|
+
durationMs: number;
|
|
25
|
+
}
|
|
26
|
+
export interface ExecOptions {
|
|
27
|
+
cwd?: string;
|
|
28
|
+
timeoutMs?: number;
|
|
29
|
+
env?: NodeJS.ProcessEnv;
|
|
30
|
+
/** Fed to the child's stdin and then closed. */
|
|
31
|
+
input?: string;
|
|
32
|
+
/** Per-stream capture cap. Older bytes are dropped, keeping the tail. */
|
|
33
|
+
maxCaptureBytes?: number;
|
|
34
|
+
}
|
|
35
|
+
/** Only the tail of output is ever used, so a runaway printer cannot OOM us. */
|
|
36
|
+
export declare const MAX_CAPTURE_BYTES: number;
|
|
37
|
+
export declare const DEFAULT_EXEC_TIMEOUT_MS: number;
|
|
38
|
+
/** Run a command. Never throws: a spawn failure comes back as `code: null` with the message in `err`. */
|
|
39
|
+
export declare function exec(cmd: string, args?: string[], opts?: ExecOptions): Promise<ExecResult>;
|
|
40
|
+
/** Convenience for the common "did it exit 0" question. */
|
|
41
|
+
export declare function execOk(cmd: string, args?: string[], opts?: ExecOptions): Promise<boolean>;
|
|
42
|
+
/** Last N lines of a string — the shape every failure tail wants. */
|
|
43
|
+
export declare function lastLines(s: string, n: number): string;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one child-process wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Before this module the repo had four, with three different failure contracts:
|
|
5
|
+
* `council.ts` `spawnAsync` rejects on a non-zero exit (so every caller wraps it
|
|
6
|
+
* in `.catch(() => ({stdout:'',stderr:''}))` and loses the exit code),
|
|
7
|
+
* `autoloop/dispatcher.ts` `runGit` returns `{code,out,err}`, and ultraapp had
|
|
8
|
+
* both a `spawnSync` and its own `realShell`. This takes the non-throwing shape
|
|
9
|
+
* — a non-zero exit is data, not an exception — and adds the two things none of
|
|
10
|
+
* them had: a timeout that actually kills, and a cap on captured output.
|
|
11
|
+
*
|
|
12
|
+
* Kill discipline follows the same rule as the rest of our recovery paths: a
|
|
13
|
+
* wedged process does not respond to SIGTERM, and killing only the direct child
|
|
14
|
+
* orphans its grandchildren (an `npm test` that spawned a watcher). So the child
|
|
15
|
+
* gets its own process group via `detached` and the timeout kills the group with
|
|
16
|
+
* SIGKILL.
|
|
17
|
+
*/
|
|
18
|
+
import { spawn } from 'node:child_process';
|
|
19
|
+
/** Only the tail of output is ever used, so a runaway printer cannot OOM us. */
|
|
20
|
+
export const MAX_CAPTURE_BYTES = 512 * 1024;
|
|
21
|
+
export const DEFAULT_EXEC_TIMEOUT_MS = 10 * 60_000;
|
|
22
|
+
function appendCapped(buf, chunk, cap) {
|
|
23
|
+
const next = buf + chunk;
|
|
24
|
+
return next.length > cap ? next.slice(next.length - cap) : next;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Kill the child's whole process group, falling back to the bare pid when the
|
|
28
|
+
* platform refused to give us a group (Windows, or a spawn that never started).
|
|
29
|
+
*/
|
|
30
|
+
function killTree(pid) {
|
|
31
|
+
if (!pid)
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
process.kill(-pid, 'SIGKILL');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// No process group — fall through to the direct kill.
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
process.kill(pid, 'SIGKILL');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Already gone.
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Run a command. Never throws: a spawn failure comes back as `code: null` with the message in `err`. */
|
|
48
|
+
export function exec(cmd, args = [], opts = {}) {
|
|
49
|
+
const cap = opts.maxCaptureBytes ?? MAX_CAPTURE_BYTES;
|
|
50
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_EXEC_TIMEOUT_MS;
|
|
51
|
+
const startedAt = Date.now();
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
let out = '';
|
|
54
|
+
let err = '';
|
|
55
|
+
let timedOut = false;
|
|
56
|
+
let settled = false;
|
|
57
|
+
let timer;
|
|
58
|
+
const finish = (code) => {
|
|
59
|
+
if (settled)
|
|
60
|
+
return;
|
|
61
|
+
settled = true;
|
|
62
|
+
if (timer)
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
resolve({ code, out, err, timedOut, durationMs: Date.now() - startedAt });
|
|
65
|
+
};
|
|
66
|
+
let child;
|
|
67
|
+
try {
|
|
68
|
+
child = spawn(cmd, args, {
|
|
69
|
+
cwd: opts.cwd,
|
|
70
|
+
env: opts.env ?? process.env,
|
|
71
|
+
stdio: [opts.input === undefined ? 'ignore' : 'pipe', 'pipe', 'pipe'],
|
|
72
|
+
// Own process group, so the timeout can take the whole tree down.
|
|
73
|
+
detached: process.platform !== 'win32',
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
err = e.message;
|
|
78
|
+
finish(null);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (timeoutMs > 0) {
|
|
82
|
+
timer = setTimeout(() => {
|
|
83
|
+
timedOut = true;
|
|
84
|
+
err = appendCapped(err, `\n[exec] timed out after ${timeoutMs}ms — killed\n`, cap);
|
|
85
|
+
killTree(child.pid);
|
|
86
|
+
}, timeoutMs);
|
|
87
|
+
if (typeof timer.unref === 'function')
|
|
88
|
+
timer.unref();
|
|
89
|
+
}
|
|
90
|
+
child.stdout?.on('data', (d) => (out = appendCapped(out, d.toString(), cap)));
|
|
91
|
+
child.stderr?.on('data', (d) => (err = appendCapped(err, d.toString(), cap)));
|
|
92
|
+
child.on('error', (e) => {
|
|
93
|
+
err = appendCapped(err, e.message, cap);
|
|
94
|
+
finish(null);
|
|
95
|
+
});
|
|
96
|
+
child.on('close', (code) => finish(code));
|
|
97
|
+
if (opts.input !== undefined && child.stdin) {
|
|
98
|
+
child.stdin.end(opts.input);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/** Convenience for the common "did it exit 0" question. */
|
|
103
|
+
export async function execOk(cmd, args = [], opts = {}) {
|
|
104
|
+
const r = await exec(cmd, args, opts);
|
|
105
|
+
return r.code === 0;
|
|
106
|
+
}
|
|
107
|
+
/** Last N lines of a string — the shape every failure tail wants. */
|
|
108
|
+
export function lastLines(s, n) {
|
|
109
|
+
const lines = s.split('\n');
|
|
110
|
+
return lines.length <= n ? s : lines.slice(-n).join('\n');
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/kernel/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A file lock with a bounded wait.
|
|
3
|
+
*
|
|
4
|
+
* Two callers need exactly this — the run store and the ultraapp build queue —
|
|
5
|
+
* and both had their own copy, which is how they also had the same bug twice:
|
|
6
|
+
* a lock that was merely *busy* was reported the same way as a lock we had lost
|
|
7
|
+
* the right to. Those are different facts. Contention is transient and the
|
|
8
|
+
* correct response is to wait; losing ownership is permanent and the correct
|
|
9
|
+
* response is to stop. Collapsing them into one boolean meant a run that hit a
|
|
10
|
+
* millisecond of contention stopped forever while still holding its lease, so
|
|
11
|
+
* nothing else could take it over either.
|
|
12
|
+
*
|
|
13
|
+
* So this returns a result, not a boolean, and it waits before giving up. The
|
|
14
|
+
* critical sections it guards are a few small writes, so real contention is
|
|
15
|
+
* measured in microseconds; the default wait is three orders of magnitude more
|
|
16
|
+
* than that, and reaching the end of it means something is genuinely wrong
|
|
17
|
+
* rather than merely busy.
|
|
18
|
+
*/
|
|
19
|
+
export type LockResult<T> = {
|
|
20
|
+
ok: true;
|
|
21
|
+
value: T;
|
|
22
|
+
} | {
|
|
23
|
+
ok: false;
|
|
24
|
+
reason: 'contended';
|
|
25
|
+
error: string;
|
|
26
|
+
};
|
|
27
|
+
export interface FileLockOptions {
|
|
28
|
+
/** A lock file older than this belongs to a crashed holder and is broken. */
|
|
29
|
+
staleMs?: number;
|
|
30
|
+
/** How long to keep trying before reporting contention. */
|
|
31
|
+
waitMs?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Create the lock file's directory if it is missing.
|
|
34
|
+
*
|
|
35
|
+
* Off by default, and that default matters: locking inside a directory that
|
|
36
|
+
* has been deleted must not recreate it. A run whose teardown raced its own
|
|
37
|
+
* last write came back as an empty directory, which then made the run id
|
|
38
|
+
* permanently unusable — the id looked taken by a run that did not exist.
|
|
39
|
+
*/
|
|
40
|
+
createParent?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare const DEFAULT_LOCK_STALE_MS = 60000;
|
|
43
|
+
export declare const DEFAULT_LOCK_WAIT_MS = 250;
|
|
44
|
+
/**
|
|
45
|
+
* Run `fn` while holding an exclusive lock file, waiting briefly for it.
|
|
46
|
+
*
|
|
47
|
+
* `ok: false` means only "could not enter the critical section" — never "you no
|
|
48
|
+
* longer own this". Callers must not treat it as a loss.
|
|
49
|
+
*/
|
|
50
|
+
export declare function withFileLock<T>(lockPath: string, fn: () => T, opts?: FileLockOptions): LockResult<T>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A file lock with a bounded wait.
|
|
3
|
+
*
|
|
4
|
+
* Two callers need exactly this — the run store and the ultraapp build queue —
|
|
5
|
+
* and both had their own copy, which is how they also had the same bug twice:
|
|
6
|
+
* a lock that was merely *busy* was reported the same way as a lock we had lost
|
|
7
|
+
* the right to. Those are different facts. Contention is transient and the
|
|
8
|
+
* correct response is to wait; losing ownership is permanent and the correct
|
|
9
|
+
* response is to stop. Collapsing them into one boolean meant a run that hit a
|
|
10
|
+
* millisecond of contention stopped forever while still holding its lease, so
|
|
11
|
+
* nothing else could take it over either.
|
|
12
|
+
*
|
|
13
|
+
* So this returns a result, not a boolean, and it waits before giving up. The
|
|
14
|
+
* critical sections it guards are a few small writes, so real contention is
|
|
15
|
+
* measured in microseconds; the default wait is three orders of magnitude more
|
|
16
|
+
* than that, and reaching the end of it means something is genuinely wrong
|
|
17
|
+
* rather than merely busy.
|
|
18
|
+
*/
|
|
19
|
+
import fs from 'node:fs';
|
|
20
|
+
import path from 'node:path';
|
|
21
|
+
export const DEFAULT_LOCK_STALE_MS = 60_000;
|
|
22
|
+
export const DEFAULT_LOCK_WAIT_MS = 250;
|
|
23
|
+
/**
|
|
24
|
+
* Block this thread for `ms`.
|
|
25
|
+
*
|
|
26
|
+
* Deliberately synchronous: every caller of `withFileLock` is a synchronous
|
|
27
|
+
* write path (a checkpoint, a queue persist) reached from callbacks that cannot
|
|
28
|
+
* be made async without changing the node-context API. The waits are single
|
|
29
|
+
* -digit milliseconds and only happen under real contention.
|
|
30
|
+
*/
|
|
31
|
+
function sleepSync(ms) {
|
|
32
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Run `fn` while holding an exclusive lock file, waiting briefly for it.
|
|
36
|
+
*
|
|
37
|
+
* `ok: false` means only "could not enter the critical section" — never "you no
|
|
38
|
+
* longer own this". Callers must not treat it as a loss.
|
|
39
|
+
*/
|
|
40
|
+
export function withFileLock(lockPath, fn, opts = {}) {
|
|
41
|
+
const staleMs = opts.staleMs ?? DEFAULT_LOCK_STALE_MS;
|
|
42
|
+
const waitMs = opts.waitMs ?? DEFAULT_LOCK_WAIT_MS;
|
|
43
|
+
const deadline = Date.now() + waitMs;
|
|
44
|
+
let fd;
|
|
45
|
+
/**
|
|
46
|
+
* Which file we created, so releasing can never remove someone else's.
|
|
47
|
+
*
|
|
48
|
+
* Unlinking by path is not release, it is "delete whatever is called that" —
|
|
49
|
+
* and the two stop being the same file the moment anything else can break a
|
|
50
|
+
* lock.
|
|
51
|
+
*/
|
|
52
|
+
let ino;
|
|
53
|
+
let lastError = 'lock is held by another process';
|
|
54
|
+
for (;;) {
|
|
55
|
+
// Checked once per iteration, before anything can `continue` past it. Two
|
|
56
|
+
// of the retry paths below used to skip it, which made this loop unbounded
|
|
57
|
+
// in exactly the case it exists for: another process churning the lock file
|
|
58
|
+
// meant the vanished-lock branch retried forever, with no deadline and no
|
|
59
|
+
// yield. On a two-core CI runner that pegged a core and starved the test
|
|
60
|
+
// runner for fourteen minutes — a busy-wait that a comment described as
|
|
61
|
+
// "waits before giving up".
|
|
62
|
+
if (Date.now() >= deadline)
|
|
63
|
+
return { ok: false, reason: 'contended', error: lastError };
|
|
64
|
+
try {
|
|
65
|
+
if (opts.createParent)
|
|
66
|
+
fs.mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
67
|
+
fd = fs.openSync(lockPath, 'wx');
|
|
68
|
+
ino = fs.fstatSync(fd).ino;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const code = err.code;
|
|
73
|
+
if (code !== 'EEXIST')
|
|
74
|
+
return { ok: false, reason: 'contended', error: err.message };
|
|
75
|
+
let age;
|
|
76
|
+
try {
|
|
77
|
+
age = Date.now() - fs.statSync(lockPath).mtimeMs;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// The lock vanished between our EEXIST and this stat: its holder
|
|
81
|
+
// released it. Retry the create — whoever gets there first wins.
|
|
82
|
+
//
|
|
83
|
+
// Treating this as "stale, therefore delete it" is what broke mutual
|
|
84
|
+
// exclusion. By the time we looked, another caller had already created
|
|
85
|
+
// *their* lock; deleting it and creating ours put two callers inside the
|
|
86
|
+
// section at once. That is not a theoretical hazard — under two
|
|
87
|
+
// processes committing in a loop it happened several times a second, and
|
|
88
|
+
// one of them recursively removing its staging directory would empty the
|
|
89
|
+
// transaction directory the other had just published, wedging the run.
|
|
90
|
+
lastError = 'lock was being released and retaken';
|
|
91
|
+
sleepSync(1);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (age >= staleMs) {
|
|
95
|
+
// Debris from a holder that died inside the section. Broken by an atomic
|
|
96
|
+
// rename rather than an unlink, so two waiters deciding the same thing
|
|
97
|
+
// at the same moment cannot both delete-then-create: only one rename can
|
|
98
|
+
// succeed, and the O_EXCL create still decides the winner either way.
|
|
99
|
+
try {
|
|
100
|
+
fs.renameSync(lockPath, `${lockPath}.stale.${process.pid}.${Date.now().toString(36)}`);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Someone else got there first; just retry the create.
|
|
104
|
+
}
|
|
105
|
+
lastError = `broke a lock abandoned for ${Math.round(age)}ms`;
|
|
106
|
+
sleepSync(1);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
lastError = `lock held by another process for ${Math.round(age)}ms`;
|
|
110
|
+
sleepSync(5);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
return { ok: true, value: fn() };
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
try {
|
|
118
|
+
fs.closeSync(fd);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Already closed; the unlink below is what matters.
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
// Only if it is still the file we created. If a stale-breaker moved ours
|
|
125
|
+
// aside and another caller has since made its own, removing "the lock" by
|
|
126
|
+
// name would remove theirs while they are still inside it.
|
|
127
|
+
if (fs.statSync(lockPath).ino === ino)
|
|
128
|
+
fs.rmSync(lockPath, { force: true });
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Already gone.
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=file-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../../src/kernel/file-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** `agent` node — one session, one turn, through the shared agent step. */
|
|
2
|
+
import type { NodeContext, NodeResult } from '../engine.js';
|
|
3
|
+
import type { NodeSpec } from '../types.js';
|
|
4
|
+
export declare function executeAgentNode(node: NodeSpec, ctx: NodeContext): Promise<NodeResult>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** `agent` node — one session, one turn, through the shared agent step. */
|
|
2
|
+
import { runAgentStep } from '../agent-step.js';
|
|
3
|
+
export async function executeAgentNode(node, ctx) {
|
|
4
|
+
const spec = node;
|
|
5
|
+
if (!ctx.manager)
|
|
6
|
+
return { ok: false, error: 'agent node requires a session manager' };
|
|
7
|
+
// Steering text is prepended, not appended: an instruction that arrives while
|
|
8
|
+
// the previous node ran is a correction, and corrections belong before the task.
|
|
9
|
+
const steer = ctx.takeSteer();
|
|
10
|
+
const prompt = steer.length > 0 ? `${steer.join('\n\n')}\n\n---\n\n${spec.prompt}` : spec.prompt;
|
|
11
|
+
const result = await runAgentStep({
|
|
12
|
+
manager: ctx.manager,
|
|
13
|
+
// Attempt-scoped unless the author pinned a name deliberately: an abandoned
|
|
14
|
+
// attempt is still alive and will tear down whatever session it named.
|
|
15
|
+
sessionName: spec.sessionName || `${ctx.runId}-${spec.id}-a${ctx.attempt}`,
|
|
16
|
+
prompt,
|
|
17
|
+
parentRunId: ctx.runId,
|
|
18
|
+
timeoutMs: spec.timeoutMs,
|
|
19
|
+
logger: ctx.logger,
|
|
20
|
+
config: {
|
|
21
|
+
cwd: spec.cwd || ctx.cwd,
|
|
22
|
+
engine: spec.engine,
|
|
23
|
+
model: spec.model,
|
|
24
|
+
effort: spec.effort,
|
|
25
|
+
permissionMode: spec.permissionMode ?? 'bypassPermissions',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
ok: result.ok,
|
|
30
|
+
output: result.output,
|
|
31
|
+
error: result.error,
|
|
32
|
+
costUsd: result.costUsd,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/kernel/nodes/agent.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAG3E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAc,EAAE,GAAgB;IACrE,MAAM,IAAI,GAAG,IAAiB,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;IAEvF,8EAA8E;IAC9E,iFAAiF;IACjF,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAEjG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,4EAA4E;QAC5E,uEAAuE;QACvE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE;QAC1E,MAAM;QACN,WAAW,EAAE,GAAG,CAAC,KAAK;QACtB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE;YACN,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAe;YAC5B,cAAc,EAAG,IAAI,CAAC,cAAwB,IAAI,mBAAmB;SACtE;KACF,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `autoloop` node — a long-lived Planner / Coder / Reviewer loop.
|
|
3
|
+
*
|
|
4
|
+
* Unlike every other node kind this one settles when the loop terminates, not
|
|
5
|
+
* when a turn returns: the user chats with the Planner for as long as the work
|
|
6
|
+
* takes. That is precisely why it belongs here rather than in a private map —
|
|
7
|
+
* the run it lives in is the thing that has to survive a restart, be listable
|
|
8
|
+
* from another process, and be cancellable by one owner.
|
|
9
|
+
*
|
|
10
|
+
* The engine itself is built by SessionManager (it needs sessions, prompts and
|
|
11
|
+
* push channels), so SessionManager registers this executor with a builder
|
|
12
|
+
* closed over itself. The node spec carries only JSON, because it is
|
|
13
|
+
* checkpointed with the run.
|
|
14
|
+
*/
|
|
15
|
+
import type { NodeContext, NodeResult } from '../engine.js';
|
|
16
|
+
import type { NodeSpec, RunRecord } from '../types.js';
|
|
17
|
+
import type { AutoloopState } from '../../autoloop/types.js';
|
|
18
|
+
/** Whatever SessionManager hands back from booting the loop. */
|
|
19
|
+
export interface AutoloopHandle {
|
|
20
|
+
runner: {
|
|
21
|
+
state: AutoloopState;
|
|
22
|
+
stop(): void;
|
|
23
|
+
};
|
|
24
|
+
dispatcher: {
|
|
25
|
+
sessionNames: {
|
|
26
|
+
planner: string;
|
|
27
|
+
};
|
|
28
|
+
shutdown(reason: string, opts?: {
|
|
29
|
+
purge?: boolean;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
};
|
|
32
|
+
ledgerDir: string;
|
|
33
|
+
}
|
|
34
|
+
export interface AutoloopNodeDeps {
|
|
35
|
+
/** `secrets` carries what the spec deliberately does not — custom-engine configs. */
|
|
36
|
+
boot(config: Record<string, unknown>, secrets: Record<string, unknown>): Promise<AutoloopHandle>;
|
|
37
|
+
/**
|
|
38
|
+
* Resolve/reject the deferred the caller is waiting on.
|
|
39
|
+
*
|
|
40
|
+
* Keyed by the start's tag, not the run id: a failed start frees its run id
|
|
41
|
+
* for a retry, and keying on the id let a dying start settle — or clear — the
|
|
42
|
+
* retry's deferred instead of its own.
|
|
43
|
+
*/
|
|
44
|
+
ready(key: string, value: {
|
|
45
|
+
plannerSession: string;
|
|
46
|
+
state: AutoloopState;
|
|
47
|
+
} | Error): void;
|
|
48
|
+
/** Wait until the loop reaches a terminal status. */
|
|
49
|
+
waitForExit(handle: AutoloopHandle, signal: {
|
|
50
|
+
aborted: boolean;
|
|
51
|
+
}): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Hand back a way to refresh the checkpoint mid-run. The loop's role
|
|
54
|
+
* selection changes when `spawn_subagents` picks engines, and that has to
|
|
55
|
+
* reach the record — it used to be written to the registry file.
|
|
56
|
+
*/
|
|
57
|
+
registerPublisher(runId: string, publish: () => void): void;
|
|
58
|
+
unregisterPublisher(runId: string): void;
|
|
59
|
+
/** Extra payload to publish alongside the state (currently the role selection). */
|
|
60
|
+
extra(runId: string): Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
/** The payload `autoloopStateFromRecord` reads back. */
|
|
63
|
+
export interface AutoloopNodeData {
|
|
64
|
+
state: AutoloopState;
|
|
65
|
+
plannerSession: string;
|
|
66
|
+
/** Engines/models actually in use, as chosen by `spawn_subagents`. */
|
|
67
|
+
roleSelection?: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
export declare function makeAutoloopExecutor(deps: AutoloopNodeDeps): (node: NodeSpec, ctx: NodeContext) => Promise<NodeResult>;
|
|
70
|
+
/**
|
|
71
|
+
* Rebuild an `AutoloopState` for a run that is not live in this process.
|
|
72
|
+
*
|
|
73
|
+
* The registry fallback this replaces returned an all-zero stub with
|
|
74
|
+
* `status_reason: 'reconstructed from registry — not in current process memory'`
|
|
75
|
+
* — iter 0, no metrics, no error history — because the registry only ever held
|
|
76
|
+
* identity, never state. The record holds the last state the loop published.
|
|
77
|
+
*/
|
|
78
|
+
export declare function autoloopStateFromRecord(record: RunRecord): AutoloopState | undefined;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `autoloop` node — a long-lived Planner / Coder / Reviewer loop.
|
|
3
|
+
*
|
|
4
|
+
* Unlike every other node kind this one settles when the loop terminates, not
|
|
5
|
+
* when a turn returns: the user chats with the Planner for as long as the work
|
|
6
|
+
* takes. That is precisely why it belongs here rather than in a private map —
|
|
7
|
+
* the run it lives in is the thing that has to survive a restart, be listable
|
|
8
|
+
* from another process, and be cancellable by one owner.
|
|
9
|
+
*
|
|
10
|
+
* The engine itself is built by SessionManager (it needs sessions, prompts and
|
|
11
|
+
* push channels), so SessionManager registers this executor with a builder
|
|
12
|
+
* closed over itself. The node spec carries only JSON, because it is
|
|
13
|
+
* checkpointed with the run.
|
|
14
|
+
*/
|
|
15
|
+
export function makeAutoloopExecutor(deps) {
|
|
16
|
+
return async function executeAutoloopNode(node, ctx) {
|
|
17
|
+
const spec = node;
|
|
18
|
+
let handle;
|
|
19
|
+
try {
|
|
20
|
+
handle = await deps.boot(spec.config, ctx.secrets);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
deps.ready(ctx.tag ?? ctx.runId, err);
|
|
24
|
+
return { ok: false, error: err.message };
|
|
25
|
+
}
|
|
26
|
+
ctx.setHandle(handle);
|
|
27
|
+
const publish = () => ctx.publish({
|
|
28
|
+
state: handle.runner.state,
|
|
29
|
+
plannerSession: handle.dispatcher.sessionNames.planner,
|
|
30
|
+
...deps.extra(ctx.runId),
|
|
31
|
+
});
|
|
32
|
+
deps.registerPublisher(ctx.runId, publish);
|
|
33
|
+
publish();
|
|
34
|
+
deps.ready(ctx.tag ?? ctx.runId, {
|
|
35
|
+
plannerSession: handle.dispatcher.sessionNames.planner,
|
|
36
|
+
state: handle.runner.state,
|
|
37
|
+
});
|
|
38
|
+
try {
|
|
39
|
+
await deps.waitForExit(handle, ctx.signal);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
deps.unregisterPublisher(ctx.runId);
|
|
43
|
+
}
|
|
44
|
+
publish();
|
|
45
|
+
const status = handle.runner.state.status;
|
|
46
|
+
return {
|
|
47
|
+
ok: status !== 'crashed',
|
|
48
|
+
output: `autoloop ${status} at iter ${handle.runner.state.iter}`,
|
|
49
|
+
error: status === 'crashed' ? (handle.runner.state.status_reason ?? 'autoloop crashed') : undefined,
|
|
50
|
+
data: {
|
|
51
|
+
state: handle.runner.state,
|
|
52
|
+
plannerSession: handle.dispatcher.sessionNames.planner,
|
|
53
|
+
...deps.extra(ctx.runId),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Rebuild an `AutoloopState` for a run that is not live in this process.
|
|
60
|
+
*
|
|
61
|
+
* The registry fallback this replaces returned an all-zero stub with
|
|
62
|
+
* `status_reason: 'reconstructed from registry — not in current process memory'`
|
|
63
|
+
* — iter 0, no metrics, no error history — because the registry only ever held
|
|
64
|
+
* identity, never state. The record holds the last state the loop published.
|
|
65
|
+
*/
|
|
66
|
+
export function autoloopStateFromRecord(record) {
|
|
67
|
+
const data = record.nodes.main?.data;
|
|
68
|
+
if (!data?.state)
|
|
69
|
+
return undefined;
|
|
70
|
+
const terminal = record.state === 'completed' || record.state === 'failed' || record.state === 'cancelled';
|
|
71
|
+
return terminal && data.state.status !== 'terminated' && data.state.status !== 'crashed'
|
|
72
|
+
? { ...data.state, status: 'terminated', status_reason: data.state.status_reason ?? `run ${record.state}` }
|
|
73
|
+
: data.state;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=autoloop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoloop.js","sourceRoot":"","sources":["../../../../src/kernel/nodes/autoloop.ts"],"names":[],"mappings":"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"}
|