@tangle-network/agent-runtime 0.90.1 → 0.92.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.
- package/README.md +4 -2
- package/dist/agent.d.ts +3 -3
- package/dist/agent.js +88 -9
- package/dist/agent.js.map +1 -1
- package/dist/{mcp-serve-verifier-XsX8rkB9.d.ts → agentic-generator-B8oeE2Yv.d.ts} +6 -33
- package/dist/analyst-loop.d.ts +1 -1
- package/dist/candidate-execution/index.d.ts +104 -0
- package/dist/candidate-execution/index.js +34 -0
- package/dist/candidate-execution/index.js.map +1 -0
- package/dist/chunk-3BE7KTMU.js +1229 -0
- package/dist/chunk-3BE7KTMU.js.map +1 -0
- package/dist/chunk-3D2RHC4K.js +73 -0
- package/dist/chunk-3D2RHC4K.js.map +1 -0
- package/dist/chunk-3MDZX7YU.js +125 -0
- package/dist/chunk-3MDZX7YU.js.map +1 -0
- package/dist/{chunk-RYBVU4M3.js → chunk-6O5USWVH.js} +32 -1413
- package/dist/chunk-6O5USWVH.js.map +1 -0
- package/dist/chunk-6O73TRHW.js +142 -0
- package/dist/chunk-6O73TRHW.js.map +1 -0
- package/dist/{chunk-R2VAJGR3.js → chunk-7VJJJ2T2.js} +2 -2
- package/dist/chunk-A62TP7SK.js +4784 -0
- package/dist/chunk-A62TP7SK.js.map +1 -0
- package/dist/chunk-APVPRF4Y.js +2166 -0
- package/dist/chunk-APVPRF4Y.js.map +1 -0
- package/dist/{chunk-QK4DV5PR.js → chunk-AUEIDTR3.js} +2 -2
- package/dist/{chunk-OOL3675H.js → chunk-FRBHUNQ7.js} +2 -139
- package/dist/chunk-FRBHUNQ7.js.map +1 -0
- package/dist/{chunk-7ON74BQO.js → chunk-GDAQUFG6.js} +2 -2
- package/dist/{chunk-ZV4LXYCJ.js → chunk-I7WVPJBZ.js} +23 -1231
- package/dist/chunk-I7WVPJBZ.js.map +1 -0
- package/dist/{chunk-WRUSWK4F.js → chunk-IGGZGKJD.js} +3 -3
- package/dist/chunk-PH65PR4F.js +860 -0
- package/dist/chunk-PH65PR4F.js.map +1 -0
- package/dist/chunk-RSWM2ZKM.js +659 -0
- package/dist/chunk-RSWM2ZKM.js.map +1 -0
- package/dist/{chunk-BZF3KQ6G.js → chunk-VSWBYWFK.js} +4 -122
- package/dist/chunk-VSWBYWFK.js.map +1 -0
- package/dist/{completion-gate-DkAnUmpb.d.ts → completion-gate-BLaiN0-X.d.ts} +1 -1
- package/dist/{coordination-rRj5hjJK.d.ts → coordination-DxJ83oZA.d.ts} +12 -5
- package/dist/environment-provider.d.ts +2 -2
- package/dist/environment-provider.js +2 -1
- package/dist/improve-CUVCq7xg.d.ts +152 -0
- package/dist/{improvement-adapter-CDR8QNVM.d.ts → improvement-adapter-BieWeK5J.d.ts} +16 -0
- package/dist/index.d.ts +27 -291
- package/dist/index.js +70 -889
- package/dist/index.js.map +1 -1
- package/dist/intelligence.d.ts +160 -13
- package/dist/intelligence.js +535 -59
- package/dist/intelligence.js.map +1 -1
- package/dist/knowledge.d.ts +6 -6
- package/dist/knowledge.js +6 -4
- package/dist/lifecycle.d.ts +2 -1
- package/dist/lifecycle.js +5 -3
- package/dist/lifecycle.js.map +1 -1
- package/dist/{loop-runner-bin-DTbZVGfM.d.ts → loop-runner-bin-kKUNGLyV.d.ts} +2 -2
- package/dist/loop-runner-bin.d.ts +5 -5
- package/dist/loop-runner-bin.js +8 -5
- package/dist/loops.d.ts +16 -16
- package/dist/loops.js +47 -41
- package/dist/mcp/bin.js +6 -4
- package/dist/mcp/bin.js.map +1 -1
- package/dist/mcp/index.d.ts +8 -8
- package/dist/mcp/index.js +9 -6
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp-serve-verifier-Bg4C3p5S.d.ts +34 -0
- package/dist/{openai-tools-C4ZfUD4L.d.ts → openai-tools-E3woykz9.d.ts} +1 -1
- package/dist/prepare-Z08a4heC.d.ts +713 -0
- package/dist/profiles.d.ts +1 -1
- package/dist/{router-client-DJImUDlm.d.ts → sanitize-C9go6tXj.d.ts} +113 -1
- package/dist/{structural-rollout-MwlpgQ-6.d.ts → structural-rollout-DHGDbhvR.d.ts} +3 -3
- package/dist/{supervise-DPmYPk0j.d.ts → supervise-T2pazU3G.d.ts} +4 -4
- package/dist/{types-SyuwunY_.d.ts → types-B00NtbCs.d.ts} +1 -1
- package/dist/{types-eMNgWgFi.d.ts → types-DAdIm4AC.d.ts} +1 -1
- package/dist/{worktree-fanout-BDFQIO-Y.d.ts → worktree-fanout-BUb2Ag02.d.ts} +3 -3
- package/package.json +26 -36
- package/skills/build-with-agent-runtime/SKILL.md +1 -1
- package/dist/chunk-BZF3KQ6G.js.map +0 -1
- package/dist/chunk-IVGYLCFH.js +0 -381
- package/dist/chunk-IVGYLCFH.js.map +0 -1
- package/dist/chunk-OOL3675H.js.map +0 -1
- package/dist/chunk-RYBVU4M3.js.map +0 -1
- package/dist/chunk-ZV4LXYCJ.js.map +0 -1
- /package/dist/{chunk-R2VAJGR3.js.map → chunk-7VJJJ2T2.js.map} +0 -0
- /package/dist/{chunk-QK4DV5PR.js.map → chunk-AUEIDTR3.js.map} +0 -0
- /package/dist/{chunk-7ON74BQO.js.map → chunk-GDAQUFG6.js.map} +0 -0
- /package/dist/{chunk-WRUSWK4F.js.map → chunk-IGGZGKJD.js.map} +0 -0
package/dist/profiles.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as UiFinding, U as UiLens } from './substrate-DO2GHNg2.js';
|
|
2
2
|
export { C as CoderTask, b as UI_FINDING_SEVERITIES, c as UI_LENSES, d as UiFindingScreenshot, e as UiFindingSeverity, f as coderTaskToPrompt } from './substrate-DO2GHNg2.js';
|
|
3
3
|
import { AgentProfile, SandboxEvent } from '@tangle-network/sandbox';
|
|
4
|
-
import { V as Validator,
|
|
4
|
+
import { V as Validator, e as AgentRunSpec, d as OutputAdapter, D as Driver, S as SandboxClient } from './types-B00NtbCs.js';
|
|
5
5
|
import { AgentProfile as AgentProfile$1 } from '@tangle-network/agent-interface';
|
|
6
6
|
import '@tangle-network/agent-eval';
|
|
7
7
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { ControlEvalResult, KnowledgeReadinessReport, KnowledgeRequirement } from '@tangle-network/agent-eval';
|
|
2
|
+
import { A as AgentRuntimeEvent, b as RuntimeStreamEvent, c as AgentTaskStatus } from './types-B00NtbCs.js';
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* THE canonical agentic tool-loop. One inference turn → run any requested tools → fold the
|
|
3
6
|
* results back as `tool` messages → repeat, until the model answers without a tool call or the
|
|
@@ -213,4 +216,113 @@ declare function routerBrain(cfg: RouterConfig, opts?: {
|
|
|
213
216
|
temperature?: number;
|
|
214
217
|
}): ToolLoopChat;
|
|
215
218
|
|
|
216
|
-
|
|
219
|
+
/**
|
|
220
|
+
*
|
|
221
|
+
* Sanitization for runtime telemetry. The rule: nothing user-controlled leaks
|
|
222
|
+
* unless the caller opts in with a `RuntimeTelemetryOptions` flag. This is the
|
|
223
|
+
* envelope that ends up in `agent_run.metadata.runtimeEvents` on every
|
|
224
|
+
* consumer, so the default must be safe.
|
|
225
|
+
*
|
|
226
|
+
* @stable
|
|
227
|
+
*/
|
|
228
|
+
|
|
229
|
+
/** @stable */
|
|
230
|
+
interface RuntimeTelemetryOptions {
|
|
231
|
+
/**
|
|
232
|
+
* Include raw task inputs. Off by default because task inputs often contain
|
|
233
|
+
* customer facts, credentials, source text, or internal IDs.
|
|
234
|
+
*/
|
|
235
|
+
includeInputs?: boolean;
|
|
236
|
+
/** Include requirement descriptions. Secret requirements are always redacted. */
|
|
237
|
+
includeRequirementDescriptions?: boolean;
|
|
238
|
+
/** Include evidence IDs. Off by default; counts are safer for shared reports. */
|
|
239
|
+
includeEvidenceIds?: boolean;
|
|
240
|
+
/** Include user answers from question preflight. Off by default. */
|
|
241
|
+
includeUserAnswers?: boolean;
|
|
242
|
+
/** Include action payloads and action results for control steps. Off by default. */
|
|
243
|
+
includeControlPayloads?: boolean;
|
|
244
|
+
/** Include task metadata. Off by default because metadata may carry IDs or policy internals. */
|
|
245
|
+
includeMetadata?: boolean;
|
|
246
|
+
/** Include eval detail/evidence strings. Off by default because validators may echo private input. */
|
|
247
|
+
includeEvalDetails?: boolean;
|
|
248
|
+
}
|
|
249
|
+
/** @stable */
|
|
250
|
+
interface SanitizedKnowledgeRequirement {
|
|
251
|
+
id: string;
|
|
252
|
+
description?: string;
|
|
253
|
+
requiredFor: string[];
|
|
254
|
+
category: KnowledgeRequirement['category'];
|
|
255
|
+
acquisitionMode: KnowledgeRequirement['acquisitionMode'];
|
|
256
|
+
importance: KnowledgeRequirement['importance'];
|
|
257
|
+
freshness: KnowledgeRequirement['freshness'];
|
|
258
|
+
sensitivity: KnowledgeRequirement['sensitivity'];
|
|
259
|
+
confidenceNeeded: number;
|
|
260
|
+
currentConfidence: number;
|
|
261
|
+
evidenceCount: number;
|
|
262
|
+
evidenceIds?: string[];
|
|
263
|
+
fallbackPolicy: KnowledgeRequirement['fallbackPolicy'];
|
|
264
|
+
}
|
|
265
|
+
/** @stable */
|
|
266
|
+
interface SanitizedKnowledgeReadinessReport {
|
|
267
|
+
taskId: string;
|
|
268
|
+
readinessScore: number;
|
|
269
|
+
recommendedAction: KnowledgeReadinessReport['recommendedAction'];
|
|
270
|
+
severity: KnowledgeReadinessReport['severity'];
|
|
271
|
+
reason: string;
|
|
272
|
+
blockingMissingRequirements: SanitizedKnowledgeRequirement[];
|
|
273
|
+
nonBlockingGaps: SanitizedKnowledgeRequirement[];
|
|
274
|
+
evidenceCount: number;
|
|
275
|
+
evidenceIds?: string[];
|
|
276
|
+
missingRequirementIds: string[];
|
|
277
|
+
}
|
|
278
|
+
/** Strip PII and large blobs from a `KnowledgeReadinessReport` for safe telemetry emission. @stable */
|
|
279
|
+
declare function sanitizeKnowledgeReadinessReport(report: KnowledgeReadinessReport, options?: RuntimeTelemetryOptions): SanitizedKnowledgeReadinessReport;
|
|
280
|
+
/** Reduce an `AgentRuntimeEvent` to a PII-safe, serializable plain object for telemetry. @stable */
|
|
281
|
+
declare function sanitizeAgentRuntimeEvent<TState, TAction, TActionResult, TEval extends ControlEvalResult>(event: AgentRuntimeEvent<TState, TAction, TActionResult, TEval>, options?: RuntimeTelemetryOptions): Record<string, unknown>;
|
|
282
|
+
/** Reduce a `RuntimeStreamEvent` to a PII-safe, serializable plain object for telemetry. @stable */
|
|
283
|
+
declare function sanitizeRuntimeStreamEvent(event: RuntimeStreamEvent, options?: RuntimeTelemetryOptions): Record<string, unknown>;
|
|
284
|
+
/** @stable */
|
|
285
|
+
interface RuntimeEventCollector<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult> {
|
|
286
|
+
onEvent: (event: AgentRuntimeEvent<TState, TAction, TActionResult, TEval>) => void;
|
|
287
|
+
events: Array<Record<string, unknown>>;
|
|
288
|
+
}
|
|
289
|
+
/** @stable */
|
|
290
|
+
type RuntimeStreamEventSink = (event: RuntimeStreamEvent) => void;
|
|
291
|
+
/** @stable */
|
|
292
|
+
interface RuntimeStreamEventSummary {
|
|
293
|
+
/** Total count of sanitized events collected. */
|
|
294
|
+
eventCount: number;
|
|
295
|
+
/** Count of events per `type`. Useful for log-line summaries. */
|
|
296
|
+
eventCountsByType: Record<string, number>;
|
|
297
|
+
/** First session id observed in a `session_created` / `session_resumed` event, if any. */
|
|
298
|
+
firstSessionId?: string;
|
|
299
|
+
/** Last `final` event's status, if a final event was observed. */
|
|
300
|
+
finalStatus?: AgentTaskStatus;
|
|
301
|
+
/** Last `final` event's reason, if a final event was observed. */
|
|
302
|
+
finalReason?: string;
|
|
303
|
+
/** Concatenated `text_delta.text` across the stream, even when payloads are redacted. */
|
|
304
|
+
finalText: string;
|
|
305
|
+
}
|
|
306
|
+
/** @stable */
|
|
307
|
+
interface RuntimeStreamEventCollector {
|
|
308
|
+
onEvent: RuntimeStreamEventSink;
|
|
309
|
+
events: Array<Record<string, unknown>>;
|
|
310
|
+
/** Snapshot of a small streaming-flavored summary derived from collected events. */
|
|
311
|
+
summary(): RuntimeStreamEventSummary;
|
|
312
|
+
}
|
|
313
|
+
/** Build an in-memory collector that sanitizes and accumulates `AgentRuntimeEvent`s for inspection. @stable */
|
|
314
|
+
declare function createRuntimeEventCollector<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult>(options?: RuntimeTelemetryOptions): RuntimeEventCollector<TState, TAction, TActionResult, TEval>;
|
|
315
|
+
/**
|
|
316
|
+
*
|
|
317
|
+
* Streaming-event counterpart of `createRuntimeEventCollector`. Pass each
|
|
318
|
+
* event yielded by `runAgentTaskStream` through `onEvent` and read the
|
|
319
|
+
* sanitized copies off `events`; the same `RuntimeTelemetryOptions` redaction
|
|
320
|
+
* flags apply. Kept distinct from `createRuntimeEventCollector` because the
|
|
321
|
+
* stream and non-stream event shapes overlap on `type` literals — dispatching
|
|
322
|
+
* on `type` alone would misroute events.
|
|
323
|
+
*
|
|
324
|
+
* @stable
|
|
325
|
+
*/
|
|
326
|
+
declare function createRuntimeStreamEventCollector(options?: RuntimeTelemetryOptions): RuntimeStreamEventCollector;
|
|
327
|
+
|
|
328
|
+
export { type RouterConfig as R, type SanitizedKnowledgeReadinessReport as S, type ToolLoopChat as T, type ToolLoopCompactionOptions as a, type ToolSpec as b, type RuntimeTelemetryOptions as c, type RuntimeEventCollector as d, type RuntimeStreamEventCollector as e, createRuntimeEventCollector as f, createRuntimeStreamEventCollector as g, sanitizeKnowledgeReadinessReport as h, sanitizeRuntimeStreamEvent as i, type RouterChatResult as j, type RouterChatToolsResult as k, type RouterToolCall as l, type RouterToolLoopResult as m, type ToolLoopCompaction as n, routerChatWithTools as o, routerChatWithUsage as p, routerToolLoop as q, routerBrain as r, sanitizeAgentRuntimeEvent as s };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { R as RuntimeHooks, a as SelectionReceipt } from './types-
|
|
2
|
-
import { C as Corpus, O as Outcome } from './worktree-fanout-
|
|
3
|
-
import { A as Agent, B as Budget, S as Scope } from './types-
|
|
1
|
+
import { R as RuntimeHooks, a as SelectionReceipt } from './types-B00NtbCs.js';
|
|
2
|
+
import { C as Corpus, O as Outcome } from './worktree-fanout-BUb2Ag02.js';
|
|
3
|
+
import { A as Agent, B as Budget, S as Scope } from './types-DAdIm4AC.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* The general agentic primitive — sequential (depth) and parallel (breadth) over a shared,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { S as Scope, a as ResultBlobStore, B as Budget, A as Agent, b as SupervisedResult } from './types-
|
|
2
|
-
import { M as MakeWorkerAgent, A as AnalystRegistry, E as ExecutorConfig } from './coordination-
|
|
3
|
-
import { R as RouterConfig, T as ToolLoopChat, a as ToolLoopCompactionOptions } from './
|
|
4
|
-
import { D as DeliverableSpec } from './completion-gate-
|
|
1
|
+
import { S as Scope, a as ResultBlobStore, B as Budget, A as Agent, b as SupervisedResult } from './types-DAdIm4AC.js';
|
|
2
|
+
import { M as MakeWorkerAgent, A as AnalystRegistry, E as ExecutorConfig } from './coordination-DxJ83oZA.js';
|
|
3
|
+
import { R as RouterConfig, T as ToolLoopChat, a as ToolLoopCompactionOptions } from './sanitize-C9go6tXj.js';
|
|
4
|
+
import { D as DeliverableSpec } from './completion-gate-BLaiN0-X.js';
|
|
5
5
|
|
|
6
6
|
/** The supervisor's profile — the subset of an `AgentProfile` that selects + shapes its brain.
|
|
7
7
|
* `harness` is the backend-as-data discriminant; `systemPrompt` is the standing instruction. */
|
|
@@ -1308,4 +1308,4 @@ interface ExecCtx {
|
|
|
1308
1308
|
parentSpanId?: string;
|
|
1309
1309
|
}
|
|
1310
1310
|
|
|
1311
|
-
export { type MountRecorder as $, type
|
|
1311
|
+
export { type MountRecorder as $, type AgentRuntimeEvent as A, type BackendErrorDetail as B, type RuntimeHookContext as C, type Driver as D, type ExecCtx as E, type RuntimeHookErrorContext as F, type RuntimeHookEvent as G, type RuntimeHookPhase as H, type Iteration as I, type RuntimeHookTarget as J, type KnowledgeReadinessDecision as K, type LoopTokenUsage as L, type RuntimeRunHandle as M, type RuntimeRunPersistenceAdapter as N, type OpenAIChatTool as O, type RuntimeRunRow as P, composeRuntimeHooks as Q, type RuntimeHooks as R, type SandboxClient as S, defineRuntimeHooks as T, notifyRuntimeDecisionPoint as U, type Validator as V, notifyRuntimeHookEvent as W, startRuntimeRun as X, type LoopWinner as Y, type LoopLineageOptions as Z, type LoopResult as _, type SelectionReceipt as a, type LoopDecisionPayload as a0, type LoopEndedPayload as a1, type LoopIterationDispatchPayload as a2, type LoopIterationEndedPayload as a3, type LoopIterationStartedPayload as a4, type LoopPlanDescription as a5, type LoopPlanPayload as a6, type LoopStartedPayload as a7, type LoopTeardownFailedPayload as a8, type MountManifestEntry as a9, type RunProvenance as aa, type ValidationCtx as ab, type RuntimeStreamEvent as b, type AgentTaskStatus as c, type OutputAdapter as d, type AgentRunSpec as e, type LoopSandboxPlacement as f, type LoopTraceEvent as g, type LoopTraceEmitter as h, type AgentBackendInput as i, type OpenAIChatToolChoice as j, type OpenAIChatResponseFormat as k, type AgentExecutionBackend as l, type AgentBackendContext as m, type RunAgentTaskOptions as n, type AgentTaskRunResult as o, type RunAgentTaskStreamOptions as p, type RuntimeSessionStore as q, type RuntimeSession as r, type AgentAdapter as s, type AgentKnowledgeProvider as t, type AgentRuntimeEventSink as u, type AgentTaskContext as v, type AgentTaskSpec as w, type RuntimeDecisionEvidenceRef as x, type RuntimeDecisionKind as y, type RuntimeDecisionPoint as z };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DefaultVerdict } from '@tangle-network/agent-eval';
|
|
2
2
|
import { AgentProfile } from '@tangle-network/agent-interface';
|
|
3
3
|
import { BackendType } from '@tangle-network/sandbox';
|
|
4
|
-
import { L as LoopTokenUsage, R as RuntimeHooks } from './types-
|
|
4
|
+
import { L as LoopTokenUsage, R as RuntimeHooks } from './types-B00NtbCs.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AgentProfile } from '@tangle-network/agent-interface';
|
|
2
2
|
import { AnalystFinding, DefaultVerdict } from '@tangle-network/agent-eval';
|
|
3
|
-
import { N as NodeId, d as Settled, e as Spend, f as AgentSpec, S as Scope, g as SpawnJournal, a as ResultBlobStore, h as ExecutorRegistry, B as Budget, A as Agent, i as RootHandle, b as SupervisedResult, c as Executor } from './types-
|
|
4
|
-
import { I as Iteration, R as RuntimeHooks } from './types-
|
|
3
|
+
import { N as NodeId, d as Settled, e as Spend, f as AgentSpec, S as Scope, g as SpawnJournal, a as ResultBlobStore, h as ExecutorRegistry, B as Budget, A as Agent, i as RootHandle, b as SupervisedResult, c as Executor } from './types-DAdIm4AC.js';
|
|
4
|
+
import { I as Iteration, R as RuntimeHooks } from './types-B00NtbCs.js';
|
|
5
5
|
import { BackendType } from '@tangle-network/sandbox';
|
|
6
|
-
import { W as WorktreeHarnessResult, G as GitRunner, a as WorktreeCheckRunner, D as DeliverableSpec } from './completion-gate-
|
|
6
|
+
import { W as WorktreeHarnessResult, G as GitRunner, a as WorktreeCheckRunner, D as DeliverableSpec } from './completion-gate-BLaiN0-X.js';
|
|
7
7
|
import { L as LocalHarness, r as runLocalHarness } from './local-harness-dcD5WTTr.js';
|
|
8
8
|
|
|
9
9
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/agent-runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.92.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": {
|
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
"import": "./dist/platform.js",
|
|
65
65
|
"default": "./dist/platform.js"
|
|
66
66
|
},
|
|
67
|
+
"./candidate-execution": {
|
|
68
|
+
"types": "./dist/candidate-execution/index.d.ts",
|
|
69
|
+
"import": "./dist/candidate-execution/index.js",
|
|
70
|
+
"default": "./dist/candidate-execution/index.js"
|
|
71
|
+
},
|
|
67
72
|
"./mcp": {
|
|
68
73
|
"types": "./dist/mcp/index.d.ts",
|
|
69
74
|
"import": "./dist/mcp/index.js",
|
|
@@ -82,25 +87,10 @@
|
|
|
82
87
|
"publishConfig": {
|
|
83
88
|
"access": "public"
|
|
84
89
|
},
|
|
85
|
-
"scripts": {
|
|
86
|
-
"build": "tsup",
|
|
87
|
-
"dev": "tsup --watch",
|
|
88
|
-
"prepare": "(git rev-parse --git-dir > /dev/null 2>&1 && git config core.hooksPath .githooks) || true; tsup",
|
|
89
|
-
"test": "vitest run",
|
|
90
|
-
"test:watch": "vitest",
|
|
91
|
-
"lint": "biome check src tests examples",
|
|
92
|
-
"lint:fix": "biome check --write src tests examples",
|
|
93
|
-
"typecheck": "tsc --noEmit && pnpm run typecheck:examples",
|
|
94
|
-
"typecheck:examples": "tsc --noEmit -p tsconfig.examples.json",
|
|
95
|
-
"verify:package": "node scripts/verify-package-exports.mjs",
|
|
96
|
-
"docs:api": "typedoc && node scripts/gen-primitive-catalog.mjs",
|
|
97
|
-
"docs:freshness": "node scripts/check-docs-freshness.mjs",
|
|
98
|
-
"docs:check": "pnpm run docs:api && git diff --exit-code -- docs/api && pnpm run docs:freshness"
|
|
99
|
-
},
|
|
100
90
|
"devDependencies": {
|
|
101
91
|
"@biomejs/biome": "^2.4.15",
|
|
102
|
-
"@tangle-network/agent-eval": "^0.
|
|
103
|
-
"@tangle-network/agent-interface": "^0.
|
|
92
|
+
"@tangle-network/agent-eval": "^0.113.0",
|
|
93
|
+
"@tangle-network/agent-interface": "^0.25.0",
|
|
104
94
|
"@tangle-network/sandbox": "^0.9.7",
|
|
105
95
|
"@types/node": "^25.9.3",
|
|
106
96
|
"playwright": "^1.61.0",
|
|
@@ -111,32 +101,17 @@
|
|
|
111
101
|
"typescript": "^5.7.0",
|
|
112
102
|
"vitest": "^3.0.0"
|
|
113
103
|
},
|
|
114
|
-
"pnpm": {
|
|
115
|
-
"minimumReleaseAge": 4320,
|
|
116
|
-
"minimumReleaseAgeExclude": [
|
|
117
|
-
"@tangle-network/agent-eval",
|
|
118
|
-
"@tangle-network/agent-interface",
|
|
119
|
-
"@tangle-network/sandbox"
|
|
120
|
-
],
|
|
121
|
-
"onlyBuiltDependencies": [
|
|
122
|
-
"esbuild"
|
|
123
|
-
]
|
|
124
|
-
},
|
|
125
104
|
"engines": {
|
|
126
105
|
"node": ">=20"
|
|
127
106
|
},
|
|
128
107
|
"license": "MIT",
|
|
129
|
-
"packageManager": "pnpm@10.28.0",
|
|
130
108
|
"peerDependencies": {
|
|
131
109
|
"@tangle-network/agent-eval": ">=0.101.0 <1.0.0",
|
|
132
|
-
"@tangle-network/agent-interface": ">=0.
|
|
110
|
+
"@tangle-network/agent-interface": ">=0.25.0 <1.0.0",
|
|
133
111
|
"@tangle-network/sandbox": ">=0.8.0 <1.0.0",
|
|
134
112
|
"playwright": "^1.40.0"
|
|
135
113
|
},
|
|
136
114
|
"peerDependenciesMeta": {
|
|
137
|
-
"@tangle-network/agent-interface": {
|
|
138
|
-
"optional": true
|
|
139
|
-
},
|
|
140
115
|
"@tangle-network/sandbox": {
|
|
141
116
|
"optional": true
|
|
142
117
|
},
|
|
@@ -145,6 +120,21 @@
|
|
|
145
120
|
}
|
|
146
121
|
},
|
|
147
122
|
"dependencies": {
|
|
148
|
-
"@tangle-network/agent-knowledge": "^1.11.
|
|
123
|
+
"@tangle-network/agent-knowledge": "^1.11.2",
|
|
124
|
+
"@tangle-network/agent-profile-materialize": "0.3.1"
|
|
125
|
+
},
|
|
126
|
+
"scripts": {
|
|
127
|
+
"build": "tsup",
|
|
128
|
+
"dev": "tsup --watch",
|
|
129
|
+
"test": "vitest run",
|
|
130
|
+
"test:watch": "vitest",
|
|
131
|
+
"lint": "biome check src tests examples",
|
|
132
|
+
"lint:fix": "biome check --write src tests examples",
|
|
133
|
+
"typecheck": "tsc --noEmit && pnpm run typecheck:examples",
|
|
134
|
+
"typecheck:examples": "tsc --noEmit -p tsconfig.examples.json",
|
|
135
|
+
"verify:package": "node scripts/verify-package-exports.mjs",
|
|
136
|
+
"docs:api": "typedoc && node scripts/gen-primitive-catalog.mjs",
|
|
137
|
+
"docs:freshness": "node scripts/check-docs-freshness.mjs",
|
|
138
|
+
"docs:check": "pnpm run docs:api && git diff --exit-code -- docs/api && pnpm run docs:freshness"
|
|
149
139
|
}
|
|
150
|
-
}
|
|
140
|
+
}
|
|
@@ -92,7 +92,7 @@ to its native default (`HARNESS_NATIVE_MODEL`) — never silently dropped.
|
|
|
92
92
|
| **Spawn N coding agents on isolated git worktrees, keep the one whose patch passes checks** | `worktreeFanout` + `createWorktreeCliExecutor` + `gateOnDeliverable(DeliverableSpec)` over a raw `WorktreePatchArtifact`, winner via `selectValidWinner` — `/loops` — NOT a hand-rolled spawn-loop / "coder" role | canonical-api §3.1 / §5 |
|
|
93
93
|
| **Sandbox coding rollout** (fresh box/round, or persistent+resume) | `runLoop(options)` / `openSandboxRun(client, opts, deliverable)` — `/loops` | canonical-api §3.1 |
|
|
94
94
|
| **Optimize a CODE surface** in a gated loop | `improvementDriver({ worktree, generator })` — root `.` | canonical-api §3.4 |
|
|
95
|
-
| **Optimize
|
|
95
|
+
| **Optimize any agent/code surface** (one call) — START HERE | `improve(profile, findings, { surface, gate })` — root `.`; prompt and skill-document surfaces have built-in proposers, config/whole-profile surfaces accept a proposer, rollout policy enumerates bounded variants, and code gets isolated incumbent/candidate worktrees; drop to `selfImprove({ agent, scenarios, judge, baselineSurface })` only for lower-level control | canonical-api §3.4 |
|
|
96
96
|
| **Gate: ship/hold a candidate** (campaign ctx) | `defaultProductionGate` / `heldOutGate` / `composeGate` — `agent-eval/contract`; `neutralizationGate` (footprint-matched PLACEBO gate — proves a held-out lift is CONTENT, not added prompt/mount footprint) — `agent-eval/campaign` | canonical-api §3.4 |
|
|
97
97
|
| **Gate: ship/hold from a `BenchmarkReport`** (per-task cells) | `promotionGate({ report, incumbent, candidate })` — `/loops` | canonical-api §3.4 |
|
|
98
98
|
| **Run the full multi-generation flywheel + certify** | `runStrategyEvolution(config)` — `/loops` | canonical-api §3.4 |
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/util.ts","../src/runtime/environment-provider.ts"],"sourcesContent":["/**\n *\n * Internal loop-kernel utilities shared across the kernel, drivers, and the\n * sandbox-acquire layer. Not part of the public barrel surface.\n *\n * @experimental\n */\n\nimport type { SandboxInstance } from '@tangle-network/sandbox'\nimport type { LoopTokenUsage } from './types'\n\n/**\n * Best-effort sandbox delete. Skips instances without a `delete` (test fakes);\n * swallows errors (the platform reaps on expiry). Returns `false` when delete\n * threw, `true` otherwise, so callers can surface a leak if they choose.\n */\nexport async function deleteBoxSafe(box: SandboxInstance | undefined): Promise<boolean> {\n if (!box || typeof (box as { delete?: unknown }).delete !== 'function') return true\n try {\n await box.delete()\n return true\n } catch {\n return false\n }\n}\n\n/** Short base36 id for trace correlation. Not cryptographic, not collision-free. */\nexport function randomSuffix(len = 8): string {\n return Math.random()\n .toString(36)\n .slice(2, 2 + len)\n}\n\n/** Collision-resistant id for sandbox naming (find-by-name recovery must be unique). */\nexport function randomUuid(): string {\n return crypto.randomUUID()\n}\n\n/** Construct an AbortError. Downstream code pattern-matches on `err.name`. */\nexport function abortError(): Error {\n const err = new Error('aborted')\n err.name = 'AbortError'\n return err\n}\n\n/** Throw an AbortError. */\nexport function throwAbort(): never {\n throw abortError()\n}\n\n/** Throw if the signal is already aborted; otherwise no-op. */\nexport function throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) throw abortError()\n}\n\n/** True for any error whose `name` is `AbortError` (the cross-kernel abort contract). */\nexport function isAbortError(err: unknown): boolean {\n return err instanceof Error && err.name === 'AbortError'\n}\n\n/**\n * Sleep that resolves early on abort and always clears its timer so it never\n * keeps the event loop alive. Resolves (does not reject) on abort — callers\n * re-check the signal explicitly after the sleep.\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let onAbort: (() => void) | undefined\n const timer = setTimeout(() => {\n if (onAbort && signal) signal.removeEventListener('abort', onAbort)\n resolve()\n }, ms)\n if (signal) {\n onAbort = () => {\n clearTimeout(timer)\n resolve()\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n })\n}\n\n/**\n * Race a promise against a timeout. Resolves with the value if it settles in\n * time, otherwise resolves with `undefined`. Always clears the timer.\n */\nexport function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T | undefined> {\n return new Promise<T | undefined>((resolve) => {\n const timer = setTimeout(() => resolve(undefined), ms)\n promise.then(\n (value) => {\n clearTimeout(timer)\n resolve(value)\n },\n () => {\n clearTimeout(timer)\n resolve(undefined)\n },\n )\n })\n}\n\ninterface StringifyOptions {\n /** Pretty-print with 2-space indent. Default false (compact). */\n pretty?: boolean\n /** Truncate to this many chars, appending `…`. Default unbounded. */\n max?: number\n}\n\n/**\n * `JSON.stringify` with a `String()` fallback on throw (cyclic / non-JSON).\n * Strings pass through unstringified so a preview of a string output is the\n * string itself, not a quoted re-encoding.\n */\nexport function stringifySafe(value: unknown, opts: StringifyOptions = {}): string {\n let s: string\n try {\n if (typeof value === 'string') {\n s = value\n } else {\n const json = opts.pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value)\n s = json ?? String(value)\n }\n } catch {\n s = String(value)\n }\n if (opts.max !== undefined && s.length > opts.max) return `${s.slice(0, opts.max)}…`\n return s\n}\n\n/** A fresh zero token-usage accumulator. */\nexport function zeroTokenUsage(): LoopTokenUsage {\n return { input: 0, output: 0 }\n}\n\n/** Add `delta` into `acc` in place. Missing fields count as zero. */\nexport function addTokenUsage(acc: LoopTokenUsage, delta: Partial<LoopTokenUsage>): void {\n acc.input += delta.input ?? 0\n acc.output += delta.output ?? 0\n}\n\n/**\n * Map `items` through `fn` with at most `limit` calls in flight at once,\n * preserving input order in the result. On the first `fn` rejection no NEW\n * items are picked up; already-in-flight calls are awaited, then the first\n * error is rethrown. `limit` is clamped to ≥ 1.\n *\n * Used where a burst of provisioning (e.g. forking N child boxes) must respect\n * the loop's concurrency bound instead of firing all N at once.\n */\nexport async function mapWithConcurrency<T, R>(\n items: readonly T[],\n limit: number,\n fn: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const bound = Math.max(1, Math.floor(limit))\n const results = new Array<R>(items.length)\n let next = 0\n let failed = false\n const worker = async (): Promise<void> => {\n while (!failed) {\n const i = next\n next += 1\n if (i >= items.length) return\n try {\n results[i] = await fn(items[i] as T, i)\n } catch (err) {\n failed = true\n throw err\n }\n }\n }\n const workerCount = Math.min(bound, items.length)\n await Promise.all(Array.from({ length: workerCount }, () => worker()))\n return results\n}\n","import type {\n AgentProfile,\n AgentProfileValidationResult,\n InputPart,\n TokenUsage,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironment,\n AgentEnvironmentCapabilities,\n AgentEnvironmentEvent,\n AgentEnvironmentProvider,\n AgentEnvironmentQuery,\n AgentEnvironmentStatus,\n AgentEnvironmentSummary,\n AgentProfileRef,\n AgentSession,\n AgentSessionRef,\n AgentSessionStatus,\n AgentTurnInput,\n AgentTurnResult,\n CheckpointRef,\n CheckpointRequest,\n CreateAgentEnvironmentInput,\n ExecRequest,\n ExecResult,\n ForkRequest,\n PlacementInfo,\n ResourceRequest,\n} from '@tangle-network/agent-interface/environment-provider'\nimport type {\n BackendType,\n CreateSandboxOptions,\n PromptOptions,\n PromptResult,\n SandboxEvent,\n ExecResult as SandboxExecResult,\n SandboxInstance,\n} from '@tangle-network/sandbox'\nimport type {\n Executor,\n ExecutorContext,\n ExecutorFactory,\n ExecutorResult,\n Runtime,\n Spend,\n UsageEvent,\n} from './supervise/types'\nimport type { LoopSandboxPlacement, SandboxClient } from './types'\nimport { zeroTokenUsage } from './util'\n\n// Keep this file loadable from the lean `./environment-provider` export without agent-eval installed.\nclass ValidationError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options)\n this.name = 'ValidationError'\n }\n}\n\nexport type {\n AgentEnvironment,\n AgentEnvironmentCapabilities,\n AgentEnvironmentEvent,\n AgentEnvironmentProvider,\n AgentEnvironmentQuery,\n AgentEnvironmentStatus,\n AgentEnvironmentSummary,\n AgentProfileRef,\n AgentSession,\n AgentSessionRef,\n AgentSessionStatus,\n AgentTurnInput,\n AgentTurnResult,\n CheckpointRef,\n CheckpointRequest,\n CreateAgentEnvironmentInput,\n ExecRequest,\n ExecResult,\n ForkRequest,\n PlacementInfo,\n ResourceRequest,\n WorkspaceRequest,\n} from '@tangle-network/agent-interface/environment-provider'\n\n/** Provider object or registry name accepted by runtime provider adapters.\n * @experimental */\nexport type AgentEnvironmentProviderRef = AgentEnvironmentProvider | string\n\n/** In-memory registry for named `AgentEnvironmentProvider` instances.\n * @experimental */\nexport interface AgentEnvironmentProviderRegistry {\n register(provider: AgentEnvironmentProvider, options?: { replace?: boolean }): void\n has(name: string): boolean\n get(name: string): AgentEnvironmentProvider | undefined\n require(name: string): AgentEnvironmentProvider\n names(): string[]\n providers(): AgentEnvironmentProvider[]\n capabilities(name: string): Promise<AgentEnvironmentCapabilities>\n}\n\n/** Create a registry that resolves provider names to concrete provider instances.\n * @experimental */\nexport function createAgentEnvironmentProviderRegistry(\n providers: Iterable<AgentEnvironmentProvider> = [],\n): AgentEnvironmentProviderRegistry {\n const entries = new Map<string, AgentEnvironmentProvider>()\n\n const registry: AgentEnvironmentProviderRegistry = {\n register(provider, options = {}): void {\n if (!provider.name) {\n throw new ValidationError('agent environment provider registry: provider.name required')\n }\n if (!options.replace && entries.has(provider.name)) {\n throw new ValidationError(\n `agent environment provider registry: provider \"${provider.name}\" already registered`,\n )\n }\n entries.set(provider.name, provider)\n },\n has(name): boolean {\n return entries.has(name)\n },\n get(name): AgentEnvironmentProvider | undefined {\n return entries.get(name)\n },\n require(name): AgentEnvironmentProvider {\n const provider = entries.get(name)\n if (!provider) {\n const available = Array.from(entries.keys()).sort()\n const suffix = available.length > 0 ? `; available: ${available.join(', ')}` : ''\n throw new ValidationError(\n `agent environment provider registry: provider \"${name}\" is not registered${suffix}`,\n )\n }\n return provider\n },\n names(): string[] {\n return Array.from(entries.keys()).sort()\n },\n providers(): AgentEnvironmentProvider[] {\n return registry.names().map((name) => registry.require(name))\n },\n async capabilities(name): Promise<AgentEnvironmentCapabilities> {\n return registry.require(name).capabilities()\n },\n }\n\n for (const provider of providers) registry.register(provider)\n return registry\n}\n\n/** Resolve a provider instance or registry name, failing loudly when a name is unknown.\n * @experimental */\nexport function resolveAgentEnvironmentProvider(\n provider: AgentEnvironmentProviderRef,\n registry?: AgentEnvironmentProviderRegistry,\n): AgentEnvironmentProvider {\n if (typeof provider !== 'string') return provider\n if (!registry) {\n throw new ValidationError(\n `agent environment provider \"${provider}\" requires an AgentEnvironmentProviderRegistry`,\n )\n }\n return registry.require(provider)\n}\n\n/** Options for exposing an `AgentEnvironmentProvider` through the legacy sandbox client port.\n * @experimental */\nexport interface ProviderAsSandboxClientOptions {\n defaults?: Partial<CreateAgentEnvironmentInput>\n requireTerminalEvent?: boolean\n mapCreateOptions?: (\n options: CreateSandboxOptions | undefined,\n ) => Partial<CreateAgentEnvironmentInput>\n}\n\n/** Adapt a neutral environment provider to the `SandboxClient` interface used by existing loop paths.\n * @experimental */\nexport function providerAsSandboxClient(\n provider: AgentEnvironmentProvider,\n options: ProviderAsSandboxClientOptions = {},\n): SandboxClient {\n return {\n async create(createOptions?: CreateSandboxOptions): Promise<SandboxInstance> {\n const mapped = {\n ...(options.defaults ?? {}),\n ...createInputFromSandboxOptions(createOptions),\n ...(options.mapCreateOptions?.(createOptions) ?? {}),\n }\n if (mapped.profile === undefined) {\n throw new ValidationError(\n `providerAsSandboxClient(${provider.name}): profile required in defaults or CreateSandboxOptions.backend.profile`,\n )\n }\n const environment = await provider.create(mapped as CreateAgentEnvironmentInput)\n return environmentAsSandboxInstance(environment, {\n requireTerminalEvent: options.requireTerminalEvent ?? true,\n })\n },\n }\n}\n\n/** Options for wrapping the current Tangle sandbox client as an environment provider.\n * @experimental */\nexport interface SandboxClientProviderOptions {\n name?: string\n defaultBackend?: BackendType\n capabilities?:\n | AgentEnvironmentCapabilities\n | (() => AgentEnvironmentCapabilities | Promise<AgentEnvironmentCapabilities>)\n validateProfile?: (\n profile: AgentProfileRef,\n ) => AgentProfileValidationResult | Promise<AgentProfileValidationResult>\n mapCreateInput?: (input: CreateAgentEnvironmentInput) => CreateSandboxOptions\n}\n\n/** Adapt a `SandboxClient` into the shared `AgentEnvironmentProvider` contract.\n * @experimental */\nexport function sandboxClientAsProvider(\n client: SandboxClient,\n options: SandboxClientProviderOptions = {},\n): AgentEnvironmentProvider {\n const providerName = options.name ?? 'tangle-sandbox'\n return {\n name: providerName,\n capabilities: async () => {\n if (options.capabilities) {\n return typeof options.capabilities === 'function'\n ? options.capabilities()\n : options.capabilities\n }\n return defaultTangleSandboxCapabilities()\n },\n ...(options.validateProfile ? { validateProfile: options.validateProfile } : {}),\n async create(input: CreateAgentEnvironmentInput): Promise<AgentEnvironment> {\n const createOptions =\n options.mapCreateInput?.(input) ??\n sandboxOptionsFromCreateInput(input, options.defaultBackend ?? 'opencode')\n const box = await client.create(createOptions)\n return sandboxInstanceAsEnvironment(box, providerName, client)\n },\n ...(hasGet(client)\n ? {\n async get(id: string): Promise<AgentEnvironment | null> {\n const box = await client.get(id)\n return box ? sandboxInstanceAsEnvironment(box, providerName, client) : null\n },\n }\n : {}),\n ...(hasList(client)\n ? {\n async list(query?: AgentEnvironmentQuery): Promise<AgentEnvironmentSummary[]> {\n const boxes = await client.list(query?.providerOptions)\n return boxes.map((box) => ({\n id: String(box.id),\n provider: providerName,\n name: typeof box.name === 'string' ? box.name : undefined,\n status: statusFromUnknown(readBoxStatus(box)),\n metadata: readBoxMetadata(box),\n }))\n },\n }\n : {}),\n }\n}\n\n/** Options for running a provider as a supervise-mode executor.\n * @experimental */\nexport interface ProviderExecutorOptions {\n defaults?: Partial<CreateAgentEnvironmentInput>\n runtime?: Runtime\n destroyOnSettle?: boolean\n requireTerminalEvent?: boolean\n taskToTurn?: (task: unknown, specProfile: AgentProfile) => AgentTurnInput\n}\n\n/** Adapt an environment provider into an `ExecutorFactory` for `createExecutor`.\n * @experimental */\nexport function providerAsExecutor(\n provider: AgentEnvironmentProvider,\n options: ProviderExecutorOptions = {},\n): ExecutorFactory<unknown> {\n return (spec, ctx) => createProviderExecutor(provider, spec.profile, ctx, options)\n}\n\nfunction createProviderExecutor(\n provider: AgentEnvironmentProvider,\n profile: AgentProfile,\n ctx: ExecutorContext,\n options: ProviderExecutorOptions,\n): Executor<unknown> {\n const controller = new AbortController()\n const abortIfSignalled = () => {\n if (ctx.signal.aborted) controller.abort()\n }\n abortIfSignalled()\n if (!ctx.signal.aborted) ctx.signal.addEventListener('abort', abortIfSignalled, { once: true })\n\n let environment: AgentEnvironment | undefined\n let artifact: ExecutorResult<unknown> | undefined\n\n return {\n runtime: options.runtime ?? (provider.name as Runtime),\n execute(task, signal): AsyncIterable<UsageEvent> {\n return streamProviderExecutor({\n provider,\n profile,\n task,\n signal,\n controller,\n options,\n onEnvironment: (env) => {\n environment = env\n },\n onArtifact: (next) => {\n artifact = next\n },\n })\n },\n async teardown(_grace): Promise<{ destroyed: boolean }> {\n controller.abort()\n await environment?.destroy?.()\n return { destroyed: true }\n },\n resultArtifact(): ExecutorResult<unknown> {\n if (!artifact) {\n throw new ValidationError(\n `providerAsExecutor(${provider.name}): resultArtifact() read before stream drained`,\n )\n }\n return artifact\n },\n }\n}\n\ninterface StreamProviderExecutorArgs {\n provider: AgentEnvironmentProvider\n profile: AgentProfile\n task: unknown\n signal: AbortSignal\n controller: AbortController\n options: ProviderExecutorOptions\n onEnvironment: (environment: AgentEnvironment) => void\n onArtifact: (artifact: ExecutorResult<unknown>) => void\n}\n\nasync function* streamProviderExecutor(\n args: StreamProviderExecutorArgs,\n): AsyncIterable<UsageEvent> {\n const started = Date.now()\n const linked = mergeAbortSignals(args.signal, args.controller.signal)\n const environment = await args.provider.create({\n ...(args.options.defaults ?? {}),\n profile: args.profile,\n signal: linked,\n })\n args.onEnvironment(environment)\n\n const turn =\n args.options.taskToTurn?.(args.task, args.profile) ?? taskToTurnInput(args.task, linked)\n const events: AgentEnvironmentEvent[] = []\n const tokens = zeroTokenUsage()\n let usd = 0\n let text = ''\n let terminal = false\n try {\n for await (const event of environment.stream({ ...turn, signal: linked })) {\n events.push(event)\n text += textFromEnvironmentEvent(event)\n const usage = usageFromEnvironmentEvent(event)\n if (usage.input || usage.output) {\n tokens.input += usage.input\n tokens.output += usage.output\n yield { kind: 'tokens', input: usage.input, output: usage.output }\n }\n if (usage.usd) {\n usd += usage.usd\n yield { kind: 'cost', usd: usage.usd }\n }\n if (isTerminalEnvironmentEvent(event)) terminal = true\n }\n if ((args.options.requireTerminalEvent ?? true) && !terminal) {\n throw new ValidationError(\n `providerAsExecutor(${args.provider.name}): stream ended without a terminal result/done/status event`,\n )\n }\n yield { kind: 'iteration' }\n const result = resultFromEvents(events, text)\n const spent: Spend = {\n iterations: 1,\n tokens,\n usd,\n ms: Date.now() - started,\n }\n args.onArtifact({\n outRef: contentRef(`provider:${args.provider.name}`, result),\n out: result,\n spent,\n })\n } finally {\n if (args.options.destroyOnSettle ?? true) await environment.destroy?.()\n }\n}\n\nfunction createInputFromSandboxOptions(\n options: CreateSandboxOptions | undefined,\n): Partial<CreateAgentEnvironmentInput> {\n const profile = options?.backend?.profile as AgentProfileRef | undefined\n const backend = options?.backend?.type\n return {\n ...(profile !== undefined ? { profile } : {}),\n ...(backend ? { backend } : {}),\n workspace: {\n ...(options?.environment ? { environment: options.environment } : {}),\n ...(options?.image ? { image: options.image } : {}),\n ...(options?.git?.url ? { repoUrl: options.git.url } : {}),\n ...(options?.git?.ref ? { gitRef: options.git.ref } : {}),\n },\n ...(options?.resources ? { resources: options.resources as ResourceRequest } : {}),\n ...(options?.env ? { env: options.env } : {}),\n ...(options?.secrets ? { secrets: options.secrets } : {}),\n ...(options?.metadata ? { metadata: options.metadata } : {}),\n ...(options?.name ? { name: options.name } : {}),\n ...(options?.idempotencyKey ? { idempotencyKey: options.idempotencyKey } : {}),\n providerOptions: { sandboxCreateOptions: options ?? {} },\n }\n}\n\nfunction sandboxOptionsFromCreateInput(\n input: CreateAgentEnvironmentInput,\n defaultBackend: BackendType,\n): CreateSandboxOptions {\n const backendType = (input.backend ?? defaultBackend) as BackendType\n const workspace = input.workspace ?? {}\n const providerOptions = input.providerOptions?.sandboxCreateOptions\n const base =\n providerOptions && typeof providerOptions === 'object'\n ? ({ ...(providerOptions as CreateSandboxOptions) } as CreateSandboxOptions)\n : ({} satisfies CreateSandboxOptions)\n return {\n ...base,\n ...(workspace.environment ? { environment: workspace.environment } : {}),\n ...(workspace.image ? { image: workspace.image } : {}),\n ...(workspace.repoUrl ? { git: { url: workspace.repoUrl, ref: workspace.gitRef } } : {}),\n ...(input.resources ? { resources: input.resources as CreateSandboxOptions['resources'] } : {}),\n ...(input.env ? { env: input.env } : {}),\n ...(Array.isArray(input.secrets) ? { secrets: input.secrets } : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n ...(input.name ? { name: input.name } : {}),\n ...(input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {}),\n backend: {\n ...(base.backend ?? {}),\n type: backendType,\n profile: input.profile,\n },\n }\n}\n\nfunction environmentAsSandboxInstance(\n environment: AgentEnvironment,\n options: { requireTerminalEvent: boolean },\n): SandboxInstance {\n const box = {\n id: environment.id,\n name: environment.name,\n status: 'running',\n async refresh(): Promise<void> {\n await environment.refresh?.()\n },\n async *streamPrompt(\n message: string | InputPart[],\n promptOptions?: PromptOptions,\n ): AsyncGenerator<SandboxEvent> {\n let terminal = false\n const input = turnInputFromPrompt(message, promptOptions)\n for await (const event of environment.stream(input)) {\n if (isTerminalEnvironmentEvent(event)) terminal = true\n const usageEvent = usageSandboxEvent(event)\n if (usageEvent) yield usageEvent\n yield sandboxEventFromEnvironmentEvent(event)\n }\n if (options.requireTerminalEvent && !terminal) {\n throw new ValidationError(\n `providerAsSandboxClient(${environment.provider}): stream ended without a terminal result/done/status event`,\n )\n }\n },\n async prompt(\n message: string | InputPart[],\n promptOptions?: PromptOptions,\n ): Promise<PromptResult> {\n const events: AgentEnvironmentEvent[] = []\n let text = ''\n let usage: TokenUsage | undefined\n let terminal = false\n for await (const event of environment.stream(turnInputFromPrompt(message, promptOptions))) {\n events.push(event)\n if (isTerminalEnvironmentEvent(event)) terminal = true\n text += textFromEnvironmentEvent(event)\n usage = mergeTokenUsage(usage, event.usage)\n }\n if (options.requireTerminalEvent && !terminal) {\n throw new ValidationError(\n `providerAsSandboxClient(${environment.provider}): prompt ended without a terminal result/done/status event`,\n )\n }\n return promptResultCompat(\n {\n response: resultFromEvents(events, text).content,\n success: true,\n durationMs: 0,\n ...(usage ? { usage } : {}),\n },\n 'success',\n )\n },\n ...(environment.dispatch\n ? {\n async dispatchPrompt(message: string | InputPart[], promptOptions?: PromptOptions) {\n const session = await environment.dispatch?.(\n turnInputFromPrompt(message, promptOptions),\n )\n if (!session)\n throw new ValidationError('providerAsSandboxClient: dispatch returned no session')\n return sandboxDispatchResultFromSessionRef(session)\n },\n }\n : {}),\n ...(environment.session\n ? {\n session(id: string) {\n return sessionAsSandboxSession(environment.session?.(id))\n },\n }\n : {}),\n ...(environment.read ? { read: environment.read.bind(environment) } : {}),\n ...(environment.write ? { write: environment.write.bind(environment) } : {}),\n ...(environment.exec\n ? {\n exec: environment.exec.bind(environment),\n }\n : {}),\n ...(environment.checkpoint\n ? {\n async checkpoint(checkpointOptions?: CheckpointRequest) {\n const checkpoint = await environment.checkpoint?.(checkpointOptions)\n return { checkpointId: checkpoint?.id, id: checkpoint?.id }\n },\n }\n : {}),\n ...(environment.fork\n ? {\n async fork(checkpointId: string, forkOptions?: ForkRequest) {\n const forked = await environment.fork?.({ id: checkpointId }, forkOptions)\n if (!forked)\n throw new ValidationError('providerAsSandboxClient: fork returned no environment')\n return environmentAsSandboxInstance(forked, options)\n },\n }\n : {}),\n async delete(): Promise<void> {\n await environment.destroy?.()\n },\n }\n return box as unknown as SandboxInstance\n}\n\nfunction sandboxInstanceAsEnvironment(\n box: SandboxInstance,\n providerName: string,\n client: SandboxClient,\n): AgentEnvironment {\n const environment: AgentEnvironment = {\n id: String(box.id),\n provider: providerName,\n ...(typeof box.name === 'string' ? { name: box.name } : {}),\n async status(): Promise<AgentEnvironmentStatus> {\n await maybeRefresh(box)\n return statusFromUnknown(readBoxStatus(box))\n },\n async *stream(input: AgentTurnInput): AsyncIterable<AgentEnvironmentEvent> {\n for await (const event of box.streamPrompt(\n promptFromTurnInput(input),\n promptOptionsFromTurnInput(input),\n )) {\n yield environmentEventFromSandboxEvent(event)\n }\n },\n ...(hasDispatchPrompt(box)\n ? {\n async dispatch(input: AgentTurnInput): Promise<AgentSessionRef> {\n const dispatched = await box.dispatchPrompt(\n promptFromTurnInput(input),\n promptOptionsFromTurnInput(input),\n )\n return sessionRefFromSandboxDispatch(dispatched, providerName)\n },\n }\n : {}),\n ...(hasSession(box)\n ? {\n session(id: string): AgentSession {\n return sandboxSessionAsAgentSession(box.session(id))\n },\n }\n : {}),\n ...(hasRead(box) ? { read: box.read.bind(box) } : {}),\n ...(hasWrite(box) ? { write: box.write.bind(box) } : {}),\n ...(hasExec(box)\n ? {\n async exec(command: string, options?: ExecRequest): Promise<ExecResult> {\n return execResultFromSandboxExecResult(await box.exec(command, options as never))\n },\n }\n : {}),\n ...(hasCheckpoint(box)\n ? {\n async checkpoint(options?: CheckpointRequest): Promise<CheckpointRef> {\n const result = await box.checkpoint(options as never)\n return { id: checkpointIdFromResult(result), provider: providerName }\n },\n }\n : {}),\n ...(hasFork(box)\n ? {\n async fork(checkpoint: CheckpointRef, options?: ForkRequest): Promise<AgentEnvironment> {\n const forked = await box.fork(checkpoint.id, options as never)\n return sandboxInstanceAsEnvironment(forked, providerName, client)\n },\n }\n : {}),\n async placement(): Promise<PlacementInfo> {\n return placementInfoFromLoopPlacement(client.describePlacement?.(box), box)\n },\n async refresh(): Promise<void> {\n await maybeRefresh(box)\n },\n async destroy(): Promise<void> {\n await destroyBox(box)\n },\n }\n return environment\n}\n\nfunction sandboxSessionAsAgentSession(session: SandboxSessionLike): AgentSession {\n return {\n id: session.id,\n async status(): Promise<AgentSessionStatus | null> {\n const status = await session.status()\n if (!status) return null\n return sessionStatusFromUnknown((status as { status?: unknown }).status)\n },\n async *events(options?: {\n since?: string\n signal?: AbortSignal\n }): AsyncIterable<AgentEnvironmentEvent> {\n for await (const event of session.events(options))\n yield environmentEventFromSandboxEvent(event)\n },\n async result(): Promise<AgentTurnResult> {\n return agentTurnResultFromPromptResult(await session.result())\n },\n async prompt(input: AgentTurnInput): Promise<AgentTurnResult> {\n return agentTurnResultFromPromptResult(\n await session.prompt(promptFromTurnInput(input), promptOptionsFromTurnInput(input)),\n )\n },\n cancel(): Promise<void> {\n return session.cancel()\n },\n }\n}\n\nfunction sessionAsSandboxSession(session: AgentSession | undefined): unknown {\n if (!session) throw new ValidationError('providerAsSandboxClient: session(id) returned undefined')\n return {\n id: session.id,\n status: session.status.bind(session),\n async *events(options?: {\n since?: string\n signal?: AbortSignal\n }): AsyncGenerator<SandboxEvent> {\n for await (const event of session.events(options))\n yield sandboxEventFromEnvironmentEvent(event)\n },\n async result(): Promise<PromptResult> {\n return promptResultFromAgentTurnResult(await session.result())\n },\n async prompt(message: string | InputPart[], options?: PromptOptions): Promise<PromptResult> {\n return promptResultFromAgentTurnResult(\n await session.prompt(turnInputFromPrompt(message, options)),\n )\n },\n cancel: session.cancel.bind(session),\n }\n}\n\nfunction environmentEventFromSandboxEvent(event: SandboxEvent): AgentEnvironmentEvent {\n const data =\n event.data && typeof event.data === 'object'\n ? (event.data as Record<string, unknown>)\n : ({} as Record<string, unknown>)\n return {\n type: String(event.type),\n data,\n ...(event.id ? { id: event.id } : {}),\n usage: tokenUsageFromData(data),\n providerEvent: event,\n }\n}\n\nfunction sandboxEventFromEnvironmentEvent(event: AgentEnvironmentEvent): SandboxEvent {\n return {\n type: event.type,\n data: {\n ...event.data,\n ...(event.usage ? { usage: tokenUsageData(event.usage) } : {}),\n },\n ...(event.id ? { id: event.id } : {}),\n }\n}\n\nfunction usageSandboxEvent(event: AgentEnvironmentEvent): SandboxEvent | undefined {\n if (!event.usage || isUsageType(event.type)) return undefined\n const usage = tokenUsageData(event.usage)\n if (\n usage.inputTokens === undefined &&\n usage.outputTokens === undefined &&\n usage.totalCostUsd === undefined\n ) {\n return undefined\n }\n return { type: 'llm_call', data: usage }\n}\n\nfunction tokenUsageData(usage: TokenUsage): Record<string, number | undefined> {\n return {\n inputTokens: usage.inputTokens,\n outputTokens: usage.outputTokens,\n totalCostUsd: usage.cost,\n }\n}\n\nfunction turnInputFromPrompt(\n message: string | InputPart[],\n options?: PromptOptions,\n): AgentTurnInput {\n return {\n ...(typeof message === 'string' ? { prompt: message } : { parts: message }),\n ...(options?.sessionId ? { sessionId: options.sessionId } : {}),\n ...(options?.model ? { model: options.model } : {}),\n ...(options?.timeoutMs ? { timeoutMs: options.timeoutMs } : {}),\n ...(options?.executionId ? { executionId: options.executionId } : {}),\n ...(options?.lastEventId ? { lastEventId: options.lastEventId } : {}),\n ...(options?.turnId ? { turnId: options.turnId } : {}),\n ...(options?.detach !== undefined ? { detach: options.detach } : {}),\n ...(options?.context ? { context: options.context } : {}),\n ...(options?.signal ? { signal: options.signal } : {}),\n ...(options?.backend ? { providerOptions: { backend: options.backend } } : {}),\n }\n}\n\nfunction promptFromTurnInput(input: AgentTurnInput): string | InputPart[] {\n if (input.parts) return input.parts\n return input.prompt ?? ''\n}\n\nfunction promptOptionsFromTurnInput(input: AgentTurnInput): PromptOptions {\n return {\n ...(input.sessionId ? { sessionId: input.sessionId } : {}),\n ...(input.model ? { model: input.model } : {}),\n ...(input.timeoutMs ? { timeoutMs: input.timeoutMs } : {}),\n ...(input.context ? { context: input.context } : {}),\n ...(input.signal ? { signal: input.signal } : {}),\n ...(input.executionId ? { executionId: input.executionId } : {}),\n ...(input.lastEventId ? { lastEventId: input.lastEventId } : {}),\n ...(input.turnId ? { turnId: input.turnId } : {}),\n ...(input.detach !== undefined ? { detach: input.detach } : {}),\n }\n}\n\nfunction taskToTurnInput(task: unknown, signal: AbortSignal): AgentTurnInput {\n return { prompt: taskToPrompt(task), signal }\n}\n\nfunction taskToPrompt(task: unknown): string {\n if (typeof task === 'string') return task\n if (task && typeof task === 'object') {\n const record = task as Record<string, unknown>\n for (const key of ['prompt', 'content', 'task', 'message']) {\n if (typeof record[key] === 'string') return record[key]\n }\n }\n return JSON.stringify(task)\n}\n\nfunction resultFromEvents(\n events: AgentEnvironmentEvent[],\n fallbackText: string,\n): { content: string; events: AgentEnvironmentEvent[] } {\n for (let i = events.length - 1; i >= 0; i -= 1) {\n const event = events[i]\n const text = event ? resultTextFromData(event.data) : undefined\n if (text !== undefined) return { content: text, events }\n }\n return { content: fallbackText, events }\n}\n\nfunction textFromEnvironmentEvent(event: AgentEnvironmentEvent): string {\n if (\n typeof event.normalized === 'object' &&\n event.normalized &&\n event.normalized.type === 'message.part.updated'\n ) {\n return typeof event.normalized.delta === 'string' ? event.normalized.delta : ''\n }\n const data = event.data\n for (const key of ['delta', 'chunk', 'content', 'text']) {\n if (typeof data[key] === 'string' && !isTerminalEnvironmentEvent(event)) return data[key]\n }\n return ''\n}\n\nfunction resultTextFromData(data: Record<string, unknown>): string | undefined {\n for (const key of ['finalText', 'text', 'response', 'resultSummary', 'content']) {\n if (typeof data[key] === 'string') return data[key]\n }\n return undefined\n}\n\nfunction isTerminalEnvironmentEvent(event: AgentEnvironmentEvent): boolean {\n if (event.type === 'result' || event.type === 'done' || event.type === 'final') return true\n if (event.type.endsWith('.completed') || event.type.endsWith('.failed')) return true\n if (event.type === 'status') {\n const status = event.data.status\n return status === 'completed' || status === 'failed' || status === 'cancelled'\n }\n return false\n}\n\nfunction isUsageType(type: string): boolean {\n return type === 'llm_call' || type === 'usage' || type === 'cost.usage'\n}\n\nfunction usageFromEnvironmentEvent(event: AgentEnvironmentEvent): {\n input: number\n output: number\n usd: number\n} {\n const usage = event.usage ?? tokenUsageFromData(event.data)\n return {\n input: finiteNumber(usage?.inputTokens) ?? 0,\n output: finiteNumber(usage?.outputTokens) ?? 0,\n usd:\n finiteNumber(usage?.cost) ??\n finiteNumber(event.data.costUsd) ??\n finiteNumber(event.data.totalCostUsd) ??\n 0,\n }\n}\n\nfunction tokenUsageFromData(data: Record<string, unknown>): TokenUsage | undefined {\n const usageRecord =\n data.usage && typeof data.usage === 'object'\n ? (data.usage as Record<string, unknown>)\n : data.tokenUsage && typeof data.tokenUsage === 'object'\n ? (data.tokenUsage as Record<string, unknown>)\n : data\n const inputTokens =\n finiteNumber(usageRecord.inputTokens) ??\n finiteNumber(usageRecord.tokensIn) ??\n finiteNumber(usageRecord.prompt_tokens)\n const outputTokens =\n finiteNumber(usageRecord.outputTokens) ??\n finiteNumber(usageRecord.tokensOut) ??\n finiteNumber(usageRecord.completion_tokens)\n const cost =\n finiteNumber(usageRecord.cost) ??\n finiteNumber(usageRecord.costUsd) ??\n finiteNumber(usageRecord.totalCostUsd) ??\n finiteNumber(data.costUsd) ??\n finiteNumber(data.totalCostUsd)\n if (inputTokens === undefined && outputTokens === undefined && cost === undefined)\n return undefined\n return {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n ...(cost !== undefined ? { cost } : {}),\n }\n}\n\nfunction mergeTokenUsage(\n left: TokenUsage | undefined,\n right: TokenUsage | undefined,\n): TokenUsage | undefined {\n if (!left) return right\n if (!right) return left\n return {\n inputTokens: left.inputTokens + right.inputTokens,\n outputTokens: left.outputTokens + right.outputTokens,\n ...(left.cost !== undefined || right.cost !== undefined\n ? { cost: (left.cost ?? 0) + (right.cost ?? 0) }\n : {}),\n }\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\ntype PromptResultCompatInput = {\n response?: string\n success: boolean\n error?: string\n traceId?: string\n durationMs: number\n usage?: PromptResult['usage']\n}\n\nfunction promptResultCompat(\n input: PromptResultCompatInput,\n status: 'success' | 'failed',\n): PromptResult {\n // sandbox 0.8 omitted `status`; sandbox 0.9 requires it. Emit it at runtime\n // while keeping this adapter type-checkable across the supported peer range.\n return { ...input, status } as unknown as PromptResult\n}\n\nfunction promptResultFromAgentTurnResult(result: AgentTurnResult): PromptResult {\n return promptResultCompat(\n {\n response: result.text,\n success: result.success,\n durationMs: 0,\n ...(result.error ? { error: result.error } : {}),\n ...(result.usage ? { usage: result.usage } : {}),\n },\n result.success ? 'success' : 'failed',\n )\n}\n\nfunction agentTurnResultFromPromptResult(result: PromptResult): AgentTurnResult {\n const record = result as unknown as Record<string, unknown>\n const text =\n typeof record.response === 'string'\n ? record.response\n : typeof record.text === 'string'\n ? record.text\n : typeof record.finalText === 'string'\n ? record.finalText\n : ''\n const success = typeof record.success === 'boolean' ? record.success : true\n return {\n text,\n success,\n ...(typeof record.error === 'string' ? { error: record.error } : {}),\n usage: tokenUsageFromData(record),\n }\n}\n\nfunction sandboxDispatchResultFromSessionRef(session: AgentSessionRef): Record<string, unknown> {\n const hasStatus = session.metadata && Object.hasOwn(session.metadata, 'status')\n const status = hasStatus ? sessionStatusFromUnknown(session.metadata?.status) : 'running'\n return {\n sessionId: session.id,\n status,\n alreadyExisted: session.metadata?.alreadyExisted === true,\n }\n}\n\nfunction sessionRefFromSandboxDispatch(dispatched: unknown, providerName: string): AgentSessionRef {\n const record =\n dispatched && typeof dispatched === 'object'\n ? (dispatched as Record<string, unknown>)\n : undefined\n const id = record?.sessionId ?? record?.id\n if (typeof id !== 'string' || id.length === 0) {\n throw new ValidationError('sandboxClientAsProvider: dispatch returned no session id')\n }\n if (!record) {\n throw new ValidationError('sandboxClientAsProvider: dispatch returned no session record')\n }\n return {\n id,\n provider: providerName,\n metadata: {\n ...(record.status ? { status: record.status } : {}),\n ...(record.alreadyExisted !== undefined ? { alreadyExisted: record.alreadyExisted } : {}),\n },\n }\n}\n\nfunction execResultFromSandboxExecResult(result: SandboxExecResult): ExecResult {\n const record = result as unknown as Record<string, unknown>\n const exitCode = finiteNumber(record.exitCode) ?? finiteNumber(record.code)\n if (exitCode === undefined) {\n throw new ValidationError('sandboxClientAsProvider: exec returned no exit code')\n }\n return {\n exitCode,\n stdout: typeof record.stdout === 'string' ? record.stdout : '',\n stderr: typeof record.stderr === 'string' ? record.stderr : '',\n }\n}\n\nfunction statusFromUnknown(status: unknown): AgentEnvironmentStatus {\n if (status === 'pending' || status === 'provisioning' || status === 'running') return status\n if (status === 'stopped' || status === 'failed' || status === 'expired') return status\n if (status === 'completed') return 'stopped'\n if (status === 'cancelled') return 'stopped'\n return 'unknown'\n}\n\nfunction sessionStatusFromUnknown(status: unknown): AgentSessionStatus | null {\n if (status === 'completed' || status === 'cancelled') return status\n return statusFromUnknown(status)\n}\n\nfunction readBoxStatus(box: SandboxInstance): unknown {\n return (box as unknown as { status?: unknown }).status\n}\n\nfunction readBoxMetadata(box: SandboxInstance): Record<string, unknown> | undefined {\n const metadata = (box as unknown as { metadata?: unknown }).metadata\n return metadata && typeof metadata === 'object'\n ? (metadata as Record<string, unknown>)\n : undefined\n}\n\nasync function maybeRefresh(box: SandboxInstance): Promise<void> {\n const refresh = (box as unknown as { refresh?: () => Promise<void> }).refresh\n if (typeof refresh === 'function') await refresh.call(box)\n}\n\nasync function destroyBox(box: SandboxInstance): Promise<void> {\n const deleteBox = (box as unknown as { delete?: () => Promise<void> }).delete\n if (typeof deleteBox === 'function') await deleteBox.call(box)\n}\n\nfunction placementInfoFromLoopPlacement(\n placement: LoopSandboxPlacement | undefined,\n box: SandboxInstance,\n): PlacementInfo {\n if (!placement) return { kind: 'sandbox', sandboxId: String(box.id) }\n return {\n kind: placement.kind === 'fleet' ? 'fleet' : 'sandbox',\n ...(placement.sandboxId ? { sandboxId: placement.sandboxId } : { sandboxId: String(box.id) }),\n ...(placement.fleetId ? { fleetId: placement.fleetId } : {}),\n ...(placement.machineId ? { machineId: placement.machineId } : {}),\n }\n}\n\nfunction checkpointIdFromResult(result: unknown): string {\n const record = result && typeof result === 'object' ? (result as Record<string, unknown>) : {}\n const id = record.checkpointId ?? record.id\n if (typeof id !== 'string' || id.length === 0) {\n throw new ValidationError('sandboxClientAsProvider: checkpoint returned no checkpoint id')\n }\n return id\n}\n\nfunction defaultTangleSandboxCapabilities(): AgentEnvironmentCapabilities {\n return {\n profile: {\n namedProfiles: true,\n systemPrompt: true,\n instructions: true,\n tools: true,\n permissions: true,\n mcp: true,\n subagents: true,\n resources: {\n files: true,\n instructions: true,\n tools: true,\n skills: true,\n agents: true,\n commands: true,\n },\n hooks: true,\n modes: true,\n runtimeUpdate: true,\n validation: true,\n },\n streaming: { live: true, replay: true, detach: true, turnIdempotency: true },\n sessions: { continue: true, list: true, messages: true },\n workspace: { read: true, write: true, exec: true, git: true, upload: true, download: true },\n branching: { checkpoint: true, fork: true },\n placement: true,\n usage: true,\n confidential: true,\n }\n}\n\nfunction mergeAbortSignals(a: AbortSignal, b: AbortSignal): AbortSignal {\n const controller = new AbortController()\n const abort = () => controller.abort()\n if (a.aborted || b.aborted) controller.abort()\n else {\n a.addEventListener('abort', abort, { once: true })\n b.addEventListener('abort', abort, { once: true })\n }\n return controller.signal\n}\n\nfunction contentRef(prefix: string, value: unknown): string {\n let str: string\n try {\n str = JSON.stringify(value) ?? String(value)\n } catch {\n str = String(value)\n }\n let hash = 0x811c9dc5\n for (let i = 0; i < str.length; i += 1) {\n hash ^= str.charCodeAt(i)\n hash = Math.imul(hash, 0x01000193)\n }\n return `${prefix}:${(hash >>> 0).toString(16).padStart(8, '0')}`\n}\n\nfunction hasGet(\n client: SandboxClient,\n): client is SandboxClient & { get(id: string): Promise<SandboxInstance | null> } {\n return typeof (client as { get?: unknown }).get === 'function'\n}\n\nfunction hasList(\n client: SandboxClient,\n): client is SandboxClient & { list(options?: unknown): Promise<SandboxInstance[]> } {\n return typeof (client as { list?: unknown }).list === 'function'\n}\n\nfunction hasDispatchPrompt(box: SandboxInstance): box is SandboxInstance & {\n dispatchPrompt(message: string | InputPart[], options?: PromptOptions): Promise<unknown>\n} {\n return typeof (box as { dispatchPrompt?: unknown }).dispatchPrompt === 'function'\n}\n\nfunction hasSession(\n box: SandboxInstance,\n): box is SandboxInstance & { session(id: string): SandboxSessionLike } {\n return typeof (box as { session?: unknown }).session === 'function'\n}\n\nfunction hasRead(box: SandboxInstance): box is SandboxInstance & {\n read(path: string, options?: { sessionId?: string }): Promise<string>\n} {\n return typeof (box as { read?: unknown }).read === 'function'\n}\n\nfunction hasWrite(\n box: SandboxInstance,\n): box is SandboxInstance & { write(path: string, content: string): Promise<void> } {\n return typeof (box as { write?: unknown }).write === 'function'\n}\n\nfunction hasExec(box: SandboxInstance): box is SandboxInstance & {\n exec(command: string, options?: unknown): Promise<SandboxExecResult>\n} {\n return typeof (box as { exec?: unknown }).exec === 'function'\n}\n\nfunction hasCheckpoint(\n box: SandboxInstance,\n): box is SandboxInstance & { checkpoint(options?: unknown): Promise<unknown> } {\n return typeof (box as { checkpoint?: unknown }).checkpoint === 'function'\n}\n\nfunction hasFork(box: SandboxInstance): box is SandboxInstance & {\n fork(checkpointId: string, options?: unknown): Promise<SandboxInstance>\n} {\n return typeof (box as { fork?: unknown }).fork === 'function'\n}\n\ninterface SandboxSessionLike {\n readonly id: string\n status(): Promise<unknown | null>\n events(options?: { since?: string; signal?: AbortSignal }): AsyncIterable<SandboxEvent>\n result(): Promise<PromptResult>\n prompt(message: string | InputPart[], options?: PromptOptions): Promise<PromptResult>\n cancel(): Promise<void>\n}\n"],"mappings":"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","names":[]}
|