@rarebit-one/harness-kernel 0.7.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 +83 -7
- package/dist/agent.d.ts +12 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +191 -94
- package/dist/agent.js.map +1 -1
- package/dist/connectors/mcpClient.d.ts +6 -1
- package/dist/connectors/mcpClient.d.ts.map +1 -1
- package/dist/connectors/mcpClient.js +1 -1
- package/dist/connectors/mcpClient.js.map +1 -1
- package/dist/engines/acp.d.ts +22 -0
- package/dist/engines/acp.d.ts.map +1 -1
- package/dist/engines/acp.js +49 -10
- package/dist/engines/acp.js.map +1 -1
- package/dist/engines/acpDriver.d.ts +7 -0
- package/dist/engines/acpDriver.d.ts.map +1 -1
- package/dist/engines/acpDriver.js +60 -17
- package/dist/engines/acpDriver.js.map +1 -1
- package/dist/engines/claudeCode.d.ts +6 -0
- package/dist/engines/claudeCode.d.ts.map +1 -1
- package/dist/engines/claudeCode.js +36 -10
- package/dist/engines/claudeCode.js.map +1 -1
- package/dist/engines/claudeCodeDriver.d.ts +11 -0
- package/dist/engines/claudeCodeDriver.d.ts.map +1 -1
- package/dist/engines/claudeCodeDriver.js +35 -5
- package/dist/engines/claudeCodeDriver.js.map +1 -1
- package/dist/engines/codex.d.ts +12 -0
- package/dist/engines/codex.d.ts.map +1 -1
- package/dist/engines/codex.js +19 -1
- package/dist/engines/codex.js.map +1 -1
- package/dist/engines/codexDriver.d.ts.map +1 -1
- package/dist/engines/codexDriver.js +51 -12
- package/dist/engines/codexDriver.js.map +1 -1
- package/dist/engines/index.d.ts +7 -0
- package/dist/engines/index.d.ts.map +1 -1
- package/dist/engines/index.js +4 -1
- package/dist/engines/index.js.map +1 -1
- package/dist/engines/native.d.ts +9 -1
- package/dist/engines/native.d.ts.map +1 -1
- package/dist/engines/native.js +130 -5
- package/dist/engines/native.js.map +1 -1
- package/dist/engines/types.d.ts +29 -1
- package/dist/engines/types.d.ts.map +1 -1
- package/dist/events.d.ts +61 -10
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/loop.d.ts +21 -2
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +7 -2
- package/dist/loop.js.map +1 -1
- package/dist/models/chat.d.ts +6 -2
- package/dist/models/chat.d.ts.map +1 -1
- package/dist/models/chat.js +15 -9
- package/dist/models/chat.js.map +1 -1
- package/dist/models/types.d.ts +15 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js.map +1 -1
- package/dist/primitives/codeExec.d.ts +7 -0
- package/dist/primitives/codeExec.d.ts.map +1 -1
- package/dist/primitives/codeExec.js +32 -4
- package/dist/primitives/codeExec.js.map +1 -1
- package/dist/primitives/http.d.ts +6 -0
- package/dist/primitives/http.d.ts.map +1 -1
- package/dist/primitives/http.js +28 -11
- package/dist/primitives/http.js.map +1 -1
- package/dist/private.d.ts +76 -0
- package/dist/private.d.ts.map +1 -0
- package/dist/private.js +245 -0
- package/dist/private.js.map +1 -0
- package/dist/processGroup.d.ts +16 -0
- package/dist/processGroup.d.ts.map +1 -0
- package/dist/processGroup.js +39 -0
- package/dist/processGroup.js.map +1 -0
- package/dist/providers/anthropic.d.ts +12 -2
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +30 -3
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/mock.d.ts +2 -2
- package/dist/providers/mock.d.ts.map +1 -1
- package/dist/providers/mock.js +5 -1
- package/dist/providers/mock.js.map +1 -1
- package/dist/providers/openai.d.ts +11 -2
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +25 -5
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +21 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/signals.d.ts +46 -0
- package/dist/signals.d.ts.map +1 -0
- package/dist/signals.js +72 -0
- package/dist/signals.js.map +1 -0
- package/dist/tools/metadata.d.ts +18 -2
- package/dist/tools/metadata.d.ts.map +1 -1
- package/dist/tools/metadata.js +7 -0
- package/dist/tools/metadata.js.map +1 -1
- package/dist/tools/modelTool.d.ts.map +1 -1
- package/dist/tools/modelTool.js +7 -3
- package/dist/tools/modelTool.js.map +1 -1
- package/dist/tools/registry.d.ts +24 -5
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +43 -12
- package/dist/tools/registry.js.map +1 -1
- package/package.json +3 -3
package/dist/engines/codex.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { refusePrivateRun } from "../private.js";
|
|
1
2
|
import { mkdtemp, rm, stat } from "node:fs/promises";
|
|
2
3
|
import { tmpdir } from "node:os";
|
|
3
4
|
import path from "node:path";
|
|
5
|
+
import { harnessOutcome } from "../signals.js";
|
|
4
6
|
import { CAPABILITY_SERVER_NAME } from "./capabilityMcp.js";
|
|
5
7
|
import { connectorServers, writeCodexConfig } from "./connectorMcp.js";
|
|
6
8
|
import { readEmissions } from "./capabilityEmissions.js";
|
|
@@ -37,6 +39,9 @@ export class CodexEngine {
|
|
|
37
39
|
this.capabilityServerScript = capabilityServerScript;
|
|
38
40
|
}
|
|
39
41
|
supports(spec) {
|
|
42
|
+
const refusal = refusePrivateRun("codex", spec);
|
|
43
|
+
if (refusal)
|
|
44
|
+
return refusal;
|
|
40
45
|
if (process.env.RUNNER_ENABLE_CODEX !== "1") {
|
|
41
46
|
return { ok: false, reason: "codex engine is disabled (set RUNNER_ENABLE_CODEX=1)" };
|
|
42
47
|
}
|
|
@@ -96,9 +101,11 @@ export class CodexEngine {
|
|
|
96
101
|
...(spec.limits?.maxDurationMs !== undefined
|
|
97
102
|
? { maxDurationMs: spec.limits.maxDurationMs }
|
|
98
103
|
: {}),
|
|
104
|
+
...(ctx.signal ? { signal: ctx.signal } : {}),
|
|
99
105
|
};
|
|
100
106
|
ctx.log(`codex: driving model ${model} in ${spec.workdir}`);
|
|
101
107
|
let finalText = "";
|
|
108
|
+
let outcome = "completed";
|
|
102
109
|
try {
|
|
103
110
|
for await (const message of this.drive(options)) {
|
|
104
111
|
if (message.kind === "assistant") {
|
|
@@ -107,11 +114,21 @@ export class CodexEngine {
|
|
|
107
114
|
}
|
|
108
115
|
else {
|
|
109
116
|
finalText = message.text;
|
|
110
|
-
|
|
117
|
+
outcome = harnessOutcome(message.isError, message.stoppedBy);
|
|
118
|
+
if (message.stoppedBy)
|
|
119
|
+
ctx.log(`codex: stopped (${outcome})`);
|
|
120
|
+
else if (message.isError)
|
|
111
121
|
ctx.log("codex: harness reported an error");
|
|
112
122
|
}
|
|
113
123
|
}
|
|
114
124
|
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
// A driver that throws on the caller's abort was still canceled, not broken.
|
|
127
|
+
if (!ctx.signal?.aborted)
|
|
128
|
+
throw err;
|
|
129
|
+
outcome = "canceled";
|
|
130
|
+
ctx.log("codex: stopped (canceled)");
|
|
131
|
+
}
|
|
115
132
|
finally {
|
|
116
133
|
// The token-bearing config is transient — never let it linger.
|
|
117
134
|
await rm(codexHome, { recursive: true, force: true });
|
|
@@ -133,6 +150,7 @@ export class CodexEngine {
|
|
|
133
150
|
return {
|
|
134
151
|
text: finalText || "(no output)",
|
|
135
152
|
...(emissions !== undefined ? { emissions } : {}),
|
|
153
|
+
outcome,
|
|
136
154
|
};
|
|
137
155
|
}
|
|
138
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/engines/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAA8B,MAAM,mBAAmB,CAAA;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/engines/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexDriver.d.ts","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codexDriver.d.ts","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAuB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAyGzF"}
|
|
@@ -2,6 +2,8 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import { DEFAULT_STOP_GRACE_MS, terminateProcessGroup } from "../processGroup.js";
|
|
6
|
+
import { runStop } from "../signals.js";
|
|
5
7
|
/**
|
|
6
8
|
* The default codex driver: the single integration boundary to the OpenAI Codex
|
|
7
9
|
* CLI, mirroring claudeCodeDriver's injectable shape. It runs codex
|
|
@@ -43,10 +45,11 @@ import path from "node:path";
|
|
|
43
45
|
* is touched in CI.
|
|
44
46
|
*/
|
|
45
47
|
export async function* defaultCodexDriver(opts) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
// The run's own timer merged with the caller's cancel; `stop.stoppedBy()`
|
|
49
|
+
// says which one fired. codex runs in its own process group so a stop can
|
|
50
|
+
// reach everything it spawned: SIGTERM, a grace period, then SIGKILL.
|
|
51
|
+
const stop = runStop(opts.maxDurationMs, opts.signal);
|
|
52
|
+
let stopping;
|
|
50
53
|
const outDir = await mkdtemp(path.join(tmpdir(), "harness-codex-out-"));
|
|
51
54
|
const lastMessageFile = path.join(outDir, "last-message.txt");
|
|
52
55
|
try {
|
|
@@ -63,7 +66,7 @@ export async function* defaultCodexDriver(opts) {
|
|
|
63
66
|
"-",
|
|
64
67
|
], {
|
|
65
68
|
cwd: opts.cwd,
|
|
66
|
-
|
|
69
|
+
detached: true,
|
|
67
70
|
env: {
|
|
68
71
|
...process.env,
|
|
69
72
|
CODEX_HOME: opts.codexHome,
|
|
@@ -75,6 +78,15 @@ export async function* defaultCodexDriver(opts) {
|
|
|
75
78
|
},
|
|
76
79
|
stdio: ["pipe", "pipe", "pipe"],
|
|
77
80
|
});
|
|
81
|
+
const onStop = () => {
|
|
82
|
+
stopping ??= terminateProcessGroup(child, opts.cancelGraceMs ?? DEFAULT_STOP_GRACE_MS);
|
|
83
|
+
};
|
|
84
|
+
if (stop.signal?.aborted)
|
|
85
|
+
onStop();
|
|
86
|
+
else
|
|
87
|
+
stop.signal?.addEventListener("abort", onStop, { once: true });
|
|
88
|
+
// A stopped child may never read its stdin; don't let EPIPE surface.
|
|
89
|
+
child.stdin.on("error", () => { });
|
|
78
90
|
child.stdin.end(opts.prompt);
|
|
79
91
|
let out = "";
|
|
80
92
|
let err = "";
|
|
@@ -82,10 +94,37 @@ export async function* defaultCodexDriver(opts) {
|
|
|
82
94
|
child.stderr.setEncoding("utf8");
|
|
83
95
|
child.stdout.on("data", (chunk) => (out += chunk));
|
|
84
96
|
child.stderr.on("data", (chunk) => (err += chunk));
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
let code;
|
|
98
|
+
try {
|
|
99
|
+
code = await new Promise((resolve, reject) => {
|
|
100
|
+
child.on("error", reject);
|
|
101
|
+
// Killed by a signal reports no exit code; that is still a failure.
|
|
102
|
+
child.on("close", (c, sig) => resolve(c ?? (sig ? 1 : 0)));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (!stop.stoppedBy())
|
|
107
|
+
throw error;
|
|
108
|
+
code = 1;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
stop.signal?.removeEventListener("abort", onStop);
|
|
112
|
+
}
|
|
113
|
+
// Stopped: wait until the whole group is gone (SIGKILL after the grace
|
|
114
|
+
// period), then report who stopped it with whatever codex had written.
|
|
115
|
+
const stoppedEarly = stopping ? stop.stoppedBy() : undefined;
|
|
116
|
+
if (stopping)
|
|
117
|
+
await stopping;
|
|
118
|
+
if (stoppedEarly && code !== 0) {
|
|
119
|
+
const partial = await readFile(lastMessageFile, "utf8").catch(() => "");
|
|
120
|
+
yield {
|
|
121
|
+
kind: "result",
|
|
122
|
+
text: partial.trim() || out.trim(),
|
|
123
|
+
isError: true,
|
|
124
|
+
stoppedBy: stoppedEarly,
|
|
125
|
+
};
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
89
128
|
// On a FAILED run, surface a tail of codex's stderr as an assistant message so it
|
|
90
129
|
// lands in the run logs for diagnosis — codex logs MCP-server startup + tool-call
|
|
91
130
|
// activity there, which is otherwise invisible (the `-o` file holds only the final
|
|
@@ -99,11 +138,11 @@ export async function* defaultCodexDriver(opts) {
|
|
|
99
138
|
// Prefer codex's final-message file; fall back to the raw stdout/stderr transcript.
|
|
100
139
|
const lastMessage = await readFile(lastMessageFile, "utf8").catch(() => "");
|
|
101
140
|
const text = lastMessage.trim() || out.trim() || err.trim();
|
|
102
|
-
|
|
141
|
+
// A stop that killed the child without an `error` event still says so.
|
|
142
|
+
const stoppedBy = code !== 0 ? stop.stoppedBy() : undefined;
|
|
143
|
+
yield { kind: "result", text, isError: code !== 0, ...(stoppedBy ? { stoppedBy } : {}) };
|
|
103
144
|
}
|
|
104
145
|
finally {
|
|
105
|
-
if (timer)
|
|
106
|
-
clearTimeout(timer);
|
|
107
146
|
await rm(outDir, { recursive: true, force: true });
|
|
108
147
|
}
|
|
109
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexDriver.js","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"codexDriver.js","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"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"}
|
package/dist/engines/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type DomainToolFactory } from "./native.js";
|
|
2
2
|
import { type CapabilityToolFactory } from "./claudeCode.js";
|
|
3
3
|
import type { AgentEngine } from "./types.js";
|
|
4
|
+
import type { ContextProvider } from "../context/types.js";
|
|
4
5
|
export type { AgentEngine, EngineContext, EngineResult, EngineSupport, RunSpec } from "./types.js";
|
|
5
6
|
/**
|
|
6
7
|
* The application-supplied seams an engine needs. The kernel defines no domain
|
|
@@ -10,6 +11,12 @@ export type { AgentEngine, EngineContext, EngineResult, EngineSupport, RunSpec }
|
|
|
10
11
|
export interface EngineSelection {
|
|
11
12
|
/** Extra tools for the in-process loop, beyond the generic primitives. */
|
|
12
13
|
domainTools?: DomainToolFactory;
|
|
14
|
+
/**
|
|
15
|
+
* Extra context sources for the in-process loop, appended after the spec's
|
|
16
|
+
* own `context` (see `NativeEngineOptions.contextProviders`). Only the native
|
|
17
|
+
* engine assembles context this way; the external engines ignore it.
|
|
18
|
+
*/
|
|
19
|
+
contextProviders?: ContextProvider[];
|
|
13
20
|
/** The capability surface exposed to Claude Code over its in-process MCP server. */
|
|
14
21
|
capabilityTools?: CapabilityToolFactory;
|
|
15
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1D,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAElG;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;IACpC,oFAAoF;IACpF,eAAe,CAAC,EAAE,qBAAqB,CAAA;IACvC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,GAAE,eAAoB,GAAG,WAAW,CA4B/F"}
|
package/dist/engines/index.js
CHANGED
|
@@ -31,7 +31,10 @@ export function selectEngine(name, selection = {}) {
|
|
|
31
31
|
return new AcpEngine(EVE_AGENT, selection.capabilityServerScript);
|
|
32
32
|
}
|
|
33
33
|
default:
|
|
34
|
-
return new NativeEngine(
|
|
34
|
+
return new NativeEngine({
|
|
35
|
+
...(selection.domainTools ? { domainTools: selection.domainTools } : {}),
|
|
36
|
+
...(selection.contextProviders ? { contextProviders: selection.contextProviders } : {}),
|
|
37
|
+
});
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAA8B,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAA8B,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA8B/C;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoB,EAAE,YAA6B,EAAE;IAChF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,IAAI,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,eAAe,CAAC,CAAA;QACnE,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,yFAAyF;oBACvF,mEAAmE,CACtE,CAAA;YACH,CAAC;YACD,OAAO,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,sBAAsB,CAAC,CAAA;QACrE,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,uFAAuF;oBACrF,mEAAmE,CACtE,CAAA;YACH,CAAC;YACD,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,sBAAsB,CAAC,CAAA;QACnE,CAAC;QACD;YACE,OAAO,IAAI,YAAY,CAAC;gBACtB,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxF,CAAC,CAAA;IACN,CAAC;AACH,CAAC"}
|
package/dist/engines/native.d.ts
CHANGED
|
@@ -42,8 +42,16 @@ export declare class NativeEngine implements AgentEngine {
|
|
|
42
42
|
private readonly contextProviders;
|
|
43
43
|
private readonly loop;
|
|
44
44
|
constructor(options?: NativeEngineOptions);
|
|
45
|
-
|
|
45
|
+
/**
|
|
46
|
+
* A private run must stay on local inference, and that is a guarantee, not a
|
|
47
|
+
* preference: it is refused unless the run names the `local` provider AND the
|
|
48
|
+
* host has one configured. There is no fallback to a cloud provider found in
|
|
49
|
+
* ambient credentials, and none to the offline mock either — a private run
|
|
50
|
+
* that silently ran somewhere else, or not at all, would look like it worked.
|
|
51
|
+
*/
|
|
52
|
+
supports(spec?: RunSpec): EngineSupport;
|
|
46
53
|
run(spec: RunSpec, ctx: EngineContext): Promise<EngineResult>;
|
|
54
|
+
private runWith;
|
|
47
55
|
/**
|
|
48
56
|
* The run's context text: the spec's own pre-assembled context, then whatever
|
|
49
57
|
* the configured providers contribute. With no providers this returns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/engines/native.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1F,OAAO,EAA6B,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/engines/native.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1F,OAAO,EAA6B,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AAMjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAElG;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAA;AAE9D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;IACpC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ;AAED;;;;;;GAMG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,QAAQ,CAAC,IAAI,YAAW;IAExB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;gBAEf,OAAO,GAAE,mBAAwB;IAM7C;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,aAAa;IAKjC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YA+BrD,OAAO;IAkFrB;;;;;OAKG;YACW,YAAY;CAY3B"}
|
package/dist/engines/native.js
CHANGED
|
@@ -6,6 +6,7 @@ import { asChatModel } from "../models/chat.js";
|
|
|
6
6
|
import { selectProvider } from "../providers/index.js";
|
|
7
7
|
import { secretsToEnv } from "../secrets.js";
|
|
8
8
|
import { primitiveTools, connectorTools } from "../tools/registry.js";
|
|
9
|
+
import { PrivateRunError, privateRunChannels } from "../private.js";
|
|
9
10
|
/**
|
|
10
11
|
* The in-process native engine: the provider-neutral tool-use loop over the
|
|
11
12
|
* general-purpose primitives (run_code, read_file, list_files, http_fetch) plus
|
|
@@ -23,14 +24,67 @@ export class NativeEngine {
|
|
|
23
24
|
this.contextProviders = options.contextProviders ?? [];
|
|
24
25
|
this.loop = options.loop ?? nativeLoop;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
+
/**
|
|
28
|
+
* A private run must stay on local inference, and that is a guarantee, not a
|
|
29
|
+
* preference: it is refused unless the run names the `local` provider AND the
|
|
30
|
+
* host has one configured. There is no fallback to a cloud provider found in
|
|
31
|
+
* ambient credentials, and none to the offline mock either — a private run
|
|
32
|
+
* that silently ran somewhere else, or not at all, would look like it worked.
|
|
33
|
+
*/
|
|
34
|
+
supports(spec) {
|
|
35
|
+
if (spec?.private)
|
|
36
|
+
return privateProviderSupport(spec);
|
|
27
37
|
return { ok: true };
|
|
28
38
|
}
|
|
29
39
|
async run(spec, ctx) {
|
|
40
|
+
if (!spec.private)
|
|
41
|
+
return this.runWith(spec, ctx);
|
|
42
|
+
// Checked again here, not only in `supports()`: a caller that skips the
|
|
43
|
+
// capability check must still never reach a non-local provider. The reason
|
|
44
|
+
// names configuration only, never the run's material.
|
|
45
|
+
const support = privateProviderSupport(spec);
|
|
46
|
+
if (!support.ok)
|
|
47
|
+
throw new Error(support.reason);
|
|
48
|
+
// A private run's material must not reach the caller's log or event sink.
|
|
49
|
+
// Narrowing the channels here, rather than inside the loop, covers every
|
|
50
|
+
// writer at once: the loop (including an injected one), context providers,
|
|
51
|
+
// connector setup and this engine's own lines.
|
|
52
|
+
const channels = privateRunChannels(ctx.log, ctx.emit);
|
|
53
|
+
let loopStarted = false;
|
|
54
|
+
try {
|
|
55
|
+
return await this.runWith(spec, {
|
|
56
|
+
...ctx,
|
|
57
|
+
log: channels.log,
|
|
58
|
+
emit: (event) => {
|
|
59
|
+
if (event.type === "run.started")
|
|
60
|
+
loopStarted = true;
|
|
61
|
+
channels.emit(event);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// The original error can quote the material (a tool's error, a provider
|
|
67
|
+
// echoing the prompt), so none of it — message or cause — goes back.
|
|
68
|
+
throw new PrivateRunError(loopStarted ? "loop" : "setup");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async runWith(spec, ctx) {
|
|
72
|
+
// Setup (connecting MCP servers, assembling context) happens before the
|
|
73
|
+
// loop sees the signal, and either can stall. So a cancel is honoured here
|
|
74
|
+
// too: an already-canceled run does no setup at all, and a cancel during a
|
|
75
|
+
// stalled setup step returns at once instead of waiting it out. Such a run
|
|
76
|
+
// never started its loop, so it emits no events.
|
|
77
|
+
if (ctx.signal?.aborted)
|
|
78
|
+
return canceledBeforeLoop(ctx);
|
|
30
79
|
const provider = selectProvider(spec.provider.preferred, {
|
|
31
80
|
model: spec.provider.model,
|
|
32
81
|
credentials: spec.provider.credentials,
|
|
33
82
|
});
|
|
83
|
+
// Belt and braces for the private path: whatever selection did, a private
|
|
84
|
+
// run proceeds on the local provider or not at all.
|
|
85
|
+
if (spec.private && provider.name !== "local") {
|
|
86
|
+
throw new Error(`private run resolved to provider "${provider.name}", not "local"`);
|
|
87
|
+
}
|
|
34
88
|
ctx.log(`provider: ${provider.name}`);
|
|
35
89
|
// General-purpose primitives (secrets injected as env) + the run's connectors.
|
|
36
90
|
const env = secretsToEnv(spec.secrets);
|
|
@@ -46,24 +100,48 @@ export class NativeEngine {
|
|
|
46
100
|
// Connector tools are NOT re-gated by permissions.tools: the caller
|
|
47
101
|
// already authorized them per connector (scope + grants) when it populated
|
|
48
102
|
// connectors, and their names are namespaced `<connector>__<tool>`.
|
|
49
|
-
|
|
103
|
+
// The signal reaches `connectorTools`, which closes whatever it had
|
|
104
|
+
// already opened when a cancel lands mid-setup.
|
|
105
|
+
let connectors;
|
|
106
|
+
try {
|
|
107
|
+
connectors = await connectorTools(spec.connectors, undefined, { signal: ctx.signal });
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
if (!ctx.signal?.aborted)
|
|
111
|
+
throw err;
|
|
112
|
+
return canceledBeforeLoop(ctx);
|
|
113
|
+
}
|
|
50
114
|
try {
|
|
51
115
|
const tools = [...primitives, ...connectors.tools];
|
|
52
116
|
ctx.log(`tools: ${tools.map((t) => t.spec.name).join(", ") || "(none)"}`);
|
|
53
117
|
// Budgets are resolved before the call: a loop is handed numbers, not
|
|
54
118
|
// optionals, so a second implementation cannot accidentally run to a
|
|
55
119
|
// different ceiling than the one the kernel ships.
|
|
120
|
+
let context;
|
|
121
|
+
try {
|
|
122
|
+
context = await untilAborted(this.buildContext(spec, ctx), ctx.signal);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
if (!ctx.signal?.aborted)
|
|
126
|
+
throw err;
|
|
127
|
+
return canceledBeforeLoop(ctx);
|
|
128
|
+
}
|
|
56
129
|
const result = await runWithEvents(this.loop, {
|
|
57
130
|
model: asChatModel(provider),
|
|
58
131
|
system: buildSystemPrompt(spec.workflow, spec.workspaceId, spec.workflowPath),
|
|
59
|
-
userPrompt: buildUserPrompt(spec.workflow,
|
|
132
|
+
userPrompt: buildUserPrompt(spec.workflow, context, spec.inputs),
|
|
60
133
|
tools,
|
|
61
134
|
limits: resolveLoopLimits(spec.limits),
|
|
62
135
|
},
|
|
63
136
|
// The bookends come from `runWithEvents`, so an application's own loop
|
|
64
137
|
// gets them without having to know they exist.
|
|
65
|
-
{
|
|
66
|
-
|
|
138
|
+
{
|
|
139
|
+
log: ctx.log,
|
|
140
|
+
events: runEventEmitter(ctx.emit, ctx.log),
|
|
141
|
+
runId: spec.runId,
|
|
142
|
+
...(ctx.signal ? { signal: ctx.signal } : {}),
|
|
143
|
+
});
|
|
144
|
+
return { text: result.text, outcome: result.outcome };
|
|
67
145
|
}
|
|
68
146
|
finally {
|
|
69
147
|
// Connectors are only needed during the loop; close them here (the engine
|
|
@@ -88,6 +166,53 @@ export class NativeEngine {
|
|
|
88
166
|
return spec.context ? `${spec.context}\n\n${assembled}` : assembled;
|
|
89
167
|
}
|
|
90
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Whether a private run can be held to local inference on this host. Only an
|
|
171
|
+
* explicit `preferred: "local"` with `LOCAL_MODEL_BASE_URL` set qualifies; every
|
|
172
|
+
* other preference — including none, which would fall through to ambient cloud
|
|
173
|
+
* keys or the mock — is refused.
|
|
174
|
+
*/
|
|
175
|
+
function privateProviderSupport(spec) {
|
|
176
|
+
if (spec.provider.preferred !== "local") {
|
|
177
|
+
return {
|
|
178
|
+
ok: false,
|
|
179
|
+
reason: `a private run requires provider.preferred "local" (got ` +
|
|
180
|
+
`${spec.provider.preferred ? `"${spec.provider.preferred}"` : "none"}); ` +
|
|
181
|
+
"it is never routed to another provider",
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
if (!process.env.LOCAL_MODEL_BASE_URL) {
|
|
185
|
+
return {
|
|
186
|
+
ok: false,
|
|
187
|
+
reason: "a private run requires the local provider, but LOCAL_MODEL_BASE_URL is not set",
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return { ok: true };
|
|
191
|
+
}
|
|
192
|
+
/** The result of a run canceled before its loop started: nothing ran. */
|
|
193
|
+
function canceledBeforeLoop(ctx) {
|
|
194
|
+
ctx.log("native: canceled before the loop started");
|
|
195
|
+
return {
|
|
196
|
+
text: "(no output)\n\n[run stopped: canceled before the run started]",
|
|
197
|
+
outcome: "canceled",
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Await `work`, but stop waiting (rejecting with the signal's reason) the
|
|
202
|
+
* moment `signal` aborts. The work itself is not interrupted — the caller
|
|
203
|
+
* cleans up whatever it eventually produces.
|
|
204
|
+
*/
|
|
205
|
+
function untilAborted(work, signal) {
|
|
206
|
+
if (!signal)
|
|
207
|
+
return work;
|
|
208
|
+
return new Promise((resolve, reject) => {
|
|
209
|
+
const onAbort = () => reject(signal.reason);
|
|
210
|
+
if (signal.aborted)
|
|
211
|
+
return onAbort();
|
|
212
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
213
|
+
work.then(resolve, reject).finally(() => signal.removeEventListener("abort", onAbort));
|
|
214
|
+
});
|
|
215
|
+
}
|
|
91
216
|
function buildSystemPrompt(workflow, workspaceId, workflowPath) {
|
|
92
217
|
return [
|
|
93
218
|
"You are an autonomous workflow executing in an isolated workspace sandbox.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/engines/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAA;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAa,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/engines/native.ts"],"names":[],"mappings":"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"}
|
package/dist/engines/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RunEventSink } from "../events.js";
|
|
1
|
+
import type { RunEventSink, RunOutcome } from "../events.js";
|
|
2
2
|
import type { ProviderSelection } from "../providers/index.js";
|
|
3
3
|
import type { ConnectorConfig, Permissions, WorkflowDefinition } from "../types.js";
|
|
4
4
|
/**
|
|
@@ -40,6 +40,19 @@ export interface RunSpec {
|
|
|
40
40
|
maxSteps?: number;
|
|
41
41
|
maxDurationMs?: number;
|
|
42
42
|
};
|
|
43
|
+
/**
|
|
44
|
+
* The run handles material that must not leave the host. The native engine
|
|
45
|
+
* runs it only on the `local` provider (`provider.preferred: "local"` with
|
|
46
|
+
* `LOCAL_MODEL_BASE_URL` set; anything else is refused, never rerouted), and
|
|
47
|
+
* narrows `EngineContext.log` and `EngineContext.emit` to phase codes
|
|
48
|
+
* only — no tool arguments, tool results, model text or error messages (see
|
|
49
|
+
* `privateRunChannels`) — and replaces a thrown error with a
|
|
50
|
+
* `PrivateRunError` that carries none of the original. Every out-of-process
|
|
51
|
+
* engine refuses a private run in `supports()`: what its harness does with
|
|
52
|
+
* the material is outside the kernel's reach. Absent or `false` changes
|
|
53
|
+
* nothing. The returned `EngineResult.text` is still the caller's to place.
|
|
54
|
+
*/
|
|
55
|
+
private?: boolean;
|
|
43
56
|
}
|
|
44
57
|
export interface EngineContext {
|
|
45
58
|
/** Append a timestamped line to the run's logs. */
|
|
@@ -59,6 +72,13 @@ export interface EngineContext {
|
|
|
59
72
|
* silently — the events it does emit are exact.
|
|
60
73
|
*/
|
|
61
74
|
emit?: RunEventSink;
|
|
75
|
+
/**
|
|
76
|
+
* Cancels the run. The native engine threads it through the loop to every
|
|
77
|
+
* model request and tool; the external engines merge it with their own
|
|
78
|
+
* wall-clock timers and stop their harness process. A canceled run resolves
|
|
79
|
+
* with whatever prose it had and `outcome: "canceled"` rather than rejecting.
|
|
80
|
+
*/
|
|
81
|
+
signal?: AbortSignal;
|
|
62
82
|
}
|
|
63
83
|
/**
|
|
64
84
|
* What an engine returns.
|
|
@@ -82,6 +102,14 @@ export interface EngineResult {
|
|
|
82
102
|
text: string;
|
|
83
103
|
/** Anything else the run produced, in the application's own shape. */
|
|
84
104
|
emissions?: unknown;
|
|
105
|
+
/**
|
|
106
|
+
* Why the run stopped, in the same vocabulary as `run.finished`. The native
|
|
107
|
+
* engine reports the loop's own outcome; an external engine maps its
|
|
108
|
+
* harness's ending onto it (its timer → `timed_out`, the caller's signal →
|
|
109
|
+
* `canceled`, a clean finish → `completed`, a harness-reported error →
|
|
110
|
+
* `failed`). Optional so an engine that cannot tell stays honest by omitting it.
|
|
111
|
+
*/
|
|
112
|
+
outcome?: RunOutcome;
|
|
85
113
|
}
|
|
86
114
|
/** The outcome of an engine's capability check for a given run. */
|
|
87
115
|
export type EngineSupport = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engines/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engines/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEnF;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B;sFACkF;IAClF,OAAO,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,WAAW,CAAA;IACxB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+DAA+D;IAC/D,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,6DAA6D;IAC7D,QAAQ,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,iBAAiB,CAAA;IAC3D,8EAA8E;IAC9E,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAExE;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;mFAC+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAAA;IACtC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CAC9D"}
|