@polderlabs/bizar-omp 0.8.0 → 0.9.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 +287 -305
- package/agents/bizar-architect.md +1 -1
- package/agents/bizar-implementer.md +12 -2
- package/agents/bizar-planner.md +1 -1
- package/agents/bizar-researcher.md +1 -1
- package/agents/bizar-reviewer.md +7 -1
- package/agents/bizar-security-reviewer.md +1 -1
- package/agents/bizar-verifier.md +4 -0
- package/dist/cli/agents-ink.d.ts +12 -0
- package/dist/cli/agents-ink.d.ts.map +1 -1
- package/dist/cli/agents-ink.js +22 -7
- package/dist/cli/agents-ink.js.map +1 -1
- package/dist/cli/agents.d.ts.map +1 -1
- package/dist/cli/agents.js +6 -2
- package/dist/cli/agents.js.map +1 -1
- package/dist/cli/doctor.d.ts +4 -4
- package/dist/cli/install.d.ts +1 -7
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +75 -81
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/main.js +5 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mobile-claim.d.ts.map +1 -1
- package/dist/cli/mobile-claim.js +26 -18
- package/dist/cli/mobile-claim.js.map +1 -1
- package/dist/cli/omb-daemon.d.ts.map +1 -1
- package/dist/cli/omb-daemon.js +43 -11
- package/dist/cli/omb-daemon.js.map +1 -1
- package/dist/cli/omb-mobile.d.ts.map +1 -1
- package/dist/cli/omb-mobile.js +9 -3
- package/dist/cli/omb-mobile.js.map +1 -1
- package/dist/cli/omb-runtime.d.ts.map +1 -1
- package/dist/cli/omb-runtime.js +2 -0
- package/dist/cli/omb-runtime.js.map +1 -1
- package/dist/cli/omb-sessions.js +18 -7
- package/dist/cli/omb-sessions.js.map +1 -1
- package/dist/cli/omb-update.d.ts +1 -1
- package/dist/cli/omb-update.d.ts.map +1 -1
- package/dist/cli/omb-update.js +7 -36
- package/dist/cli/omb-update.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +2 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/update-ink.d.ts.map +1 -1
- package/dist/cli/update-ink.js +8 -23
- package/dist/cli/update-ink.js.map +1 -1
- package/dist/core/acceptance.d.ts +20 -1
- package/dist/core/acceptance.d.ts.map +1 -1
- package/dist/core/acceptance.js +50 -2
- package/dist/core/acceptance.js.map +1 -1
- package/dist/core/policies.d.ts +11 -0
- package/dist/core/policies.d.ts.map +1 -1
- package/dist/core/policies.js +41 -10
- package/dist/core/policies.js.map +1 -1
- package/dist/core/transitions.d.ts.map +1 -1
- package/dist/core/transitions.js +4 -3
- package/dist/core/transitions.js.map +1 -1
- package/dist/core/types.d.ts +64 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/extension.d.ts +4 -0
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +420 -78
- package/dist/extension.js.map +1 -1
- package/dist/omp/compatibility.d.ts +15 -5
- package/dist/omp/compatibility.d.ts.map +1 -1
- package/dist/omp/compatibility.js +12 -2
- package/dist/omp/compatibility.js.map +1 -1
- package/dist/omp/daemon-service.d.ts.map +1 -1
- package/dist/omp/daemon-service.js +151 -21
- package/dist/omp/daemon-service.js.map +1 -1
- package/dist/omp/daemon.d.ts +18 -4
- package/dist/omp/daemon.d.ts.map +1 -1
- package/dist/omp/daemon.js +209 -76
- package/dist/omp/daemon.js.map +1 -1
- package/dist/omp/dispatch-lifecycle.d.ts +61 -0
- package/dist/omp/dispatch-lifecycle.d.ts.map +1 -0
- package/dist/omp/dispatch-lifecycle.js +101 -0
- package/dist/omp/dispatch-lifecycle.js.map +1 -0
- package/dist/omp/model-role-assignment.d.ts +5 -0
- package/dist/omp/model-role-assignment.d.ts.map +1 -1
- package/dist/omp/model-role-assignment.js +5 -0
- package/dist/omp/model-role-assignment.js.map +1 -1
- package/dist/omp/model-roles.d.ts +8 -0
- package/dist/omp/model-roles.d.ts.map +1 -1
- package/dist/omp/model-roles.js +10 -0
- package/dist/omp/model-roles.js.map +1 -1
- package/dist/omp/omb-sessions.d.ts +8 -1
- package/dist/omp/omb-sessions.d.ts.map +1 -1
- package/dist/omp/omb-sessions.js +40 -23
- package/dist/omp/omb-sessions.js.map +1 -1
- package/dist/omp/omb-settings.d.ts +5 -1
- package/dist/omp/omb-settings.d.ts.map +1 -1
- package/dist/omp/omb-settings.js +75 -26
- package/dist/omp/omb-settings.js.map +1 -1
- package/dist/omp/omp-provider-config.d.ts +3 -0
- package/dist/omp/omp-provider-config.d.ts.map +1 -1
- package/dist/omp/omp-provider-config.js +80 -30
- package/dist/omp/omp-provider-config.js.map +1 -1
- package/dist/omp/rpc.d.ts +3 -0
- package/dist/omp/rpc.d.ts.map +1 -1
- package/dist/omp/session-ownership.d.ts +64 -0
- package/dist/omp/session-ownership.d.ts.map +1 -0
- package/dist/omp/session-ownership.js +269 -0
- package/dist/omp/session-ownership.js.map +1 -0
- package/dist/omp/task-model-selector.d.ts +58 -0
- package/dist/omp/task-model-selector.d.ts.map +1 -0
- package/dist/omp/task-model-selector.js +144 -0
- package/dist/omp/task-model-selector.js.map +1 -0
- package/dist/omp/tmux.d.ts.map +1 -1
- package/dist/omp/tmux.js +10 -5
- package/dist/omp/tmux.js.map +1 -1
- package/dist/omp/tray.d.ts +9 -1
- package/dist/omp/tray.d.ts.map +1 -1
- package/dist/omp/tray.js +210 -56
- package/dist/omp/tray.js.map +1 -1
- package/dist/scripts/emit-compatibility-receipt.js +13 -3
- package/dist/scripts/emit-compatibility-receipt.js.map +1 -1
- package/dist/services/benchmarks.d.ts +68 -0
- package/dist/services/benchmarks.d.ts.map +1 -0
- package/dist/services/benchmarks.js +105 -0
- package/dist/services/benchmarks.js.map +1 -0
- package/dist/services/budget.d.ts +40 -1
- package/dist/services/budget.d.ts.map +1 -1
- package/dist/services/budget.js +74 -3
- package/dist/services/budget.js.map +1 -1
- package/dist/services/change-impact.d.ts +33 -0
- package/dist/services/change-impact.d.ts.map +1 -0
- package/dist/services/change-impact.js +103 -0
- package/dist/services/change-impact.js.map +1 -0
- package/dist/services/efficiency.d.ts +101 -0
- package/dist/services/efficiency.d.ts.map +1 -0
- package/dist/services/efficiency.js +170 -0
- package/dist/services/efficiency.js.map +1 -0
- package/dist/services/hypothesis-ledger.d.ts +66 -0
- package/dist/services/hypothesis-ledger.d.ts.map +1 -0
- package/dist/services/hypothesis-ledger.js +92 -0
- package/dist/services/hypothesis-ledger.js.map +1 -0
- package/dist/services/lesson-extraction.d.ts +27 -0
- package/dist/services/lesson-extraction.d.ts.map +1 -0
- package/dist/services/lesson-extraction.js +49 -0
- package/dist/services/lesson-extraction.js.map +1 -0
- package/dist/services/parallel-work.d.ts +44 -0
- package/dist/services/parallel-work.d.ts.map +1 -0
- package/dist/services/parallel-work.js +68 -0
- package/dist/services/parallel-work.js.map +1 -0
- package/dist/services/pr-shepherd.d.ts +83 -0
- package/dist/services/pr-shepherd.d.ts.map +1 -0
- package/dist/services/pr-shepherd.js +129 -0
- package/dist/services/pr-shepherd.js.map +1 -0
- package/dist/services/recipes.d.ts +12 -2
- package/dist/services/recipes.d.ts.map +1 -1
- package/dist/services/recipes.js +100 -8
- package/dist/services/recipes.js.map +1 -1
- package/dist/services/run-contract.d.ts +18 -0
- package/dist/services/run-contract.d.ts.map +1 -0
- package/dist/services/run-contract.js +32 -0
- package/dist/services/run-contract.js.map +1 -0
- package/dist/services/snapshots.d.ts +78 -0
- package/dist/services/snapshots.d.ts.map +1 -0
- package/dist/services/snapshots.js +194 -0
- package/dist/services/snapshots.js.map +1 -0
- package/dist/services/specialist-contracts.d.ts +58 -0
- package/dist/services/specialist-contracts.d.ts.map +1 -0
- package/dist/services/specialist-contracts.js +109 -0
- package/dist/services/specialist-contracts.js.map +1 -0
- package/dist/services/stall-detector.d.ts +27 -0
- package/dist/services/stall-detector.d.ts.map +1 -0
- package/dist/services/stall-detector.js +53 -0
- package/dist/services/stall-detector.js.map +1 -0
- package/dist/storage/resources.d.ts +1 -0
- package/dist/storage/resources.d.ts.map +1 -1
- package/dist/storage/resources.js +13 -11
- package/dist/storage/resources.js.map +1 -1
- package/dist/tools/integrate.d.ts.map +1 -1
- package/dist/tools/integrate.js +8 -7
- package/dist/tools/integrate.js.map +1 -1
- package/dist/tools/verify.d.ts +5 -2
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +84 -14
- package/dist/tools/verify.js.map +1 -1
- package/dist/tools/workflow.d.ts +2 -2
- package/dist/tools/workflow.d.ts.map +1 -1
- package/dist/tools/workflow.js +7 -0
- package/dist/tools/workflow.js.map +1 -1
- package/docs/07-bizarharness-integration.md +12 -0
- package/docs/assets/bizar-omp-banner.svg +51 -18
- package/docs/compatibility/baseline.json +9 -8
- package/docs/compatibility/lifecycle-observation.md +15 -1
- package/docs/compatibility/supported-surfaces.json +11 -3
- package/docs/releases/0.8.1.md +53 -0
- package/docs/releases/0.9.0.md +35 -0
- package/docs/releases/support-matrix.md +1 -1
- package/docs/security/project-audit-2026-10-01.md +145 -0
- package/package.json +9 -5
- package/skills/bizar-omp/SKILL.md +54 -0
- package/skills/omp-native-development/SKILL.md +5 -3
- package/skills/omp-native-development/assets/tests/acceptance-matrix.json +417 -0
- package/skills/omp-native-development/references/accuracy-and-versioning.md +1 -1
- package/skills/omp-native-development/references/bizar-integration-contract.md +1 -1
- package/skills/omp-native-development/references/developer-handoff.md +3 -1
- package/skills/omp-native-development/references/execution-and-lifecycle.md +4 -0
- package/skills/omp-native-development/references/native-validation-matrix.md +25 -0
- package/skills/omp-native-development/references/sessions-sdk-rpc.md +17 -0
- package/skills/omp-native-development/references/settings-providers-security.md +11 -0
- package/skills/omp-native-development/references/source-manifest.json +20 -4
package/dist/omp/daemon.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { execFileSync, spawn } from "node:child_process";
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, openSync, closeSync } from "node:fs";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, openSync, closeSync, renameSync } from "node:fs";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
3
4
|
import { homedir } from "node:os";
|
|
4
5
|
import { join } from "node:path";
|
|
6
|
+
import { acquireLease } from "../storage/lease.js";
|
|
7
|
+
import { processStarttimeFromStat } from "../storage/lease.js";
|
|
8
|
+
import { OwnershipError } from "../core/errors.js";
|
|
5
9
|
export const DEFAULT_DAEMON_PORT = 46740;
|
|
6
10
|
export const DAEMON_PROTOCOL_VERSION = 3;
|
|
7
11
|
export function daemonStateDir(env = process.env) {
|
|
@@ -11,16 +15,21 @@ export function daemonStateDir(env = process.env) {
|
|
|
11
15
|
export function daemonLockPath(env = process.env) {
|
|
12
16
|
return join(daemonStateDir(env), "daemon.json");
|
|
13
17
|
}
|
|
18
|
+
function daemonLaunchLeasePath(env) {
|
|
19
|
+
return `${daemonLockPath(env)}.launchlease`;
|
|
20
|
+
}
|
|
14
21
|
export function daemonLogPath(env = process.env) {
|
|
15
22
|
return join(daemonStateDir(env), "daemon.log");
|
|
16
23
|
}
|
|
17
24
|
export function daemonSnapshotPath(env = process.env) {
|
|
18
25
|
return join(daemonStateDir(env), "snapshot.json");
|
|
19
26
|
}
|
|
20
|
-
/** Validate
|
|
27
|
+
/** Validate the identity used for daemon ownership checks. */
|
|
21
28
|
function parseLock(raw) {
|
|
22
29
|
try {
|
|
23
30
|
const value = JSON.parse(raw);
|
|
31
|
+
const generation = typeof value.generation === "string" ? value.generation : undefined;
|
|
32
|
+
const starttime = typeof value.processStarttime === "string" ? value.processStarttime : undefined;
|
|
24
33
|
const pid = Number(value.pid);
|
|
25
34
|
const port = Number(value.port);
|
|
26
35
|
const token = typeof value.token === "string" ? value.token : "";
|
|
@@ -28,6 +37,8 @@ function parseLock(raw) {
|
|
|
28
37
|
const exe = typeof value.exe === "string" ? value.exe : "";
|
|
29
38
|
if (!Number.isInteger(pid) || pid <= 0)
|
|
30
39
|
return undefined;
|
|
40
|
+
if (starttime !== undefined && !/^\d+$/.test(starttime))
|
|
41
|
+
return undefined;
|
|
31
42
|
if (!Number.isInteger(port) || port <= 0 || port > 65535)
|
|
32
43
|
return undefined;
|
|
33
44
|
if (!token)
|
|
@@ -36,7 +47,7 @@ function parseLock(raw) {
|
|
|
36
47
|
return undefined;
|
|
37
48
|
if (!exe)
|
|
38
49
|
return undefined;
|
|
39
|
-
return { pid, port, token, startedAt, exe };
|
|
50
|
+
return { generation, processStarttime: starttime, pid, port, token, startedAt, exe };
|
|
40
51
|
}
|
|
41
52
|
catch {
|
|
42
53
|
return undefined;
|
|
@@ -73,9 +84,6 @@ function processState(pid) {
|
|
|
73
84
|
return "unknown";
|
|
74
85
|
}
|
|
75
86
|
}
|
|
76
|
-
function processAlive(pid) {
|
|
77
|
-
return processState(pid) === "alive";
|
|
78
|
-
}
|
|
79
87
|
function windowsProcessCommand(pid) {
|
|
80
88
|
const queries = [
|
|
81
89
|
["powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", `$p = Get-CimInstance -ClassName Win32_Process -Filter 'ProcessId = ${pid}'; if ($null -ne $p) { $p.CommandLine }`]],
|
|
@@ -94,9 +102,24 @@ function windowsProcessCommand(pid) {
|
|
|
94
102
|
}
|
|
95
103
|
return undefined;
|
|
96
104
|
}
|
|
105
|
+
function macosProcessCommand(pid) {
|
|
106
|
+
try {
|
|
107
|
+
const output = execFileSync("ps", ["-p", String(pid), "-o", "command="], {
|
|
108
|
+
encoding: "utf8",
|
|
109
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
110
|
+
timeout: 2_000,
|
|
111
|
+
}).trim();
|
|
112
|
+
return output || undefined;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
97
118
|
export function processCommand(pid) {
|
|
98
119
|
if (process.platform === "win32")
|
|
99
120
|
return windowsProcessCommand(pid);
|
|
121
|
+
if (process.platform === "darwin")
|
|
122
|
+
return macosProcessCommand(pid);
|
|
100
123
|
try {
|
|
101
124
|
return readFileSync(join("/proc", String(pid), "cmdline"), "utf8").replace(/\0/g, " ").trim();
|
|
102
125
|
}
|
|
@@ -104,47 +127,96 @@ export function processCommand(pid) {
|
|
|
104
127
|
return undefined;
|
|
105
128
|
}
|
|
106
129
|
}
|
|
130
|
+
/** Linux PID start time distinguishes a recycled PID running the same command. */
|
|
131
|
+
export function processStarttime(pid) {
|
|
132
|
+
if (process.platform !== "linux")
|
|
133
|
+
return undefined;
|
|
134
|
+
try {
|
|
135
|
+
return processStarttimeFromStat(readFileSync(join("/proc", String(pid), "stat"), "utf8"));
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
107
141
|
function quotedPathPattern(path) {
|
|
108
142
|
const escaped = path.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
109
143
|
return new RegExp(`(?:^|[\\s"])${escaped}(?=$|[\\s"])`, "i");
|
|
110
144
|
}
|
|
111
|
-
function
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
//
|
|
115
|
-
// strongest identity signal. macOS and Windows have no `/proc`; we trust
|
|
116
|
-
// liveness plus the daemon-held token (callers authenticate commands
|
|
117
|
-
// separately via `/ping` and bearer-token requests).
|
|
118
|
-
if (process.platform !== "linux")
|
|
119
|
-
return Boolean(info.token) && info.port > 0 && info.port <= 65535;
|
|
145
|
+
function daemonOwnership(info) {
|
|
146
|
+
// Command ownership is required on every platform. The token only proves a
|
|
147
|
+
// caller can speak to the loopback listener; it does not prove that a PID
|
|
148
|
+
// from a stale lock still belongs to this daemon.
|
|
120
149
|
const cmdline = processCommand(info.pid);
|
|
121
150
|
if (cmdline === undefined)
|
|
122
|
-
return
|
|
151
|
+
return "unknown";
|
|
152
|
+
if (info.processStarttime) {
|
|
153
|
+
const observedStarttime = processStarttime(info.pid);
|
|
154
|
+
if (observedStarttime === undefined)
|
|
155
|
+
return "unknown";
|
|
156
|
+
if (observedStarttime !== info.processStarttime)
|
|
157
|
+
return "mismatch";
|
|
158
|
+
}
|
|
123
159
|
const normalized = cmdline.replace(/\s+/g, " ").trim();
|
|
124
|
-
return quotedPathPattern(info.exe).test(normalized) && /(?:^|\s)daemon\s+run(?:\s|$)/i.test(normalized);
|
|
160
|
+
return quotedPathPattern(info.exe).test(normalized) && /(?:^|\s)daemon\s+run(?:\s|$)/i.test(normalized) ? "match" : "mismatch";
|
|
125
161
|
}
|
|
126
|
-
/**
|
|
162
|
+
/** Preserve the lock whenever process ownership cannot be established. */
|
|
127
163
|
export function readDaemonStatus(env = process.env) {
|
|
128
164
|
const path = daemonLockPath(env);
|
|
129
165
|
if (!existsSync(path))
|
|
130
166
|
return { state: "stopped" };
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
167
|
+
let raw;
|
|
168
|
+
try {
|
|
169
|
+
raw = readFileSync(path, "utf8");
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// A lock we cannot inspect is an ownership boundary, not permission to
|
|
173
|
+
// delete it or start another daemon beside a possible live owner.
|
|
174
|
+
return { state: "unknown", unknownReason: "lock-unreadable" };
|
|
175
|
+
}
|
|
176
|
+
const info = parseLock(raw);
|
|
134
177
|
if (!info)
|
|
135
|
-
return { state: "
|
|
136
|
-
|
|
137
|
-
|
|
178
|
+
return { state: "unknown", unknownReason: "lock-invalid" };
|
|
179
|
+
const liveness = processState(info.pid);
|
|
180
|
+
if (liveness === "dead") {
|
|
138
181
|
return { state: "stale", daemon: info, staleReason: "process-exited" };
|
|
139
182
|
}
|
|
140
|
-
if (
|
|
183
|
+
if (liveness === "unknown") {
|
|
184
|
+
return { state: "unknown", daemon: info, unknownReason: "process-unknown" };
|
|
185
|
+
}
|
|
186
|
+
const ownership = daemonOwnership(info);
|
|
187
|
+
if (ownership === "unknown") {
|
|
188
|
+
return { state: "unknown", daemon: info, unknownReason: "ownership-unknown" };
|
|
189
|
+
}
|
|
190
|
+
if (ownership === "mismatch") {
|
|
141
191
|
// The recorded daemon is gone and the PID was reused by a foreign
|
|
142
|
-
// process.
|
|
143
|
-
|
|
192
|
+
// process. Reporting is deliberately read-only: an intervening daemon
|
|
193
|
+
// could otherwise have replaced this path before an unconditional unlink.
|
|
144
194
|
return { state: "stale", daemon: info, staleReason: "process-mismatch" };
|
|
145
195
|
}
|
|
146
196
|
return { state: "running", daemon: info };
|
|
147
197
|
}
|
|
198
|
+
function sameDaemon(left, right) {
|
|
199
|
+
return left.generation === right.generation && left.processStarttime === right.processStarttime && left.pid === right.pid && left.port === right.port && left.token === right.token && left.startedAt === right.startedAt && left.exe === right.exe;
|
|
200
|
+
}
|
|
201
|
+
function daemonOwnershipLeasePath(env) {
|
|
202
|
+
return `${daemonLockPath(env)}.ownership`;
|
|
203
|
+
}
|
|
204
|
+
function writeOwnerRecord(path, value) {
|
|
205
|
+
const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;
|
|
206
|
+
const descriptor = openSync(temporary, "wx", 0o600);
|
|
207
|
+
try {
|
|
208
|
+
writeFileSync(descriptor, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
closeSync(descriptor);
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
renameSync(temporary, path);
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
rmSync(temporary, { force: true });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
148
220
|
/** Write the daemon cache snapshot; kept small because it is a cache only. */
|
|
149
221
|
export function writeSnapshot(env, snapshot) {
|
|
150
222
|
mkdirSync(daemonStateDir(env), { recursive: true, mode: 0o700 });
|
|
@@ -153,10 +225,44 @@ export function writeSnapshot(env, snapshot) {
|
|
|
153
225
|
/** Record a running daemon so other processes can discover and verify it. */
|
|
154
226
|
export function writeDaemonLock(env, info) {
|
|
155
227
|
mkdirSync(daemonStateDir(env), { recursive: true, mode: 0o700 });
|
|
156
|
-
|
|
228
|
+
const lease = acquireLease(daemonOwnershipLeasePath(env), "daemon ownership is being updated by another process");
|
|
229
|
+
try {
|
|
230
|
+
writeOwnerRecord(daemonLockPath(env), { ...info, generation: info.generation ?? randomUUID() });
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
lease.release();
|
|
234
|
+
}
|
|
157
235
|
}
|
|
158
|
-
|
|
159
|
-
|
|
236
|
+
/** Remove a lock only when it still records the owner that is shutting down. */
|
|
237
|
+
export function clearDaemonLock(env = process.env, expected) {
|
|
238
|
+
if (!expected)
|
|
239
|
+
return false;
|
|
240
|
+
const path = daemonLockPath(env);
|
|
241
|
+
let lease;
|
|
242
|
+
try {
|
|
243
|
+
lease = acquireLease(daemonOwnershipLeasePath(env), "daemon ownership is being updated by another process");
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
if (error instanceof OwnershipError)
|
|
247
|
+
return false;
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
let current;
|
|
252
|
+
try {
|
|
253
|
+
current = parseLock(readFileSync(path, "utf8"));
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
if (!current || !sameDaemon(current, expected))
|
|
259
|
+
return false;
|
|
260
|
+
rmSync(path, { force: true });
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
finally {
|
|
264
|
+
lease.release();
|
|
265
|
+
}
|
|
160
266
|
}
|
|
161
267
|
export function readSnapshot(env = process.env) {
|
|
162
268
|
try {
|
|
@@ -186,60 +292,84 @@ function delay(ms) {
|
|
|
186
292
|
* reports a live lock. Returns the recorded daemon info.
|
|
187
293
|
*/
|
|
188
294
|
export async function startDaemon(env = process.env) {
|
|
189
|
-
const existing = readDaemonStatus(env);
|
|
190
|
-
if (existing.state === "running" && existing.daemon) {
|
|
191
|
-
throw new DaemonError(`daemon already running (pid ${existing.daemon.pid}, port ${existing.daemon.port})`);
|
|
192
|
-
}
|
|
193
295
|
mkdirSync(daemonStateDir(env), { recursive: true, mode: 0o700 });
|
|
194
|
-
const entry = process.argv[1];
|
|
195
|
-
if (!entry)
|
|
196
|
-
throw new DaemonError("cannot determine omb entry script for daemon launch");
|
|
197
296
|
// S013: take an exclusive launch lease (NX create) before spawning so two
|
|
198
|
-
// concurrent callers cannot both
|
|
199
|
-
//
|
|
200
|
-
const leasePath =
|
|
201
|
-
let
|
|
297
|
+
// concurrent callers cannot both classify a stale lock and launch a child.
|
|
298
|
+
// The child atomically replaces a stale lock when it publishes its identity.
|
|
299
|
+
const leasePath = daemonLaunchLeasePath(env);
|
|
300
|
+
let launchLease;
|
|
202
301
|
try {
|
|
203
|
-
|
|
204
|
-
writeFileSync(leaseFd, `${process.pid}\n${Date.now()}\n`, { mode: 0o600 });
|
|
302
|
+
launchLease = acquireLease(leasePath, `another startDaemon is already in progress (lease ${leasePath})`);
|
|
205
303
|
}
|
|
206
304
|
catch (error) {
|
|
207
|
-
if (error
|
|
208
|
-
throw new DaemonError(
|
|
305
|
+
if (error instanceof OwnershipError)
|
|
306
|
+
throw new DaemonError(error.message);
|
|
209
307
|
throw error;
|
|
210
308
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
309
|
+
try {
|
|
310
|
+
const existing = readDaemonStatus(env);
|
|
311
|
+
if (existing.state === "running" && existing.daemon) {
|
|
312
|
+
throw new DaemonError(`daemon already running (pid ${existing.daemon.pid}, port ${existing.daemon.port})`);
|
|
313
|
+
}
|
|
314
|
+
if (existing.state === "unknown") {
|
|
315
|
+
throw new DaemonError(`daemon lock cannot be safely inspected (${existing.unknownReason ?? "unknown"}); lock retained`);
|
|
316
|
+
}
|
|
317
|
+
const entry = process.argv[1];
|
|
318
|
+
if (!entry)
|
|
319
|
+
throw new DaemonError("cannot determine omb entry script for daemon launch");
|
|
320
|
+
const log = openSync(daemonLogPath(env), "a");
|
|
321
|
+
try {
|
|
322
|
+
const child = spawn(process.execPath, [entry, "daemon", "run"], {
|
|
323
|
+
cwd: env.HOME || homedir(), env, detached: true, stdio: ["ignore", log, log],
|
|
324
|
+
});
|
|
325
|
+
child.unref();
|
|
326
|
+
}
|
|
327
|
+
finally {
|
|
328
|
+
closeSync(log);
|
|
329
|
+
}
|
|
330
|
+
const deadline = Date.now() + 10_000;
|
|
331
|
+
while (Date.now() < deadline) {
|
|
332
|
+
const status = readDaemonStatus(env);
|
|
333
|
+
if (status.state === "running" && status.daemon)
|
|
334
|
+
return status.daemon;
|
|
335
|
+
await delay(100);
|
|
229
336
|
}
|
|
230
|
-
await delay(100);
|
|
231
|
-
}
|
|
232
|
-
releaseLease();
|
|
233
|
-
if (!result)
|
|
234
337
|
throw new DaemonError(`daemon did not become ready; see ${daemonLogPath(env)}`);
|
|
235
|
-
|
|
338
|
+
}
|
|
339
|
+
finally {
|
|
340
|
+
launchLease.release();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
function checkedDaemonState(env, expected) {
|
|
344
|
+
const current = readDaemonStatus(env);
|
|
345
|
+
if (current.state === "stopped")
|
|
346
|
+
return "stopped";
|
|
347
|
+
if (current.state === "unknown") {
|
|
348
|
+
throw new DaemonError(`daemon lock cannot be safely inspected (${current.unknownReason ?? "unknown"}); lock retained`);
|
|
349
|
+
}
|
|
350
|
+
if (!current.daemon || !sameDaemon(current.daemon, expected)) {
|
|
351
|
+
throw new DaemonError("daemon identity changed while waiting for shutdown; lock retained");
|
|
352
|
+
}
|
|
353
|
+
if (current.state === "stale")
|
|
354
|
+
return "stopped";
|
|
355
|
+
return "running";
|
|
236
356
|
}
|
|
237
|
-
/**
|
|
357
|
+
/**
|
|
358
|
+
* Ask the running daemon to exit, then wait for it to release its own record.
|
|
359
|
+
* A daemon that exits cleanly removes the lock it published, so the record
|
|
360
|
+
* disappearing is the normal completion signal; a record left behind by a
|
|
361
|
+
* daemon that died without releasing it also counts as stopped, because
|
|
362
|
+
* `startDaemon` replaces a stale lock instead of trusting it.
|
|
363
|
+
*/
|
|
238
364
|
export async function stopDaemon(env = process.env) {
|
|
239
365
|
const status = readDaemonStatus(env);
|
|
366
|
+
if (status.state === "unknown") {
|
|
367
|
+
throw new DaemonError(`daemon lock cannot be safely inspected (${status.unknownReason ?? "unknown"}); lock retained`);
|
|
368
|
+
}
|
|
240
369
|
if (status.state !== "running" || !status.daemon)
|
|
241
370
|
return "not-running";
|
|
242
|
-
const
|
|
371
|
+
const expected = status.daemon;
|
|
372
|
+
const { port, token } = expected;
|
|
243
373
|
try {
|
|
244
374
|
const response = await fetch(`http://127.0.0.1:${port}/stop`, {
|
|
245
375
|
method: "POST",
|
|
@@ -254,7 +384,7 @@ export async function stopDaemon(env = process.env) {
|
|
|
254
384
|
}
|
|
255
385
|
const deadline = Date.now() + 5_000;
|
|
256
386
|
while (Date.now() < deadline) {
|
|
257
|
-
if (
|
|
387
|
+
if (checkedDaemonState(env, expected) === "stopped")
|
|
258
388
|
return "stopped";
|
|
259
389
|
await delay(50);
|
|
260
390
|
}
|
|
@@ -262,21 +392,24 @@ export async function stopDaemon(env = process.env) {
|
|
|
262
392
|
// SIGTERM to SIGKILL and verify the process is actually gone before clearing
|
|
263
393
|
// the lock so a live orphan does not silently escape ownership tracking.
|
|
264
394
|
for (const sig of ["SIGTERM", "SIGKILL"]) {
|
|
395
|
+
// Re-read immediately before each signal. A PID can be reused and a daemon
|
|
396
|
+
// may be replaced while the HTTP stop request or a previous poll was in
|
|
397
|
+
// flight; the lock's original identity is the only authority to signal it.
|
|
398
|
+
if (checkedDaemonState(env, expected) === "stopped")
|
|
399
|
+
return "stopped";
|
|
265
400
|
try {
|
|
266
|
-
process.kill(pid, sig);
|
|
401
|
+
process.kill(expected.pid, sig);
|
|
267
402
|
}
|
|
268
403
|
catch { /* already gone */ }
|
|
269
404
|
const pollDeadline = Date.now() + (sig === "SIGTERM" ? 5_000 : 3_000);
|
|
270
405
|
while (Date.now() < pollDeadline) {
|
|
271
|
-
if (
|
|
272
|
-
rmSync(daemonLockPath(env), { force: true });
|
|
406
|
+
if (checkedDaemonState(env, expected) === "stopped")
|
|
273
407
|
return "stopped";
|
|
274
|
-
}
|
|
275
408
|
await delay(50);
|
|
276
409
|
}
|
|
277
410
|
}
|
|
278
411
|
// Process still alive after SIGKILL escalation — do NOT clear the lock; the
|
|
279
412
|
// caller must decide how to handle an unkillable daemon.
|
|
280
|
-
throw new DaemonError(`daemon (pid ${pid}) did not exit after SIGKILL; lock retained`);
|
|
413
|
+
throw new DaemonError(`daemon (pid ${expected.pid}) did not exit after SIGKILL; lock retained`);
|
|
281
414
|
}
|
|
282
415
|
//# sourceMappingURL=daemon.js.map
|
package/dist/omp/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/omp/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAwBjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC,MAAM,UAAU,cAAc,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACjE,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAChE,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACrE,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AAED,sEAAsE;AACtE,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK;YAAE,OAAO,SAAS,CAAC;QAC3E,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAKD,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;YACzF,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAClH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,uEAAuE;QACvE,wEAAwE;QACxE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC;QACrC,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC;AACvC,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,OAAO,GAA8B;QACzC,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,sEAAsE,GAAG,yCAAyC,CAAC,CAAC;QACrL,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;KACzF,CAAC;IACF,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7H,MAAM,WAAW,GAAG,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACvG,IAAI,WAAW;gBAAE,OAAO,WAAW,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,IAAI,MAAM,CAAC,eAAe,OAAO,cAAc,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAgB;IAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,wEAAwE;IACxE,yEAAyE;IACzE,qEAAqE;IACrE,qDAAqD;IACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;IACpG,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,+BAA+B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1G,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACnE,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,sEAAsE;IACtE,qCAAqC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,kEAAkE;QAClE,gEAAgE;QAChE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,GAAsB,EAAE,QAAwB;IAC5E,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,GAAsB,EAAE,IAAgB;IACtE,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAClE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC/D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAmB,CAAC;QAC1F,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,QAAQ;IACtB,IAAI,OAA4B,CAAC;IACjC,IAAI,MAAmC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC,SAAS,KAAK,CAAC,EAAU;IACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAQ,CAAC;IAC9C,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpD,MAAM,IAAI,WAAW,CAAC,+BAA+B,QAAQ,CAAC,MAAM,CAAC,GAAG,UAAU,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7G,CAAC;IACD,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,WAAW,CAAC,qDAAqD,CAAC,CAAC;IACzF,0EAA0E;IAC1E,2EAA2E;IAC3E,mFAAmF;IACnF,MAAM,SAAS,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;IACvD,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QAAC,OAAO,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAAC,aAAa,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAAC,CAAC;IACxH,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,WAAW,CAAC,qDAAqD,SAAS,GAAG,CAAC,CAAC;QACjJ,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,YAAY,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,OAAQ,CAAC,CAAC;QAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QAC9D,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;KAC7E,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,CAAC,CAAC;IACf,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;IACrC,IAAI,MAA8B,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAAC,MAAM;QAAC,CAAC;QACnF,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,YAAY,EAAE,CAAC;IACf,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,WAAW,CAAC,oCAAoC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACnE,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,aAAa,CAAC;IACvE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,OAAO,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;YAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;IACjE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAChE,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,0EAA0E;IAC1E,6EAA6E;IAC7E,yEAAyE;IACzE,KAAK,MAAM,GAAG,IAAK,CAAC,SAAS,EAAE,SAAS,CAAW,EAAE,CAAC;QACpD,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,OAAO,SAAS,CAAC;YAAC,CAAC;YAC3F,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,4EAA4E;IAC5E,yDAAyD;IACzD,MAAM,IAAI,WAAW,CAAC,eAAe,GAAG,6CAA6C,CAAC,CAAC;AACzF,CAAC"}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/omp/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { DispatchIntent, WorkerObservation, WorkflowRun } from "../core/types.js";
|
|
2
|
+
import type { SessionBinding } from "./lifecycle.js";
|
|
3
|
+
export interface NativeTaskRequest {
|
|
4
|
+
name?: string;
|
|
5
|
+
agent: string;
|
|
6
|
+
isolated: boolean;
|
|
7
|
+
task?: string;
|
|
8
|
+
scope?: string[];
|
|
9
|
+
/**
|
|
10
|
+
* OMP 18.5 per-call model selector, forwarded exactly as the host sent it.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately `unknown`: the raw array must survive to
|
|
13
|
+
* `normalizeRequestedModelSelectors`, which is the single place that decides a
|
|
14
|
+
* selector is malformed. Coercing it here would turn a non-string entry into
|
|
15
|
+
* a plausible-looking selector and journal it as admitted routing.
|
|
16
|
+
*/
|
|
17
|
+
model?: unknown;
|
|
18
|
+
/** Per-spawn thinking effort, a dimension separate from model identity. */
|
|
19
|
+
effort?: string;
|
|
20
|
+
solutionSpace?: string;
|
|
21
|
+
tools?: string[];
|
|
22
|
+
}
|
|
23
|
+
type NativeOutcome = "settled" | "failed" | "cancelled" | "unknown-outcome";
|
|
24
|
+
/**
|
|
25
|
+
* Journal a Bizar dispatch for every native task an admitted `task` call runs.
|
|
26
|
+
*
|
|
27
|
+
* The dispatch is written *before* OMP executes anything and bound to OMP's own
|
|
28
|
+
* `toolCallId`, so a real native execution is always correlatable to the run
|
|
29
|
+
* that admitted it. Without that binding, `accept-work` could never find a
|
|
30
|
+
* settled dispatch for the work a native task actually did, and cancellation had
|
|
31
|
+
* no identity to propagate to.
|
|
32
|
+
*
|
|
33
|
+
* A dispatch is recorded only for a task the run's work items already back. A
|
|
34
|
+
* task naming something the run never admitted is left to the existing A002 and
|
|
35
|
+
* A004 gates, unchanged: there is no work item for `accept-work` to accept, so
|
|
36
|
+
* inventing a synthetic one would attach a settlement to nothing.
|
|
37
|
+
*
|
|
38
|
+
* A call with no native identity is refused: a dispatch nothing can later settle
|
|
39
|
+
* is not lifecycle proof, it is a record of an intention.
|
|
40
|
+
*/
|
|
41
|
+
export declare function admitNativeTasks(binding: SessionBinding, run: WorkflowRun, requests: NativeTaskRequest[], toolCallId: string | undefined): DispatchIntent[];
|
|
42
|
+
/**
|
|
43
|
+
* Settle every dispatch bound to a native call.
|
|
44
|
+
*
|
|
45
|
+
* Settlement is driven by OMP's own `tool_result`, so the recorded outcome is
|
|
46
|
+
* the host's, never the model's. An errored call settles as `failed`; a call the
|
|
47
|
+
* host could not classify settles as `unknown-outcome` rather than being
|
|
48
|
+
* optimistically counted as work that succeeded.
|
|
49
|
+
*/
|
|
50
|
+
export declare function settleNativeCall(binding: SessionBinding, run: WorkflowRun, toolCallId: string, outcome: {
|
|
51
|
+
isError?: boolean;
|
|
52
|
+
structuredStatus?: unknown;
|
|
53
|
+
structuredData?: unknown;
|
|
54
|
+
artifactRefs?: string[];
|
|
55
|
+
status?: NativeOutcome;
|
|
56
|
+
details?: unknown;
|
|
57
|
+
}): WorkerObservation[];
|
|
58
|
+
/** Dispatches still in flight for a run, in the order they were admitted. */
|
|
59
|
+
export declare function liveDispatches(binding: SessionBinding, runId: string): DispatchIntent[];
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=dispatch-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-lifecycle.d.ts","sourceRoot":"","sources":["../../src/omp/dispatch-lifecycle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAA8B,iBAAiB,EAAE,WAAW,EAAY,MAAM,kBAAkB,CAAC;AAC7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,KAAK,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAM5E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,EAAE,CAe3J;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,iBAAiB,EAAE,CA4B7Q;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAEvF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ContractError } from "../core/errors.js";
|
|
2
|
+
import { classifyRoute } from "../core/policies.js";
|
|
3
|
+
import { admitDispatch } from "./dispatch-admission.js";
|
|
4
|
+
import { settlementForStructuredOutput, normalizeSpecialistResult } from "../services/specialist-contracts.js";
|
|
5
|
+
import { readObservedRouting, requestedRouting, settledResultFor } from "./task-model-selector.js";
|
|
6
|
+
/** Dispatch statuses that no longer represent work in flight. */
|
|
7
|
+
const settledStatuses = new Set(["settled", "failed", "cancelled", "unknown-outcome", "rejected"]);
|
|
8
|
+
/**
|
|
9
|
+
* Journal a Bizar dispatch for every native task an admitted `task` call runs.
|
|
10
|
+
*
|
|
11
|
+
* The dispatch is written *before* OMP executes anything and bound to OMP's own
|
|
12
|
+
* `toolCallId`, so a real native execution is always correlatable to the run
|
|
13
|
+
* that admitted it. Without that binding, `accept-work` could never find a
|
|
14
|
+
* settled dispatch for the work a native task actually did, and cancellation had
|
|
15
|
+
* no identity to propagate to.
|
|
16
|
+
*
|
|
17
|
+
* A dispatch is recorded only for a task the run's work items already back. A
|
|
18
|
+
* task naming something the run never admitted is left to the existing A002 and
|
|
19
|
+
* A004 gates, unchanged: there is no work item for `accept-work` to accept, so
|
|
20
|
+
* inventing a synthetic one would attach a settlement to nothing.
|
|
21
|
+
*
|
|
22
|
+
* A call with no native identity is refused: a dispatch nothing can later settle
|
|
23
|
+
* is not lifecycle proof, it is a record of an intention.
|
|
24
|
+
*/
|
|
25
|
+
export function admitNativeTasks(binding, run, requests, toolCallId) {
|
|
26
|
+
if (!toolCallId?.trim())
|
|
27
|
+
throw new ContractError("The OMP host did not expose a tool call id; a managed task cannot be bound to the run that admitted it");
|
|
28
|
+
const recorded = [];
|
|
29
|
+
for (const request of requests) {
|
|
30
|
+
const workItemId = request.name?.trim() ?? "";
|
|
31
|
+
const item = run.workItems.find(candidate => candidate.id === workItemId);
|
|
32
|
+
if (!item)
|
|
33
|
+
continue;
|
|
34
|
+
const decision = classifyRoute({ text: `${item.title} ${workItemId}`, role: request.agent, files: item.scope });
|
|
35
|
+
const intent = admitDispatch(run, item, decision, "trusted-development", run.nativeSessionId);
|
|
36
|
+
const routing = requestedRouting(request);
|
|
37
|
+
const bound = { ...intent, status: "admitted", nativeCallId: toolCallId, idempotencyKey: `${intent.idempotencyKey}:${toolCallId}`, requestedModelSelectors: routing.selectors, routingSource: routing.source, ...(routing.effort ? { requestedEffort: routing.effort } : {}) };
|
|
38
|
+
binding.journal.append({ type: "dispatch.recorded", runId: run.runId, intent: bound }, `dispatch:${bound.id}:${toolCallId}`, run.revision);
|
|
39
|
+
recorded.push(bound);
|
|
40
|
+
}
|
|
41
|
+
return recorded;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Settle every dispatch bound to a native call.
|
|
45
|
+
*
|
|
46
|
+
* Settlement is driven by OMP's own `tool_result`, so the recorded outcome is
|
|
47
|
+
* the host's, never the model's. An errored call settles as `failed`; a call the
|
|
48
|
+
* host could not classify settles as `unknown-outcome` rather than being
|
|
49
|
+
* optimistically counted as work that succeeded.
|
|
50
|
+
*/
|
|
51
|
+
export function settleNativeCall(binding, run, toolCallId, outcome) {
|
|
52
|
+
const snapshot = binding.journal.snapshot();
|
|
53
|
+
const bound = snapshot.dispatches.filter(intent => intent.runId === run.runId && intent.nativeCallId === toolCallId && !settledStatuses.has(intent.status));
|
|
54
|
+
const status = outcome.status ?? settlementForStructuredOutput(outcome.structuredStatus, outcome.isError === true);
|
|
55
|
+
const settled = [];
|
|
56
|
+
for (const intent of bound) {
|
|
57
|
+
const sequence = snapshot.observations.filter(observation => observation.dispatchId === intent.id).length + 1;
|
|
58
|
+
// Routing is reported per spawn, and the admitted dispatches are fewer than
|
|
59
|
+
// the spawns whenever a batch task names no work item, so the result is
|
|
60
|
+
// matched on the dispatch's own work item id rather than on admission
|
|
61
|
+
// order. An unmatched result stays unobserved rather than borrowing the
|
|
62
|
+
// model a different spawn actually ran.
|
|
63
|
+
const observedRouting = readObservedRouting(settledResultFor(outcome.details, intent.workItemId));
|
|
64
|
+
const observation = {
|
|
65
|
+
dispatchId: intent.id,
|
|
66
|
+
nativeCallId: toolCallId,
|
|
67
|
+
sourceEvent: "omp.tool_result",
|
|
68
|
+
sequence,
|
|
69
|
+
status,
|
|
70
|
+
structuredResult: normalizedResult(outcome.structuredData),
|
|
71
|
+
artifactRefs: outcome.artifactRefs ?? [],
|
|
72
|
+
observedAt: new Date().toISOString(),
|
|
73
|
+
...(observedRouting ? { observedRouting } : {}),
|
|
74
|
+
};
|
|
75
|
+
binding.journal.append({ type: "dispatch.state_changed", runId: run.runId, dispatch: { ...intent, status }, observed: observation }, `dispatch-settled:${intent.id}:${sequence}`, run.revision);
|
|
76
|
+
settled.push(observation);
|
|
77
|
+
}
|
|
78
|
+
return settled;
|
|
79
|
+
}
|
|
80
|
+
/** Dispatches still in flight for a run, in the order they were admitted. */
|
|
81
|
+
export function liveDispatches(binding, runId) {
|
|
82
|
+
return binding.journal.snapshot().dispatches.filter(intent => intent.runId === runId && !settledStatuses.has(intent.status));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Persist only the normalized result.
|
|
86
|
+
*
|
|
87
|
+
* Raw child transcript stays owned by OMP and is retrieved through its own
|
|
88
|
+
* session and history surfaces. What Bizar keeps is the validated payload, so
|
|
89
|
+
* evidence lineage never carries unvalidated prose from a child.
|
|
90
|
+
*/
|
|
91
|
+
function normalizedResult(data) {
|
|
92
|
+
if (data === undefined)
|
|
93
|
+
return undefined;
|
|
94
|
+
try {
|
|
95
|
+
return normalizeSpecialistResult(data);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=dispatch-lifecycle.js.map
|