@tangle-network/agent-runtime 0.295.3 → 0.295.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.
Files changed (36) hide show
  1. package/dist/{activation-CkulncPi.js → activation-b7b_lmhE.js} +2 -2
  2. package/dist/{activation-CkulncPi.js.map → activation-b7b_lmhE.js.map} +1 -1
  3. package/dist/agent.js +2 -2
  4. package/dist/{coordination-driver-B_rF6bAa.js → coordination-driver-IBnJrG35.js} +2 -2
  5. package/dist/{coordination-driver-B_rF6bAa.js.map → coordination-driver-IBnJrG35.js.map} +1 -1
  6. package/dist/{delegate-_h6a-sZR.js → delegate-D3_pGiGW.js} +2 -2
  7. package/dist/{delegate-_h6a-sZR.js.map → delegate-D3_pGiGW.js.map} +1 -1
  8. package/dist/durable.js +2 -2
  9. package/dist/{graph-CN9gCxcw.js → graph-BbsdhFNv.js} +4 -4
  10. package/dist/{graph-CN9gCxcw.js.map → graph-BbsdhFNv.js.map} +1 -1
  11. package/dist/{improvement-cycle-EMHB3l51.js → improvement-cycle-C2IuQaRp.js} +3 -3
  12. package/dist/{improvement-cycle-EMHB3l51.js.map → improvement-cycle-C2IuQaRp.js.map} +1 -1
  13. package/dist/index.js +7 -7
  14. package/dist/intelligence.js +4 -4
  15. package/dist/kernel.js +8 -8
  16. package/dist/{loop-runner-bin-BK5brrNK.js → loop-runner-bin-DTCYtNxx.js} +3 -3
  17. package/dist/{loop-runner-bin-BK5brrNK.js.map → loop-runner-bin-DTCYtNxx.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-BJ6-8M97.js → provision-supervisor-DRl8doHG.js} +3 -3
  22. package/dist/{provision-supervisor-BJ6-8M97.js.map → provision-supervisor-DRl8doHG.js.map} +1 -1
  23. package/dist/{runtime-Bcx8STGY.js → runtime-Bgf9mm__.js} +8 -8
  24. package/dist/{runtime-Bcx8STGY.js.map → runtime-Bgf9mm__.js.map} +1 -1
  25. package/dist/{search-method-rGfFP5yr.js → search-method-D3WdgmuN.js} +2 -2
  26. package/dist/{search-method-rGfFP5yr.js.map → search-method-D3WdgmuN.js.map} +1 -1
  27. package/dist/{server-B-DKa3MD.js → server-B3nNSFlK.js} +3 -3
  28. package/dist/{server-B-DKa3MD.js.map → server-B3nNSFlK.js.map} +1 -1
  29. package/dist/{supervise-CIyd8B3f.js → supervise-D5yxnDzD.js} +3 -3
  30. package/dist/{supervise-CIyd8B3f.js.map → supervise-D5yxnDzD.js.map} +1 -1
  31. package/dist/{supervisor-DnoT3-_F.js → supervisor-B1jEhBXU.js} +71 -6
  32. package/dist/supervisor-B1jEhBXU.js.map +1 -0
  33. package/dist/testing.js +12 -12
  34. package/dist/tui/index.js +1 -1
  35. package/package.json +1 -1
  36. package/dist/supervisor-DnoT3-_F.js.map +0 -1
@@ -2011,18 +2011,82 @@ function readSandboxOutcome(value) {
2011
2011
  //#endregion
2012
2012
  //#region src/runtime/supervise/snapshot.ts
2013
2013
  /** Deeply detach and freeze untrusted data at a runtime decision boundary. The clone prevents the
2014
- * caller from mutating it later; the freeze prevents downstream code from mutating the snapshot. */
2014
+ * caller from mutating it later; the freeze prevents downstream code from mutating the snapshot.
2015
+ * Strings are immutable, so the snapshot shares the caller's strings instead of copying them. */
2015
2016
  function detachedSnapshot(value, context) {
2017
+ let clone;
2016
2018
  try {
2017
- return deepFreeze(structuredClone(value));
2019
+ clone = structuredClone(value);
2018
2020
  } catch (error) {
2019
2021
  throw new ValidationError$1(`${context}: input must be structured-cloneable`, { cause: error });
2020
2022
  }
2023
+ return deepFreeze(shareSourceStrings(value, clone));
2021
2024
  }
2022
2025
  /** Detach a value from its caller and freeze it, without the `ValidationError` framing
2023
2026
  * {@link detachedSnapshot} adds. For a boundary that has already validated its input. */
2024
2027
  function detachedFrozen(value) {
2025
- return deepFreeze(structuredClone(value));
2028
+ return deepFreeze(shareSourceStrings(value, structuredClone(value)));
2029
+ }
2030
+ /**
2031
+ * Point each string in a fresh structured clone at the equal string in its source.
2032
+ *
2033
+ * `structuredClone` copies every string, and a copied string buys no isolation: only objects and
2034
+ * arrays can change through a shared reference. A spawned profile passes several boundaries, and
2035
+ * each one kept its own copy: in a reproduction of Discovery's hosted coordinator, a child profile
2036
+ * that mounts a 5.3 MB file packet was held four times per spawned child. A scope keeps every
2037
+ * child it spawned, so the heap grew about 22 MB per spawn, and hosted coordinators died with V8
2038
+ * heap OOM after 37 spawns.
2039
+ *
2040
+ * The walk pairs only own data properties of plain objects and arrays. Accessors, Maps, Sets and
2041
+ * other cloned types keep the clone's values. A string is replaced only by a string equal to it,
2042
+ * so the snapshot holds exactly the clone's value. The snapshot keeps the source's strings alive.
2043
+ */
2044
+ function shareSourceStrings(source, clone) {
2045
+ const visited = /* @__PURE__ */ new Set();
2046
+ const visit = (from, to) => {
2047
+ if (from === null || to === null || typeof from !== "object" || typeof to !== "object") return;
2048
+ const array = Array.isArray(to);
2049
+ if (array !== Array.isArray(from)) return;
2050
+ if (!array && Object.getPrototypeOf(to) !== Object.prototype) return;
2051
+ if (visited.has(to)) return;
2052
+ visited.add(to);
2053
+ const target = to;
2054
+ for (const key of Object.keys(target)) {
2055
+ const own = Object.getOwnPropertyDescriptor(from, key);
2056
+ if (own === void 0 || !("value" in own)) continue;
2057
+ const cloned = target[key];
2058
+ if (typeof cloned === "string") {
2059
+ if (own.value === cloned) target[key] = own.value;
2060
+ } else visit(own.value, cloned);
2061
+ }
2062
+ };
2063
+ visit(source, clone);
2064
+ return clone;
2065
+ }
2066
+ /**
2067
+ * Replace each string in a freshly parsed JSON value with an equal string already in `pool`, and
2068
+ * add the new ones. One recovery pass parses every interrupted child's profile from its own blob,
2069
+ * so children that carry the same file packet would otherwise hold one copy each. The value is
2070
+ * updated in place, so it must belong to the caller; frozen objects are left as they are.
2071
+ */
2072
+ function shareParsedStrings(value, pool) {
2073
+ const visit = (node) => {
2074
+ if (node === null || typeof node !== "object" || Object.isFrozen(node)) return;
2075
+ if (!Array.isArray(node) && Object.getPrototypeOf(node) !== Object.prototype) return;
2076
+ const target = node;
2077
+ for (const key of Object.keys(target)) {
2078
+ const item = target[key];
2079
+ if (typeof item !== "string") {
2080
+ visit(item);
2081
+ continue;
2082
+ }
2083
+ const shared = pool.get(item);
2084
+ if (shared === void 0) pool.set(item, item);
2085
+ else target[key] = shared;
2086
+ }
2087
+ };
2088
+ visit(value);
2089
+ return value;
2026
2090
  }
2027
2091
  function deepFreeze(value, seen = /* @__PURE__ */ new Set()) {
2028
2092
  if (value === null || typeof value !== "object" || ArrayBuffer.isView(value) || seen.has(value)) return value;
@@ -21893,6 +21957,7 @@ async function prepareInterruptedExecutors(opts, events, signal, now, parentId =
21893
21957
  const terminal = new Set(events.filter(closesCursorSlot).map((event) => event.id));
21894
21958
  const interrupted = events.filter((event) => event.kind === "spawned" && event.parent === parentId && !terminal.has(event.id));
21895
21959
  const recoveries = [];
21960
+ const parsedStrings = /* @__PURE__ */ new Map();
21896
21961
  const accepted = [];
21897
21962
  const rootBudget = events.find((event) => event.kind === "spawned" && event.parent === void 0)?.budget;
21898
21963
  for (const node of interrupted) {
@@ -21927,8 +21992,8 @@ async function prepareInterruptedExecutors(opts, events, signal, now, parentId =
21927
21992
  if (!opts.recoverExecutor || admissions.length === 0 && !node.ownedTreeRoot && (opts.journal.appendEvents === void 0 || latestInput === void 0)) continue;
21928
21993
  const taskRef = inputs[0]?.taskRef;
21929
21994
  if (!node.profileRef || !taskRef || !node.identity?.profileDigest || !node.identity.taskDigest) throw new RuntimeRunStateError(`cannot recover '${node.id}' without exact profile and task bytes`);
21930
- const profile = agentProfileSchema.parse(await opts.blobs.get(node.profileRef));
21931
- const task = await opts.blobs.get(taskRef);
21995
+ const profile = shareParsedStrings(agentProfileSchema.parse(await opts.blobs.get(node.profileRef)), parsedStrings);
21996
+ const task = shareParsedStrings(await opts.blobs.get(taskRef), parsedStrings);
21932
21997
  if (canonicalAgentProfileDigest(profile) !== node.identity.profileDigest || canonicalCandidateDigest(task) !== node.identity.taskDigest) throw new RuntimeRunStateError(`recovery inputs for '${node.id}' do not match its admitted identity`);
21933
21998
  let prepared;
21934
21999
  if (node.ownedTreeRoot !== void 0) {
@@ -28542,4 +28607,4 @@ function isNonEmptySpend(s) {
28542
28607
  //#endregion
28543
28608
  export { bindScopeRetainedOwnerProvider as $, projectSandboxOutcome as $i, parseWorkerToolTraceArtifact as $n, runWorktreeHarness as $r, isPeerMailEnvelope as $t, driverExecutorFactory as A, withBudgetResources as Aa, writeAllBytes as Ai, resolveAgentEnvironmentProvider as An, mergeTraceEnv as Ar, createExecutor as At, recordScopeOwnerDriverAttempt as B, providerMessageText as Ba, recordRuntimeOwnedDriveHarnessProviderEvidence as Bi, InMemoryResultBlobStore as Bn, createOtelExporter as Br, workerTraceEnv as Bt, createContinuationKeeper as C, throwAbort as Ca, sandboxActProfileMaterialization as Ci, readPromptOptions as Cn, runAbortable as Cr, freeSlots as Ct, passedItems as D, zeroSpend as Da, isNoEntError as Di, createAgentEnvironmentProviderRegistry as Dn, readHarnessTranscript as Dr, captureReusableExecutorConfig as Dt, failedItems as E, withTimeout as Ea, worktreeCliProfileMaterialization as Ei, LEAF_CONTINUATION_TASK as En, persistHarnessTranscript as Er, bindReusableExecutorExecutionId as Et, beginScopeOwnerAttempt as F, armDeadlineTimer as Fa, inheritRuntimeOwnedExecutorAttestation as Fi, sandboxSessionTraceSource as Fn, resolveRedactor as Fr, createSteerableSandboxSession as Ft, settledToIteration as G, runtimeOwnedPendingExecutorMaterialization as Gi, insideCursorNamespace as Gn, padTraceId as Gr, createActivityLog as Gt, recordScopeOwnerPause as H, runtimeOwnedExecutorExecutionBinding as Hi, SpawnEventIndex as Hn, generateSpanId as Hr, workerTraceSeamKey as Ht, createScope as I, teardownExecutor as Ia, knownExecutionBindingReceipt as Ii, registerRetainedExecutorPreparation as In, buildLoopOtelSpans as Ir, createRouterTranscript as It, pollFor as J, unknownMaterializationReceipt as Ji, pendingWaits as Jn, createRuntimeStreamEventCollector as Jr, AUTHORITY_MARKERS as Jt, createWaitProbes as K, runtimeOwnedScopeOwnerRuntime as Ki, loadSpawnForest as Kn, toOtelAttributes as Kr, readWorkerProgress as Kt, deriveNodeExecutionIdentity as L, teardownSurfaces as La, knownMaterializationReceipt as Li, retainedExecutorSeamKey as Ln, buildLoopSpanNodes as Lr, createInPlaceCliExecutor as Lt, withDriverExecutor as M, abortError$2 as Ma, attestRuntimeOwnedScopeOwner as Mi, unavailableSignalOfFailure as Mn, traceContextToEnv as Mr, snapshotExecutorConfig as Mt, SUBTREE_RESULT_LIMIT as N, awaitAbortable$1 as Na, authoredProfileDigest as Ni, createPushTraceSource as Nn, defaultRedactor as Nr, createWorktreeCliExecutor as Nt, verdictFromJudgeScore as O, addResourceSpend as Oa, prepareJsonlAppend as Oi, providerAsExecutor as On, contentAddress as Or, cliInPlaceExecutor as Ot, assertRecursiveReservationPolicy as P, DEFAULT_SUCCESSFUL_SHUTDOWN_MS as Pa, finalizeRuntimeOwnedPendingExecutor as Pi, decodeToolPart as Pn, defaultRedactorIdentityMaterial as Pr, DEFAULT_SANDBOX_STEERING_MAX_TURNS as Pt, bindScopeRetainedOwnerEnvironmentId as Q, detachedSnapshot as Qi, isTraceAnalysisStore as Qn, runSettledCommand as Qr, createPeerMailbox as Qt, meterRuntimeOwnedAccounting as R, promptFromAgentTurnInput as Ra, newExecutionAttemptId as Ri, FileResultBlobStore as Rn, buildRuntimeEventOtelSpans as Rr, WORKER_TRACE_PROPAGATION as Rt, composeContinuationNote as S, stringifySafe as Sa, renderUnsupported as Si, assertBoxlessPromptOptions as Sn, linkAbort as Sr, startRetainedInteractiveRun as St, expandQuestions as T, unmeteredSpend as Ta, validateProfileMaterialization as Ti, runBrainLoop as Tn, harnessTranscriptArtifact as Tr, rollingDispatch as Tt, restoreScopeOwnerAcceptedExecution as U, runtimeOwnedExecutorMaterialization as Ui, assertContentAddress as Un, loopEventToOtelSpan as Ur, taskToPrompt as Ut, recordScopeOwnerMaterialization as V, runtimeOwnedDriveHarnessProviderEvidence as Vi, InMemorySpawnJournal as Vn, flatOtelSpan as Vr, workerTraceHeaders as Vt, scopeOwnerExecutorNodeContext as W, runtimeOwnedExecutorProviderEvidence as Wi, encodeResultBlob as Wn, padSpanId as Wr, DEFAULT_STALL_AFTER_MS as Wt, validateWaitSpec as X, executableAgentSpecSnapshot as Xi, WORKER_TOOL_TRACE_SCHEMA_VERSION as Xn, sanitizeKnowledgeReadinessReport as Xr, PEER_MAIL_WIRE_KEY as Xt, timerAt as Y, executableAgentProfileSnapshot as Yi, replaySpawnTree as Yn, sanitizeAgentRuntimeEvent as Yr, DEFAULT_PEER_MAIL_LIMITS as Yt, waitUntil as Z, detachedFrozen as Zi, captureWorkerTraceEvidence as Zn, sanitizeRuntimeStreamEvent as Zr, claimsAuthority as Zt, CheckUnavailableError as _, hasCompleteCacheBreakdown as _a, promptControlProfileMaterialization as _i, createSandboxLineage as _n, environmentGone as _r, readWorkerInteractiveBinding as _t, collectDelivered as a, extractLlmCallEvent as aa, harnessInvocation as ai, bridgeModelRouteRefusal as an, createBudgetPool as ar, scopeRetainedOwnerPriorSpend as at, bestComposite as b, randomSuffix as ba, promptResourceProfileMaterialization as bi, SandboxEvidenceRetentionError as bn, RunCancellationReason as br, reconnectRetainedInteractiveRun as bt, runTree as c, mapSandboxToolEvent as ca, parseCodexTokenUsage as ci, harnessUsageIsEmpty as cn, spendFromUsageEvents as cr, scopeRetainedOwnerResult as ct, classifyDriverFailure as d, sandboxProgressEvents as da, AGENT_PROFILE_MATERIALIZATION_AXES as di, bridgeStopSignalKey as dn, reconnectRetainedRun as dr, hostDirectoryReader as dt, readSandboxOutcome as ea, captureWorktreeDiff as ei, peerMailTools as en, workerTraceAnalysisStore as er, consumeScopeRetainedOwnerResult as et, runDriverWithRetry as f, sumSandboxUsage as fa, assertProfileMaterialization as fi, TERMINAL_DECISIONS as fn, recoverRetainedRun as fr, resolveSpawnResourcePaths as ft, CONTINUATION_FACTS as g, deleteBoxSafe as ga, profileMaterializationAxes$1 as gi, runAgentRounds as gn, destroyInteractiveEnvironment as gr, attachWorker as gt, CONTINUATIONS_DIR as h, cloneSpend as ha, fullProfileMaterialization as hi, isTerminalDecision as hn, retainedCreateMaterial as hr, workerInteractiveAdmissionFile as ht, bestDelivered as i, createSandboxUsageLedger as ia, LOCAL_HARNESSES as ii, bridgeAdmissionRefusal as in, assertValidBudget as ir, scopeRetainedOwnerContext as it, isDriverSpec as j, decodeHarnessUsage as ja, attestRuntimeOwnedPendingExecutor as ji, unavailablePauseMs as jn, readTraceContextFromEnv as jr, createExecutorRegistry as jt, driverChild as k, resourceTelemetry as ka, readCommittedJsonLines as ki, providerAsSandboxClient as kn, createPropagatingTraceEmitter as kr, cliWorktreeExecutor as kt, DriverAttemptsExhaustedError as l, notifySandboxEventObserver as la, CodexExecutionDiagnosticError as li, readCodexRolloutSession as ln, spendFromUsageTotals as lr, SPAWN_RESOURCE_PATH_MAX_BYTES as lt, upstreamUnavailableSignal as m, chargedTokens as ma, defineProfileMaterializationContract as mi, defaultSelectWinner as mn, startRetainedRunInEnvironment as mr, readWorkerInteractiveAdmissions as mt, createRootHandle as n, canonicalStreamEventFromSandboxEvent as na, removeWorktree as ni, isLiveNodeStatus as nn, BudgetReconcileFault as nr, prepareScopeRetainedOwnerTask as nt, pickBestDelivered as o, isSandboxTerminalEvent as oa, harnessSupportsReasoningEffort as oi, addHarnessUsage as on, meterUsageEvent as or, scopeRetainedOwnerResourceReader as ot, summarizeDriverAttempts as p, addSpend as pa, controlProfileMaterialization as pi, createSandboxForSpec as pn, startRetainedRun as pr, interactiveAdmissionSeamKey as pt, isWaitOutcome as q, unknownExecutionBindingReceipt as qi, materializeTreeView as qn, createRuntimeEventCollector as qr, createInbox as qt, createSupervisor as r, createSandboxToolPartState as ra, DEFAULT_LOCAL_HARNESS as ri, isTerminalNodeStatus as rn, ReservationWaitRefused as rr, reconcileScopeRetainedOwnerEnvironment as rt, runFinalizer as s, mapSandboxEvent as sa, localHarnessExecutable as si, createCodexRolloutStoreReader as sn, newUsageTotals as sr, scopeRetainedOwnerRestorePoint as st, DEFAULT_MAX_DEPTH as t, assertSandboxServedModel as ta, createWorktree as ti, peerMailVerbNames as tn, executorFailure as tr, noteScopeRetainedOwnerCoordination as tt, HarnessTurnFailedError as u, sandboxEventServedBackend as ua, terminateProcessTreeAndConfirm as ui, bridgeRuntimeAttachmentsKey as un, errMessage as ur, environmentReader as ut, admitContinuationPolicy as v, isAbortError$2 as va, promptModelProfileMaterialization as vi, probeSandboxCapabilities as vn, createWorkerSlots as vr, workerInteractiveBindingFile as vt, distillFindings as w, throwIfAborted as wa, unsupportedProfileDimensions as wi, routerBrain as wn, captureHarnessTranscript as wr, queueOf as wt, checkVerdictOf as x, sleep as xa, renderProfileMaterializationIssues as xi, captureBeforeDestroy as xn, abortError as xr, recoverRetainedInteractiveRun as xt, admitFinding as y, promptCacheTokenClasses as ya, promptOnlyProfileMaterialization as yi, acquireSandbox as yn, openSlotGroup as yr, workerInteractiveBindingsDir as yt, meterRuntimeOwnedProviderAttempt as z, promptOptionsFromAgentTurnInput as za, providerAttemptEvidence as zi, FileSpawnJournal as zn, createOpenInferenceFileExporter as zr, readWorkerTraceContext as zt };
28544
28609
 
28545
- //# sourceMappingURL=supervisor-DnoT3-_F.js.map
28610
+ //# sourceMappingURL=supervisor-B1jEhBXU.js.map