reeval 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/THIRD_PARTY_NOTICES.md +2160 -0
- package/assets/package.json +9 -0
- package/assets/pnpm-lock.yaml +1336 -0
- package/dist/agent-DVHkx8aT.js +532 -0
- package/dist/agent-DVHkx8aT.js.map +1 -0
- package/dist/analysis-CxSCt1YY.js +16 -0
- package/dist/analysis-CxSCt1YY.js.map +1 -0
- package/dist/assemble-B-nmz8oH.js +695 -0
- package/dist/assemble-B-nmz8oH.js.map +1 -0
- package/dist/assemble-CmRVDZ2Q.js +2 -0
- package/dist/attempt-BdRQ9jKX.js +176 -0
- package/dist/attempt-BdRQ9jKX.js.map +1 -0
- package/dist/bridge/index.mjs +1911 -0
- package/dist/bridge/package.json +13 -0
- package/dist/bridge/pnpm-lock.yaml +1041 -0
- package/dist/bridge/pnpm-workspace.yaml +2 -0
- package/dist/budget-DBUrH4jX.js +8 -0
- package/dist/budget-DBUrH4jX.js.map +1 -0
- package/dist/cli--CQ3Iy9q.js +1865 -0
- package/dist/cli--CQ3Iy9q.js.map +1 -0
- package/dist/cli-spec-DKAu09Gi.js +478 -0
- package/dist/cli-spec-DKAu09Gi.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -0
- package/dist/colors-QV9dFVhN.js +34 -0
- package/dist/colors-QV9dFVhN.js.map +1 -0
- package/dist/command-BSJzHMtP.js +280 -0
- package/dist/command-BSJzHMtP.js.map +1 -0
- package/dist/command-CEm8PZ1N.js +1043 -0
- package/dist/command-CEm8PZ1N.js.map +1 -0
- package/dist/command-D-jnQWVG.js +673 -0
- package/dist/command-D-jnQWVG.js.map +1 -0
- package/dist/command-DQAvbG7d.js +432 -0
- package/dist/command-DQAvbG7d.js.map +1 -0
- package/dist/commands-A4udfyKZ.js +2 -0
- package/dist/commands-CF8mOfiu.js +207 -0
- package/dist/commands-CF8mOfiu.js.map +1 -0
- package/dist/config-Cuj0kVYj.js +415 -0
- package/dist/config-Cuj0kVYj.js.map +1 -0
- package/dist/context-loi9OCZv.js +106 -0
- package/dist/context-loi9OCZv.js.map +1 -0
- package/dist/core-tLN-z1Be.js +96 -0
- package/dist/core-tLN-z1Be.js.map +1 -0
- package/dist/db-Cjj2ZsfQ.js +2 -0
- package/dist/db-DxDzMhtB.js +827 -0
- package/dist/db-DxDzMhtB.js.map +1 -0
- package/dist/debug-D24NOQH1.js +89 -0
- package/dist/debug-D24NOQH1.js.map +1 -0
- package/dist/debug-SEmW4w8f.js +2 -0
- package/dist/dist-BZXYHN2X.js +1673 -0
- package/dist/dist-BZXYHN2X.js.map +1 -0
- package/dist/docker-DQDZWXF9.js +20 -0
- package/dist/docker-DQDZWXF9.js.map +1 -0
- package/dist/docker-DnWAVdEm.js +2 -0
- package/dist/docker-oSbCExHL.js +153 -0
- package/dist/docker-oSbCExHL.js.map +1 -0
- package/dist/doctor-CxlH1pDM.js +525 -0
- package/dist/doctor-CxlH1pDM.js.map +1 -0
- package/dist/egress-73SQfKdx.js +619 -0
- package/dist/egress-73SQfKdx.js.map +1 -0
- package/dist/env-BQqj93gu.js +21 -0
- package/dist/env-BQqj93gu.js.map +1 -0
- package/dist/environment-Mz7wvrtD.js +552 -0
- package/dist/environment-Mz7wvrtD.js.map +1 -0
- package/dist/errors-C9w_ud7g.js +160 -0
- package/dist/errors-C9w_ud7g.js.map +1 -0
- package/dist/errors-CSxfJ4qu.js +11 -0
- package/dist/errors-CSxfJ4qu.js.map +1 -0
- package/dist/files--6CEUXm7.js +2 -0
- package/dist/files-BLlrhU4-.js +62 -0
- package/dist/files-BLlrhU4-.js.map +1 -0
- package/dist/files-Bd25OAQH.js +2 -0
- package/dist/files-BvHCFWgD.js +2 -0
- package/dist/files-D2-qn_Dl.js +275 -0
- package/dist/files-D2-qn_Dl.js.map +1 -0
- package/dist/files-bF2fPuT9.js +99 -0
- package/dist/files-bF2fPuT9.js.map +1 -0
- package/dist/git-D6hMeieS.js +44 -0
- package/dist/git-D6hMeieS.js.map +1 -0
- package/dist/harness-ls5aX1UO.js +131 -0
- package/dist/harness-ls5aX1UO.js.map +1 -0
- package/dist/harness.d.ts +74 -0
- package/dist/harness.js +2 -0
- package/dist/header-DzFDoMCI.js +78 -0
- package/dist/header-DzFDoMCI.js.map +1 -0
- package/dist/ids-Bp6ut7ZD.js +49 -0
- package/dist/ids-Bp6ut7ZD.js.map +1 -0
- package/dist/images-Cc1-coFc.js +286 -0
- package/dist/images-Cc1-coFc.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.js +1959 -0
- package/dist/index.js.map +1 -0
- package/dist/init-CFljS8BJ.js +344 -0
- package/dist/init-CFljS8BJ.js.map +1 -0
- package/dist/init-z2ZPn9Tj.js +2 -0
- package/dist/invocations-rXktgSAn.js +157 -0
- package/dist/invocations-rXktgSAn.js.map +1 -0
- package/dist/jiti-BOLXpKyG.js +46 -0
- package/dist/jiti-BOLXpKyG.js.map +1 -0
- package/dist/judge-D8Uf4dA9.js +146 -0
- package/dist/judge-D8Uf4dA9.js.map +1 -0
- package/dist/judge.d.ts +21 -0
- package/dist/judge.js +19 -0
- package/dist/judge.js.map +1 -0
- package/dist/live-Bs3LReMV.js +98 -0
- package/dist/live-Bs3LReMV.js.map +1 -0
- package/dist/matchers-DyLvm7EG.js +374 -0
- package/dist/matchers-DyLvm7EG.js.map +1 -0
- package/dist/model-BdO79gWz.js +44 -0
- package/dist/model-BdO79gWz.js.map +1 -0
- package/dist/model-CDL98xue.js +725 -0
- package/dist/model-CDL98xue.js.map +1 -0
- package/dist/model-v-0_Ik7S.js +2 -0
- package/dist/node-kG64XxdE.js +506 -0
- package/dist/node-kG64XxdE.js.map +1 -0
- package/dist/opencode-providers-DZuD_oYt.js +3149 -0
- package/dist/opencode-providers-DZuD_oYt.js.map +1 -0
- package/dist/options-CAQhu--C.js +452 -0
- package/dist/options-CAQhu--C.js.map +1 -0
- package/dist/patch-BkKje4cp.js +69 -0
- package/dist/patch-BkKje4cp.js.map +1 -0
- package/dist/paths-CBvm6pap.js +72 -0
- package/dist/paths-CBvm6pap.js.map +1 -0
- package/dist/plan-gwk6dJ8c.js +237 -0
- package/dist/plan-gwk6dJ8c.js.map +1 -0
- package/dist/preflight-BtubXKQ8.js +2 -0
- package/dist/preflight-BypZMNBG.js +185 -0
- package/dist/preflight-BypZMNBG.js.map +1 -0
- package/dist/prepare-Cwv0bHs_.js +3 -0
- package/dist/prepare-D6Uzcubb.js +213 -0
- package/dist/prepare-D6Uzcubb.js.map +1 -0
- package/dist/provenance-Dfb8YY5Y.js +129 -0
- package/dist/provenance-Dfb8YY5Y.js.map +1 -0
- package/dist/provider-BDbNOQhQ.js +2 -0
- package/dist/provider-CmAYTQQs.js +14 -0
- package/dist/provider-CmAYTQQs.js.map +1 -0
- package/dist/providers-2p3ylMHI.js +107 -0
- package/dist/providers-2p3ylMHI.js.map +1 -0
- package/dist/providers-BUOxitcT.js +2 -0
- package/dist/query-CFATHZmV.js +91 -0
- package/dist/query-CFATHZmV.js.map +1 -0
- package/dist/query-DR4m6CXf.js +2 -0
- package/dist/record-DQ8wzyco.js +99 -0
- package/dist/record-DQ8wzyco.js.map +1 -0
- package/dist/redact-C4fL_bZP.js +167 -0
- package/dist/redact-C4fL_bZP.js.map +1 -0
- package/dist/results-CeXb8Wde.js +37 -0
- package/dist/results-CeXb8Wde.js.map +1 -0
- package/dist/root-CFDjpWuc.js +110 -0
- package/dist/root-CFDjpWuc.js.map +1 -0
- package/dist/sandbox-By2gkdkC.js +133 -0
- package/dist/sandbox-By2gkdkC.js.map +1 -0
- package/dist/sandbox.d.ts +41 -0
- package/dist/sandbox.js +2 -0
- package/dist/server-Bi61uiY0.js +350 -0
- package/dist/server-Bi61uiY0.js.map +1 -0
- package/dist/server-CsSBL8NC.js +2 -0
- package/dist/source-BXzrmof5.js +2 -0
- package/dist/source-Bsfa3LZH.js +40 -0
- package/dist/source-Bsfa3LZH.js.map +1 -0
- package/dist/src-55j1zNHH.js +3 -0
- package/dist/src-AEwxd1UP.js +602 -0
- package/dist/src-AEwxd1UP.js.map +1 -0
- package/dist/src-BDwSuyIo.js +3 -0
- package/dist/src-BQyMiWri.js +490 -0
- package/dist/src-BQyMiWri.js.map +1 -0
- package/dist/src-C-LHyTSV.js +3 -0
- package/dist/src-Cmp-7YrD.js +1136 -0
- package/dist/src-Cmp-7YrD.js.map +1 -0
- package/dist/src-D0RdqpNb.js +252 -0
- package/dist/src-D0RdqpNb.js.map +1 -0
- package/dist/src-D8KYzxBX.js +793 -0
- package/dist/src-D8KYzxBX.js.map +1 -0
- package/dist/src-DEgff9Z7.js +4 -0
- package/dist/src-DXx_29pq.js +567 -0
- package/dist/src-DXx_29pq.js.map +1 -0
- package/dist/src-DwwiVLqv.js +2937 -0
- package/dist/src-DwwiVLqv.js.map +1 -0
- package/dist/src-N7E_mfcZ.js +2 -0
- package/dist/src-W9g-y5X5.js +3 -0
- package/dist/src-daS0wKH2.js +3 -0
- package/dist/state-Cyw3QTsN.js +2 -0
- package/dist/state-DZ7eqb1F.js +167 -0
- package/dist/state-DZ7eqb1F.js.map +1 -0
- package/dist/stats-BNAHlNMD.js +114 -0
- package/dist/stats-BNAHlNMD.js.map +1 -0
- package/dist/studio-app/assets/index-D6XyfFSH.js +58 -0
- package/dist/studio-app/assets/index-xwzWdcE_.css +2 -0
- package/dist/studio-app/favicon.svg +1 -0
- package/dist/studio-app/index.html +15 -0
- package/dist/summary-D7Ttky0z.js +166 -0
- package/dist/summary-D7Ttky0z.js.map +1 -0
- package/dist/text-gEcKjAyp.js +29 -0
- package/dist/text-gEcKjAyp.js.map +1 -0
- package/dist/types-C5vI3g1C.js +9 -0
- package/dist/types-C5vI3g1C.js.map +1 -0
- package/dist/types-DLec-6Cx.d.ts +1535 -0
- package/dist/usage-DsYUqIUM.js +24 -0
- package/dist/usage-DsYUqIUM.js.map +1 -0
- package/dist/view/index.d.ts +645 -0
- package/dist/view/index.js +8 -0
- package/dist/views-BrHOv6wg.js +220 -0
- package/dist/views-BrHOv6wg.js.map +1 -0
- package/dist/views-CwCWLWqo.js +3 -0
- package/dist/worker-entry-DnYkANPG.js +506 -0
- package/dist/worker-entry-DnYkANPG.js.map +1 -0
- package/dist/workspace-C2S0Z6gl.js +327 -0
- package/dist/workspace-C2S0Z6gl.js.map +1 -0
- package/dist/workspace-CyoXG6CY.js +2 -0
- package/docker/Dockerfile +19 -0
- package/package.json +79 -0
|
@@ -0,0 +1,602 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
import { Readable } from "node:stream";
|
|
3
|
+
import { HarnessCapabilityUnsupportedError, commonTool, harnessSessionDataDirectoryPath, harnessStateDirectoryPath } from "@ai-sdk/harness";
|
|
4
|
+
import { createCredentialRequestTransformation, generateSandboxCredentialPlaceholder, isHarnessAuthenticationEnvironment, resolveSandboxHomeDir, shellQuote, writeInstructions, writeSkills } from "@ai-sdk/harness/utils";
|
|
5
|
+
import { tool } from "@ai-sdk/provider-utils";
|
|
6
|
+
import { createInterface } from "node:readline";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
//#region ../harness-codex/src/codex-bootstrap.ts
|
|
9
|
+
/** The Codex release the bootstrap installs, checked against npm's published sha512s. */
|
|
10
|
+
const CODEX_CLI_VERSION = "0.157.1";
|
|
11
|
+
/** The `dist.integrity` of `@openai/codex@<version>-linux-<arch>`, its native build for Linux. */
|
|
12
|
+
const CODEX_CLI_INTEGRITY = {
|
|
13
|
+
x64: "sha512-Eac8XlC0nCXSeUjDU9l8yLJ6P9evv1mO+AnvILoNwlegBC7B3AVXqJ05QcMhQX7RcJ3Lk2618ykCb2X2ui8VAQ==",
|
|
14
|
+
arm64: "sha512-nEaBZT3ldrtqUNaBlvI+Y+fg+LbNCTsQjbUnl7Q45rl9vSSqHU2vRj1l6iJDwupZkrpeIJ/ClHIwxgMKv1SKHg=="
|
|
15
|
+
};
|
|
16
|
+
/** Relative to the harness state directory, `$HOME/.ai-sdk-harness`. */
|
|
17
|
+
const CODEX_BOOTSTRAP_DIR = ".harness-bootstrap/codex";
|
|
18
|
+
/**
|
|
19
|
+
* Downloads the pinned native build for the sandbox's arch from npm, checks its sha512, and links
|
|
20
|
+
* `codex` and `rg` into `bin/`. The npm package's Node launcher only picks this build and adds its
|
|
21
|
+
* `rg` to `PATH`, so the adapter runs the binary itself.
|
|
22
|
+
*/
|
|
23
|
+
const CODEX_INSTALL_COMMAND = `set -eu
|
|
24
|
+
case "$(uname -m)" in
|
|
25
|
+
x86_64|amd64) arch=x64 triple=x86_64-unknown-linux-musl sri=${CODEX_CLI_INTEGRITY.x64} ;;
|
|
26
|
+
aarch64|arm64) arch=arm64 triple=aarch64-unknown-linux-musl sri=${CODEX_CLI_INTEGRITY.arm64} ;;
|
|
27
|
+
*) echo "Codex has no Linux build for $(uname -m)" >&2; exit 1 ;;
|
|
28
|
+
esac
|
|
29
|
+
curl -fsSL --retry 3 -o codex.tgz "https://registry.npmjs.org/@openai/codex/-/codex-${CODEX_CLI_VERSION}-linux-$arch.tgz"
|
|
30
|
+
node -e 'const h = "sha512-" + require("crypto").createHash("sha512").update(require("fs").readFileSync("codex.tgz")).digest("base64"); if (h !== process.argv[1]) { console.error("codex.tgz does not match its sha512"); process.exit(1) }' "$sri"
|
|
31
|
+
rm -rf package && tar -xzf codex.tgz && rm codex.tgz
|
|
32
|
+
mkdir -p bin
|
|
33
|
+
ln -sf "$PWD/package/vendor/$triple/bin/codex" bin/codex
|
|
34
|
+
ln -sf "$PWD/package/vendor/$triple/codex-path/rg" bin/rg
|
|
35
|
+
bin/codex --version`;
|
|
36
|
+
async function getCodexBootstrap() {
|
|
37
|
+
return {
|
|
38
|
+
harnessId: "codex",
|
|
39
|
+
bootstrapDir: CODEX_BOOTSTRAP_DIR,
|
|
40
|
+
files: [],
|
|
41
|
+
commands: [{ command: CODEX_INSTALL_COMMAND }]
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region ../harness-codex/src/codex-stream.ts
|
|
46
|
+
/** Codex's counts in the AI SDK's shape. Its `output_tokens` includes the reasoning ones. */
|
|
47
|
+
function toUsage(usage) {
|
|
48
|
+
const total = usage?.input_tokens;
|
|
49
|
+
const cacheRead = usage?.cached_input_tokens;
|
|
50
|
+
const cacheWrite = usage?.cache_write_input_tokens;
|
|
51
|
+
const output = usage?.output_tokens;
|
|
52
|
+
const reasoning = usage?.reasoning_output_tokens;
|
|
53
|
+
return {
|
|
54
|
+
inputTokens: {
|
|
55
|
+
total,
|
|
56
|
+
noCache: total !== void 0 ? Math.max(total - (cacheRead ?? 0) - (cacheWrite ?? 0), 0) : void 0,
|
|
57
|
+
cacheRead,
|
|
58
|
+
cacheWrite
|
|
59
|
+
},
|
|
60
|
+
outputTokens: {
|
|
61
|
+
total: output,
|
|
62
|
+
text: output !== void 0 && reasoning !== void 0 ? output - reasoning : void 0,
|
|
63
|
+
reasoning
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** A `file_change` path's kind as the adapter's tool name. */
|
|
68
|
+
const CHANGE_TOOLS = {
|
|
69
|
+
add: "write",
|
|
70
|
+
update: "edit",
|
|
71
|
+
delete: "delete"
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Turns one `codex exec --json` process's NDJSON into harness stream parts. Codex reports a turn,
|
|
75
|
+
* not its model calls: `turn.completed` is one `finish-step` with the turn's tokens and the
|
|
76
|
+
* `finish`. A top-level `error` before it is a call Codex retries ("Reconnecting... n/5"), so it's
|
|
77
|
+
* a failed step, not the turn's end, unless `turn.failed` follows it: Codex announces the failure
|
|
78
|
+
* that ends the turn with an `error` too, and that call wasn't retried.
|
|
79
|
+
*/
|
|
80
|
+
var CodexStreamTranslator = class {
|
|
81
|
+
threadId;
|
|
82
|
+
started = false;
|
|
83
|
+
finished = false;
|
|
84
|
+
workDir;
|
|
85
|
+
/** Blocks by item id: their start part went out, and what they've said so far. */
|
|
86
|
+
blocks = /* @__PURE__ */ new Map();
|
|
87
|
+
/** Tool calls by id whose call went out, so a result isn't sent without one. */
|
|
88
|
+
calls = /* @__PURE__ */ new Set();
|
|
89
|
+
/** The last top-level `error`, a retry unless the next event is `turn.failed`. */
|
|
90
|
+
pendingError;
|
|
91
|
+
constructor(options) {
|
|
92
|
+
this.workDir = options.workDir;
|
|
93
|
+
}
|
|
94
|
+
/** Parts for one stdout line. Lines that aren't JSON events are passed through as raw. */
|
|
95
|
+
push(line) {
|
|
96
|
+
const trimmed = line.trim();
|
|
97
|
+
if (!trimmed) return [];
|
|
98
|
+
let event;
|
|
99
|
+
try {
|
|
100
|
+
event = JSON.parse(trimmed);
|
|
101
|
+
} catch {
|
|
102
|
+
return [{
|
|
103
|
+
type: "raw",
|
|
104
|
+
rawValue: { unparsed: trimmed }
|
|
105
|
+
}];
|
|
106
|
+
}
|
|
107
|
+
const parts = [];
|
|
108
|
+
if (!this.finished) this.translate(event, parts);
|
|
109
|
+
parts.push({
|
|
110
|
+
type: "raw",
|
|
111
|
+
rawValue: event
|
|
112
|
+
});
|
|
113
|
+
return parts;
|
|
114
|
+
}
|
|
115
|
+
/** Closes the turn when the process ends: `turn.completed` or `turn.failed` did, or it died first. */
|
|
116
|
+
end(options) {
|
|
117
|
+
if (this.finished) return [];
|
|
118
|
+
const parts = [];
|
|
119
|
+
this.start(parts);
|
|
120
|
+
this.flushError(parts);
|
|
121
|
+
this.closeBlocks(parts);
|
|
122
|
+
if (!options.aborted) {
|
|
123
|
+
const detail = options.stderr?.trim();
|
|
124
|
+
parts.push({
|
|
125
|
+
type: "error",
|
|
126
|
+
error: /* @__PURE__ */ new Error(`codex exited with code ${options.exitCode} before ending the turn${detail ? `: ${detail}` : ""}`)
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
this.finish(parts, options.aborted ? "aborted" : `exit ${options.exitCode}`);
|
|
130
|
+
return parts;
|
|
131
|
+
}
|
|
132
|
+
translate(e, parts) {
|
|
133
|
+
if (e.type === "turn.failed") this.pendingError = void 0;
|
|
134
|
+
else this.flushError(parts);
|
|
135
|
+
switch (e.type) {
|
|
136
|
+
case "thread.started":
|
|
137
|
+
this.threadId = e.thread_id ?? this.threadId;
|
|
138
|
+
return;
|
|
139
|
+
case "turn.started":
|
|
140
|
+
this.start(parts);
|
|
141
|
+
return;
|
|
142
|
+
case "item.started":
|
|
143
|
+
case "item.updated":
|
|
144
|
+
case "item.completed":
|
|
145
|
+
if (e.item) this.item(e.type, e.item, parts);
|
|
146
|
+
return;
|
|
147
|
+
case "error":
|
|
148
|
+
this.start(parts);
|
|
149
|
+
this.pendingError = e.message ?? "error";
|
|
150
|
+
return;
|
|
151
|
+
case "turn.completed":
|
|
152
|
+
this.start(parts);
|
|
153
|
+
this.closeBlocks(parts);
|
|
154
|
+
parts.push({
|
|
155
|
+
type: "finish-step",
|
|
156
|
+
finishReason: {
|
|
157
|
+
unified: "stop",
|
|
158
|
+
raw: "stop"
|
|
159
|
+
},
|
|
160
|
+
usage: toUsage(e.usage)
|
|
161
|
+
});
|
|
162
|
+
this.finish(parts, "stop", e.usage);
|
|
163
|
+
return;
|
|
164
|
+
case "turn.failed":
|
|
165
|
+
this.start(parts);
|
|
166
|
+
this.closeBlocks(parts);
|
|
167
|
+
parts.push({
|
|
168
|
+
type: "error",
|
|
169
|
+
error: new Error(e.error?.message || "codex reported a failed turn")
|
|
170
|
+
});
|
|
171
|
+
this.finish(parts, "error");
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
item(kind, item, parts) {
|
|
176
|
+
const id = item.id ?? `item-${this.calls.size + this.blocks.size}`;
|
|
177
|
+
const completed = kind === "item.completed";
|
|
178
|
+
switch (item.type) {
|
|
179
|
+
case "agent_message":
|
|
180
|
+
case "reasoning":
|
|
181
|
+
this.block(id, item.type === "agent_message" ? "text" : "reasoning", item.text, parts);
|
|
182
|
+
if (completed) this.closeBlock(id, parts);
|
|
183
|
+
return;
|
|
184
|
+
case "command_execution":
|
|
185
|
+
this.call(parts, id, "bash", { command: item.command ?? "" });
|
|
186
|
+
if (completed) this.result(parts, id, "bash", item.aggregated_output ?? "", item.status === "failed");
|
|
187
|
+
return;
|
|
188
|
+
case "file_change":
|
|
189
|
+
for (const [i, change] of (item.changes ?? []).entries()) {
|
|
190
|
+
const tool = CHANGE_TOOLS[change.kind ?? ""] ?? "edit";
|
|
191
|
+
const callId = `${id}:${i}`;
|
|
192
|
+
this.call(parts, callId, tool, { path: this.relative(change.path ?? "") });
|
|
193
|
+
if (completed) this.result(parts, callId, tool, { kind: change.kind }, item.status === "failed");
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
case "mcp_tool_call": {
|
|
197
|
+
const tool = `mcp__${item.server ?? "unknown"}__${item.tool ?? "unknown"}`;
|
|
198
|
+
this.call(parts, id, tool, item.arguments ?? {});
|
|
199
|
+
if (completed) {
|
|
200
|
+
const failed = item.status === "failed" || Boolean(item.error);
|
|
201
|
+
const output = failed ? item.error?.message ?? "the MCP tool call failed" : item.result?.structured_content ?? item.result?.content ?? null;
|
|
202
|
+
this.result(parts, id, tool, output, failed);
|
|
203
|
+
}
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
case "web_search": {
|
|
207
|
+
if (!completed) return;
|
|
208
|
+
const { type, url, query, pattern } = item.action ?? {};
|
|
209
|
+
if ((type === "open_page" || type === "find_in_page") && url) {
|
|
210
|
+
this.call(parts, id, "webFetch", {
|
|
211
|
+
url,
|
|
212
|
+
...pattern ? { pattern } : {}
|
|
213
|
+
});
|
|
214
|
+
this.result(parts, id, "webFetch", {}, false);
|
|
215
|
+
} else {
|
|
216
|
+
this.call(parts, id, "webSearch", { query: query || item.query || "" });
|
|
217
|
+
this.result(parts, id, "webSearch", {}, false);
|
|
218
|
+
}
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
flushError(parts) {
|
|
224
|
+
if (this.pendingError === void 0) return;
|
|
225
|
+
parts.push({
|
|
226
|
+
type: "finish-step",
|
|
227
|
+
finishReason: {
|
|
228
|
+
unified: "error",
|
|
229
|
+
raw: this.pendingError
|
|
230
|
+
},
|
|
231
|
+
usage: toUsage(void 0)
|
|
232
|
+
});
|
|
233
|
+
this.pendingError = void 0;
|
|
234
|
+
}
|
|
235
|
+
relative(path) {
|
|
236
|
+
const rel = posix.relative(this.workDir, path);
|
|
237
|
+
return path.startsWith("/") && !rel.startsWith("..") ? rel : path;
|
|
238
|
+
}
|
|
239
|
+
block(id, type, text, parts) {
|
|
240
|
+
if (!text) return;
|
|
241
|
+
let block = this.blocks.get(id);
|
|
242
|
+
if (!block) {
|
|
243
|
+
block = {
|
|
244
|
+
type,
|
|
245
|
+
text: ""
|
|
246
|
+
};
|
|
247
|
+
this.blocks.set(id, block);
|
|
248
|
+
parts.push({
|
|
249
|
+
type: `${type}-start`,
|
|
250
|
+
id
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
if (text.length > block.text.length && text.startsWith(block.text)) {
|
|
254
|
+
parts.push({
|
|
255
|
+
type: `${type}-delta`,
|
|
256
|
+
id,
|
|
257
|
+
delta: text.slice(block.text.length)
|
|
258
|
+
});
|
|
259
|
+
block.text = text;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
closeBlock(id, parts) {
|
|
263
|
+
const block = this.blocks.get(id);
|
|
264
|
+
if (!block) return;
|
|
265
|
+
this.blocks.delete(id);
|
|
266
|
+
parts.push({
|
|
267
|
+
type: `${block.type}-end`,
|
|
268
|
+
id
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
closeBlocks(parts) {
|
|
272
|
+
for (const id of [...this.blocks.keys()]) this.closeBlock(id, parts);
|
|
273
|
+
}
|
|
274
|
+
call(parts, id, toolName, input) {
|
|
275
|
+
if (this.calls.has(id)) return;
|
|
276
|
+
this.calls.add(id);
|
|
277
|
+
parts.push({
|
|
278
|
+
type: "tool-call",
|
|
279
|
+
toolCallId: id,
|
|
280
|
+
toolName,
|
|
281
|
+
input: JSON.stringify(input),
|
|
282
|
+
providerExecuted: true
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
result(parts, id, toolName, result, isError) {
|
|
286
|
+
parts.push({
|
|
287
|
+
type: "tool-result",
|
|
288
|
+
toolCallId: id,
|
|
289
|
+
toolName,
|
|
290
|
+
result,
|
|
291
|
+
...isError ? { isError: true } : {}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
start(parts) {
|
|
295
|
+
if (this.started) return;
|
|
296
|
+
this.started = true;
|
|
297
|
+
parts.push({ type: "stream-start" });
|
|
298
|
+
}
|
|
299
|
+
finish(parts, raw, usage) {
|
|
300
|
+
this.finished = true;
|
|
301
|
+
parts.push({
|
|
302
|
+
type: "finish",
|
|
303
|
+
finishReason: {
|
|
304
|
+
unified: raw === "stop" ? "stop" : raw === "aborted" ? "other" : "error",
|
|
305
|
+
raw
|
|
306
|
+
},
|
|
307
|
+
totalUsage: toUsage(usage)
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
//#endregion
|
|
312
|
+
//#region ../harness-codex/src/codex-tools.ts
|
|
313
|
+
const CODEX_BUILTIN_TOOLS = {
|
|
314
|
+
bash: {
|
|
315
|
+
...commonTool("bash", {
|
|
316
|
+
nativeName: "shell",
|
|
317
|
+
toolUseKind: "bash",
|
|
318
|
+
inputSchema: z.looseObject({ command: z.string() })
|
|
319
|
+
}),
|
|
320
|
+
title: "shell"
|
|
321
|
+
},
|
|
322
|
+
write: {
|
|
323
|
+
...tool({
|
|
324
|
+
title: "apply_patch (add)",
|
|
325
|
+
inputSchema: z.looseObject({ path: z.string() })
|
|
326
|
+
}),
|
|
327
|
+
toolUseKind: "edit"
|
|
328
|
+
},
|
|
329
|
+
edit: {
|
|
330
|
+
...tool({
|
|
331
|
+
title: "apply_patch (update)",
|
|
332
|
+
inputSchema: z.looseObject({ path: z.string() })
|
|
333
|
+
}),
|
|
334
|
+
toolUseKind: "edit"
|
|
335
|
+
},
|
|
336
|
+
delete: {
|
|
337
|
+
...tool({
|
|
338
|
+
title: "apply_patch (delete)",
|
|
339
|
+
inputSchema: z.looseObject({ path: z.string() })
|
|
340
|
+
}),
|
|
341
|
+
toolUseKind: "edit"
|
|
342
|
+
},
|
|
343
|
+
webSearch: {
|
|
344
|
+
...commonTool("webSearch", {
|
|
345
|
+
nativeName: "web_search",
|
|
346
|
+
toolUseKind: "readonly",
|
|
347
|
+
inputSchema: z.looseObject({ query: z.string() })
|
|
348
|
+
}),
|
|
349
|
+
title: "web_search"
|
|
350
|
+
},
|
|
351
|
+
webFetch: {
|
|
352
|
+
...tool({
|
|
353
|
+
title: "web_search (open_page)",
|
|
354
|
+
inputSchema: z.looseObject({ url: z.string() })
|
|
355
|
+
}),
|
|
356
|
+
toolUseKind: "readonly"
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
//#endregion
|
|
360
|
+
//#region ../harness-codex/src/codex-harness.ts
|
|
361
|
+
const CODEX_HARNESS_ID = "codex";
|
|
362
|
+
/** The only credential the adapter uses: an OpenAI API key. */
|
|
363
|
+
const CODEX_CREDENTIAL_ENV = "OPENAI_API_KEY";
|
|
364
|
+
const OPENAI_API_URL = "https://api.openai.com/v1";
|
|
365
|
+
/** Codex's home under the sandbox home: its config, sessions and global rules. */
|
|
366
|
+
const CODEX_HOME_DIR = ".codex";
|
|
367
|
+
/** Global rules, which Codex loads before the workspace's; `instructions` go here. */
|
|
368
|
+
const CODEX_INSTRUCTIONS_FILE = `${CODEX_HOME_DIR}/AGENTS.md`;
|
|
369
|
+
/** Where harness-placed skills go, under the sandbox home: Codex's user skill directory. */
|
|
370
|
+
const CODEX_HOME_SKILLS_DIR = ".agents/skills";
|
|
371
|
+
/** The provider the adapter gives Codex, so its requests are HTTP and it reads no login. */
|
|
372
|
+
const CODEX_PROVIDER_ID = "openai-http";
|
|
373
|
+
new URL(OPENAI_API_URL).hostname;
|
|
374
|
+
/**
|
|
375
|
+
* Codex's defaults but for what it sends besides model requests (checked with 0.157.1 behind the
|
|
376
|
+
* gateway): its analytics (to `ab.chatgpt.com`), and the plugin sync (the curated list from
|
|
377
|
+
* `github.com`, the remote catalogue from `chatgpt.com`), which an eval doesn't use. The update
|
|
378
|
+
* check is the TUI's, never `exec`'s; it's off in case that changes.
|
|
379
|
+
*/
|
|
380
|
+
const CODEX_QUIET_CONFIG = {
|
|
381
|
+
check_for_update_on_startup: false,
|
|
382
|
+
analytics: { enabled: false },
|
|
383
|
+
features: { plugins: false }
|
|
384
|
+
};
|
|
385
|
+
const lifecycleData = z.object({ threadId: z.string().optional() });
|
|
386
|
+
const unsupported = (what) => new HarnessCapabilityUnsupportedError({
|
|
387
|
+
message: `codex exec has no ${what}`,
|
|
388
|
+
harnessId: CODEX_HARNESS_ID
|
|
389
|
+
});
|
|
390
|
+
function promptText(prompt) {
|
|
391
|
+
if (typeof prompt === "string") return prompt;
|
|
392
|
+
const { content } = prompt;
|
|
393
|
+
if (typeof content === "string") return content;
|
|
394
|
+
return content.map((part) => {
|
|
395
|
+
if (part.type !== "text") throw new HarnessCapabilityUnsupportedError({
|
|
396
|
+
message: `The Codex harness takes text prompts only (got a ${part.type} part)`,
|
|
397
|
+
harnessId: CODEX_HARNESS_ID
|
|
398
|
+
});
|
|
399
|
+
return part.text;
|
|
400
|
+
}).join("\n");
|
|
401
|
+
}
|
|
402
|
+
/** A TOML inline value. JSON's strings are TOML basic strings; keys are always quoted. */
|
|
403
|
+
function toml(value) {
|
|
404
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
405
|
+
if (typeof value !== "object") return String(value);
|
|
406
|
+
if (Array.isArray(value)) return `[${value.map(toml).join(", ")}]`;
|
|
407
|
+
return `{ ${Object.entries(value).map(([k, v]) => `${JSON.stringify(k)} = ${toml(v)}`).join(", ")} }`;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Codex's `config.toml`: the quiet settings, reeval's provider as the model provider, and the MCP
|
|
411
|
+
* servers. Each top-level key is one line, tables inline, so nothing depends on section order.
|
|
412
|
+
*/
|
|
413
|
+
function buildCodexConfig(options) {
|
|
414
|
+
const config = {
|
|
415
|
+
...CODEX_QUIET_CONFIG,
|
|
416
|
+
model_provider: CODEX_PROVIDER_ID,
|
|
417
|
+
model_providers: { [CODEX_PROVIDER_ID]: {
|
|
418
|
+
name: "OpenAI",
|
|
419
|
+
base_url: OPENAI_API_URL,
|
|
420
|
+
env_key: CODEX_CREDENTIAL_ENV,
|
|
421
|
+
wire_api: "responses",
|
|
422
|
+
supports_websockets: false
|
|
423
|
+
} },
|
|
424
|
+
...options.mcpServers && Object.keys(options.mcpServers).length ? { mcp_servers: options.mcpServers } : {}
|
|
425
|
+
};
|
|
426
|
+
return `${Object.entries(config).map(([k, v]) => `${JSON.stringify(k)} = ${toml(v)}`).join("\n")}\n`;
|
|
427
|
+
}
|
|
428
|
+
const lines = (stream) => createInterface({
|
|
429
|
+
input: Readable.fromWeb(stream),
|
|
430
|
+
crlfDelay: Infinity
|
|
431
|
+
});
|
|
432
|
+
async function tail(stream, max = 4e3) {
|
|
433
|
+
let text = "";
|
|
434
|
+
for await (const line of lines(stream)) text = `${text}${line}\n`.slice(-max);
|
|
435
|
+
return text;
|
|
436
|
+
}
|
|
437
|
+
const canBroker = (sandbox) => "addRequestTransformations" in sandbox && typeof sandbox.addRequestTransformations === "function";
|
|
438
|
+
/**
|
|
439
|
+
* The Codex turn command: `codex exec --json`, no approvals or Codex sandbox (the sandbox is the
|
|
440
|
+
* isolation), outside a git repo if need be, resuming the thread after the first turn. stdin is
|
|
441
|
+
* closed, or Codex waits to append it to the prompt. The prompt is an argument, so it must stay
|
|
442
|
+
* under the shell's 128 KiB.
|
|
443
|
+
*/
|
|
444
|
+
function buildCodexCommand(options) {
|
|
445
|
+
return [
|
|
446
|
+
`cd ${shellQuote(options.workDir)} &&`,
|
|
447
|
+
`PATH=${shellQuote(options.binDir)}:"$PATH" exec codex exec --json`,
|
|
448
|
+
"--skip-git-repo-check --dangerously-bypass-approvals-and-sandbox",
|
|
449
|
+
...options.model ? [`--model ${shellQuote(options.model)}`] : [],
|
|
450
|
+
...options.threadId ? [`resume ${shellQuote(options.threadId)}`] : [],
|
|
451
|
+
`-- "$(cat ${shellQuote(options.promptFile)})" < /dev/null`
|
|
452
|
+
].join(" ");
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* OpenAI's Codex CLI (`codex exec --json`) as an AI SDK harness, in the sandbox: one process per
|
|
456
|
+
* turn, resumed by thread id, its NDJSON translated into harness stream parts with each turn's
|
|
457
|
+
* tokens, reasoning included. `@ai-sdk/harness-codex` reports neither those nor Codex's native
|
|
458
|
+
* events, and needs a newer `@ai-sdk/harness` than reeval runs.
|
|
459
|
+
*/
|
|
460
|
+
function createCodex(settings) {
|
|
461
|
+
const key = isHarnessAuthenticationEnvironment(settings.auth) ? settings.auth[CODEX_CREDENTIAL_ENV] : void 0;
|
|
462
|
+
if (!key) throw new Error(`Codex auth must be an environment object with ${CODEX_CREDENTIAL_ENV} (an OpenAI API key)`);
|
|
463
|
+
return {
|
|
464
|
+
specificationVersion: "harness-v1",
|
|
465
|
+
harnessId: CODEX_HARNESS_ID,
|
|
466
|
+
builtinTools: CODEX_BUILTIN_TOOLS,
|
|
467
|
+
lifecycleStateSchema: lifecycleData,
|
|
468
|
+
getBootstrap: getCodexBootstrap,
|
|
469
|
+
doStart: (options) => startSession(settings, key, options)
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
async function startSession(settings, key, options) {
|
|
473
|
+
const { sandboxSession: sandbox, sessionWorkDir, abortSignal } = options;
|
|
474
|
+
let sandboxKey = key;
|
|
475
|
+
if (canBroker(sandbox)) {
|
|
476
|
+
sandboxKey = generateSandboxCredentialPlaceholder();
|
|
477
|
+
await sandbox.addRequestTransformations([createCredentialRequestTransformation({
|
|
478
|
+
matchUrl: OPENAI_API_URL,
|
|
479
|
+
matchHeaders: { Authorization: `Bearer ${sandboxKey}` },
|
|
480
|
+
transformHeaders: {
|
|
481
|
+
...options.headers,
|
|
482
|
+
Authorization: `Bearer ${key}`
|
|
483
|
+
}
|
|
484
|
+
})]);
|
|
485
|
+
} else if (settings.requireCredentialBrokering) throw new Error(`The sandbox can't broker ${CODEX_CREDENTIAL_ENV} (it has no request transformations), and requireCredentialBrokering is set, so the key stays out of it.`);
|
|
486
|
+
const home = await resolveSandboxHomeDir({
|
|
487
|
+
sandbox,
|
|
488
|
+
abortSignal
|
|
489
|
+
});
|
|
490
|
+
const stateDir = harnessStateDirectoryPath({ sandboxHomeDir: home });
|
|
491
|
+
const binDir = posix.join(stateDir, CODEX_BOOTSTRAP_DIR, "bin");
|
|
492
|
+
const dataDir = harnessSessionDataDirectoryPath({
|
|
493
|
+
stateDirectory: stateDir,
|
|
494
|
+
sessionId: options.sessionId
|
|
495
|
+
});
|
|
496
|
+
await sandbox.writeTextFile({
|
|
497
|
+
path: posix.join(home, CODEX_HOME_DIR, "config.toml"),
|
|
498
|
+
content: buildCodexConfig(settings.mcpServers ? { mcpServers: settings.mcpServers } : {}),
|
|
499
|
+
abortSignal
|
|
500
|
+
});
|
|
501
|
+
const resumed = lifecycleData.safeParse(options.resumeFrom?.data);
|
|
502
|
+
let threadId = resumed.success ? resumed.data.threadId : void 0;
|
|
503
|
+
const env = { [CODEX_CREDENTIAL_ENV]: sandboxKey };
|
|
504
|
+
let turns = 0;
|
|
505
|
+
let running;
|
|
506
|
+
let ended = false;
|
|
507
|
+
const state = () => ({
|
|
508
|
+
type: "resume-session",
|
|
509
|
+
harnessId: CODEX_HARNESS_ID,
|
|
510
|
+
specificationVersion: "harness-v1",
|
|
511
|
+
data: threadId ? { threadId } : {}
|
|
512
|
+
});
|
|
513
|
+
const stop = async () => {
|
|
514
|
+
ended = true;
|
|
515
|
+
await running?.kill();
|
|
516
|
+
running = void 0;
|
|
517
|
+
};
|
|
518
|
+
return {
|
|
519
|
+
sessionId: options.sessionId,
|
|
520
|
+
isResume: options.resumeFrom !== void 0,
|
|
521
|
+
async doPromptTurn(turn) {
|
|
522
|
+
if (ended) throw new Error("This Codex session has ended");
|
|
523
|
+
if (turn.tools.length > 0) throw unsupported("host-executed tools");
|
|
524
|
+
const n = ++turns;
|
|
525
|
+
await writeSkills({
|
|
526
|
+
sandbox,
|
|
527
|
+
homePath: home,
|
|
528
|
+
skillsDir: CODEX_HOME_SKILLS_DIR,
|
|
529
|
+
skills: turn.skills,
|
|
530
|
+
...turn.abortSignal ? { abortSignal: turn.abortSignal } : {}
|
|
531
|
+
});
|
|
532
|
+
await writeInstructions({
|
|
533
|
+
sandbox,
|
|
534
|
+
homePath: home,
|
|
535
|
+
instructionsFile: CODEX_INSTRUCTIONS_FILE,
|
|
536
|
+
...turn.instructions !== void 0 ? { instructions: turn.instructions } : {},
|
|
537
|
+
...turn.abortSignal ? { abortSignal: turn.abortSignal } : {}
|
|
538
|
+
});
|
|
539
|
+
const promptFile = posix.join(dataDir, `prompt-${n}.txt`);
|
|
540
|
+
await sandbox.writeTextFile({
|
|
541
|
+
path: promptFile,
|
|
542
|
+
content: promptText(turn.prompt),
|
|
543
|
+
abortSignal: turn.abortSignal
|
|
544
|
+
});
|
|
545
|
+
const command = buildCodexCommand({
|
|
546
|
+
binDir,
|
|
547
|
+
workDir: sessionWorkDir,
|
|
548
|
+
promptFile,
|
|
549
|
+
model: turn.model,
|
|
550
|
+
threadId
|
|
551
|
+
});
|
|
552
|
+
const translator = new CodexStreamTranslator({ workDir: sessionWorkDir });
|
|
553
|
+
const emit = (parts) => {
|
|
554
|
+
for (const part of parts) turn.emit(part);
|
|
555
|
+
};
|
|
556
|
+
const proc = await sandbox.spawn({
|
|
557
|
+
command,
|
|
558
|
+
workingDirectory: sessionWorkDir,
|
|
559
|
+
env,
|
|
560
|
+
...turn.abortSignal ? { abortSignal: turn.abortSignal } : {}
|
|
561
|
+
});
|
|
562
|
+
running = proc;
|
|
563
|
+
const onAbort = () => void proc.kill();
|
|
564
|
+
turn.abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
565
|
+
return {
|
|
566
|
+
submitToolResult: () => Promise.reject(unsupported("host-executed tools")),
|
|
567
|
+
done: (async () => {
|
|
568
|
+
const stderr = tail(proc.stderr).catch(() => "");
|
|
569
|
+
try {
|
|
570
|
+
for await (const line of lines(proc.stdout)) emit(translator.push(line));
|
|
571
|
+
threadId = translator.threadId ?? threadId;
|
|
572
|
+
const { exitCode } = await proc.wait();
|
|
573
|
+
emit(translator.end({
|
|
574
|
+
exitCode,
|
|
575
|
+
stderr: await stderr,
|
|
576
|
+
aborted: turn.abortSignal?.aborted === true
|
|
577
|
+
}));
|
|
578
|
+
} finally {
|
|
579
|
+
turn.abortSignal?.removeEventListener("abort", onAbort);
|
|
580
|
+
if (running === proc) running = void 0;
|
|
581
|
+
}
|
|
582
|
+
})()
|
|
583
|
+
};
|
|
584
|
+
},
|
|
585
|
+
doCompact: () => Promise.reject(unsupported("manual compaction")),
|
|
586
|
+
doContinueTurn: () => Promise.reject(unsupported("turn continuation")),
|
|
587
|
+
doSuspendTurn: () => Promise.reject(unsupported("turn suspension")),
|
|
588
|
+
async doDetach() {
|
|
589
|
+
await stop();
|
|
590
|
+
return state();
|
|
591
|
+
},
|
|
592
|
+
async doStop() {
|
|
593
|
+
await stop();
|
|
594
|
+
return state();
|
|
595
|
+
},
|
|
596
|
+
doDestroy: stop
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
//#endregion
|
|
600
|
+
export { CODEX_CLI_VERSION as _, CODEX_INSTRUCTIONS_FILE as a, OPENAI_API_URL as c, createCodex as d, CODEX_BUILTIN_TOOLS as f, CODEX_CLI_INTEGRITY as g, CODEX_BOOTSTRAP_DIR as h, CODEX_HOME_SKILLS_DIR as i, buildCodexCommand as l, toUsage as m, CODEX_HARNESS_ID as n, CODEX_PROVIDER_ID as o, CodexStreamTranslator as p, CODEX_HOME_DIR as r, CODEX_QUIET_CONFIG as s, CODEX_CREDENTIAL_ENV as t, buildCodexConfig as u, CODEX_INSTALL_COMMAND as v, getCodexBootstrap as y };
|
|
601
|
+
|
|
602
|
+
//# sourceMappingURL=src-AEwxd1UP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-AEwxd1UP.js","names":[],"sources":["../../harness-codex/src/codex-bootstrap.ts","../../harness-codex/src/codex-stream.ts","../../harness-codex/src/codex-tools.ts","../../harness-codex/src/codex-harness.ts"],"mappings":"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"}
|