@aigne/agent-runtime 1.12.0-beta.5
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.md +26 -0
- package/README.md +79 -0
- package/dist/agent-runners/ai-runner.cjs +133 -0
- package/dist/agent-runners/ai-runner.d.cts +33 -0
- package/dist/agent-runners/ai-runner.d.cts.map +1 -0
- package/dist/agent-runners/ai-runner.d.mts +33 -0
- package/dist/agent-runners/ai-runner.d.mts.map +1 -0
- package/dist/agent-runners/ai-runner.mjs +134 -0
- package/dist/agent-runners/ai-runner.mjs.map +1 -0
- package/dist/agent-runners/ash-runner.cjs +272 -0
- package/dist/agent-runners/ash-runner.d.cts +30 -0
- package/dist/agent-runners/ash-runner.d.cts.map +1 -0
- package/dist/agent-runners/ash-runner.d.mts +30 -0
- package/dist/agent-runners/ash-runner.d.mts.map +1 -0
- package/dist/agent-runners/ash-runner.mjs +273 -0
- package/dist/agent-runners/ash-runner.mjs.map +1 -0
- package/dist/agent-runners/budget.cjs +71 -0
- package/dist/agent-runners/budget.d.cts +40 -0
- package/dist/agent-runners/budget.d.cts.map +1 -0
- package/dist/agent-runners/budget.d.mts +40 -0
- package/dist/agent-runners/budget.d.mts.map +1 -0
- package/dist/agent-runners/budget.mjs +67 -0
- package/dist/agent-runners/budget.mjs.map +1 -0
- package/dist/agent-runners/code-runner.cjs +61 -0
- package/dist/agent-runners/code-runner.mjs +61 -0
- package/dist/agent-runners/code-runner.mjs.map +1 -0
- package/dist/agent-runners/env-whitelist.cjs +36 -0
- package/dist/agent-runners/env-whitelist.d.cts +5 -0
- package/dist/agent-runners/env-whitelist.d.cts.map +1 -0
- package/dist/agent-runners/env-whitelist.d.mts +5 -0
- package/dist/agent-runners/env-whitelist.d.mts.map +1 -0
- package/dist/agent-runners/env-whitelist.mjs +36 -0
- package/dist/agent-runners/env-whitelist.mjs.map +1 -0
- package/dist/agent-runners/guide-rails.cjs +47 -0
- package/dist/agent-runners/guide-rails.d.cts +16 -0
- package/dist/agent-runners/guide-rails.d.cts.map +1 -0
- package/dist/agent-runners/guide-rails.d.mts +16 -0
- package/dist/agent-runners/guide-rails.d.mts.map +1 -0
- package/dist/agent-runners/guide-rails.mjs +48 -0
- package/dist/agent-runners/guide-rails.mjs.map +1 -0
- package/dist/agent-runners/hook-channel.cjs +55 -0
- package/dist/agent-runners/hook-channel.d.cts +38 -0
- package/dist/agent-runners/hook-channel.d.cts.map +1 -0
- package/dist/agent-runners/hook-channel.d.mts +38 -0
- package/dist/agent-runners/hook-channel.d.mts.map +1 -0
- package/dist/agent-runners/hook-channel.mjs +55 -0
- package/dist/agent-runners/hook-channel.mjs.map +1 -0
- package/dist/agent-runners/hooks.cjs +107 -0
- package/dist/agent-runners/hooks.d.cts +41 -0
- package/dist/agent-runners/hooks.d.cts.map +1 -0
- package/dist/agent-runners/hooks.d.mts +41 -0
- package/dist/agent-runners/hooks.d.mts.map +1 -0
- package/dist/agent-runners/hooks.mjs +107 -0
- package/dist/agent-runners/hooks.mjs.map +1 -0
- package/dist/agent-runners/memory-afs.cjs +342 -0
- package/dist/agent-runners/memory-afs.d.cts +221 -0
- package/dist/agent-runners/memory-afs.d.cts.map +1 -0
- package/dist/agent-runners/memory-afs.d.mts +221 -0
- package/dist/agent-runners/memory-afs.d.mts.map +1 -0
- package/dist/agent-runners/memory-afs.mjs +326 -0
- package/dist/agent-runners/memory-afs.mjs.map +1 -0
- package/dist/agent-runners/memory-archive.cjs +263 -0
- package/dist/agent-runners/memory-archive.d.cts +47 -0
- package/dist/agent-runners/memory-archive.d.cts.map +1 -0
- package/dist/agent-runners/memory-archive.d.mts +47 -0
- package/dist/agent-runners/memory-archive.d.mts.map +1 -0
- package/dist/agent-runners/memory-archive.mjs +257 -0
- package/dist/agent-runners/memory-archive.mjs.map +1 -0
- package/dist/agent-runners/orchestrator-runner.cjs +302 -0
- package/dist/agent-runners/orchestrator-runner.d.cts +23 -0
- package/dist/agent-runners/orchestrator-runner.d.cts.map +1 -0
- package/dist/agent-runners/orchestrator-runner.d.mts +23 -0
- package/dist/agent-runners/orchestrator-runner.d.mts.map +1 -0
- package/dist/agent-runners/orchestrator-runner.mjs +303 -0
- package/dist/agent-runners/orchestrator-runner.mjs.map +1 -0
- package/dist/agent-runners/orchestrator-state.cjs +68 -0
- package/dist/agent-runners/orchestrator-state.d.cts +23 -0
- package/dist/agent-runners/orchestrator-state.d.cts.map +1 -0
- package/dist/agent-runners/orchestrator-state.d.mts +23 -0
- package/dist/agent-runners/orchestrator-state.d.mts.map +1 -0
- package/dist/agent-runners/orchestrator-state.mjs +65 -0
- package/dist/agent-runners/orchestrator-state.mjs.map +1 -0
- package/dist/agent-runners/retry.cjs +30 -0
- package/dist/agent-runners/retry.d.cts +13 -0
- package/dist/agent-runners/retry.d.cts.map +1 -0
- package/dist/agent-runners/retry.d.mts +13 -0
- package/dist/agent-runners/retry.d.mts.map +1 -0
- package/dist/agent-runners/retry.mjs +30 -0
- package/dist/agent-runners/retry.mjs.map +1 -0
- package/dist/agent-runners/scratchpad-afs.cjs +276 -0
- package/dist/agent-runners/scratchpad-afs.d.cts +103 -0
- package/dist/agent-runners/scratchpad-afs.d.cts.map +1 -0
- package/dist/agent-runners/scratchpad-afs.d.mts +103 -0
- package/dist/agent-runners/scratchpad-afs.d.mts.map +1 -0
- package/dist/agent-runners/scratchpad-afs.mjs +271 -0
- package/dist/agent-runners/scratchpad-afs.mjs.map +1 -0
- package/dist/agent-runners/stream-router.cjs +72 -0
- package/dist/agent-runners/stream-router.d.cts +22 -0
- package/dist/agent-runners/stream-router.d.cts.map +1 -0
- package/dist/agent-runners/stream-router.d.mts +22 -0
- package/dist/agent-runners/stream-router.d.mts.map +1 -0
- package/dist/agent-runners/stream-router.mjs +72 -0
- package/dist/agent-runners/stream-router.mjs.map +1 -0
- package/dist/agent-runners/system-prompt.cjs +35 -0
- package/dist/agent-runners/system-prompt.d.cts +17 -0
- package/dist/agent-runners/system-prompt.d.cts.map +1 -0
- package/dist/agent-runners/system-prompt.d.mts +17 -0
- package/dist/agent-runners/system-prompt.d.mts.map +1 -0
- package/dist/agent-runners/system-prompt.mjs +34 -0
- package/dist/agent-runners/system-prompt.mjs.map +1 -0
- package/dist/agent-runners/team-modes/aggregates.cjs +36 -0
- package/dist/agent-runners/team-modes/aggregates.mjs +35 -0
- package/dist/agent-runners/team-modes/aggregates.mjs.map +1 -0
- package/dist/agent-runners/team-modes/iterate.cjs +46 -0
- package/dist/agent-runners/team-modes/iterate.mjs +47 -0
- package/dist/agent-runners/team-modes/iterate.mjs.map +1 -0
- package/dist/agent-runners/team-modes/parallel.cjs +59 -0
- package/dist/agent-runners/team-modes/parallel.mjs +60 -0
- package/dist/agent-runners/team-modes/parallel.mjs.map +1 -0
- package/dist/agent-runners/team-modes/reflection.cjs +155 -0
- package/dist/agent-runners/team-modes/reflection.mjs +156 -0
- package/dist/agent-runners/team-modes/reflection.mjs.map +1 -0
- package/dist/agent-runners/team-modes/sequential.cjs +63 -0
- package/dist/agent-runners/team-modes/sequential.mjs +64 -0
- package/dist/agent-runners/team-modes/sequential.mjs.map +1 -0
- package/dist/agent-runners/team-modes/utils.cjs +39 -0
- package/dist/agent-runners/team-modes/utils.mjs +36 -0
- package/dist/agent-runners/team-modes/utils.mjs.map +1 -0
- package/dist/agent-runners/team-runner.cjs +277 -0
- package/dist/agent-runners/team-runner.d.cts +34 -0
- package/dist/agent-runners/team-runner.d.cts.map +1 -0
- package/dist/agent-runners/team-runner.d.mts +34 -0
- package/dist/agent-runners/team-runner.d.mts.map +1 -0
- package/dist/agent-runners/team-runner.mjs +278 -0
- package/dist/agent-runners/team-runner.mjs.map +1 -0
- package/dist/agent-runners/template-context.cjs +32 -0
- package/dist/agent-runners/template-context.d.cts +43 -0
- package/dist/agent-runners/template-context.d.cts.map +1 -0
- package/dist/agent-runners/template-context.d.mts +43 -0
- package/dist/agent-runners/template-context.d.mts.map +1 -0
- package/dist/agent-runners/template-context.mjs +33 -0
- package/dist/agent-runners/template-context.mjs.map +1 -0
- package/dist/index.cjs +123 -0
- package/dist/index.d.cts +29 -0
- package/dist/index.d.mts +29 -0
- package/dist/index.mjs +29 -0
- package/dist/program/agent-action.cjs +496 -0
- package/dist/program/agent-action.d.cts +42 -0
- package/dist/program/agent-action.d.cts.map +1 -0
- package/dist/program/agent-action.d.mts +42 -0
- package/dist/program/agent-action.d.mts.map +1 -0
- package/dist/program/agent-action.mjs +497 -0
- package/dist/program/agent-action.mjs.map +1 -0
- package/dist/program/agent-messages-tools.cjs +137 -0
- package/dist/program/agent-messages-tools.d.cts +59 -0
- package/dist/program/agent-messages-tools.d.cts.map +1 -0
- package/dist/program/agent-messages-tools.d.mts +59 -0
- package/dist/program/agent-messages-tools.d.mts.map +1 -0
- package/dist/program/agent-messages-tools.mjs +130 -0
- package/dist/program/agent-messages-tools.mjs.map +1 -0
- package/dist/program/agent-runner-registry.cjs +314 -0
- package/dist/program/agent-runner-registry.d.cts +52 -0
- package/dist/program/agent-runner-registry.d.cts.map +1 -0
- package/dist/program/agent-runner-registry.d.mts +52 -0
- package/dist/program/agent-runner-registry.d.mts.map +1 -0
- package/dist/program/agent-runner-registry.mjs +313 -0
- package/dist/program/agent-runner-registry.mjs.map +1 -0
- package/dist/program/agent-subscribe.cjs +72 -0
- package/dist/program/agent-subscribe.d.cts +18 -0
- package/dist/program/agent-subscribe.d.cts.map +1 -0
- package/dist/program/agent-subscribe.d.mts +18 -0
- package/dist/program/agent-subscribe.d.mts.map +1 -0
- package/dist/program/agent-subscribe.mjs +73 -0
- package/dist/program/agent-subscribe.mjs.map +1 -0
- package/dist/program/agent-tools.cjs +135 -0
- package/dist/program/agent-tools.d.cts +35 -0
- package/dist/program/agent-tools.d.cts.map +1 -0
- package/dist/program/agent-tools.d.mts +35 -0
- package/dist/program/agent-tools.d.mts.map +1 -0
- package/dist/program/agent-tools.mjs +136 -0
- package/dist/program/agent-tools.mjs.map +1 -0
- package/dist/program/manifest-nesting.cjs +57 -0
- package/dist/program/manifest-nesting.d.cts +13 -0
- package/dist/program/manifest-nesting.d.cts.map +1 -0
- package/dist/program/manifest-nesting.d.mts +13 -0
- package/dist/program/manifest-nesting.d.mts.map +1 -0
- package/dist/program/manifest-nesting.mjs +57 -0
- package/dist/program/manifest-nesting.mjs.map +1 -0
- package/dist/program/result-contract.cjs +55 -0
- package/dist/program/result-contract.d.cts +23 -0
- package/dist/program/result-contract.d.cts.map +1 -0
- package/dist/program/result-contract.d.mts +23 -0
- package/dist/program/result-contract.d.mts.map +1 -0
- package/dist/program/result-contract.mjs +51 -0
- package/dist/program/result-contract.mjs.map +1 -0
- package/dist/program/runner-error.cjs +71 -0
- package/dist/program/runner-error.d.cts +25 -0
- package/dist/program/runner-error.d.cts.map +1 -0
- package/dist/program/runner-error.d.mts +25 -0
- package/dist/program/runner-error.d.mts.map +1 -0
- package/dist/program/runner-error.mjs +72 -0
- package/dist/program/runner-error.mjs.map +1 -0
- package/dist/program/scoped-afs.cjs +538 -0
- package/dist/program/scoped-afs.d.cts +245 -0
- package/dist/program/scoped-afs.d.cts.map +1 -0
- package/dist/program/scoped-afs.d.mts +245 -0
- package/dist/program/scoped-afs.d.mts.map +1 -0
- package/dist/program/scoped-afs.mjs +531 -0
- package/dist/program/scoped-afs.mjs.map +1 -0
- package/dist/program/session-hierarchy.cjs +1 -0
- package/dist/program/session-hierarchy.d.cts +2 -0
- package/dist/program/session-hierarchy.d.mts +2 -0
- package/dist/program/session-hierarchy.mjs +3 -0
- package/dist/program/tool-discovery/ash-frontmatter.cjs +83 -0
- package/dist/program/tool-discovery/ash-frontmatter.d.cts +21 -0
- package/dist/program/tool-discovery/ash-frontmatter.d.cts.map +1 -0
- package/dist/program/tool-discovery/ash-frontmatter.d.mts +21 -0
- package/dist/program/tool-discovery/ash-frontmatter.d.mts.map +1 -0
- package/dist/program/tool-discovery/ash-frontmatter.mjs +84 -0
- package/dist/program/tool-discovery/ash-frontmatter.mjs.map +1 -0
- package/dist/program/tool-discovery/dot-path-resolver.cjs +60 -0
- package/dist/program/tool-discovery/dot-path-resolver.mjs +61 -0
- package/dist/program/tool-discovery/dot-path-resolver.mjs.map +1 -0
- package/dist/program/tool-discovery/skill-gate.cjs +36 -0
- package/dist/program/tool-discovery/skill-gate.d.cts +10 -0
- package/dist/program/tool-discovery/skill-gate.d.cts.map +1 -0
- package/dist/program/tool-discovery/skill-gate.d.mts +10 -0
- package/dist/program/tool-discovery/skill-gate.d.mts.map +1 -0
- package/dist/program/tool-discovery/skill-gate.mjs +35 -0
- package/dist/program/tool-discovery/skill-gate.mjs.map +1 -0
- package/dist/providers/basic/ash/dist/index.cjs +1809 -0
- package/dist/providers/basic/ash/dist/index.mjs +1807 -0
- package/dist/providers/basic/ash/dist/index.mjs.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/program/result-contract.ts
|
|
2
|
+
/**
|
|
3
|
+
* S8 — Result contract utilities.
|
|
4
|
+
*
|
|
5
|
+
* stripSubAgentMeta: separates _meta from a sub-agent result so the parent
|
|
6
|
+
* LLM only sees the result value, while _meta flows through onToolProgress.
|
|
7
|
+
*
|
|
8
|
+
* sanitizeScratchPath: removes absolute filesystem prefixes, keeping only the
|
|
9
|
+
* AFS-relative portion.
|
|
10
|
+
*
|
|
11
|
+
* sanitizeMetaEnv: redacts env var values, keeping only names.
|
|
12
|
+
*/
|
|
13
|
+
function stripSubAgentMeta(data) {
|
|
14
|
+
if (!data || typeof data !== "object" || !("_meta" in data)) return {
|
|
15
|
+
result: data,
|
|
16
|
+
meta: null
|
|
17
|
+
};
|
|
18
|
+
const d = data;
|
|
19
|
+
return {
|
|
20
|
+
result: d.result !== void 0 ? d.result : null,
|
|
21
|
+
meta: d._meta ?? null
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function isSubAgentResult(data) {
|
|
25
|
+
return !!data && typeof data === "object" && "_meta" in data;
|
|
26
|
+
}
|
|
27
|
+
function sanitizeScratchPath(raw) {
|
|
28
|
+
if (raw.startsWith("/instance/") || raw.startsWith("/modules/")) return raw;
|
|
29
|
+
for (const marker of ["/instance/", "/modules/"]) {
|
|
30
|
+
const idx = raw.indexOf(marker);
|
|
31
|
+
if (idx >= 0) return raw.slice(idx);
|
|
32
|
+
}
|
|
33
|
+
return "[redacted]";
|
|
34
|
+
}
|
|
35
|
+
function sanitizeMetaEnv(env) {
|
|
36
|
+
const safe = {};
|
|
37
|
+
for (const key of Object.keys(env)) safe[key] = "[redacted]";
|
|
38
|
+
return safe;
|
|
39
|
+
}
|
|
40
|
+
function isJsonSafe(value) {
|
|
41
|
+
try {
|
|
42
|
+
JSON.stringify(value);
|
|
43
|
+
return true;
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
export { isJsonSafe, isSubAgentResult, sanitizeMetaEnv, sanitizeScratchPath, stripSubAgentMeta };
|
|
51
|
+
//# sourceMappingURL=result-contract.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-contract.mjs","names":[],"sources":["../../src/program/result-contract.ts"],"sourcesContent":["/**\n * S8 — Result contract utilities.\n *\n * stripSubAgentMeta: separates _meta from a sub-agent result so the parent\n * LLM only sees the result value, while _meta flows through onToolProgress.\n *\n * sanitizeScratchPath: removes absolute filesystem prefixes, keeping only the\n * AFS-relative portion.\n *\n * sanitizeMetaEnv: redacts env var values, keeping only names.\n */\n\nexport function stripSubAgentMeta(data: unknown): {\n result: unknown;\n meta: Record<string, unknown> | null;\n} {\n if (!data || typeof data !== \"object\" || !(\"_meta\" in (data as Record<string, unknown>))) {\n return { result: data, meta: null };\n }\n const d = data as Record<string, unknown>;\n return {\n result: d.result !== undefined ? d.result : null,\n meta: (d._meta as Record<string, unknown>) ?? null,\n };\n}\n\nexport function isSubAgentResult(data: unknown): boolean {\n return !!data && typeof data === \"object\" && \"_meta\" in (data as Record<string, unknown>);\n}\n\nexport function sanitizeScratchPath(raw: string): string {\n if (raw.startsWith(\"/instance/\") || raw.startsWith(\"/modules/\")) return raw;\n for (const marker of [\"/instance/\", \"/modules/\"]) {\n const idx = raw.indexOf(marker);\n if (idx >= 0) return raw.slice(idx);\n }\n return \"[redacted]\";\n}\n\nexport function sanitizeMetaEnv(env: Record<string, unknown>): Record<string, string> {\n const safe: Record<string, string> = {};\n for (const key of Object.keys(env)) {\n safe[key] = \"[redacted]\";\n }\n return safe;\n}\n\nexport function isJsonSafe(value: unknown): boolean {\n try {\n JSON.stringify(value);\n return true;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAYA,SAAgB,kBAAkB,MAGhC;AACA,KAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,EAAE,WAAY,MACrD,QAAO;EAAE,QAAQ;EAAM,MAAM;EAAM;CAErC,MAAM,IAAI;AACV,QAAO;EACL,QAAQ,EAAE,WAAW,SAAY,EAAE,SAAS;EAC5C,MAAO,EAAE,SAAqC;EAC/C;;AAGH,SAAgB,iBAAiB,MAAwB;AACvD,QAAO,CAAC,CAAC,QAAQ,OAAO,SAAS,YAAY,WAAY;;AAG3D,SAAgB,oBAAoB,KAAqB;AACvD,KAAI,IAAI,WAAW,aAAa,IAAI,IAAI,WAAW,YAAY,CAAE,QAAO;AACxE,MAAK,MAAM,UAAU,CAAC,cAAc,YAAY,EAAE;EAChD,MAAM,MAAM,IAAI,QAAQ,OAAO;AAC/B,MAAI,OAAO,EAAG,QAAO,IAAI,MAAM,IAAI;;AAErC,QAAO;;AAGT,SAAgB,gBAAgB,KAAsD;CACpF,MAAM,OAA+B,EAAE;AACvC,MAAK,MAAM,OAAO,OAAO,KAAK,IAAI,CAChC,MAAK,OAAO;AAEd,QAAO;;AAGT,SAAgB,WAAW,OAAyB;AAClD,KAAI;AACF,OAAK,UAAU,MAAM;AACrB,SAAO;SACD;AACN,SAAO"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const require_result_contract = require('./result-contract.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/program/runner-error.ts
|
|
4
|
+
/**
|
|
5
|
+
* B2 — Normalize runner error shapes into `{ code, message, ...details }`.
|
|
6
|
+
*
|
|
7
|
+
* Runners surface failures two ways:
|
|
8
|
+
* 1. Return `{ success: false, error }` — structured shape varies per runner
|
|
9
|
+
* 2. Throw an Error — message often carries a `CODE: description` prefix
|
|
10
|
+
*
|
|
11
|
+
* Downstream consumers (MCP, LLM tool shim, E2E harness) expect:
|
|
12
|
+
* - `code`: SCREAMING_SNAKE string
|
|
13
|
+
* - `message`: human-readable string
|
|
14
|
+
* - extra JSON-safe detail fields preserved (member, path, depth, max, …)
|
|
15
|
+
*/
|
|
16
|
+
const MAX_MESSAGE_LENGTH = 2048;
|
|
17
|
+
const STRUCTURED_CODE_RE = /^([A-Z][A-Z0-9_]{2,63}):\s*/;
|
|
18
|
+
function truncate(s) {
|
|
19
|
+
return s.length > MAX_MESSAGE_LENGTH ? `${s.slice(0, MAX_MESSAGE_LENGTH - 1)}…` : s;
|
|
20
|
+
}
|
|
21
|
+
function extractCodeFromMessage(message) {
|
|
22
|
+
const m = STRUCTURED_CODE_RE.exec(message);
|
|
23
|
+
return m ? m[1] : "RUNNER_ERROR";
|
|
24
|
+
}
|
|
25
|
+
function normalizeFromString(raw) {
|
|
26
|
+
return {
|
|
27
|
+
code: extractCodeFromMessage(raw),
|
|
28
|
+
message: truncate(raw)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function attachDepthAndMax(err, message) {
|
|
32
|
+
if (err.code !== "MAX_SPAWN_DEPTH_EXCEEDED") return err;
|
|
33
|
+
const depthMatch = message.match(/depth (\d+)/);
|
|
34
|
+
const maxMatch = message.match(/max (\d+)/);
|
|
35
|
+
if (depthMatch) err.depth = Number(depthMatch[1]);
|
|
36
|
+
if (maxMatch) err.max = Number(maxMatch[1]);
|
|
37
|
+
return err;
|
|
38
|
+
}
|
|
39
|
+
function normalizeFromErrorInstance(err) {
|
|
40
|
+
return attachDepthAndMax(normalizeFromString(err.message), err.message);
|
|
41
|
+
}
|
|
42
|
+
function normalizeFromObject(obj) {
|
|
43
|
+
const rawCode = obj.code;
|
|
44
|
+
const rawMsg = obj.message;
|
|
45
|
+
const out = {
|
|
46
|
+
code: typeof rawCode === "string" && STRUCTURED_CODE_RE.test(`${rawCode}:`) ? rawCode : "RUNNER_ERROR",
|
|
47
|
+
message: typeof rawMsg === "string" && rawMsg.length > 0 ? truncate(rawMsg) : "(no message)"
|
|
48
|
+
};
|
|
49
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
50
|
+
if (k === "code" || k === "message") continue;
|
|
51
|
+
if (typeof v === "function" || typeof v === "symbol") continue;
|
|
52
|
+
if (!require_result_contract.isJsonSafe(v)) continue;
|
|
53
|
+
out[k] = v;
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Coerce any error-ish value into the normalized shape.
|
|
59
|
+
*/
|
|
60
|
+
function normalizeRunnerError(err) {
|
|
61
|
+
if (err instanceof Error) return normalizeFromErrorInstance(err);
|
|
62
|
+
if (typeof err === "string") return normalizeFromString(err);
|
|
63
|
+
if (err && typeof err === "object") return normalizeFromObject(err);
|
|
64
|
+
return {
|
|
65
|
+
code: "RUNNER_ERROR",
|
|
66
|
+
message: "Unknown error"
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
exports.normalizeRunnerError = normalizeRunnerError;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/program/runner-error.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* B2 — Normalize runner error shapes into `{ code, message, ...details }`.
|
|
4
|
+
*
|
|
5
|
+
* Runners surface failures two ways:
|
|
6
|
+
* 1. Return `{ success: false, error }` — structured shape varies per runner
|
|
7
|
+
* 2. Throw an Error — message often carries a `CODE: description` prefix
|
|
8
|
+
*
|
|
9
|
+
* Downstream consumers (MCP, LLM tool shim, E2E harness) expect:
|
|
10
|
+
* - `code`: SCREAMING_SNAKE string
|
|
11
|
+
* - `message`: human-readable string
|
|
12
|
+
* - extra JSON-safe detail fields preserved (member, path, depth, max, …)
|
|
13
|
+
*/
|
|
14
|
+
interface NormalizedRunnerError {
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Coerce any error-ish value into the normalized shape.
|
|
21
|
+
*/
|
|
22
|
+
declare function normalizeRunnerError(err: unknown): NormalizedRunnerError;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { NormalizedRunnerError, normalizeRunnerError };
|
|
25
|
+
//# sourceMappingURL=runner-error.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-error.d.cts","names":[],"sources":["../../src/program/runner-error.ts"],"mappings":";;AAmBA;;;;;;;;;AAyDA;;UAzDiB,qBAAA;EACf,IAAA;EACA,OAAA;EAAA,CACC,GAAA;AAAA;;;;iBAsDa,oBAAA,CAAqB,GAAA,YAAe,qBAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/program/runner-error.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* B2 — Normalize runner error shapes into `{ code, message, ...details }`.
|
|
4
|
+
*
|
|
5
|
+
* Runners surface failures two ways:
|
|
6
|
+
* 1. Return `{ success: false, error }` — structured shape varies per runner
|
|
7
|
+
* 2. Throw an Error — message often carries a `CODE: description` prefix
|
|
8
|
+
*
|
|
9
|
+
* Downstream consumers (MCP, LLM tool shim, E2E harness) expect:
|
|
10
|
+
* - `code`: SCREAMING_SNAKE string
|
|
11
|
+
* - `message`: human-readable string
|
|
12
|
+
* - extra JSON-safe detail fields preserved (member, path, depth, max, …)
|
|
13
|
+
*/
|
|
14
|
+
interface NormalizedRunnerError {
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Coerce any error-ish value into the normalized shape.
|
|
21
|
+
*/
|
|
22
|
+
declare function normalizeRunnerError(err: unknown): NormalizedRunnerError;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { NormalizedRunnerError, normalizeRunnerError };
|
|
25
|
+
//# sourceMappingURL=runner-error.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-error.d.mts","names":[],"sources":["../../src/program/runner-error.ts"],"mappings":";;AAmBA;;;;;;;;;AAyDA;;UAzDiB,qBAAA;EACf,IAAA;EACA,OAAA;EAAA,CACC,GAAA;AAAA;;;;iBAsDa,oBAAA,CAAqB,GAAA,YAAe,qBAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { isJsonSafe } from "./result-contract.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/program/runner-error.ts
|
|
4
|
+
/**
|
|
5
|
+
* B2 — Normalize runner error shapes into `{ code, message, ...details }`.
|
|
6
|
+
*
|
|
7
|
+
* Runners surface failures two ways:
|
|
8
|
+
* 1. Return `{ success: false, error }` — structured shape varies per runner
|
|
9
|
+
* 2. Throw an Error — message often carries a `CODE: description` prefix
|
|
10
|
+
*
|
|
11
|
+
* Downstream consumers (MCP, LLM tool shim, E2E harness) expect:
|
|
12
|
+
* - `code`: SCREAMING_SNAKE string
|
|
13
|
+
* - `message`: human-readable string
|
|
14
|
+
* - extra JSON-safe detail fields preserved (member, path, depth, max, …)
|
|
15
|
+
*/
|
|
16
|
+
const MAX_MESSAGE_LENGTH = 2048;
|
|
17
|
+
const STRUCTURED_CODE_RE = /^([A-Z][A-Z0-9_]{2,63}):\s*/;
|
|
18
|
+
function truncate(s) {
|
|
19
|
+
return s.length > MAX_MESSAGE_LENGTH ? `${s.slice(0, MAX_MESSAGE_LENGTH - 1)}…` : s;
|
|
20
|
+
}
|
|
21
|
+
function extractCodeFromMessage(message) {
|
|
22
|
+
const m = STRUCTURED_CODE_RE.exec(message);
|
|
23
|
+
return m ? m[1] : "RUNNER_ERROR";
|
|
24
|
+
}
|
|
25
|
+
function normalizeFromString(raw) {
|
|
26
|
+
return {
|
|
27
|
+
code: extractCodeFromMessage(raw),
|
|
28
|
+
message: truncate(raw)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function attachDepthAndMax(err, message) {
|
|
32
|
+
if (err.code !== "MAX_SPAWN_DEPTH_EXCEEDED") return err;
|
|
33
|
+
const depthMatch = message.match(/depth (\d+)/);
|
|
34
|
+
const maxMatch = message.match(/max (\d+)/);
|
|
35
|
+
if (depthMatch) err.depth = Number(depthMatch[1]);
|
|
36
|
+
if (maxMatch) err.max = Number(maxMatch[1]);
|
|
37
|
+
return err;
|
|
38
|
+
}
|
|
39
|
+
function normalizeFromErrorInstance(err) {
|
|
40
|
+
return attachDepthAndMax(normalizeFromString(err.message), err.message);
|
|
41
|
+
}
|
|
42
|
+
function normalizeFromObject(obj) {
|
|
43
|
+
const rawCode = obj.code;
|
|
44
|
+
const rawMsg = obj.message;
|
|
45
|
+
const out = {
|
|
46
|
+
code: typeof rawCode === "string" && STRUCTURED_CODE_RE.test(`${rawCode}:`) ? rawCode : "RUNNER_ERROR",
|
|
47
|
+
message: typeof rawMsg === "string" && rawMsg.length > 0 ? truncate(rawMsg) : "(no message)"
|
|
48
|
+
};
|
|
49
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
50
|
+
if (k === "code" || k === "message") continue;
|
|
51
|
+
if (typeof v === "function" || typeof v === "symbol") continue;
|
|
52
|
+
if (!isJsonSafe(v)) continue;
|
|
53
|
+
out[k] = v;
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Coerce any error-ish value into the normalized shape.
|
|
59
|
+
*/
|
|
60
|
+
function normalizeRunnerError(err) {
|
|
61
|
+
if (err instanceof Error) return normalizeFromErrorInstance(err);
|
|
62
|
+
if (typeof err === "string") return normalizeFromString(err);
|
|
63
|
+
if (err && typeof err === "object") return normalizeFromObject(err);
|
|
64
|
+
return {
|
|
65
|
+
code: "RUNNER_ERROR",
|
|
66
|
+
message: "Unknown error"
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
export { normalizeRunnerError };
|
|
72
|
+
//# sourceMappingURL=runner-error.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-error.mjs","names":[],"sources":["../../src/program/runner-error.ts"],"sourcesContent":["/**\n * B2 — Normalize runner error shapes into `{ code, message, ...details }`.\n *\n * Runners surface failures two ways:\n * 1. Return `{ success: false, error }` — structured shape varies per runner\n * 2. Throw an Error — message often carries a `CODE: description` prefix\n *\n * Downstream consumers (MCP, LLM tool shim, E2E harness) expect:\n * - `code`: SCREAMING_SNAKE string\n * - `message`: human-readable string\n * - extra JSON-safe detail fields preserved (member, path, depth, max, …)\n */\n\nimport { isJsonSafe } from \"./result-contract.js\";\n\nconst MAX_MESSAGE_LENGTH = 2048;\n// A code looks like SCREAMING_SNAKE at start of string, terminated by \":\".\nconst STRUCTURED_CODE_RE = /^([A-Z][A-Z0-9_]{2,63}):\\s*/;\n\nexport interface NormalizedRunnerError {\n code: string;\n message: string;\n [key: string]: unknown;\n}\n\nfunction truncate(s: string): string {\n return s.length > MAX_MESSAGE_LENGTH ? `${s.slice(0, MAX_MESSAGE_LENGTH - 1)}…` : s;\n}\n\nfunction extractCodeFromMessage(message: string): string {\n const m = STRUCTURED_CODE_RE.exec(message);\n return m ? m[1]! : \"RUNNER_ERROR\";\n}\n\nfunction normalizeFromString(raw: string): NormalizedRunnerError {\n return { code: extractCodeFromMessage(raw), message: truncate(raw) };\n}\n\nfunction attachDepthAndMax(err: NormalizedRunnerError, message: string): NormalizedRunnerError {\n if (err.code !== \"MAX_SPAWN_DEPTH_EXCEEDED\") return err;\n const depthMatch = message.match(/depth (\\d+)/);\n const maxMatch = message.match(/max (\\d+)/);\n if (depthMatch) err.depth = Number(depthMatch[1]);\n if (maxMatch) err.max = Number(maxMatch[1]);\n return err;\n}\n\nfunction normalizeFromErrorInstance(err: Error): NormalizedRunnerError {\n const shaped = normalizeFromString(err.message);\n return attachDepthAndMax(shaped, err.message);\n}\n\nfunction normalizeFromObject(obj: Record<string, unknown>): NormalizedRunnerError {\n const rawCode = obj.code;\n const rawMsg = obj.message;\n\n const code =\n typeof rawCode === \"string\" && STRUCTURED_CODE_RE.test(`${rawCode}:`)\n ? rawCode\n : \"RUNNER_ERROR\";\n const message =\n typeof rawMsg === \"string\" && rawMsg.length > 0 ? truncate(rawMsg) : \"(no message)\";\n\n const out: NormalizedRunnerError = { code, message };\n for (const [k, v] of Object.entries(obj)) {\n if (k === \"code\" || k === \"message\") continue;\n if (typeof v === \"function\" || typeof v === \"symbol\") continue;\n if (!isJsonSafe(v)) continue;\n out[k] = v;\n }\n return out;\n}\n\n/**\n * Coerce any error-ish value into the normalized shape.\n */\nexport function normalizeRunnerError(err: unknown): NormalizedRunnerError {\n if (err instanceof Error) return normalizeFromErrorInstance(err);\n if (typeof err === \"string\") return normalizeFromString(err);\n if (err && typeof err === \"object\") return normalizeFromObject(err as Record<string, unknown>);\n return { code: \"RUNNER_ERROR\", message: \"Unknown error\" };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAM,qBAAqB;AAE3B,MAAM,qBAAqB;AAQ3B,SAAS,SAAS,GAAmB;AACnC,QAAO,EAAE,SAAS,qBAAqB,GAAG,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAC,KAAK;;AAGpF,SAAS,uBAAuB,SAAyB;CACvD,MAAM,IAAI,mBAAmB,KAAK,QAAQ;AAC1C,QAAO,IAAI,EAAE,KAAM;;AAGrB,SAAS,oBAAoB,KAAoC;AAC/D,QAAO;EAAE,MAAM,uBAAuB,IAAI;EAAE,SAAS,SAAS,IAAI;EAAE;;AAGtE,SAAS,kBAAkB,KAA4B,SAAwC;AAC7F,KAAI,IAAI,SAAS,2BAA4B,QAAO;CACpD,MAAM,aAAa,QAAQ,MAAM,cAAc;CAC/C,MAAM,WAAW,QAAQ,MAAM,YAAY;AAC3C,KAAI,WAAY,KAAI,QAAQ,OAAO,WAAW,GAAG;AACjD,KAAI,SAAU,KAAI,MAAM,OAAO,SAAS,GAAG;AAC3C,QAAO;;AAGT,SAAS,2BAA2B,KAAmC;AAErE,QAAO,kBADQ,oBAAoB,IAAI,QAAQ,EACd,IAAI,QAAQ;;AAG/C,SAAS,oBAAoB,KAAqD;CAChF,MAAM,UAAU,IAAI;CACpB,MAAM,SAAS,IAAI;CASnB,MAAM,MAA6B;EAAE,MANnC,OAAO,YAAY,YAAY,mBAAmB,KAAK,GAAG,QAAQ,GAAG,GACjE,UACA;EAIqC,SAFzC,OAAO,WAAW,YAAY,OAAO,SAAS,IAAI,SAAS,OAAO,GAAG;EAEnB;AACpD,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,IAAI,EAAE;AACxC,MAAI,MAAM,UAAU,MAAM,UAAW;AACrC,MAAI,OAAO,MAAM,cAAc,OAAO,MAAM,SAAU;AACtD,MAAI,CAAC,WAAW,EAAE,CAAE;AACpB,MAAI,KAAK;;AAEX,QAAO;;;;;AAMT,SAAgB,qBAAqB,KAAqC;AACxE,KAAI,eAAe,MAAO,QAAO,2BAA2B,IAAI;AAChE,KAAI,OAAO,QAAQ,SAAU,QAAO,oBAAoB,IAAI;AAC5D,KAAI,OAAO,OAAO,QAAQ,SAAU,QAAO,oBAAoB,IAA+B;AAC9F,QAAO;EAAE,MAAM;EAAgB,SAAS;EAAiB"}
|