@botiverse/oar 0.0.1
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/LICENSE +202 -0
- package/README.md +13 -0
- package/dist/contracts/account-usage.d.ts +33 -0
- package/dist/contracts/account-usage.d.ts.map +1 -0
- package/dist/contracts/account-usage.js +2 -0
- package/dist/contracts/account-usage.js.map +1 -0
- package/dist/contracts/installation.d.ts +27 -0
- package/dist/contracts/installation.d.ts.map +1 -0
- package/dist/contracts/installation.js +2 -0
- package/dist/contracts/installation.js.map +1 -0
- package/dist/contracts/runtime.d.ts +12 -0
- package/dist/contracts/runtime.d.ts.map +1 -0
- package/dist/contracts/runtime.js +4 -0
- package/dist/contracts/runtime.js.map +1 -0
- package/dist/contracts/session.d.ts +188 -0
- package/dist/contracts/session.d.ts.map +1 -0
- package/dist/contracts/session.js +2 -0
- package/dist/contracts/session.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/installation.d.ts +15 -0
- package/dist/installation.d.ts.map +1 -0
- package/dist/installation.js +60 -0
- package/dist/installation.js.map +1 -0
- package/dist/observe/agent-status.d.ts +39 -0
- package/dist/observe/agent-status.d.ts.map +1 -0
- package/dist/observe/agent-status.js +31 -0
- package/dist/observe/agent-status.js.map +1 -0
- package/dist/observe/aggregate-events.d.ts +15 -0
- package/dist/observe/aggregate-events.d.ts.map +1 -0
- package/dist/observe/aggregate-events.js +70 -0
- package/dist/observe/aggregate-events.js.map +1 -0
- package/dist/observe/index.d.ts +17 -0
- package/dist/observe/index.d.ts.map +1 -0
- package/dist/observe/index.js +13 -0
- package/dist/observe/index.js.map +1 -0
- package/dist/observe/observe-agent.d.ts +38 -0
- package/dist/observe/observe-agent.d.ts.map +1 -0
- package/dist/observe/observe-agent.js +61 -0
- package/dist/observe/observe-agent.js.map +1 -0
- package/dist/observe/stall-observer.d.ts +19 -0
- package/dist/observe/stall-observer.d.ts.map +1 -0
- package/dist/observe/stall-observer.js +36 -0
- package/dist/observe/stall-observer.js.map +1 -0
- package/dist/observe/tool-activity.d.ts +21 -0
- package/dist/observe/tool-activity.d.ts.map +1 -0
- package/dist/observe/tool-activity.js +87 -0
- package/dist/observe/tool-activity.js.map +1 -0
- package/dist/registry.d.ts +10 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +30 -0
- package/dist/registry.js.map +1 -0
- package/dist/runtimes/claude/account-usage.d.ts +29 -0
- package/dist/runtimes/claude/account-usage.d.ts.map +1 -0
- package/dist/runtimes/claude/account-usage.js +179 -0
- package/dist/runtimes/claude/account-usage.js.map +1 -0
- package/dist/runtimes/claude/context-usage.d.ts +10 -0
- package/dist/runtimes/claude/context-usage.d.ts.map +1 -0
- package/dist/runtimes/claude/context-usage.js +23 -0
- package/dist/runtimes/claude/context-usage.js.map +1 -0
- package/dist/runtimes/claude/index.d.ts +9 -0
- package/dist/runtimes/claude/index.d.ts.map +1 -0
- package/dist/runtimes/claude/index.js +13 -0
- package/dist/runtimes/claude/index.js.map +1 -0
- package/dist/runtimes/claude/installation.d.ts +2 -0
- package/dist/runtimes/claude/installation.d.ts.map +1 -0
- package/dist/runtimes/claude/installation.js +3 -0
- package/dist/runtimes/claude/installation.js.map +1 -0
- package/dist/runtimes/claude/projection.d.ts +46 -0
- package/dist/runtimes/claude/projection.d.ts.map +1 -0
- package/dist/runtimes/claude/projection.js +110 -0
- package/dist/runtimes/claude/projection.js.map +1 -0
- package/dist/runtimes/claude/session.d.ts +3 -0
- package/dist/runtimes/claude/session.d.ts.map +1 -0
- package/dist/runtimes/claude/session.js +166 -0
- package/dist/runtimes/claude/session.js.map +1 -0
- package/dist/runtimes/codex/account-usage.d.ts +40 -0
- package/dist/runtimes/codex/account-usage.d.ts.map +1 -0
- package/dist/runtimes/codex/account-usage.js +185 -0
- package/dist/runtimes/codex/account-usage.js.map +1 -0
- package/dist/runtimes/codex/app-server-client.d.ts +17 -0
- package/dist/runtimes/codex/app-server-client.d.ts.map +1 -0
- package/dist/runtimes/codex/app-server-client.js +68 -0
- package/dist/runtimes/codex/app-server-client.js.map +1 -0
- package/dist/runtimes/codex/context-usage.d.ts +10 -0
- package/dist/runtimes/codex/context-usage.d.ts.map +1 -0
- package/dist/runtimes/codex/context-usage.js +16 -0
- package/dist/runtimes/codex/context-usage.js.map +1 -0
- package/dist/runtimes/codex/index.d.ts +9 -0
- package/dist/runtimes/codex/index.d.ts.map +1 -0
- package/dist/runtimes/codex/index.js +13 -0
- package/dist/runtimes/codex/index.js.map +1 -0
- package/dist/runtimes/codex/installation.d.ts +2 -0
- package/dist/runtimes/codex/installation.d.ts.map +1 -0
- package/dist/runtimes/codex/installation.js +17 -0
- package/dist/runtimes/codex/installation.js.map +1 -0
- package/dist/runtimes/codex/item-detail.d.ts +4 -0
- package/dist/runtimes/codex/item-detail.d.ts.map +1 -0
- package/dist/runtimes/codex/item-detail.js +47 -0
- package/dist/runtimes/codex/item-detail.js.map +1 -0
- package/dist/runtimes/codex/projection.d.ts +28 -0
- package/dist/runtimes/codex/projection.d.ts.map +1 -0
- package/dist/runtimes/codex/projection.js +98 -0
- package/dist/runtimes/codex/projection.js.map +1 -0
- package/dist/runtimes/codex/reasoning.d.ts +4 -0
- package/dist/runtimes/codex/reasoning.d.ts.map +1 -0
- package/dist/runtimes/codex/reasoning.js +23 -0
- package/dist/runtimes/codex/reasoning.js.map +1 -0
- package/dist/runtimes/codex/session.d.ts +3 -0
- package/dist/runtimes/codex/session.d.ts.map +1 -0
- package/dist/runtimes/codex/session.js +199 -0
- package/dist/runtimes/codex/session.js.map +1 -0
- package/dist/runtimes/pi/index.d.ts +12 -0
- package/dist/runtimes/pi/index.d.ts.map +1 -0
- package/dist/runtimes/pi/index.js +15 -0
- package/dist/runtimes/pi/index.js.map +1 -0
- package/dist/runtimes/pi/installation.d.ts +10 -0
- package/dist/runtimes/pi/installation.d.ts.map +1 -0
- package/dist/runtimes/pi/installation.js +33 -0
- package/dist/runtimes/pi/installation.js.map +1 -0
- package/dist/runtimes/pi/projection.d.ts +39 -0
- package/dist/runtimes/pi/projection.d.ts.map +1 -0
- package/dist/runtimes/pi/projection.js +112 -0
- package/dist/runtimes/pi/projection.js.map +1 -0
- package/dist/runtimes/pi/session.d.ts +11 -0
- package/dist/runtimes/pi/session.d.ts.map +1 -0
- package/dist/runtimes/pi/session.js +201 -0
- package/dist/runtimes/pi/session.js.map +1 -0
- package/dist/runtimes/pi/tool-detail.d.ts +4 -0
- package/dist/runtimes/pi/tool-detail.d.ts.map +1 -0
- package/dist/runtimes/pi/tool-detail.js +14 -0
- package/dist/runtimes/pi/tool-detail.js.map +1 -0
- package/dist/shared/diagnostic-text.d.ts +2 -0
- package/dist/shared/diagnostic-text.d.ts.map +1 -0
- package/dist/shared/diagnostic-text.js +15 -0
- package/dist/shared/diagnostic-text.js.map +1 -0
- package/dist/shared/executable/index.d.ts +8 -0
- package/dist/shared/executable/index.d.ts.map +1 -0
- package/dist/shared/executable/index.js +5 -0
- package/dist/shared/executable/index.js.map +1 -0
- package/dist/shared/executable/process.d.ts +27 -0
- package/dist/shared/executable/process.d.ts.map +1 -0
- package/dist/shared/executable/process.js +77 -0
- package/dist/shared/executable/process.js.map +1 -0
- package/dist/shared/executable/resolve.d.ts +16 -0
- package/dist/shared/executable/resolve.d.ts.map +1 -0
- package/dist/shared/executable/resolve.js +63 -0
- package/dist/shared/executable/resolve.js.map +1 -0
- package/dist/shared/executable/run.d.ts +13 -0
- package/dist/shared/executable/run.d.ts.map +1 -0
- package/dist/shared/executable/run.js +26 -0
- package/dist/shared/executable/run.js.map +1 -0
- package/dist/shared/executable/version.d.ts +6 -0
- package/dist/shared/executable/version.d.ts.map +1 -0
- package/dist/shared/executable/version.js +17 -0
- package/dist/shared/executable/version.js.map +1 -0
- package/dist/shared/failure-class.d.ts +8 -0
- package/dist/shared/failure-class.d.ts.map +1 -0
- package/dist/shared/failure-class.js +24 -0
- package/dist/shared/failure-class.js.map +1 -0
- package/dist/shared/installation.d.ts +9 -0
- package/dist/shared/installation.d.ts.map +1 -0
- package/dist/shared/installation.js +53 -0
- package/dist/shared/installation.js.map +1 -0
- package/dist/shared/instant.d.ts +4 -0
- package/dist/shared/instant.d.ts.map +1 -0
- package/dist/shared/instant.js +4 -0
- package/dist/shared/instant.js.map +1 -0
- package/dist/shared/json.d.ts +10 -0
- package/dist/shared/json.d.ts.map +1 -0
- package/dist/shared/json.js +29 -0
- package/dist/shared/json.js.map +1 -0
- package/dist/shared/seal-session.d.ts +8 -0
- package/dist/shared/seal-session.d.ts.map +1 -0
- package/dist/shared/seal-session.js +24 -0
- package/dist/shared/seal-session.js.map +1 -0
- package/dist/shared/session-kernel.d.ts +25 -0
- package/dist/shared/session-kernel.d.ts.map +1 -0
- package/dist/shared/session-kernel.js +64 -0
- package/dist/shared/session-kernel.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/shared/executable/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAqB7B,SAAS,SAAS,CAAC,KAAsB;IACvC,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CACrB,UAAkB,EAClB,GAAsB,EACtB,QAA0B,EAC1B,MAAqC;IAErC,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,MAAM,GAAG;QACb,6FAA6F;QAC7F,mEAAmE;KACpE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CACjC,gBAAgB,EAChB,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,CAAC;QACrD,wEAAwE;QACxE,qEAAqE;QACrE;YACE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,kBAAkB,EAAE,UAAU,EAAE;YAC/C,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,MAAM;SAChB,CACF,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtB,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,UAAoC,EAAE;IAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC;IAClD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;YAC/C,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ExecutableResult {
|
|
2
|
+
readonly ok: boolean;
|
|
3
|
+
readonly stdout: string;
|
|
4
|
+
readonly stderr: string;
|
|
5
|
+
readonly exitCode: number | null;
|
|
6
|
+
}
|
|
7
|
+
export interface ExecutableRunOptions {
|
|
8
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
9
|
+
readonly timeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export type ExecutableRunner = (executable: string, args: readonly string[], options?: ExecutableRunOptions) => Promise<ExecutableResult>;
|
|
12
|
+
export declare const runExecutable: ExecutableRunner;
|
|
13
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/run.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,eAAO,MAAM,aAAa,EAAE,gBA2B3B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { requiresShell } from "./process.js";
|
|
3
|
+
export const runExecutable = async (executable, args, options = {}) => {
|
|
4
|
+
const result = await new Promise((resolve) => {
|
|
5
|
+
execFile(executable, [...args], {
|
|
6
|
+
env: options.env,
|
|
7
|
+
timeout: options.timeoutMs ?? 5000,
|
|
8
|
+
maxBuffer: 2 * 1024 * 1024,
|
|
9
|
+
// Same Windows .cmd-shim rule as spawnLineProcess: modern Node throws
|
|
10
|
+
// EINVAL (synchronously) on shell-less exec of .cmd/.bat.
|
|
11
|
+
shell: requiresShell(executable, process.platform),
|
|
12
|
+
}, (error, stdout, stderr) => {
|
|
13
|
+
const exitCode = error !== null && "code" in error && typeof error.code === "number"
|
|
14
|
+
? error.code
|
|
15
|
+
: null;
|
|
16
|
+
resolve({
|
|
17
|
+
ok: error === null,
|
|
18
|
+
stdout,
|
|
19
|
+
stderr,
|
|
20
|
+
exitCode,
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/shared/executable/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAoB7C,MAAM,CAAC,MAAM,aAAa,GAAqB,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;IACtF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;QAC7D,QAAQ,CACN,UAAU,EACV,CAAC,GAAG,IAAI,CAAC,EACT;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YAClC,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;YAC1B,sEAAsE;YACtE,0DAA0D;YAC1D,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC;SACnD,EACD,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAClF,CAAC,CAAC,KAAK,CAAC,IAAI;gBACZ,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,CAAC;gBACN,EAAE,EAAE,KAAK,KAAK,IAAI;gBAClB,MAAM;gBACN,MAAM;gBACN,QAAQ;aACT,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read one executable's `--version` first line.
|
|
3
|
+
* Returns undefined when the executable rejects the flag; throws only when it cannot be spawned.
|
|
4
|
+
*/
|
|
5
|
+
export declare function readExecutableVersion(executable: string): Promise<string | undefined>;
|
|
6
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/version.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU3F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { runExecutable } from "./run.js";
|
|
2
|
+
/**
|
|
3
|
+
* Read one executable's `--version` first line.
|
|
4
|
+
* Returns undefined when the executable rejects the flag; throws only when it cannot be spawned.
|
|
5
|
+
*/
|
|
6
|
+
export async function readExecutableVersion(executable) {
|
|
7
|
+
const result = await runExecutable(executable, ["--version"]);
|
|
8
|
+
if (!result.ok && result.exitCode === null) {
|
|
9
|
+
throw new Error(`Failed to run ${executable} --version`);
|
|
10
|
+
}
|
|
11
|
+
if (!result.ok) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const line = result.stdout.trim().split(/\r?\n/u)[0];
|
|
15
|
+
return line === undefined || line.length === 0 ? undefined : line;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/shared/executable/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC5D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FailureClass } from "../contracts/session.js";
|
|
2
|
+
/**
|
|
3
|
+
* Best-effort classification of vendor error prose. The patterns are pinned
|
|
4
|
+
* by the vendor snapshot tests — when a runtime changes its wording, the
|
|
5
|
+
* snapshot moves and this table gets a conscious update.
|
|
6
|
+
*/
|
|
7
|
+
export declare function classifyFailure(reason: string): FailureClass;
|
|
8
|
+
//# sourceMappingURL=failure-class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-class.d.ts","sourceRoot":"","sources":["../../src/shared/failure-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAiB5D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Best-effort classification of vendor error prose. The patterns are pinned
|
|
3
|
+
* by the vendor snapshot tests — when a runtime changes its wording, the
|
|
4
|
+
* snapshot moves and this table gets a conscious update.
|
|
5
|
+
*/
|
|
6
|
+
export function classifyFailure(reason) {
|
|
7
|
+
if (/\b401\b|authentication|unauthorized|invalid (?:x-)?api[- ]?key|log(?:ged)? ?in/iu.test(reason)) {
|
|
8
|
+
return "auth";
|
|
9
|
+
}
|
|
10
|
+
if (/\b429\b|rate.?limit|quota|usage limit/iu.test(reason)) {
|
|
11
|
+
return "quota";
|
|
12
|
+
}
|
|
13
|
+
if (/\b400\b|invalid_request/iu.test(reason)) {
|
|
14
|
+
return "invalid_request";
|
|
15
|
+
}
|
|
16
|
+
if (/\b529\b|\b503\b|overloaded/iu.test(reason)) {
|
|
17
|
+
return "overloaded";
|
|
18
|
+
}
|
|
19
|
+
if (/\b\d{3}\b|error/iu.test(reason)) {
|
|
20
|
+
return "provider";
|
|
21
|
+
}
|
|
22
|
+
return "unknown";
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=failure-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-class.js","sourceRoot":"","sources":["../../src/shared/failure-class.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,kFAAkF,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpG,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,yCAAyC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InstallationProbe } from "../contracts/installation.js";
|
|
2
|
+
/**
|
|
3
|
+
* An installation probed from an executable: the env var pins one candidate
|
|
4
|
+
* exclusively; otherwise the command name and fallbacks are tried in order and
|
|
5
|
+
* the first usable candidate wins. When readiness args are given, a candidate
|
|
6
|
+
* must run them successfully or the probe moves on to the next one.
|
|
7
|
+
*/
|
|
8
|
+
export declare function executableInstallation(envVar: string, command: string, fallbacks?: readonly string[], readiness?: readonly string[]): InstallationProbe;
|
|
9
|
+
//# sourceMappingURL=installation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/shared/installation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,8BAA8B,CAAC;AAmB5F;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,SAAS,MAAM,EAAO,EACjC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAC5B,iBAAiB,CAgCnB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readExecutableVersion, resolveExecutable, runExecutable } from "./executable/index.js";
|
|
3
|
+
// An entry with a path separator is a pinned path: it must exist as given and
|
|
4
|
+
// never silently falls back to a different binary. A bare name resolves on PATH.
|
|
5
|
+
function usable(entry) {
|
|
6
|
+
if (entry.includes("/") || entry.includes("\\")) {
|
|
7
|
+
return existsSync(entry) ? entry : null;
|
|
8
|
+
}
|
|
9
|
+
return resolveExecutable(entry);
|
|
10
|
+
}
|
|
11
|
+
async function versionSnapshot(command) {
|
|
12
|
+
const version = await readExecutableVersion(command);
|
|
13
|
+
return version === undefined
|
|
14
|
+
? { kind: "available", via: "executable", command }
|
|
15
|
+
: { kind: "available", via: "executable", command, version };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* An installation probed from an executable: the env var pins one candidate
|
|
19
|
+
* exclusively; otherwise the command name and fallbacks are tried in order and
|
|
20
|
+
* the first usable candidate wins. When readiness args are given, a candidate
|
|
21
|
+
* must run them successfully or the probe moves on to the next one.
|
|
22
|
+
*/
|
|
23
|
+
export function executableInstallation(envVar, command, fallbacks = [], readiness) {
|
|
24
|
+
return async () => {
|
|
25
|
+
const pinned = process.env[envVar];
|
|
26
|
+
const entries = pinned !== undefined && pinned !== "" ? [pinned] : [command, ...fallbacks];
|
|
27
|
+
const found = [];
|
|
28
|
+
for (const entry of entries) {
|
|
29
|
+
const candidate = usable(entry);
|
|
30
|
+
if (candidate !== null && !found.includes(candidate)) {
|
|
31
|
+
found.push(candidate);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const [first] = found;
|
|
35
|
+
if (first === undefined) {
|
|
36
|
+
return { kind: "not_found" };
|
|
37
|
+
}
|
|
38
|
+
if (readiness === undefined) {
|
|
39
|
+
return versionSnapshot(first);
|
|
40
|
+
}
|
|
41
|
+
for (const candidate of found) {
|
|
42
|
+
const result = await runExecutable(candidate, readiness);
|
|
43
|
+
if (!result.ok && result.exitCode === null) {
|
|
44
|
+
throw new Error(`Failed to run ${candidate} ${readiness.join(" ")}`);
|
|
45
|
+
}
|
|
46
|
+
if (result.ok) {
|
|
47
|
+
return versionSnapshot(candidate);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return { kind: "unsupported", reason: `${readiness.join(" ")} failed` };
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=installation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/shared/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEhG,8EAA8E;AAC9E,iFAAiF;AACjF,SAAS,MAAM,CAAC,KAAa;IAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE;QACnD,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,OAAe,EACf,YAA+B,EAAE,EACjC,SAA6B;IAE7B,OAAO,KAAK,IAAmC,EAAE;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;QAE3F,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instant.d.ts","sourceRoot":"","sources":["../../src/shared/instant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instant.js","sourceRoot":"","sources":["../../src/shared/instant.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,kBAAkB,CAAC,KAAW;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { UtcInstant } from "../contracts/account-usage.js";
|
|
2
|
+
/** Narrowing helpers for untyped JSON coming from native runtime surfaces. */
|
|
3
|
+
export type JsonRecord = Record<string, unknown>;
|
|
4
|
+
/** Parse JSON text; undefined (never a legal JSON value) signals invalid JSON. */
|
|
5
|
+
export declare function parseJson(text: string): unknown;
|
|
6
|
+
export declare function asRecord(value: unknown): JsonRecord | null;
|
|
7
|
+
export declare function asNumber(value: unknown): number | null;
|
|
8
|
+
/** Narrow an epoch timestamp in seconds or milliseconds to an ISO-8601 instant. */
|
|
9
|
+
export declare function asEpochInstant(value: unknown): UtcInstant | null;
|
|
10
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/shared/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,8EAA8E;AAC9E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAI1D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAEtD;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAOhE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { utcInstantFromDate } from "./instant.js";
|
|
2
|
+
/** Parse JSON text; undefined (never a legal JSON value) signals invalid JSON. */
|
|
3
|
+
export function parseJson(text) {
|
|
4
|
+
try {
|
|
5
|
+
const value = JSON.parse(text);
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function asRecord(value) {
|
|
13
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
14
|
+
? Object.fromEntries(Object.entries(value))
|
|
15
|
+
: null;
|
|
16
|
+
}
|
|
17
|
+
export function asNumber(value) {
|
|
18
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
19
|
+
}
|
|
20
|
+
/** Narrow an epoch timestamp in seconds or milliseconds to an ISO-8601 instant. */
|
|
21
|
+
export function asEpochInstant(value) {
|
|
22
|
+
const raw = asNumber(value);
|
|
23
|
+
if (raw === null) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const instant = new Date(raw >= 1_000_000_000_000 ? raw : raw * 1000);
|
|
27
|
+
return utcInstantFromDate(instant);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/shared/json.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKlD,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACtE,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AdapterSession, Session } from "../contracts/session.js";
|
|
2
|
+
/**
|
|
3
|
+
* Derive the API face of a Session from what the adapter built. Method-style
|
|
4
|
+
* so consumers discover the policy in autocomplete instead of hunting for a
|
|
5
|
+
* free function; one implementation instead of one per adapter.
|
|
6
|
+
*/
|
|
7
|
+
export declare function sealSession(adapterSession: AdapterSession): Session;
|
|
8
|
+
//# sourceMappingURL=seal-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seal-session.d.ts","sourceRoot":"","sources":["../../src/shared/seal-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EAGR,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAiBnE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive the API face of a Session from what the adapter built. Method-style
|
|
3
|
+
* so consumers discover the policy in autocomplete instead of hunting for a
|
|
4
|
+
* free function; one implementation instead of one per adapter.
|
|
5
|
+
*/
|
|
6
|
+
export function sealSession(adapterSession) {
|
|
7
|
+
const steerOrQueue = async (turn, input) => {
|
|
8
|
+
let reason = "runtime cannot steer";
|
|
9
|
+
if (turn.steer !== undefined) {
|
|
10
|
+
const steered = await turn.steer(input);
|
|
11
|
+
if (steered.kind === "accepted") {
|
|
12
|
+
return { landed: "steered" };
|
|
13
|
+
}
|
|
14
|
+
({ reason } = steered);
|
|
15
|
+
}
|
|
16
|
+
if (adapterSession.queue !== undefined) {
|
|
17
|
+
await adapterSession.queue.add(input);
|
|
18
|
+
return { landed: "queued" };
|
|
19
|
+
}
|
|
20
|
+
return { landed: "rejected", reason };
|
|
21
|
+
};
|
|
22
|
+
return { ...adapterSession, steerOrQueue };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=seal-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seal-session.js","sourceRoot":"","sources":["../../src/shared/seal-session.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,cAA8B;IACxD,MAAM,YAAY,GAAG,KAAK,EAAE,IAAU,EAAE,KAAa,EAA+B,EAAE;QACpF,IAAI,MAAM,GAAG,sBAAsB,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC/B,CAAC;YACD,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC,CAAC;IACF,OAAO,EAAE,GAAG,cAAc,EAAE,YAAY,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SessionEventBody, SessionObserver, TurnOutcome, Unsubscribe } from "../contracts/session.js";
|
|
2
|
+
/**
|
|
3
|
+
* Shared session mechanics every adapter needs: envelope stamping (seq,
|
|
4
|
+
* receivedAt), synchronous never-awaited observer fan-out with error
|
|
5
|
+
* swallowing, the single-active-turn gate, and settle-exactly-once turn
|
|
6
|
+
* handles. Adapters keep only runtime-specific pumping and control.
|
|
7
|
+
*/
|
|
8
|
+
export interface SessionKernel {
|
|
9
|
+
readonly sessionId: string;
|
|
10
|
+
subscribe(observer: SessionObserver): Unsubscribe;
|
|
11
|
+
/** Null while another turn is active — the contract's busy invariant. */
|
|
12
|
+
begin(): KernelTurn | null;
|
|
13
|
+
active(): KernelTurn | null;
|
|
14
|
+
}
|
|
15
|
+
export interface KernelTurn {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly outcome: Promise<TurnOutcome>;
|
|
18
|
+
settled(): boolean;
|
|
19
|
+
/** Stamps the envelope and fans out; ignored after the turn settled. */
|
|
20
|
+
emit(body: SessionEventBody): void;
|
|
21
|
+
/** Emits turn_ended and resolves the outcome exactly once. */
|
|
22
|
+
settle(outcome: TurnOutcome): void;
|
|
23
|
+
}
|
|
24
|
+
export declare function createSessionKernel(sessionId?: string): SessionKernel;
|
|
25
|
+
//# sourceMappingURL=session-kernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-kernel.d.ts","sourceRoot":"","sources":["../../src/shared/session-kernel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAAC;IAClD,yEAAyE;IACzE,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC;IAC3B,MAAM,IAAI,UAAU,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC;IACnB,wEAAwE;IACxE,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,8DAA8D;IAC9D,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,GAAE,MAAqB,GAAG,aAAa,CA+DnF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
export function createSessionKernel(sessionId = randomUUID()) {
|
|
3
|
+
const observers = new Set();
|
|
4
|
+
let seq = 0;
|
|
5
|
+
let activeTurn = null;
|
|
6
|
+
const fanOut = (turnId, body) => {
|
|
7
|
+
const event = {
|
|
8
|
+
sessionId,
|
|
9
|
+
turnId,
|
|
10
|
+
seq,
|
|
11
|
+
receivedAt: Date.now(),
|
|
12
|
+
...body,
|
|
13
|
+
};
|
|
14
|
+
seq += 1;
|
|
15
|
+
for (const observer of observers) {
|
|
16
|
+
try {
|
|
17
|
+
observer(event);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Observers are a side-tap; their failures must not touch the run.
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const begin = () => {
|
|
25
|
+
if (activeTurn !== null && !activeTurn.settled()) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const id = randomUUID();
|
|
29
|
+
let isSettled = false;
|
|
30
|
+
const { promise: outcome, resolve: resolveOutcome } = Promise.withResolvers();
|
|
31
|
+
const turn = {
|
|
32
|
+
id,
|
|
33
|
+
outcome,
|
|
34
|
+
settled: () => isSettled,
|
|
35
|
+
emit(body) {
|
|
36
|
+
if (!isSettled) {
|
|
37
|
+
fanOut(id, body);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
settle(result) {
|
|
41
|
+
if (!isSettled) {
|
|
42
|
+
fanOut(id, { kind: "turn_ended", outcome: result });
|
|
43
|
+
isSettled = true;
|
|
44
|
+
resolveOutcome(result);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
activeTurn = turn;
|
|
49
|
+
fanOut(id, { kind: "turn_started" });
|
|
50
|
+
return turn;
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
sessionId,
|
|
54
|
+
subscribe(observer) {
|
|
55
|
+
observers.add(observer);
|
|
56
|
+
return () => {
|
|
57
|
+
observers.delete(observer);
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
begin,
|
|
61
|
+
active: () => (activeTurn !== null && !activeTurn.settled() ? activeTurn : null),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=session-kernel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-kernel.js","sourceRoot":"","sources":["../../src/shared/session-kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgCzC,MAAM,UAAU,mBAAmB,CAAC,YAAoB,UAAU,EAAE;IAClE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC7C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,UAAU,GAAsB,IAAI,CAAC;IAEzC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,IAAsB,EAAQ,EAAE;QAC9D,MAAM,KAAK,GAAG;YACZ,SAAS;YACT,MAAM;YACN,GAAG;YACH,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,GAAG,IAAI;SACR,CAAC;QACF,GAAG,IAAI,CAAC,CAAC;QACT,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,mEAAmE;YACrE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAsB,EAAE;QACpC,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,aAAa,EAAe,CAAC;QAC3F,MAAM,IAAI,GAAe;YACvB,EAAE;YACF,OAAO;YACP,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;YACxB,IAAI,CAAC,IAAI;gBACP,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,MAAM,CAAC,MAAM;gBACX,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;oBACpD,SAAS,GAAG,IAAI,CAAC;oBACjB,cAAc,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;SACF,CAAC;QACF,UAAU,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO;QACL,SAAS;QACT,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;QACD,KAAK;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;KACjF,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@botiverse/oar",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Provider-independent contracts for observing agent runtimes",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./observe": {
|
|
14
|
+
"types": "./dist/observe/index.d.ts",
|
|
15
|
+
"import": "./dist/observe/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md"
|
|
21
|
+
],
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=24.0.0"
|
|
27
|
+
},
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/botiverse/oar.git",
|
|
31
|
+
"directory": "packages/oar"
|
|
32
|
+
},
|
|
33
|
+
"license": "Apache-2.0",
|
|
34
|
+
"optionalDependencies": {
|
|
35
|
+
"@earendil-works/pi-coding-agent": "^0.84.2"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"cross-spawn": "^7.0.6"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/cross-spawn": "^6.0.6"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc -p tsconfig.build.json",
|
|
45
|
+
"typecheck": "tsc --noEmit"
|
|
46
|
+
}
|
|
47
|
+
}
|