negotium 0.6.2 → 0.6.4
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/dist/agent-helpers.js +259 -254
- package/dist/agent-helpers.js.map +6 -6
- package/dist/{chunk-cvxe25re.js → chunk-cxtngn3p.js} +120 -313
- package/dist/{chunk-cvxe25re.js.map → chunk-cxtngn3p.js.map} +7 -8
- package/dist/chunk-tfwbft4r.js +160 -0
- package/dist/chunk-tfwbft4r.js.map +12 -0
- package/dist/chunk-v7tj2vtq.js +205 -0
- package/dist/chunk-v7tj2vtq.js.map +10 -0
- package/dist/hosted-agent.js +2 -2
- package/dist/hosted-agent.js.map +2 -2
- package/dist/main.js +346 -273
- package/dist/main.js.map +9 -8
- package/dist/mcp-factories.js +278 -273
- package/dist/mcp-factories.js.map +6 -6
- package/dist/registry.js +24 -173
- package/dist/registry.js.map +4 -7
- package/dist/rollout.js +7 -5
- package/dist/rollout.js.map +2 -2
- package/dist/runtime/cron/mcp-server.ts +2 -2
- package/dist/runtime/src/agents/codex-registry.ts +4 -1
- package/dist/runtime/src/cron-mcp-host.ts +5 -0
- package/dist/runtime/src/runtime/inbox.ts +6 -0
- package/dist/runtime/src/version.ts +1 -1
- package/dist/types/packages/core/src/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import {
|
|
3
|
+
encodeClaudeCwd,
|
|
4
|
+
writeClaudeRollout
|
|
5
|
+
} from "./chunk-v7tj2vtq.js";
|
|
2
6
|
import {
|
|
3
7
|
CLAUDE_EFFORT_VALUES,
|
|
4
8
|
CODEX_EFFORT_VALUES,
|
|
@@ -9,15 +13,12 @@ import {
|
|
|
9
13
|
__require,
|
|
10
14
|
__toESM,
|
|
11
15
|
assertUuidLike,
|
|
12
|
-
encodeClaudeCwd,
|
|
13
16
|
ensureCwdExists,
|
|
14
17
|
extractChatPairs,
|
|
15
18
|
hostedCodexHomePath,
|
|
16
|
-
latestCodexRolloutPath,
|
|
17
19
|
logger,
|
|
18
|
-
writeClaudeRollout,
|
|
19
20
|
writeCodexRollout
|
|
20
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-cxtngn3p.js";
|
|
21
22
|
|
|
22
23
|
// ../../packages/core/src/agents/claude-registry.ts
|
|
23
24
|
import { existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from "fs";
|
|
@@ -100,159 +101,8 @@ var claudeRegistryOperations = {
|
|
|
100
101
|
};
|
|
101
102
|
|
|
102
103
|
// ../../packages/core/src/agents/codex-registry.ts
|
|
103
|
-
import { existsSync as
|
|
104
|
-
import { join as
|
|
105
|
-
|
|
106
|
-
// ../../packages/core/src/agents/codex-app-server.ts
|
|
107
|
-
import { spawn } from "child_process";
|
|
108
|
-
|
|
109
|
-
// ../../packages/core/src/agents/codex-native-multi-agent.ts
|
|
110
|
-
import {
|
|
111
|
-
chmodSync,
|
|
112
|
-
copyFileSync,
|
|
113
|
-
existsSync as existsSync2,
|
|
114
|
-
mkdtempSync,
|
|
115
|
-
readFileSync,
|
|
116
|
-
renameSync as renameSync2,
|
|
117
|
-
rmSync,
|
|
118
|
-
unlinkSync as unlinkSync2,
|
|
119
|
-
writeFileSync
|
|
120
|
-
} from "fs";
|
|
121
|
-
import { createRequire } from "module";
|
|
122
|
-
import { dirname, join as join2 } from "path";
|
|
123
|
-
|
|
124
|
-
// ../../packages/core/src/version.ts
|
|
125
|
-
var NEGOTIUM_VERSION = "0.6.1";
|
|
126
|
-
|
|
127
|
-
// ../../packages/core/src/agents/codex-native-multi-agent.ts
|
|
128
|
-
var moduleRequire = createRequire(import.meta.url);
|
|
129
|
-
var codexSdkPackagePath = moduleRequire.resolve("@openai/codex-sdk/package.json");
|
|
130
|
-
var codexSdkRequire = createRequire(codexSdkPackagePath);
|
|
131
|
-
var bundledCodexPackagePath = codexSdkRequire.resolve("@openai/codex/package.json");
|
|
132
|
-
function readPackageVersion(packageJsonPath) {
|
|
133
|
-
const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
134
|
-
if (typeof parsed.version !== "string" || !parsed.version.trim()) {
|
|
135
|
-
throw new Error(`Codex package has no valid version: ${packageJsonPath}`);
|
|
136
|
-
}
|
|
137
|
-
return parsed.version;
|
|
138
|
-
}
|
|
139
|
-
var BUNDLED_CODEX_VERSION = readPackageVersion(bundledCodexPackagePath);
|
|
140
|
-
var SAFE_BUNDLED_CODEX_VERSION = BUNDLED_CODEX_VERSION.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
141
|
-
var NEGOTIUM_MODEL_CACHE = `negotium-models-cache-${SAFE_BUNDLED_CODEX_VERSION}.json`;
|
|
142
|
-
var NEGOTIUM_MODEL_CATALOG = `negotium-model-catalog-${SAFE_BUNDLED_CODEX_VERSION}.json`;
|
|
143
|
-
function codexCliScriptPath() {
|
|
144
|
-
return join2(dirname(bundledCodexPackagePath), "bin", "codex.js");
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// ../../packages/core/src/agents/codex-app-server.ts
|
|
148
|
-
function createCodexAppServerForker(host) {
|
|
149
|
-
return async (parentThreadId) => {
|
|
150
|
-
const child = host.spawnServer();
|
|
151
|
-
return await new Promise((resolve, reject) => {
|
|
152
|
-
let settled = false;
|
|
153
|
-
let stdoutBuffer = "";
|
|
154
|
-
let stderr = "";
|
|
155
|
-
const timer = setTimeout(() => finish(new Error("Codex thread fork timed out")), host.timeoutMs);
|
|
156
|
-
const finish = (error, result) => {
|
|
157
|
-
if (settled)
|
|
158
|
-
return;
|
|
159
|
-
settled = true;
|
|
160
|
-
clearTimeout(timer);
|
|
161
|
-
try {
|
|
162
|
-
child.stdin.end();
|
|
163
|
-
child.kill();
|
|
164
|
-
} catch {}
|
|
165
|
-
if (error)
|
|
166
|
-
reject(error);
|
|
167
|
-
else if (result)
|
|
168
|
-
resolve(result);
|
|
169
|
-
else
|
|
170
|
-
reject(new Error("Codex thread fork returned no result"));
|
|
171
|
-
};
|
|
172
|
-
const send = (message) => {
|
|
173
|
-
child.stdin.write(`${JSON.stringify(message)}
|
|
174
|
-
`);
|
|
175
|
-
};
|
|
176
|
-
child.stderr.on("data", (chunk) => {
|
|
177
|
-
if (stderr.length < 8192)
|
|
178
|
-
stderr += String(chunk);
|
|
179
|
-
});
|
|
180
|
-
child.on("error", (error) => finish(error));
|
|
181
|
-
child.on("exit", (code, signal) => {
|
|
182
|
-
if (settled)
|
|
183
|
-
return;
|
|
184
|
-
const detail = signal ? `signal ${signal}` : `code ${code ?? 1}`;
|
|
185
|
-
finish(new Error(`Codex app server exited with ${detail}${stderr.trim() ? `: ${stderr.trim()}` : ""}`));
|
|
186
|
-
});
|
|
187
|
-
child.stdout.on("data", (chunk) => {
|
|
188
|
-
stdoutBuffer += String(chunk);
|
|
189
|
-
for (;; ) {
|
|
190
|
-
const newline = stdoutBuffer.indexOf(`
|
|
191
|
-
`);
|
|
192
|
-
if (newline < 0)
|
|
193
|
-
break;
|
|
194
|
-
const line = stdoutBuffer.slice(0, newline);
|
|
195
|
-
stdoutBuffer = stdoutBuffer.slice(newline + 1);
|
|
196
|
-
let message;
|
|
197
|
-
try {
|
|
198
|
-
message = JSON.parse(line);
|
|
199
|
-
} catch {
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
if (message.id === 1) {
|
|
203
|
-
if (message.error) {
|
|
204
|
-
finish(new Error(String(message.error.message || "Codex initialization failed")));
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
send({ method: "initialized" });
|
|
208
|
-
send({ id: 2, method: "thread/fork", params: { threadId: parentThreadId } });
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
if (message.id !== 2)
|
|
212
|
-
continue;
|
|
213
|
-
if (message.error) {
|
|
214
|
-
finish(new Error(String(message.error.message || "Codex thread fork failed")));
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
const forkId = message.result?.thread?.id;
|
|
218
|
-
if (typeof forkId !== "string" || !forkId) {
|
|
219
|
-
finish(new Error("Codex thread fork returned no thread id"));
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
const rolloutPath = host.findRolloutPath(forkId);
|
|
223
|
-
if (!rolloutPath) {
|
|
224
|
-
finish(new Error(`Codex thread fork rollout was not found for ${forkId}`));
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
finish(undefined, { forkId, rolloutPath });
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
send({
|
|
232
|
-
id: 1,
|
|
233
|
-
method: "initialize",
|
|
234
|
-
params: {
|
|
235
|
-
clientInfo: { name: "negotium", version: NEGOTIUM_VERSION }
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
var forkCodexThread = createCodexAppServerForker({
|
|
242
|
-
spawnServer() {
|
|
243
|
-
return spawn(process.execPath, [codexCliScriptPath(), "app-server", "--stdio"], {
|
|
244
|
-
env: { ...process.env, CODEX_HOME: hostedCodexHomePath() },
|
|
245
|
-
stdio: ["pipe", "pipe", "pipe"]
|
|
246
|
-
});
|
|
247
|
-
},
|
|
248
|
-
findRolloutPath: latestCodexRolloutPath,
|
|
249
|
-
timeoutMs: 15000
|
|
250
|
-
});
|
|
251
|
-
async function forkCodexSession(parentThreadId) {
|
|
252
|
-
return await forkCodexThread(parentThreadId);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// ../../packages/core/src/agents/codex-registry.ts
|
|
104
|
+
import { existsSync as existsSync2, unlinkSync as unlinkSync2 } from "fs";
|
|
105
|
+
import { join as join2 } from "path";
|
|
256
106
|
var VALID_EFFORTS2 = new Set(CODEX_EFFORT_VALUES);
|
|
257
107
|
var codexRegistry = {
|
|
258
108
|
kind: "codex",
|
|
@@ -283,22 +133,23 @@ var codexRegistryOperations = {
|
|
|
283
133
|
return { sessionId: threadId, rolloutPath };
|
|
284
134
|
},
|
|
285
135
|
async forkSession({ parentSessionId }) {
|
|
136
|
+
const { forkCodexSession } = await import("./chunk-tfwbft4r.js");
|
|
286
137
|
return await forkCodexSession(parentSessionId);
|
|
287
138
|
},
|
|
288
139
|
async cleanupRollouts({ sessionIds }) {
|
|
289
140
|
if (sessionIds.length === 0)
|
|
290
141
|
return;
|
|
291
|
-
const sessionsDir =
|
|
292
|
-
if (!
|
|
142
|
+
const sessionsDir = join2(hostedCodexHomePath(), "sessions");
|
|
143
|
+
if (!existsSync2(sessionsDir))
|
|
293
144
|
return;
|
|
294
145
|
const failures = [];
|
|
295
146
|
for (const tid of sessionIds) {
|
|
296
147
|
try {
|
|
297
148
|
const glob = new Bun.Glob(`**/rollout-*-${tid}.jsonl`);
|
|
298
149
|
for await (const rel of glob.scan({ cwd: sessionsDir, onlyFiles: true })) {
|
|
299
|
-
const path =
|
|
150
|
+
const path = join2(sessionsDir, rel);
|
|
300
151
|
try {
|
|
301
|
-
|
|
152
|
+
unlinkSync2(path);
|
|
302
153
|
} catch (e) {
|
|
303
154
|
if (e?.code !== "ENOENT") {
|
|
304
155
|
logger.warn({ err: e, path }, "codex cleanupRollouts: unlink failed");
|
|
@@ -319,9 +170,9 @@ var codexRegistryOperations = {
|
|
|
319
170
|
|
|
320
171
|
// ../../packages/core/src/agents/maestro-registry.ts
|
|
321
172
|
import { randomUUID } from "crypto";
|
|
322
|
-
import { existsSync as
|
|
173
|
+
import { existsSync as existsSync3, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "fs";
|
|
323
174
|
import { homedir as homedir2 } from "os";
|
|
324
|
-
import { join as
|
|
175
|
+
import { join as join3, resolve } from "path";
|
|
325
176
|
var ALIAS_MAP2 = {
|
|
326
177
|
"deepseek-pro": "deepseek-v4-pro",
|
|
327
178
|
"deepseek-flash": "deepseek-v4-flash",
|
|
@@ -350,19 +201,19 @@ var maestroRegistry = {
|
|
|
350
201
|
}
|
|
351
202
|
};
|
|
352
203
|
function maestroSessionsDir() {
|
|
353
|
-
return
|
|
204
|
+
return join3(process.env.MAESTRO_DATA_DIR ? resolve(process.env.MAESTRO_DATA_DIR) : join3(homedir2(), ".maestro"), "sessions");
|
|
354
205
|
}
|
|
355
206
|
function maestroSessionPath(sessionId) {
|
|
356
|
-
return
|
|
207
|
+
return join3(maestroSessionsDir(), `${sessionId}.jsonl`);
|
|
357
208
|
}
|
|
358
209
|
function maestroActiveSessionPath(sessionId) {
|
|
359
|
-
return
|
|
210
|
+
return join3(maestroSessionsDir(), `${sessionId}.active.jsonl`);
|
|
360
211
|
}
|
|
361
212
|
function existingCreatedAt(path) {
|
|
362
|
-
if (!
|
|
213
|
+
if (!existsSync3(path))
|
|
363
214
|
return;
|
|
364
215
|
try {
|
|
365
|
-
const firstLine =
|
|
216
|
+
const firstLine = readFileSync(path, "utf8").split(`
|
|
366
217
|
`, 1)[0];
|
|
367
218
|
const parsed = JSON.parse(firstLine);
|
|
368
219
|
return typeof parsed._meta?.createdAt === "string" ? parsed._meta.createdAt : undefined;
|
|
@@ -395,7 +246,7 @@ function writeRollout(options) {
|
|
|
395
246
|
},
|
|
396
247
|
...messages
|
|
397
248
|
];
|
|
398
|
-
|
|
249
|
+
writeFileSync(path, `${lines.map((line) => JSON.stringify(line)).join(`
|
|
399
250
|
`)}
|
|
400
251
|
`, {
|
|
401
252
|
mode: 384
|
|
@@ -412,7 +263,7 @@ var maestroRegistryOperations = {
|
|
|
412
263
|
if (!parentMessages) {
|
|
413
264
|
throw new Error(`Maestro parent session not found: ${options.parentSessionId}`);
|
|
414
265
|
}
|
|
415
|
-
const parentHasActiveProjection =
|
|
266
|
+
const parentHasActiveProjection = existsSync3(maestroActiveSessionPath(options.parentSessionId));
|
|
416
267
|
const fork = forkSessionAt({
|
|
417
268
|
parentSessionId: options.parentSessionId,
|
|
418
269
|
messageIndex: parentMessages.length,
|
|
@@ -427,7 +278,7 @@ var maestroRegistryOperations = {
|
|
|
427
278
|
return {
|
|
428
279
|
forkId: fork.sessionId,
|
|
429
280
|
rolloutPath: fork.rolloutPath,
|
|
430
|
-
...
|
|
281
|
+
...existsSync3(activePath) ? { cleanupPaths: [activePath] } : {}
|
|
431
282
|
};
|
|
432
283
|
},
|
|
433
284
|
async cleanupRollouts(options) {
|
|
@@ -439,7 +290,7 @@ var maestroRegistryOperations = {
|
|
|
439
290
|
const remaining = [
|
|
440
291
|
maestroSessionPath(sessionId),
|
|
441
292
|
maestroActiveSessionPath(sessionId)
|
|
442
|
-
].filter(
|
|
293
|
+
].filter(existsSync3);
|
|
443
294
|
if (remaining.length > 0) {
|
|
444
295
|
throw new Error(`Maestro session files remain after cleanup: ${remaining.join(", ")}`);
|
|
445
296
|
}
|
|
@@ -480,4 +331,4 @@ export {
|
|
|
480
331
|
getRegistry2 as getRegistry
|
|
481
332
|
};
|
|
482
333
|
|
|
483
|
-
//# debugId=
|
|
334
|
+
//# debugId=8C993651F72591E164756E2164756E21
|
package/dist/registry.js.map
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/core/src/agents/claude-registry.ts", "../../../packages/core/src/agents/codex-registry.ts", "../../../packages/core/src/agents/
|
|
3
|
+
"sources": ["../../../packages/core/src/agents/claude-registry.ts", "../../../packages/core/src/agents/codex-registry.ts", "../../../packages/core/src/agents/maestro-registry.ts", "../../../packages/core/src/agents/registry.ts", "../src/registry.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentRegistry, AgentRegistryOperations } from \"#agents/contracts\";\nimport { encodeClaudeCwd, writeClaudeRollout } from \"#agents/rollout/claude\";\nimport { MODEL_FABLE, MODEL_OPUS, MODEL_SONNET } from \"#platform/config\";\nimport { logger } from \"#platform/logger\";\nimport { CLAUDE_EFFORT_VALUES, type EffortLevel } from \"#types\";\n\nconst ALIAS_MAP: Record<string, string> = {\n sonnet: MODEL_SONNET,\n opus: MODEL_OPUS,\n fable: MODEL_FABLE,\n};\n\nconst VALID_ALIASES = new Set(Object.keys(ALIAS_MAP));\nconst VALID_EFFORTS = new Set<EffortLevel>(CLAUDE_EFFORT_VALUES);\n\nexport const claudeRegistry: AgentRegistry = {\n kind: \"claude\",\n defaultModel: \"sonnet\",\n defaultEffort: \"high\",\n\n expandModelAlias(s) {\n return ALIAS_MAP[s] ?? s;\n },\n\n validateModel(s) {\n return VALID_ALIASES.has(s);\n },\n\n validEfforts: CLAUDE_EFFORT_VALUES,\n validateEffort(s) {\n return VALID_EFFORTS.has(s);\n },\n\n footerLabel(model, effort) {\n return effort ? `${model} · ${effort}` : model;\n },\n};\n\nexport const claudeRegistryOperations: AgentRegistryOperations = {\n writeRollout(opts) {\n // `reuseSessionId` (if any) becomes the SDK resume key + path component,\n // so claude→codex→claude lands at the original `~/.claude/projects/<dir>/<id>.jsonl`\n // instead of orphaning a fresh UUID every switch.\n const { sessionId, rolloutPath } = writeClaudeRollout({\n cwd: opts.cwd,\n entries: opts.entries,\n model: claudeRegistry.expandModelAlias(opts.model ?? claudeRegistry.defaultModel),\n ...(opts.reuseSessionId ? { sessionId: opts.reuseSessionId } : {}),\n });\n return { sessionId, rolloutPath };\n },\n\n // Claude has a native fork API in @anthropic-ai/claude-agent-sdk that produces\n // a byte-equivalent copy of the parent rollout. Preserves tool history\n // structurally, so the fork is indistinguishable from the parent on resume.\n //\n // SDK ≥0.3.19x semantics: `dir` is where to FIND the parent session (lookup\n // scope), NOT the destination — passing the derived topic's cwd made lookup\n // fail (\"Session … not found in project directory\"). The fork file is always\n // written NEXT TO the parent rollout, so after forking we move it into the\n // derived cwd's project dir where a resume from that cwd expects it.\n async forkSession({ parentSessionId, cwd, title }) {\n const { forkSession } = await import(\"@anthropic-ai/claude-agent-sdk\");\n // Omit `dir`: the parent session lives under the SOURCE topic's project\n // dir, which this registry never receives — global search finds it.\n const result = await forkSession(parentSessionId, {\n ...(title ? { title } : {}),\n });\n const projectsRoot = join(homedir(), \".claude\", \"projects\");\n const destDir = join(projectsRoot, encodeClaudeCwd(cwd));\n const destPath = join(destDir, `${result.sessionId}.jsonl`);\n if (!existsSync(destPath)) {\n const sourcePath = readdirSync(projectsRoot)\n .map((d) => join(projectsRoot, d, `${result.sessionId}.jsonl`))\n .find((p) => existsSync(p));\n if (!sourcePath) {\n throw new Error(\n `claude forkSession: fork rollout ${result.sessionId}.jsonl not found under ${projectsRoot}`,\n );\n }\n mkdirSync(destDir, { recursive: true });\n renameSync(sourcePath, destPath);\n }\n return {\n forkId: result.sessionId,\n // Same project-dir layout as cleanupRollouts below — NOT under\n // `cwd/.claude/sessions/`. A wrong path here makes cleanupAgentFork's\n // existsSync always false, so silent-fork rollouts accumulate forever.\n rolloutPath: destPath,\n };\n },\n\n // Each Claude rollout lives at `~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl`.\n // The encoded-cwd is deterministic so we can compute the path directly\n // without globbing — fast and robust against the SDK changing date layout.\n async cleanupRollouts({ cwd, sessionIds }) {\n const projectsDir = join(homedir(), \".claude\", \"projects\", encodeClaudeCwd(cwd));\n const failures: unknown[] = [];\n for (const sid of sessionIds) {\n const path = join(projectsDir, `${sid}.jsonl`);\n try {\n unlinkSync(path);\n } catch (e) {\n if ((e as NodeJS.ErrnoException)?.code !== \"ENOENT\") {\n logger.warn({ err: e, path }, \"claude cleanupRollouts: unlink failed\");\n failures.push(e);\n }\n }\n }\n if (failures.length > 0) {\n throw new AggregateError(failures, \"claude cleanupRollouts failed\");\n }\n },\n};\n",
|
|
6
|
-
"import { existsSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport
|
|
7
|
-
"import { type ChildProcessWithoutNullStreams, spawn } from \"node:child_process\";\nimport { codexCliScriptPath } from \"#agents/codex-native-multi-agent\";\nimport { hostedCodexHomePath } from \"#agents/execution-host\";\nimport { latestCodexRolloutPath } from \"#agents/rollout/codex\";\nimport { NEGOTIUM_VERSION } from \"#version\";\n\ninterface CodexAppServerForkResult {\n forkId: string;\n rolloutPath: string;\n}\n\ninterface CodexAppServerForkHost {\n spawnServer(): ChildProcessWithoutNullStreams;\n findRolloutPath(threadId: string): string | undefined;\n timeoutMs: number;\n}\n\ntype JsonRpcResponse = {\n id?: number;\n result?: { thread?: { id?: unknown } };\n error?: { message?: unknown };\n};\n\nexport function createCodexAppServerForker(host: CodexAppServerForkHost) {\n return async (parentThreadId: string): Promise<CodexAppServerForkResult> => {\n const child = host.spawnServer();\n\n return await new Promise<CodexAppServerForkResult>((resolve, reject) => {\n let settled = false;\n let stdoutBuffer = \"\";\n let stderr = \"\";\n const timer = setTimeout(\n () => finish(new Error(\"Codex thread fork timed out\")),\n host.timeoutMs,\n );\n\n const finish = (error?: Error, result?: CodexAppServerForkResult) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n try {\n child.stdin.end();\n child.kill();\n } catch {\n // The app server may already have exited after stdin closed.\n }\n if (error) reject(error);\n else if (result) resolve(result);\n else reject(new Error(\"Codex thread fork returned no result\"));\n };\n\n const send = (message: Record<string, unknown>) => {\n child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n child.stderr.on(\"data\", (chunk) => {\n if (stderr.length < 8_192) stderr += String(chunk);\n });\n child.on(\"error\", (error) => finish(error));\n child.on(\"exit\", (code, signal) => {\n if (settled) return;\n const detail = signal ? `signal ${signal}` : `code ${code ?? 1}`;\n finish(\n new Error(\n `Codex app server exited with ${detail}${stderr.trim() ? `: ${stderr.trim()}` : \"\"}`,\n ),\n );\n });\n child.stdout.on(\"data\", (chunk) => {\n stdoutBuffer += String(chunk);\n for (;;) {\n const newline = stdoutBuffer.indexOf(\"\\n\");\n if (newline < 0) break;\n const line = stdoutBuffer.slice(0, newline);\n stdoutBuffer = stdoutBuffer.slice(newline + 1);\n let message: JsonRpcResponse;\n try {\n message = JSON.parse(line) as JsonRpcResponse;\n } catch {\n continue;\n }\n\n if (message.id === 1) {\n if (message.error) {\n finish(new Error(String(message.error.message || \"Codex initialization failed\")));\n return;\n }\n send({ method: \"initialized\" });\n send({ id: 2, method: \"thread/fork\", params: { threadId: parentThreadId } });\n continue;\n }\n if (message.id !== 2) continue;\n if (message.error) {\n finish(new Error(String(message.error.message || \"Codex thread fork failed\")));\n return;\n }\n const forkId = message.result?.thread?.id;\n if (typeof forkId !== \"string\" || !forkId) {\n finish(new Error(\"Codex thread fork returned no thread id\"));\n return;\n }\n const rolloutPath = host.findRolloutPath(forkId);\n if (!rolloutPath) {\n finish(new Error(`Codex thread fork rollout was not found for ${forkId}`));\n return;\n }\n finish(undefined, { forkId, rolloutPath });\n return;\n }\n });\n\n send({\n id: 1,\n method: \"initialize\",\n params: {\n clientInfo: { name: \"negotium\", version: NEGOTIUM_VERSION },\n },\n });\n });\n };\n}\n\nconst forkCodexThread = createCodexAppServerForker({\n spawnServer() {\n return spawn(process.execPath, [codexCliScriptPath(), \"app-server\", \"--stdio\"], {\n env: { ...process.env, CODEX_HOME: hostedCodexHomePath() },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n },\n findRolloutPath: latestCodexRolloutPath,\n timeoutMs: 15_000,\n});\n\nexport async function forkCodexSession(parentThreadId: string): Promise<CodexAppServerForkResult> {\n return await forkCodexThread(parentThreadId);\n}\n",
|
|
8
|
-
"import { spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport {\n chmodSync,\n copyFileSync,\n existsSync,\n mkdtempSync,\n readFileSync,\n renameSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { NEGOTIUM_VERSION } from \"#version\";\n\ntype CodexModel = Record<string, unknown>;\ntype CodexModelCache = {\n client_version?: unknown;\n models?: unknown;\n};\n\nconst moduleRequire = createRequire(import.meta.url);\nconst codexSdkPackagePath = moduleRequire.resolve(\"@openai/codex-sdk/package.json\");\nconst codexSdkRequire = createRequire(codexSdkPackagePath);\nconst bundledCodexPackagePath = codexSdkRequire.resolve(\"@openai/codex/package.json\");\n\nfunction readPackageVersion(packageJsonPath: string): string {\n const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: unknown };\n if (typeof parsed.version !== \"string\" || !parsed.version.trim()) {\n throw new Error(`Codex package has no valid version: ${packageJsonPath}`);\n }\n return parsed.version;\n}\n\nexport const BUNDLED_CODEX_VERSION = readPackageVersion(bundledCodexPackagePath);\nconst SAFE_BUNDLED_CODEX_VERSION = BUNDLED_CODEX_VERSION.replace(/[^a-zA-Z0-9._-]/g, \"_\");\nconst NEGOTIUM_MODEL_CACHE = `negotium-models-cache-${SAFE_BUNDLED_CODEX_VERSION}.json`;\nconst NEGOTIUM_MODEL_CATALOG = `negotium-model-catalog-${SAFE_BUNDLED_CODEX_VERSION}.json`;\n\nexport function codexCliScriptPath(): string {\n return join(dirname(bundledCodexPackagePath), \"bin\", \"codex.js\");\n}\n\nfunction parseCodexModelCache(contents: string, sourcePath: string): CodexModelCache {\n let parsed: CodexModelCache;\n try {\n parsed = JSON.parse(contents) as CodexModelCache;\n } catch (error) {\n throw new Error(`Codex model cache is invalid JSON: ${sourcePath}`, { cause: error });\n }\n if (!Array.isArray(parsed.models) || parsed.models.length === 0) {\n throw new Error(`Codex model cache has no models: ${sourcePath}`);\n }\n return parsed;\n}\n\nfunction readCodexModelCache(cachePath: string): {\n contents: string;\n parsed: CodexModelCache;\n} {\n const contents = readFileSync(cachePath, \"utf8\");\n return { contents, parsed: parseCodexModelCache(contents, cachePath) };\n}\n\nfunction readCompatibleCodexModelCache(cachePath: string): {\n contents: string;\n parsed: CodexModelCache;\n} {\n const cache = readCodexModelCache(cachePath);\n if (cache.parsed.client_version !== BUNDLED_CODEX_VERSION) {\n const found =\n typeof cache.parsed.client_version === \"string\"\n ? cache.parsed.client_version\n : \"missing or invalid\";\n throw new Error(\n `Codex model cache version ${found} does not match Negotium's bundled Codex ${BUNDLED_CODEX_VERSION}: ${cachePath}`,\n );\n }\n return cache;\n}\n\nfunction writePrivateFileAtomic(path: string, contents: string): void {\n if (existsSync(path) && readFileSync(path, \"utf8\") === contents) return;\n\n const tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n try {\n writeFileSync(tempPath, contents, { encoding: \"utf8\", mode: 0o600 });\n renameSync(tempPath, path);\n chmodSync(path, 0o600);\n } finally {\n try {\n unlinkSync(tempPath);\n } catch {\n // renameSync normally consumed the temporary file.\n }\n }\n}\n\nexport function bundledCodexModelCachePath(authFilePath: string): string {\n return join(dirname(authFilePath), NEGOTIUM_MODEL_CACHE);\n}\n\nasync function bootstrapCodexModelCache(codexHome: string, cachePath: string): Promise<void> {\n const child = spawn(process.execPath, [codexCliScriptPath(), \"app-server\", \"--stdio\"], {\n env: { ...process.env, CODEX_HOME: codexHome },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n let stdoutBuffer = \"\";\n let stderr = \"\";\n const timer = setTimeout(\n () => finish(new Error(\"timed out while refreshing the Codex model catalog\")),\n 15_000,\n );\n\n const finish = (error?: Error) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n try {\n child.stdin.end();\n child.kill();\n } catch {\n // The app server may already have exited after stdin closed.\n }\n if (error) reject(error);\n else if (!existsSync(cachePath)) reject(new Error(\"Codex did not create its model cache\"));\n else resolve();\n };\n\n const send = (message: Record<string, unknown>) => {\n child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n child.stderr.on(\"data\", (chunk) => {\n if (stderr.length < 4_096) stderr += String(chunk);\n });\n child.on(\"error\", (error) => finish(error));\n child.on(\"exit\", (code, signal) => {\n if (!settled) {\n finish(\n new Error(\n `Codex model catalog refresh exited with ${signal ? `signal ${signal}` : `code ${code ?? 1}`}${stderr.trim() ? `: ${stderr.trim()}` : \"\"}`,\n ),\n );\n }\n });\n child.stdout.on(\"data\", (chunk) => {\n stdoutBuffer += String(chunk);\n for (;;) {\n const newline = stdoutBuffer.indexOf(\"\\n\");\n if (newline < 0) break;\n const line = stdoutBuffer.slice(0, newline);\n stdoutBuffer = stdoutBuffer.slice(newline + 1);\n let message: { id?: number; error?: { message?: string } };\n try {\n message = JSON.parse(line) as typeof message;\n } catch {\n continue;\n }\n if (message.id === 1) {\n if (message.error) {\n finish(new Error(message.error.message || \"Codex initialization failed\"));\n return;\n }\n send({ method: \"initialized\" });\n send({ id: 2, method: \"model/list\", params: { includeHidden: true } });\n } else if (message.id === 2) {\n if (message.error) {\n finish(new Error(message.error.message || \"Codex model listing failed\"));\n } else {\n finish();\n }\n return;\n }\n }\n });\n\n send({\n id: 1,\n method: \"initialize\",\n params: {\n clientInfo: { name: \"negotium\", version: NEGOTIUM_VERSION },\n capabilities: { experimentalApi: true },\n },\n });\n });\n}\n\nasync function bootstrapIsolatedCodexModelCache(\n authFilePath: string,\n bootstrap: (codexHome: string, cachePath: string) => Promise<void>,\n): Promise<string> {\n const sourceHome = dirname(authFilePath);\n const isolatedHome = mkdtempSync(join(tmpdir(), \"negotium-codex-models-\"));\n const isolatedCachePath = join(isolatedHome, \"models_cache.json\");\n\n try {\n const isolatedAuthPath = join(isolatedHome, \"auth.json\");\n copyFileSync(authFilePath, isolatedAuthPath);\n chmodSync(isolatedAuthPath, 0o600);\n\n // Preserve custom provider configuration while keeping the bundled CLI's\n // cache write completely outside the user's shared CODEX_HOME.\n const sourceConfigPath = join(sourceHome, \"config.toml\");\n if (existsSync(sourceConfigPath)) {\n const isolatedConfigPath = join(isolatedHome, \"config.toml\");\n copyFileSync(sourceConfigPath, isolatedConfigPath);\n chmodSync(isolatedConfigPath, 0o600);\n }\n\n await bootstrap(isolatedHome, isolatedCachePath);\n return readCompatibleCodexModelCache(isolatedCachePath).contents;\n } finally {\n rmSync(isolatedHome, { recursive: true, force: true });\n }\n}\n\nexport async function ensureCodexModelCache(\n authFilePath: string,\n bootstrap: (codexHome: string, cachePath: string) => Promise<void> = bootstrapCodexModelCache,\n): Promise<string> {\n const codexHome = dirname(authFilePath);\n const configuredCachePath = process.env.NEGOTIUM_CODEX_MODELS_CACHE_FILE;\n if (configuredCachePath) {\n if (!existsSync(configuredCachePath)) {\n throw new Error(`Configured Codex model cache does not exist: ${configuredCachePath}`);\n }\n readCompatibleCodexModelCache(configuredCachePath);\n return configuredCachePath;\n }\n\n // The global Codex CLI owns models_cache.json and may update it to a schema\n // newer than the SDK bundled by Negotium. Snapshot a cache generated for our\n // exact bundled version so later global CLI updates cannot break turns.\n const bundledCachePath = bundledCodexModelCachePath(authFilePath);\n const sharedCachePath = join(codexHome, \"models_cache.json\");\n if (existsSync(sharedCachePath)) {\n try {\n const shared = readCompatibleCodexModelCache(sharedCachePath);\n // Keep model metadata fresh while the global CLI remains compatible.\n writePrivateFileAtomic(bundledCachePath, shared.contents);\n return bundledCachePath;\n } catch {\n // A compatible private snapshot is safer than failing because another\n // process briefly exposed an incomplete shared-cache write.\n }\n }\n\n if (existsSync(bundledCachePath)) {\n try {\n readCompatibleCodexModelCache(bundledCachePath);\n return bundledCachePath;\n } catch {\n // Re-bootstrap below instead of passing a corrupt or version-mismatched\n // private snapshot into this SDK version.\n }\n }\n\n const refreshedContents = await bootstrapIsolatedCodexModelCache(authFilePath, bootstrap);\n writePrivateFileAtomic(bundledCachePath, refreshedContents);\n return bundledCachePath;\n}\n\n/**\n * Codex can resolve model metadata before `features.multi_agent=false`, so a\n * model-advertised v1/v2 value may still register native collaboration tools.\n * Feed Codex an authoritative copy of its own catalog with only that field\n * disabled. Runtime MCP delegation remains available independently.\n */\nexport function writeCodexCatalogWithNativeMultiAgentDisabled(\n authFilePath: string,\n sourcePath: string,\n): string {\n const codexHome = dirname(authFilePath);\n const outputPath = join(codexHome, NEGOTIUM_MODEL_CATALOG);\n\n const parsed = readCodexModelCache(sourcePath).parsed;\n\n const models = (parsed.models as unknown[]).map((model, index): CodexModel => {\n if (!model || typeof model !== \"object\" || Array.isArray(model)) {\n throw new Error(`Codex model cache entry ${index} is invalid: ${sourcePath}`);\n }\n return { ...(model as CodexModel), multi_agent_version: \"disabled\" };\n });\n const contents = `${JSON.stringify({ models }, null, 2)}\\n`;\n writePrivateFileAtomic(outputPath, contents);\n return outputPath;\n}\n",
|
|
9
|
-
"export const NEGOTIUM_VERSION = \"0.6.1\";\n",
|
|
6
|
+
"import { existsSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { AgentRegistry, AgentRegistryOperations } from \"#agents/contracts\";\nimport { hostedCodexHomePath } from \"#agents/execution-host\";\nimport { writeCodexRollout } from \"#agents/rollout/codex\";\nimport { logger } from \"#platform/logger\";\nimport { CODEX_EFFORT_VALUES, type EffortLevel } from \"#types\";\n\nconst VALID_EFFORTS = new Set<EffortLevel>(CODEX_EFFORT_VALUES);\n\n// Codex CLI's own empirical default is gpt-5.6-sol (`codex exec` 2026-07-10 →\n// \"model: gpt-5.6-sol\"), but we deliberately default to gpt-5.6-luna — the\n// cheapest/fastest GPT-5.6 tier — for a general always-on assistant where most\n// queries are light. Heavier work escalates to terra/sol via set_model. This\n// value is passed explicitly to the SDK (see event-processor resolveDefaultModel),\n// so the footer and the actual model stay in sync.\nexport const codexRegistry: AgentRegistry = {\n kind: \"codex\",\n defaultModel: \"gpt-5.6-luna\",\n // defaultEffort intentionally omitted — Codex SDK treats absence as\n // \"reasoning off\". Setting \"high\"/etc. would silently flip on reasoning.\n\n expandModelAlias(s) {\n return s;\n },\n\n validateModel(s) {\n // Codex doesn't publish a closed model list and OpenAI ships new IDs\n // (gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, o3, ...) frequently. Best-effort: accept any\n // non-empty string. Bad IDs surface at SDK call time with a clear error.\n return typeof s === \"string\" && s.length > 0;\n },\n\n validEfforts: CODEX_EFFORT_VALUES,\n validateEffort(s) {\n // GPT-5.6 accepts low/medium/high/xhigh/max; 'minimal'\n // was removed because the Codex API rejects it when default tools\n // (image_gen, web_search) are active.\n return VALID_EFFORTS.has(s);\n },\n\n footerLabel(model, effort) {\n // Codex omits effort to mean \"reasoning off\". Show `(off)` explicitly so\n // the user can distinguish from claude (which always has a default).\n return `${model} · ${effort ?? \"(off)\"}`;\n },\n};\n\nexport const codexRegistryOperations: AgentRegistryOperations = {\n writeRollout(opts) {\n // Codex SDK exposes the resume key as `threadId`; AgentRegistry unifies\n // the name to `sessionId` so callers don't branch on agent.\n // `reuseSessionId` (if any) is forwarded as `threadId` so claude→codex→claude\n // round-trips also keep one continuous codex thread instead of orphaning a\n // fresh uuidv7 on every switch.\n const { threadId, rolloutPath } = writeCodexRollout({\n cwd: opts.cwd,\n entries: opts.entries,\n model: opts.model ?? codexRegistry.defaultModel,\n ...(opts.effort ? { effort: opts.effort } : {}),\n ...(opts.reuseSessionId ? { threadId: opts.reuseSessionId } : {}),\n });\n return { sessionId: threadId, rolloutPath };\n },\n\n // The TypeScript SDK does not expose forking yet, but the bundled Codex App\n // Server does. Native thread/fork preserves the provider's stored prefix,\n // including tool structure, which gives prompt caching the best chance to\n // reuse the parent context. Callers retain unified-log synthesis as fallback.\n async forkSession({ parentSessionId }) {\n // The app-server integration resolves the SDK's bundled CLI. Keep that\n // provider-only dependency out of lightweight registry consumers such as\n // the stdio Cron MCP server, which runs under Node + tsx.\n const { forkCodexSession } = await import(\"#agents/codex-app-server\");\n return await forkCodexSession(parentSessionId);\n },\n\n // Codex stores rollouts at `~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-<ts>-<threadId>.jsonl`.\n // The date prefix is unknown at cleanup time (it's the *original* write\n // timestamp, not \"now\"), so we glob across the whole sessions tree by\n // threadId suffix. With at most a few thousand files in active use this\n // is well under a millisecond on a warm filesystem.\n async cleanupRollouts({ sessionIds }) {\n if (sessionIds.length === 0) return;\n const sessionsDir = join(hostedCodexHomePath(), \"sessions\");\n // No sessions directory means there are no provider rollouts left to remove.\n if (!existsSync(sessionsDir)) return;\n const failures: unknown[] = [];\n // One Glob per threadId so a single corrupt entry can't poison the rest.\n // Bun.Glob's `scan` yields paths relative to its base dir.\n for (const tid of sessionIds) {\n try {\n const glob = new Bun.Glob(`**/rollout-*-${tid}.jsonl`);\n for await (const rel of glob.scan({ cwd: sessionsDir, onlyFiles: true })) {\n const path = join(sessionsDir, rel);\n try {\n unlinkSync(path);\n } catch (e) {\n if ((e as NodeJS.ErrnoException)?.code !== \"ENOENT\") {\n logger.warn({ err: e, path }, \"codex cleanupRollouts: unlink failed\");\n failures.push(e);\n }\n }\n }\n } catch (e) {\n logger.warn({ err: e, threadId: tid }, \"codex cleanupRollouts: scan failed\");\n failures.push(e);\n }\n }\n if (failures.length > 0) {\n throw new AggregateError(failures, \"codex cleanupRollouts failed\");\n }\n },\n};\n",
|
|
10
7
|
"import { randomUUID } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport type { AgentRegistry, AgentRegistryOperations } from \"#agents/contracts\";\nimport { assertUuidLike, ensureCwdExists, extractChatPairs } from \"#agents/rollout/shared\";\nimport { logger } from \"#platform/logger\";\nimport { MAESTRO_EFFORT_VALUES } from \"#types\";\n\nconst ALIAS_MAP: Record<string, string> = {\n \"deepseek-pro\": \"deepseek-v4-pro\",\n // \"deepseek-flash\" was disabled in 0.1.25 because DeepSeek had retired its\n // old flash model. \"DeepSeek-V4-Flash-0731\" (released 2026-07-31) is an\n // unrelated, currently-live model reusing a similar name — verified with a\n // live API call before re-enabling this alias.\n \"deepseek-flash\": \"deepseek-v4-flash\",\n kimi: \"kimi-k3\",\n \"kimi-pro\": \"kimi-k3\",\n \"kimi-code\": \"kimi-k2.7-code\",\n};\nconst VALID_MODELS = new Set([...Object.keys(ALIAS_MAP), ...Object.values(ALIAS_MAP)]);\nconst VALID_EFFORTS = new Set(MAESTRO_EFFORT_VALUES);\n\nexport const maestroRegistry: AgentRegistry = {\n kind: \"maestro\",\n defaultModel: \"deepseek-pro\",\n defaultEffort: \"medium\",\n expandModelAlias(model) {\n return ALIAS_MAP[model] ?? model;\n },\n validateModel(model) {\n return VALID_MODELS.has(model);\n },\n validEfforts: MAESTRO_EFFORT_VALUES,\n validateEffort(effort) {\n return VALID_EFFORTS.has(effort);\n },\n footerLabel(model, effort) {\n return effort ? `${model} · ${effort}` : model;\n },\n};\n\nfunction maestroSessionsDir(): string {\n return join(\n process.env.MAESTRO_DATA_DIR\n ? resolve(process.env.MAESTRO_DATA_DIR)\n : join(homedir(), \".maestro\"),\n \"sessions\",\n );\n}\n\nfunction maestroSessionPath(sessionId: string): string {\n return join(maestroSessionsDir(), `${sessionId}.jsonl`);\n}\n\nfunction maestroActiveSessionPath(sessionId: string): string {\n return join(maestroSessionsDir(), `${sessionId}.active.jsonl`);\n}\n\nfunction existingCreatedAt(path: string): string | undefined {\n if (!existsSync(path)) return undefined;\n try {\n const firstLine = readFileSync(path, \"utf8\").split(\"\\n\", 1)[0];\n const parsed = JSON.parse(firstLine) as { _meta?: { createdAt?: unknown } };\n return typeof parsed._meta?.createdAt === \"string\" ? parsed._meta.createdAt : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Placeholder for a synthesized turn whose text is blank.\n *\n * Moonshot (Kimi) hard-rejects the *whole* request when any history message has\n * empty content — `Kimi API 400: the message at position N with role 'user'\n * must not be empty` (verified against the live API, kimi-k3). DeepSeek's\n * validator is laxer today but the same shape is not worth relying on.\n *\n * maestro-agent-sdk 0.2.1 drops empty assistant slots, but only in the\n * *content-block* form (`content: []`); the pair encoder below writes plain\n * strings, and `content: \"\"` still reaches the wire and 400s. Blank sides are\n * reachable here from real conversations — an attachment-only user submission\n * records a `user_message` with `content: \"\"`, and `renderUserPromptBatch`\n * passes it through verbatim — so the synthesized session must not contain one.\n *\n * We substitute rather than drop: dropping a pair would silently delete a turn\n * from the historical narrative the next agent reads, while a one-line marker\n * keeps the turn boundary and tells the model why the slot is thin.\n */\nconst BLANK_TURN_PLACEHOLDER = \"(no text content in this turn)\";\n\nfunction nonEmptyTurnText(text: string): string {\n return text.trim().length > 0 ? text : BLANK_TURN_PLACEHOLDER;\n}\n\nfunction writeRollout(options: Parameters<AgentRegistryOperations[\"writeRollout\"]>[0]) {\n const sessionId = options.reuseSessionId ?? randomUUID();\n assertUuidLike(\"sessionId\", sessionId);\n ensureCwdExists(options.cwd);\n const path = maestroSessionPath(sessionId);\n mkdirSync(maestroSessionsDir(), { recursive: true });\n const messages = extractChatPairs(options.entries).flatMap((pair) => [\n { role: \"user\", content: nonEmptyTurnText(pair.userText) },\n { role: \"assistant\", content: nonEmptyTurnText(pair.assistantText) },\n ]);\n const lines = [\n {\n _meta: {\n version: 1,\n cwd: options.cwd,\n createdAt: existingCreatedAt(path) ?? new Date().toISOString(),\n // Deliberately a literal, not the SDK's `MAESTRO_SDK_VERSION`: this\n // module must not statically import maestro-agent-sdk (asserted by\n // tests/core/daemon-import-boundaries.test.ts — the SDK stays off the\n // daemon startup path). The value names the session *format* version\n // this encoder targets, which is what a reader of the header needs.\n sdkVersion: \"0.2.0\",\n },\n },\n ...messages,\n ];\n writeFileSync(path, `${lines.map((line) => JSON.stringify(line)).join(\"\\n\")}\\n`, {\n mode: 0o600,\n });\n return { sessionId, rolloutPath: path };\n}\n\nexport const maestroRegistryOperations: AgentRegistryOperations = {\n writeRollout(options) {\n return writeRollout(options);\n },\n async forkSession(options) {\n // Fork the full raw history while preserving the compacted working view.\n // A compacted parent that cannot copy its active projection is not a usable\n // cache-preserving fork, so let the caller fall back to bounded synthesis.\n const { deleteMaestroSession, forkSessionAt, loadRawMaestroSession } = await import(\n \"maestro-agent-sdk\"\n );\n const parentMessages = loadRawMaestroSession(options.parentSessionId);\n if (!parentMessages) {\n throw new Error(`Maestro parent session not found: ${options.parentSessionId}`);\n }\n const parentHasActiveProjection = existsSync(maestroActiveSessionPath(options.parentSessionId));\n const fork = forkSessionAt({\n parentSessionId: options.parentSessionId,\n messageIndex: parentMessages.length,\n cwd: options.cwd,\n userId: String(options.userId),\n });\n if (parentHasActiveProjection && !fork.activeProjectionForked) {\n deleteMaestroSession(fork.sessionId);\n throw new Error(`Maestro active projection could not be forked: ${options.parentSessionId}`);\n }\n const activePath = maestroActiveSessionPath(fork.sessionId);\n return {\n forkId: fork.sessionId,\n rolloutPath: fork.rolloutPath,\n ...(existsSync(activePath) ? { cleanupPaths: [activePath] } : {}),\n };\n },\n async cleanupRollouts(options) {\n // Keep the SDK off the daemon startup path, but use its canonical cleanup\n // once a Maestro session is actually being removed. It also clears memory,\n // task, todo, and in-process file-state sidecars.\n const { deleteMaestroSession } = await import(\"maestro-agent-sdk\");\n const failures: unknown[] = [];\n for (const sessionId of options.sessionIds) {\n try {\n deleteMaestroSession(sessionId);\n const remaining = [\n maestroSessionPath(sessionId),\n maestroActiveSessionPath(sessionId),\n ].filter(existsSync);\n if (remaining.length > 0) {\n throw new Error(`Maestro session files remain after cleanup: ${remaining.join(\", \")}`);\n }\n } catch (error) {\n logger.warn({ err: error, sessionId }, \"maestro cleanupRollouts: cleanup failed\");\n failures.push(error);\n }\n }\n if (failures.length > 0) {\n throw new AggregateError(failures, \"Maestro rollout cleanup failed\");\n }\n },\n};\n",
|
|
11
8
|
"import { claudeRegistry, claudeRegistryOperations } from \"#agents/claude-registry\";\nimport { codexRegistry, codexRegistryOperations } from \"#agents/codex-registry\";\nimport type { AgentRegistry, AgentRegistryOperations } from \"#agents/contracts\";\nimport { maestroRegistry, maestroRegistryOperations } from \"#agents/maestro-registry\";\nimport type { AgentKind } from \"#types\";\n\nexport type {\n AgentRegistry,\n AgentRegistryOperations,\n CleanupRolloutsOptions,\n ForkRegistryOptions,\n ForkRegistryResult,\n WriteRolloutOptions,\n WriteRolloutResult,\n} from \"#agents/contracts\";\n\nconst REGISTRIES: Record<AgentKind, AgentRegistry> = {\n claude: claudeRegistry,\n codex: codexRegistry,\n maestro: maestroRegistry,\n};\n\nexport function getRegistry(agent: AgentKind): AgentRegistry {\n return REGISTRIES[agent];\n}\n\nconst OPERATIONS: Record<AgentKind, AgentRegistryOperations> = {\n claude: claudeRegistryOperations,\n codex: codexRegistryOperations,\n maestro: maestroRegistryOperations,\n};\n\nexport function getRegistryOperations(agent: AgentKind): AgentRegistryOperations {\n return OPERATIONS[agent];\n}\n",
|
|
12
9
|
"import {\n type AgentRegistry,\n type AgentRegistryOperations,\n type CleanupRolloutsOptions,\n type ForkRegistryOptions,\n type ForkRegistryResult,\n getRegistry as resolveCoreRegistry,\n getRegistryOperations as resolveCoreRegistryOperations,\n type WriteRolloutOptions,\n type WriteRolloutResult,\n} from \"@negotium/core/registry\";\n\nexport type {\n AgentRegistry,\n AgentRegistryOperations,\n CleanupRolloutsOptions,\n ForkRegistryOptions,\n ForkRegistryResult,\n WriteRolloutOptions,\n WriteRolloutResult,\n};\n\nexport const getRegistry: typeof resolveCoreRegistry = (agent) => resolveCoreRegistry(agent);\n\nexport const getRegistryOperations: typeof resolveCoreRegistryOperations = (agent) =>\n resolveCoreRegistryOperations(agent);\n"
|
|
13
10
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "8C993651F72591E164756E2164756E21",
|
|
16
13
|
"names": []
|
|
17
14
|
}
|
package/dist/rollout.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import {
|
|
3
|
+
encodeClaudeCwd,
|
|
4
|
+
repairPoisonedRollout,
|
|
5
|
+
writeClaudeRollout
|
|
6
|
+
} from "./chunk-v7tj2vtq.js";
|
|
2
7
|
import {
|
|
3
8
|
configureRolloutHost,
|
|
4
9
|
decodeUuidV7Timestamp,
|
|
5
|
-
encodeClaudeCwd,
|
|
6
10
|
extractChatPairs,
|
|
7
11
|
extractCodexPatchCallIds,
|
|
8
12
|
extractLatestCodexContextUsage,
|
|
@@ -11,10 +15,8 @@ import {
|
|
|
11
15
|
readCodexPatchCallIds,
|
|
12
16
|
readLatestCodexContextUsage,
|
|
13
17
|
readLatestCodexPatchPreview,
|
|
14
|
-
repairPoisonedRollout,
|
|
15
|
-
writeClaudeRollout,
|
|
16
18
|
writeCodexRollout
|
|
17
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-cxtngn3p.js";
|
|
18
20
|
|
|
19
21
|
// src/rollout.ts
|
|
20
22
|
import { fileURLToPath } from "url";
|
|
@@ -52,4 +54,4 @@ export {
|
|
|
52
54
|
configureRolloutHost2 as configureRolloutHost
|
|
53
55
|
};
|
|
54
56
|
|
|
55
|
-
//# debugId=
|
|
57
|
+
//# debugId=4271882C097E879764756E2164756E21
|
package/dist/rollout.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { fileURLToPath } from \"node:url\";\nimport * as coreRollout from \"@negotium/core/rollout\";\n\ncoreRollout.configureRolloutHost({\n fixturesDir: fileURLToPath(new URL(\"./runtime/src/agents/fixtures\", import.meta.url)),\n});\n\nexport type {\n ChatPair,\n ClaudeRolloutOptions,\n ClaudeRolloutResult,\n CodexContextUsage,\n CodexPatchChangePreview,\n CodexPatchPreview,\n CodexRolloutOptions,\n CodexRolloutResult,\n RolloutHostOptions,\n} from \"@negotium/core/rollout\";\n\nexport const configureRolloutHost = coreRollout.configureRolloutHost;\nexport const decodeUuidV7Timestamp = coreRollout.decodeUuidV7Timestamp;\nexport const encodeClaudeCwd = coreRollout.encodeClaudeCwd;\nexport const extractCodexPatchCallIds = coreRollout.extractCodexPatchCallIds;\nexport const extractChatPairs = coreRollout.extractChatPairs;\nexport const extractLatestCodexContextUsage = coreRollout.extractLatestCodexContextUsage;\nexport const extractLatestCodexPatchPreview = coreRollout.extractLatestCodexPatchPreview;\nexport const migrateCodexRolloutNativeMultiAgentMetadata =\n coreRollout.migrateCodexRolloutNativeMultiAgentMetadata;\nexport const readCodexPatchCallIds = coreRollout.readCodexPatchCallIds;\nexport const readLatestCodexContextUsage = coreRollout.readLatestCodexContextUsage;\nexport const readLatestCodexPatchPreview = coreRollout.readLatestCodexPatchPreview;\nexport const repairPoisonedRollout = coreRollout.repairPoisonedRollout;\nexport const writeClaudeRollout = coreRollout.writeClaudeRollout;\nexport const writeCodexRollout = coreRollout.writeCodexRollout;\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAGY,qBAAqB;AAAA,EAC/B,aAAa,cAAc,IAAI,IAAI,iCAAiC,YAAY,GAAG,CAAC;AACtF,CAAC;AAcM,IAAM,wBAAmC;AACzC,IAAM,yBAAoC;AAC1C,IAAM,mBAA8B;AACpC,IAAM,4BAAuC;AAC7C,IAAM,oBAA+B;AACrC,IAAM,kCAA6C;AACnD,IAAM,kCAA6C;AACnD,IAAM,+CACC;AACP,IAAM,yBAAoC;AAC1C,IAAM,+BAA0C;AAChD,IAAM,+BAA0C;AAChD,IAAM,yBAAoC;AAC1C,IAAM,sBAAiC;AACvC,IAAM,qBAAgC;",
|
|
8
|
+
"debugId": "4271882C097E879764756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
getTopic,
|
|
9
9
|
getTopicByNameForUser,
|
|
10
10
|
isAgentKind,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
type TopicSurface,
|
|
12
|
+
} from "../src/cron-mcp-host.ts";
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
import {
|
|
15
15
|
CRON_CONTEXT_RETAIN_TURNS,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { existsSync, unlinkSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { forkCodexSession } from "#agents/codex-app-server";
|
|
4
3
|
import type { AgentRegistry, AgentRegistryOperations } from "#agents/contracts";
|
|
5
4
|
import { hostedCodexHomePath } from "#agents/execution-host";
|
|
6
5
|
import { writeCodexRollout } from "#agents/rollout/codex";
|
|
@@ -69,6 +68,10 @@ export const codexRegistryOperations: AgentRegistryOperations = {
|
|
|
69
68
|
// including tool structure, which gives prompt caching the best chance to
|
|
70
69
|
// reuse the parent context. Callers retain unified-log synthesis as fallback.
|
|
71
70
|
async forkSession({ parentSessionId }) {
|
|
71
|
+
// The app-server integration resolves the SDK's bundled CLI. Keep that
|
|
72
|
+
// provider-only dependency out of lightweight registry consumers such as
|
|
73
|
+
// the stdio Cron MCP server, which runs under Node + tsx.
|
|
74
|
+
const { forkCodexSession } = await import("#agents/codex-app-server");
|
|
72
75
|
return await forkCodexSession(parentSessionId);
|
|
73
76
|
},
|
|
74
77
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Lightweight core boundary for the standalone Cron MCP server. */
|
|
2
|
+
export { getRegistry } from "#agents/registry";
|
|
3
|
+
export { getTopic, getTopicByNameForUser } from "#storage/api-topics";
|
|
4
|
+
export { EFFORT_VALUES, type EffortLevel, isAgentKind } from "#types";
|
|
5
|
+
export type { TopicSurface } from "#types/api";
|
|
@@ -472,6 +472,12 @@ export async function dispatchDueSelfSchedules(
|
|
|
472
472
|
depth: 0,
|
|
473
473
|
from: fromLabel,
|
|
474
474
|
injectAuthorId: "system",
|
|
475
|
+
injectSourceAdapter: "self-schedule",
|
|
476
|
+
injectKind: "tell",
|
|
477
|
+
injectTellCard: {
|
|
478
|
+
fromLabel,
|
|
479
|
+
message: schedule.message,
|
|
480
|
+
},
|
|
475
481
|
onSettled: (result) => {
|
|
476
482
|
settled = true;
|
|
477
483
|
stopClaimHeartbeat();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const NEGOTIUM_VERSION = "0.6.
|
|
1
|
+
export const NEGOTIUM_VERSION = "0.6.4";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const NEGOTIUM_VERSION = "0.6.
|
|
1
|
+
export declare const NEGOTIUM_VERSION = "0.6.4";
|