@tangle-network/agent-runtime 0.178.0 → 0.180.0

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 (70) hide show
  1. package/README.md +1 -1
  2. package/dist/{activation-BVTPfwty.js → activation-BNd8DB7m.js} +2 -2
  3. package/dist/{activation-BVTPfwty.js.map → activation-BNd8DB7m.js.map} +1 -1
  4. package/dist/agent.d.ts +1 -1
  5. package/dist/agent.js +2 -2
  6. package/dist/{authoring-dQjU4WrH.js → authoring-UTj7_GAd.js} +2 -2
  7. package/dist/{authoring-dQjU4WrH.js.map → authoring-UTj7_GAd.js.map} +1 -1
  8. package/dist/candidate-execution/index.js +2 -2
  9. package/dist/{candidate-execution-fBNUyWyE.js → candidate-execution-7lVEly33.js} +2 -2
  10. package/dist/{candidate-execution-fBNUyWyE.js.map → candidate-execution-7lVEly33.js.map} +1 -1
  11. package/dist/conversation.d.ts +1 -1
  12. package/dist/{coordination-driver-kN2_UQaP.js → coordination-driver-CZdORo2F.js} +2 -2
  13. package/dist/{coordination-driver-kN2_UQaP.js.map → coordination-driver-CZdORo2F.js.map} +1 -1
  14. package/dist/durable.d.ts +2 -2
  15. package/dist/durable.js +1 -1
  16. package/dist/{environment-provider-ykohtWSr.d.ts → environment-provider-BG0Lll6Y.d.ts} +2 -2
  17. package/dist/environment-provider.d.ts +1 -1
  18. package/dist/{graph-CseWAx9q.js → graph-lskY1sph.js} +2 -2
  19. package/dist/{graph-CseWAx9q.js.map → graph-lskY1sph.js.map} +1 -1
  20. package/dist/graph.d.ts +3 -3
  21. package/dist/graph.js +3 -3
  22. package/dist/{improvement-cycle-2QG2XXyK.js → improvement-cycle-CwPaVYsD.js} +3 -3
  23. package/dist/{improvement-cycle-2QG2XXyK.js.map → improvement-cycle-CwPaVYsD.js.map} +1 -1
  24. package/dist/{index-DG48MraH.d.ts → index-C_5ADJEz.d.ts} +2 -2
  25. package/dist/{index-BL5K-qBf.d.ts → index-C_xAZx46.d.ts} +4 -4
  26. package/dist/{index-CKjkp9Uh.d.ts → index-W1pLy7b2.d.ts} +5 -5
  27. package/dist/index.d.ts +7 -7
  28. package/dist/index.js +9 -9
  29. package/dist/intelligence.d.ts +4 -4
  30. package/dist/intelligence.js +3 -3
  31. package/dist/kernel.d.ts +6 -6
  32. package/dist/kernel.js +8 -8
  33. package/dist/{knowledge-Ycq1urlg.js → knowledge-oEjtVYZK.js} +4 -4
  34. package/dist/{knowledge-Ycq1urlg.js.map → knowledge-oEjtVYZK.js.map} +1 -1
  35. package/dist/knowledge.d.ts +1 -1
  36. package/dist/knowledge.js +1 -1
  37. package/dist/{loop-runner-bin-Cv8_0WCC.d.ts → loop-runner-bin-Byrn0ovS.d.ts} +3 -3
  38. package/dist/{loop-runner-bin-DkaB5edJ.js → loop-runner-bin-C6ppaK7_.js} +3 -3
  39. package/dist/{loop-runner-bin-DkaB5edJ.js.map → loop-runner-bin-C6ppaK7_.js.map} +1 -1
  40. package/dist/loop-runner-bin.d.ts +1 -1
  41. package/dist/loop-runner-bin.js +1 -1
  42. package/dist/mcp/bin.js +3 -3
  43. package/dist/mcp/index.d.ts +3 -3
  44. package/dist/mcp/index.js +5 -5
  45. package/dist/{openai-tools-Cv1ZVB-e.js → openai-tools-NgZyaVWA.js} +2 -2
  46. package/dist/{openai-tools-Cv1ZVB-e.js.map → openai-tools-NgZyaVWA.js.map} +1 -1
  47. package/dist/primeintellect/index.d.ts +1 -1
  48. package/dist/{provision-supervisor-B4wOvmpW.js → provision-supervisor-C2qAsvwJ.js} +55 -32
  49. package/dist/provision-supervisor-C2qAsvwJ.js.map +1 -0
  50. package/dist/{redact-CptO2wfX.d.ts → redact-Td4Z49qK.d.ts} +3 -3
  51. package/dist/{runtime-BhU1Bt3y.d.ts → runtime-BcJkcqyq.d.ts} +3 -3
  52. package/dist/{runtime-7W9UYNMN.js → runtime-CFttcekr.js} +8 -8
  53. package/dist/{runtime-7W9UYNMN.js.map → runtime-CFttcekr.js.map} +1 -1
  54. package/dist/{stream-agent-turn-CNyYxEc0.d.ts → stream-agent-turn-BJcmeOjJ.d.ts} +2 -2
  55. package/dist/{structural-rollout-BSdSJ_Lr.js → structural-rollout-wSlpkkiV.js} +2 -2
  56. package/dist/{structural-rollout-BSdSJ_Lr.js.map → structural-rollout-wSlpkkiV.js.map} +1 -1
  57. package/dist/{supervise-DMgM9SYN.js → supervise-CSvq9RSA.js} +3 -3
  58. package/dist/{supervise-DMgM9SYN.js.map → supervise-CSvq9RSA.js.map} +1 -1
  59. package/dist/{supervisor-DyDgxgpl.js → supervisor-wgifgrsR.js} +34 -19
  60. package/dist/{supervisor-DyDgxgpl.js.map → supervisor-wgifgrsR.js.map} +1 -1
  61. package/dist/testing.d.ts +2 -2
  62. package/dist/testing.js +12 -12
  63. package/dist/tui/index.d.ts +1 -1
  64. package/dist/tui/index.js +1 -1
  65. package/dist/{types-C6HjIpJ3.d.ts → types-CuObZjDz.d.ts} +15 -9
  66. package/dist/{workspace-archive-DOZAeeKU.js → workspace-archive-ByonPBl-.js} +3 -1
  67. package/dist/workspace-archive-ByonPBl-.js.map +1 -0
  68. package/package.json +17 -17
  69. package/dist/provision-supervisor-B4wOvmpW.js.map +0 -1
  70. package/dist/workspace-archive-DOZAeeKU.js.map +0 -1
package/dist/testing.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Ho as SuperviseTestOptions, Nn as runGraphWithTestBrain, Wo as superviseWithTestBrain, cr as driverAgent, ds as supervisorAgentWithTestBrain, kn as RunGraphTestOptions, ns as SupervisorAgentTestDeps, sr as DriverAgentOptions } from "./index-CKjkp9Uh.js";
2
- import { bt as ToolLoopChat, yt as ToolLoopCallContext } from "./runtime-BhU1Bt3y.js";
1
+ import { Ho as SuperviseTestOptions, Nn as runGraphWithTestBrain, Wo as superviseWithTestBrain, cr as driverAgent, ds as supervisorAgentWithTestBrain, kn as RunGraphTestOptions, ns as SupervisorAgentTestDeps, sr as DriverAgentOptions } from "./index-W1pLy7b2.js";
2
+ import { bt as ToolLoopChat, yt as ToolLoopCallContext } from "./runtime-BcJkcqyq.js";
3
3
  import { AgentImprovementProposal, AgentProfile, AgentProfileImprovementMeasuredComparison, SandboxSizePreset } from "@tangle-network/agent-interface";
4
4
  //#region src/testing/index.d.ts
5
5
  /** A proposal produced by Runtime's opaque profile-improvement path. */
package/dist/testing.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { ct as immutableCandidateValue, et as parseExactAgentProfile, it as canonicalCandidateDigest$1, q as applyExactAgentProfileDiff } from "./prepare-Tip-2ZoZ.js";
2
- import { f as verifyAgentImprovementProposal } from "./improvement-cycle-2QG2XXyK.js";
3
- import { r as driverAgent } from "./coordination-driver-kN2_UQaP.js";
4
- import { c as supervisorAgentWithTestBrain, r as superviseWithTestBrain } from "./supervise-DMgM9SYN.js";
5
- import { i as runGraphWithTestBrain } from "./graph-CseWAx9q.js";
2
+ import { f as verifyAgentImprovementProposal } from "./improvement-cycle-CwPaVYsD.js";
3
+ import { r as driverAgent } from "./coordination-driver-CZdORo2F.js";
4
+ import { c as supervisorAgentWithTestBrain, r as superviseWithTestBrain } from "./supervise-CSvq9RSA.js";
5
+ import { i as runGraphWithTestBrain } from "./graph-lskY1sph.js";
6
6
  import { SANDBOX_SIZE_PRESET_NAMES } from "@tangle-network/agent-interface";
7
7
  //#region src/testing/fixtures/agent-improvement-proposal.json
8
8
  var agent_improvement_proposal_default = {
9
9
  changedSurfaces: ["prompt"],
10
- digest: "sha256:f23d3533b259c6a1793d4b2bc631145443ff4be7176dba56f3172e00bf7a73bd",
10
+ digest: "sha256:aba609113327ae038eba322476eb5a549a5847f7513ebf51e75f3baba7521f29",
11
11
  evaluation: {
12
12
  "decision": {
13
13
  "contributingChecks": [
@@ -4578,7 +4578,7 @@ var agent_improvement_proposal_default = {
4578
4578
  ],
4579
4579
  "metadata": {
4580
4580
  "fixture": "agent-improvement-proposal",
4581
- "runtimeVersion": "0.178.0"
4581
+ "runtimeVersion": "0.180.0"
4582
4582
  },
4583
4583
  "objectives": [
4584
4584
  {
@@ -4689,8 +4689,8 @@ var agent_improvement_proposal_default = {
4689
4689
  "baselineContentHash": "sha256:5c21ee53e513fc604cb09754e21c392b24a424da0ef37dbf8f1ee4a8a0b08f09",
4690
4690
  "candidateContentHash": "sha256:60fcbb1c728194bd51d7d19cb732d1c3f1881dce7e0a6266b41c8b98cfd65693",
4691
4691
  "kind": "agent-eval-loop",
4692
- "recordDigest": "sha256:6ce3df7bd6877501f6c825ff4f70e45a8a83fc4b654253c3c1e5e4c6ec0ed11e",
4693
- "runId": "agent-runtime-0.178.0-proposal-fixture",
4692
+ "recordDigest": "sha256:85eb1b35cd9d598d5a602b0a0bd6a974ee36cbf55935b9dfb1b20f6871befc4d",
4693
+ "runId": "agent-runtime-0.180.0-proposal-fixture",
4694
4694
  "schema": "agent-candidate-experiment"
4695
4695
  }
4696
4696
  },
@@ -4713,13 +4713,13 @@ var agent_improvement_proposal_default = {
4713
4713
  }],
4714
4714
  kind: "agent-improvement-proposal",
4715
4715
  proposedAt: "2026-07-10T01:00:00.000Z",
4716
- runId: "agent-runtime-0.178.0-proposal-fixture"
4716
+ runId: "agent-runtime-0.180.0-proposal-fixture"
4717
4717
  };
4718
4718
  //#endregion
4719
4719
  //#region src/testing/fixtures/agent-profile-improvement-proposal.json
4720
4720
  var agent_profile_improvement_proposal_default = {
4721
4721
  changedSurfaces: ["prompt", "skills"],
4722
- digest: "sha256:499c21bc6f2781a11c748fee636da5798710ab4bd7296ec50b98b31fe4038ccd",
4722
+ digest: "sha256:54b8ea6131fbd7107fdda8132fc998522eb197c0d5a2959c9132a15a7ee9d6d9",
4723
4723
  evaluation: {
4724
4724
  "decision": {
4725
4725
  "contributingChecks": [
@@ -6353,7 +6353,7 @@ var agent_profile_improvement_proposal_default = {
6353
6353
  ],
6354
6354
  "metadata": {
6355
6355
  "fixture": "agent-profile-improvement-proposal",
6356
- "runtimeVersion": "0.178.0"
6356
+ "runtimeVersion": "0.180.0"
6357
6357
  },
6358
6358
  "objectives": [
6359
6359
  {
@@ -6464,7 +6464,7 @@ var agent_profile_improvement_proposal_default = {
6464
6464
  "baselineContentHash": "sha256:21c495a37c418c10bde64fbaa188beddeed31f1f051ea60a6a6582a9ee0db704",
6465
6465
  "candidateContentHash": "sha256:103f77bc8481601eef1ad5fe6ba84a40dffabc3a44f421f8c8559121edab84e9",
6466
6466
  "kind": "agent-eval-loop",
6467
- "recordDigest": "sha256:78fa93adca59e42cbdd9f17ba877dda09b9f9c12393ece2f3a7637986f042dbe",
6467
+ "recordDigest": "sha256:0add84d6964444d55f79a14be1481eda6686f5efc1cfd53ec840a9759eb97ce7",
6468
6468
  "runId": "profile-improvement-1",
6469
6469
  "schema": "agent-profile-improvement-experiment"
6470
6470
  }
@@ -1,4 +1,4 @@
1
- import { an as provisionSupervisor, in as SupervisorCleanupReceipt, nn as ProvisionSupervisorRequest, rn as ProvisionedSupervisor, tn as ProvisionSupervisorConnection } from "../index-CKjkp9Uh.js";
1
+ import { an as provisionSupervisor, in as SupervisorCleanupReceipt, nn as ProvisionSupervisorRequest, rn as ProvisionedSupervisor, tn as ProvisionSupervisorConnection } from "../index-W1pLy7b2.js";
2
2
  //#region src/tui/top-app.d.ts
3
3
  /**
4
4
  * The interactive side of the supervisor-run TUI: a keypress/mouse loop over the frames
package/dist/tui/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as provisionSupervisor } from "../provision-supervisor-B4wOvmpW.js";
1
+ import { t as provisionSupervisor } from "../provision-supervisor-C2qAsvwJ.js";
2
2
  import { a as renderTopFrameWithLayout, i as renderTopFrame, n as runTopApp, r as loadTopSnapshot, t as renderTopOnce } from "../top-app-DIBApkt1.js";
3
3
  export { loadTopSnapshot, provisionSupervisor, renderTopFrame, renderTopFrameWithLayout, renderTopOnce, runTopApp };
@@ -1,6 +1,6 @@
1
1
  import { J as AgentTaskStatus, U as AgentRuntimeEvent, at as RuntimeStreamEvent, v as LoopTokenUsage, y as LoopTraceEmitter } from "./types-DpdfZoQ3.js";
2
2
  import { l as RuntimeHooks } from "./runtime-hooks-Bj6wJHlH.js";
3
- import { AgentExactRunControlRef, AgentInteractiveSession, AgentInteractiveSessionPromptAcknowledgement, AgentInteractiveSessionPromptCommand, AgentInteractiveSessionRef, AgentInteractiveSessionStart, AgentNativeContextContinuationOptions, AgentNativeContextContinuationResult, AgentProfile, AgentSessionStatus, ChildTaskEvent, HarnessType, InteractionAcknowledgement, InteractionRequest, InteractionResponseCommand, NativeContextBoundaryProof, NativeContextContinuationRequest, NativeContextContinuationTurn, RuntimeEventEnvelope, Sha256Digest } from "@tangle-network/agent-interface";
3
+ import { AgentExactRunControlRef, AgentInteractiveSession, AgentInteractiveSessionPromptAcknowledgement, AgentInteractiveSessionPromptCommand, AgentInteractiveSessionRef, AgentInteractiveSessionStart, AgentNativeContextContinuationOptions, AgentNativeContextContinuationResult, AgentProfile, AgentSessionStatus, ChildTaskEvent, ContextTransferRequest, HarnessType, InteractionAcknowledgement, InteractionRequest, InteractionResponseCommand, NativeContextBoundaryProof, NativeContextContinuationRequest, NativeContextContinuationTurn, RuntimeEventEnvelope, Sha256Digest } from "@tangle-network/agent-interface";
4
4
  import { ControlEvalResult, DefaultVerdict, KnowledgeReadinessReport, KnowledgeRequirement, ToolSpan } from "@tangle-network/agent-eval";
5
5
  import { BackendType } from "@tangle-network/sandbox";
6
6
  import { AgentEnvironment, AgentEnvironmentCapabilities, AgentEnvironmentProvider, AgentTurnInput, AgentTurnResult, CreateAgentEnvironmentInput } from "@tangle-network/agent-interface/environment-provider";
@@ -47,6 +47,11 @@ interface RetainedRunCancelOptions {
47
47
  type NativeContextContinuationInput = NativeContextContinuationTurn & Omit<AgentNativeContextContinuationOptions, 'turn' | 'onAdmission'>;
48
48
  /** Result of one verified same-session continuation. @stable */
49
49
  type NativeContextContinuationExecution = AgentNativeContextContinuationResult;
50
+ /** A fresh retained turn with a canonical, approved portable context request. @stable */
51
+ type RetainedRunTurnInput = Omit<AgentTurnInput, 'contextTransfer'> & {
52
+ readonly turnId: string;
53
+ readonly contextTransfer?: ContextTransferRequest;
54
+ };
50
55
  /**
51
56
  * Admission and terminal result for one same-session continuation.
52
57
  *
@@ -172,9 +177,7 @@ interface RetainedRunStartMaterial {
172
177
  readonly environment: CreateAgentEnvironmentInput & {
173
178
  idempotencyKey: string;
174
179
  };
175
- readonly turn: AgentTurnInput & {
176
- turnId: string;
177
- };
180
+ readonly turn: RetainedRunTurnInput;
178
181
  /**
179
182
  * Explicit dispatch coordinates. When omitted, the runtime mints
180
183
  * deterministic coordinates from `(environment.idempotencyKey, turn.turnId)`
@@ -202,9 +205,7 @@ interface StartRetainedRunInEnvironmentOptions {
202
205
  /** Original environment key. The provider must return the matching retained metadata. */
203
206
  readonly idempotencyKey: string;
204
207
  };
205
- readonly turn: AgentTurnInput & {
206
- turnId: string;
207
- };
208
+ readonly turn: RetainedRunTurnInput;
208
209
  /**
209
210
  * Explicit fresh-session coordinates. When omitted, the runtime mints them
210
211
  * from `(environment.idempotencyKey, turn.turnId)`.
@@ -1168,6 +1169,11 @@ interface Executor<Out> {
1168
1169
  teardown(grace: number | 'brutalKill' | 'infinity'): Promise<{
1169
1170
  destroyed: boolean;
1170
1171
  }>;
1172
+ /**
1173
+ * Optional acknowledgement window for a remote cleanup requested as `'brutalKill'`.
1174
+ * Local executors keep the short default; remote executors may need bounded network time.
1175
+ */
1176
+ teardownTimeoutMs?: number;
1171
1177
  /**
1172
1178
  * The replay source (B1): the content-addressed `outRef` + the materialized output the
1173
1179
  * driver branched on, its verdict, and the conserved spend. Read once, after settle.
@@ -2525,5 +2531,5 @@ interface WidenGate<Out> {
2525
2531
  readonly judgeExempt?: boolean;
2526
2532
  }
2527
2533
  //#endregion
2528
- export { TreeView as $, RetainedRunHandle as $n, sanitizeRuntimeStreamEvent as $t, ProviderModelExecutionEvidence as A, RetainedInteractiveEnvironmentInput as An, RuntimeEventOtelOptions as At, Settled as B, RecoverRetainedRunResult as Bn, padTraceId as Bt, NoWinnerError as C, ScopeProgressInput as Cn, EvalRunsExportResult as Ct, NodeStatus as D, ReconnectRetainedInteractiveRunOptions as Dn, OtelExportConfig as Dt, NodeSnapshot as E, readWorkerProgress as En, OtelAttribute as Et, RootMaterialization as F, NativeContextContinuationHandle as Fn, createOtelExporter as Ft, SpawnRejection as G, RetainedRunAdmission as Gn, RuntimeStreamEventSummary as Gt, SpawnJournal as H, RetainedInteractiveEnvironmentAdmission as Hn, RuntimeEventCollector as Ht, RootProviderModelEvidence as I, NativeContextContinuationInput as In, exportEvalRuns as It, SpendGap as J, RetainedRunCancellation as Jn, SanitizedKnowledgeRequirement as Jt, Spend as K, RetainedRunAdmissionHook as Kn, RuntimeTelemetryOptions as Kt, RootSignal as L, ReconnectRetainedRunOptions as Ln, generateSpanId as Lt, ResumedKeyState as M, RetainedInteractiveStartMaterial as Mn, buildLoopSpanNodes as Mt, ResumedWork as N, StartRetainedInteractiveRunOptions as Nn, buildRuntimeEventOtelSpans as Nt, ProfileMaterializationReceipt as O, RecoverRetainedInteractiveRunOptions as On, OtelExporter as Ot, RootHandle as P, NativeContextContinuationExecution as Pn, createOpenInferenceFileExporter as Pt, SupervisorOpts as Q, RetainedRunEventOptions as Qn, sanitizeKnowledgeReadinessReport as Qt, Runtime as R, RecoverRetainedRunIntentOptions as Rn, loopEventToOtelSpan as Rt, MaterializedModelIdentity as S, ExecutorProgress as Sn, EvalRunsExportConfig as St, NodeId as T, createActivityLog as Tn, LoopSpanNode as Tt, SpawnOpts as U, RetainedInteractiveIntentAdmission as Un, RuntimeStreamEventCollector as Ut, SpawnEvent as V, RetainedInteractiveAdmission as Vn, toOtelAttributes as Vt, SpawnPrior as W, RetainedInteractiveStartedAdmission as Wn, RuntimeStreamEventSink as Wt, SupervisedResult as X, RetainedRunEffect as Xn, createRuntimeStreamEventCollector as Xt, SteerableRootHandle as Y, RetainedRunDispatchedAdmission as Yn, createRuntimeEventCollector as Yt, Supervisor as Z, RetainedRunEnvironmentAdmission as Zn, sanitizeAgentRuntimeEvent as Zt, ExecutorRegistry as _, decodeToolPart as _n, mergeTraceEnv as _t, DefaultVerdict as a, WaitSpec as an, StartRetainedRunOptions as ar, WorkerInteractiveSession as at, Handle as b, ActivityNote as bn, EvalRunEvent as bt, ExecutorAccounting as c, pollFor as cn, WorkerTraceUnavailableReason as ct, ExecutorContext as d, waitUntil as dn, readWorkerTraceContext as dt, PendingWait as en, RetainedRunIntentAdmission as er, UnconfirmedTeardown as et, ExecutorExecutionBinding as f, SessionMessageLike as fn, workerTraceEnv as ft, ExecutorProgressEvent as g, createPushTraceSource as gn, createPropagatingTraceEmitter as gt, ExecutorNodeContext as h, TraceSource as hn, TraceContext as ht, Budget as i, WaitRejection as in, StartRetainedRunInEnvironmentOptions as ir, WidenGate as it, ResultBlobStore as j, RetainedInteractiveRunHandle as jn, buildLoopOtelSpans as jt, ProviderModelAttemptEvidence as k, RetainedInteractiveAdmissionHook as kn, OtelSpan as kt, ExecutorCancellation as l, timerAt as ln, WorkerTraceResolver as lt, ExecutorMaterialization as m, ToolStepInput as mn, workerTraceSeamKey as mt, AgentExecutionRef as n, WaitProbe as nn, RetainedRunSnapshot as nr, UsageEvent as nt, ExecutionBindingReceipt as o, createWaitProbes as on, WorkerInteractiveUnavailableReason as ot, ExecutorFactory as p, SessionTraceBox as pn, workerTraceHeaders as pt, SpendChannel as q, RetainedRunCancelOptions as qn, SanitizedKnowledgeReadinessReport as qt, AgentSpec as r, WaitProbeRegistry as rn, RetainedRunStartMaterial as rr, WaitOpts as rt, Executor as s, isWaitOutcome as sn, WorkerTraceEvidence as st, Agent as t, WaitOutcome as tn, RetainedRunReplayPoint as tr, UnknownMaterializationReason as tt, ExecutorCancellationRequest as u, validateWaitSpec as un, WorkerTraceSeamCarrier as ut, ExecutorResult as v, sandboxSessionTraceSource as vn, readTraceContextFromEnv as vt, NodeExecutionIdentity as w, WorkerProgress as wn, INTELLIGENCE_WIRE_VERSION as wt, MaterializedExecutionIdentity as x, DEFAULT_STALL_AFTER_MS as xn, EvalRunGeneration as xt, ExecutorToolCall as y, ActivityLog as yn, traceContextToEnv as yt, Scope as z, RecoverRetainedRunOptions as zn, padSpanId as zt };
2529
- //# sourceMappingURL=types-C6HjIpJ3.d.ts.map
2534
+ export { TreeView as $, RetainedRunHandle as $n, sanitizeRuntimeStreamEvent as $t, ProviderModelExecutionEvidence as A, RetainedInteractiveEnvironmentInput as An, RuntimeEventOtelOptions as At, Settled as B, RecoverRetainedRunResult as Bn, padTraceId as Bt, NoWinnerError as C, ScopeProgressInput as Cn, EvalRunsExportResult as Ct, NodeStatus as D, ReconnectRetainedInteractiveRunOptions as Dn, OtelExportConfig as Dt, NodeSnapshot as E, readWorkerProgress as En, OtelAttribute as Et, RootMaterialization as F, NativeContextContinuationHandle as Fn, createOtelExporter as Ft, SpawnRejection as G, RetainedRunAdmission as Gn, RuntimeStreamEventSummary as Gt, SpawnJournal as H, RetainedInteractiveEnvironmentAdmission as Hn, RuntimeEventCollector as Ht, RootProviderModelEvidence as I, NativeContextContinuationInput as In, exportEvalRuns as It, SpendGap as J, RetainedRunCancellation as Jn, SanitizedKnowledgeRequirement as Jt, Spend as K, RetainedRunAdmissionHook as Kn, RuntimeTelemetryOptions as Kt, RootSignal as L, ReconnectRetainedRunOptions as Ln, generateSpanId as Lt, ResumedKeyState as M, RetainedInteractiveStartMaterial as Mn, buildLoopSpanNodes as Mt, ResumedWork as N, StartRetainedInteractiveRunOptions as Nn, buildRuntimeEventOtelSpans as Nt, ProfileMaterializationReceipt as O, RecoverRetainedInteractiveRunOptions as On, OtelExporter as Ot, RootHandle as P, NativeContextContinuationExecution as Pn, createOpenInferenceFileExporter as Pt, SupervisorOpts as Q, RetainedRunEventOptions as Qn, sanitizeKnowledgeReadinessReport as Qt, Runtime as R, RecoverRetainedRunIntentOptions as Rn, loopEventToOtelSpan as Rt, MaterializedModelIdentity as S, ExecutorProgress as Sn, EvalRunsExportConfig as St, NodeId as T, createActivityLog as Tn, LoopSpanNode as Tt, SpawnOpts as U, RetainedInteractiveIntentAdmission as Un, RuntimeStreamEventCollector as Ut, SpawnEvent as V, RetainedInteractiveAdmission as Vn, toOtelAttributes as Vt, SpawnPrior as W, RetainedInteractiveStartedAdmission as Wn, RuntimeStreamEventSink as Wt, SupervisedResult as X, RetainedRunEffect as Xn, createRuntimeStreamEventCollector as Xt, SteerableRootHandle as Y, RetainedRunDispatchedAdmission as Yn, createRuntimeEventCollector as Yt, Supervisor as Z, RetainedRunEnvironmentAdmission as Zn, sanitizeAgentRuntimeEvent as Zt, ExecutorRegistry as _, decodeToolPart as _n, mergeTraceEnv as _t, DefaultVerdict as a, WaitSpec as an, StartRetainedRunInEnvironmentOptions as ar, WorkerInteractiveSession as at, Handle as b, ActivityNote as bn, EvalRunEvent as bt, ExecutorAccounting as c, pollFor as cn, WorkerTraceUnavailableReason as ct, ExecutorContext as d, waitUntil as dn, readWorkerTraceContext as dt, PendingWait as en, RetainedRunIntentAdmission as er, UnconfirmedTeardown as et, ExecutorExecutionBinding as f, SessionMessageLike as fn, workerTraceEnv as ft, ExecutorProgressEvent as g, createPushTraceSource as gn, createPropagatingTraceEmitter as gt, ExecutorNodeContext as h, TraceSource as hn, TraceContext as ht, Budget as i, WaitRejection as in, RetainedRunTurnInput as ir, WidenGate as it, ResultBlobStore as j, RetainedInteractiveRunHandle as jn, buildLoopOtelSpans as jt, ProviderModelAttemptEvidence as k, RetainedInteractiveAdmissionHook as kn, OtelSpan as kt, ExecutorCancellation as l, timerAt as ln, WorkerTraceResolver as lt, ExecutorMaterialization as m, ToolStepInput as mn, workerTraceSeamKey as mt, AgentExecutionRef as n, WaitProbe as nn, RetainedRunSnapshot as nr, UsageEvent as nt, ExecutionBindingReceipt as o, createWaitProbes as on, StartRetainedRunOptions as or, WorkerInteractiveUnavailableReason as ot, ExecutorFactory as p, SessionTraceBox as pn, workerTraceHeaders as pt, SpendChannel as q, RetainedRunCancelOptions as qn, SanitizedKnowledgeReadinessReport as qt, AgentSpec as r, WaitProbeRegistry as rn, RetainedRunStartMaterial as rr, WaitOpts as rt, Executor as s, isWaitOutcome as sn, WorkerTraceEvidence as st, Agent as t, WaitOutcome as tn, RetainedRunReplayPoint as tr, UnknownMaterializationReason as tt, ExecutorCancellationRequest as u, validateWaitSpec as un, WorkerTraceSeamCarrier as ut, ExecutorResult as v, sandboxSessionTraceSource as vn, readTraceContextFromEnv as vt, NodeExecutionIdentity as w, WorkerProgress as wn, INTELLIGENCE_WIRE_VERSION as wt, MaterializedExecutionIdentity as x, DEFAULT_STALL_AFTER_MS as xn, EvalRunGeneration as xt, ExecutorToolCall as y, ActivityLog as yn, traceContextToEnv as yt, Scope as z, RecoverRetainedRunOptions as zn, padSpanId as zt };
2535
+ //# sourceMappingURL=types-CuObZjDz.d.ts.map
@@ -335,6 +335,7 @@ async function collectStream(stream, maxBytes, label) {
335
335
  const chunks = [];
336
336
  let totalBytes = 0;
337
337
  for await (const chunk of stream) {
338
+ if (!(chunk instanceof Uint8Array)) throw new Error(`${label} emitted a non-byte chunk`);
338
339
  if (chunk.byteLength > maxBytes - totalBytes) {
339
340
  const error = /* @__PURE__ */ new Error(`${label} exceeds its size limit`);
340
341
  if ("destroy" in stream && typeof stream.destroy === "function") stream.destroy(error);
@@ -351,6 +352,7 @@ async function streamEqualsBytes(stream, expected, maxBytes, label) {
351
352
  let equal = true;
352
353
  let offset = 0;
353
354
  for await (const chunk of stream) {
355
+ if (!(chunk instanceof Uint8Array)) throw new Error(`${label} emitted a non-byte chunk`);
354
356
  if (chunk.byteLength > maxBytes - offset) {
355
357
  const error = /* @__PURE__ */ new Error(`${label} exceeds its size limit`);
356
358
  if ("destroy" in stream && typeof stream.destroy === "function") stream.destroy(error);
@@ -566,4 +568,4 @@ const typedArrayByteLengthGetter = requireTypedArrayGetter("byteLength");
566
568
  //#endregion
567
569
  export { sealAgentCandidateBundle as i, captureAgentCandidateWorkspaceFiles as n, createAgentCandidateWorkspacePort as r, captureAgentCandidateWorkspace as t };
568
570
 
569
- //# sourceMappingURL=workspace-archive-DOZAeeKU.js.map
571
+ //# sourceMappingURL=workspace-archive-ByonPBl-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-archive-ByonPBl-.js","names":["canonicalCandidateDigest","canonicalCandidateDigest","fsConstants"],"sources":["../src/candidate-execution/bundle.ts","../src/candidate-execution/workspace-archive.ts"],"sourcesContent":["import type { AgentCandidateBundle } from '@tangle-network/agent-interface'\nimport { agentCandidateBundleSchema } from '@tangle-network/agent-interface'\n\nimport { canonicalCandidateDigest, immutableCandidateValue, omitTopLevelDigest } from './digest'\n\n/** Exact candidate wire shape before the runtime computes its canonical digest. */\nexport type AgentCandidateBundleInput = Omit<AgentCandidateBundle, 'digest'>\n\n/** Validate and content-address a candidate bundle before it crosses an approval boundary. */\nexport function sealAgentCandidateBundle(input: AgentCandidateBundleInput): AgentCandidateBundle {\n const digest = canonicalCandidateDigest(input)\n const parsed = agentCandidateBundleSchema.parse({ ...input, digest })\n const parsedDigest = canonicalCandidateDigest(omitTopLevelDigest(parsed))\n if (parsedDigest !== digest) {\n throw new Error('candidate bundle changed while validating its canonical wire shape')\n }\n return immutableCandidateValue(parsed)\n}\n","import { randomUUID } from 'node:crypto'\nimport { constants as fsConstants } from 'node:fs'\nimport {\n lstat,\n mkdir,\n mkdtemp,\n open,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n writeFile,\n} from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { dirname, isAbsolute, join, resolve, sep, win32 } from 'node:path'\nimport { isAnyArrayBuffer, isSharedArrayBuffer } from 'node:util/types'\nimport type {\n AgentCandidateCapturedArtifact,\n AgentCandidateWorkspaceSnapshotEvidence,\n} from '@tangle-network/agent-interface'\nimport { extract, type Pack, pack, type Extract as TarExtract } from 'tar-stream'\nimport {\n candidateWorkspaceManifest,\n captureMaterializedWorkspace,\n verifyBytes,\n verifyMaterializedWorkspace,\n} from './artifacts'\nimport {\n canonicalCandidateBytes,\n canonicalCandidateDigest,\n deepFreezeCandidate,\n embeddedCandidateArtifact,\n sha256Bytes,\n} from './digest'\nimport { isWellFormedUnicode } from './exact-object'\nimport {\n assertNoGitIndirection,\n readCandidateGitTreeFiles,\n runCandidateGit,\n} from './git-materialize'\nimport { persistCandidateOutputArtifact } from './output-artifacts'\nimport type {\n AgentCandidateExecutorWorkspaceFile,\n AgentCandidateOutputArtifactPort,\n AgentCandidateWorkspacePort,\n} from './types'\n\nconst archiveKind = 'agent-candidate-workspace-archive' as const\nconst workspaceEntryPrefix = 'workspace/'\nconst repositoryMetadataEntry = 'metadata/repository.json'\nconst repositoryBundleEntry = 'metadata/repository.bundle'\nconst fixedTarTime = new Date(0)\n\nexport interface AgentCandidateWorkspaceArchiveLimits {\n maxArchiveBytes: number\n maxEmbeddedArtifactBytes: number\n maxFiles: number\n maxFileBytes: number\n maxTotalFileBytes: number\n maxPathBytes: number\n maxRepositoryBundleBytes: number\n}\n\nconst defaultLimits: AgentCandidateWorkspaceArchiveLimits = Object.freeze({\n maxArchiveBytes: 512 * 1024 * 1024,\n maxEmbeddedArtifactBytes: 1024 * 1024,\n maxFiles: 50_000,\n maxFileBytes: 128 * 1024 * 1024,\n maxTotalFileBytes: 256 * 1024 * 1024,\n maxPathBytes: 4_096,\n maxRepositoryBundleBytes: 128 * 1024 * 1024,\n})\n\ninterface WorkspaceArchiveRepository {\n headCommit: string\n headTree: string\n bundle: {\n sha256: `sha256:${string}`\n byteLength: number\n bytes: Uint8Array\n }\n}\n\ninterface WorkspaceArchiveRepositoryMetadata {\n kind: typeof archiveKind\n headCommit: string\n headTree: string\n bundle: {\n sha256: `sha256:${string}`\n byteLength: number\n }\n}\n\ninterface DecodedWorkspaceArchive {\n files: Array<{ path: string; mode: number; bytes: Uint8Array }>\n repository?: WorkspaceArchiveRepository\n}\n\nexport interface CaptureAgentCandidateWorkspaceOptions {\n /** Include Git HEAD so task preparation can prove its exact commit and tree. */\n includeRepository?: boolean\n limits?: Partial<AgentCandidateWorkspaceArchiveLimits>\n /** Use the evaluator-owned artifact store when manifest or archive bytes should not be embedded. */\n artifactPersistence?: {\n executionId: string\n outputArtifacts: AgentCandidateOutputArtifactPort\n signal?: AbortSignal\n }\n}\n\nexport interface CreateAgentCandidateWorkspacePortOptions {\n limits?: Partial<AgentCandidateWorkspaceArchiveLimits>\n}\n\nexport interface CapturedAgentCandidateWorkspace {\n readonly snapshot: AgentCandidateWorkspaceSnapshotEvidence\n /** Caller-owned bytes accepted by createAgentCandidateWorkspacePort. */\n readonly archive: Uint8Array\n}\n\n/** Capture one exact regular-file workspace for immutable candidate execution. */\nexport async function captureAgentCandidateWorkspace(\n rootInput: string,\n options: CaptureAgentCandidateWorkspaceOptions = {},\n): Promise<CapturedAgentCandidateWorkspace> {\n const root = resolve(rootInput)\n const limits = workspaceLimits(options.limits)\n const captured = options.includeRepository\n ? await captureRepository(root, limits)\n : await captureMaterializedWorkspace(root, {\n limits: {\n maxFiles: limits.maxFiles,\n maxFileBytes: limits.maxFileBytes,\n maxTotalFileBytes: limits.maxTotalFileBytes,\n },\n })\n assertWorkspaceFilesWithinLimits(captured.files, limits)\n const repository = 'repository' in captured ? captured.repository : undefined\n return captureWorkspaceFiles(captured.files, repository, limits, options.artifactPersistence)\n}\n\n/** Capture detached files returned by a remote executor into the standard archive. */\nexport async function captureAgentCandidateWorkspaceFiles(\n input: readonly AgentCandidateExecutorWorkspaceFile[],\n options: Omit<CaptureAgentCandidateWorkspaceOptions, 'includeRepository'> = {},\n): Promise<CapturedAgentCandidateWorkspace> {\n const limits = workspaceLimits(options.limits)\n return captureWorkspaceFiles(\n normalizeWorkspaceFiles(input, limits),\n undefined,\n limits,\n options.artifactPersistence,\n )\n}\n\nasync function captureWorkspaceFiles(\n files: readonly AgentCandidateExecutorWorkspaceFile[],\n repository: WorkspaceArchiveRepository | undefined,\n limits: AgentCandidateWorkspaceArchiveLimits,\n artifactPersistence: CaptureAgentCandidateWorkspaceOptions['artifactPersistence'],\n): Promise<CapturedAgentCandidateWorkspace> {\n const material = candidateWorkspaceManifest(files)\n const manifest = canonicalCandidateBytes(material)\n const archive = await encodeWorkspaceArchive(files, repository, limits.maxArchiveBytes)\n if (\n !artifactPersistence &&\n (manifest.byteLength > limits.maxEmbeddedArtifactBytes ||\n archive.byteLength > limits.maxEmbeddedArtifactBytes)\n ) {\n throw new Error(\n 'candidate workspace artifacts exceed maxEmbeddedArtifactBytes; artifactPersistence is required',\n )\n }\n const manifestArtifact = await captureWorkspaceArtifact('manifest', manifest, artifactPersistence)\n const archiveArtifact = await captureWorkspaceArtifact('archive', archive, artifactPersistence)\n const snapshot = deepFreezeCandidate({\n kind: 'agent-candidate-workspace-snapshot',\n digest: canonicalCandidateDigest(material),\n material,\n manifest: manifestArtifact,\n archive: archiveArtifact,\n } satisfies AgentCandidateWorkspaceSnapshotEvidence)\n return Object.freeze({ snapshot, archive })\n}\n\nasync function captureWorkspaceArtifact(\n kind: 'manifest' | 'archive',\n bytes: Uint8Array,\n persistence: CaptureAgentCandidateWorkspaceOptions['artifactPersistence'],\n): Promise<AgentCandidateCapturedArtifact> {\n if (!persistence) return embeddedCandidateArtifact(bytes)\n if (!persistence.executionId.trim()) {\n throw new Error('candidate workspace artifact persistence requires an executionId')\n }\n return persistCandidateOutputArtifact(persistence.outputArtifacts, {\n executionId: persistence.executionId,\n purpose: kind === 'manifest' ? 'candidate-workspace-manifest' : 'candidate-workspace-archive',\n bytes,\n ...(persistence.signal ? { signal: persistence.signal } : {}),\n })\n}\n\n/** Create the standard bounded materializer for candidate execution ports. */\nexport function createAgentCandidateWorkspacePort(\n options: CreateAgentCandidateWorkspacePortOptions = {},\n): AgentCandidateWorkspacePort {\n const limits = workspaceLimits(options.limits)\n const port: AgentCandidateWorkspacePort = {\n materialize: async ({ role, snapshot, archive, destination }) => {\n await materializeAgentCandidateWorkspace({\n role,\n snapshot,\n archive,\n destination,\n limits,\n })\n },\n }\n return Object.freeze(port)\n}\n\nasync function materializeAgentCandidateWorkspace(input: {\n role: 'task' | 'candidate' | 'knowledge' | 'memory'\n snapshot: AgentCandidateWorkspaceSnapshotEvidence\n archive: Uint8Array\n destination: string\n limits: AgentCandidateWorkspaceArchiveLimits\n}): Promise<void> {\n verifyBytes(\n input.archive,\n input.snapshot.archive.sha256,\n input.snapshot.archive.byteLength,\n 'candidate workspace archive',\n )\n const decoded = await parseWorkspaceArchive(input.archive, input.limits)\n if (decoded.repository && input.role !== 'task') {\n throw new Error('only task workspaces may carry a Git repository')\n }\n assertArchiveMatchesSnapshot(decoded.files, input.snapshot)\n const destination = resolve(input.destination)\n await prepareEmptyDestination(destination)\n const staging = await mkdtemp(`${destination}.materializing-`)\n try {\n await writeWorkspaceFiles(staging, decoded.files)\n if (decoded.repository) {\n await materializeRepository(decoded.repository, staging)\n }\n await verifyMaterializedWorkspace(staging, input.snapshot.material, {\n ignoredProtectedRootEntries: decoded.repository ? ['.git'] : [],\n })\n await rename(staging, destination)\n } catch (error) {\n await rm(staging, { recursive: true, force: true })\n await rm(destination, { recursive: true, force: true })\n throw error\n }\n}\n\nasync function captureRepository(\n requestedRoot: string,\n limits: AgentCandidateWorkspaceArchiveLimits,\n): Promise<{\n files: Array<{ path: string; mode: number; bytes: Uint8Array }>\n repository: WorkspaceArchiveRepository\n}> {\n const requestedStats = await lstat(requestedRoot)\n if (!requestedStats.isDirectory() || requestedStats.isSymbolicLink()) {\n throw new Error('candidate repository root must be a real directory')\n }\n // Capture the RESOLVED root. The property this guards is that capture starts at one real\n // worktree root with no aliasing, which resolving satisfies directly — rejecting a symlinked\n // prefix outright does not, and makes capture impossible on macOS, where the OS itself hands\n // out temp paths under /var, a symlink to /private/var. Git reports a resolved path, so the\n // worktree-root comparison below needs the resolved form on both sides.\n const root = await realpath(requestedRoot)\n const resolvedStats = await lstat(root)\n if (!resolvedStats.isDirectory() || resolvedStats.isSymbolicLink()) {\n throw new Error('candidate repository root must resolve to a real directory')\n }\n const topLevel = (await runCandidateGit(root, ['rev-parse', '--show-toplevel'])).stdout\n .toString('utf8')\n .trim()\n if ((await realpath(resolve(topLevel))) !== root) {\n throw new Error('candidate repository capture must start at the Git worktree root')\n }\n const gitDir = resolve(\n (await runCandidateGit(root, ['rev-parse', '--absolute-git-dir'])).stdout\n .toString('utf8')\n .trim(),\n )\n if ((await realpath(gitDir)) !== gitDir || gitDir.includes(':')) {\n throw new Error('candidate repository Git object store has an unsupported path')\n }\n await assertNoGitIndirection(root, gitDir, 'candidate repository')\n const headCommit = (await runCandidateGit(root, ['rev-parse', 'HEAD'])).stdout\n .toString('utf8')\n .trim()\n const headTree = (await runCandidateGit(root, ['rev-parse', 'HEAD^{tree}'])).stdout\n .toString('utf8')\n .trim()\n assertGitObjectId(headCommit, 'HEAD')\n assertGitObjectId(headTree, 'HEAD tree')\n if (headCommit.length !== headTree.length) {\n throw new Error('candidate repository HEAD and tree use different object formats')\n }\n const files = await readCandidateGitTreeFiles(root, headTree, {}, limits)\n assertWorkspaceFilesWithinLimits(files, limits)\n const reachableBytesText = (\n await runCandidateGit(root, ['rev-list', '--disk-usage', '--objects', 'HEAD'])\n ).stdout\n .toString('utf8')\n .trim()\n const reachableBytes = Number(reachableBytesText)\n if (!Number.isSafeInteger(reachableBytes) || reachableBytes < 0) {\n throw new Error('candidate repository reachable size is invalid')\n }\n if (reachableBytes > limits.maxRepositoryBundleBytes) {\n throw new Error('candidate repository exceeds maxRepositoryBundleBytes')\n }\n const temporary = await mkdtemp(join(tmpdir(), 'agent-candidate-workspace-bundle-'))\n const bundlePath = join(temporary, `${randomUUID()}.bundle`)\n try {\n await runCandidateGit(root, ['bundle', 'create', bundlePath, 'HEAD'])\n const bundle = Uint8Array.from(await readFile(bundlePath))\n if (bundle.byteLength > limits.maxRepositoryBundleBytes) {\n throw new Error('candidate repository bundle exceeds maxRepositoryBundleBytes')\n }\n return {\n files,\n repository: {\n headCommit,\n headTree,\n bundle: {\n sha256: sha256Bytes(bundle),\n byteLength: bundle.byteLength,\n bytes: bundle,\n },\n },\n }\n } finally {\n await rm(temporary, { recursive: true, force: true })\n }\n}\n\nasync function encodeWorkspaceArchive(\n files: ReadonlyArray<{ path: string; mode: number; bytes: Uint8Array }>,\n repository: WorkspaceArchiveRepository | undefined,\n maxArchiveBytes: number,\n): Promise<Uint8Array> {\n const archive = pack()\n const output = collectStream(archive, maxArchiveBytes, 'candidate workspace archive')\n try {\n await writeWorkspaceArchiveEntries(archive, files, repository)\n archive.finalize()\n return await output\n } catch (error) {\n archive.destroy(error instanceof Error ? error : new Error(String(error)))\n await output.catch(() => undefined)\n throw error\n }\n}\n\nasync function verifyCanonicalWorkspaceArchive(\n files: ReadonlyArray<{ path: string; mode: number; bytes: Uint8Array }>,\n repository: WorkspaceArchiveRepository | undefined,\n expected: Uint8Array,\n maxArchiveBytes: number,\n): Promise<void> {\n const archive = pack()\n const comparison = streamEqualsBytes(\n archive,\n expected,\n maxArchiveBytes,\n 'candidate workspace archive',\n )\n try {\n await writeWorkspaceArchiveEntries(archive, files, repository)\n archive.finalize()\n if (!(await comparison)) throw new Error('candidate workspace tar is not canonical')\n } catch (error) {\n archive.destroy(error instanceof Error ? error : new Error(String(error)))\n await comparison.catch(() => undefined)\n throw error\n }\n}\n\nasync function writeWorkspaceArchiveEntries(\n archive: Pack,\n files: ReadonlyArray<{ path: string; mode: number; bytes: Uint8Array }>,\n repository: WorkspaceArchiveRepository | undefined,\n): Promise<void> {\n for (const file of files) {\n await writeTarEntry(archive, `${workspaceEntryPrefix}${file.path}`, file.mode, file.bytes)\n }\n if (!repository) return\n const metadata = canonicalCandidateBytes({\n kind: archiveKind,\n headCommit: repository.headCommit,\n headTree: repository.headTree,\n bundle: {\n sha256: repository.bundle.sha256,\n byteLength: repository.bundle.byteLength,\n },\n } satisfies WorkspaceArchiveRepositoryMetadata)\n await writeTarEntry(archive, repositoryMetadataEntry, 0o600, metadata)\n await writeTarEntry(archive, repositoryBundleEntry, 0o600, repository.bundle.bytes)\n}\n\nasync function parseWorkspaceArchive(\n bytes: Uint8Array,\n limits: AgentCandidateWorkspaceArchiveLimits,\n): Promise<DecodedWorkspaceArchive> {\n if (bytes.byteLength > limits.maxArchiveBytes) {\n throw new Error('candidate workspace archive exceeds maxArchiveBytes')\n }\n const parser = extract()\n const files: DecodedWorkspaceArchive['files'] = []\n const observedEntryNames = new Set<string>()\n const observedPaths = new Set<string>()\n let totalBytes = 0\n let retainedEntryBytes = 0\n let previousPath: string | undefined\n let repositoryMetadata: WorkspaceArchiveRepositoryMetadata | undefined\n let repositoryBundle: Uint8Array | undefined\n const decoded = (async () => {\n for await (const entry of parser) {\n const name = entry.header.name\n if (\n entry.header.type !== 'file' ||\n typeof name !== 'string' ||\n observedEntryNames.has(name)\n ) {\n throw new Error('candidate workspace tar contains an invalid entry')\n }\n observedEntryNames.add(name)\n if (name.startsWith(workspaceEntryPrefix)) {\n if (files.length >= limits.maxFiles) {\n throw new Error('candidate workspace archive has an invalid file count')\n }\n const path = safeArchivePath(name.slice(workspaceEntryPrefix.length), limits.maxPathBytes)\n if (!isWorkspaceFileMode(entry.header.mode)) {\n throw new Error(`candidate workspace archive has an unsupported mode: ${path}`)\n }\n assertRetainedArchiveSize(bytes.byteLength, retainedEntryBytes, entry.header.size, limits)\n const fileBytes = await readTarEntry(entry, limits.maxFileBytes, `workspace file ${path}`)\n retainedEntryBytes += fileBytes.byteLength\n assertWorkspacePathOrder(\n path,\n previousPath,\n observedPaths,\n 'candidate workspace archive paths must be unique and sorted',\n )\n previousPath = path\n if (fileBytes.byteLength > limits.maxTotalFileBytes - totalBytes) {\n throw new Error('candidate workspace archive exceeds maxTotalFileBytes')\n }\n totalBytes += fileBytes.byteLength\n files.push({ path, mode: entry.header.mode, bytes: fileBytes })\n } else if (name === repositoryMetadataEntry) {\n if (entry.header.mode !== 0o600 || repositoryMetadata) {\n throw new Error('candidate workspace archive repository metadata is invalid')\n }\n assertRetainedArchiveSize(bytes.byteLength, retainedEntryBytes, entry.header.size, limits)\n const metadataBytes = await readTarEntry(\n entry,\n limits.maxPathBytes,\n 'candidate repository metadata',\n )\n retainedEntryBytes += metadataBytes.byteLength\n repositoryMetadata = parseRepositoryMetadata(metadataBytes, limits.maxRepositoryBundleBytes)\n } else if (name === repositoryBundleEntry) {\n if (entry.header.mode !== 0o600 || repositoryBundle) {\n throw new Error('candidate workspace archive repository bundle is invalid')\n }\n assertRetainedArchiveSize(bytes.byteLength, retainedEntryBytes, entry.header.size, limits)\n repositoryBundle = await readTarEntry(\n entry,\n limits.maxRepositoryBundleBytes,\n 'candidate Git bundle',\n )\n retainedEntryBytes += repositoryBundle.byteLength\n } else {\n throw new Error(`candidate workspace tar contains an unsupported entry: ${name}`)\n }\n }\n if (Boolean(repositoryMetadata) !== Boolean(repositoryBundle)) {\n throw new Error('candidate workspace archive repository evidence is incomplete')\n }\n const repository =\n repositoryMetadata && repositoryBundle\n ? repositoryFromTar(repositoryMetadata, repositoryBundle)\n : undefined\n return { files, ...(repository ? { repository } : {}) }\n })()\n parser.end(Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength))\n const result = await decoded\n await verifyCanonicalWorkspaceArchive(\n result.files,\n result.repository,\n bytes,\n limits.maxArchiveBytes,\n )\n return result\n}\n\nfunction assertRetainedArchiveSize(\n archiveBytes: number,\n retainedEntryBytes: number,\n entryBytes: number | undefined,\n limits: AgentCandidateWorkspaceArchiveLimits,\n): void {\n if (\n !Number.isSafeInteger(entryBytes) ||\n entryBytes === undefined ||\n entryBytes < 0 ||\n entryBytes > limits.maxArchiveBytes - archiveBytes - retainedEntryBytes\n ) {\n throw new Error('candidate workspace archive exceeds maxArchiveBytes while decoding')\n }\n}\n\nfunction parseRepositoryMetadata(\n bytes: Uint8Array,\n maxBundleBytes: number,\n): WorkspaceArchiveRepositoryMetadata {\n let value: unknown\n try {\n value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes))\n } catch (error) {\n throw new Error('candidate workspace archive repository metadata is invalid', { cause: error })\n }\n if (\n !isRecord(value) ||\n Object.keys(value).sort().join(',') !== 'bundle,headCommit,headTree,kind' ||\n value.kind !== archiveKind ||\n typeof value.headCommit !== 'string' ||\n typeof value.headTree !== 'string' ||\n !isRecord(value.bundle) ||\n Object.keys(value.bundle).sort().join(',') !== 'byteLength,sha256' ||\n typeof value.bundle.sha256 !== 'string' ||\n !/^sha256:[a-f0-9]{64}$/.test(value.bundle.sha256) ||\n !Number.isSafeInteger(value.bundle.byteLength) ||\n (value.bundle.byteLength as number) <= 0 ||\n (value.bundle.byteLength as number) > maxBundleBytes\n ) {\n throw new Error('candidate workspace archive repository is invalid')\n }\n if (!Buffer.from(canonicalCandidateBytes(value)).equals(Buffer.from(bytes))) {\n throw new Error('candidate workspace archive repository metadata is not canonical')\n }\n assertGitObjectId(value.headCommit, 'repository HEAD')\n assertGitObjectId(value.headTree, 'repository HEAD tree')\n if (value.headCommit.length !== value.headTree.length) {\n throw new Error('candidate repository HEAD and tree use different object formats')\n }\n return {\n kind: archiveKind,\n headCommit: value.headCommit,\n headTree: value.headTree,\n bundle: {\n sha256: value.bundle.sha256 as `sha256:${string}`,\n byteLength: value.bundle.byteLength as number,\n },\n }\n}\n\nfunction repositoryFromTar(\n metadata: WorkspaceArchiveRepositoryMetadata,\n bundle: Uint8Array,\n): WorkspaceArchiveRepository {\n verifyBytes(bundle, metadata.bundle.sha256, metadata.bundle.byteLength, 'candidate Git bundle')\n return {\n headCommit: metadata.headCommit,\n headTree: metadata.headTree,\n bundle: { ...metadata.bundle, bytes: bundle },\n }\n}\n\nasync function writeTarEntry(\n archive: Pack,\n name: string,\n mode: number,\n bytes: Uint8Array,\n): Promise<void> {\n await new Promise<void>((resolveEntry, rejectEntry) => {\n archive.entry(\n {\n name,\n mode,\n uid: 0,\n gid: 0,\n size: bytes.byteLength,\n mtime: fixedTarTime,\n type: 'file',\n uname: '',\n gname: '',\n },\n Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength),\n (error) => (error ? rejectEntry(error) : resolveEntry()),\n )\n })\n}\n\ntype TarEntry = TarExtract extends AsyncIterable<infer Entry> ? Entry : never\n\nasync function readTarEntry(entry: TarEntry, maxBytes: number, label: string): Promise<Uint8Array> {\n const size = entry.header.size\n if (!Number.isSafeInteger(size) || size === undefined || size < 0 || size > maxBytes) {\n throw new Error(`${label} has an invalid tar size`)\n }\n const bytes = await collectStream(entry, maxBytes, label)\n if (bytes.byteLength !== size) throw new Error(`${label} differs from its tar size`)\n return bytes\n}\n\nasync function collectStream(\n stream: AsyncIterable<unknown>,\n maxBytes: number,\n label: string,\n): Promise<Uint8Array> {\n const chunks: Buffer[] = []\n let totalBytes = 0\n for await (const chunk of stream) {\n if (!(chunk instanceof Uint8Array)) {\n throw new Error(`${label} emitted a non-byte chunk`)\n }\n if (chunk.byteLength > maxBytes - totalBytes) {\n const error = new Error(`${label} exceeds its size limit`)\n if ('destroy' in stream && typeof stream.destroy === 'function') stream.destroy(error)\n throw error\n }\n const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)\n chunks.push(bytes)\n totalBytes += bytes.byteLength\n }\n return Buffer.concat(chunks, totalBytes)\n}\n\nasync function streamEqualsBytes(\n stream: AsyncIterable<unknown>,\n expected: Uint8Array,\n maxBytes: number,\n label: string,\n): Promise<boolean> {\n const expectedBuffer = Buffer.from(expected.buffer, expected.byteOffset, expected.byteLength)\n let equal = true\n let offset = 0\n for await (const chunk of stream) {\n if (!(chunk instanceof Uint8Array)) {\n throw new Error(`${label} emitted a non-byte chunk`)\n }\n if (chunk.byteLength > maxBytes - offset) {\n const error = new Error(`${label} exceeds its size limit`)\n if ('destroy' in stream && typeof stream.destroy === 'function') stream.destroy(error)\n throw error\n }\n const observed = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n if (\n offset + observed.byteLength > expectedBuffer.byteLength ||\n !observed.equals(expectedBuffer.subarray(offset, offset + observed.byteLength))\n ) {\n equal = false\n }\n offset += observed.byteLength\n }\n return equal && offset === expectedBuffer.byteLength\n}\n\nasync function prepareEmptyDestination(destination: string): Promise<void> {\n await mkdir(destination, { recursive: true, mode: 0o700 })\n const stats = await lstat(destination)\n if (!stats.isDirectory() || stats.isSymbolicLink()) {\n throw new Error('candidate workspace destination must be a real directory')\n }\n // A symlinked PREFIX is the OS's own doing on macOS, where temp paths live under /var, a\n // symlink to /private/var. What must hold is that the destination itself is a real\n // directory, which both this check and the lstat above require.\n const resolvedDestination = await realpath(destination)\n const resolvedStats = await lstat(resolvedDestination)\n if (!resolvedStats.isDirectory() || resolvedStats.isSymbolicLink()) {\n throw new Error('candidate workspace destination must resolve to a real directory')\n }\n if ((await readdir(destination)).length > 0) {\n throw new Error('candidate workspace destination must be empty')\n }\n}\n\nasync function writeWorkspaceFiles(\n destination: string,\n files: ReadonlyArray<{ path: string; mode: number; bytes: Uint8Array }>,\n): Promise<void> {\n for (const file of files) {\n const path = workspacePath(destination, file.path)\n await mkdir(dirname(path), { recursive: true, mode: 0o700 })\n const descriptor = await open(\n path,\n fsConstants.O_WRONLY |\n fsConstants.O_CREAT |\n fsConstants.O_EXCL |\n (typeof fsConstants.O_NOFOLLOW === 'number' ? fsConstants.O_NOFOLLOW : 0),\n 0o600,\n )\n try {\n await descriptor.writeFile(file.bytes)\n const stats = await descriptor.stat()\n if (!stats.isFile() || stats.nlink !== 1) {\n throw new Error(`candidate workspace file identity changed while writing: ${file.path}`)\n }\n await descriptor.chmod(file.mode)\n } finally {\n await descriptor.close()\n }\n }\n}\n\nasync function materializeRepository(\n repository: WorkspaceArchiveRepository,\n destination: string,\n): Promise<void> {\n const temporary = await mkdtemp(join(tmpdir(), 'agent-candidate-workspace-bundle-'))\n const bundlePath = join(temporary, `${randomUUID()}.bundle`)\n try {\n await writeFile(bundlePath, repository.bundle.bytes, { flag: 'wx', mode: 0o600 })\n await runCandidateGit(destination, [\n 'init',\n '--quiet',\n '--initial-branch=candidate',\n `--object-format=${repository.headCommit.length === 64 ? 'sha256' : 'sha1'}`,\n ])\n await runCandidateGit(destination, ['bundle', 'verify', bundlePath])\n await runCandidateGit(destination, ['bundle', 'unbundle', bundlePath])\n const objectType = (\n await runCandidateGit(destination, ['cat-file', '-t', repository.headCommit])\n ).stdout\n .toString('utf8')\n .trim()\n if (objectType !== 'commit') throw new Error('candidate repository HEAD is not a commit')\n const observedTree = (\n await runCandidateGit(destination, ['rev-parse', `${repository.headCommit}^{tree}`])\n ).stdout\n .toString('utf8')\n .trim()\n if (observedTree !== repository.headTree) {\n throw new Error('candidate repository bundle HEAD tree changed')\n }\n await runCandidateGit(destination, ['update-ref', '--no-deref', 'HEAD', repository.headCommit])\n await runCandidateGit(destination, ['read-tree', repository.headTree])\n const status = (\n await runCandidateGit(destination, ['status', '--porcelain=v1', '--untracked-files=all'])\n ).stdout\n .toString('utf8')\n .trim()\n if (status) throw new Error('candidate repository files do not exactly match HEAD')\n } finally {\n await rm(temporary, { recursive: true, force: true })\n }\n}\n\nfunction assertArchiveMatchesSnapshot(\n files: ReadonlyArray<{ path: string; mode: number; bytes: Uint8Array }>,\n snapshot: AgentCandidateWorkspaceSnapshotEvidence,\n): void {\n const material = candidateWorkspaceManifest(files)\n const materialBytes = canonicalCandidateBytes(material)\n verifyBytes(\n materialBytes,\n snapshot.manifest.sha256,\n snapshot.manifest.byteLength,\n 'candidate workspace manifest',\n )\n if (\n canonicalCandidateDigest(material) !== snapshot.digest ||\n !Buffer.from(materialBytes).equals(Buffer.from(canonicalCandidateBytes(snapshot.material)))\n ) {\n throw new Error('candidate workspace archive does not match its snapshot manifest')\n }\n}\n\nfunction assertWorkspaceFilesWithinLimits(\n files: ReadonlyArray<{ path: string; mode: number; bytes: Uint8Array }>,\n limits: AgentCandidateWorkspaceArchiveLimits,\n): void {\n if (files.length > limits.maxFiles) {\n throw new Error('candidate workspace exceeds maxFiles')\n }\n let totalBytes = 0\n let previousPath: string | undefined\n const observedPaths = new Set<string>()\n for (const file of files) {\n const path = safeArchivePath(file.path, limits.maxPathBytes)\n assertWorkspacePathOrder(\n path,\n previousPath,\n observedPaths,\n 'candidate workspace paths must be unique and sorted',\n )\n previousPath = path\n if (!isWorkspaceFileMode(file.mode)) {\n throw new Error(`candidate workspace file has unsupported mode: ${path}`)\n }\n if (file.bytes.byteLength > limits.maxFileBytes) {\n throw new Error(`candidate workspace file exceeds maxFileBytes: ${path}`)\n }\n totalBytes += file.bytes.byteLength\n if (totalBytes > limits.maxTotalFileBytes) {\n throw new Error('candidate workspace exceeds maxTotalFileBytes')\n }\n }\n}\n\nfunction normalizeWorkspaceFiles(\n input: readonly AgentCandidateExecutorWorkspaceFile[],\n limits: AgentCandidateWorkspaceArchiveLimits,\n): AgentCandidateExecutorWorkspaceFile[] {\n if (!Array.isArray(input)) {\n throw new Error('candidate workspace files must be an array')\n }\n const fileCount = input.length\n if (fileCount > limits.maxFiles) {\n throw new Error('candidate workspace exceeds maxFiles')\n }\n let totalBytes = 0\n const files: AgentCandidateExecutorWorkspaceFile[] = []\n for (let index = 0; index < fileCount; index++) {\n const inputFile = input[index]\n if (!isRecord(inputFile) || Object.keys(inputFile).sort().join(',') !== 'bytes,mode,path') {\n throw new Error(`candidate workspace file ${index} is invalid`)\n }\n const descriptors = Object.getOwnPropertyDescriptors(inputFile)\n if (\n !('value' in (descriptors.path ?? {})) ||\n !('value' in (descriptors.mode ?? {})) ||\n !('value' in (descriptors.bytes ?? {}))\n ) {\n throw new Error(`candidate workspace file ${index} must use fixed values`)\n }\n const path = safeArchivePath(descriptors.path?.value, limits.maxPathBytes)\n const mode = descriptors.mode?.value\n const inputBytes = descriptors.bytes?.value\n if (!isWorkspaceFileMode(mode)) {\n throw new Error(`candidate workspace file has unsupported mode: ${path}`)\n }\n const view = inspectWorkspaceBytes(inputBytes, path)\n if (view.byteLength > limits.maxFileBytes) {\n throw new Error(`candidate workspace file exceeds maxFileBytes: ${path}`)\n }\n if (view.byteLength > limits.maxTotalFileBytes - totalBytes) {\n throw new Error('candidate workspace exceeds maxTotalFileBytes')\n }\n if (view.byteLength > Math.max(0, limits.maxArchiveBytes - 1024)) {\n throw new Error('candidate workspace archive exceeds maxArchiveBytes')\n }\n totalBytes += view.byteLength\n files.push({ path, mode, bytes: detachWorkspaceBytes(view) })\n }\n files.sort((left, right) => (left.path < right.path ? -1 : left.path > right.path ? 1 : 0))\n assertWorkspaceFilesWithinLimits(files, limits)\n return files\n}\n\nfunction isWorkspaceFileMode(value: unknown): value is number {\n return Number.isSafeInteger(value) && (value as number) >= 0 && (value as number) <= 0o777\n}\n\nfunction workspaceLimits(\n overrides: Partial<AgentCandidateWorkspaceArchiveLimits> | undefined,\n): AgentCandidateWorkspaceArchiveLimits {\n const limits = { ...defaultLimits, ...overrides }\n for (const [name, value] of Object.entries(limits)) {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new Error(`candidate workspace ${name} must be a positive safe integer`)\n }\n }\n return Object.freeze(limits)\n}\n\nfunction safeArchivePath(value: unknown, maxPathBytes: number): string {\n if (\n typeof value !== 'string' ||\n !value ||\n !isWellFormedUnicode(value) ||\n Buffer.byteLength(value, 'utf8') > maxPathBytes ||\n isAbsolute(value) ||\n win32.isAbsolute(value) ||\n value.includes('\\\\') ||\n value.includes('\\0') ||\n hasControlCharacter(value) ||\n value.split('/').some((part) => !part || part === '.' || part === '..') ||\n ['.git', '.sidecar'].includes(value.split('/')[0]?.toLowerCase() ?? '')\n ) {\n throw new Error(`candidate workspace archive contains an unsafe path: ${String(value)}`)\n }\n return value\n}\n\nfunction assertWorkspacePathOrder(\n path: string,\n previousPath: string | undefined,\n observedPaths: Set<string>,\n errorMessage: string,\n): void {\n if (previousPath !== undefined && previousPath >= path) throw new Error(errorMessage)\n for (let slash = path.indexOf('/'); slash !== -1; slash = path.indexOf('/', slash + 1)) {\n if (observedPaths.has(path.slice(0, slash))) throw new Error(errorMessage)\n }\n observedPaths.add(path)\n}\n\nfunction inspectWorkspaceBytes(\n input: unknown,\n path: string,\n): { buffer: ArrayBuffer; byteOffset: number; byteLength: number } {\n let buffer: ArrayBufferLike\n let byteOffset: number\n let byteLength: number\n try {\n buffer = typedArrayBufferGetter.call(input as Uint8Array) as ArrayBufferLike\n byteOffset = typedArrayByteOffsetGetter.call(input as Uint8Array) as number\n byteLength = typedArrayByteLengthGetter.call(input as Uint8Array) as number\n } catch {\n throw new Error(`candidate workspace file bytes are invalid: ${path}`)\n }\n if (isSharedArrayBuffer(buffer)) {\n throw new Error(`candidate workspace file uses shared bytes: ${path}`)\n }\n if (!isAnyArrayBuffer(buffer)) {\n throw new Error(`candidate workspace file bytes are invalid: ${path}`)\n }\n return { buffer, byteOffset, byteLength }\n}\n\nfunction detachWorkspaceBytes(input: {\n buffer: ArrayBuffer\n byteOffset: number\n byteLength: number\n}): Uint8Array {\n const { buffer, byteOffset, byteLength } = input\n const copy = new Uint8Array(byteLength)\n Uint8Array.prototype.set.call(copy, new Uint8Array(buffer, byteOffset, byteLength))\n return copy\n}\n\nfunction workspacePath(root: string, relativePath: string): string {\n const path = resolve(root, relativePath)\n if (!path.startsWith(`${root}${sep}`)) {\n throw new Error(`candidate workspace archive path escapes its destination: ${relativePath}`)\n }\n return path\n}\n\nfunction assertGitObjectId(value: string, label: string): void {\n if (!/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(value)) {\n throw new Error(`candidate repository ${label} is not a Git object id`)\n }\n}\n\nfunction hasControlCharacter(value: string): boolean {\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index)\n if (code < 0x20 || code === 0x7f) return true\n }\n return false\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\ntype TypedArrayGetter = (this: Uint8Array) => unknown\n\nfunction requireTypedArrayGetter(name: 'buffer' | 'byteOffset' | 'byteLength'): TypedArrayGetter {\n const typedArrayPrototype = Object.getPrototypeOf(Uint8Array.prototype) as object\n const getter = Object.getOwnPropertyDescriptor(typedArrayPrototype, name)?.get\n if (!getter) throw new Error(`typed array intrinsic ${name} accessor is unavailable`)\n return getter\n}\n\nconst typedArrayBufferGetter = requireTypedArrayGetter('buffer')\nconst typedArrayByteOffsetGetter = requireTypedArrayGetter('byteOffset')\nconst typedArrayByteLengthGetter = requireTypedArrayGetter('byteLength')\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-runtime",
3
- "version": "0.178.0",
3
+ "version": "0.180.0",
4
4
  "description": "Shared task-lifecycle skeleton for agents: a recursive loop kernel for chat turns, one-shot tasks, and multi-attempt loops, with trace capture and eval-gated self-improvement. Domain behavior lives in adapters; scoring and ship-gates in @tangle-network/agent-eval.",
5
5
  "homepage": "https://github.com/tangle-network/agent-runtime#readme",
6
6
  "repository": {
@@ -121,24 +121,24 @@
121
121
  },
122
122
  "devDependencies": {
123
123
  "@arethetypeswrong/cli": "0.18.5",
124
- "@biomejs/biome": "^2.5.5",
124
+ "@biomejs/biome": "^2.5.10",
125
125
  "@modelcontextprotocol/sdk": "1.30.0",
126
- "@tangle-network/agent-eval": ">=0.163.2 <0.171.0",
127
- "@tangle-network/agent-interface": "^1.8.0",
128
- "@tangle-network/sandbox": ">=0.34.0 <0.35.0",
129
- "@types/node": "26.1.1",
126
+ "@tangle-network/agent-eval": ">=0.170.0 <0.171.0",
127
+ "@tangle-network/agent-interface": "^1.9.0",
128
+ "@tangle-network/sandbox": ">=0.34.3 <0.35.0",
129
+ "@types/node": "26.3.0",
130
130
  "@types/tar-stream": "3.1.4",
131
131
  "miniflare": "4.20260722.0",
132
- "oxc-parser": "0.144.0",
132
+ "oxc-parser": "0.147.0",
133
133
  "publint": "0.3.24",
134
134
  "tsdown": "0.22.14",
135
- "tsx": "4.23.1",
135
+ "tsx": "4.23.12",
136
136
  "typedoc": "0.28.20",
137
- "typedoc-plugin-markdown": "4.12.0",
137
+ "typedoc-plugin-markdown": "4.13.0",
138
138
  "typescript": "6.0.3",
139
139
  "typescript-consumer": "npm:typescript@7.0.2",
140
- "vitest": "^4.1.10",
141
- "wrangler": "4.114.0",
140
+ "vitest": "^4.1.11",
141
+ "wrangler": "4.126.0",
142
142
  "yaml": "2.9.0"
143
143
  },
144
144
  "engines": {
@@ -146,9 +146,9 @@
146
146
  },
147
147
  "license": "MIT",
148
148
  "peerDependencies": {
149
- "@tangle-network/agent-eval": ">=0.163.2 <0.171.0",
150
- "@tangle-network/agent-interface": "^1.8.0",
151
- "@tangle-network/sandbox": ">=0.34.0 <0.35.0"
149
+ "@tangle-network/agent-eval": ">=0.170.0 <0.171.0",
150
+ "@tangle-network/agent-interface": "^1.9.0",
151
+ "@tangle-network/sandbox": ">=0.34.3 <0.35.0"
152
152
  },
153
153
  "peerDependenciesMeta": {
154
154
  "@tangle-network/sandbox": {
@@ -156,11 +156,11 @@
156
156
  }
157
157
  },
158
158
  "dependencies": {
159
- "@tangle-network/agent-core": ">=0.9.4 <0.10.0",
160
- "@tangle-network/agent-knowledge": "^10.7.0",
159
+ "@tangle-network/agent-core": ">=0.9.5 <0.10.0",
160
+ "@tangle-network/agent-knowledge": "^10.8.0",
161
161
  "@tangle-network/agent-profile-materialize": ">=0.17.1 <0.18.0",
162
162
  "@tangle-network/agent-trace-contract": "^1.0.2",
163
- "tar-stream": "3.2.0"
163
+ "tar-stream": "3.2.1"
164
164
  },
165
165
  "scripts": {
166
166
  "build": "tsdown",
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision-supervisor-B4wOvmpW.js","names":["abortError"],"sources":["../src/runtime/retained-interactive-control.ts","../src/runtime/supervise/interactive-worker.ts","../src/runtime/supervise/provision-supervisor.ts"],"sourcesContent":["import type { AgentInteractiveSessionControlClaim } from '@tangle-network/agent-interface'\nimport {\n agentInteractiveSessionControlClaimRequestDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type { RetainedInteractiveRunHandle } from './retained-interactive-types'\nimport { abortError } from './retained-run-binding'\n\nconst MAX_GENERATION_CONFLICTS = 8\n\n/** Input for acquiring write authority over one exact interactive process. @stable */\nexport interface ClaimRetainedInteractiveControlOptions {\n readonly handle: RetainedInteractiveRunHandle\n readonly holderId: string\n /** Last known provider generation. Zero discovers the current generation safely. */\n readonly expectedGeneration?: number\n readonly signal?: AbortSignal\n}\n\n/**\n * Acquire provider-issued write authority without reading authority from status.\n *\n * A new coordinator starts at generation zero. If another claim already exists,\n * the provider returns its public generation and this helper retries one new\n * compare-and-swap operation. Every generation has a deterministic operation\n * identifier, so retrying after an ambiguous response cannot create two claims.\n * @stable\n */\nexport async function claimRetainedInteractiveControl(\n options: ClaimRetainedInteractiveControlOptions,\n): Promise<AgentInteractiveSessionControlClaim> {\n const expected = options.expectedGeneration ?? 0\n if (!Number.isSafeInteger(expected) || expected < 0) {\n throw new Error('interactive control expectedGeneration must be a non-negative integer')\n }\n\n let generation = expected\n for (let conflict = 0; conflict <= MAX_GENERATION_CONFLICTS; conflict += 1) {\n if (options.signal?.aborted) throw abortError(options.signal.reason)\n const material = {\n operationId: controlClaimOperationId(options.handle, options.holderId, generation),\n ref: options.handle.ref,\n holderId: options.holderId,\n expectedGeneration: generation,\n }\n const acknowledgement = await options.handle.claimControl(\n {\n ...material,\n requestDigest: agentInteractiveSessionControlClaimRequestDigest(material),\n },\n options.signal === undefined ? undefined : { signal: options.signal },\n )\n if (acknowledgement.status === 'accepted' || acknowledgement.status === 'replayed') {\n const control = acknowledgement.control\n if (control === undefined) {\n throw new Error('provider accepted interactive control without returning its claim')\n }\n if (Date.parse(control.expiresAt) <= Date.now()) {\n throw new Error('provider returned an expired interactive control claim')\n }\n return control\n }\n if (\n acknowledgement.status !== 'conflict' ||\n acknowledgement.conflictReason !== 'generation_mismatch'\n ) {\n throw new Error(\n acknowledgement.status === 'unknown'\n ? 'interactive control claim outcome is unknown; retry the same acquisition'\n : 'interactive control claim operation conflicts with different request material',\n )\n }\n const current = acknowledgement.currentGeneration\n if (current === undefined || current <= generation) {\n throw new Error('provider returned a non-advancing interactive control generation')\n }\n generation = current\n }\n throw new Error('interactive control changed too often to acquire safely')\n}\n\nfunction controlClaimOperationId(\n handle: RetainedInteractiveRunHandle,\n holderId: string,\n expectedGeneration: number,\n): string {\n const digest = canonicalCandidateDigest({\n kind: 'retained-interactive-control-claim.v1',\n ref: handle.ref,\n holderId,\n expectedGeneration,\n })\n return `interactive-claim-${digest.slice('sha256:'.length, 'sha256:'.length + 40)}`\n}\n","/**\n * Runtime-owned worker seam for a provider's native interactive coding-agent process.\n *\n * This adapter composes the retained-interactive lifecycle. It does not create a second stream,\n * replay buffer, session id, or cancellation protocol. The provider owns process state; Scope owns\n * the supervised worker, journal, budget, and local control inbox.\n */\n\nimport { randomUUID } from 'node:crypto'\nimport {\n type AgentInteractiveSessionPromptCommand,\n type AgentInteractiveSessionRef,\n type AgentInteractiveSessionStatus,\n type AgentInteractiveSessionStopAcknowledgement,\n type AgentInteractiveSessionStopCommand,\n type AgentProfile,\n agentInteractiveSessionPromptRequestDigest,\n agentInteractiveSessionStopRequestDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironmentProvider,\n CreateAgentEnvironmentInput,\n} from '@tangle-network/agent-interface/environment-provider'\nimport { contentAddress } from '../../durable/spawn-journal'\nimport type { MakeWorkerAgent, WorkerSpawnContext } from '../../mcp/tools/coordination'\nimport type { RetainedInteractiveRunHandle } from '../retained-interactive-types'\nimport { claimRetainedInteractiveControl, startRetainedInteractiveRun } from '../retained-run'\nimport { retainedCreateMaterial } from '../retained-run-intent'\nimport type { RetainedInteractiveAdmission } from '../retained-run-types'\nimport { abortError, linkAbort } from './abortable'\nimport { executableAgentProfileSnapshot } from './executable-spec'\nimport { createInbox } from './inbox'\nimport {\n type InteractiveAdmissionWriter,\n interactiveAdmissionSeamKey,\n} from './interactive-admission'\nimport {\n attestRuntimeOwnedPendingExecutor,\n finalizeRuntimeOwnedPendingExecutor,\n newExecutionAttemptId,\n} from './materialization'\nimport { concreteProfileModel } from './model-policy'\nimport { detachedSnapshot } from './snapshot'\nimport { taskToPrompt } from './task-prompt'\nimport type {\n Agent,\n AgentSpec,\n Executor,\n ExecutorCancellation,\n ExecutorContext,\n ExecutorResult,\n Runtime,\n Spend,\n UsageEvent,\n WorkerInteractiveSession,\n} from './types'\n\n/** Environment fields supplied to every interactive worker after Runtime adds the exact profile. */\nexport type InteractiveWorkerEnvironment = Omit<\n CreateAgentEnvironmentInput,\n 'profile' | 'idempotencyKey' | 'signal'\n>\n\n/** Native interactive worker output. Provider usage is intentionally not fabricated. */\nexport interface InteractiveWorkerResult {\n readonly provider: string\n readonly environmentId: string\n readonly sessionId: string\n readonly executionId: string\n readonly state: 'exited' | 'unknown'\n readonly ref: AgentInteractiveSessionRef\n readonly reason?: string\n readonly exitCode?: number\n readonly exitSignal?: string\n}\n\n/** Configuration shared by every worker produced by `workerFromInteractiveProvider`. */\nexport interface InteractiveWorkerOptions {\n /** Provider create fields. Runtime supplies `profile`, the two idempotency keys, and `signal`. */\n readonly environment?: InteractiveWorkerEnvironment\n /** Stable environment identity override. Defaults to a digest of the exact worker assignment. */\n readonly environmentIdempotencyKey?: (input: InteractiveWorkerKeyInput) => string\n /** Stable interactive-session identity override. Defaults to a digest of assignment and task. */\n readonly interactiveIdempotencyKey?: (input: InteractiveWorkerKeyInput) => string\n /** Provider holder id used only while the worker sends a steer or stop command. */\n readonly holderId?: string | ((input: InteractiveWorkerKeyInput) => string)\n /** Initial prompt override. The exact worker task is the default prompt. */\n readonly initialPrompt?: string | ((task: unknown, input: InteractiveWorkerKeyInput) => string)\n readonly cwd?: string\n readonly cols?: number\n readonly rows?: number\n /** Runtime tag written into tree snapshots. Defaults to the provider name. */\n readonly runtime?: Runtime\n /** Poll delay used while waiting for the provider's native process to exit. */\n readonly pollIntervalMs?: number\n /** Destroy the provider environment after the process is terminal. Defaults to true. */\n readonly destroyEnvironmentOnTeardown?: boolean\n}\n\n/** Stable input available to key and holder functions. */\nexport interface InteractiveWorkerKeyInput {\n readonly provider: string\n readonly profile: AgentProfile\n readonly context?: WorkerSpawnContext\n readonly task?: unknown\n readonly nodeId?: string\n}\n\n/**\n * Build a `MakeWorkerAgent` that starts one exact provider-owned native TUI per worker.\n *\n * A Scope supplies the durable admission hook and kernel-minted node attempt. The returned worker\n * exposes `interactiveReady`, so Scope writes the exact provider reference before the worker can be\n * attached by a different process. `attachWorker` then reconnects that same reference through the\n * provider's public `get`/interactive contract.\n */\nexport function workerFromInteractiveProvider(\n provider: AgentEnvironmentProvider,\n options: InteractiveWorkerOptions = {},\n): MakeWorkerAgent {\n if (!provider.name.trim())\n throw new Error('workerFromInteractiveProvider: provider.name required')\n if (!provider.get) {\n throw new Error(\n `workerFromInteractiveProvider(${provider.name}): provider.get is required for reconnect`,\n )\n }\n const capturedEnvironment = options.environment\n ? (structuredClone(options.environment) as InteractiveWorkerEnvironment)\n : undefined\n const unscopedNamespace = randomUUID()\n let unscopedOrdinal = 0\n const runtime = options.runtime ?? (provider.name as Runtime)\n\n return (rawProfile, spawnContext) => {\n const profile = executableAgentProfileSnapshot(\n rawProfile,\n `workerFromInteractiveProvider(${provider.name})`,\n )\n const input: InteractiveWorkerKeyInput = {\n provider: provider.name,\n profile,\n ...(spawnContext === undefined ? {} : { context: spawnContext }),\n }\n const assignmentId =\n spawnContext?.assignmentId ?? `unscoped:${unscopedNamespace}:${unscopedOrdinal++}`\n const baseInput = { ...input, nodeId: spawnContext?.parentNodeId }\n const environmentKey = stableKey(\n options.environmentIdempotencyKey?.({ ...baseInput }) ??\n derivedKey('supervised-interactive-environment', {\n provider: provider.name,\n assignmentId,\n parentNodeId: spawnContext?.parentNodeId,\n profile,\n }),\n 'environment idempotency key',\n )\n const name = profile.name ?? 'interactive-worker'\n\n const executorFactory = (\n spec: AgentSpec,\n ctx: ExecutorContext,\n ): Executor<InteractiveWorkerResult> =>\n interactiveExecutor({\n provider,\n profile: spec.profile,\n context: spawnContext,\n environment: capturedEnvironment,\n environmentKey,\n interactiveKey: (task: unknown) =>\n stableKey(\n options.interactiveIdempotencyKey?.({\n ...baseInput,\n task,\n }) ??\n derivedKey('supervised-interactive-session', {\n provider: provider.name,\n assignmentId,\n parentNodeId: spawnContext?.parentNodeId,\n profile: spec.profile,\n task,\n }),\n 'interactive idempotency key',\n ),\n holderId: (task: unknown) => {\n const selected =\n typeof options.holderId === 'function'\n ? options.holderId({ ...baseInput, task })\n : options.holderId\n return stableKey(\n selected ??\n `runtime-interactive-worker:${canonicalCandidateDigest({\n provider: provider.name,\n assignmentId,\n })}`,\n 'interactive holder id',\n )\n },\n initialPrompt: options.initialPrompt,\n cwd: options.cwd,\n cols: options.cols,\n rows: options.rows,\n runtime,\n pollIntervalMs: options.pollIntervalMs,\n destroyEnvironmentOnTeardown: options.destroyEnvironmentOnTeardown,\n executionAttemptId: ctx.node?.attemptId,\n nodeId: ctx.node?.nodeId,\n admission: admissionWriter(ctx, provider.name, ctx.node?.nodeId),\n })\n\n const spec: AgentSpec = {\n profile,\n harness: null,\n executorFactory,\n ...(spawnContext?.execution ? { execution: spawnContext.execution } : {}),\n }\n return {\n name,\n act: async () => {\n throw new Error(\n 'workerFromInteractiveProvider: interactive workers execute through executorSpec',\n )\n },\n executorSpec: spec,\n } as Agent<unknown, InteractiveWorkerResult> & { executorSpec: AgentSpec }\n }\n}\n\ninterface InteractiveExecutorInput {\n readonly provider: AgentEnvironmentProvider\n readonly profile: AgentProfile\n readonly context?: WorkerSpawnContext\n readonly environment?: InteractiveWorkerEnvironment\n readonly environmentKey: string\n readonly interactiveKey: (task: unknown) => string\n readonly holderId: (task: unknown) => string\n readonly initialPrompt?: InteractiveWorkerOptions['initialPrompt']\n readonly cwd?: string\n readonly cols?: number\n readonly rows?: number\n readonly runtime: Runtime\n readonly pollIntervalMs?: number\n readonly destroyEnvironmentOnTeardown?: boolean\n readonly executionAttemptId?: string\n readonly nodeId?: string\n readonly admission: InteractiveAdmissionWriter\n}\n\nfunction interactiveExecutor(input: InteractiveExecutorInput): Executor<InteractiveWorkerResult> {\n const attemptId =\n input.executionAttemptId ?? newExecutionAttemptId(input.nodeId ?? input.environmentKey)\n const localController = new AbortController()\n const inbox = createInbox()\n let handle: RetainedInteractiveRunHandle | undefined\n let environmentId: string | undefined\n let artifact: ExecutorResult<InteractiveWorkerResult> | undefined\n let activeLink: ReturnType<typeof linkAbort> | undefined\n let startPromise: Promise<RetainedInteractiveRunHandle> | undefined\n let executeStarted = false\n let readyResolve!: (session: WorkerInteractiveSession) => void\n const ready = new Promise<WorkerInteractiveSession>((resolve) => {\n readyResolve = resolve\n })\n const stopOperations = new Map<string, Promise<ExecutorCancellation>>()\n const memoryAdmissions = new Map<string, RetainedInteractiveAdmission>()\n let teardownComplete = false\n let teardownPromise: Promise<{ destroyed: boolean }> | undefined\n let flushChain: Promise<void> = Promise.resolve()\n let controlError: unknown\n\n const executor: Executor<InteractiveWorkerResult> = {\n runtime: input.runtime,\n execute(task, signal): AsyncIterable<UsageEvent> {\n if (executeStarted || teardownComplete || teardownPromise !== undefined) {\n throw new Error('workerFromInteractiveProvider: execute() may only be called once')\n }\n executeStarted = true\n startPromise = startInteractive(task, signal)\n return runInteractive(signal)\n },\n deliver(message: unknown): boolean {\n if (teardownComplete || teardownPromise !== undefined) return false\n const accepted = inbox.deliver(message)\n if (accepted) void flushInbox()\n return accepted\n },\n interactive(): WorkerInteractiveSession {\n return handle\n ? { status: 'available', handle }\n : { status: 'unavailable', reason: 'interactive-session-not-started' }\n },\n interactiveReady(): Promise<WorkerInteractiveSession> {\n return ready\n },\n async cancel(request): Promise<ExecutorCancellation> {\n const existing = stopOperations.get(request.operationId)\n if (existing) return existing\n const operation = stopInteractive(request.operationId, request.reason, request.signal)\n const tracked = operation.then((result) => {\n if (result.status === 'unknown' && stopOperations.get(request.operationId) === tracked) {\n stopOperations.delete(request.operationId)\n }\n return result\n })\n stopOperations.set(request.operationId, tracked)\n return tracked\n },\n teardown(grace): Promise<{ destroyed: boolean }> {\n void grace\n if (teardownComplete) return Promise.resolve({ destroyed: true })\n if (teardownPromise !== undefined) return teardownPromise\n const pending = teardownInteractive()\n teardownPromise = pending.then(\n (result) => {\n teardownComplete = true\n return result\n },\n (error) => {\n teardownPromise = undefined\n throw error\n },\n )\n return teardownPromise\n },\n resultArtifact(): ExecutorResult<InteractiveWorkerResult> {\n if (!artifact) {\n throw new Error(\n 'workerFromInteractiveProvider: resultArtifact() read before execution settled',\n )\n }\n return artifact\n },\n }\n\n const declaredEnvironment = input.environment\n ? retainedCreateMaterial({\n ...input.environment,\n profile: input.profile,\n idempotencyKey: input.environmentKey,\n })\n : null\n const profileModel = concreteProfileModel(input.profile)\n const plannedDeclaration = {\n effectiveProfile: input.profile,\n backend: input.provider.name,\n model: profileModel\n ? { status: 'known' as const, id: profileModel }\n : { status: 'unknown' as const, reason: 'provider selected the model' },\n execution: { kind: 'interactive-session', id: input.nodeId ?? input.environmentKey },\n materializer: 'retained-interactive-provider',\n plan: {\n kind: 'retained-interactive-provider',\n provider: input.provider.name,\n environment: declaredEnvironment,\n environmentIdempotencyKey: input.environmentKey,\n destroyEnvironmentOnTeardown: input.destroyEnvironmentOnTeardown !== false,\n },\n }\n attestRuntimeOwnedPendingExecutor(executor, input.runtime, plannedDeclaration, {\n attemptId,\n binding: {\n provider: input.provider.name,\n environmentIdempotencyKey: input.environmentKey,\n nodeId: input.nodeId ?? null,\n },\n descriptor: {\n kind: 'interactive-session',\n provider: input.provider.name,\n transport: 'agent-environment',\n },\n })\n\n async function startInteractive(\n task: unknown,\n signal: AbortSignal,\n ): Promise<RetainedInteractiveRunHandle> {\n try {\n activeLink = linkAbort(signal, localController.signal)\n const initialPrompt =\n typeof input.initialPrompt === 'function'\n ? input.initialPrompt(task, {\n provider: input.provider.name,\n profile: input.profile,\n ...(input.context === undefined ? {} : { context: input.context }),\n task,\n ...(input.nodeId === undefined ? {} : { nodeId: input.nodeId }),\n })\n : (input.initialPrompt ?? taskToPrompt(task))\n if (typeof initialPrompt !== 'string') {\n throw new Error('workerFromInteractiveProvider: initialPrompt must return a string')\n }\n const interactiveIdempotencyKey = input.interactiveKey(task)\n const started = await startRetainedInteractiveRun({\n provider: input.provider,\n environment: {\n ...(input.environment ?? {}),\n profile: input.profile,\n idempotencyKey: input.environmentKey,\n },\n interactiveIdempotencyKey,\n ...(initialPrompt.length === 0 ? {} : { initialPrompt }),\n ...(input.cwd === undefined ? {} : { cwd: input.cwd }),\n ...(input.cols === undefined ? {} : { cols: input.cols }),\n ...(input.rows === undefined ? {} : { rows: input.rows }),\n onAdmission: async (admission) => {\n environmentId =\n admission.phase === 'interactive_environment' ? admission.environmentId : environmentId\n const existing = memoryAdmissions.get(admission.phase)\n if (existing !== undefined) {\n if (canonicalCandidateDigest(existing) !== canonicalCandidateDigest(admission)) {\n throw new Error(\n `interactive admission phase '${admission.phase}' changed across retry`,\n )\n }\n } else {\n memoryAdmissions.set(\n admission.phase,\n detachedSnapshot(admission, 'interactive admission'),\n )\n }\n await input.admission(admission)\n },\n signal: activeLink.signal,\n })\n finalizeRuntimeOwnedPendingExecutor(\n executor,\n {\n ...plannedDeclaration,\n execution: { kind: 'interactive-session', id: started.ref.run.executionId },\n plan: {\n ...plannedDeclaration.plan,\n environmentId: started.ref.run.environmentId,\n interactiveIdempotencyKey,\n },\n },\n {\n attemptId,\n binding: {\n provider: input.provider.name,\n ref: started.ref,\n environmentId: started.ref.run.environmentId,\n },\n descriptor: {\n kind: 'interactive-session',\n provider: input.provider.name,\n transport: 'agent-environment',\n },\n },\n )\n handle = started\n readyResolve({ status: 'available', handle: started })\n void flushInbox()\n return started\n } catch (error) {\n readyResolve({ status: 'unavailable', reason: unavailableReason(error) })\n activeLink?.release()\n throw error\n }\n }\n\n async function* runInteractive(signal: AbortSignal): AsyncIterable<UsageEvent> {\n const startedAt = Date.now()\n try {\n const current = await startPromise\n if (current === undefined) {\n throw new Error('workerFromInteractiveProvider: interactive start did not begin')\n }\n yield { kind: 'iteration' }\n // Native TUI sessions do not expose a complete turn receipt. These zero counters are an\n // observed floor and the explicit false markers keep the run's accounting honest.\n yield { kind: 'tokens', input: 0, output: 0, tokensKnown: false }\n yield { kind: 'cost', usd: 0, usdKnown: false, provenance: 'uncaptured' }\n let status: AgentInteractiveSessionStatus | undefined\n for (;;) {\n if (signal.aborted || localController.signal.aborted) {\n throw abortError(\n signal.aborted ? signal : localController.signal,\n 'interactive execution aborted',\n )\n }\n status = await current.status({ signal: activeLink?.signal })\n await flushChain\n if (controlError !== undefined) throw controlErrorValue(controlError)\n if (status.state !== 'running') break\n await sleep(input.pollIntervalMs ?? 100, activeLink?.signal)\n }\n const finished = status\n const output: InteractiveWorkerResult = {\n provider: input.provider.name,\n environmentId: current.ref.run.environmentId,\n sessionId: current.ref.run.sessionId,\n executionId: current.ref.run.executionId,\n state: finished?.state === 'exited' ? 'exited' : 'unknown',\n ref: current.ref,\n ...(finished?.state === 'exited' && finished.reason ? { reason: finished.reason } : {}),\n ...(finished?.state === 'exited' && finished.exitCode !== undefined\n ? { exitCode: finished.exitCode }\n : {}),\n ...(finished?.state === 'exited' && finished.exitSignal !== undefined\n ? { exitSignal: finished.exitSignal }\n : {}),\n }\n const spent: Spend = {\n iterations: 1,\n tokens: { input: 0, output: 0 },\n tokensKnown: false,\n usd: 0,\n usdKnown: false,\n ms: Date.now() - startedAt,\n }\n artifact = {\n outRef: contentAddress(output),\n out: output,\n spent,\n }\n } finally {\n activeLink?.release()\n }\n }\n\n async function flushInbox(): Promise<void> {\n flushChain = flushChain.then(async () => {\n try {\n if (!handle) return\n const messages = inbox.drain()\n if (messages.length === 0) return\n const prompt = inbox.fold(messages)\n const operationId = `interactive-prompt-${canonicalCandidateDigest({\n ref: handle.ref,\n prompt,\n }).slice('sha256:'.length)}`\n const control = await claimRetainedInteractiveControl({\n handle,\n holderId: input.holderId(undefined),\n })\n const material = {\n operationId,\n ref: handle.ref,\n control,\n prompt,\n }\n const command: AgentInteractiveSessionPromptCommand = {\n ...material,\n requestDigest: agentInteractiveSessionPromptRequestDigest(material),\n }\n await handle.sendPrompt(command)\n } catch (error) {\n controlError ??= error\n }\n })\n await flushChain\n }\n\n async function stopInteractive(\n operationId: string,\n reason?: string,\n signal?: AbortSignal,\n ): Promise<ExecutorCancellation> {\n const observedAt = new Date().toISOString()\n if (!handle) {\n localController.abort(reason ?? 'interactive cancellation requested')\n return {\n status: 'unknown',\n effect: 'cancel_requested',\n observedAt,\n detail: 'interactive process has not published a provider reference',\n }\n }\n try {\n const control = await claimRetainedInteractiveControl({\n handle,\n holderId: input.holderId(undefined),\n signal,\n })\n const material = { operationId, ref: handle.ref, control }\n const command: AgentInteractiveSessionStopCommand = {\n ...material,\n requestDigest: agentInteractiveSessionStopRequestDigest(material),\n }\n const acknowledgement = await handle.stop(\n command,\n signal === undefined ? undefined : { signal },\n )\n localController.abort(reason ?? 'interactive cancellation requested')\n return cancellationFromAcknowledgement(acknowledgement, observedAt)\n } catch (error) {\n localController.abort(reason ?? 'interactive cancellation requested')\n return {\n status: 'unknown',\n effect: 'cancel_requested',\n observedAt,\n detail: error instanceof Error ? error.message : String(error),\n evidence: { operationId },\n }\n }\n }\n\n async function teardownInteractive(): Promise<{ destroyed: boolean }> {\n localController.abort('interactive worker teardown')\n activeLink?.release()\n await startPromise?.catch(() => undefined)\n if (handle) {\n const status = await safeStatus(handle)\n if (status?.state === 'running') {\n const operationId = `interactive-teardown-${canonicalCandidateDigest(handle.ref).slice(\n 'sha256:'.length,\n )}`\n const cancellation = await stopInteractive(operationId, 'interactive worker teardown')\n if (cancellation.status === 'rejected' || cancellation.status === 'unknown') {\n throw new Error(cancellation.detail ?? 'interactive teardown was not acknowledged')\n }\n }\n }\n await destroyEnvironment()\n return { destroyed: true }\n }\n\n async function destroyEnvironment(): Promise<void> {\n if (input.destroyEnvironmentOnTeardown === false) return\n if (!environmentId || !input.provider.get) return\n const environment = await input.provider.get(environmentId)\n await environment?.destroy?.()\n }\n\n return executor\n}\n\nfunction admissionWriter(\n ctx: ExecutorContext,\n provider: string,\n workerId: string | undefined,\n): InteractiveAdmissionWriter {\n const candidate = ctx.seams[interactiveAdmissionSeamKey]\n if (typeof candidate === 'function') {\n return async (admission) => {\n await (candidate as (value: RetainedInteractiveAdmission) => Promise<void>)(admission)\n }\n }\n // In-memory runs still need a real hook because retained-start refuses an omitted hook. The\n // durable Scope path always supplies the Runtime-owned writer above; this fallback is explicit\n // and process-local, never mistaken for restart evidence.\n const records = new Map<string, RetainedInteractiveAdmission>()\n return async (admission) => {\n const prior = records.get(admission.phase)\n if (prior && canonicalCandidateDigest(prior) !== canonicalCandidateDigest(admission)) {\n throw new Error(\n `worker ${workerId ?? '(unscoped)'} provider ${provider} admission changed in memory`,\n )\n }\n records.set(admission.phase, detachedSnapshot(admission, 'interactive admission'))\n }\n}\n\nfunction derivedKey(kind: string, value: unknown): string {\n return `${kind}-${canonicalCandidateDigest(value).slice('sha256:'.length)}`\n}\n\nfunction stableKey(value: string, label: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string`)\n }\n const key = value.trim()\n if (key.length > 256) throw new Error(`${label} must not exceed 256 bytes`)\n return key\n}\n\nfunction unavailableReason(\n error: unknown,\n): 'provider-has-no-interactive-contract' | 'interactive-binding-stale' {\n const message = error instanceof Error ? error.message : String(error)\n return message.includes('interactive') || message.includes('Interactive')\n ? 'provider-has-no-interactive-contract'\n : 'interactive-binding-stale'\n}\n\nfunction cancellationFromAcknowledgement(\n acknowledgement: AgentInteractiveSessionStopAcknowledgement,\n observedAt: string,\n): ExecutorCancellation {\n const status =\n acknowledgement.status === 'accepted' || acknowledgement.status === 'replayed'\n ? 'accepted'\n : acknowledgement.status === 'conflict'\n ? 'rejected'\n : 'unknown'\n const effect =\n acknowledgement.effect === 'stopped'\n ? 'cancelled'\n : acknowledgement.effect === 'not_live'\n ? 'not_live'\n : acknowledgement.effect === 'stop_requested'\n ? 'cancel_requested'\n : 'unknown'\n return {\n status,\n effect,\n observedAt,\n ...(acknowledgement.message === undefined ? {} : { detail: acknowledgement.message }),\n evidence: {\n operationId: acknowledgement.operationId,\n requestDigest: acknowledgement.requestDigest,\n providerStatus: acknowledgement.status,\n providerEffect: acknowledgement.effect,\n },\n }\n}\n\nfunction controlErrorValue(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error))\n}\n\nasync function safeStatus(\n handle: RetainedInteractiveRunHandle,\n): Promise<AgentInteractiveSessionStatus | undefined> {\n try {\n return await handle.status()\n } catch {\n return undefined\n }\n}\n\nasync function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n await new Promise<void>((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let settled = false\n const onAbort = (): void => {\n if (settled) return\n settled = true\n clearTimeout(timer)\n signal?.removeEventListener('abort', onAbort)\n resolve()\n }\n const timer = setTimeout(\n () => {\n if (settled) return\n settled = true\n signal?.removeEventListener('abort', onAbort)\n resolve()\n },\n Math.max(0, ms),\n )\n signal?.addEventListener('abort', onAbort, { once: true })\n })\n}\n","/**\n * Public one-call composition for a durable Runtime supervisor proof run.\n *\n * This is intentionally a thin owner of existing Runtime primitives. The supervisor owns the\n * root abort channel and join barrier, Scope owns worker admission and lifecycle, and the provider\n * owns the environment and interactive process. External clients receive identifiers and opaque\n * handles; they do not receive a second supervisor protocol or a copy of provider state.\n *\n * @experimental\n */\n\nimport { randomUUID } from 'node:crypto'\nimport { mkdirSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, resolve } from 'node:path'\nimport {\n type AgentProfile,\n agentProfileSchema,\n canonicalAgentProfileDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironmentCapabilities,\n AgentEnvironmentProvider,\n} from '@tangle-network/agent-interface/environment-provider'\nimport type { McpToolDescriptor } from '../../mcp/server'\nimport { createCoordinationTools } from '../../mcp/tools/coordination'\nimport { sandboxClientAsProvider } from '../environment-provider'\nimport type { SandboxClient } from '../types'\nimport { createCancelAcknowledger, createSteerAcknowledger } from './coordination-driver'\nimport { writeAtomicDurableFile } from './durable-file'\nimport {\n type InteractiveWorkerEnvironment,\n workerFromInteractiveProvider,\n} from './interactive-worker'\nimport { createFileRunContext } from './run-context'\nimport { supervisorRunDir } from './run-layout'\nimport { createRootHandle, createSupervisor } from './supervisor'\nimport type { Agent, Budget, Scope, SpawnEvent, SupervisedResult } from './types'\nimport { readWorkerInteractiveBinding } from './worker-interactive'\n\nconst DEFAULT_TIMEOUT_MS = 60_000\nconst DEFAULT_POLL_MS = 25\nconst ROOT_MAX_ITERATIONS = 100\nconst ROOT_MAX_TOKENS = 100_000\nconst WORKER_MAX_ITERATIONS = 25\nconst WORKER_MAX_TOKENS = 25_000\n\n/** Caller-supplied provider or Sandbox SDK connection for one supervisor run. */\nexport interface ProvisionSupervisorConnection {\n /** A fully constructed provider. This is the preferred programmatic seam and is testable. */\n readonly provider?: AgentEnvironmentProvider\n /** A Sandbox SDK-compatible client. Runtime adapts it to the public provider contract. */\n readonly client?: SandboxClient\n /** Alias for `client`, accepted so callers can pass their existing connection object. */\n readonly sandboxClient?: SandboxClient\n /** Sandbox API endpoint used only when Runtime constructs the SDK client. */\n readonly endpoint?: string\n /** Transient Sandbox API key used only when Runtime constructs the SDK client. */\n readonly apiKey?: string\n /** Connection kind is descriptive only and does not select a hidden implementation. */\n readonly kind?: string\n}\n\n/** Input to the public Runtime supervisor provisioner. */\nexport interface ProvisionSupervisorRequest {\n readonly invocationId: string\n /** Caller-owned task assigned to the first interactive worker. */\n readonly task: string\n /** Canonical profile assigned to the first interactive worker. */\n readonly profile: AgentProfile\n /** Generic provider create fields forwarded to the interactive worker. */\n readonly workerEnvironment?: InteractiveWorkerEnvironment\n /** Root directory for Runtime-owned `.agent/supervisor` state. */\n readonly workspaceDir?: string\n /** Maximum wall-clock time for the complete supervisor lifecycle, including cleanup. */\n readonly timeoutMs?: number\n /** Poll cadence for lifecycle/control readiness. */\n readonly pollMs?: number\n /** Explicit provider, client, or endpoint and API key for one provider connection. */\n readonly connection: ProvisionSupervisorConnection\n}\n\n/** Exact owner-scoped cleanup receipt returned after Runtime releases the run resources. */\nexport interface SupervisorCleanupReceipt {\n readonly status: 'completed'\n readonly rootDir: string\n readonly supervisorId: string\n readonly workerId: string\n readonly supervisorStatus: string\n readonly workerStatus: 'running' | 'done' | 'down' | 'cancelled'\n readonly resourcesReleased: true\n readonly remainingResources: readonly []\n}\n\n/** Handles for one Runtime-owned supervisor and its first interactive worker. */\nexport interface ProvisionedSupervisor {\n readonly rootDir: string\n readonly supervisorId: string\n readonly workerId: string\n /** Provider source for `attachWorker`; omitted only when resolution did not produce one. */\n readonly providers?: AgentEnvironmentProvider\n /** Capability-derived terminal takeover requirement. */\n readonly terminalTakeover: 'required' | 'unsupported' | 'unspecified'\n cleanup(): Promise<SupervisorCleanupReceipt>\n}\n\nclass SupervisorProvisionUnavailableError extends Error {\n readonly unavailable = true as const\n\n constructor(message: string, cause?: unknown) {\n super(message, cause === undefined ? undefined : { cause })\n this.name = 'SupervisorProvisionUnavailableError'\n }\n}\n\ninterface MutableState {\n readonly id: string\n status: string\n readonly task: string\n readonly workspaceDir: string\n readonly budget: number\n readonly workerModel?: string\n readonly startedAt: string\n completedAt?: string\n}\n\ninterface Deferred<T> {\n readonly promise: Promise<T>\n resolve(value: T): void\n reject(error: unknown): void\n readonly settled: () => boolean\n}\n\n/**\n * Provision one real provider-backed worker and keep its owning manager alive for controls.\n *\n * The root manager does not use a model. It runs the same coordination tools used by a driver in a\n * small deterministic loop, so durable steer and cancel requests are acknowledged by the owning\n * Runtime turn loop and never by a test-only shortcut. The caller owns profile, task, and provider\n * connection selection; Runtime does not infer them from process environment variables.\n */\nexport async function provisionSupervisor(\n request: ProvisionSupervisorRequest,\n): Promise<ProvisionedSupervisor> {\n const input = normalizeRequest(request)\n const provider = await resolveProvider(input)\n const capabilities = await readCapabilities(provider)\n const terminalTakeover = terminalCapability(capabilities)\n const profile = input.profile\n const rootDir = resolve(input.workspaceDir ?? makeWorkspaceDir())\n mkdirSync(rootDir, { recursive: true })\n const supervisorId = supervisorIdFor(input.invocationId)\n const eventDir = supervisorRunDir(rootDir, supervisorId)\n const statePath = join(eventDir, 'state.json')\n mkdirSync(dirname(eventDir), { recursive: true })\n try {\n // The run directory is the cross-process invocation lock. A non-recursive mkdir closes the\n // duplicate-start race before any journal or provider resource is created.\n mkdirSync(eventDir)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw unavailable(\n `Runtime supervisor '${supervisorId}' already exists at '${eventDir}'; use a new invocationId`,\n )\n }\n throw error\n }\n\n const context = createFileRunContext(eventDir)\n const startedAtMs = Date.now()\n const state: MutableState = {\n id: supervisorId,\n status: 'running',\n task: input.task,\n workspaceDir: rootDir,\n budget: ROOT_MAX_TOKENS,\n ...(profile.model?.default === undefined ? {} : { workerModel: profile.model.default }),\n startedAt: new Date(startedAtMs).toISOString(),\n }\n writeState(statePath, state)\n\n const rootHandle = createRootHandle<unknown>()\n const supervisor = createSupervisor<unknown, unknown>()\n supervisor.attach(rootHandle)\n const workerSpawned = deferred<string>()\n const workerRunning = deferred<void>()\n const workerProfile = profile\n const workerEnvironment = {\n ...(input.workerEnvironment ?? {}),\n metadata: {\n ...(input.workerEnvironment?.metadata ?? {}),\n runtime: 'agent-runtime',\n invocationId: input.invocationId,\n },\n name: input.workerEnvironment?.name ?? `runtime-${supervisorId}`,\n }\n const makeWorkerAgent = workerFromInteractiveProvider(provider, {\n environment: workerEnvironment,\n pollIntervalMs: input.pollMs,\n destroyEnvironmentOnTeardown: true,\n })\n\n const rootAgent: Agent<unknown, unknown> = {\n name: 'runtime-supervisor-root',\n async act(_task: unknown, scope: Scope<unknown>): Promise<unknown> {\n const coord = createCoordinationTools({\n scope,\n blobs: context.blobs,\n makeWorkerAgent,\n perWorker: workerBudget(),\n })\n await coord.ready()\n const spawn = findTool(coord.tools, 'spawn_agent')\n const result = await spawn.handler({\n profile: workerProfile,\n task: input.task,\n label: 'interactive-worker',\n })\n const childId = workerIdFromSpawn(result)\n workerSpawned.resolve(childId)\n\n for (;;) {\n const child = scope.view.nodes.find((node) => node.id === childId)\n if (child?.status === 'running') break\n if (\n child === undefined ||\n child.status === 'done' ||\n child.status === 'failed' ||\n child.status === 'cancelled'\n ) {\n throw new Error(`Runtime supervisor worker '${childId}' ended before becoming live`)\n }\n await delay(input.pollMs)\n }\n workerRunning.resolve()\n\n const steerAcknowledger = createSteerAcknowledger({\n dir: eventDir,\n coord,\n now: Date.now,\n ownerId: scope.view.root,\n })\n const cancelAcknowledger = createCancelAcknowledger({\n dir: eventDir,\n coord,\n scope,\n now: Date.now,\n ownerId: scope.view.root,\n controlScope: 'run',\n })\n const settled = scope.next()\n try {\n while (true) {\n await steerAcknowledger.pass('turn')\n cancelAcknowledger.pass('turn')\n const outcome = await raceSettlement(settled, input.pollMs, scope.signal)\n if (outcome !== undefined && outcome !== null) {\n await coord.drainResolved()\n await steerAcknowledger.pass('final')\n cancelAcknowledger.pass('final')\n return outcome.kind === 'done' ? outcome.out : undefined\n }\n }\n } finally {\n // The final pass closes requests that landed after the last turn. It is idempotent with the\n // normal path and prevents an admitted operation from remaining open after root teardown.\n await steerAcknowledger.pass('final')\n cancelAcknowledger.pass('final')\n cancelAcknowledger.finish()\n }\n },\n }\n const runBudget = rootBudget(input.timeoutMs)\n let runResult: SupervisedResult<unknown> | undefined\n let runError: unknown\n let runSettled = false\n const runPromise = supervisor\n .run(rootAgent, input.task, {\n budget: runBudget,\n rootIdentity: {\n profileDigest: canonicalAgentProfileDigest(profile),\n taskDigest: canonicalCandidateDigest(input.task),\n },\n runId: supervisorId,\n ...context,\n interactiveBindingDir: eventDir,\n maxDepth: 1,\n maxLiveWorkers: 1,\n })\n .then(\n (result) => {\n runResult = result\n runSettled = true\n updateStateFromResult(state, result)\n writeState(statePath, state)\n return result\n },\n (error) => {\n runError = error\n runSettled = true\n state.status = 'down'\n state.completedAt = new Date().toISOString()\n writeState(statePath, state)\n throw error\n },\n )\n void runPromise.catch(() => undefined)\n\n let workerId: string\n try {\n workerId = await waitForWorkerSpawn(workerSpawned.promise, runPromise, input.timeoutMs)\n await waitForWorkerRunning(workerRunning.promise, runPromise, input.timeoutMs)\n if (terminalTakeover === 'required') {\n await waitForInteractiveBinding(eventDir, workerId, runPromise, input.timeoutMs, input.pollMs)\n }\n } catch (error) {\n if (!runSettled) {\n try {\n rootHandle.abort('supervisor provisioning failed')\n } catch {\n // The supervisor may have released the handle between the state read and this abort.\n }\n }\n await runPromise.catch(() => undefined)\n throw error\n }\n\n let cleanupPromise: Promise<SupervisorCleanupReceipt> | undefined\n const cleanup = async (): Promise<SupervisorCleanupReceipt> => {\n cleanupPromise ??= (async () => {\n if (!runSettled) {\n try {\n rootHandle.abort('supervisor cleanup')\n } catch {\n // A concurrent run completion already released the handle.\n }\n }\n const result = await runPromise.catch((error) => {\n runError = error\n return undefined\n })\n if (result !== undefined) runResult = result\n if (runError !== undefined) throw runError\n const finalEvents = await waitForWorkerTerminal(\n context.journal,\n supervisorId,\n workerId,\n input.timeoutMs,\n input.pollMs,\n )\n const workerStatus = workerStatusFromEvents(finalEvents, workerId)\n if (workerStatus === 'running') {\n throw new Error(`Runtime supervisor worker '${workerId}' did not reach a terminal state`)\n }\n if (runResult?.teardownUnconfirmed?.length) {\n throw new Error(\n `Runtime supervisor cleanup could not confirm ${runResult.teardownUnconfirmed.length} resource(s) released`,\n )\n }\n const supervisorStatus = state.status\n state.completedAt ??= new Date().toISOString()\n writeState(statePath, state)\n return Object.freeze({\n status: 'completed' as const,\n rootDir,\n supervisorId,\n workerId,\n supervisorStatus,\n workerStatus,\n resourcesReleased: true as const,\n remainingResources: Object.freeze([]) as readonly [],\n })\n })()\n return cleanupPromise\n }\n\n return Object.freeze({\n rootDir,\n supervisorId,\n workerId,\n providers: provider,\n terminalTakeover,\n cleanup,\n })\n}\n\nfunction normalizeRequest(request: ProvisionSupervisorRequest): ProvisionSupervisorRequest & {\n readonly invocationId: string\n readonly task: string\n readonly timeoutMs: number\n readonly pollMs: number\n readonly profile: AgentProfile\n readonly connection: ProvisionSupervisorConnection\n} {\n const invocationId = request.invocationId.trim()\n if (!invocationId) throw new SupervisorProvisionUnavailableError('invocationId is required')\n const task = request.task.trim()\n if (!task) throw new SupervisorProvisionUnavailableError('task is required')\n const profile = resolveProfile(request.profile)\n if (request.connection === undefined) {\n throw new SupervisorProvisionUnavailableError('provider connection is required')\n }\n const timeoutMs = positiveNumber(request.timeoutMs ?? DEFAULT_TIMEOUT_MS, 'timeoutMs')\n const pollMs = positiveNumber(request.pollMs ?? DEFAULT_POLL_MS, 'pollMs')\n return { ...request, invocationId, task, timeoutMs, pollMs, profile }\n}\n\nfunction positiveNumber(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new SupervisorProvisionUnavailableError(`${name} must be a positive safe integer`)\n }\n return value\n}\n\nfunction makeWorkspaceDir(): string {\n return join(tmpdir(), `agent-runtime-supervisor-${randomUUID()}`)\n}\n\nfunction supervisorIdFor(invocationId: string): string {\n const digest = canonicalCandidateDigest({ kind: 'runtime-supervisor', invocationId })\n return `runtime-supervisor-${digest.slice('sha256:'.length)}`\n}\n\n/** The root deadline covers the complete supervisor lifecycle from run start through cleanup. */\nfunction rootBudget(timeoutMs: number): Budget {\n return {\n maxIterations: ROOT_MAX_ITERATIONS,\n maxTokens: ROOT_MAX_TOKENS,\n deadlineMs: timeoutMs,\n }\n}\n\nfunction workerBudget(): Budget {\n return {\n maxIterations: WORKER_MAX_ITERATIONS,\n maxTokens: WORKER_MAX_TOKENS,\n }\n}\n\nfunction resolveProfile(profile: AgentProfile): AgentProfile {\n const parsed = agentProfileSchema.safeParse(profile)\n if (!parsed.success) {\n throw unavailable(\n `Runtime supervisor profile is invalid: ${parsed.error.issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join('; ')}`,\n )\n }\n return parsed.data\n}\n\nasync function resolveProvider(\n request: ProvisionSupervisorRequest,\n): Promise<AgentEnvironmentProvider> {\n const connection = request.connection\n if (connection === undefined) {\n throw unavailable('Runtime supervisor provider connection is required')\n }\n if (connection?.provider !== undefined) return requireReconnectProvider(connection.provider)\n const client = connection?.client ?? connection?.sandboxClient\n if (client !== undefined) {\n return requireReconnectProvider(sandboxClientAsProvider(client))\n }\n const apiKey = connection.apiKey?.trim()\n const endpoint = connection.endpoint?.trim()\n if (!apiKey || !endpoint) {\n throw unavailable(\n 'Runtime supervisor needs a provider/client or both connection.endpoint and connection.apiKey',\n )\n }\n let module: typeof import('@tangle-network/sandbox')\n try {\n module = await import('@tangle-network/sandbox')\n } catch (error) {\n throw unavailable('Runtime supervisor could not load the Sandbox SDK peer dependency', error)\n }\n const SandboxCtor = (module as { Sandbox?: new (config: unknown) => SandboxClient }).Sandbox\n if (SandboxCtor === undefined) throw unavailable('Sandbox SDK does not export a Sandbox client')\n const provider = sandboxClientAsProvider(new SandboxCtor({ apiKey, baseUrl: endpoint }))\n return requireReconnectProvider(provider)\n}\n\nfunction requireReconnectProvider(provider: AgentEnvironmentProvider): AgentEnvironmentProvider {\n if (!provider.name.trim()) throw unavailable('Runtime supervisor provider has no name')\n if (typeof provider.get !== 'function') {\n throw unavailable(\n `Runtime supervisor provider '${provider.name}' cannot reconnect environments`,\n )\n }\n return provider\n}\n\nasync function readCapabilities(\n provider: AgentEnvironmentProvider,\n): Promise<AgentEnvironmentCapabilities> {\n try {\n return await provider.capabilities()\n } catch (error) {\n throw unavailable(`Runtime supervisor could not read '${provider.name}' capabilities`, error)\n }\n}\n\nfunction terminalCapability(\n capabilities: AgentEnvironmentCapabilities,\n): 'required' | 'unsupported' | 'unspecified' {\n const interactive = capabilities.interactiveAgent\n if (interactive === undefined) return 'unsupported'\n const complete = [\n interactive.start,\n interactive.control,\n interactive.status,\n interactive.attach,\n interactive.reattach,\n interactive.sendPrompt,\n interactive.input,\n interactive.resize,\n interactive.stop,\n ].every((value) => value === true)\n return complete ? 'required' : 'unsupported'\n}\n\nfunction findTool(tools: readonly McpToolDescriptor[], name: string): McpToolDescriptor {\n const tool = tools.find((candidate) => candidate.name === name)\n if (tool === undefined)\n throw new Error(`Runtime supervisor coordination tool '${name}' is missing`)\n return tool\n}\n\nfunction workerIdFromSpawn(value: unknown): string {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Runtime supervisor spawn did not return a worker id')\n }\n const workerId = (value as { workerId?: unknown }).workerId\n if (typeof workerId !== 'string' || !workerId.trim()) {\n throw new Error('Runtime supervisor spawn did not return a worker id')\n }\n return workerId\n}\n\nasync function raceSettlement(\n promise: ReturnType<Scope<unknown>['next']>,\n pollMs: number,\n signal: AbortSignal,\n): Promise<Awaited<ReturnType<Scope<unknown>['next']>> | undefined> {\n let timer: ReturnType<typeof setTimeout> | undefined\n let onAbort: (() => void) | undefined\n const poll = new Promise<undefined>((resolvePoll) => {\n timer = setTimeout(() => resolvePoll(undefined), pollMs)\n if (typeof timer.unref === 'function') timer.unref()\n onAbort = () => resolvePoll(undefined)\n signal.addEventListener('abort', onAbort, { once: true })\n })\n try {\n return await Promise.race([promise, poll])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n if (onAbort !== undefined) signal.removeEventListener('abort', onAbort)\n }\n}\n\nasync function waitForWorkerSpawn(\n worker: Promise<string>,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number,\n): Promise<string> {\n return await withTimeout(\n Promise.race([\n worker,\n run.then(() => {\n throw new Error('Runtime supervisor ended before it spawned a worker')\n }),\n ]),\n timeoutMs,\n 'worker spawn',\n )\n}\n\nasync function waitForWorkerRunning(\n running: Promise<void>,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number,\n): Promise<void> {\n await withTimeout(\n Promise.race([\n running,\n run.then(() => {\n throw new Error('Runtime supervisor ended before the worker became live')\n }),\n ]),\n timeoutMs,\n 'worker readiness',\n )\n}\n\nasync function waitForInteractiveBinding(\n eventDir: string,\n workerId: string,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number,\n pollMs: number,\n): Promise<void> {\n await withTimeout(\n pollUntil(\n async () => {\n const binding = readWorkerInteractiveBinding(eventDir, workerId)\n if (binding?.status === 'available') return true\n if (binding?.status === 'unavailable') {\n throw unavailable(`Runtime worker '${workerId}' could not publish an interactive binding`)\n }\n return false\n },\n run,\n pollMs,\n ),\n timeoutMs,\n 'interactive terminal binding',\n )\n}\n\nasync function pollUntil(\n read: () => Promise<boolean> | boolean,\n run: Promise<SupervisedResult<unknown>>,\n pollMs: number,\n): Promise<void> {\n for (;;) {\n if (await read()) return\n await Promise.race([\n delay(pollMs),\n run.then(() => {\n throw new Error('Runtime supervisor ended before readiness was observed')\n }),\n ])\n }\n}\n\nasync function withTimeout<T>(promise: Promise<T>, timeoutMs: number, label: string): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(\n () => reject(unavailable(`Runtime supervisor timed out waiting for ${label}`)),\n timeoutMs,\n )\n if (typeof timer.unref === 'function') timer.unref()\n })\n try {\n return await Promise.race([promise, timeout])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolveDelay) => {\n const timer = setTimeout(resolveDelay, ms)\n if (typeof timer.unref === 'function') timer.unref()\n })\n}\n\nfunction updateStateFromResult(state: MutableState, result: SupervisedResult<unknown>): void {\n state.status =\n result.kind === 'winner' ? 'done' : result.reason === 'aborted' ? 'cancelled' : 'down'\n state.completedAt = new Date().toISOString()\n}\n\nfunction workerStatusFromEvents(\n events: readonly SpawnEvent[],\n workerId: string,\n): SupervisorCleanupReceipt['workerStatus'] {\n let status: SupervisorCleanupReceipt['workerStatus'] = 'running'\n let terminal = false\n for (const event of events) {\n if (event.id !== workerId) continue\n if (terminal) continue\n if (event.kind === 'spawned' || event.kind === 'progress') status = 'running'\n else if (event.kind === 'settled') {\n status = event.status === 'done' ? 'done' : 'down'\n terminal = true\n } else if (event.kind === 'cancelled') {\n status = 'cancelled'\n terminal = true\n }\n }\n return status\n}\n\nasync function waitForWorkerTerminal(\n journal: import('./types').SpawnJournal,\n root: string,\n workerId: string,\n timeoutMs: number,\n pollMs: number,\n): Promise<SpawnEvent[]> {\n const deadline = Date.now() + timeoutMs\n for (;;) {\n const events = await journal.loadTree(root)\n if (events !== undefined && workerStatusFromEvents(events, workerId) !== 'running') {\n return events\n }\n if (Date.now() >= deadline) {\n throw unavailable(`Runtime supervisor timed out waiting for worker '${workerId}' to settle`)\n }\n await delay(pollMs)\n }\n}\n\nfunction deferred<T>(): Deferred<T> {\n let done = false\n let resolveValue!: (value: T) => void\n let rejectValue!: (error: unknown) => void\n const promise = new Promise<T>((resolvePromise, rejectPromise) => {\n resolveValue = (value) => {\n if (done) return\n done = true\n resolvePromise(value)\n }\n rejectValue = (error) => {\n if (done) return\n done = true\n rejectPromise(error)\n }\n })\n return {\n promise,\n resolve: resolveValue,\n reject: rejectValue,\n settled: () => done,\n }\n}\n\nfunction unavailable(message: string, cause?: unknown): SupervisorProvisionUnavailableError {\n return new SupervisorProvisionUnavailableError(message, cause)\n}\n\nfunction writeState(path: string, state: MutableState): void {\n mkdirSync(dirname(path), { recursive: true })\n writeAtomicDurableFile(path, `${JSON.stringify(state)}\\n`, { mode: 0o600 })\n}\n"],"mappings":"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"}