@zmeel/adapter-codex-local 0.1.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/LICENSE +21 -0
- package/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +213 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/quota-probe.d.ts +3 -0
- package/dist/cli/quota-probe.d.ts.map +1 -0
- package/dist/cli/quota-probe.js +97 -0
- package/dist/cli/quota-probe.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/server/codex-home.d.ts +6 -0
- package/dist/server/codex-home.d.ts.map +1 -0
- package/dist/server/codex-home.js +78 -0
- package/dist/server/codex-home.js.map +1 -0
- package/dist/server/execute.d.ts +15 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +496 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +57 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/parse.d.ts +12 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +67 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/quota-spawn-error.test.d.ts +2 -0
- package/dist/server/quota-spawn-error.test.d.ts.map +1 -0
- package/dist/server/quota-spawn-error.test.js +77 -0
- package/dist/server/quota-spawn-error.test.js.map +1 -0
- package/dist/server/quota.d.ts +64 -0
- package/dist/server/quota.d.ts.map +1 -0
- package/dist/server/quota.js +432 -0
- package/dist/server/quota.js.map +1 -0
- package/dist/server/skills.d.ts +8 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +65 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/test.d.ts +3 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +207 -0
- package/dist/server/test.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +116 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +3 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +232 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { inferOpenAiCompatibleBiller } from "@zmeel/adapter-utils";
|
|
5
|
+
import { asString, asNumber, asBoolean, asStringArray, parseObject, buildzmeelEnv, buildInvocationEnvForLogs, ensureAbsoluteDirectory, ensureCommandResolvable, ensurezmeelSkillSymlink, ensurePathInEnv, readzmeelRuntimeSkillEntries, resolveCommandForLogs, renderTemplate, joinPromptSections, runChildProcess, } from "@zmeel/adapter-utils/server-utils";
|
|
6
|
+
import { parseCodexJsonl, isCodexUnknownSessionError } from "./parse.js";
|
|
7
|
+
import { pathExists, prepareManagedCodexHome, resolveManagedCodexHomeDir, resolveSharedCodexHomeDir } from "./codex-home.js";
|
|
8
|
+
import { resolveCodexDesiredSkillNames } from "./skills.js";
|
|
9
|
+
const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const CODEX_ROLLOUT_NOISE_RE = /^\d{4}-\d{2}-\d{2}T[^\s]+\s+ERROR\s+codex_core::rollout::list:\s+state db missing rollout path for thread\s+[a-z0-9-]+$/i;
|
|
11
|
+
function stripCodexRolloutNoise(text) {
|
|
12
|
+
const parts = text.split(/\r?\n/);
|
|
13
|
+
const kept = [];
|
|
14
|
+
for (const part of parts) {
|
|
15
|
+
const trimmed = part.trim();
|
|
16
|
+
if (!trimmed) {
|
|
17
|
+
kept.push(part);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (CODEX_ROLLOUT_NOISE_RE.test(trimmed))
|
|
21
|
+
continue;
|
|
22
|
+
kept.push(part);
|
|
23
|
+
}
|
|
24
|
+
return kept.join("\n");
|
|
25
|
+
}
|
|
26
|
+
function firstNonEmptyLine(text) {
|
|
27
|
+
return (text
|
|
28
|
+
.split(/\r?\n/)
|
|
29
|
+
.map((line) => line.trim())
|
|
30
|
+
.find(Boolean) ?? "");
|
|
31
|
+
}
|
|
32
|
+
function hasNonEmptyEnvValue(env, key) {
|
|
33
|
+
const raw = env[key];
|
|
34
|
+
return typeof raw === "string" && raw.trim().length > 0;
|
|
35
|
+
}
|
|
36
|
+
function resolveCodexBillingType(env) {
|
|
37
|
+
// Codex uses API-key auth when OPENAI_API_KEY is present; otherwise rely on local login/session auth.
|
|
38
|
+
return hasNonEmptyEnvValue(env, "OPENAI_API_KEY") ? "api" : "subscription";
|
|
39
|
+
}
|
|
40
|
+
function resolveCodexBiller(env, billingType) {
|
|
41
|
+
const openAiCompatibleBiller = inferOpenAiCompatibleBiller(env, "openai");
|
|
42
|
+
if (openAiCompatibleBiller === "openrouter")
|
|
43
|
+
return "openrouter";
|
|
44
|
+
return billingType === "subscription" ? "chatgpt" : openAiCompatibleBiller ?? "openai";
|
|
45
|
+
}
|
|
46
|
+
async function isLikelyzmeelRepoRoot(candidate) {
|
|
47
|
+
const [hasWorkspace, hasPackageJson, hasServerDir, hasAdapterUtilsDir] = await Promise.all([
|
|
48
|
+
pathExists(path.join(candidate, "pnpm-workspace.yaml")),
|
|
49
|
+
pathExists(path.join(candidate, "package.json")),
|
|
50
|
+
pathExists(path.join(candidate, "server")),
|
|
51
|
+
pathExists(path.join(candidate, "packages", "adapter-utils")),
|
|
52
|
+
]);
|
|
53
|
+
return hasWorkspace && hasPackageJson && hasServerDir && hasAdapterUtilsDir;
|
|
54
|
+
}
|
|
55
|
+
async function isLikelyzmeelRuntimeSkillPath(candidate, skillName, options = {}) {
|
|
56
|
+
if (path.basename(candidate) !== skillName)
|
|
57
|
+
return false;
|
|
58
|
+
const skillsRoot = path.dirname(candidate);
|
|
59
|
+
if (path.basename(skillsRoot) !== "skills")
|
|
60
|
+
return false;
|
|
61
|
+
if (options.requireSkillMarkdown !== false && !(await pathExists(path.join(candidate, "SKILL.md")))) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
let cursor = path.dirname(skillsRoot);
|
|
65
|
+
for (let depth = 0; depth < 6; depth += 1) {
|
|
66
|
+
if (await isLikelyzmeelRepoRoot(cursor))
|
|
67
|
+
return true;
|
|
68
|
+
const parent = path.dirname(cursor);
|
|
69
|
+
if (parent === cursor)
|
|
70
|
+
break;
|
|
71
|
+
cursor = parent;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
async function pruneBrokenUnavailablezmeelSkillSymlinks(skillsHome, allowedSkillNames, onLog) {
|
|
76
|
+
const allowed = new Set(Array.from(allowedSkillNames));
|
|
77
|
+
const entries = await fs.readdir(skillsHome, { withFileTypes: true }).catch(() => []);
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
if (allowed.has(entry.name) || !entry.isSymbolicLink())
|
|
80
|
+
continue;
|
|
81
|
+
const target = path.join(skillsHome, entry.name);
|
|
82
|
+
const linkedPath = await fs.readlink(target).catch(() => null);
|
|
83
|
+
if (!linkedPath)
|
|
84
|
+
continue;
|
|
85
|
+
const resolvedLinkedPath = path.resolve(path.dirname(target), linkedPath);
|
|
86
|
+
if (await pathExists(resolvedLinkedPath))
|
|
87
|
+
continue;
|
|
88
|
+
if (!(await isLikelyzmeelRuntimeSkillPath(resolvedLinkedPath, entry.name, {
|
|
89
|
+
requireSkillMarkdown: false,
|
|
90
|
+
}))) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
await fs.unlink(target).catch(() => { });
|
|
94
|
+
await onLog("stdout", `[zmeel] Removed stale Codex skill "${entry.name}" from ${skillsHome}\n`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function resolveCodexSkillsDir(codexHome) {
|
|
98
|
+
return path.join(codexHome, "skills");
|
|
99
|
+
}
|
|
100
|
+
export async function ensureCodexSkillsInjected(onLog, options = {}) {
|
|
101
|
+
const allSkillsEntries = options.skillsEntries ?? await readzmeelRuntimeSkillEntries({}, __moduleDir);
|
|
102
|
+
const desiredSkillNames = options.desiredSkillNames ?? allSkillsEntries.map((entry) => entry.key);
|
|
103
|
+
const desiredSet = new Set(desiredSkillNames);
|
|
104
|
+
const skillsEntries = allSkillsEntries.filter((entry) => desiredSet.has(entry.key));
|
|
105
|
+
if (skillsEntries.length === 0)
|
|
106
|
+
return;
|
|
107
|
+
const skillsHome = options.skillsHome ?? resolveCodexSkillsDir(resolveSharedCodexHomeDir());
|
|
108
|
+
await fs.mkdir(skillsHome, { recursive: true });
|
|
109
|
+
const linkSkill = options.linkSkill;
|
|
110
|
+
for (const entry of skillsEntries) {
|
|
111
|
+
const target = path.join(skillsHome, entry.runtimeName);
|
|
112
|
+
try {
|
|
113
|
+
const existing = await fs.lstat(target).catch(() => null);
|
|
114
|
+
if (existing?.isSymbolicLink()) {
|
|
115
|
+
const linkedPath = await fs.readlink(target).catch(() => null);
|
|
116
|
+
const resolvedLinkedPath = linkedPath
|
|
117
|
+
? path.resolve(path.dirname(target), linkedPath)
|
|
118
|
+
: null;
|
|
119
|
+
if (resolvedLinkedPath &&
|
|
120
|
+
resolvedLinkedPath !== entry.source &&
|
|
121
|
+
(await isLikelyzmeelRuntimeSkillPath(resolvedLinkedPath, entry.runtimeName))) {
|
|
122
|
+
await fs.unlink(target);
|
|
123
|
+
if (linkSkill) {
|
|
124
|
+
await linkSkill(entry.source, target);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
await fs.symlink(entry.source, target);
|
|
128
|
+
}
|
|
129
|
+
await onLog("stdout", `[zmeel] Repaired Codex skill "${entry.runtimeName}" into ${skillsHome}\n`);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const result = await ensurezmeelSkillSymlink(entry.source, target, linkSkill);
|
|
134
|
+
if (result === "skipped")
|
|
135
|
+
continue;
|
|
136
|
+
await onLog("stdout", `[zmeel] ${result === "repaired" ? "Repaired" : "Injected"} Codex skill "${entry.runtimeName}" into ${skillsHome}\n`);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
await onLog("stderr", `[zmeel] Failed to inject Codex skill "${entry.key}" into ${skillsHome}: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
await pruneBrokenUnavailablezmeelSkillSymlinks(skillsHome, skillsEntries.map((entry) => entry.runtimeName), onLog);
|
|
143
|
+
}
|
|
144
|
+
export async function execute(ctx) {
|
|
145
|
+
const { runId, agent, runtime, config, context, onLog, onMeta, onSpawn, authToken } = ctx;
|
|
146
|
+
const promptTemplate = asString(config.promptTemplate, "You are agent {{agent.id}} ({{agent.name}}). Continue your zmeel work.");
|
|
147
|
+
const command = asString(config.command, "codex");
|
|
148
|
+
const model = asString(config.model, "");
|
|
149
|
+
const modelReasoningEffort = asString(config.modelReasoningEffort, asString(config.reasoningEffort, ""));
|
|
150
|
+
const search = asBoolean(config.search, false);
|
|
151
|
+
const bypass = asBoolean(config.dangerouslyBypassApprovalsAndSandbox, asBoolean(config.dangerouslyBypassSandbox, false));
|
|
152
|
+
const workspaceContext = parseObject(context.zmeelWorkspace);
|
|
153
|
+
const workspaceCwd = asString(workspaceContext.cwd, "");
|
|
154
|
+
const workspaceSource = asString(workspaceContext.source, "");
|
|
155
|
+
const workspaceStrategy = asString(workspaceContext.strategy, "");
|
|
156
|
+
const workspaceId = asString(workspaceContext.workspaceId, "");
|
|
157
|
+
const workspaceRepoUrl = asString(workspaceContext.repoUrl, "");
|
|
158
|
+
const workspaceRepoRef = asString(workspaceContext.repoRef, "");
|
|
159
|
+
const workspaceBranch = asString(workspaceContext.branchName, "");
|
|
160
|
+
const workspaceWorktreePath = asString(workspaceContext.worktreePath, "");
|
|
161
|
+
const agentHome = asString(workspaceContext.agentHome, "");
|
|
162
|
+
const workspaceHints = Array.isArray(context.zmeelWorkspaces)
|
|
163
|
+
? context.zmeelWorkspaces.filter((value) => typeof value === "object" && value !== null)
|
|
164
|
+
: [];
|
|
165
|
+
const runtimeServiceIntents = Array.isArray(context.zmeelRuntimeServiceIntents)
|
|
166
|
+
? context.zmeelRuntimeServiceIntents.filter((value) => typeof value === "object" && value !== null)
|
|
167
|
+
: [];
|
|
168
|
+
const runtimeServices = Array.isArray(context.zmeelRuntimeServices)
|
|
169
|
+
? context.zmeelRuntimeServices.filter((value) => typeof value === "object" && value !== null)
|
|
170
|
+
: [];
|
|
171
|
+
const runtimePrimaryUrl = asString(context.zmeelRuntimePrimaryUrl, "");
|
|
172
|
+
const configuredCwd = asString(config.cwd, "");
|
|
173
|
+
const useConfiguredInsteadOfAgentHome = workspaceSource === "agent_home" && configuredCwd.length > 0;
|
|
174
|
+
const effectiveWorkspaceCwd = useConfiguredInsteadOfAgentHome ? "" : workspaceCwd;
|
|
175
|
+
const cwd = effectiveWorkspaceCwd || configuredCwd || process.cwd();
|
|
176
|
+
const envConfig = parseObject(config.env);
|
|
177
|
+
const configuredCodexHome = typeof envConfig.CODEX_HOME === "string" && envConfig.CODEX_HOME.trim().length > 0
|
|
178
|
+
? path.resolve(envConfig.CODEX_HOME.trim())
|
|
179
|
+
: null;
|
|
180
|
+
const codexSkillEntries = await readzmeelRuntimeSkillEntries(config, __moduleDir);
|
|
181
|
+
const desiredSkillNames = resolveCodexDesiredSkillNames(config, codexSkillEntries);
|
|
182
|
+
await ensureAbsoluteDirectory(cwd, { createIfMissing: true });
|
|
183
|
+
const preparedManagedCodexHome = configuredCodexHome ? null : await prepareManagedCodexHome(process.env, onLog, agent.companyId);
|
|
184
|
+
const defaultCodexHome = resolveManagedCodexHomeDir(process.env, agent.companyId);
|
|
185
|
+
const effectiveCodexHome = configuredCodexHome ?? preparedManagedCodexHome ?? defaultCodexHome;
|
|
186
|
+
await fs.mkdir(effectiveCodexHome, { recursive: true });
|
|
187
|
+
// Inject skills into the same CODEX_HOME that Codex will actually run with
|
|
188
|
+
// (managed home in the default case, or an explicit override from adapter config).
|
|
189
|
+
const codexSkillsDir = resolveCodexSkillsDir(effectiveCodexHome);
|
|
190
|
+
await ensureCodexSkillsInjected(onLog, {
|
|
191
|
+
skillsHome: codexSkillsDir,
|
|
192
|
+
skillsEntries: codexSkillEntries,
|
|
193
|
+
desiredSkillNames,
|
|
194
|
+
});
|
|
195
|
+
const hasExplicitApiKey = typeof envConfig.ZMEEL_API_KEY === "string" && envConfig.ZMEEL_API_KEY.trim().length > 0;
|
|
196
|
+
const env = { ...buildzmeelEnv(agent) };
|
|
197
|
+
env.CODEX_HOME = effectiveCodexHome;
|
|
198
|
+
env.ZMEEL_RUN_ID = runId;
|
|
199
|
+
const wakeTaskId = (typeof context.taskId === "string" && context.taskId.trim().length > 0 && context.taskId.trim()) ||
|
|
200
|
+
(typeof context.issueId === "string" && context.issueId.trim().length > 0 && context.issueId.trim()) ||
|
|
201
|
+
null;
|
|
202
|
+
const wakeReason = typeof context.wakeReason === "string" && context.wakeReason.trim().length > 0
|
|
203
|
+
? context.wakeReason.trim()
|
|
204
|
+
: null;
|
|
205
|
+
const wakeCommentId = (typeof context.wakeCommentId === "string" && context.wakeCommentId.trim().length > 0 && context.wakeCommentId.trim()) ||
|
|
206
|
+
(typeof context.commentId === "string" && context.commentId.trim().length > 0 && context.commentId.trim()) ||
|
|
207
|
+
null;
|
|
208
|
+
const approvalId = typeof context.approvalId === "string" && context.approvalId.trim().length > 0
|
|
209
|
+
? context.approvalId.trim()
|
|
210
|
+
: null;
|
|
211
|
+
const approvalStatus = typeof context.approvalStatus === "string" && context.approvalStatus.trim().length > 0
|
|
212
|
+
? context.approvalStatus.trim()
|
|
213
|
+
: null;
|
|
214
|
+
const linkedIssueIds = Array.isArray(context.issueIds)
|
|
215
|
+
? context.issueIds.filter((value) => typeof value === "string" && value.trim().length > 0)
|
|
216
|
+
: [];
|
|
217
|
+
if (wakeTaskId) {
|
|
218
|
+
env.ZMEEL_TASK_ID = wakeTaskId;
|
|
219
|
+
}
|
|
220
|
+
if (wakeReason) {
|
|
221
|
+
env.ZMEEL_WAKE_REASON = wakeReason;
|
|
222
|
+
}
|
|
223
|
+
if (wakeCommentId) {
|
|
224
|
+
env.ZMEEL_WAKE_COMMENT_ID = wakeCommentId;
|
|
225
|
+
}
|
|
226
|
+
if (approvalId) {
|
|
227
|
+
env.ZMEEL_APPROVAL_ID = approvalId;
|
|
228
|
+
}
|
|
229
|
+
if (approvalStatus) {
|
|
230
|
+
env.ZMEEL_APPROVAL_STATUS = approvalStatus;
|
|
231
|
+
}
|
|
232
|
+
if (linkedIssueIds.length > 0) {
|
|
233
|
+
env.ZMEEL_LINKED_ISSUE_IDS = linkedIssueIds.join(",");
|
|
234
|
+
}
|
|
235
|
+
if (effectiveWorkspaceCwd) {
|
|
236
|
+
env.ZMEEL_WORKSPACE_CWD = effectiveWorkspaceCwd;
|
|
237
|
+
}
|
|
238
|
+
if (workspaceSource) {
|
|
239
|
+
env.ZMEEL_WORKSPACE_SOURCE = workspaceSource;
|
|
240
|
+
}
|
|
241
|
+
if (workspaceStrategy) {
|
|
242
|
+
env.ZMEEL_WORKSPACE_STRATEGY = workspaceStrategy;
|
|
243
|
+
}
|
|
244
|
+
if (workspaceId) {
|
|
245
|
+
env.ZMEEL_WORKSPACE_ID = workspaceId;
|
|
246
|
+
}
|
|
247
|
+
if (workspaceRepoUrl) {
|
|
248
|
+
env.ZMEEL_WORKSPACE_REPO_URL = workspaceRepoUrl;
|
|
249
|
+
}
|
|
250
|
+
if (workspaceRepoRef) {
|
|
251
|
+
env.ZMEEL_WORKSPACE_REPO_REF = workspaceRepoRef;
|
|
252
|
+
}
|
|
253
|
+
if (workspaceBranch) {
|
|
254
|
+
env.ZMEEL_WORKSPACE_BRANCH = workspaceBranch;
|
|
255
|
+
}
|
|
256
|
+
if (workspaceWorktreePath) {
|
|
257
|
+
env.ZMEEL_WORKSPACE_WORKTREE_PATH = workspaceWorktreePath;
|
|
258
|
+
}
|
|
259
|
+
if (agentHome) {
|
|
260
|
+
env.AGENT_HOME = agentHome;
|
|
261
|
+
}
|
|
262
|
+
if (workspaceHints.length > 0) {
|
|
263
|
+
env.ZMEEL_WORKSPACES_JSON = JSON.stringify(workspaceHints);
|
|
264
|
+
}
|
|
265
|
+
if (runtimeServiceIntents.length > 0) {
|
|
266
|
+
env.ZMEEL_RUNTIME_SERVICE_INTENTS_JSON = JSON.stringify(runtimeServiceIntents);
|
|
267
|
+
}
|
|
268
|
+
if (runtimeServices.length > 0) {
|
|
269
|
+
env.ZMEEL_RUNTIME_SERVICES_JSON = JSON.stringify(runtimeServices);
|
|
270
|
+
}
|
|
271
|
+
if (runtimePrimaryUrl) {
|
|
272
|
+
env.ZMEEL_RUNTIME_PRIMARY_URL = runtimePrimaryUrl;
|
|
273
|
+
}
|
|
274
|
+
for (const [k, v] of Object.entries(envConfig)) {
|
|
275
|
+
if (typeof v === "string")
|
|
276
|
+
env[k] = v;
|
|
277
|
+
}
|
|
278
|
+
if (!hasExplicitApiKey && authToken) {
|
|
279
|
+
env.ZMEEL_API_KEY = authToken;
|
|
280
|
+
}
|
|
281
|
+
const effectiveEnv = Object.fromEntries(Object.entries({ ...process.env, ...env }).filter((entry) => typeof entry[1] === "string"));
|
|
282
|
+
const billingType = resolveCodexBillingType(effectiveEnv);
|
|
283
|
+
const runtimeEnv = ensurePathInEnv(effectiveEnv);
|
|
284
|
+
await ensureCommandResolvable(command, cwd, runtimeEnv);
|
|
285
|
+
const resolvedCommand = await resolveCommandForLogs(command, cwd, runtimeEnv);
|
|
286
|
+
const loggedEnv = buildInvocationEnvForLogs(env, {
|
|
287
|
+
runtimeEnv,
|
|
288
|
+
includeRuntimeKeys: ["HOME"],
|
|
289
|
+
resolvedCommand,
|
|
290
|
+
});
|
|
291
|
+
const timeoutSec = asNumber(config.timeoutSec, 0);
|
|
292
|
+
const graceSec = asNumber(config.graceSec, 20);
|
|
293
|
+
const extraArgs = (() => {
|
|
294
|
+
const fromExtraArgs = asStringArray(config.extraArgs);
|
|
295
|
+
if (fromExtraArgs.length > 0)
|
|
296
|
+
return fromExtraArgs;
|
|
297
|
+
return asStringArray(config.args);
|
|
298
|
+
})();
|
|
299
|
+
const runtimeSessionParams = parseObject(runtime.sessionParams);
|
|
300
|
+
const runtimeSessionId = asString(runtimeSessionParams.sessionId, runtime.sessionId ?? "");
|
|
301
|
+
const runtimeSessionCwd = asString(runtimeSessionParams.cwd, "");
|
|
302
|
+
const canResumeSession = runtimeSessionId.length > 0 &&
|
|
303
|
+
(runtimeSessionCwd.length === 0 || path.resolve(runtimeSessionCwd) === path.resolve(cwd));
|
|
304
|
+
const sessionId = canResumeSession ? runtimeSessionId : null;
|
|
305
|
+
if (runtimeSessionId && !canResumeSession) {
|
|
306
|
+
await onLog("stdout", `[zmeel] Codex session "${runtimeSessionId}" was saved for cwd "${runtimeSessionCwd}" and will not be resumed in "${cwd}".\n`);
|
|
307
|
+
}
|
|
308
|
+
const instructionsFilePath = asString(config.instructionsFilePath, "").trim();
|
|
309
|
+
const instructionsDir = instructionsFilePath ? `${path.dirname(instructionsFilePath)}/` : "";
|
|
310
|
+
let instructionsPrefix = "";
|
|
311
|
+
let instructionsChars = 0;
|
|
312
|
+
if (instructionsFilePath) {
|
|
313
|
+
try {
|
|
314
|
+
const instructionsContents = await fs.readFile(instructionsFilePath, "utf8");
|
|
315
|
+
instructionsPrefix =
|
|
316
|
+
`${instructionsContents}\n\n` +
|
|
317
|
+
`The above agent instructions were loaded from ${instructionsFilePath}. ` +
|
|
318
|
+
`Resolve any relative file references from ${instructionsDir}.\n\n`;
|
|
319
|
+
instructionsChars = instructionsPrefix.length;
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
323
|
+
await onLog("stdout", `[zmeel] Warning: could not read agent instructions file "${instructionsFilePath}": ${reason}\n`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const repoAgentsNote = "Codex exec automatically applies repo-scoped AGENTS.md instructions from the current workspace; zmeel does not currently suppress that discovery.";
|
|
327
|
+
const commandNotes = (() => {
|
|
328
|
+
if (!instructionsFilePath) {
|
|
329
|
+
return [repoAgentsNote];
|
|
330
|
+
}
|
|
331
|
+
if (instructionsPrefix.length > 0) {
|
|
332
|
+
return [
|
|
333
|
+
`Loaded agent instructions from ${instructionsFilePath}`,
|
|
334
|
+
`Prepended instructions + path directive to stdin prompt (relative references from ${instructionsDir}).`,
|
|
335
|
+
repoAgentsNote,
|
|
336
|
+
];
|
|
337
|
+
}
|
|
338
|
+
return [
|
|
339
|
+
`Configured instructionsFilePath ${instructionsFilePath}, but file could not be read; continuing without injected instructions.`,
|
|
340
|
+
repoAgentsNote,
|
|
341
|
+
];
|
|
342
|
+
})();
|
|
343
|
+
const bootstrapPromptTemplate = asString(config.bootstrapPromptTemplate, "");
|
|
344
|
+
const templateData = {
|
|
345
|
+
agentId: agent.id,
|
|
346
|
+
companyId: agent.companyId,
|
|
347
|
+
runId,
|
|
348
|
+
company: { id: agent.companyId },
|
|
349
|
+
agent,
|
|
350
|
+
run: { id: runId, source: "on_demand" },
|
|
351
|
+
context,
|
|
352
|
+
};
|
|
353
|
+
const renderedPrompt = renderTemplate(promptTemplate, templateData);
|
|
354
|
+
const renderedBootstrapPrompt = !sessionId && bootstrapPromptTemplate.trim().length > 0
|
|
355
|
+
? renderTemplate(bootstrapPromptTemplate, templateData).trim()
|
|
356
|
+
: "";
|
|
357
|
+
const sessionHandoffNote = asString(context.zmeelSessionHandoffMarkdown, "").trim();
|
|
358
|
+
const prompt = joinPromptSections([
|
|
359
|
+
instructionsPrefix,
|
|
360
|
+
renderedBootstrapPrompt,
|
|
361
|
+
sessionHandoffNote,
|
|
362
|
+
renderedPrompt,
|
|
363
|
+
]);
|
|
364
|
+
const promptMetrics = {
|
|
365
|
+
promptChars: prompt.length,
|
|
366
|
+
instructionsChars,
|
|
367
|
+
bootstrapPromptChars: renderedBootstrapPrompt.length,
|
|
368
|
+
sessionHandoffChars: sessionHandoffNote.length,
|
|
369
|
+
heartbeatPromptChars: renderedPrompt.length,
|
|
370
|
+
};
|
|
371
|
+
const buildArgs = (resumeSessionId) => {
|
|
372
|
+
const args = ["exec", "--json"];
|
|
373
|
+
if (search)
|
|
374
|
+
args.unshift("--search");
|
|
375
|
+
if (bypass)
|
|
376
|
+
args.push("--dangerously-bypass-approvals-and-sandbox");
|
|
377
|
+
if (model)
|
|
378
|
+
args.push("--model", model);
|
|
379
|
+
if (modelReasoningEffort)
|
|
380
|
+
args.push("-c", `model_reasoning_effort=${JSON.stringify(modelReasoningEffort)}`);
|
|
381
|
+
if (extraArgs.length > 0)
|
|
382
|
+
args.push(...extraArgs);
|
|
383
|
+
if (resumeSessionId)
|
|
384
|
+
args.push("resume", resumeSessionId, "-");
|
|
385
|
+
else
|
|
386
|
+
args.push("-");
|
|
387
|
+
return args;
|
|
388
|
+
};
|
|
389
|
+
const runAttempt = async (resumeSessionId) => {
|
|
390
|
+
const args = buildArgs(resumeSessionId);
|
|
391
|
+
if (onMeta) {
|
|
392
|
+
await onMeta({
|
|
393
|
+
adapterType: "codex_local",
|
|
394
|
+
command: resolvedCommand,
|
|
395
|
+
cwd,
|
|
396
|
+
commandNotes,
|
|
397
|
+
commandArgs: args.map((value, idx) => {
|
|
398
|
+
if (idx === args.length - 1 && value !== "-")
|
|
399
|
+
return `<prompt ${prompt.length} chars>`;
|
|
400
|
+
return value;
|
|
401
|
+
}),
|
|
402
|
+
env: loggedEnv,
|
|
403
|
+
prompt,
|
|
404
|
+
promptMetrics,
|
|
405
|
+
context,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
const proc = await runChildProcess(runId, command, args, {
|
|
409
|
+
cwd,
|
|
410
|
+
env,
|
|
411
|
+
stdin: prompt,
|
|
412
|
+
timeoutSec,
|
|
413
|
+
graceSec,
|
|
414
|
+
onSpawn,
|
|
415
|
+
onLog: async (stream, chunk) => {
|
|
416
|
+
if (stream !== "stderr") {
|
|
417
|
+
await onLog(stream, chunk);
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
const cleaned = stripCodexRolloutNoise(chunk);
|
|
421
|
+
if (!cleaned.trim())
|
|
422
|
+
return;
|
|
423
|
+
await onLog(stream, cleaned);
|
|
424
|
+
},
|
|
425
|
+
});
|
|
426
|
+
const cleanedStderr = stripCodexRolloutNoise(proc.stderr);
|
|
427
|
+
return {
|
|
428
|
+
proc: {
|
|
429
|
+
...proc,
|
|
430
|
+
stderr: cleanedStderr,
|
|
431
|
+
},
|
|
432
|
+
rawStderr: proc.stderr,
|
|
433
|
+
parsed: parseCodexJsonl(proc.stdout),
|
|
434
|
+
};
|
|
435
|
+
};
|
|
436
|
+
const toResult = (attempt, clearSessionOnMissingSession = false) => {
|
|
437
|
+
if (attempt.proc.timedOut) {
|
|
438
|
+
return {
|
|
439
|
+
exitCode: attempt.proc.exitCode,
|
|
440
|
+
signal: attempt.proc.signal,
|
|
441
|
+
timedOut: true,
|
|
442
|
+
errorMessage: `Timed out after ${timeoutSec}s`,
|
|
443
|
+
clearSession: clearSessionOnMissingSession,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
const resolvedSessionId = attempt.parsed.sessionId ?? runtimeSessionId ?? runtime.sessionId ?? null;
|
|
447
|
+
const resolvedSessionParams = resolvedSessionId
|
|
448
|
+
? {
|
|
449
|
+
sessionId: resolvedSessionId,
|
|
450
|
+
cwd,
|
|
451
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
452
|
+
...(workspaceRepoUrl ? { repoUrl: workspaceRepoUrl } : {}),
|
|
453
|
+
...(workspaceRepoRef ? { repoRef: workspaceRepoRef } : {}),
|
|
454
|
+
}
|
|
455
|
+
: null;
|
|
456
|
+
const parsedError = typeof attempt.parsed.errorMessage === "string" ? attempt.parsed.errorMessage.trim() : "";
|
|
457
|
+
const stderrLine = firstNonEmptyLine(attempt.proc.stderr);
|
|
458
|
+
const fallbackErrorMessage = parsedError ||
|
|
459
|
+
stderrLine ||
|
|
460
|
+
`Codex exited with code ${attempt.proc.exitCode ?? -1}`;
|
|
461
|
+
return {
|
|
462
|
+
exitCode: attempt.proc.exitCode,
|
|
463
|
+
signal: attempt.proc.signal,
|
|
464
|
+
timedOut: false,
|
|
465
|
+
errorMessage: (attempt.proc.exitCode ?? 0) === 0
|
|
466
|
+
? null
|
|
467
|
+
: fallbackErrorMessage,
|
|
468
|
+
usage: attempt.parsed.usage,
|
|
469
|
+
sessionId: resolvedSessionId,
|
|
470
|
+
sessionParams: resolvedSessionParams,
|
|
471
|
+
sessionDisplayId: resolvedSessionId,
|
|
472
|
+
provider: "openai",
|
|
473
|
+
biller: resolveCodexBiller(effectiveEnv, billingType),
|
|
474
|
+
model,
|
|
475
|
+
billingType,
|
|
476
|
+
costUsd: null,
|
|
477
|
+
resultJson: {
|
|
478
|
+
stdout: attempt.proc.stdout,
|
|
479
|
+
stderr: attempt.proc.stderr,
|
|
480
|
+
},
|
|
481
|
+
summary: attempt.parsed.summary,
|
|
482
|
+
clearSession: Boolean(clearSessionOnMissingSession && !resolvedSessionId),
|
|
483
|
+
};
|
|
484
|
+
};
|
|
485
|
+
const initial = await runAttempt(sessionId);
|
|
486
|
+
if (sessionId &&
|
|
487
|
+
!initial.proc.timedOut &&
|
|
488
|
+
(initial.proc.exitCode ?? 0) !== 0 &&
|
|
489
|
+
isCodexUnknownSessionError(initial.proc.stdout, initial.rawStderr)) {
|
|
490
|
+
await onLog("stdout", `[zmeel] Codex resume session "${sessionId}" is unavailable; retrying with a fresh session.\n`);
|
|
491
|
+
const retry = await runAttempt(null);
|
|
492
|
+
return toResult(retry, true);
|
|
493
|
+
}
|
|
494
|
+
return toResult(initial);
|
|
495
|
+
}
|
|
496
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/server/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { execute, ensureCodexSkillsInjected } from "./execute.js";
|
|
2
|
+
export { listCodexSkills, syncCodexSkills } from "./skills.js";
|
|
3
|
+
export { testEnvironment } from "./test.js";
|
|
4
|
+
export { parseCodexJsonl, isCodexUnknownSessionError } from "./parse.js";
|
|
5
|
+
export { getQuotaWindows, readCodexAuthInfo, readCodexToken, fetchCodexQuota, fetchCodexRpcQuota, mapCodexRpcQuota, secondsToWindowLabel, fetchWithTimeout, codexHomeDir, } from "./quota.js";
|
|
6
|
+
import type { AdapterSessionCodec } from "@zmeel/adapter-utils";
|
|
7
|
+
export declare const sessionCodec: AdapterSessionCodec;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAMhE,eAAO,MAAM,YAAY,EAAE,mBA4C1B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export { execute, ensureCodexSkillsInjected } from "./execute.js";
|
|
2
|
+
export { listCodexSkills, syncCodexSkills } from "./skills.js";
|
|
3
|
+
export { testEnvironment } from "./test.js";
|
|
4
|
+
export { parseCodexJsonl, isCodexUnknownSessionError } from "./parse.js";
|
|
5
|
+
export { getQuotaWindows, readCodexAuthInfo, readCodexToken, fetchCodexQuota, fetchCodexRpcQuota, mapCodexRpcQuota, secondsToWindowLabel, fetchWithTimeout, codexHomeDir, } from "./quota.js";
|
|
6
|
+
function readNonEmptyString(value) {
|
|
7
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
8
|
+
}
|
|
9
|
+
export const sessionCodec = {
|
|
10
|
+
deserialize(raw) {
|
|
11
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
12
|
+
return null;
|
|
13
|
+
const record = raw;
|
|
14
|
+
const sessionId = readNonEmptyString(record.sessionId) ?? readNonEmptyString(record.session_id);
|
|
15
|
+
if (!sessionId)
|
|
16
|
+
return null;
|
|
17
|
+
const cwd = readNonEmptyString(record.cwd) ??
|
|
18
|
+
readNonEmptyString(record.workdir) ??
|
|
19
|
+
readNonEmptyString(record.folder);
|
|
20
|
+
const workspaceId = readNonEmptyString(record.workspaceId) ?? readNonEmptyString(record.workspace_id);
|
|
21
|
+
const repoUrl = readNonEmptyString(record.repoUrl) ?? readNonEmptyString(record.repo_url);
|
|
22
|
+
const repoRef = readNonEmptyString(record.repoRef) ?? readNonEmptyString(record.repo_ref);
|
|
23
|
+
return {
|
|
24
|
+
sessionId,
|
|
25
|
+
...(cwd ? { cwd } : {}),
|
|
26
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
27
|
+
...(repoUrl ? { repoUrl } : {}),
|
|
28
|
+
...(repoRef ? { repoRef } : {}),
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
serialize(params) {
|
|
32
|
+
if (!params)
|
|
33
|
+
return null;
|
|
34
|
+
const sessionId = readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id);
|
|
35
|
+
if (!sessionId)
|
|
36
|
+
return null;
|
|
37
|
+
const cwd = readNonEmptyString(params.cwd) ??
|
|
38
|
+
readNonEmptyString(params.workdir) ??
|
|
39
|
+
readNonEmptyString(params.folder);
|
|
40
|
+
const workspaceId = readNonEmptyString(params.workspaceId) ?? readNonEmptyString(params.workspace_id);
|
|
41
|
+
const repoUrl = readNonEmptyString(params.repoUrl) ?? readNonEmptyString(params.repo_url);
|
|
42
|
+
const repoRef = readNonEmptyString(params.repoRef) ?? readNonEmptyString(params.repo_ref);
|
|
43
|
+
return {
|
|
44
|
+
sessionId,
|
|
45
|
+
...(cwd ? { cwd } : {}),
|
|
46
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
47
|
+
...(repoUrl ? { repoUrl } : {}),
|
|
48
|
+
...(repoRef ? { repoRef } : {}),
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
getDisplayId(params) {
|
|
52
|
+
if (!params)
|
|
53
|
+
return null;
|
|
54
|
+
return readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function parseCodexJsonl(stdout: string): {
|
|
2
|
+
sessionId: string | null;
|
|
3
|
+
summary: string;
|
|
4
|
+
usage: {
|
|
5
|
+
inputTokens: number;
|
|
6
|
+
cachedInputTokens: number;
|
|
7
|
+
outputTokens: number;
|
|
8
|
+
};
|
|
9
|
+
errorMessage: string | null;
|
|
10
|
+
};
|
|
11
|
+
export declare function isCodexUnknownSessionError(stdout: string, stderr: string): boolean;
|
|
12
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM;;;;;;;;;EA2D7C;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CASlF"}
|