@odla-ai/cli 0.46.9 → 0.46.11
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/bin.cjs +235 -63
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/{chunk-OW5WW5ET.js → chunk-J6GIGX6T.js} +275 -103
- package/dist/chunk-J6GIGX6T.js.map +1 -0
- package/dist/{cli-CDIXAFN4.js → cli-BI26ENP4.js} +2 -2
- package/dist/index.cjs +274 -102
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-OW5WW5ET.js.map +0 -1
- /package/dist/{cli-CDIXAFN4.js.map → cli-BI26ENP4.js.map} +0 -0
package/dist/bin.cjs
CHANGED
|
@@ -8236,7 +8236,7 @@ var init_code2 = __esm({
|
|
|
8236
8236
|
}
|
|
8237
8237
|
});
|
|
8238
8238
|
|
|
8239
|
-
// ../harness/dist/chunk-
|
|
8239
|
+
// ../harness/dist/chunk-J7XU5QB7.js
|
|
8240
8240
|
async function digestStagedWorkspace(root, limits) {
|
|
8241
8241
|
const files = [];
|
|
8242
8242
|
const walk = async (directory) => {
|
|
@@ -8263,45 +8263,6 @@ async function digestStagedWorkspace(root, limits) {
|
|
|
8263
8263
|
}
|
|
8264
8264
|
return `sha256:${hash.digest("hex")}`;
|
|
8265
8265
|
}
|
|
8266
|
-
async function runCodeRuntimeHeartbeatLoop(options) {
|
|
8267
|
-
const heartbeatMs = options.heartbeatMs ?? 15e3;
|
|
8268
|
-
if (!Number.isSafeInteger(heartbeatMs) || heartbeatMs < 1e3 || heartbeatMs > 3e5) {
|
|
8269
|
-
throw new TypeError("heartbeatMs must be an integer from 1000 to 300000");
|
|
8270
|
-
}
|
|
8271
|
-
let retryMs = 1e3;
|
|
8272
|
-
do {
|
|
8273
|
-
if (options.signal?.aborted) return;
|
|
8274
|
-
try {
|
|
8275
|
-
const snapshot = await options.control.heartbeat(options.runtimeVersion, options.capabilities);
|
|
8276
|
-
await options.onSnapshot?.(snapshot);
|
|
8277
|
-
retryMs = 1e3;
|
|
8278
|
-
if (options.once) return;
|
|
8279
|
-
await wait(heartbeatMs, options.signal);
|
|
8280
|
-
} catch (error) {
|
|
8281
|
-
if (options.signal?.aborted) return;
|
|
8282
|
-
if (options.once || !retryableControlFailure(error)) throw error;
|
|
8283
|
-
await options.onRetry?.(error, retryMs);
|
|
8284
|
-
await wait(retryMs, options.signal);
|
|
8285
|
-
retryMs = Math.min(retryMs * 2, 3e4);
|
|
8286
|
-
}
|
|
8287
|
-
} while (!options.signal?.aborted);
|
|
8288
|
-
}
|
|
8289
|
-
function retryableControlFailure(value2) {
|
|
8290
|
-
if (!value2 || typeof value2 !== "object") return false;
|
|
8291
|
-
const failure = value2;
|
|
8292
|
-
if (failure.code === "invalid_response" || typeof failure.status !== "number") return false;
|
|
8293
|
-
return failure.status === 408 || failure.status === 425 || failure.status === 429 || failure.status >= 500;
|
|
8294
|
-
}
|
|
8295
|
-
function wait(ms, signal) {
|
|
8296
|
-
return new Promise((resolve52) => {
|
|
8297
|
-
if (signal?.aborted) return resolve52();
|
|
8298
|
-
const timer = setTimeout(resolve52, ms);
|
|
8299
|
-
signal?.addEventListener("abort", () => {
|
|
8300
|
-
clearTimeout(timer);
|
|
8301
|
-
resolve52();
|
|
8302
|
-
}, { once: true });
|
|
8303
|
-
});
|
|
8304
|
-
}
|
|
8305
8266
|
function createCodeRuntimeControlClient(options) {
|
|
8306
8267
|
const endpoint = validatedEndpoint(options.endpoint);
|
|
8307
8268
|
if (!/^odla_code_host_[0-9a-f]{64}$/.test(options.token)) throw new TypeError("invalid Code host credential");
|
|
@@ -8314,9 +8275,10 @@ function createCodeRuntimeControlClient(options) {
|
|
|
8314
8275
|
throw new TypeError("modelRequestTimeoutMs must be an integer from 30000 to 1800000");
|
|
8315
8276
|
}
|
|
8316
8277
|
const request3 = options.fetch ?? fetch;
|
|
8317
|
-
const call4 = async (path, body, timeoutMs = requestTimeoutMs) => {
|
|
8278
|
+
const call4 = async (path, body, timeoutMs = requestTimeoutMs, operationSignal) => {
|
|
8318
8279
|
const timeout = AbortSignal.timeout(timeoutMs);
|
|
8319
|
-
const
|
|
8280
|
+
const signals = [options.signal, operationSignal, timeout].filter((item) => Boolean(item));
|
|
8281
|
+
const signal = signals.length === 1 ? signals[0] : AbortSignal.any(signals);
|
|
8320
8282
|
let response2;
|
|
8321
8283
|
try {
|
|
8322
8284
|
response2 = await request3(`${endpoint}${path}`, {
|
|
@@ -8327,7 +8289,7 @@ function createCodeRuntimeControlClient(options) {
|
|
|
8327
8289
|
signal
|
|
8328
8290
|
});
|
|
8329
8291
|
} catch (cause) {
|
|
8330
|
-
if (options.signal?.aborted) throw cause;
|
|
8292
|
+
if (options.signal?.aborted || operationSignal?.aborted) throw cause;
|
|
8331
8293
|
throw new CodeRuntimeControlError("Code runtime control plane is unavailable", 503, "transport_unavailable");
|
|
8332
8294
|
}
|
|
8333
8295
|
const value2 = await response2.json().catch(() => null);
|
|
@@ -8347,8 +8309,7 @@ function createCodeRuntimeControlClient(options) {
|
|
|
8347
8309
|
return parseSnapshot(await call4("/registry/code/runtime/heartbeat", { runtimeVersion: version, capabilities }));
|
|
8348
8310
|
},
|
|
8349
8311
|
acknowledge: async (commandId, result) => {
|
|
8350
|
-
|
|
8351
|
-
await call4(`/registry/code/runtime/commands/${commandId}/ack`, result);
|
|
8312
|
+
await call4(`/registry/code/runtime/commands/${validCommandId(commandId)}/ack`, result);
|
|
8352
8313
|
},
|
|
8353
8314
|
source: async (sessionId) => parseSource(
|
|
8354
8315
|
await call4(`/registry/code/runtime/sessions/${validSessionId(sessionId)}/source`, {})
|
|
@@ -8391,12 +8352,71 @@ function createCodeRuntimeControlClient(options) {
|
|
|
8391
8352
|
rememberMemory: async (sessionId, memory) => {
|
|
8392
8353
|
await call4(`/registry/code/runtime/sessions/${validSessionId(sessionId)}/remember`, memory);
|
|
8393
8354
|
},
|
|
8355
|
+
collaborationSkills: async (sessionId, commandId) => {
|
|
8356
|
+
try {
|
|
8357
|
+
return parseCollaborationSkills(await call4(
|
|
8358
|
+
`/registry/code/runtime/sessions/${validSessionId(sessionId)}/collaboration/skills`,
|
|
8359
|
+
{ commandId: validCommandId(commandId) }
|
|
8360
|
+
));
|
|
8361
|
+
} catch (cause) {
|
|
8362
|
+
if (cause instanceof CodeRuntimeControlError && cause.status === 404 && cause.code === "not_found") return [];
|
|
8363
|
+
throw cause;
|
|
8364
|
+
}
|
|
8365
|
+
},
|
|
8366
|
+
executeCollaborationTool: async (sessionId, collaboration, signal) => {
|
|
8367
|
+
validateCollaborationToolRequest(collaboration);
|
|
8368
|
+
return parseCollaborationToolOutput(await call4(
|
|
8369
|
+
`/registry/code/runtime/sessions/${validSessionId(sessionId)}/collaboration/tools`,
|
|
8370
|
+
collaboration,
|
|
8371
|
+
requestTimeoutMs,
|
|
8372
|
+
signal
|
|
8373
|
+
));
|
|
8374
|
+
},
|
|
8394
8375
|
reportSessionFailure: async (sessionId, message2) => {
|
|
8395
8376
|
if (!message2.trim() || message2.length > 2e3) throw new TypeError("invalid Code session failure");
|
|
8396
8377
|
await call4(`/registry/code/runtime/sessions/${validSessionId(sessionId)}/failure`, { message: message2 });
|
|
8397
8378
|
}
|
|
8398
8379
|
};
|
|
8399
8380
|
}
|
|
8381
|
+
async function runCodeRuntimeHeartbeatLoop(options) {
|
|
8382
|
+
const heartbeatMs = options.heartbeatMs ?? 15e3;
|
|
8383
|
+
if (!Number.isSafeInteger(heartbeatMs) || heartbeatMs < 1e3 || heartbeatMs > 3e5) {
|
|
8384
|
+
throw new TypeError("heartbeatMs must be an integer from 1000 to 300000");
|
|
8385
|
+
}
|
|
8386
|
+
let retryMs = 1e3;
|
|
8387
|
+
do {
|
|
8388
|
+
if (options.signal?.aborted) return;
|
|
8389
|
+
try {
|
|
8390
|
+
const snapshot = await options.control.heartbeat(options.runtimeVersion, options.capabilities);
|
|
8391
|
+
await options.onSnapshot?.(snapshot);
|
|
8392
|
+
retryMs = 1e3;
|
|
8393
|
+
if (options.once) return;
|
|
8394
|
+
await wait(heartbeatMs, options.signal);
|
|
8395
|
+
} catch (error) {
|
|
8396
|
+
if (options.signal?.aborted) return;
|
|
8397
|
+
if (options.once || !retryableControlFailure(error)) throw error;
|
|
8398
|
+
await options.onRetry?.(error, retryMs);
|
|
8399
|
+
await wait(retryMs, options.signal);
|
|
8400
|
+
retryMs = Math.min(retryMs * 2, 3e4);
|
|
8401
|
+
}
|
|
8402
|
+
} while (!options.signal?.aborted);
|
|
8403
|
+
}
|
|
8404
|
+
function retryableControlFailure(value2) {
|
|
8405
|
+
if (!value2 || typeof value2 !== "object") return false;
|
|
8406
|
+
const failure = value2;
|
|
8407
|
+
if (failure.code === "invalid_response" || typeof failure.status !== "number") return false;
|
|
8408
|
+
return failure.status === 408 || failure.status === 425 || failure.status === 429 || failure.status >= 500;
|
|
8409
|
+
}
|
|
8410
|
+
function wait(ms, signal) {
|
|
8411
|
+
return new Promise((resolve52) => {
|
|
8412
|
+
if (signal?.aborted) return resolve52();
|
|
8413
|
+
const timer = setTimeout(resolve52, ms);
|
|
8414
|
+
signal?.addEventListener("abort", () => {
|
|
8415
|
+
clearTimeout(timer);
|
|
8416
|
+
resolve52();
|
|
8417
|
+
}, { once: true });
|
|
8418
|
+
});
|
|
8419
|
+
}
|
|
8400
8420
|
function validatedEndpoint(value2) {
|
|
8401
8421
|
const endpoint = value2.replace(/\/+$/, "");
|
|
8402
8422
|
let url;
|
|
@@ -8415,6 +8435,10 @@ function validSessionId(value2) {
|
|
|
8415
8435
|
if (!/^csess_[0-9a-f]{32}$/.test(value2)) throw new TypeError("invalid Code session id");
|
|
8416
8436
|
return value2;
|
|
8417
8437
|
}
|
|
8438
|
+
function validCommandId(value2) {
|
|
8439
|
+
if (!/^ccmd_[0-9a-f]{32}$/.test(value2)) throw new TypeError("invalid Code runtime command id");
|
|
8440
|
+
return value2;
|
|
8441
|
+
}
|
|
8418
8442
|
function validateHeartbeat(version, capabilities) {
|
|
8419
8443
|
if (!version.trim() || version.length > 80) throw new TypeError("runtimeVersion is required and at most 80 characters");
|
|
8420
8444
|
if (capabilities.protocolVersion !== CODE_RUNTIME_PROTOCOL_VERSION) throw new TypeError("unsupported Code runtime protocol version");
|
|
@@ -8496,6 +8520,91 @@ function parseCandidate(value2) {
|
|
|
8496
8520
|
}
|
|
8497
8521
|
return { candidateId: candidate.candidateId, status: candidate.status };
|
|
8498
8522
|
}
|
|
8523
|
+
function parseCollaborationSkills(value2) {
|
|
8524
|
+
const items = record5(value2)?.skills;
|
|
8525
|
+
if (!Array.isArray(items) || items.length > 16) throw invalid("collaboration skills");
|
|
8526
|
+
const skillNames2 = /* @__PURE__ */ new Set();
|
|
8527
|
+
const toolNames = /* @__PURE__ */ new Set();
|
|
8528
|
+
return items.map((item) => {
|
|
8529
|
+
const skill = record5(item);
|
|
8530
|
+
if (!skill || !validManifestName(skill.name) || skillNames2.has(skill.name) || skill.instructions !== void 0 && (typeof skill.instructions !== "string" || utf8Bytes(skill.instructions) > 32e3) || !Array.isArray(skill.tools) || !skill.tools.length || skill.tools.length > 128) {
|
|
8531
|
+
throw invalid("collaboration skill");
|
|
8532
|
+
}
|
|
8533
|
+
skillNames2.add(skill.name);
|
|
8534
|
+
const tools = skill.tools.map((candidate) => {
|
|
8535
|
+
const tool = record5(candidate);
|
|
8536
|
+
const inputSchema = record5(tool?.inputSchema);
|
|
8537
|
+
if (!tool || !validManifestName(tool.name) || toolNames.has(tool.name) || typeof tool.description !== "string" || utf8Bytes(tool.description) > 8e3 || !inputSchema || jsonBytes(inputSchema) > 64e3 || tool.concurrency !== void 0 && tool.concurrency !== "parallel") {
|
|
8538
|
+
throw invalid("collaboration tool");
|
|
8539
|
+
}
|
|
8540
|
+
const outputTaint = parseTaintLabels(tool.outputTaint);
|
|
8541
|
+
const acceptsTaint = parseTaintLabels(tool.acceptsTaint);
|
|
8542
|
+
toolNames.add(tool.name);
|
|
8543
|
+
return {
|
|
8544
|
+
name: tool.name,
|
|
8545
|
+
description: tool.description,
|
|
8546
|
+
inputSchema,
|
|
8547
|
+
...tool.concurrency === "parallel" ? { concurrency: "parallel" } : {},
|
|
8548
|
+
...outputTaint ? { outputTaint } : {},
|
|
8549
|
+
...acceptsTaint ? { acceptsTaint } : {}
|
|
8550
|
+
};
|
|
8551
|
+
});
|
|
8552
|
+
return {
|
|
8553
|
+
name: skill.name,
|
|
8554
|
+
...typeof skill.instructions === "string" ? { instructions: skill.instructions } : {},
|
|
8555
|
+
tools
|
|
8556
|
+
};
|
|
8557
|
+
});
|
|
8558
|
+
}
|
|
8559
|
+
function validateCollaborationToolRequest(value2) {
|
|
8560
|
+
validCommandId(value2.commandId);
|
|
8561
|
+
if (typeof value2.toolCallId !== "string" || value2.toolCallId.length > 256 || !/^[^\s\u0000-\u001f\u007f]+$/.test(value2.toolCallId) || !validManifestName(value2.skill) || !validManifestName(value2.tool) || !record5(value2.input) || jsonBytes(value2.input) > 128e3) {
|
|
8562
|
+
throw new TypeError("invalid Code collaboration tool request");
|
|
8563
|
+
}
|
|
8564
|
+
}
|
|
8565
|
+
function parseCollaborationToolOutput(value2) {
|
|
8566
|
+
const output = record5(record5(value2)?.output);
|
|
8567
|
+
if (!output || output.isError !== void 0 && typeof output.isError !== "boolean") {
|
|
8568
|
+
throw invalid("collaboration tool");
|
|
8569
|
+
}
|
|
8570
|
+
if (typeof output.content === "string") {
|
|
8571
|
+
if (utf8Bytes(output.content) > 1e6) throw invalid("collaboration tool");
|
|
8572
|
+
return { content: output.content, ...output.isError === true ? { isError: true } : {} };
|
|
8573
|
+
}
|
|
8574
|
+
if (!Array.isArray(output.content) || output.content.length > 64 || jsonBytes(output.content) > 1e6 || !output.content.every((block2) => {
|
|
8575
|
+
const item = record5(block2);
|
|
8576
|
+
return item && ["text", "image", "audio", "document", "tool_use", "tool_result", "thinking"].includes(String(item.type));
|
|
8577
|
+
})) throw invalid("collaboration tool");
|
|
8578
|
+
return {
|
|
8579
|
+
content: output.content,
|
|
8580
|
+
...output.isError === true ? { isError: true } : {}
|
|
8581
|
+
};
|
|
8582
|
+
}
|
|
8583
|
+
function parseTaintLabels(value2) {
|
|
8584
|
+
if (value2 === void 0) return void 0;
|
|
8585
|
+
if (!Array.isArray(value2) || value2.length > 16) throw invalid("collaboration tool taint");
|
|
8586
|
+
const labels = value2.map((item) => {
|
|
8587
|
+
if (item === "web_untrusted" || item === "operator_pasted_untrusted" || item === "llm_inherited") return item;
|
|
8588
|
+
if (typeof item === "string" && /^tool_untrusted:[^\s\u0000-\u001f\u007f]{1,100}$/.test(item)) {
|
|
8589
|
+
return item;
|
|
8590
|
+
}
|
|
8591
|
+
throw invalid("collaboration tool taint");
|
|
8592
|
+
});
|
|
8593
|
+
return [...new Set(labels)];
|
|
8594
|
+
}
|
|
8595
|
+
function validManifestName(value2) {
|
|
8596
|
+
return typeof value2 === "string" && /^[A-Za-z][A-Za-z0-9._:-]{0,127}$/.test(value2);
|
|
8597
|
+
}
|
|
8598
|
+
function utf8Bytes(value2) {
|
|
8599
|
+
return new TextEncoder().encode(value2).byteLength;
|
|
8600
|
+
}
|
|
8601
|
+
function jsonBytes(value2) {
|
|
8602
|
+
try {
|
|
8603
|
+
return utf8Bytes(JSON.stringify(value2));
|
|
8604
|
+
} catch {
|
|
8605
|
+
return Number.POSITIVE_INFINITY;
|
|
8606
|
+
}
|
|
8607
|
+
}
|
|
8499
8608
|
function stripPatchEnvelope(patch2) {
|
|
8500
8609
|
if (!/^\*\*\* (?:Begin|End) Patch\s*$/m.test(patch2)) return patch2;
|
|
8501
8610
|
const kept = patch2.split("\n").filter((line2) => !/^\*\*\* (?:Begin|End) Patch\s*$/.test(line2));
|
|
@@ -9401,6 +9510,46 @@ Finish with a concise, non-empty answer to the owner. Do not call tools or promi
|
|
|
9401
9510
|
return { status: "failed", finalText: "", error };
|
|
9402
9511
|
}
|
|
9403
9512
|
}
|
|
9513
|
+
function createCodeRuntimeSessionSkillLoader(control) {
|
|
9514
|
+
const load = control.collaborationSkills?.bind(control);
|
|
9515
|
+
const execute2 = control.executeCollaborationTool?.bind(control);
|
|
9516
|
+
if (!load || !execute2) return async () => [];
|
|
9517
|
+
return async (command) => {
|
|
9518
|
+
const manifests = await load(command.sessionId, command.commandId);
|
|
9519
|
+
return manifests.map((manifest) => ({
|
|
9520
|
+
name: manifest.name,
|
|
9521
|
+
...manifest.instructions === void 0 ? {} : { instructions: manifest.instructions },
|
|
9522
|
+
tools: manifest.tools.map((tool) => ({
|
|
9523
|
+
name: tool.name,
|
|
9524
|
+
description: tool.description,
|
|
9525
|
+
inputSchema: tool.inputSchema,
|
|
9526
|
+
...tool.concurrency === void 0 ? {} : { concurrency: tool.concurrency },
|
|
9527
|
+
...tool.outputTaint === void 0 ? {} : { outputTaint: tool.outputTaint },
|
|
9528
|
+
...tool.acceptsTaint === void 0 ? {} : { acceptsTaint: tool.acceptsTaint },
|
|
9529
|
+
handler: async (input, context) => {
|
|
9530
|
+
if (!context.toolCallId) throw new TypeError("collaboration tool call identity is required");
|
|
9531
|
+
return execute2(command.sessionId, {
|
|
9532
|
+
commandId: command.commandId,
|
|
9533
|
+
toolCallId: context.toolCallId,
|
|
9534
|
+
skill: manifest.name,
|
|
9535
|
+
tool: tool.name,
|
|
9536
|
+
input
|
|
9537
|
+
}, context.signal);
|
|
9538
|
+
}
|
|
9539
|
+
}))
|
|
9540
|
+
}));
|
|
9541
|
+
};
|
|
9542
|
+
}
|
|
9543
|
+
async function sessionSkillsFor(options, command) {
|
|
9544
|
+
try {
|
|
9545
|
+
return await options.sessionSkills?.(command) ?? [];
|
|
9546
|
+
} catch (cause) {
|
|
9547
|
+
options.onDiagnostic?.(
|
|
9548
|
+
`session skills unavailable, continuing with code tools only: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
9549
|
+
);
|
|
9550
|
+
return [];
|
|
9551
|
+
}
|
|
9552
|
+
}
|
|
9404
9553
|
async function handleCodeRuntimeInference(input) {
|
|
9405
9554
|
const { command, request: request3, state: state2 } = input;
|
|
9406
9555
|
const startedAt = Date.now();
|
|
@@ -10211,16 +10360,6 @@ function assertBudget(budget) {
|
|
|
10211
10360
|
throw new TypeError("goal budget deadline must be epoch milliseconds");
|
|
10212
10361
|
}
|
|
10213
10362
|
}
|
|
10214
|
-
async function sessionSkillsFor(options, command) {
|
|
10215
|
-
try {
|
|
10216
|
-
return await options.sessionSkills?.(command) ?? [];
|
|
10217
|
-
} catch (cause) {
|
|
10218
|
-
options.onDiagnostic?.(
|
|
10219
|
-
`session skills unavailable, continuing with code tools only: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
10220
|
-
);
|
|
10221
|
-
return [];
|
|
10222
|
-
}
|
|
10223
|
-
}
|
|
10224
10363
|
function createCodeRuntimeToolBroker(input, lease, role) {
|
|
10225
10364
|
const broker = createCodeToolBroker({
|
|
10226
10365
|
recipes: input.recipes,
|
|
@@ -10484,9 +10623,26 @@ function codeToolResultPresentation(request3, response2) {
|
|
|
10484
10623
|
...excerpt(output, true) ? { excerpt: excerpt(output, true) } : {}
|
|
10485
10624
|
};
|
|
10486
10625
|
}
|
|
10626
|
+
function codeRuntimeAcknowledgementGate(signal) {
|
|
10627
|
+
let settle;
|
|
10628
|
+
let settled = false;
|
|
10629
|
+
const ready = new Promise((resolve52) => {
|
|
10630
|
+
settle = resolve52;
|
|
10631
|
+
});
|
|
10632
|
+
const release = (run) => {
|
|
10633
|
+
if (settled) return;
|
|
10634
|
+
settled = true;
|
|
10635
|
+
signal.removeEventListener("abort", onAbort);
|
|
10636
|
+
settle(run);
|
|
10637
|
+
};
|
|
10638
|
+
const onAbort = () => release(false);
|
|
10639
|
+
if (signal.aborted) release(false);
|
|
10640
|
+
else signal.addEventListener("abort", onAbort, { once: true });
|
|
10641
|
+
return { ready, release };
|
|
10642
|
+
}
|
|
10487
10643
|
var import_crypto, import_promises5, import_path5, import_child_process4, import_promises6, import_path6, import_child_process5, import_process2, import_crypto2, import_crypto3, import_fs2, import_promises7, import_path7, import_promises8, import_os3, import_path8, import_ai4, import_ai5, import_child_process6, import_promises9, import_path9, import_promises10, import_promises11, import_path10, import_crypto4, CODE_RUNTIME_PROTOCOL_VERSION, CodeRuntimeReconciler, CodeRuntimeControlError, record5, invalid, RESERVED, SECRET, PATH, FORBIDDEN, ARTIFACT_PATH, PRIVATE_ARTIFACT_PART, SHA3, DIGEST3, ID3, RULE, DEFAULT_PREFIXES, DEFAULT_SUFFIXES, message, CodeRuntimeCheckpointManager, record22, SOURCE_LIMITS, RESERVED2, SECRET2, SOURCE_MAX_FILES, SOURCE_MAX_BYTES, SOURCE_SET_MAX_BYTES, V1_SYSTEM_PROMPT, V2_SYSTEM_PROMPT, V3_SYSTEM_PROMPT, SYSTEM_PROMPT_FOR, DEFAULT_MAX_FILES, DEFAULT_MAX_RESULTS, DEFAULT_MAX_FILE_BYTES, MAX_NATIVE_ARG_BYTES, DESTINATIONS, READ, LIST, SEARCH, GRAPH, PATCH, RECIPE, cache, shortId, GRAPH_TOOLS, MAX_MEMORY_BODY, POSITIVE, digestRuntimeValue, runtimeErrorMessage, text3, integer2, record32, excerpt, paths, TheseusRuntimeEngine;
|
|
10488
|
-
var
|
|
10489
|
-
"../harness/dist/chunk-
|
|
10644
|
+
var init_chunk_J7XU5QB7 = __esm({
|
|
10645
|
+
"../harness/dist/chunk-J7XU5QB7.js"() {
|
|
10490
10646
|
"use strict";
|
|
10491
10647
|
init_cjs_shims();
|
|
10492
10648
|
init_chunk_CR6RE3A2();
|
|
@@ -10525,12 +10681,14 @@ var init_chunk_IWVGSWY6 = __esm({
|
|
|
10525
10681
|
import_crypto4 = require("crypto");
|
|
10526
10682
|
CODE_RUNTIME_PROTOCOL_VERSION = 1;
|
|
10527
10683
|
CodeRuntimeReconciler = class {
|
|
10528
|
-
constructor(control, engine) {
|
|
10684
|
+
constructor(control, engine, onDiagnostic) {
|
|
10529
10685
|
this.control = control;
|
|
10530
10686
|
this.engine = engine;
|
|
10687
|
+
this.onDiagnostic = onDiagnostic;
|
|
10531
10688
|
}
|
|
10532
10689
|
control;
|
|
10533
10690
|
engine;
|
|
10691
|
+
onDiagnostic;
|
|
10534
10692
|
results = /* @__PURE__ */ new Map();
|
|
10535
10693
|
async reconcile(snapshot) {
|
|
10536
10694
|
for (const command of snapshot.commands) {
|
|
@@ -10548,7 +10706,13 @@ var init_chunk_IWVGSWY6 = __esm({
|
|
|
10548
10706
|
}
|
|
10549
10707
|
await this.control.acknowledge(command.commandId, completed.result);
|
|
10550
10708
|
if (!completed.notified) {
|
|
10551
|
-
|
|
10709
|
+
try {
|
|
10710
|
+
await this.engine.acknowledged?.(command, completed.result);
|
|
10711
|
+
} catch (error) {
|
|
10712
|
+
this.onDiagnostic?.(
|
|
10713
|
+
`command ${command.commandId} acknowledged handling failed \xB7 ${error instanceof Error ? error.message : String(error)}`
|
|
10714
|
+
);
|
|
10715
|
+
}
|
|
10552
10716
|
completed.notified = true;
|
|
10553
10717
|
}
|
|
10554
10718
|
}
|
|
@@ -10782,6 +10946,8 @@ Never claim a build or test passed unless odla_run_recipe returned that result.`
|
|
|
10782
10946
|
const active = this.#active.get(command.sessionId);
|
|
10783
10947
|
if (!active || result.status !== "running") return;
|
|
10784
10948
|
active.acknowledged = true;
|
|
10949
|
+
active.startGate?.release(true);
|
|
10950
|
+
active.startGate = void 0;
|
|
10785
10951
|
if (active.failure) await this.options.control.reportSessionFailure(command.sessionId, active.failure).catch(() => void 0);
|
|
10786
10952
|
}
|
|
10787
10953
|
async close() {
|
|
@@ -10801,13 +10967,14 @@ Never claim a build or test passed unless odla_run_recipe returned that result.`
|
|
|
10801
10967
|
control: this.options.control,
|
|
10802
10968
|
...this.options.localSource ? { localSource: this.options.localSource } : {}
|
|
10803
10969
|
});
|
|
10804
|
-
const abort = new AbortController();
|
|
10970
|
+
const abort = new AbortController(), startGate = codeRuntimeAcknowledgementGate(abort.signal);
|
|
10805
10971
|
const conversationRefs = [];
|
|
10806
10972
|
const active = {
|
|
10807
10973
|
workspace,
|
|
10808
10974
|
abort,
|
|
10809
10975
|
conversationRefs,
|
|
10810
10976
|
acknowledged: false,
|
|
10977
|
+
startGate,
|
|
10811
10978
|
role: metadata2.role,
|
|
10812
10979
|
title: metadata2.title,
|
|
10813
10980
|
maxTokensPerInteraction: metadata2.maxTokensPerInteraction,
|
|
@@ -10831,7 +10998,7 @@ Never claim a build or test passed unless odla_run_recipe returned that result.`
|
|
|
10831
10998
|
body: `Source snapshot: local checkout ${requestedLocal.snapshotDigest} \xB7 ${requestedLocal.modified ? "modified" : "clean"} \xB7 Git ${requestedLocal.headCommitSha}`
|
|
10832
10999
|
}, conversationRefs);
|
|
10833
11000
|
}
|
|
10834
|
-
active.done = this.#runAttempt(command, metadata2, active).catch(async (cause) => {
|
|
11001
|
+
active.done = startGate.ready.then((run) => run ? this.#runAttempt(command, metadata2, active) : null).catch(async (cause) => {
|
|
10835
11002
|
const detail = runtimeErrorMessage(cause);
|
|
10836
11003
|
await this.#event(command, { type: "message", actor: "system", body: detail }, conversationRefs).catch(() => void 0);
|
|
10837
11004
|
await this.#diagnostic(command, active, detail);
|
|
@@ -11051,7 +11218,7 @@ var init_node = __esm({
|
|
|
11051
11218
|
"../harness/dist/node.js"() {
|
|
11052
11219
|
"use strict";
|
|
11053
11220
|
init_cjs_shims();
|
|
11054
|
-
|
|
11221
|
+
init_chunk_J7XU5QB7();
|
|
11055
11222
|
init_chunk_CR6RE3A2();
|
|
11056
11223
|
MEASURED_PREMIUM = Object.freeze({
|
|
11057
11224
|
/** 3 racers vs pure depth at equal budget: 21,044 / 7,936. */
|
|
@@ -11438,10 +11605,15 @@ async function runCodeRuntime(input) {
|
|
|
11438
11605
|
engine: input.engine,
|
|
11439
11606
|
recipes: CODE_BUILD_RECIPES,
|
|
11440
11607
|
recipeAuthorization: "registered_recipe",
|
|
11608
|
+
sessionSkills: createCodeRuntimeSessionSkillLoader(control),
|
|
11441
11609
|
localSource: input.localSource,
|
|
11442
11610
|
onDiagnostic: (message2) => input.stdout.error(`Theseus runtime failed \xB7 ${message2}`)
|
|
11443
11611
|
});
|
|
11444
|
-
const reconciler = new CodeRuntimeReconciler(
|
|
11612
|
+
const reconciler = new CodeRuntimeReconciler(
|
|
11613
|
+
control,
|
|
11614
|
+
commandEngine,
|
|
11615
|
+
(message2) => input.stdout.error(`Theseus runtime \xB7 ${message2}`)
|
|
11616
|
+
);
|
|
11445
11617
|
try {
|
|
11446
11618
|
await runCodeRuntimeHeartbeatLoop({
|
|
11447
11619
|
control,
|