@odla-ai/harness 0.11.18 → 0.11.19
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/{chunk-T2IW7MYQ.js → chunk-4TG55ATB.js} +2 -2
- package/dist/{chunk-O47JCUGI.js → chunk-7NP3YOMY.js} +33 -5
- package/dist/chunk-7NP3YOMY.js.map +1 -0
- package/dist/{chunk-3ON6UAOV.js → chunk-A5B3CEK2.js} +3 -3
- package/dist/{chunk-EXSEQEZ6.js → chunk-M6BNH25Z.js} +4 -4
- package/dist/{chunk-ONYW2VSB.js → chunk-O4QLHUGO.js} +1 -1
- package/dist/chunk-O4QLHUGO.js.map +1 -0
- package/dist/{chunk-6T26HEWI.js → chunk-SMN2FWQE.js} +17 -3
- package/dist/{chunk-6T26HEWI.js.map → chunk-SMN2FWQE.js.map} +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +4 -4
- package/dist/code-runtime-cli.cjs +42 -3
- package/dist/code-runtime-cli.cjs.map +1 -1
- package/dist/code-runtime-cli.js +5 -5
- package/dist/code-session-event-data-C6mQB76s.d.cts +134 -0
- package/dist/code-session-event-data-wCQc2py3.d.ts +134 -0
- package/dist/index.cjs +19 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -4
- package/dist/index.d.ts +15 -4
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/node.cjs +42 -3
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +8 -1
- package/dist/node.d.ts +8 -1
- package/dist/node.js +6 -6
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/dist/{types-D-Kv1svf.d.ts → types-DM-UgoBN.d.cts} +2 -118
- package/dist/{types-D-Kv1svf.d.cts → types-DM-UgoBN.d.ts} +2 -118
- package/package.json +1 -1
- package/dist/chunk-O47JCUGI.js.map +0 -1
- package/dist/chunk-ONYW2VSB.js.map +0 -1
- /package/dist/{chunk-T2IW7MYQ.js.map → chunk-4TG55ATB.js.map} +0 -0
- /package/dist/{chunk-3ON6UAOV.js.map → chunk-A5B3CEK2.js.map} +0 -0
- /package/dist/{chunk-EXSEQEZ6.js.map → chunk-M6BNH25Z.js.map} +0 -0
package/dist/cli.js
CHANGED
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
} from "./chunk-PTXZVYD4.js";
|
|
5
5
|
import {
|
|
6
6
|
runHarnessRunner
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-M6BNH25Z.js";
|
|
8
8
|
import {
|
|
9
9
|
selectContainerEngine
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-A5B3CEK2.js";
|
|
11
|
+
import "./chunk-4TG55ATB.js";
|
|
12
|
+
import "./chunk-O4QLHUGO.js";
|
|
13
13
|
|
|
14
14
|
// src/cli.ts
|
|
15
15
|
import { resolve } from "path";
|
|
@@ -1704,11 +1704,16 @@ function codeCommandMetadata(payload, resume) {
|
|
|
1704
1704
|
if (!Number.isSafeInteger(maxTokensPerInteraction) || Number(maxTokensPerInteraction) < 4e3 || Number(maxTokensPerInteraction) > 2e5) {
|
|
1705
1705
|
throw new TypeError(`invalid Code ${resume ? "resume" : "start"} interaction token limit`);
|
|
1706
1706
|
}
|
|
1707
|
+
const eventDetail = payload.eventDetail ?? "standard";
|
|
1708
|
+
if (eventDetail !== "standard" && eventDetail !== "verbose") {
|
|
1709
|
+
throw new TypeError(`invalid Code ${resume ? "resume" : "start"} event detail`);
|
|
1710
|
+
}
|
|
1707
1711
|
return {
|
|
1708
1712
|
role,
|
|
1709
1713
|
readOnly,
|
|
1710
1714
|
title,
|
|
1711
1715
|
prompt,
|
|
1716
|
+
eventDetail,
|
|
1712
1717
|
proof: codeCommandProof(payload.proof, resume),
|
|
1713
1718
|
maxTokensPerInteraction: Number(maxTokensPerInteraction),
|
|
1714
1719
|
planningInputDigest: typeof planning === "string" && /^sha256:[0-9a-f]{64}$/.test(planning) ? planning : null,
|
|
@@ -2657,6 +2662,20 @@ async function sessionSkillsFor(options, command) {
|
|
|
2657
2662
|
|
|
2658
2663
|
// src/code-runtime-inference.ts
|
|
2659
2664
|
var inferWithBackoff = (infer, wait2, onRetry) => withOverloadRetry(infer, wait2, (cause, delayMs) => onRetry(cause, delayMs), transientControlFailure);
|
|
2665
|
+
var MAX_VERBOSE_TEXT = 4e3;
|
|
2666
|
+
var clip = (text2) => text2.length <= MAX_VERBOSE_TEXT ? text2 : `${text2.slice(0, MAX_VERBOSE_TEXT - 1)}\u2026`;
|
|
2667
|
+
function verboseTurnEvents(response2, durationMs) {
|
|
2668
|
+
const events = [];
|
|
2669
|
+
const interim = response2.response.stopReason === "tool_use";
|
|
2670
|
+
for (const block of response2.response.content) {
|
|
2671
|
+
if (block.type === "thinking" && block.thinking.trim()) {
|
|
2672
|
+
events.push({ type: "thinking", available: true, durationMs, text: clip(block.thinking.trim()) });
|
|
2673
|
+
} else if (block.type === "text" && interim && block.text.trim()) {
|
|
2674
|
+
events.push({ type: "text", text: clip(block.text.trim()) });
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
return events;
|
|
2678
|
+
}
|
|
2660
2679
|
async function handleCodeRuntimeInference(input) {
|
|
2661
2680
|
const { command, request, state } = input;
|
|
2662
2681
|
const startedAt = Date.now();
|
|
@@ -2674,6 +2693,11 @@ async function handleCodeRuntimeInference(input) {
|
|
|
2674
2693
|
message: `Code control plane overloaded (${cause.code}); retrying the model call in ${delayMs / 1e3}s`
|
|
2675
2694
|
}).catch(() => void 0)
|
|
2676
2695
|
);
|
|
2696
|
+
if (input.metadata.eventDetail === "verbose") {
|
|
2697
|
+
for (const event of verboseTurnEvents(response2, Date.now() - startedAt)) {
|
|
2698
|
+
await input.event(event).catch(() => void 0);
|
|
2699
|
+
}
|
|
2700
|
+
}
|
|
2677
2701
|
state.tokens += response2.receipt.inputTokens + response2.receipt.outputTokens;
|
|
2678
2702
|
const { costUsd } = response2.receipt;
|
|
2679
2703
|
if (costUsd === void 0) state.costKnown = false;
|
|
@@ -2868,8 +2892,17 @@ var DEFAULT_FAILURE_REASON = {
|
|
|
2868
2892
|
"tool denied by CaMeL policy": "tool denied by CaMeL policy",
|
|
2869
2893
|
"review sessions are read-only": "review session is read-only; workspace changes are not permitted"
|
|
2870
2894
|
};
|
|
2895
|
+
var MAX_VERBOSE_TOOL_BYTES = 4096;
|
|
2896
|
+
function boundedToolInput(value) {
|
|
2897
|
+
const serialized = JSON.stringify(value);
|
|
2898
|
+
return serialized.length <= MAX_VERBOSE_TOOL_BYTES ? value : { truncated: true, bytes: serialized.length, keys: Object.keys(value).slice(0, 20) };
|
|
2899
|
+
}
|
|
2900
|
+
function boundedToolOutput(content) {
|
|
2901
|
+
return content.length <= MAX_VERBOSE_TOOL_BYTES ? content : `${content.slice(0, MAX_VERBOSE_TOOL_BYTES - 1)}\u2026`;
|
|
2902
|
+
}
|
|
2871
2903
|
function observedBroker(input) {
|
|
2872
2904
|
const now = input.now ?? Date.now;
|
|
2905
|
+
const verbose = input.detail === "verbose";
|
|
2873
2906
|
return {
|
|
2874
2907
|
execute: async (context, request) => {
|
|
2875
2908
|
const startedAt = now();
|
|
@@ -2880,7 +2913,8 @@ function observedBroker(input) {
|
|
|
2880
2913
|
phase: "started",
|
|
2881
2914
|
tool: request.tool,
|
|
2882
2915
|
operationId,
|
|
2883
|
-
...startedPresentation ? { presentation: startedPresentation } : {}
|
|
2916
|
+
...startedPresentation ? { presentation: startedPresentation } : {},
|
|
2917
|
+
...verbose ? { input: boundedToolInput(request.input) } : {}
|
|
2884
2918
|
});
|
|
2885
2919
|
const response2 = await input.broker.execute(context, request);
|
|
2886
2920
|
const completedPresentation = codeToolResultPresentation(request, response2);
|
|
@@ -2893,7 +2927,8 @@ function observedBroker(input) {
|
|
|
2893
2927
|
durationMs: now() - startedAt,
|
|
2894
2928
|
operationId,
|
|
2895
2929
|
...failureReason ? { failureReason } : {},
|
|
2896
|
-
...completedPresentation ? { presentation: completedPresentation } : {}
|
|
2930
|
+
...completedPresentation ? { presentation: completedPresentation } : {},
|
|
2931
|
+
...verbose ? { output: boundedToolOutput(response2.content) } : {}
|
|
2897
2932
|
});
|
|
2898
2933
|
return response2;
|
|
2899
2934
|
}
|
|
@@ -4350,6 +4385,7 @@ var TheseusRuntimeEngine = class {
|
|
|
4350
4385
|
buildPolicyDigest: resolvedRecipes.buildPolicyDigest,
|
|
4351
4386
|
role: metadata.role,
|
|
4352
4387
|
readOnly: metadata.readOnly,
|
|
4388
|
+
eventDetail: metadata.eventDetail,
|
|
4353
4389
|
title: metadata.title,
|
|
4354
4390
|
proof: metadata.proof,
|
|
4355
4391
|
maxTokensPerInteraction: metadata.maxTokensPerInteraction,
|
|
@@ -4417,6 +4453,7 @@ var TheseusRuntimeEngine = class {
|
|
|
4417
4453
|
prompt,
|
|
4418
4454
|
proof: active.proof,
|
|
4419
4455
|
maxTokensPerInteraction: active.maxTokensPerInteraction,
|
|
4456
|
+
eventDetail: active.eventDetail,
|
|
4420
4457
|
planningInputDigest: active.planningInputDigest,
|
|
4421
4458
|
attestationDigest: "pursue",
|
|
4422
4459
|
repository: active.repository,
|
|
@@ -4461,6 +4498,7 @@ var TheseusRuntimeEngine = class {
|
|
|
4461
4498
|
prompt,
|
|
4462
4499
|
proof: active.proof,
|
|
4463
4500
|
maxTokensPerInteraction: active.maxTokensPerInteraction,
|
|
4501
|
+
eventDetail: active.eventDetail,
|
|
4464
4502
|
planningInputDigest: active.planningInputDigest,
|
|
4465
4503
|
attestationDigest: "follow-up",
|
|
4466
4504
|
repository: active.repository,
|
|
@@ -4544,7 +4582,8 @@ var TheseusRuntimeEngine = class {
|
|
|
4544
4582
|
return observedBroker({
|
|
4545
4583
|
broker,
|
|
4546
4584
|
operationIdFor: (requestId) => digestRuntimeValue(`${command.commandId}:${requestId}`),
|
|
4547
|
-
emit: (event) => this.#event(command, event, active.conversationRefs).catch(() => void 0)
|
|
4585
|
+
emit: (event) => this.#event(command, event, active.conversationRefs).catch(() => void 0),
|
|
4586
|
+
detail: active.eventDetail
|
|
4548
4587
|
});
|
|
4549
4588
|
}
|
|
4550
4589
|
async #checkpoint(command) {
|