@evermore.work/adapter-codex-local 2026.509.0-canary.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.
Files changed (107) hide show
  1. package/dist/cli/format-event.d.ts +2 -0
  2. package/dist/cli/format-event.d.ts.map +1 -0
  3. package/dist/cli/format-event.js +213 -0
  4. package/dist/cli/format-event.js.map +1 -0
  5. package/dist/cli/index.d.ts +2 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +2 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/cli/quota-probe.d.ts +3 -0
  10. package/dist/cli/quota-probe.d.ts.map +1 -0
  11. package/dist/cli/quota-probe.js +97 -0
  12. package/dist/cli/quota-probe.js.map +1 -0
  13. package/dist/index.d.ts +17 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +83 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/server/codex-args.d.ts +11 -0
  18. package/dist/server/codex-args.d.ts.map +1 -0
  19. package/dist/server/codex-args.js +55 -0
  20. package/dist/server/codex-args.js.map +1 -0
  21. package/dist/server/codex-args.test.d.ts +2 -0
  22. package/dist/server/codex-args.test.d.ts.map +1 -0
  23. package/dist/server/codex-args.test.js +63 -0
  24. package/dist/server/codex-args.test.js.map +1 -0
  25. package/dist/server/codex-home.d.ts +15 -0
  26. package/dist/server/codex-home.d.ts.map +1 -0
  27. package/dist/server/codex-home.js +107 -0
  28. package/dist/server/codex-home.js.map +1 -0
  29. package/dist/server/execute.d.ts +15 -0
  30. package/dist/server/execute.d.ts.map +1 -0
  31. package/dist/server/execute.js +669 -0
  32. package/dist/server/execute.js.map +1 -0
  33. package/dist/server/execute.remote.test.d.ts +2 -0
  34. package/dist/server/execute.remote.test.d.ts.map +1 -0
  35. package/dist/server/execute.remote.test.js +382 -0
  36. package/dist/server/execute.remote.test.js.map +1 -0
  37. package/dist/server/index.d.ts +8 -0
  38. package/dist/server/index.d.ts.map +1 -0
  39. package/dist/server/index.js +57 -0
  40. package/dist/server/index.js.map +1 -0
  41. package/dist/server/parse.d.ts +22 -0
  42. package/dist/server/parse.d.ts.map +1 -0
  43. package/dist/server/parse.js +213 -0
  44. package/dist/server/parse.js.map +1 -0
  45. package/dist/server/parse.test.d.ts +2 -0
  46. package/dist/server/parse.test.d.ts.map +1 -0
  47. package/dist/server/parse.test.js +107 -0
  48. package/dist/server/parse.test.js.map +1 -0
  49. package/dist/server/quota-spawn-error.test.d.ts +2 -0
  50. package/dist/server/quota-spawn-error.test.d.ts.map +1 -0
  51. package/dist/server/quota-spawn-error.test.js +77 -0
  52. package/dist/server/quota-spawn-error.test.js.map +1 -0
  53. package/dist/server/quota.d.ts +64 -0
  54. package/dist/server/quota.d.ts.map +1 -0
  55. package/dist/server/quota.js +432 -0
  56. package/dist/server/quota.js.map +1 -0
  57. package/dist/server/skills.d.ts +8 -0
  58. package/dist/server/skills.d.ts.map +1 -0
  59. package/dist/server/skills.js +65 -0
  60. package/dist/server/skills.js.map +1 -0
  61. package/dist/server/test.d.ts +3 -0
  62. package/dist/server/test.d.ts.map +1 -0
  63. package/dist/server/test.js +259 -0
  64. package/dist/server/test.js.map +1 -0
  65. package/dist/ui/build-config.d.ts +3 -0
  66. package/dist/ui/build-config.d.ts.map +1 -0
  67. package/dist/ui/build-config.js +113 -0
  68. package/dist/ui/build-config.js.map +1 -0
  69. package/dist/ui/build-config.test.d.ts +2 -0
  70. package/dist/ui/build-config.test.d.ts.map +1 -0
  71. package/dist/ui/build-config.test.js +49 -0
  72. package/dist/ui/build-config.test.js.map +1 -0
  73. package/dist/ui/index.d.ts +3 -0
  74. package/dist/ui/index.d.ts.map +1 -0
  75. package/dist/ui/index.js +3 -0
  76. package/dist/ui/index.js.map +1 -0
  77. package/dist/ui/parse-stdout.d.ts +3 -0
  78. package/dist/ui/parse-stdout.d.ts.map +1 -0
  79. package/dist/ui/parse-stdout.js +261 -0
  80. package/dist/ui/parse-stdout.js.map +1 -0
  81. package/dist/ui/parse-stdout.test.d.ts +2 -0
  82. package/dist/ui/parse-stdout.test.d.ts.map +1 -0
  83. package/dist/ui/parse-stdout.test.js +77 -0
  84. package/dist/ui/parse-stdout.test.js.map +1 -0
  85. package/package.json +55 -0
  86. package/skills/diagnose-why-work-stopped/SKILL.md +161 -0
  87. package/skills/evermore/SKILL.md +366 -0
  88. package/skills/evermore/references/api-reference.md +899 -0
  89. package/skills/evermore/references/company-skills.md +193 -0
  90. package/skills/evermore/references/issue-workspaces.md +80 -0
  91. package/skills/evermore/references/routines.md +187 -0
  92. package/skills/evermore/references/workflows.md +141 -0
  93. package/skills/evermore-converting-plans-to-tasks/SKILL.md +42 -0
  94. package/skills/evermore-create-agent/SKILL.md +163 -0
  95. package/skills/evermore-create-agent/references/agent-instruction-templates.md +123 -0
  96. package/skills/evermore-create-agent/references/agents/coder.md +64 -0
  97. package/skills/evermore-create-agent/references/agents/qa.md +88 -0
  98. package/skills/evermore-create-agent/references/agents/securityengineer.md +135 -0
  99. package/skills/evermore-create-agent/references/agents/uxdesigner.md +115 -0
  100. package/skills/evermore-create-agent/references/api-reference.md +110 -0
  101. package/skills/evermore-create-agent/references/baseline-role-guide.md +168 -0
  102. package/skills/evermore-create-agent/references/draft-review-checklist.md +95 -0
  103. package/skills/evermore-create-plugin/SKILL.md +101 -0
  104. package/skills/evermore-dev/SKILL.md +267 -0
  105. package/skills/para-memory-files/SKILL.md +104 -0
  106. package/skills/para-memory-files/references/schemas.md +35 -0
  107. package/skills/terminal-bench-loop/SKILL.md +236 -0
@@ -0,0 +1,259 @@
1
+ import { asString, parseObject, ensurePathInEnv, } from "@evermore.work/adapter-utils/server-utils";
2
+ import { ensureAdapterExecutionTargetCommandResolvable, ensureAdapterExecutionTargetDirectory, maybeRunSandboxInstallCommand, runAdapterExecutionTargetProcess, describeAdapterExecutionTarget, resolveAdapterExecutionTargetCwd, } from "@evermore.work/adapter-utils/execution-target";
3
+ import path from "node:path";
4
+ import os from "node:os";
5
+ import { parseCodexJsonl } from "./parse.js";
6
+ import { SANDBOX_INSTALL_COMMAND } from "../index.js";
7
+ import { codexHomeDir, readCodexAuthInfo } from "./quota.js";
8
+ import { buildCodexExecArgs } from "./codex-args.js";
9
+ function summarizeStatus(checks) {
10
+ if (checks.some((check) => check.level === "error"))
11
+ return "fail";
12
+ if (checks.some((check) => check.level === "warn"))
13
+ return "warn";
14
+ return "pass";
15
+ }
16
+ function isNonEmpty(value) {
17
+ return typeof value === "string" && value.trim().length > 0;
18
+ }
19
+ function firstNonEmptyLine(text) {
20
+ return (text
21
+ .split(/\r?\n/)
22
+ .map((line) => line.trim())
23
+ .find(Boolean) ?? "");
24
+ }
25
+ function commandLooksLike(command, expected) {
26
+ const base = path.basename(command).toLowerCase();
27
+ return base === expected || base === `${expected}.cmd` || base === `${expected}.exe`;
28
+ }
29
+ function summarizeProbeDetail(stdout, stderr, parsedError) {
30
+ const raw = parsedError?.trim() || firstNonEmptyLine(stderr) || firstNonEmptyLine(stdout);
31
+ if (!raw)
32
+ return null;
33
+ const clean = raw.replace(/\s+/g, " ").trim();
34
+ const max = 240;
35
+ return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;
36
+ }
37
+ const CODEX_AUTH_REQUIRED_RE = /(?:not\s+logged\s+in|login\s+required|authentication\s+required|unauthorized|invalid(?:\s+or\s+missing)?\s+api(?:[_\s-]?key)?|openai[_\s-]?api[_\s-]?key|api[_\s-]?key.*required|please\s+run\s+`?codex\s+login`?)/i;
38
+ export async function testEnvironment(ctx) {
39
+ const checks = [];
40
+ const config = parseObject(ctx.config);
41
+ const command = asString(config.command, "codex");
42
+ const target = ctx.executionTarget ?? null;
43
+ const targetIsRemote = target?.kind === "remote";
44
+ const cwd = resolveAdapterExecutionTargetCwd(target, asString(config.cwd, ""), process.cwd());
45
+ const targetLabel = targetIsRemote
46
+ ? ctx.environmentName ?? describeAdapterExecutionTarget(target)
47
+ : null;
48
+ const runId = `codex-envtest-${Date.now()}-${Math.random().toString(16).slice(2)}`;
49
+ if (targetLabel) {
50
+ checks.push({
51
+ code: "codex_environment_target",
52
+ level: "info",
53
+ message: `Probing inside environment: ${targetLabel}`,
54
+ });
55
+ }
56
+ try {
57
+ await ensureAdapterExecutionTargetDirectory(runId, target, cwd, {
58
+ cwd,
59
+ env: {},
60
+ createIfMissing: true,
61
+ });
62
+ checks.push({
63
+ code: "codex_cwd_valid",
64
+ level: "info",
65
+ message: `Working directory is valid: ${cwd}`,
66
+ });
67
+ }
68
+ catch (err) {
69
+ checks.push({
70
+ code: "codex_cwd_invalid",
71
+ level: "error",
72
+ message: err instanceof Error ? err.message : "Invalid working directory",
73
+ detail: cwd,
74
+ });
75
+ }
76
+ const envConfig = parseObject(config.env);
77
+ const env = {};
78
+ for (const [key, value] of Object.entries(envConfig)) {
79
+ if (typeof value === "string")
80
+ env[key] = value;
81
+ }
82
+ const runtimeEnv = ensurePathInEnv({ ...process.env, ...env });
83
+ const installCheck = await maybeRunSandboxInstallCommand({
84
+ runId,
85
+ target,
86
+ adapterKey: "codex",
87
+ installCommand: SANDBOX_INSTALL_COMMAND,
88
+ detectCommand: command,
89
+ env,
90
+ });
91
+ if (installCheck)
92
+ checks.push(installCheck);
93
+ try {
94
+ await ensureAdapterExecutionTargetCommandResolvable(command, target, cwd, runtimeEnv);
95
+ checks.push({
96
+ code: "codex_command_resolvable",
97
+ level: "info",
98
+ message: `Command is executable: ${command}`,
99
+ });
100
+ }
101
+ catch (err) {
102
+ checks.push({
103
+ code: "codex_command_unresolvable",
104
+ level: "error",
105
+ message: err instanceof Error ? err.message : "Command is not executable",
106
+ detail: command,
107
+ });
108
+ }
109
+ const configOpenAiKey = env.OPENAI_API_KEY;
110
+ const hostOpenAiKey = targetIsRemote ? undefined : process.env.OPENAI_API_KEY;
111
+ if (isNonEmpty(configOpenAiKey) || isNonEmpty(hostOpenAiKey)) {
112
+ const source = isNonEmpty(configOpenAiKey) ? "adapter config env" : "server environment";
113
+ checks.push({
114
+ code: "codex_openai_api_key_present",
115
+ level: "info",
116
+ message: "OPENAI_API_KEY is set for Codex authentication.",
117
+ detail: `Detected in ${source}.`,
118
+ });
119
+ }
120
+ else if (!targetIsRemote) {
121
+ // Local-only auth file check. On remote targets, the probe will surface
122
+ // any missing-auth errors directly from the remote `codex` invocation.
123
+ const codexHome = isNonEmpty(env.CODEX_HOME) ? env.CODEX_HOME : undefined;
124
+ const codexAuth = await readCodexAuthInfo(codexHome).catch(() => null);
125
+ if (codexAuth) {
126
+ checks.push({
127
+ code: "codex_native_auth_present",
128
+ level: "info",
129
+ message: "Codex is authenticated via its own auth configuration.",
130
+ detail: codexAuth.email ? `Logged in as ${codexAuth.email}.` : `Credentials found in ${path.join(codexHome ?? codexHomeDir(), "auth.json")}.`,
131
+ });
132
+ }
133
+ else {
134
+ checks.push({
135
+ code: "codex_openai_api_key_missing",
136
+ level: "warn",
137
+ message: "OPENAI_API_KEY is not set. Codex runs may fail until authentication is configured.",
138
+ hint: "Set OPENAI_API_KEY in adapter env, shell environment, or run `codex auth` to log in.",
139
+ });
140
+ }
141
+ }
142
+ const canRunProbe = checks.every((check) => check.code !== "codex_cwd_invalid" && check.code !== "codex_command_unresolvable");
143
+ if (canRunProbe) {
144
+ if (!commandLooksLike(command, "codex")) {
145
+ checks.push({
146
+ code: "codex_hello_probe_skipped_custom_command",
147
+ level: "info",
148
+ message: "Skipped hello probe because command is not `codex`.",
149
+ detail: command,
150
+ hint: "Use the `codex` CLI command to run the automatic login and installation probe.",
151
+ });
152
+ }
153
+ else {
154
+ const execArgs = buildCodexExecArgs({ ...config, fastMode: false });
155
+ const args = execArgs.args;
156
+ if (execArgs.fastModeIgnoredReason) {
157
+ checks.push({
158
+ code: "codex_fast_mode_unsupported_model",
159
+ level: "warn",
160
+ message: execArgs.fastModeIgnoredReason,
161
+ hint: "Switch the agent model to GPT-5.4 or enter a manual model ID to enable Codex Fast mode.",
162
+ });
163
+ }
164
+ // Codex CLI (>= 0.122) ignores the OPENAI_API_KEY env var and only reads
165
+ // credentials from $CODEX_HOME/auth.json. When we have a key available,
166
+ // wrap the probe with a shell that materializes a per-run auth.json so
167
+ // the CLI can authenticate. The key content is passed via env (not on
168
+ // the command line) to avoid leaking it into process listings.
169
+ const probeApiKey = isNonEmpty(configOpenAiKey)
170
+ ? configOpenAiKey
171
+ : isNonEmpty(hostOpenAiKey)
172
+ ? hostOpenAiKey
173
+ : null;
174
+ let probeCommand = command;
175
+ let probeArgs = args;
176
+ const probeEnv = { ...env };
177
+ if (probeApiKey) {
178
+ const probeHome = targetIsRemote
179
+ ? `/tmp/evermore-codex-probe-${runId}`
180
+ : path.join(os.tmpdir(), `evermore-codex-probe-${runId}`);
181
+ probeEnv.CODEX_HOME = probeHome;
182
+ probeEnv._EVERMORE_CODEX_AUTH_JSON = JSON.stringify({ OPENAI_API_KEY: probeApiKey });
183
+ probeCommand = "sh";
184
+ // Trap on EXIT removes the probe home (with the API-key auth.json) on
185
+ // any exit path; we drop `exec` so the wrapper shell stays alive long
186
+ // enough for the trap to fire after the child returns.
187
+ probeArgs = [
188
+ "-c",
189
+ 'set -e; mkdir -p "$CODEX_HOME"; umask 077; printf "%s" "$_EVERMORE_CODEX_AUTH_JSON" > "$CODEX_HOME/auth.json"; unset _EVERMORE_CODEX_AUTH_JSON; trap \'rm -rf "$CODEX_HOME"\' EXIT INT TERM; "$0" "$@"',
190
+ command,
191
+ ...args,
192
+ ];
193
+ }
194
+ const probe = await runAdapterExecutionTargetProcess(runId, target, probeCommand, probeArgs, {
195
+ cwd,
196
+ env: probeEnv,
197
+ timeoutSec: 45,
198
+ graceSec: 5,
199
+ stdin: "Respond with hello.",
200
+ onLog: async () => { },
201
+ });
202
+ const parsed = parseCodexJsonl(probe.stdout);
203
+ const detail = summarizeProbeDetail(probe.stdout, probe.stderr, parsed.errorMessage);
204
+ const authEvidence = `${parsed.errorMessage ?? ""}\n${probe.stdout}\n${probe.stderr}`.trim();
205
+ if (probe.timedOut) {
206
+ checks.push({
207
+ code: "codex_hello_probe_timed_out",
208
+ level: "warn",
209
+ message: "Codex hello probe timed out.",
210
+ hint: "Retry the probe. If this persists, verify Codex can run `Respond with hello` from this directory manually.",
211
+ });
212
+ }
213
+ else if ((probe.exitCode ?? 1) === 0) {
214
+ const summary = parsed.summary.trim();
215
+ const hasHello = /\bhello\b/i.test(summary);
216
+ checks.push({
217
+ code: hasHello ? "codex_hello_probe_passed" : "codex_hello_probe_unexpected_output",
218
+ level: hasHello ? "info" : "warn",
219
+ message: hasHello
220
+ ? "Codex hello probe succeeded."
221
+ : "Codex probe ran but did not return `hello` as expected.",
222
+ ...(summary ? { detail: summary.replace(/\s+/g, " ").trim().slice(0, 240) } : {}),
223
+ ...(hasHello
224
+ ? {}
225
+ : {
226
+ hint: "Try the probe manually (`codex exec --json -` then prompt: Respond with hello) to inspect full output.",
227
+ }),
228
+ });
229
+ }
230
+ else if (CODEX_AUTH_REQUIRED_RE.test(authEvidence)) {
231
+ checks.push({
232
+ code: "codex_hello_probe_auth_required",
233
+ level: "warn",
234
+ message: "Codex CLI is installed, but authentication is not ready.",
235
+ ...(detail ? { detail } : {}),
236
+ hint: probeApiKey
237
+ ? "OPENAI_API_KEY was provided but Codex still rejected the request. Verify the key is valid for the OpenAI Responses API (e.g. `curl -H \"Authorization: Bearer $OPENAI_API_KEY\" https://api.openai.com/v1/models`), or run `codex login` and seed `~/.codex/auth.json`."
238
+ : "Codex CLI does not read OPENAI_API_KEY from the environment; set OPENAI_API_KEY in this adapter's config (so Evermore writes it to `$CODEX_HOME/auth.json`) or run `codex login` on the host first.",
239
+ });
240
+ }
241
+ else {
242
+ checks.push({
243
+ code: "codex_hello_probe_failed",
244
+ level: "error",
245
+ message: "Codex hello probe failed.",
246
+ ...(detail ? { detail } : {}),
247
+ hint: "Run `codex exec --json -` manually in this working directory and prompt `Respond with hello` to debug.",
248
+ });
249
+ }
250
+ }
251
+ }
252
+ return {
253
+ adapterType: ctx.adapterType,
254
+ status: summarizeStatus(checks),
255
+ checks,
256
+ testedAt: new Date().toISOString(),
257
+ };
258
+ }
259
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CreateConfigValues } from "@evermore.work/adapter-utils";
2
+ export declare function buildCodexLocalConfig(v: CreateConfigValues): Record<string, unknown>;
3
+ //# sourceMappingURL=build-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAoEvE,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqCpF"}
@@ -0,0 +1,113 @@
1
+ import { DEFAULT_CODEX_LOCAL_BYPASS_APPROVALS_AND_SANDBOX, DEFAULT_CODEX_LOCAL_MODEL, } from "../index.js";
2
+ function parseCommaArgs(value) {
3
+ return value
4
+ .split(",")
5
+ .map((item) => item.trim())
6
+ .filter(Boolean);
7
+ }
8
+ function parseEnvVars(text) {
9
+ const env = {};
10
+ for (const line of text.split(/\r?\n/)) {
11
+ const trimmed = line.trim();
12
+ if (!trimmed || trimmed.startsWith("#"))
13
+ continue;
14
+ const eq = trimmed.indexOf("=");
15
+ if (eq <= 0)
16
+ continue;
17
+ const key = trimmed.slice(0, eq).trim();
18
+ const value = trimmed.slice(eq + 1);
19
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
20
+ continue;
21
+ env[key] = value;
22
+ }
23
+ return env;
24
+ }
25
+ function parseEnvBindings(bindings) {
26
+ if (typeof bindings !== "object" || bindings === null || Array.isArray(bindings))
27
+ return {};
28
+ const env = {};
29
+ for (const [key, raw] of Object.entries(bindings)) {
30
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
31
+ continue;
32
+ if (typeof raw === "string") {
33
+ env[key] = { type: "plain", value: raw };
34
+ continue;
35
+ }
36
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
37
+ continue;
38
+ const rec = raw;
39
+ if (rec.type === "plain" && typeof rec.value === "string") {
40
+ env[key] = { type: "plain", value: rec.value };
41
+ continue;
42
+ }
43
+ if (rec.type === "secret_ref" && typeof rec.secretId === "string") {
44
+ env[key] = {
45
+ type: "secret_ref",
46
+ secretId: rec.secretId,
47
+ ...(typeof rec.version === "number" || rec.version === "latest"
48
+ ? { version: rec.version }
49
+ : {}),
50
+ };
51
+ }
52
+ }
53
+ return env;
54
+ }
55
+ function parseJsonObject(text) {
56
+ const trimmed = text.trim();
57
+ if (!trimmed)
58
+ return null;
59
+ try {
60
+ const parsed = JSON.parse(trimmed);
61
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
62
+ return null;
63
+ return parsed;
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ export function buildCodexLocalConfig(v) {
70
+ const ac = {};
71
+ if (v.cwd)
72
+ ac.cwd = v.cwd;
73
+ if (v.instructionsFilePath)
74
+ ac.instructionsFilePath = v.instructionsFilePath;
75
+ ac.model = v.model || DEFAULT_CODEX_LOCAL_MODEL;
76
+ if (v.thinkingEffort)
77
+ ac.modelReasoningEffort = v.thinkingEffort;
78
+ ac.timeoutSec = 0;
79
+ ac.graceSec = 15;
80
+ const env = parseEnvBindings(v.envBindings);
81
+ const legacy = parseEnvVars(v.envVars);
82
+ for (const [key, value] of Object.entries(legacy)) {
83
+ if (!Object.prototype.hasOwnProperty.call(env, key)) {
84
+ env[key] = { type: "plain", value };
85
+ }
86
+ }
87
+ if (Object.keys(env).length > 0)
88
+ ac.env = env;
89
+ ac.search = v.search;
90
+ ac.fastMode = v.fastMode;
91
+ ac.dangerouslyBypassApprovalsAndSandbox =
92
+ typeof v.dangerouslyBypassSandbox === "boolean"
93
+ ? v.dangerouslyBypassSandbox
94
+ : DEFAULT_CODEX_LOCAL_BYPASS_APPROVALS_AND_SANDBOX;
95
+ if (v.workspaceStrategyType === "git_worktree") {
96
+ ac.workspaceStrategy = {
97
+ type: "git_worktree",
98
+ ...(v.workspaceBaseRef ? { baseRef: v.workspaceBaseRef } : {}),
99
+ ...(v.workspaceBranchTemplate ? { branchTemplate: v.workspaceBranchTemplate } : {}),
100
+ ...(v.worktreeParentDir ? { worktreeParentDir: v.worktreeParentDir } : {}),
101
+ };
102
+ }
103
+ const runtimeServices = parseJsonObject(v.runtimeServicesJson ?? "");
104
+ if (runtimeServices && Array.isArray(runtimeServices.services)) {
105
+ ac.workspaceRuntime = runtimeServices;
106
+ }
107
+ if (v.command)
108
+ ac.command = v.command;
109
+ if (v.extraArgs)
110
+ ac.extraArgs = parseCommaArgs(v.extraArgs);
111
+ return ac;
112
+ }
113
+ //# sourceMappingURL=build-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.js","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=build-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.test.d.ts","sourceRoot":"","sources":["../../src/ui/build-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildCodexLocalConfig } from "./build-config.js";
3
+ function makeValues(overrides = {}) {
4
+ return {
5
+ adapterType: "codex_local",
6
+ cwd: "",
7
+ instructionsFilePath: "",
8
+ promptTemplate: "",
9
+ model: "gpt-5.4",
10
+ thinkingEffort: "",
11
+ chrome: false,
12
+ dangerouslySkipPermissions: true,
13
+ search: false,
14
+ fastMode: false,
15
+ dangerouslyBypassSandbox: true,
16
+ command: "",
17
+ args: "",
18
+ extraArgs: "",
19
+ envVars: "",
20
+ envBindings: {},
21
+ url: "",
22
+ bootstrapPrompt: "",
23
+ payloadTemplateJson: "",
24
+ workspaceStrategyType: "project_primary",
25
+ workspaceBaseRef: "",
26
+ workspaceBranchTemplate: "",
27
+ worktreeParentDir: "",
28
+ runtimeServicesJson: "",
29
+ maxTurnsPerRun: 1000,
30
+ heartbeatEnabled: false,
31
+ intervalSec: 300,
32
+ ...overrides,
33
+ };
34
+ }
35
+ describe("buildCodexLocalConfig", () => {
36
+ it("persists the fastMode toggle into adapter config", () => {
37
+ const config = buildCodexLocalConfig(makeValues({
38
+ search: true,
39
+ fastMode: true,
40
+ }));
41
+ expect(config).toMatchObject({
42
+ model: "gpt-5.4",
43
+ search: true,
44
+ fastMode: true,
45
+ dangerouslyBypassApprovalsAndSandbox: true,
46
+ });
47
+ });
48
+ });
49
+ //# sourceMappingURL=build-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.test.js","sourceRoot":"","sources":["../../src/ui/build-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,SAAS,UAAU,CAAC,YAAyC,EAAE;IAC7D,OAAO;QACL,WAAW,EAAE,aAAa;QAC1B,GAAG,EAAE,EAAE;QACP,oBAAoB,EAAE,EAAE;QACxB,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE,SAAS;QAChB,cAAc,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK;QACb,0BAA0B,EAAE,IAAI;QAChC,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,KAAK;QACf,wBAAwB,EAAE,IAAI;QAC9B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,EAAE;QACP,eAAe,EAAE,EAAE;QACnB,mBAAmB,EAAE,EAAE;QACvB,qBAAqB,EAAE,iBAAiB;QACxC,gBAAgB,EAAE,EAAE;QACpB,uBAAuB,EAAE,EAAE;QAC3B,iBAAiB,EAAE,EAAE;QACrB,mBAAmB,EAAE,EAAE;QACvB,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,GAAG;QAChB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,qBAAqB,CAClC,UAAU,CAAC;YACT,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YAC3B,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,oCAAoC,EAAE,IAAI;SAC3C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseCodexStdoutLine } from "./parse-stdout.js";
2
+ export { buildCodexLocalConfig } from "./build-config.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseCodexStdoutLine } from "./parse-stdout.js";
2
+ export { buildCodexLocalConfig } from "./build-config.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type TranscriptEntry } from "@evermore.work/adapter-utils";
2
+ export declare function parseCodexStdoutLine(line: string, ts: string): TranscriptEntry[];
3
+ //# sourceMappingURL=parse-stdout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-stdout.d.ts","sourceRoot":"","sources":["../../src/ui/parse-stdout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AA+NpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,EAAE,CA2EhF"}