@tangle-network/agent-runtime 0.121.0 → 0.123.1

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 (62) hide show
  1. package/dist/{activation-DdIpwQ0k.js → activation-DhWJ3p8N.js} +3 -3
  2. package/dist/{activation-DdIpwQ0k.js.map → activation-DhWJ3p8N.js.map} +1 -1
  3. package/dist/agent.d.ts +1 -1
  4. package/dist/agent.js +3 -3
  5. package/dist/candidate-execution/index.js +4 -4
  6. package/dist/{candidate-execution-DDkSRPjY.js → candidate-execution-BFpq-Xi6.js} +4 -4
  7. package/dist/{candidate-execution-DDkSRPjY.js.map → candidate-execution-BFpq-Xi6.js.map} +1 -1
  8. package/dist/{environment-provider-DChfYm2-.js → environment-provider-DqFS6FSZ.js} +6 -86
  9. package/dist/environment-provider-DqFS6FSZ.js.map +1 -0
  10. package/dist/{environment-provider-Bh4nX2qt.d.ts → environment-provider-PM9PeW_J.d.ts} +109 -11
  11. package/dist/environment-provider.d.ts +1 -1
  12. package/dist/environment-provider.js +1 -1
  13. package/dist/{improvement-cycle-zjR-MXwK.js → improvement-cycle-IJgCbKWQ.js} +6 -6
  14. package/dist/improvement-cycle-IJgCbKWQ.js.map +1 -0
  15. package/dist/{index-BLsKcxNd.d.ts → index-4NcThsDc.d.ts} +3 -3
  16. package/dist/{index-I35151Fr.d.ts → index-CQBioeAj.d.ts} +5 -5
  17. package/dist/{index-CGADWaa_.d.ts → index-xP27vtnt.d.ts} +1213 -849
  18. package/dist/index.d.ts +6 -6
  19. package/dist/index.js +12 -12
  20. package/dist/intelligence.d.ts +1 -1
  21. package/dist/intelligence.js +6 -6
  22. package/dist/kernel.d.ts +3 -3
  23. package/dist/kernel.js +7 -7
  24. package/dist/{knowledge-B1B3BsQZ.js → knowledge-BOHj6nGh.js} +5 -5
  25. package/dist/{knowledge-B1B3BsQZ.js.map → knowledge-BOHj6nGh.js.map} +1 -1
  26. package/dist/knowledge.d.ts +1 -1
  27. package/dist/knowledge.js +1 -1
  28. package/dist/{loop-runner-bin-BeG9vTdE.d.ts → loop-runner-bin-DMnNxZHw.d.ts} +3 -3
  29. package/dist/{loop-runner-bin-CXJWdfJ4.js → loop-runner-bin-DUM37LLw.js} +3 -3
  30. package/dist/{loop-runner-bin-CXJWdfJ4.js.map → loop-runner-bin-DUM37LLw.js.map} +1 -1
  31. package/dist/loop-runner-bin.d.ts +1 -1
  32. package/dist/loop-runner-bin.js +1 -1
  33. package/dist/mcp/bin.js +2 -2
  34. package/dist/mcp/index.d.ts +3 -3
  35. package/dist/mcp/index.js +5 -5
  36. package/dist/{openai-tools-CVgLNp04.js → openai-tools-Bm1SDJIp.js} +2 -2
  37. package/dist/{openai-tools-CVgLNp04.js.map → openai-tools-Bm1SDJIp.js.map} +1 -1
  38. package/dist/{prepare-DpV6np9e.js → prepare--8EvLqCr.js} +2 -2
  39. package/dist/{prepare-DpV6np9e.js.map → prepare--8EvLqCr.js.map} +1 -1
  40. package/dist/primeintellect/index.d.ts +1 -1
  41. package/dist/{protected-model-port-vQLBRoAQ.js → protected-model-port-CXVfOUu_.js} +2 -2
  42. package/dist/{protected-model-port-vQLBRoAQ.js.map → protected-model-port-CXVfOUu_.js.map} +1 -1
  43. package/dist/{runtime-Bp3NwC0A.js → runtime-DZblIf3R.js} +468 -56
  44. package/dist/runtime-DZblIf3R.js.map +1 -0
  45. package/dist/{spawn-journal-IeXpidO2.js → spawn-journal-DsZKDqeh.js} +5 -3
  46. package/dist/spawn-journal-DsZKDqeh.js.map +1 -0
  47. package/dist/{structural-rollout-DQHO3b2Y.js → structural-rollout-zY0oqQzO.js} +3 -3
  48. package/dist/{structural-rollout-DQHO3b2Y.js.map → structural-rollout-zY0oqQzO.js.map} +1 -1
  49. package/dist/{supervise-BHHMtwP9.js → supervise-Cx24b3lw.js} +480 -92
  50. package/dist/supervise-Cx24b3lw.js.map +1 -0
  51. package/dist/{supervisor-CpT9yAxL.js → supervisor-DpjO0Gmy.js} +231 -29
  52. package/dist/supervisor-DpjO0Gmy.js.map +1 -0
  53. package/dist/testing.js +12 -12
  54. package/dist/{workspace-archive-B4SkNJjw.js → workspace-archive-BQxvkypI.js} +2 -2
  55. package/dist/{workspace-archive-B4SkNJjw.js.map → workspace-archive-BQxvkypI.js.map} +1 -1
  56. package/package.json +10 -9
  57. package/dist/environment-provider-DChfYm2-.js.map +0 -1
  58. package/dist/improvement-cycle-zjR-MXwK.js.map +0 -1
  59. package/dist/runtime-Bp3NwC0A.js.map +0 -1
  60. package/dist/spawn-journal-IeXpidO2.js.map +0 -1
  61. package/dist/supervise-BHHMtwP9.js.map +0 -1
  62. package/dist/supervisor-CpT9yAxL.js.map +0 -1
@@ -1,16 +1,16 @@
1
1
  import { n as AnalystError, r as BackendTransportError, s as PlannerError, u as ValidationError } from "./errors-DEAvWQPy.js";
2
2
  import { i as normalizeBackendStreamEvent, o as newRuntimeSession, s as nowIso } from "./backends-CiOCyRHb.js";
3
- import { i as InMemorySpawnJournal, r as InMemoryResultBlobStore, v as isTraceAnalysisStore } from "./spawn-journal-IeXpidO2.js";
3
+ import { i as InMemorySpawnJournal, r as InMemoryResultBlobStore, v as isTraceAnalysisStore } from "./spawn-journal-DsZKDqeh.js";
4
4
  import { a as randomSuffix, c as stringifySafe, f as zeroTokenUsage, r as isAbortError, s as sleep, t as addTokenUsage } from "./util-MVgdwuIS.js";
5
5
  import { i as redactProtectedValue, r as redactProtectedReason } from "./protected-redaction--F3v1oo8.js";
6
- import { X as rollingDispatch, dt as routerBrain, gt as runBrainLoop, l as withDriverExecutor, m as settledToIteration, n as createSupervisor, pt as routerChatWithUsage } from "./supervisor-CpT9yAxL.js";
7
- import { C as observe, O as strategyAuthorMethod, b as sample, v as refine, x as sampleThenRefine, y as runAgentic } from "./structural-rollout-DQHO3b2Y.js";
8
- import { i as notifyRuntimeHookEvent } from "./runtime-hooks-C7iJOWm3.js";
6
+ import { _t as routerChatWithUsage, bt as runBrainLoop, en as isHarnessNativeModel, et as rollingDispatch, ht as routerBrain, l as withDriverExecutor, m as settledToIteration, n as createSupervisor } from "./supervisor-DpjO0Gmy.js";
7
+ import { C as observe, O as strategyAuthorMethod, b as sample, v as refine, x as sampleThenRefine, y as runAgentic } from "./structural-rollout-zY0oqQzO.js";
8
+ import { i as notifyRuntimeHookEvent, t as composeRuntimeHooks } from "./runtime-hooks-C7iJOWm3.js";
9
9
  import { a as notifySandboxEventObserver, i as mapSandboxToolEvent, r as mapSandboxEvent, t as createSandboxToolPartState } from "./sandbox-events-Yhd1GYWl.js";
10
- import { At as runAgentRounds, Kt as gateOnDeliverable, Mt as createSandboxLineage, Nt as probeSandboxCapabilities, bt as createExecutorRegistry, kt as defaultSelectWinner, n as supervise, wt as createPushTraceSource, xt as createWorktreeCliExecutor, yt as createExecutor } from "./supervise-BHHMtwP9.js";
10
+ import { Ct as createWorktreeCliExecutor, Et as createPushTraceSource, Ft as probeSandboxCapabilities, Mt as runAgentRounds, Pt as createSandboxLineage, Qt as kernelPromptRegistry, St as createExecutorRegistry, Zt as formatPromptHandle, jt as defaultSelectWinner, n as supervise, nn as gateOnDeliverable, r as workerFromBackend, xt as createExecutor } from "./supervise-Cx24b3lw.js";
11
11
  import { CODING_HARNESSES, InMemoryTraceStore, OUTPUT_VALUE, benjaminiHochberg, buildTrajectory, computeFindingId as computeFindingId$1, confidenceInterval, expandProfileAxes, harnessAxisOf, makeFinding as makeFinding$1, pairedBootstrap, paretoFrontier, scoreKnowledgeReadiness, wilcoxonSignedRank, wilson } from "@tangle-network/agent-eval";
12
12
  import { heldoutSignificance, runProfileMatrix } from "@tangle-network/agent-eval/campaign";
13
- import { canonicalCandidateDigest, validateAgentProfileSecurity } from "@tangle-network/agent-interface";
13
+ import { agentProfileSchema, canonicalCandidateDigest, validateAgentProfileSecurity } from "@tangle-network/agent-interface";
14
14
  import { mkdir, readFile, writeFile } from "node:fs/promises";
15
15
  import { appendFileSync, chmodSync, constants, copyFileSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readlinkSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
16
16
  import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -1297,6 +1297,36 @@ function resolveSandboxClient(opts) {
1297
1297
  //#endregion
1298
1298
  //#region src/runtime/steering-drivers.ts
1299
1299
  /**
1300
+ * Interpret a {@link SteeringDirectiveData} as a loop `Driver` — the ONE interpreter both
1301
+ * control policies share. The directive is data; only `applyContinuation` (how the caller's
1302
+ * opaque Task carries a steering string) remains code, exactly as `taskToPrompt` does.
1303
+ */
1304
+ function steeringDriver(directive, applyContinuation, name) {
1305
+ const driverName = name ?? directive.kind;
1306
+ const maxIterations = directive.maxTraversals;
1307
+ const continuationFor = (passed) => directive.kind === "naive" ? directive.continuation : passed ? directive.onPass : directive.onFail;
1308
+ const rationale = directive.kind === "naive" ? "naive fixed continuation (no grade signal)" : "dumb pass/fail-only continuation (no grader findings)";
1309
+ return {
1310
+ name: driverName,
1311
+ plan(task, history) {
1312
+ if (history.length === 0) return Promise.resolve([task]);
1313
+ const passed = history[history.length - 1]?.verdict?.valid === true;
1314
+ if (passed) return Promise.resolve([]);
1315
+ if (history.length >= maxIterations) return Promise.resolve([]);
1316
+ return Promise.resolve([applyContinuation(task, continuationFor(passed))]);
1317
+ },
1318
+ decide(history) {
1319
+ return decideUntilValidOrCapped(history, maxIterations);
1320
+ },
1321
+ describePlan() {
1322
+ return {
1323
+ kind: "refine",
1324
+ rationale
1325
+ };
1326
+ }
1327
+ };
1328
+ }
1329
+ /**
1300
1330
  * Shared `decide()` for the steering drivers. Verbatim semantics of the
1301
1331
  * reference refine driver: a valid iteration anywhere → terminal `'pick-winner'`;
1302
1332
  * otherwise `'refine'` (non-terminal, run another shot) while history is under
@@ -1318,26 +1348,17 @@ function decideUntilValidOrCapped(history, maxIterations) {
1318
1348
  * attributable to the pass/fail bit, and any lift of `refine` over `dumb` is
1319
1349
  * attributable to the grader's findings.
1320
1350
  */
1351
+ /** Thin compatibility wrapper over {@link steeringDriver} for the naive (no-signal) control.
1352
+ * @deprecated The policy is DATA now — build the directive and interpret it:
1353
+ * `steeringDriver({ kind: 'naive', continuation, maxTraversals }, applyContinuation)`. This
1354
+ * wrapper survives for existing callers and will be removed in the next major. */
1321
1355
  function naiveDriver(options) {
1322
1356
  const { continuation, applyContinuation, maxIterations, name = "naive" } = options;
1323
- return {
1324
- name,
1325
- plan(task, history) {
1326
- if (history.length === 0) return Promise.resolve([task]);
1327
- if (history[history.length - 1]?.verdict?.valid) return Promise.resolve([]);
1328
- if (history.length >= maxIterations) return Promise.resolve([]);
1329
- return Promise.resolve([applyContinuation(task, continuation)]);
1330
- },
1331
- decide(history) {
1332
- return decideUntilValidOrCapped(history, maxIterations);
1333
- },
1334
- describePlan() {
1335
- return {
1336
- kind: "refine",
1337
- rationale: "naive fixed continuation (no grade signal)"
1338
- };
1339
- }
1340
- };
1357
+ return steeringDriver({
1358
+ kind: "naive",
1359
+ continuation,
1360
+ maxTraversals: maxIterations
1361
+ }, applyContinuation, name);
1341
1362
  }
1342
1363
  /**
1343
1364
  * `dumbDriver` — the pass/fail-only steering control.
@@ -1353,28 +1374,18 @@ function naiveDriver(options) {
1353
1374
  * grader's `notes`, dumb reads only the pass/fail bit, so the difference is
1354
1375
  * exactly the value the findings add over a bare boolean.
1355
1376
  */
1377
+ /** Thin compatibility wrapper over {@link steeringDriver} for the dumb (pass/fail-only) control.
1378
+ * @deprecated The policy is DATA now — build the directive and interpret it:
1379
+ * `steeringDriver({ kind: 'dumb', onPass, onFail, maxTraversals }, applyContinuation)`. This
1380
+ * wrapper survives for existing callers and will be removed in the next major. */
1356
1381
  function dumbDriver(options) {
1357
1382
  const { onPass, onFail, applyContinuation, maxIterations, name = "dumb" } = options;
1358
- return {
1359
- name,
1360
- plan(task, history) {
1361
- if (history.length === 0) return Promise.resolve([task]);
1362
- const passed = history[history.length - 1]?.verdict?.valid === true;
1363
- if (passed) return Promise.resolve([]);
1364
- if (history.length >= maxIterations) return Promise.resolve([]);
1365
- const continuation = passed ? onPass : onFail;
1366
- return Promise.resolve([applyContinuation(task, continuation)]);
1367
- },
1368
- decide(history) {
1369
- return decideUntilValidOrCapped(history, maxIterations);
1370
- },
1371
- describePlan() {
1372
- return {
1373
- kind: "refine",
1374
- rationale: "dumb pass/fail-only continuation (no grader findings)"
1375
- };
1376
- }
1377
- };
1383
+ return steeringDriver({
1384
+ kind: "dumb",
1385
+ onPass,
1386
+ onFail,
1387
+ maxTraversals: maxIterations
1388
+ }, applyContinuation, name);
1378
1389
  }
1379
1390
  //#endregion
1380
1391
  //#region src/runtime/define-leaderboard.ts
@@ -1383,7 +1394,7 @@ function dumbDriver(options) {
1383
1394
  *
1384
1395
  * A product's harness×model leaderboard is always the same assembly: expand a
1385
1396
  * base profile across the harness×model axes (`expandProfileAxes`), run every
1386
- * (profile, case) cell as a driven loop (`loopDispatch` + `naiveDriver`), score
1397
+ * (profile, case) cell as a driven loop (`loopDispatch` + the naive steering directive), score
1387
1398
  * with the domain's grader, and emit ONE `runProfileMatrix` call. Each product
1388
1399
  * hand-rolled that assembly (~650 lines each) and re-hit the same footguns:
1389
1400
  * stale cell-cache reuse, zero-token stub cells, missing model snapshots.
@@ -1572,21 +1583,22 @@ function defineLeaderboard(spec) {
1572
1583
  toLoopOptions: (cellScenario, cellProfile) => {
1573
1584
  const axis = harnessAxisOf(cellProfile);
1574
1585
  const modelId = bareModel(axis?.model ?? models[0] ?? "");
1586
+ const backendModel = {
1587
+ ...spec.modelBackend,
1588
+ ...!isHarnessNativeModel(modelId) || backendName === "cli-bridge" ? { model: modelId } : {}
1589
+ };
1575
1590
  return {
1576
- driver: naiveDriver({
1591
+ driver: steeringDriver({
1592
+ kind: "naive",
1577
1593
  continuation: "",
1578
- applyContinuation: (task) => task,
1579
- maxIterations: shots
1580
- }),
1594
+ maxTraversals: shots
1595
+ }, (task) => task, "naive"),
1581
1596
  agentRun: {
1582
1597
  profile: cellProfile,
1583
1598
  taskToPrompt: (s) => `${promptOf(s)}\n\n<!-- independent-attempt:${shotNonce++} -->`,
1584
1599
  ...axis ? { sandboxOverrides: { backend: {
1585
1600
  type: axis.harness,
1586
- model: {
1587
- ...spec.modelBackend,
1588
- model: modelId
1589
- }
1601
+ ...Object.keys(backendModel).length > 0 ? { model: backendModel } : {}
1590
1602
  } } } : {}
1591
1603
  },
1592
1604
  output: { parse: (events) => spec.parseOutput ? spec.parseOutput(events, cellScenario.case) : collectAgentResponseText(events) ?? "" },
@@ -2904,7 +2916,7 @@ async function trajectoryReport(journal, blobs, root, options = {}) {
2904
2916
  const events = await journal.loadTree(root);
2905
2917
  if (events === void 0) throw new Error(`trajectoryReport: no journaled tree for root '${root}'`);
2906
2918
  const spawns = events.filter(isNodeCreation).sort(bySeq);
2907
- const closes = events.filter((ev) => ev.kind !== "spawned" && ev.kind !== "waiting" && ev.kind !== "metered" && ev.kind !== "materialized" && ev.kind !== "execution-bound").sort(bySeq);
2919
+ const closes = events.filter((ev) => ev.kind !== "spawned" && ev.kind !== "waiting" && ev.kind !== "metered" && ev.kind !== "materialized" && ev.kind !== "execution-bound" && ev.kind !== "edge" && ev.kind !== "trace-unpropagated").sort(bySeq);
2908
2920
  const nodes = /* @__PURE__ */ new Map();
2909
2921
  for (const ev of spawns) nodes.set(ev.id, {
2910
2922
  id: ev.id,
@@ -4648,6 +4660,406 @@ function deriveTurnSignal(callerSignal, timeoutMs) {
4648
4660
  };
4649
4661
  }
4650
4662
  //#endregion
4663
+ //#region src/runtime/supervise/graph.ts
4664
+ /**
4665
+ *
4666
+ * `runGraph` — agent graphs: profiles as nodes, registry-backed prompt directives as edges.
4667
+ *
4668
+ * A topology is PLAIN DATA an agent can author in a few lines: nodes are canonical
4669
+ * `AgentProfile`s (the ONLY way a node is described — no role-builder functions), edges are typed
4670
+ * values carrying versioned {@link PromptHandle} directives, `deliverable` (termination) and
4671
+ * `budget` (one conserved pool) are mandatory. Driver↔worker is the two-node cyclic instance;
4672
+ * "agent 3 analyzes 1 and 2 and reports to 1" is ONE edge, not a framework.
4673
+ *
4674
+ * NOT A SECOND SCHEDULER. `runGraph` is an interpretation layer over what already runs:
4675
+ * `supervise()` is the execution core — the same `supervisorAgent`/`driverAgent` machinery,
4676
+ * `makeWorkerAgent` seam, conserved-pool budget, and deliverable-gated settlement every
4677
+ * supervised run uses. (`runLoop` is a deprecated alias of `runAgentRounds` and is deliberately
4678
+ * NOT the substrate here.) What the graph layer ADDS is exactly what a bespoke driver loop never
4679
+ * had:
4680
+ *
4681
+ * 1. **Node pinning** — a spawn names a node (`profile.name` = node id) and the node's canonical
4682
+ * profile is what runs; a driver cannot smuggle capabilities into a worker it did not define.
4683
+ * 2. **Observable edges** — every delegates/analyzes traversal lands in an EDGE LEDGER
4684
+ * (`delivered | stripped | empty | unpropagated`, with byte counts), in memory on
4685
+ * the result AND as `edge` events in the run journal. The motivating incident: a filter
4686
+ * silently replaced 1,700-char steering with 241 chars of boilerplate for three rounds and
4687
+ * NO artifact said so — an unobservable edge cannot be trusted and its directive cannot be
4688
+ * optimized.
4689
+ * 3. **Directives as data** — edge text lives in the prompt registry (`<surface>/v<n>`), so every
4690
+ * edge is a versioned optimization target, never prose hardcoded in a builder function.
4691
+ * 4. **Per-edge traversal caps** — the cyclic-graph backstop. A delegates edge whose cap is
4692
+ * exhausted REFUSES further traversals (fail loud), so a cycle cannot spin the pool dry.
4693
+ *
4694
+ * ORACLES ARE ENVIRONMENT, NEVER NODES. Graders/verifiers must not be addressable in the graph —
4695
+ * an edge to them leaks the rubric. Analysts (`analyzes` edges) are LENSES from the environment's
4696
+ * registry reading trace evidence; they are not nodes either, and a graph that names a node id as
4697
+ * its analyst is refused.
4698
+ *
4699
+ * @experimental
4700
+ */
4701
+ /** Default per-edge traversal cap — the cyclic-graph backstop when an edge names none. */
4702
+ const defaultEdgeTraversalCap = 32;
4703
+ /** A delegates edge exhausted its traversal cap and the run produced no winner: the cap, not the
4704
+ * task, ended it. Carries the full evidence so failing loud loses nothing. */
4705
+ var GraphEdgeCapError = class extends Error {
4706
+ exhaustedEdges;
4707
+ ledger;
4708
+ result;
4709
+ constructor(exhaustedEdges, ledger, result) {
4710
+ super(`runGraph: edge traversal cap exhausted on ${exhaustedEdges.join(", ")} and the run delivered no winner — the cap (the cyclic-graph backstop), not the task, ended this run. Raise maxTraversals on the edge or fix the cycle; the full edge ledger and the supervised result ride on this error.`);
4711
+ this.name = "GraphEdgeCapError";
4712
+ this.exhaustedEdges = exhaustedEdges;
4713
+ this.ledger = ledger;
4714
+ this.result = result;
4715
+ }
4716
+ };
4717
+ function edgeId(edge) {
4718
+ return edge.kind === "delegates" ? `delegates:${edge.from}->${edge.to}` : `analyzes:${edge.analyst}:${edge.over.join("+")}->${edge.to}`;
4719
+ }
4720
+ /** Validate the graph and resolve every directive BEFORE any compute is spent — an invalid
4721
+ * topology or an unknown directive is a configuration fault, never a mid-run surprise. */
4722
+ function validateGraph(graph, registry, analysts) {
4723
+ if (!Array.isArray(graph.nodes) || graph.nodes.length === 0) throw new ValidationError("runGraph: graph.nodes must be a non-empty array");
4724
+ if (!Array.isArray(graph.edges) || graph.edges.length === 0) throw new ValidationError("runGraph: graph.edges must be a non-empty array");
4725
+ if (typeof graph.deliverable?.check !== "function") throw new ValidationError("runGraph: graph.deliverable is mandatory (termination oracle)");
4726
+ if (typeof graph.budget !== "object" || graph.budget === null) throw new ValidationError("runGraph: graph.budget is mandatory (the conserved pool)");
4727
+ const byId = /* @__PURE__ */ new Map();
4728
+ for (const node of graph.nodes) {
4729
+ if (typeof node.id !== "string" || node.id.length === 0) throw new ValidationError("runGraph: every node needs a non-empty string id");
4730
+ if (byId.has(node.id)) throw new ValidationError(`runGraph: duplicate node id '${node.id}'`);
4731
+ const parsed = agentProfileSchema.safeParse(node.profile);
4732
+ if (!parsed.success) throw new ValidationError(`runGraph: node '${node.id}' has an invalid AgentProfile: ${parsed.error.message}`);
4733
+ if (node.profile.name !== node.id) throw new ValidationError(`runGraph: node '${node.id}' has profile.name ${JSON.stringify(node.profile.name)} — profile.name IS the node identity (node pinning and analyst routing match on it) and must equal the node id`);
4734
+ byId.set(node.id, node);
4735
+ }
4736
+ const requireNode = (id, where) => {
4737
+ const node = byId.get(id);
4738
+ if (!node) throw new ValidationError(`runGraph: ${where} references unknown node '${id}'`);
4739
+ return node;
4740
+ };
4741
+ const delegates = graph.edges.filter((edge) => edge.kind === "delegates");
4742
+ const analyzes = graph.edges.filter((edge) => edge.kind === "analyzes");
4743
+ if (delegates.length === 0) throw new ValidationError("runGraph: at least one delegates edge is required (who spawns whom)");
4744
+ for (const edge of graph.edges) registry.resolve(edge.directive);
4745
+ for (const edge of delegates) {
4746
+ requireNode(edge.from, edgeId(edge));
4747
+ requireNode(edge.to, edgeId(edge));
4748
+ if (edge.from === edge.to) throw new ValidationError(`runGraph: ${edgeId(edge)} delegates to itself — the driver↔worker cycle is the settle-return loop, not a self-edge`);
4749
+ }
4750
+ const delegatedTo = new Set(delegates.map((edge) => edge.to));
4751
+ const roots = [...new Set(delegates.map((edge) => edge.from))].filter((id) => !delegatedTo.has(id));
4752
+ if (roots.length !== 1) throw new ValidationError(`runGraph: expected exactly ONE root (a node that delegates and is never delegated to), found ${roots.length === 0 ? "none — delegates edges form a cycle with no entry" : roots.join(", ")}. P0 executes driver↔worker(s); nested driver graphs are P3.`);
4753
+ const root = requireNode(roots[0], "root resolution");
4754
+ for (const edge of delegates) if (edge.from !== root.id) throw new ValidationError(`runGraph: ${edgeId(edge)} delegates from a non-root node — P0 executes one driver over its workers (the 2-node cyclic case, star-generalized); deeper delegation is P3`);
4755
+ const analystIds = /* @__PURE__ */ new Set();
4756
+ for (const edge of analyzes) {
4757
+ if (analystIds.has(edge.analyst)) throw new ValidationError(`runGraph: two analyzes edges share analyst '${edge.analyst}' — one analyzes edge per analyst lens (traversals are ledgered by analyst id; a second edge would silently absorb the first's). Register the lens under a second id for a second edge.`);
4758
+ analystIds.add(edge.analyst);
4759
+ if (byId.has(edge.analyst)) throw new ValidationError(`runGraph: ${edgeId(edge)} names node '${edge.analyst}' as its analyst — oracles and analysts are ENVIRONMENT, never nodes; pass a lens id from RunGraphOptions.analysts`);
4760
+ if (!analysts) throw new ValidationError(`runGraph: ${edgeId(edge)} needs RunGraphOptions.analysts (the lens registry its analyst resolves against)`);
4761
+ if (!analysts.kinds.some((kind) => kind.id === edge.analyst)) throw new ValidationError(`runGraph: ${edgeId(edge)} analyst '${edge.analyst}' is not in the analysts registry (known: ${analysts.kinds.map((kind) => kind.id).join(", ") || "none"})`);
4762
+ if (edge.over.length === 0) throw new ValidationError(`runGraph: ${edgeId(edge)} must analyze at least one node`);
4763
+ for (const over of edge.over) requireNode(over, edgeId(edge));
4764
+ requireNode(edge.to, edgeId(edge));
4765
+ }
4766
+ const workers = /* @__PURE__ */ new Map();
4767
+ const delegatesByWorker = /* @__PURE__ */ new Map();
4768
+ for (const edge of delegates) {
4769
+ if (delegatesByWorker.has(edge.to)) throw new ValidationError(`runGraph: node '${edge.to}' is the target of two delegates edges — one delegation directive per worker node (version the directive instead of forking the edge)`);
4770
+ delegatesByWorker.set(edge.to, edge);
4771
+ workers.set(edge.to, requireNode(edge.to, edgeId(edge)));
4772
+ }
4773
+ for (const node of graph.nodes) if (node.id !== root.id && !workers.has(node.id)) throw new ValidationError(`runGraph: node '${node.id}' has no delegates edge to it — an unreachable node never runs`);
4774
+ return {
4775
+ root,
4776
+ workers,
4777
+ delegatesByWorker,
4778
+ analyzes
4779
+ };
4780
+ }
4781
+ const byteLength = (text) => Buffer.byteLength(text, "utf8");
4782
+ function stringifyPayload(payload) {
4783
+ if (typeof payload === "string") return payload;
4784
+ try {
4785
+ return JSON.stringify(payload) ?? String(payload);
4786
+ } catch {
4787
+ return String(payload);
4788
+ }
4789
+ }
4790
+ /**
4791
+ * Execute an {@link AgentGraph}. The root node becomes the supervisor (`supervise()` — the
4792
+ * execution core), each worker node is spawnable BY NODE ID (`spawn_agent` with
4793
+ * `profile: { name: '<node id>' }`; the node's canonical profile is pinned by the graph), each
4794
+ * delegates directive is appended to the worker profile's `prompt.instructions` per traversal,
4795
+ * and each analyzes edge becomes an analyst-on-settle route with a real DESTINATION. Every
4796
+ * traversal is ledgered and journaled.
4797
+ */
4798
+ function runGraph(graph, opts) {
4799
+ const registry = opts.registry ?? kernelPromptRegistry();
4800
+ const { root, workers, delegatesByWorker, analyzes } = validateGraph(graph, registry, opts.analysts);
4801
+ if (!opts.backend && !opts.makeWorkerAgent) throw new ValidationError("runGraph: provide opts.backend (where nodes run) or opts.makeWorkerAgent");
4802
+ const journal = opts.journal ?? new InMemorySpawnJournal();
4803
+ const blobs = opts.blobs ?? new InMemoryResultBlobStore();
4804
+ const runId = opts.runId ?? `graph-${canonicalCandidateDigest(graph.nodes.map((n) => n.id)).slice(7, 19)}`;
4805
+ const now = opts.now ?? Date.now;
4806
+ const ledger = [];
4807
+ const journaled = /* @__PURE__ */ new Set();
4808
+ const traversalCounts = /* @__PURE__ */ new Map();
4809
+ const exhausted = /* @__PURE__ */ new Set();
4810
+ const exhaustedDelegates = /* @__PURE__ */ new Set();
4811
+ const journalWrites = [];
4812
+ let ledgerSeq = 0;
4813
+ const appendJournal = (entry, nodeIdForEvent) => {
4814
+ if (journaled.has(entry)) return Promise.resolve();
4815
+ journaled.add(entry);
4816
+ const write = journal.appendEvent(runId, {
4817
+ kind: "edge",
4818
+ id: nodeIdForEvent,
4819
+ edge: {
4820
+ kind: entry.kind,
4821
+ from: entry.from,
4822
+ to: entry.to,
4823
+ directive: entry.directive
4824
+ },
4825
+ traversal: entry.traversal,
4826
+ outcome: entry.outcome,
4827
+ bytes: entry.bytes,
4828
+ ...entry.reason !== void 0 ? { reason: entry.reason } : {},
4829
+ seq: ledgerSeq++,
4830
+ at: new Date(now()).toISOString()
4831
+ });
4832
+ journalWrites.push(write);
4833
+ return write;
4834
+ };
4835
+ const record = (entry, journalNow) => {
4836
+ const count = (traversalCounts.get(entry.edge) ?? 0) + 1;
4837
+ traversalCounts.set(entry.edge, count);
4838
+ const row = {
4839
+ ...entry,
4840
+ traversal: count
4841
+ };
4842
+ ledger.push(row);
4843
+ if (journalNow) appendJournal(row, row.workerId ?? `graph:${row.to}`);
4844
+ return row;
4845
+ };
4846
+ const makeLeaf = opts.makeWorkerAgent ?? workerFromBackend(opts.backend, graph.deliverable);
4847
+ const nodeByWorkerId = /* @__PURE__ */ new Map();
4848
+ const pendingByAssignment = /* @__PURE__ */ new Map();
4849
+ const graphWorker = (authoredProfile, spawnContext) => {
4850
+ const requested = typeof authoredProfile?.name === "string" ? authoredProfile.name : void 0;
4851
+ const node = requested !== void 0 ? workers.get(requested) : void 0;
4852
+ if (!node) throw new ValidationError(`runGraph: spawn_agent named profile ${JSON.stringify(requested)} which is not a worker node of this graph (nodes: ${[...workers.keys()].join(", ")}). Spawn by node id: profile.name selects the node; the node profile itself is pinned by the graph.`);
4853
+ const edge = delegatesByWorker.get(node.id);
4854
+ const id = edgeId(edge);
4855
+ const cap = edge.maxTraversals ?? 32;
4856
+ if ((traversalCounts.get(id) ?? 0) >= cap) {
4857
+ exhausted.add(id);
4858
+ exhaustedDelegates.add(id);
4859
+ record({
4860
+ edge: id,
4861
+ kind: "delegates",
4862
+ from: edge.from,
4863
+ to: edge.to,
4864
+ directive: formatPromptHandle(edge.directive),
4865
+ outcome: "unpropagated",
4866
+ bytes: 0,
4867
+ reason: `traversal-cap-exhausted (max ${cap})`
4868
+ }, true);
4869
+ throw new ValidationError(`runGraph: delegates edge ${id} exhausted its traversal cap (${cap}) — the cyclic-graph backstop refused this spawn`);
4870
+ }
4871
+ const directiveText = registry.resolve(edge.directive).text;
4872
+ const taskText = stringifyPayload(spawnContext?.task);
4873
+ const bytes = byteLength(directiveText) + byteLength(taskText);
4874
+ const row = record({
4875
+ edge: id,
4876
+ kind: "delegates",
4877
+ from: edge.from,
4878
+ to: edge.to,
4879
+ directive: formatPromptHandle(edge.directive),
4880
+ outcome: bytes === 0 ? "empty" : "delivered",
4881
+ bytes,
4882
+ ...bytes === 0 ? { reason: "no directive text and no task payload" } : {}
4883
+ }, false);
4884
+ if (spawnContext?.assignmentId !== void 0) pendingByAssignment.set(spawnContext.assignmentId, row);
4885
+ else appendJournal(row, `graph:${row.to}`);
4886
+ const pinned = directiveText.length === 0 ? node.profile : {
4887
+ ...node.profile,
4888
+ prompt: {
4889
+ ...node.profile.prompt ?? {},
4890
+ instructions: [...node.profile.prompt?.instructions ?? [], directiveText]
4891
+ }
4892
+ };
4893
+ return makeLeaf(pinned, spawnContext);
4894
+ };
4895
+ const routes = analyzes.map((edge) => edge.to === root.id ? {
4896
+ kind: edge.analyst,
4897
+ over: edge.over
4898
+ } : {
4899
+ kind: edge.analyst,
4900
+ over: edge.over,
4901
+ to: edge.to,
4902
+ directive: registry.resolve(edge.directive).text
4903
+ });
4904
+ const driverAnalyzesBriefs = analyzes.filter((edge) => edge.to === root.id).map((edge) => `Findings from analyst '${edge.analyst}' (over: ${edge.over.join(", ")}) will arrive as finding events.\n${registry.resolve(edge.directive).text}`);
4905
+ const graphBrief = [
4906
+ "AGENT GRAPH: you are the driver node of a fixed topology. You may spawn ONLY these worker",
4907
+ "nodes, by EXACT name (spawn_agent with profile: { name: '<node id>' }; the node's full",
4908
+ "profile is pinned by the graph — any other profile fields you author are ignored):",
4909
+ ...[...workers.values()].map((node) => {
4910
+ const cap = delegatesByWorker.get(node.id).maxTraversals ?? 32;
4911
+ const description = typeof node.profile.description === "string" && node.profile.description.length > 0 ? ` — ${node.profile.description}` : "";
4912
+ return `- '${node.id}'${description} (delegation cap: ${cap} traversals)`;
4913
+ }),
4914
+ ...driverAnalyzesBriefs.length > 0 ? ["", ...driverAnalyzesBriefs] : []
4915
+ ].join("\n");
4916
+ const rootProfile = {
4917
+ ...root.profile,
4918
+ prompt: {
4919
+ ...root.profile.prompt ?? {},
4920
+ instructions: [...root.profile.prompt?.instructions ?? [], graphBrief]
4921
+ }
4922
+ };
4923
+ const strippedByDigest = /* @__PURE__ */ new Map();
4924
+ const authorizeMessage = opts.authorizeMessage ? (input) => {
4925
+ const decision = opts.authorizeMessage(input);
4926
+ if (decision.instruction !== input.instruction) strippedByDigest.set(canonicalCandidateDigest(decision.instruction), { composedBytes: byteLength(input.instruction) });
4927
+ return decision;
4928
+ } : void 0;
4929
+ const routedAnalyzesByAnalyst = /* @__PURE__ */ new Map();
4930
+ const driverAnalyzesByAnalyst = /* @__PURE__ */ new Map();
4931
+ for (const edge of analyzes) (edge.to === root.id ? driverAnalyzesByAnalyst : routedAnalyzesByAnalyst).set(edge.analyst, edge);
4932
+ const analyzesCapReached = (edge) => {
4933
+ const cap = edge.maxTraversals ?? 32;
4934
+ if ((traversalCounts.get(edgeId(edge)) ?? 0) < cap) return false;
4935
+ exhausted.add(edgeId(edge));
4936
+ return true;
4937
+ };
4938
+ const ledgerAnalyzes = (edge, outcome, bytes, reason, workerId) => {
4939
+ const capped = analyzesCapReached(edge);
4940
+ record({
4941
+ edge: edgeId(edge),
4942
+ kind: "analyzes",
4943
+ from: edge.over.join("+"),
4944
+ to: edge.to,
4945
+ directive: formatPromptHandle(edge.directive),
4946
+ outcome: capped ? "unpropagated" : outcome,
4947
+ bytes,
4948
+ ...capped ? { reason: `traversal-cap-exhausted (max ${edge.maxTraversals ?? 32})` } : reason !== void 0 ? { reason } : {},
4949
+ ...workerId !== void 0 ? { workerId } : {}
4950
+ }, true);
4951
+ };
4952
+ const onCoordinationEvent = async (_context, _eventId, recordEnvelope) => {
4953
+ const event = recordEnvelope.event;
4954
+ if (event.type === "finding") {
4955
+ const edge = driverAnalyzesByAnalyst.get(event.finding.analyst);
4956
+ if (!edge) return;
4957
+ const sourceNode = nodeByWorkerId.get(event.finding.fromWorker);
4958
+ if (sourceNode === void 0 || !edge.over.includes(sourceNode)) return;
4959
+ const findingsText = event.finding.findings === void 0 ? "" : stringifyPayload(event.finding.findings);
4960
+ const directiveBytes = byteLength(registry.resolve(edge.directive).text);
4961
+ const empty = findingsText.length === 0;
4962
+ ledgerAnalyzes(edge, empty ? "empty" : "delivered", directiveBytes + byteLength(findingsText), empty ? "analyst returned no findings" : void 0, event.finding.fromWorker);
4963
+ return;
4964
+ }
4965
+ if (event.type === "steer") {
4966
+ const down = event.down;
4967
+ if (event.analyst !== void 0) {
4968
+ const edge = routedAnalyzesByAnalyst.get(event.analyst);
4969
+ if (!edge) return;
4970
+ ledgerAnalyzes(edge, down.delivered ? "delivered" : "unpropagated", byteLength(down.instruction), down.delivered ? void 0 : down.outcome, down.toWorker);
4971
+ return;
4972
+ }
4973
+ const nodeId = nodeByWorkerId.get(down.toWorker);
4974
+ if (nodeId === void 0) return;
4975
+ const edge = delegatesByWorker.get(nodeId);
4976
+ if (!edge) return;
4977
+ const stripped = strippedByDigest.get(down.instructionDigest);
4978
+ record({
4979
+ edge: edgeId(edge),
4980
+ kind: "delegates",
4981
+ from: edge.from,
4982
+ to: edge.to,
4983
+ directive: formatPromptHandle(edge.directive),
4984
+ outcome: !down.delivered ? "unpropagated" : stripped ? "stripped" : "delivered",
4985
+ bytes: byteLength(down.instruction),
4986
+ ...!down.delivered ? { reason: down.outcome } : stripped ? { reason: `authorization narrowed ${stripped.composedBytes} composed bytes` } : {},
4987
+ workerId: down.toWorker
4988
+ }, true);
4989
+ }
4990
+ };
4991
+ const hooks = composeRuntimeHooks({ onEvent: (event) => {
4992
+ if (event.target !== "agent.spawn" || event.phase !== "after") return;
4993
+ const payload = event.payload;
4994
+ if (typeof payload?.childId !== "string" || typeof payload.assignmentId !== "string") return;
4995
+ const pending = pendingByAssignment.get(payload.assignmentId);
4996
+ if (!pending) return;
4997
+ pendingByAssignment.delete(payload.assignmentId);
4998
+ const bound = {
4999
+ ...pending,
5000
+ workerId: payload.childId
5001
+ };
5002
+ ledger[ledger.indexOf(pending)] = bound;
5003
+ nodeByWorkerId.set(payload.childId, bound.to);
5004
+ return appendJournal(bound, payload.childId);
5005
+ } }, opts.hooks);
5006
+ const start = async () => {
5007
+ const result = await supervise(rootProfile, graphTask(graph, root), {
5008
+ budget: graph.budget,
5009
+ deliverable: graph.deliverable,
5010
+ makeWorkerAgent: graphWorker,
5011
+ journal,
5012
+ blobs,
5013
+ runId,
5014
+ hooks,
5015
+ onCoordinationEvent,
5016
+ ...routes.length > 0 && opts.analysts ? {
5017
+ analysts: opts.analysts,
5018
+ analyzeOnSettle: routes
5019
+ } : {},
5020
+ ...opts.router ? { router: opts.router } : {},
5021
+ ...opts.brain ? { brain: opts.brain } : {},
5022
+ ...authorizeMessage ? { authorizeMessage } : {},
5023
+ ...opts.perWorker ? { perWorker: opts.perWorker } : {},
5024
+ ...opts.maxTurns !== void 0 ? { maxTurns: opts.maxTurns } : {},
5025
+ ...opts.maxLiveWorkers !== void 0 ? { maxLiveWorkers: opts.maxLiveWorkers } : {},
5026
+ ...opts.signal ? { signal: opts.signal } : {},
5027
+ ...opts.now ? { now: opts.now } : {},
5028
+ ...opts.otel ? { otel: opts.otel } : {},
5029
+ ...opts.stallAfterMs !== void 0 ? { stallAfterMs: opts.stallAfterMs } : {},
5030
+ ...opts.allowedModels ? { allowedModels: opts.allowedModels } : {}
5031
+ });
5032
+ for (const pending of pendingByAssignment.values()) {
5033
+ const refused = {
5034
+ ...pending,
5035
+ outcome: "unpropagated",
5036
+ bytes: 0,
5037
+ reason: `no-live-worker-bound (spawn refused after the factory, or a keyed re-spawn deduplicated to a completed result; ${pending.bytes} composed bytes never crossed)`
5038
+ };
5039
+ ledger[ledger.indexOf(pending)] = refused;
5040
+ await appendJournal(refused, `graph:${refused.to}`);
5041
+ }
5042
+ pendingByAssignment.clear();
5043
+ await Promise.all(journalWrites);
5044
+ const exhaustedEdges = Object.freeze([...exhausted]);
5045
+ const frozenLedger = Object.freeze(ledger.map((row) => Object.freeze({ ...row })));
5046
+ const lifecycleEnded = result.kind === "no-winner" && (result.reason === "aborted" || result.reason === "budget-exhausted");
5047
+ if (result.kind !== "winner" && !lifecycleEnded && exhaustedDelegates.size > 0) throw new GraphEdgeCapError(Object.freeze([...exhaustedDelegates]), frozenLedger, result);
5048
+ return {
5049
+ result,
5050
+ ledger: frozenLedger,
5051
+ exhaustedEdges,
5052
+ runId
5053
+ };
5054
+ };
5055
+ return start();
5056
+ }
5057
+ /** The root task: the graph's own framing. The deliverable (mandatory) is the termination; the
5058
+ * task names what the topology exists to produce. */
5059
+ function graphTask(graph, root) {
5060
+ return graph.deliverable.describe ?? `Deliver the graph's deliverable by driving your worker nodes (root: '${root.id}').`;
5061
+ }
5062
+ //#endregion
4651
5063
  //#region src/runtime/supervise/patch-checks.ts
4652
5064
  const DEFAULT_MAX_DIFF_LINES = 400;
4653
5065
  /**
@@ -5777,6 +6189,6 @@ function tail(s) {
5777
6189
  return s.slice(-400);
5778
6190
  }
5779
6191
  //#endregion
5780
- export { verify as $, authorStrategy as A, createMcpEnvironment as At, runPersonified as B, collectAgentTurn as C, renderLeaderboardSvg as Ct, runStrategyEvolution as D, McpSpawnFault as Dt, pickChampion as E, defaultAuditorInstruction as Et, runBenchmark as F, resolveSecretEnv as Ft, InMemoryCorpus as G, createShapeRegistry as H, promotionGate as I, secretEnvOfMcpServer as It, flatWidenGate as J, renderCorpusToInstructions as K, equalKOnCost as L, SandboxRunAbortError as M, envKeyProvider as Mt, openSandboxRun as N, mcpSecretEnvMetadataKey as Nt, selectChampion as O, connectStdioMcp as Ot, printBenchmarkReport as P, resolveMcpServerLaunch as Pt, selectValidWinner as Q, trajectoryReport as R, runCoderChecks as S, renderLeaderboardMarkdown as St, discriminatingMeans as T, auditIntent as Tt, registerShape as U, builtinShapes as V, FileCorpus as W, panel as X, loopUntil as Y, pipeline as Z, settledWorkerOut as _, sentinelCompletion as _t, localShell as a, inProcessSandboxClient as at, analyzeTrace as b, pairwiseSignificance as bt, createVerifierEnvironment as c, dumbDriver as ct, worktreeFanout as d, localSandboxClient as dt, widen as et, EVIDENCE_MAX_CHARS as f, inlineSandboxClient as ft, composeWorkerEvidence as g, deterministicCompletion as gt, closingWorkerNote as h, completionAuthorizes as ht, jjWorkspace as i, registryScopeAnalyst as it, strategyAuthorContract as j, sanitizeMcpToolSchema as jt, assertStrategyContract as k, materializeLocalMcp as kt, failuresAnalyst as l, naiveDriver as lt, VERIFY_TAIL_CHARS as m, loopDispatch as mt, makeFinding$1 as n, buildSteerContext as nt, runInWorkspace as o, harvestCorpus as ot, NOTE_MAX_CHARS as p, loopCampaignDispatch as pt, fanout as q, gitWorkspace as r, createScopeAnalyst as rt, createWaterfallCollector as s, defineLeaderboard as st, computeFindingId$1 as t, assertTraceDerivedFindings as tt, superviseSurface as u, resolveSandboxClient as ut, copyUntrackedIntoClone as v, stopSentinel as vt, streamAgentTurn as w, renderPairwiseMarkdown as wt, patchDelivered as x, renderLeaderboardHtml as xt, withUntrackedArtifacts as y, leaderboard as yt, definePersona as z };
6192
+ export { panel as $, runStrategyEvolution as A, defaultAuditorInstruction as At, equalKOnCost as B, secretEnvOfMcpServer as Bt, GraphEdgeCapError as C, leaderboard as Ct, streamAgentTurn as D, renderLeaderboardSvg as Dt, collectAgentTurn as E, renderLeaderboardMarkdown as Et, SandboxRunAbortError as F, sanitizeMcpToolSchema as Ft, createShapeRegistry as G, definePersona as H, openSandboxRun as I, envKeyProvider as It, InMemoryCorpus as J, registerShape as K, printBenchmarkReport as L, mcpSecretEnvMetadataKey as Lt, assertStrategyContract as M, connectStdioMcp as Mt, authorStrategy as N, materializeLocalMcp as Nt, discriminatingMeans as O, renderPairwiseMarkdown as Ot, strategyAuthorContract as P, createMcpEnvironment as Pt, loopUntil as Q, runBenchmark as R, resolveMcpServerLaunch as Rt, runCoderChecks as S, stopSentinel as St, runGraph as T, renderLeaderboardHtml as Tt, runPersonified as U, trajectoryReport as V, builtinShapes as W, fanout as X, renderCorpusToInstructions as Y, flatWidenGate as Z, settledWorkerOut as _, loopCampaignDispatch as _t, localShell as a, buildSteerContext as at, analyzeTrace as b, deterministicCompletion as bt, createVerifierEnvironment as c, inProcessSandboxClient as ct, worktreeFanout as d, dumbDriver as dt, pipeline as et, EVIDENCE_MAX_CHARS as f, naiveDriver as ft, composeWorkerEvidence as g, inlineSandboxClient as gt, closingWorkerNote as h, localSandboxClient as ht, jjWorkspace as i, assertTraceDerivedFindings as it, selectChampion as j, McpSpawnFault as jt, pickChampion as k, auditIntent as kt, failuresAnalyst as l, harvestCorpus as lt, VERIFY_TAIL_CHARS as m, resolveSandboxClient as mt, makeFinding$1 as n, verify as nt, runInWorkspace as o, createScopeAnalyst as ot, NOTE_MAX_CHARS as p, steeringDriver as pt, FileCorpus as q, gitWorkspace as r, widen as rt, createWaterfallCollector as s, registryScopeAnalyst as st, computeFindingId$1 as t, selectValidWinner as tt, superviseSurface as u, defineLeaderboard as ut, copyUntrackedIntoClone as v, loopDispatch as vt, defaultEdgeTraversalCap as w, pairwiseSignificance as wt, patchDelivered as x, sentinelCompletion as xt, withUntrackedArtifacts as y, completionAuthorizes as yt, promotionGate as z, resolveSecretEnv as zt };
5781
6193
 
5782
- //# sourceMappingURL=runtime-Bp3NwC0A.js.map
6194
+ //# sourceMappingURL=runtime-DZblIf3R.js.map