@tangle-network/agent-runtime 0.203.0 → 0.203.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/{activation-C8Ilw0IX.js → activation-Df4XxGKc.js} +2 -2
  2. package/dist/{activation-C8Ilw0IX.js.map → activation-Df4XxGKc.js.map} +1 -1
  3. package/dist/agent.js +2 -2
  4. package/dist/{coordination-driver-B5TLsu_f.js → coordination-driver-DXrdrMRp.js} +2 -2
  5. package/dist/{coordination-driver-B5TLsu_f.js.map → coordination-driver-DXrdrMRp.js.map} +1 -1
  6. package/dist/{delegate-B8y9EvTY.js → delegate-BRXVGuRw.js} +2 -2
  7. package/dist/{delegate-B8y9EvTY.js.map → delegate-BRXVGuRw.js.map} +1 -1
  8. package/dist/durable.js +2 -2
  9. package/dist/{graph-C3WsOkdi.js → graph-DADb6ITM.js} +3 -3
  10. package/dist/{graph-C3WsOkdi.js.map → graph-DADb6ITM.js.map} +1 -1
  11. package/dist/{improvement-cycle-BVS0odHN.js → improvement-cycle-C8giFe0g.js} +3 -3
  12. package/dist/{improvement-cycle-BVS0odHN.js.map → improvement-cycle-C8giFe0g.js.map} +1 -1
  13. package/dist/index.js +7 -7
  14. package/dist/intelligence.js +3 -3
  15. package/dist/kernel.js +8 -8
  16. package/dist/{loop-runner-bin-CSMc1AQ5.js → loop-runner-bin-C9v5_OFP.js} +3 -3
  17. package/dist/{loop-runner-bin-CSMc1AQ5.js.map → loop-runner-bin-C9v5_OFP.js.map} +1 -1
  18. package/dist/loop-runner-bin.js +1 -1
  19. package/dist/mcp/bin.js +3 -3
  20. package/dist/mcp/index.js +4 -4
  21. package/dist/{provision-supervisor-hc_SOkP5.js → provision-supervisor-BPPumGwV.js} +3 -3
  22. package/dist/{provision-supervisor-hc_SOkP5.js.map → provision-supervisor-BPPumGwV.js.map} +1 -1
  23. package/dist/{redact-B5g0jY2n.js → redact-hBRYKHwa.js} +103 -22
  24. package/dist/redact-hBRYKHwa.js.map +1 -0
  25. package/dist/{runtime-B4HhRqE8.js → runtime-DRAhMoBO.js} +8 -8
  26. package/dist/{runtime-B4HhRqE8.js.map → runtime-DRAhMoBO.js.map} +1 -1
  27. package/dist/{server-BnsMo0dR.js → server-5fDDTEgZ.js} +3 -3
  28. package/dist/{server-BnsMo0dR.js.map → server-5fDDTEgZ.js.map} +1 -1
  29. package/dist/{structural-rollout-DPwqGLUp.js → structural-rollout-BO6sHlE7.js} +2 -2
  30. package/dist/{structural-rollout-DPwqGLUp.js.map → structural-rollout-BO6sHlE7.js.map} +1 -1
  31. package/dist/{supervise-CskGiJMk.js → supervise-CcvZjMAP.js} +3 -3
  32. package/dist/{supervise-CskGiJMk.js.map → supervise-CcvZjMAP.js.map} +1 -1
  33. package/dist/testing.js +12 -12
  34. package/dist/tui/index.js +1 -1
  35. package/package.json +5 -3
  36. package/dist/redact-B5g0jY2n.js.map +0 -1
@@ -5108,7 +5108,8 @@ const ROLLOUT_SUFFIX = ".jsonl";
5108
5108
  const INTERESTING = [
5109
5109
  "\"session_meta\"",
5110
5110
  "\"token_count\"",
5111
- "\"task_started\""
5111
+ "\"task_started\"",
5112
+ "\"token_usage_record\""
5112
5113
  ];
5113
5114
  /**
5114
5115
  * Read one rollout's rows into a session record.
@@ -5134,22 +5135,22 @@ function createCodexRolloutStoreReader(ref) {
5134
5135
  const files = /* @__PURE__ */ new Map();
5135
5136
  return { async read() {
5136
5137
  const sessions = [];
5138
+ const staged = /* @__PURE__ */ new Map();
5137
5139
  for (const path of await listRollouts(root)) {
5138
- const cursor = files.get(path) ?? newCursor();
5139
- files.set(path, cursor);
5140
+ let cursor = cloneCursor(files.get(path) ?? newCursor());
5140
5141
  const size = await fileSize(path);
5141
5142
  if (size === void 0) continue;
5142
- if (size < cursor.offset) {
5143
- const fresh = newCursor();
5144
- files.set(path, fresh);
5145
- cursor.offset = fresh.offset;
5146
- cursor.state = fresh.state;
5147
- cursor.pending = fresh.pending;
5148
- }
5143
+ if (size < cursor.offset) cursor = newCursor();
5149
5144
  if (size === cursor.offset) continue;
5150
- await consumeAppendedBytes(path, cursor, size);
5145
+ try {
5146
+ await consumeAppendedBytes(path, cursor, size);
5147
+ } catch (error) {
5148
+ if (cursor.state.identity && !includesWorkspace(cursor.state.identity, workspaceRoot)) continue;
5149
+ throw error;
5150
+ }
5151
+ staged.set(path, cursor);
5151
5152
  const read = finishSession(cursor.state);
5152
- if (read === void 0 || !includesWorkspace(read.session, workspaceRoot)) continue;
5153
+ if (read === void 0 || !includesWorkspace(read.session.identity, workspaceRoot)) continue;
5153
5154
  const from = read.ownFrom === void 0 ? void 0 : laterCounters(read.ownFrom, cursor.credited);
5154
5155
  const incremental = from === void 0 ? void 0 : counterDelta(from, cursor.state.cumulative);
5155
5156
  cursor.credited = cursor.state.cumulative;
@@ -5158,6 +5159,7 @@ function createCodexRolloutStoreReader(ref) {
5158
5159
  ...incremental === void 0 ? {} : { incremental }
5159
5160
  });
5160
5161
  }
5162
+ for (const [path, cursor] of staged) files.set(path, cursor);
5161
5163
  return reduceDelta(sessions);
5162
5164
  } };
5163
5165
  }
@@ -5178,6 +5180,7 @@ function harnessUsageIsEmpty(usage) {
5178
5180
  }
5179
5181
  function createSessionState() {
5180
5182
  return {
5183
+ canonical: /* @__PURE__ */ new Map(),
5181
5184
  cumulative: zeroCounters,
5182
5185
  marks: [],
5183
5186
  markEnds: [],
@@ -5192,6 +5195,11 @@ function consumeRow(state, row) {
5192
5195
  readIdentity(state, record);
5193
5196
  return;
5194
5197
  }
5198
+ if (record.type === "token_usage_record") {
5199
+ consumeCanonical(state, record);
5200
+ return;
5201
+ }
5202
+ if (state.canonical.size > 0) return;
5195
5203
  if (record.type !== "event_msg") return;
5196
5204
  const payload = plainRecord(record.payload);
5197
5205
  if (payload === void 0) return;
@@ -5215,19 +5223,59 @@ function consumeRow(state, row) {
5215
5223
  if (state.marks.length === 0) state.beforeFirstMark = total;
5216
5224
  else state.markEnds[state.marks.length - 1] = total;
5217
5225
  }
5226
+ function canonicalCounters(value) {
5227
+ const record = plainRecord(value);
5228
+ const counters = readCumulative(value);
5229
+ if (!record || !counters || record.total_tokens !== counters.input + counters.output || counters.cachedInput + counters.cacheWriteInput > counters.input || counters.reasoningOutput > counters.output || [
5230
+ "cached_input_tokens",
5231
+ "cache_write_input_tokens",
5232
+ "reasoning_output_tokens"
5233
+ ].some((key) => record[key] !== void 0 && naturalNumber(record[key]) === void 0)) throw new ValidationError$1("codex rollout: malformed canonical usage");
5234
+ return counters;
5235
+ }
5236
+ function consumeCanonical(state, record) {
5237
+ const payload = plainRecord(record.payload);
5238
+ if (!payload || !state.identity || typeof payload.thread_id !== "string") throw new ValidationError$1("codex rollout: canonical usage has no thread identity");
5239
+ if (payload.thread_id !== state.identity.sessionId) return;
5240
+ if (typeof payload.response_id !== "string" || !payload.response_id || typeof payload.turn_id !== "string" || !payload.turn_id) throw new ValidationError$1("codex rollout: canonical usage has no response or turn identity");
5241
+ const usage = canonicalCounters(payload.usage);
5242
+ const total = canonicalCounters(payload.thread_token_usage);
5243
+ const previous = state.canonical.get(payload.response_id);
5244
+ if (previous) {
5245
+ if (previous.turnId !== payload.turn_id || !sameCounters(previous.usage, usage) || !sameCounters(previous.total, total)) throw new ValidationError$1("codex rollout: conflicting canonical response usage");
5246
+ return;
5247
+ }
5248
+ const before = state.canonical.size === 0 ? zeroCounters : state.cumulative;
5249
+ if (!sameCounters({
5250
+ input: before.input + usage.input,
5251
+ output: before.output + usage.output,
5252
+ cachedInput: before.cachedInput + usage.cachedInput,
5253
+ cacheWriteInput: before.cacheWriteInput + usage.cacheWriteInput,
5254
+ reasoningOutput: before.reasoningOutput + usage.reasoningOutput
5255
+ }, total)) throw new ValidationError$1("codex rollout: incomplete or conflicting canonical cumulative usage");
5256
+ state.canonical.set(payload.response_id, {
5257
+ turnId: payload.turn_id,
5258
+ usage,
5259
+ total
5260
+ });
5261
+ state.cumulative = total;
5262
+ }
5218
5263
  function readIdentity(state, record) {
5264
+ if (state.identity !== void 0) return;
5219
5265
  const payload = plainRecord(record.payload);
5220
5266
  if (payload === void 0) return;
5221
5267
  const sessionId = typeof payload.id === "string" ? payload.id : void 0;
5222
5268
  if (sessionId === void 0) return;
5223
5269
  const spawn = plainRecord(plainRecord(plainRecord(payload.source)?.subagent)?.thread_spawn);
5270
+ const parentThreadId = payload.parent_thread_id ?? spawn?.parent_thread_id;
5271
+ const agentPath = payload.agent_path ?? spawn?.agent_path;
5224
5272
  const startedAtMs = Date.parse(typeof payload.timestamp === "string" ? payload.timestamp : String(record.timestamp ?? ""));
5225
5273
  state.identity = {
5226
5274
  sessionId,
5227
- ...typeof payload.parent_thread_id === "string" ? { parentThreadId: payload.parent_thread_id } : {},
5275
+ ...typeof parentThreadId === "string" ? { parentThreadId } : {},
5228
5276
  ...typeof payload.forked_from_id === "string" ? { forkedFromId: payload.forked_from_id } : {},
5229
- nativeChild: payload.thread_source === "subagent",
5230
- ...typeof payload.agent_path === "string" ? { agentPath: payload.agent_path } : {},
5277
+ nativeChild: payload.thread_source === "subagent" || spawn !== void 0,
5278
+ ...typeof agentPath === "string" ? { agentPath } : {},
5231
5279
  ...typeof payload.agent_nickname === "string" ? { agentNickname: payload.agent_nickname } : {},
5232
5280
  ...typeof spawn?.depth === "number" ? { depth: spawn.depth } : {},
5233
5281
  ...typeof payload.cwd === "string" ? { cwd: payload.cwd } : {},
@@ -5239,6 +5287,24 @@ function readIdentity(state, record) {
5239
5287
  function finishSession(state) {
5240
5288
  const identity = state.identity;
5241
5289
  if (identity === void 0) return void 0;
5290
+ if (state.canonical.size > 0) {
5291
+ const byTurn = /* @__PURE__ */ new Map();
5292
+ for (const { turnId, usage } of state.canonical.values()) byTurn.set(turnId, addHarnessUsage(byTurn.get(turnId) ?? emptyUsage(), counterDelta(zeroCounters, usage) ?? emptyUsage()));
5293
+ return {
5294
+ ownFrom: zeroCounters,
5295
+ session: {
5296
+ identity,
5297
+ boundary: { kind: "whole-file" },
5298
+ fileCumulativeInput: state.cumulative.input,
5299
+ fileCumulativeOutput: state.cumulative.output,
5300
+ own: counterDelta(zeroCounters, state.cumulative) ?? emptyUsage(),
5301
+ turns: [...byTurn].map(([turnId, usage]) => ({
5302
+ turnId,
5303
+ usage
5304
+ }))
5305
+ }
5306
+ };
5307
+ }
5242
5308
  const boundary = resolveBoundary(state, identity);
5243
5309
  const base = {
5244
5310
  identity,
@@ -5346,6 +5412,17 @@ function newCursor() {
5346
5412
  credited: zeroCounters
5347
5413
  };
5348
5414
  }
5415
+ function cloneCursor(cursor) {
5416
+ return {
5417
+ ...cursor,
5418
+ state: {
5419
+ ...cursor.state,
5420
+ canonical: new Map(cursor.state.canonical),
5421
+ marks: [...cursor.state.marks],
5422
+ markEnds: [...cursor.state.markEnds]
5423
+ }
5424
+ };
5425
+ }
5349
5426
  async function listRollouts(root) {
5350
5427
  const found = [];
5351
5428
  const walk = async (dir) => {
@@ -5395,13 +5472,18 @@ async function consumeAppendedBytes(path, cursor, size) {
5395
5472
  }
5396
5473
  function consumeLine(state, line) {
5397
5474
  if (!INTERESTING.some((marker) => line.includes(marker))) return;
5475
+ let row;
5398
5476
  try {
5399
- consumeRow(state, JSON.parse(line));
5400
- } catch {}
5477
+ row = JSON.parse(line);
5478
+ } catch {
5479
+ if (line.includes("\"token_usage_record\"")) throw new ValidationError$1("codex rollout: malformed canonical JSON receipt");
5480
+ return;
5481
+ }
5482
+ consumeRow(state, row);
5401
5483
  }
5402
- function includesWorkspace(session, workspaceRoot) {
5484
+ function includesWorkspace(identity, workspaceRoot) {
5403
5485
  if (workspaceRoot === void 0) return true;
5404
- const cwd = session.identity.cwd;
5486
+ const cwd = identity.cwd;
5405
5487
  if (cwd === void 0) return false;
5406
5488
  const rel = relative(workspaceRoot, resolve(cwd));
5407
5489
  return rel === "" || !rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel);
@@ -14183,7 +14265,6 @@ const routerToolsInlineExecutor = (spec, ctx) => {
14183
14265
  role: "user",
14184
14266
  content: inbox.fold(pending)
14185
14267
  });
14186
- return pending.length > 0;
14187
14268
  };
14188
14269
  const external = linkAbort(signal, controller.signal).signal;
14189
14270
  try {
@@ -14252,7 +14333,7 @@ const routerToolsInlineExecutor = (spec, ctx) => {
14252
14333
  if (res.content) lastText = res.content;
14253
14334
  const toolCalls = res.toolCalls;
14254
14335
  if (toolCalls.length === 0) {
14255
- if (flush()) continue;
14336
+ if (inbox.pendingAuthority() > 0) continue;
14256
14337
  messages.push({
14257
14338
  role: "assistant",
14258
14339
  content: res.content ?? ""
@@ -22023,4 +22104,4 @@ function resolveRedactor(redact) {
22023
22104
  //#endregion
22024
22105
  export { bridgeAdmissionRefusal as $, buildRuntimeEventOtelSpans as $n, providerAttemptEvidence as $r, spendFromUsageEvents as $t, consumeScopeRetainedOwnerResult as A, promptFromAgentTurnInput as Ai, throwIfAborted as An, profileMaterializationAxes$1 as Ar, peerMailTools as At, workerInteractiveBindingFile as B, startRetainedRunInEnvironment as Bn, worktreeCliProfileMaterialization as Br, insideCursorNamespace as Bt, settledToIteration as C, notifySandboxEventObserver as Ci, hasCompleteCacheBreakdown as Cn, parseCodexTokenUsage as Cr, createInbox as Ct, timerAt as D, decodeHarnessUsage as Di, sleep as Dn, controlProfileMaterialization as Dr, claimsAuthority as Dt, pollFor as E, sumSandboxUsage as Ei, randomSuffix as En, assertProfileMaterialization as Er, PEER_MAIL_WIRE_KEY as Et, interactiveAdmissionSeamKey as F, abortError$1 as Fn, renderProfileMaterializationIssues as Fr, taskToPrompt as Ft, destroyInteractiveEnvironment as G, readCodexRolloutSession as Gn, attestRuntimeOwnedPendingExecutor as Gr, WORKER_TOOL_TRACE_SCHEMA_VERSION as Gt, reconnectRetainedInteractiveRun as H, addHarnessUsage as Hn, parseCommittedJsonLines as Hr, materializeTreeView as Ht, readWorkerInteractiveAdmissions as I, linkAbort as In, renderUnsupported as Ir, FileResultBlobStore as It, queueOf as J, readTraceContextFromEnv as Jn, finalizeRuntimeOwnedPendingExecutor as Jr, parseWorkerToolTraceArtifact as Jt, effectiveConcurrency as K, createPropagatingTraceEmitter as Kn, attestRuntimeOwnedScopeOwner as Kr, captureWorkerTraceEvidence as Kt, workerInteractiveAdmissionFile as L, reconnectRetainedRun as Ln, sandboxActProfileMaterialization as Lr, FileSpawnJournal as Lt, scopeRetainedOwnerContext as M, providerMessageText as Mi, zeroSpend as Mn, promptModelProfileMaterialization as Mr, isLiveNodeStatus as Mt, scopeRetainedOwnerPriorSpend as N, registerRetainedExecutorPreparation as Nn, promptOnlyProfileMaterialization as Nr, isTerminalNodeStatus as Nt, validateWaitSpec as O, abortError$2 as Oi, stringifySafe as On, defineProfileMaterializationContract as Or, createPeerMailbox as Ot, scopeRetainedOwnerResult as P, retainedExecutorSeamKey as Pn, promptResourceProfileMaterialization as Pr, createInPlaceCliExecutor as Pt, bindReusableExecutorExecutionId as Q, buildLoopSpanNodes as Qn, newExecutionAttemptId as Qr, createBudgetPool as Qt, attachWorker as R, recoverRetainedRun as Rn, unsupportedProfileDimensions as Rr, InMemoryResultBlobStore as Rt, scopeOwnerExecutorNodeContext as S, mapSandboxToolEvent as Si, deleteBoxSafe as Sn, localHarnessExecutable as Sr, readWorkerProgress as St, isWaitOutcome as T, sandboxProgressEvents as Ti, promptCacheTokenClasses as Tn, AGENT_PROFILE_MATERIALIZATION_AXES as Tr, DEFAULT_PEER_MAIL_LIMITS as Tt, recoverRetainedInteractiveRun as U, createCodexRolloutStoreReader as Un, prepareJsonlAppend as Ur, pendingWaits as Ut, workerInteractiveBindingsDir as V, retainedCreateMaterial as Vn, isNoEntError as Vr, loadSpawnForest as Vt, startRetainedInteractiveRun as W, harnessUsageIsEmpty as Wn, writeAllBytes as Wr, replaySpawnTree as Wt, DEFAULT_SUCCESSFUL_SHUTDOWN_MS as X, INTELLIGENCE_WIRE_VERSION as Xn, knownExecutionBindingReceipt as Xr, contentAddress as Xt, rollingDispatch as Y, traceContextToEnv as Yn, inheritRuntimeOwnedExecutorAttestation as Yr, workerTraceAnalysisStore as Yt, teardownExecutor as Z, buildLoopOtelSpans as Zn, knownMaterializationReceipt as Zr, assertValidBudget as Zt, deriveNodeExecutionIdentity as _, createSandboxToolPartState as _i, resolveAgentEnvironmentProvider as _n, createWorktree as _r, createPushTraceSource as _t, createSupervisor as a, runtimeOwnedPendingExecutorMaterialization as ai, createSandboxLineage as an, loopEventToOtelSpan as ar, cliWorktreeExecutor as at, recordScopeOwnerMaterialization as b, isSandboxTerminalEvent as bi, chargedTokens as bn, LOCAL_HARNESSES as br, DEFAULT_STALL_AFTER_MS as bt, pickBestDelivered as c, unknownMaterializationReceipt as ci, assertBoxlessPromptOptions as cn, toOtelAttributes as cr, snapshotExecutorConfig as ct, driverChild as d, detachedFrozen as di, runBrainLoop as dn, sanitizeAgentRuntimeEvent as dr, readWorkerTraceContext as dt, recordRuntimeOwnedDriveHarnessProviderEvidence as ei, TERMINAL_DECISIONS as en, createOpenInferenceFileExporter as er, bridgeModelRouteRefusal as et, driverExecutorFactory as f, detachedSnapshot as fi, canonicalObservedModelParts as fn, sanitizeKnowledgeReadinessReport as fr, workerTraceEnv as ft, createScope as g, canonicalStreamEventFromSandboxEvent as gi, providerAsSandboxClient as gn, captureWorktreeDiff as gr, createSteerableSandboxSession as gt, beginScopeOwnerAttempt as h, assertSandboxServedModel as hi, providerAsExecutor as hn, runWorktreeHarness as hr, DEFAULT_SANDBOX_STEERING_MAX_TURNS as ht, createRootHandle as i, runtimeOwnedExecutorProviderEvidence as ii, runAgentRounds as in, generateSpanId as ir, cliInPlaceExecutor as it, prepareScopeRetainedOwnerTask as j, promptOptionsFromAgentTurnInput as ji, unmeteredSpend as jn, promptControlProfileMaterialization as jr, peerMailVerbNames as jt, waitUntil as k, awaitAbortable$1 as ki, throwAbort as kn, fullProfileMaterialization as kr, isPeerMailEnvelope as kt, runFinalizer as l, executableAgentProfileSnapshot as li, readPromptOptions as ln, createRuntimeEventCollector as lr, createWorktreeCliExecutor as lt, withDriverExecutor as m, readSandboxOutcome as mi, createAgentEnvironmentProviderRegistry as mn, runSettledCommand as mr, workerTraceSeamKey as mt, defaultRedactorIdentityMaterial as n, runtimeOwnedExecutorExecutionBinding as ni, defaultSelectWinner as nn, exportEvalRuns as nr, bridgeStopSignalKey as nt, bestDelivered as o, runtimeOwnedScopeOwnerRuntime as oi, probeSandboxCapabilities as on, padSpanId as or, createExecutor as ot, isDriverSpec as p, projectSandboxOutcome as pi, observedModelMatchesDeclared as pn, sanitizeRuntimeStreamEvent as pr, workerTraceHeaders as pt, freeSlots as q, mergeTraceEnv as qn, authoredProfileDigest as qr, isTraceAnalysisStore as qt, resolveRedactor as r, runtimeOwnedExecutorMaterialization as ri, isTerminalDecision as rn, flatOtelSpan as rr, captureReusableExecutorConfig as rt, collectDelivered as s, unknownExecutionBindingReceipt as si, acquireSandbox as sn, padTraceId as sr, createExecutorRegistry as st, defaultRedactor as t, runtimeOwnedDriveHarnessProviderEvidence as ti, createSandboxForSpec as tn, createOtelExporter as tr, bridgeRuntimeAttachmentsKey as tt, runTree as u, executableAgentSpecSnapshot as ui, routerBrain as un, createRuntimeStreamEventCollector as ur, WORKER_TRACE_PROPAGATION as ut, meterRuntimeOwnedAccounting as v, createSandboxUsageLedger as vi, sandboxClientAsProvider as vn, removeWorktree as vr, decodeToolPart as vt, createWaitProbes as w, sandboxEventServedBackend as wi, isAbortError$2 as wn, CodexExecutionDiagnosticError as wr, AUTHORITY_MARKERS as wt, restoreScopeOwnerAcceptedExecution as x, mapSandboxEvent as xi, cloneSpend as xn, harnessSupportsReasoningEffort as xr, createActivityLog as xt, meterRuntimeOwnedProviderAttempt as y, extractLlmCallEvent as yi, addSpend as yn, DEFAULT_LOCAL_HARNESS as yr, sandboxSessionTraceSource as yt, readWorkerInteractiveBinding as z, startRetainedRun as zn, validateProfileMaterialization as zr, InMemorySpawnJournal as zt };
22025
22106
 
22026
- //# sourceMappingURL=redact-B5g0jY2n.js.map
22107
+ //# sourceMappingURL=redact-hBRYKHwa.js.map