@tangle-network/agent-runtime 0.337.1 → 0.338.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/{activation-DMehb166.d.ts → activation-CsbNax2X.d.ts} +92 -4
  2. package/dist/activation-kbkAuSmY.js +889 -0
  3. package/dist/activation-kbkAuSmY.js.map +1 -0
  4. package/dist/agent.d.ts +1 -1
  5. package/dist/agent.js +3 -6
  6. package/dist/agent.js.map +1 -1
  7. package/dist/{bundle-BPGjESee.js → bundle-DM60AI2B.js} +2 -2
  8. package/dist/{bundle-BPGjESee.js.map → bundle-DM60AI2B.js.map} +1 -1
  9. package/dist/candidate-execution/index.d.ts +2 -2
  10. package/dist/candidate-execution/index.js +4 -5
  11. package/dist/candidate-execution/index.js.map +1 -1
  12. package/dist/content-digest-sBTLujlK.js +9 -0
  13. package/dist/content-digest-sBTLujlK.js.map +1 -0
  14. package/dist/{delegate-aC14Cww3.js → delegate-Se1YZKMb.js} +2 -2
  15. package/dist/{delegate-aC14Cww3.js.map → delegate-Se1YZKMb.js.map} +1 -1
  16. package/dist/{coordination-driver-Dg9a6qsm.js → driver-control-acknowledgers-T2a1Ouay.js} +4514 -4440
  17. package/dist/driver-control-acknowledgers-T2a1Ouay.js.map +1 -0
  18. package/dist/durable.d.ts +1 -1
  19. package/dist/durable.js +223 -227
  20. package/dist/durable.js.map +1 -1
  21. package/dist/{graph-Cfx711ES.js → graph-CY0wH838.js} +65 -18
  22. package/dist/graph-CY0wH838.js.map +1 -0
  23. package/dist/{graph-registry-DAI6KNXB.js → graph-registry-By0tUj4S.js} +16 -15
  24. package/dist/graph-registry-By0tUj4S.js.map +1 -0
  25. package/dist/{improvement-cycle-DHKcb_YW.js → improve-CWGBT13K.js} +75 -1220
  26. package/dist/improve-CWGBT13K.js.map +1 -0
  27. package/dist/index.d.ts +6 -6
  28. package/dist/index.js +10 -13
  29. package/dist/index.js.map +1 -1
  30. package/dist/{integrations-DopfCC2a.d.ts → integrations-6xttbPi9.d.ts} +3 -3
  31. package/dist/integrations-dFi-ALk7.js.map +1 -1
  32. package/dist/intelligence.d.ts +7 -94
  33. package/dist/intelligence.js +505 -13
  34. package/dist/intelligence.js.map +1 -1
  35. package/dist/kernel.d.ts +2 -2
  36. package/dist/kernel.js +13 -12
  37. package/dist/{loop-runner-bin-B86AiPBf.d.ts → loop-runner-bin-CFnrAHpl.d.ts} +2 -2
  38. package/dist/{loop-runner-bin-BSKBNC38.js → loop-runner-bin-CdPlhy9g.js} +3 -3
  39. package/dist/{loop-runner-bin-BSKBNC38.js.map → loop-runner-bin-CdPlhy9g.js.map} +1 -1
  40. package/dist/loop-runner-bin.d.ts +1 -1
  41. package/dist/loop-runner-bin.js +1 -1
  42. package/dist/mcp/bin.js +3 -3
  43. package/dist/mcp/bin.js.map +1 -1
  44. package/dist/mcp/index.d.ts +7 -3
  45. package/dist/mcp/index.js +6 -8
  46. package/dist/mcp/index.js.map +1 -1
  47. package/dist/{openai-tools-DHO2QS1q.d.ts → openai-tools-zh2I_uD7.d.ts} +2 -2
  48. package/dist/platform.d.ts +7 -2
  49. package/dist/platform.js +16 -8
  50. package/dist/platform.js.map +1 -1
  51. package/dist/{prepare-CER-ZkPp.js → prepare-Bt0IouPq.js} +1241 -586
  52. package/dist/prepare-Bt0IouPq.js.map +1 -0
  53. package/dist/{profile-gNUsHNIJ.js → profile-Do-5xO_D.js} +89 -3
  54. package/dist/profile-Do-5xO_D.js.map +1 -0
  55. package/dist/profiles.d.ts +1 -1
  56. package/dist/profiles.js +1 -3
  57. package/dist/profiles.js.map +1 -1
  58. package/dist/{protected-model-port-BhpQRTw-.d.ts → protected-model-port-DGxQ8_YM.d.ts} +3 -3
  59. package/dist/{provision-supervisor-72YFf-i_.js → provision-supervisor-0jMufp4h.js} +12 -9
  60. package/dist/provision-supervisor-0jMufp4h.js.map +1 -0
  61. package/dist/record-value-B6bwJxLa.js +12 -0
  62. package/dist/record-value-B6bwJxLa.js.map +1 -0
  63. package/dist/{run-layout-Cu8H7aeh.js → run-cancellation-BoW5Sg9Y.js} +174 -95
  64. package/dist/run-cancellation-BoW5Sg9Y.js.map +1 -0
  65. package/dist/{runtime-qFLOq1R9.js → runtime-D37zRSs7.js} +432 -684
  66. package/dist/runtime-D37zRSs7.js.map +1 -0
  67. package/dist/{sandbox-profile-compat-QTkLe1Z6.js → sandbox-profile-compat-xSoVtdWw.js} +690 -697
  68. package/dist/sandbox-profile-compat-xSoVtdWw.js.map +1 -0
  69. package/dist/search-executor-DmgUm5p7.js +1916 -0
  70. package/dist/search-executor-DmgUm5p7.js.map +1 -0
  71. package/dist/{server-_FldJ9Cl.js → server-DQHJszfk.js} +4 -4
  72. package/dist/server-DQHJszfk.js.map +1 -0
  73. package/dist/{search-executor-CGxvizHh.js → structural-rollout-DAvIE8mw.js} +2262 -3984
  74. package/dist/structural-rollout-DAvIE8mw.js.map +1 -0
  75. package/dist/{supervise-H4BTN6uA.js → supervise-WuPAwfPh.js} +7793 -5338
  76. package/dist/supervise-WuPAwfPh.js.map +1 -0
  77. package/dist/{supervisor-C27ne4yv.js → supervisor-CPG1I9UN.js} +27379 -27899
  78. package/dist/supervisor-CPG1I9UN.js.map +1 -0
  79. package/dist/testing.d.ts +226 -1
  80. package/dist/testing.js +13 -14
  81. package/dist/testing.js.map +1 -1
  82. package/dist/{top-app-BaMw1W2z.js → top-app-C55Wa7uy.js} +339 -337
  83. package/dist/top-app-C55Wa7uy.js.map +1 -0
  84. package/dist/tui/bin.js +1 -1
  85. package/dist/tui/index.d.ts +17 -15
  86. package/dist/tui/index.js +2 -2
  87. package/dist/{types-CupCBY-j.d.ts → types-CrNWif8-.d.ts} +17655 -17406
  88. package/dist/{workspace-streams-JLjh5DC6.d.ts → workspace-streams-BZZds1Fw.d.ts} +18 -16
  89. package/package.json +4 -4
  90. package/skills/agent-graphs/SKILL.md +10 -3
  91. package/skills/agent-graphs/references/authoring.md +17 -0
  92. package/skills/profile-authoring/SKILL.md +3 -3
  93. package/skills/supervise/SKILL.md +2 -2
  94. package/dist/activation-BgWVlVu2.js +0 -234
  95. package/dist/activation-BgWVlVu2.js.map +0 -1
  96. package/dist/coordination-driver-Dg9a6qsm.js.map +0 -1
  97. package/dist/graph-Cfx711ES.js.map +0 -1
  98. package/dist/graph-registry-DAI6KNXB.js.map +0 -1
  99. package/dist/improvement-cycle-DHKcb_YW.js.map +0 -1
  100. package/dist/prepare-CER-ZkPp.js.map +0 -1
  101. package/dist/profile-gNUsHNIJ.js.map +0 -1
  102. package/dist/protected-model-port-BuRsviSL.js +0 -766
  103. package/dist/protected-model-port-BuRsviSL.js.map +0 -1
  104. package/dist/provision-supervisor-72YFf-i_.js.map +0 -1
  105. package/dist/run-layout-Cu8H7aeh.js.map +0 -1
  106. package/dist/runtime-qFLOq1R9.js.map +0 -1
  107. package/dist/sandbox-profile-compat-QTkLe1Z6.js.map +0 -1
  108. package/dist/search-executor-CGxvizHh.js.map +0 -1
  109. package/dist/server-_FldJ9Cl.js.map +0 -1
  110. package/dist/supervise-H4BTN6uA.js.map +0 -1
  111. package/dist/supervisor-C27ne4yv.js.map +0 -1
  112. package/dist/top-app-BaMw1W2z.js.map +0 -1
@@ -1,15 +1,16 @@
1
- import { Ea as defaultRedactor, Oa as resolveRedactor, Pn as resolveAgentEnvironmentProvider, Tr as toOtelAttributes, _r as buildRuntimeEventOtelSpans, br as flatOtelSpan, hr as buildLoopOtelSpans, ui as authoredAgentIdentity, yr as createOtelExporter } from "./supervisor-C27ne4yv.js";
2
- import { F as canonicalCandidateDigest$1, z as immutableCandidateValue } from "./sandbox-profile-compat-QTkLe1Z6.js";
3
- import { a as createRuntimeUsageTotals, i as addRuntimeUsage, n as executeAgentImprovementActivation, o as isUsageAmount, r as verifyAgentImprovementActivationResult, t as createAgentImprovementActivationResult } from "./activation-BgWVlVu2.js";
4
- import { C as optimizationActivationReceiptFromMetadata, D as agentImprovementProfileSurfaceDigest, E as agentImprovementProfileDiffs, F as isAgentImprovementProfileSurface, I as isAgentProfileMeasuredSurface, N as assertProfileImprovementTargetsShareIdentity, O as agentImprovementProfileSurfaceInput, P as buildAgentImprovementActivationTargets, S as createOptimizationActivationReceipt, T as AGENT_PROFILE_MEASURED_SURFACES, V as assertProfileTrainingIsHeldOut, _ as profilePolicyWithBudget, a as executeAgentCandidateExperimentCell, b as profileTaskScenarioIdentity, d as verifyAgentImprovementActivation, f as verifyAgentImprovementProposal, g as profileImprovementMetadata, h as createProfileImprovementCostLedger, i as createAgentImprovementProposal, j as agentImprovementTargetProfileDiffs, l as reviewAgentImprovementProposal, m as verifyCandidateExecutionEvidence, n as createAgentImprovementActivation, o as proposeAgentImprovement, p as verifyAgentImprovementReview, r as createAgentImprovementMeasuredComparison, s as proposeAgentProfileImprovement, t as AgentCandidateExperimentCellExecutionError, u as runAgentCandidateExperiment, v as profilePreparationAccounting, w as AGENT_IMPROVEMENT_PROFILE_SURFACES, x as sealProfileImprovementBenchmark, y as profileStateDigest$1 } from "./improvement-cycle-DHKcb_YW.js";
5
- import { a as AGENT_CANDIDATE_EXECUTION_SUPPORT } from "./prepare-CER-ZkPp.js";
6
- import { d as omitUndefinedObjectFields, f as parseAgentCandidateProfileActivation, i as applyExactAgentProfileDiff, p as parseExactAgentProfile } from "./profile-gNUsHNIJ.js";
7
- import { n as exactProcessProviderAsCandidateExecutor, t as createProtectedAgentCandidateModelPort } from "./protected-model-port-BuRsviSL.js";
8
- import { agentImprovementSourceSchema, agentProfileImprovementArmSchema, applyAgentProfileDiff } from "@tangle-network/agent-interface";
9
- import { contentHash } from "@tangle-network/agent-eval";
1
+ import { Di as authoredAgentIdentity, Dn as flatOtelSpan, En as createOtelExporter, Mn as toOtelAttributes, Sn as buildLoopOtelSpans, Wt as resolveAgentEnvironmentProvider, wn as buildRuntimeEventOtelSpans, xa as resolveRedactor, ya as defaultRedactor } from "./supervisor-CPG1I9UN.js";
2
+ import { B as omitTopLevelDigest, F as canonicalCandidateDigest$1, H as verifyCanonicalCandidateDocument, I as canonicalCandidateDocument, P as canonicalCandidateBytes$1, z as immutableCandidateValue } from "./sandbox-profile-compat-xSoVtdWw.js";
3
+ import { a as assertProfileTrainingIsHeldOut, g as isUsageAmount, h as createRuntimeUsageTotals, m as addRuntimeUsage, t as improve, u as rethrowAfterCleanup } from "./improve-CWGBT13K.js";
4
+ import { C as isAgentProfileMeasuredSurface, S as isAgentImprovementProfileSurface, _ as agentImprovementProfileSurfaceDigest, a as reviewAgentImprovementProposal, b as assertProfileImprovementTargetsShareIdentity, c as verifyAgentImprovementProposal, d as attachOptimizationActivationReceipt, f as createOptimizationActivationReceipt, g as agentImprovementProfileDiffs, h as AGENT_PROFILE_MEASURED_SURFACES, i as executeAgentImprovementActivation, l as verifyAgentImprovementReview, m as AGENT_IMPROVEMENT_PROFILE_SURFACES, n as createAgentImprovementActivationResult, o as verifyAgentImprovementActivation, p as optimizationActivationReceiptFromMetadata, r as createAgentImprovementProposal, s as verifyAgentImprovementActivationResult, t as createAgentImprovementActivation, u as assertNoCallerOptimizationReceipt, v as agentImprovementProfileSurfaceInput, x as buildAgentImprovementActivationTargets, y as agentImprovementTargetProfileDiffs } from "./activation-kbkAuSmY.js";
5
+ import { _ as parseAgentCandidateProfileActivation, a as applyExactAgentProfileDiff, d as createAgentCandidateProfileActivation, g as omitUndefinedObjectFields, m as materializeAgentCandidateProfilePlan, o as assertCandidateProfileBinding, v as parseExactAgentProfile } from "./profile-Do-5xO_D.js";
6
+ import { t as runAnalystLoop } from "./analyst-loop-DZw5QWT9.js";
7
+ import { D as exactProcessProviderAsCandidateExecutor, M as verifiedResourceTextByDigest, N as verifyAgentCandidateBundle, T as createProtectedAgentCandidateModelPort, j as AGENT_CANDIDATE_EXECUTION_SUPPORT, n as executePreparedAgentCandidate, t as prepareAgentCandidateExecution } from "./prepare-Bt0IouPq.js";
8
+ import { AGENT_IMPROVEMENT_SOURCE_METADATA_KEY, agentCandidateMaterializationReceiptSchema, agentCandidateRunReceiptSchema, agentImprovementSourceMetadata, agentImprovementSourceSchema, agentProfileImprovementArmSchema, applyAgentProfileDiff, candidateExecutionEvidenceSchema, numbersApproximatelyEqual } from "@tangle-network/agent-interface";
9
+ import { CostLedger, contentHash } from "@tangle-network/agent-eval";
10
10
  import { ATTR, agentIdentityAttributes } from "@tangle-network/agent-trace-contract";
11
11
  import { assertProposalFindings } from "@tangle-network/agent-eval/analyst";
12
- import { measuredComparisonFromAgentProfileImprovementExperiment, runAgentProfileImprovementExperiment, sealAgentProfileImprovementExperiment, verifyAgentProfileImprovementExperimentComparison } from "@tangle-network/agent-eval/contract";
12
+ import { campaignSplitDigestFromIdentities } from "@tangle-network/agent-eval/campaign";
13
+ import { measuredComparisonFromAgentProfileImprovementExperiment, measuredComparisonFromCandidateExperiment, runAgentProfileImprovementExperiment, runCandidateExperiment, sealAgentProfileImprovementExperiment, sealAgentProfileImprovementSuite, sealAgentProfileImprovementTask, sealCandidateExperiment, verifyAgentProfileImprovementExperimentComparison, verifyCandidateExperiment, verifyCandidateExperimentComparison } from "@tangle-network/agent-eval/contract";
13
14
  //#region src/intelligence/delivery.ts
14
15
  const defaultPlaneBaseUrl = "https://intelligence.tangle.tools";
15
16
  const defaultRefreshMs = 3e5;
@@ -404,6 +405,70 @@ function normalizeReportedUsage(usage, intelligenceOff = false) {
404
405
  };
405
406
  }
406
407
  //#endregion
408
+ //#region src/intelligence/profile-improvement-experiment.ts
409
+ function createProfileImprovementCostLedger(budgetUsd, context = "profile improvement") {
410
+ if (!Number.isFinite(budgetUsd) || budgetUsd < 0) throw new Error(`${context} budgetUsd must be a non-negative finite number`);
411
+ return new CostLedger({ costCeilingUsd: budgetUsd });
412
+ }
413
+ function profilePolicyWithBudget(policy, budgetUsd, context = "profile improvement") {
414
+ if (policy.budgetUsd !== void 0 && !numbersApproximatelyEqual(policy.budgetUsd, budgetUsd)) throw new Error(`${context} policy budgetUsd must equal the run budgetUsd`);
415
+ return {
416
+ ...policy,
417
+ budgetUsd
418
+ };
419
+ }
420
+ function profilePreparationAccounting(costLedger, startedAt) {
421
+ const summary = costLedger.summary();
422
+ if (!summary.accountingComplete || summary.costProvenance.kind === "uncaptured") throw new Error("profile improvement preparation cost is incomplete");
423
+ return {
424
+ wallDurationMs: Math.max(0, performance.now() - startedAt),
425
+ cost: {
426
+ usd: summary.costProvenance.usd,
427
+ provenance: summary.costProvenance.kind
428
+ }
429
+ };
430
+ }
431
+ function profileStateDigest$1(stateDigest, identity, profile) {
432
+ return agentProfileImprovementArmSchema.parse({ stateDigest: stateDigest({
433
+ identity,
434
+ profile
435
+ }) }).stateDigest;
436
+ }
437
+ function sealProfileImprovementBenchmark(input) {
438
+ const tasks = input.tasks.map((task) => sealAgentProfileImprovementTask(task));
439
+ return sealAgentProfileImprovementSuite({
440
+ splitDigest: campaignSplitDigestFromIdentities(tasks.map(profileTaskScenarioIdentity), input.reps),
441
+ tasks,
442
+ reps: input.reps,
443
+ seeds: input.seeds
444
+ });
445
+ }
446
+ function profileTaskScenarioIdentity(task) {
447
+ return {
448
+ id: task.scenario.id,
449
+ kind: task.scenario.kind,
450
+ scenarioDigest: task.scenario.digest
451
+ };
452
+ }
453
+ function profileImprovementMetadata(metadata, source, optimizationReceipt) {
454
+ assertNoCallerOptimizationReceipt(metadata);
455
+ if (metadata && Object.hasOwn(metadata, AGENT_IMPROVEMENT_SOURCE_METADATA_KEY)) throw new Error(`candidate metadata reserves '${AGENT_IMPROVEMENT_SOURCE_METADATA_KEY}' for Runtime`);
456
+ const merged = {
457
+ ...metadata ?? {},
458
+ ...agentImprovementSourceMetadata(source)
459
+ };
460
+ return optimizationReceipt ? attachOptimizationActivationReceipt(merged, optimizationReceipt) : immutableCandidateValue(merged);
461
+ }
462
+ function completeImprovementSearchAccounting(analysis, improvement) {
463
+ if (!improvement.cost.accountingComplete) throw new Error(`agent improvement optimization cost is incomplete: ${improvement.cost.incompleteReasons.join(", ") || "unspecified"}`);
464
+ if (!Number.isFinite(improvement.cost.totalCostUsd) || improvement.cost.totalCostUsd < 0) throw new Error("agent improvement optimization cost must be finite and non-negative");
465
+ if (!Number.isFinite(improvement.durationMs) || improvement.durationMs < 0) throw new Error("agent improvement optimization duration must be finite and non-negative");
466
+ return {
467
+ searchCostUsd: analysis.costUsd + improvement.cost.totalCostUsd,
468
+ searchDurationMs: analysis.durationMs + improvement.durationMs
469
+ };
470
+ }
471
+ //#endregion
407
472
  //#region src/intelligence/authored-profile-improvement.ts
408
473
  /**
409
474
  * Put a complete authored/imported profile through the canonical profile
@@ -686,6 +751,433 @@ function isJsonSchema(v) {
686
751
  return typeof v === "object" && v !== null && !Array.isArray(v);
687
752
  }
688
753
  //#endregion
754
+ //#region src/intelligence/improvement-cycle.ts
755
+ /** A failed baseline or candidate cell with its complete Runtime failure result. */
756
+ var AgentCandidateExperimentCellExecutionError = class extends Error {
757
+ finalization;
758
+ constructor(finalization) {
759
+ super(`candidate experiment cell failed: ${finalization.reason}`);
760
+ this.name = "AgentCandidateExperimentCellExecutionError";
761
+ this.finalization = finalization;
762
+ }
763
+ };
764
+ function sealAgentImprovementExperiment(material, improvement) {
765
+ assertRuntimeOwnedExperimentFieldsAbsent(material);
766
+ const candidateLineage = {
767
+ source: "optimizer",
768
+ parentDigests: [material.baseline.digest],
769
+ runIds: [improvement.lineage.runId],
770
+ developmentSplitDigest: improvement.lineage.developmentSplitDigest
771
+ };
772
+ const experiment = sealCandidateExperiment({
773
+ ...material,
774
+ candidateLineage
775
+ });
776
+ assertCandidateReleaseWorkIsFresh(experiment, improvement);
777
+ return experiment;
778
+ }
779
+ function assertRuntimeOwnedExperimentFieldsAbsent(material) {
780
+ if (material === null || typeof material !== "object" || Array.isArray(material)) throw new Error("agent improvement experiment material must be an object");
781
+ const supplied = ["candidateLineage", "digest"].filter((field) => Object.hasOwn(material, field));
782
+ if (supplied.length > 0) throw new Error(`agent improvement experiment material must not supply Runtime-owned fields: ${supplied.join(", ")}`);
783
+ }
784
+ /** Execute both arms of one immutable experiment and derive its paired result. */
785
+ async function runAgentCandidateExperiment(options) {
786
+ const experiment = verifyCandidateExperiment(options.experiment);
787
+ const preparation = options.preparation ?? {
788
+ wallDurationMs: 0,
789
+ cost: {
790
+ usd: 0,
791
+ provenance: "observed"
792
+ }
793
+ };
794
+ const costLedger = options.costLedger ?? (experiment.policy.budgetUsd === void 0 ? void 0 : new CostLedger({ costCeilingUsd: experiment.policy.budgetUsd }));
795
+ const run = await runCandidateExperiment({
796
+ experiment,
797
+ ...options.maxConcurrency === void 0 ? {} : { maxConcurrency: options.maxConcurrency },
798
+ ...costLedger ? { costLedger } : {},
799
+ ...options.signal ? { signal: options.signal } : {},
800
+ execute: async (input) => {
801
+ const placement = await options.placeCell(input);
802
+ return await executeAgentCandidateExperimentCell({
803
+ ...input,
804
+ ...placement
805
+ });
806
+ }
807
+ });
808
+ const evaluation = createAgentImprovementMeasuredComparison({
809
+ experiment,
810
+ measurements: run.measurements,
811
+ preparation,
812
+ measurement: run.measurement,
813
+ runId: options.runId,
814
+ ...options.candidate ? { candidate: options.candidate } : {},
815
+ ...options.generationsExplored === void 0 ? {} : { generationsExplored: options.generationsExplored },
816
+ ...options.metadata ? { metadata: options.metadata } : {}
817
+ });
818
+ return {
819
+ experiment,
820
+ measurements: run.measurements,
821
+ evaluation
822
+ };
823
+ }
824
+ /** Execute one exact arm, task, repetition, seed, and attempt through Runtime. */
825
+ async function executeAgentCandidateExperimentCell(options) {
826
+ const experiment = verifyCandidateExperiment(options.experiment);
827
+ const bundle = experiment[options.arm];
828
+ assertExactExperimentInput(options, experiment, bundle);
829
+ const attempt = options.attempt ?? 1;
830
+ if (attempt > options.task.attempt.maxAttempts) throw new Error("candidate experiment attempt exceeds the signed task policy");
831
+ const runCell = canonicalCandidateDocument({
832
+ kind: "agent-candidate-run-cell",
833
+ experimentDigest: experiment.digest,
834
+ arm: options.arm,
835
+ bundleDigest: bundle.digest,
836
+ suiteDigest: options.benchmarkCell.suiteDigest,
837
+ taskDigest: options.task.digest,
838
+ taskIndex: options.benchmarkCell.taskIndex,
839
+ repetition: options.benchmarkCell.repetition,
840
+ seed: options.seed,
841
+ attempt
842
+ }).value;
843
+ const verified = await verifyAgentCandidateBundle(bundle, options.ports);
844
+ const prepared = await prepareAgentCandidateExecution(verified, {
845
+ executionId: options.executionId,
846
+ runCell,
847
+ benchmarkSuite: experiment.benchmark.suite,
848
+ task: options.task,
849
+ executionRoots: options.executionRoots,
850
+ stagingRoots: options.stagingRoots
851
+ }, options.ports, options.preparation);
852
+ const finalization = await executePreparedAgentCandidate(prepared, options.execution);
853
+ if (!finalization.succeeded) throw new AgentCandidateExperimentCellExecutionError(finalization);
854
+ const evidence = canonicalCandidateDocument({
855
+ kind: "agent-candidate-execution-evidence",
856
+ materializationReceipt: prepared.materializationReceipt.value,
857
+ receipt: finalization.receipt.value
858
+ }).value;
859
+ return verifyCandidateExecutionEvidence(evidence, {
860
+ experiment,
861
+ arm: options.arm,
862
+ benchmarkCell: options.benchmarkCell,
863
+ seed: options.seed,
864
+ attempt,
865
+ resolvedResources: verifiedResourceTextByDigest(verified)
866
+ });
867
+ }
868
+ /** Delegate all statistics and promotion checks to agent-eval's receipt-based comparison. */
869
+ function createAgentImprovementMeasuredComparison(options) {
870
+ return verifyCandidateExperimentComparison(measuredComparisonFromCandidateExperiment(options));
871
+ }
872
+ async function analyzeAgentImprovement(runId, options, costLedger, signal) {
873
+ assertMeasuredAnalysisOptions(options);
874
+ const analysis = await runAnalystLoop({
875
+ ...options,
876
+ runId,
877
+ ...costLedger ? {
878
+ costLedger,
879
+ costPhase: "profile-improvement-analysis"
880
+ } : {},
881
+ ...signal ? { signal } : {}
882
+ });
883
+ if (costLedger) assertAnalysisCostRecorded(analysis, costLedger);
884
+ const judgeDerived = analysis.analystResult.findings.filter((finding) => finding.derived_from_judge === true);
885
+ if (judgeDerived.length > 0) throw new Error(`agent improvement analysis must not produce judge-derived findings: [${judgeDerived.map((finding) => finding.finding_id).join(", ")}]`);
886
+ return {
887
+ analysis,
888
+ findings: [...assertProposalFindings(analysis.analystResult.findings.map((finding) => ({
889
+ ...finding,
890
+ proposal_origin: "production"
891
+ })), "agent improvement findings")]
892
+ };
893
+ }
894
+ function assertMeasuredAnalysisOptions(options) {
895
+ const rawOptions = options;
896
+ if (rawOptions.knowledgeProposalSource !== void 0 || rawOptions.improvementProposalSource !== void 0) throw new Error("measured agent improvement analysis must not run proposal sources");
897
+ if (rawOptions.onEvent !== void 0 || rawOptions.log !== void 0) throw new Error("measured agent improvement analysis must not run callbacks");
898
+ if (rawOptions.inputs.judgeInput !== void 0) throw new Error("measured agent improvement analysis must not receive judge input");
899
+ }
900
+ function completeAnalysisAccounting(analysis) {
901
+ const analysisCost = analysis.analystResult.total_cost_provenance;
902
+ if (!analysisCost || analysisCost.kind === "uncaptured") throw new Error("agent improvement analysis cost is uncaptured");
903
+ if (!Number.isFinite(analysis.analystResult.total_cost_usd) || analysis.analystResult.total_cost_usd < 0) throw new Error("agent improvement analysis cost must be finite and non-negative");
904
+ if (analysisCost.usd !== analysis.analystResult.total_cost_usd) throw new Error("agent improvement analysis cost does not match its provenance");
905
+ if (!Number.isFinite(analysis.durationMs) || analysis.durationMs < 0) throw new Error("agent improvement analysis duration must be finite and non-negative");
906
+ return {
907
+ costUsd: analysis.analystResult.total_cost_usd,
908
+ durationMs: analysis.durationMs
909
+ };
910
+ }
911
+ function assertAnalysisCostRecorded(analysis, costLedger) {
912
+ const reported = completeAnalysisAccounting(analysis);
913
+ const summary = costLedger.summary();
914
+ if (!summary.accountingComplete || summary.costProvenance.kind === "uncaptured") throw new Error("agent improvement analysis cost is incomplete in the shared account");
915
+ const analysisCost = analysis.analystResult.total_cost_provenance;
916
+ if (!analysisCost || analysisCost.kind === "uncaptured") throw new Error("agent improvement analysis cost is uncaptured");
917
+ if (!numbersApproximatelyEqual(summary.totalCostUsd, reported.costUsd) || summary.costProvenance.kind !== analysisCost.kind) throw new Error("agent improvement analysis cost does not match the shared account");
918
+ }
919
+ function assertReleaseSplitIsFresh(heldOutSplitDigest, improvement) {
920
+ const consumedSplits = [improvement.lineage.developmentSplitDigest];
921
+ if (improvement.mode === "method") {
922
+ const finalTestSplitDigest = improvement.lineage.finalTestSplitDigest;
923
+ if (!finalTestSplitDigest) throw new Error("method improvement does not retain its final-test split digest");
924
+ consumedSplits.push(finalTestSplitDigest);
925
+ }
926
+ if (consumedSplits.includes(heldOutSplitDigest)) throw new Error("release benchmark reuses an optimizer development or final-test split");
927
+ }
928
+ function assertReleaseScenariosAreFresh(improvement, heldOutScenarios) {
929
+ const optimizerScenarios = /* @__PURE__ */ new Map();
930
+ for (const [partition, scenarios] of [
931
+ ["train", improvement.lineage.scenarioPartitions.train],
932
+ ["selection", improvement.lineage.scenarioPartitions.selection],
933
+ ["final-test", improvement.lineage.scenarioPartitions.finalTest]
934
+ ]) for (const scenario of scenarios) optimizerScenarios.set(canonicalCandidateDigest$1(scenario), partition);
935
+ const reused = heldOutScenarios.filter((scenario) => optimizerScenarios.has(canonicalCandidateDigest$1(scenario))).map((scenario) => `${scenario.id} (${optimizerScenarios.get(canonicalCandidateDigest$1(scenario))})`);
936
+ if (reused.length > 0) throw new Error(`release benchmark reuses optimizer scenario(s): [${reused.join(", ")}]`);
937
+ }
938
+ function assertCandidateReleaseWorkIsFresh(experiment, improvement) {
939
+ for (const splitDigest of new Set(experiment.benchmark.tasks.map((task) => task.benchmark.splitDigest))) assertReleaseSplitIsFresh(splitDigest, improvement);
940
+ if (improvement.mode !== "method") return;
941
+ assertReleaseScenariosAreFresh(improvement, experiment.benchmark.tasks.map((task) => task.scenario));
942
+ }
943
+ function assertProfileReleaseWorkIsFresh(benchmark, improvement) {
944
+ assertReleaseSplitIsFresh(benchmark.suite.splitDigest, improvement);
945
+ assertReleaseScenariosAreFresh(improvement, benchmark.tasks.map(profileTaskScenarioIdentity));
946
+ }
947
+ /**
948
+ * Analyze a product-owned profile, search one profile surface, then run the
949
+ * exact baseline and candidate through the product executor before proposing.
950
+ */
951
+ async function proposeAgentProfileImprovement(options) {
952
+ const source = agentImprovementSourceSchema.parse(options.source);
953
+ if (!isAgentProfileMeasuredSurface(options.improvement.surface ?? "prompt")) throw new Error("measured profile improvement supports profile surfaces or a complete agent profile; use the sealed-candidate path for this surface");
954
+ assertMeasuredAnalysisOptions(options.analysis);
955
+ const inputFindings = assertProposalFindings(options.improvement.findings ?? [], "profile improvement input findings");
956
+ const costLedger = createProfileImprovementCostLedger(options.budgetUsd);
957
+ const preparationStartedAt = performance.now();
958
+ const profile = parseExactAgentProfile(options.profile, "profile improvement source");
959
+ const baselineStateDigest = profileStateDigest$1(options.stateDigest, source.sourceIdentity, profile);
960
+ if (baselineStateDigest !== source.sourceDigest) throw new Error("profile improvement source digest does not match the measured profile state");
961
+ const policy = profilePolicyWithBudget(options.benchmark.policy, options.budgetUsd);
962
+ const benchmark = sealProfileImprovementBenchmark({
963
+ ...options.benchmark,
964
+ policy
965
+ });
966
+ const heldOutDigests = new Set(benchmark.tasks.map((task) => task.scenario.digest));
967
+ assertProfileTrainingIsHeldOut(profile, heldOutDigests);
968
+ if (options.improvement.costCeiling !== void 0 && !numbersApproximatelyEqual(options.improvement.costCeiling, options.budgetUsd)) throw new Error("profile improvement costCeiling must equal the run budgetUsd");
969
+ const { analysis, findings } = await analyzeAgentImprovement(options.runId, options.analysis, costLedger, options.signal);
970
+ const proposalFindings = immutableCandidateValue([...inputFindings, ...findings]);
971
+ const improvement = await improve(profile, {
972
+ ...options.improvement,
973
+ executionRef: options.executor.executionRef.digest,
974
+ agent: options.executor.optimize,
975
+ costLedger,
976
+ costCeiling: options.budgetUsd,
977
+ findings: proposalFindings
978
+ });
979
+ try {
980
+ if (improvement.decision !== "ship") throw new Error("agent profile improvement search did not produce a promotable candidate");
981
+ const candidateProfile = parseExactAgentProfile(improvement.candidate.profile, "profile improvement candidate");
982
+ const candidateStateDigest = profileStateDigest$1(options.stateDigest, source.sourceIdentity, candidateProfile);
983
+ if (candidateStateDigest === baselineStateDigest) throw new Error("profile improvement candidate state digest matches the baseline");
984
+ const change = agentImprovementProfileDiffs(profile, candidateProfile, {
985
+ id: `profile-improvement:${candidateStateDigest}`,
986
+ metadata: {
987
+ sourceIdentity: source.sourceIdentity,
988
+ sourceRevision: source.sourceRevision
989
+ }
990
+ });
991
+ const profileDiffIds = change.map((step) => {
992
+ if (!step.id) throw new Error("profile improvement change requires an exact diff id");
993
+ return step.id;
994
+ });
995
+ assertProfileTrainingIsHeldOut(candidateProfile, heldOutDigests);
996
+ assertProfileReleaseWorkIsFresh(benchmark, improvement);
997
+ const experiment = sealAgentProfileImprovementExperiment({
998
+ kind: "agent-profile-improvement-experiment",
999
+ digestAlgorithm: "rfc8785-sha256",
1000
+ source,
1001
+ executionRef: options.executor.executionRef,
1002
+ baseline: { stateDigest: baselineStateDigest },
1003
+ candidate: { stateDigest: candidateStateDigest },
1004
+ change,
1005
+ candidateLineage: {
1006
+ source: "optimizer",
1007
+ parentDigests: [source.sourceDigest],
1008
+ runIds: [improvement.lineage.runId],
1009
+ profileDiffIds,
1010
+ developmentSplitDigest: improvement.lineage.developmentSplitDigest
1011
+ },
1012
+ benchmark,
1013
+ policy
1014
+ });
1015
+ const profilesByStateDigest = /* @__PURE__ */ new Map([[baselineStateDigest, profile], [candidateStateDigest, candidateProfile]]);
1016
+ const preparation = profilePreparationAccounting(costLedger, preparationStartedAt);
1017
+ const run = await runAgentProfileImprovementExperiment({
1018
+ experiment,
1019
+ ...options.maxConcurrency === void 0 ? {} : { maxConcurrency: options.maxConcurrency },
1020
+ costLedger,
1021
+ ...options.signal ? { signal: options.signal } : {},
1022
+ execute: async (input) => {
1023
+ const measuredProfile = profilesByStateDigest.get(input.stateDigest);
1024
+ if (!measuredProfile) throw new Error("profile improvement execution requested an unknown profile state");
1025
+ return options.executor.measure({
1026
+ ...input,
1027
+ profile: measuredProfile
1028
+ });
1029
+ }
1030
+ });
1031
+ const optimizationReceipt = createOptimizationActivationReceipt(improvement);
1032
+ const evaluation = verifyAgentProfileImprovementExperimentComparison(measuredComparisonFromAgentProfileImprovementExperiment({
1033
+ experiment,
1034
+ measurements: run.measurements,
1035
+ runId: options.runId,
1036
+ ...options.candidate ? { candidate: options.candidate } : {},
1037
+ generationsExplored: improvement.generationsExplored ?? 0,
1038
+ preparation,
1039
+ measurement: run.measurement,
1040
+ metadata: profileImprovementMetadata(options.metadata, source, optimizationReceipt)
1041
+ }));
1042
+ const proposal = createAgentImprovementProposal({
1043
+ runId: options.runId,
1044
+ findings: proposalFindings,
1045
+ evaluation,
1046
+ ...options.now ? { now: options.now } : {}
1047
+ });
1048
+ return {
1049
+ analysis,
1050
+ improvement,
1051
+ experiment,
1052
+ measurements: run.measurements,
1053
+ proposal
1054
+ };
1055
+ } catch (cause) {
1056
+ return rethrowAfterCleanup(cause, () => improvement.dispose(), "proposeAgentProfileImprovement failed");
1057
+ }
1058
+ }
1059
+ /** Analyze, search, then remeasure the resulting exact candidate before proposing it. */
1060
+ async function proposeAgentImprovement(options) {
1061
+ assertNoCallerOptimizationReceipt(options.metadata);
1062
+ assertMeasuredAnalysisOptions(options.analysis);
1063
+ const inputFindings = assertProposalFindings(options.improvement.findings ?? [], "agent improvement input findings");
1064
+ const { analysis, findings } = await analyzeAgentImprovement(options.runId, options.analysis);
1065
+ const analysisAccounting = completeAnalysisAccounting(analysis);
1066
+ const proposalFindings = immutableCandidateValue([...inputFindings, ...findings]);
1067
+ const improvementInput = {
1068
+ ...options.improvement,
1069
+ findings: proposalFindings
1070
+ };
1071
+ const improvement = improvementInput.surface === "code" ? await improve(improvementInput) : await improve(options.profile, improvementInput);
1072
+ try {
1073
+ if (improvement.decision !== "ship") throw new Error("agent improvement search did not produce a promotable candidate");
1074
+ const searchAccounting = completeImprovementSearchAccounting(analysisAccounting, improvement);
1075
+ const preparation = {
1076
+ wallDurationMs: searchAccounting.searchDurationMs,
1077
+ cost: {
1078
+ usd: searchAccounting.searchCostUsd,
1079
+ provenance: "estimated"
1080
+ }
1081
+ };
1082
+ const optimizationReceipt = improvement.mode === "method" ? createOptimizationActivationReceipt(improvement) : void 0;
1083
+ const experiment = sealAgentImprovementExperiment(await options.buildExperiment({
1084
+ analysis,
1085
+ improvement
1086
+ }), improvement);
1087
+ assertCandidateProfileBinding(options.profile, experiment.baseline.profile);
1088
+ assertImprovementCandidateBinding(improvement, experiment);
1089
+ const measured = await runAgentCandidateExperiment({
1090
+ experiment,
1091
+ runId: options.runId,
1092
+ placeCell: options.placeCell,
1093
+ ...options.maxConcurrency === void 0 ? {} : { maxConcurrency: options.maxConcurrency },
1094
+ ...options.signal ? { signal: options.signal } : {},
1095
+ ...options.candidate ? { candidate: options.candidate } : {},
1096
+ ...optimizationReceipt ? { metadata: attachOptimizationActivationReceipt(options.metadata, optimizationReceipt) } : options.metadata ? { metadata: options.metadata } : {},
1097
+ ...improvement.generationsExplored === void 0 ? {} : { generationsExplored: improvement.generationsExplored },
1098
+ preparation
1099
+ });
1100
+ const proposal = createAgentImprovementProposal({
1101
+ runId: options.runId,
1102
+ findings: proposalFindings,
1103
+ evaluation: measured.evaluation,
1104
+ ...options.now ? { now: options.now } : {}
1105
+ });
1106
+ return {
1107
+ analysis,
1108
+ improvement,
1109
+ experiment,
1110
+ measurements: measured.measurements,
1111
+ proposal
1112
+ };
1113
+ } catch (cause) {
1114
+ return rethrowAfterCleanup(cause, () => improvement.dispose(), "proposeAgentImprovement failed");
1115
+ }
1116
+ }
1117
+ function assertImprovementCandidateBinding(improvement, experiment) {
1118
+ const candidate = improvement.candidate;
1119
+ if (candidate.surface !== "code") {
1120
+ try {
1121
+ assertCandidateProfileBinding(candidate.profile, experiment.candidate.profile);
1122
+ } catch (cause) {
1123
+ throw new Error("candidate experiment does not contain the improvement winner", { cause });
1124
+ }
1125
+ return;
1126
+ }
1127
+ const surface = candidate.value;
1128
+ const code = experiment.candidate.code;
1129
+ if (typeof surface !== "object" || surface === null || surface.kind !== "code" || code.kind !== "git-patch" || code.baseCommit !== surface.baseCommit || code.baseTree !== surface.baseTree || code.candidateTree !== surface.candidateTree || code.patch.artifact.sha256 !== surface.patch.sha256 || code.patch.artifact.byteLength !== surface.patch.byteLength) throw new Error("candidate experiment does not contain the improvement winner");
1130
+ if (canonicalCandidateDigest$1(experiment.baseline.profile) !== canonicalCandidateDigest$1(experiment.candidate.profile)) throw new Error("code improvement candidate changed the agent profile");
1131
+ }
1132
+ /** Recheck one Runtime receipt against its exact signed experiment cell. */
1133
+ function verifyCandidateExecutionEvidence(input, options) {
1134
+ const experiment = verifyCandidateExperiment(options.experiment);
1135
+ const bundle = experiment[options.arm];
1136
+ const task = experiment.benchmark.tasks[options.benchmarkCell.taskIndex];
1137
+ const index = options.benchmarkCell.taskIndex * experiment.benchmark.suite.reps + options.benchmarkCell.repetition;
1138
+ if (!task || options.benchmarkCell.suiteDigest !== experiment.benchmark.suite.digest || options.seed !== experiment.benchmark.suite.seeds[index]) throw new Error("candidate execution evidence points outside its signed experiment");
1139
+ const evidence = verifyCanonicalCandidateDocument(candidateExecutionEvidenceSchema.parse(input), "candidate execution evidence");
1140
+ const materialization = verifyCanonicalCandidateDocument(agentCandidateMaterializationReceiptSchema.parse(evidence.materializationReceipt), "candidate materialization receipt");
1141
+ const receipt = verifyCanonicalCandidateDocument(agentCandidateRunReceiptSchema.parse(evidence.receipt), "candidate run receipt");
1142
+ const plan = materialization.executionPlan;
1143
+ const cell = plan.material.runCell;
1144
+ const attempt = options.attempt ?? 1;
1145
+ if (cell.experimentDigest !== experiment.digest || cell.arm !== options.arm || cell.bundleDigest !== bundle.digest || cell.suiteDigest !== experiment.benchmark.suite.digest || cell.taskDigest !== task.digest || cell.taskIndex !== options.benchmarkCell.taskIndex || cell.repetition !== options.benchmarkCell.repetition || cell.seed !== options.seed || cell.attempt !== attempt || canonicalCandidateDigest$1(omitTopLevelDigest(cell)) !== cell.digest) throw new Error("candidate execution receipt substituted its signed experiment cell");
1146
+ assertCapturedInput(materialization.benchmark.suite, experiment.benchmark.suite, "benchmark suite");
1147
+ assertCapturedInput(materialization.benchmark.task, task, "benchmark task");
1148
+ assertEvidenceMaterialDigest(plan, "candidate execution plan");
1149
+ assertEvidenceMaterialDigest(materialization.profileActivation.profilePlan, "candidate profile plan");
1150
+ const expectedProfilePlan = materializeAgentCandidateProfilePlan({
1151
+ profile: bundle.profile,
1152
+ harness: bundle.execution.harness,
1153
+ launch: bundle.execution.launch,
1154
+ workspace: bundle.execution.cwd.workspace,
1155
+ workspaces: plan.material.workspaces,
1156
+ resolvedResources: options.resolvedResources
1157
+ });
1158
+ const activation = parseAgentCandidateProfileActivation(materialization.profileActivation, materialization.profileActivation.profilePlan.digest);
1159
+ const regeneratedActivation = createAgentCandidateProfileActivation(expectedProfilePlan, materialization.profileActivation.profilePlan);
1160
+ if (activation.digest !== regeneratedActivation.digest) throw new Error("candidate profile activation does not match the experiment bundle");
1161
+ if (materialization.bundleDigest !== bundle.digest || receipt.bundleDigest !== bundle.digest || receipt.runCellDigest !== cell.digest || receipt.materializationReceiptDigest !== materialization.digest || receipt.executionPlanDigest !== plan.digest) throw new Error("candidate execution evidence does not bind one exact Runtime run");
1162
+ assertEvidenceMaterialDigest(receipt.modelSettlement, "candidate model settlement");
1163
+ assertEvidenceMaterialDigest(receipt.taskOutcome, "candidate task outcome");
1164
+ assertEvidenceMaterialDigest(receipt.benchmarkResult, "candidate benchmark result");
1165
+ return immutableCandidateValue(evidence);
1166
+ }
1167
+ function assertExactExperimentInput(input, experiment, bundle) {
1168
+ const task = experiment.benchmark.tasks[input.benchmarkCell.taskIndex];
1169
+ const index = input.benchmarkCell.taskIndex * experiment.benchmark.suite.reps + input.benchmarkCell.repetition;
1170
+ if (input.experiment.digest !== experiment.digest || input.bundle.digest !== bundle.digest || !task || input.task.digest !== task.digest || input.benchmarkCell.suiteDigest !== experiment.benchmark.suite.digest || input.seed !== experiment.benchmark.suite.seeds[index]) throw new Error("Runtime received a substituted candidate experiment cell");
1171
+ }
1172
+ function assertCapturedInput(captured, expected, label) {
1173
+ const bytes = canonicalCandidateBytes$1(omitTopLevelDigest(expected));
1174
+ if (captured.digest !== expected.digest || captured.material.sha256 !== expected.digest || captured.material.byteLength !== bytes.byteLength) throw new Error(`candidate materialization substituted its ${label}`);
1175
+ }
1176
+ function assertEvidenceMaterialDigest(evidence, label) {
1177
+ const bytes = canonicalCandidateBytes$1(evidence.material);
1178
+ if (canonicalCandidateDigest$1(evidence.material) !== evidence.digest || evidence.artifact.sha256 !== evidence.digest || evidence.artifact.byteLength !== bytes.byteLength) throw new Error(`${label} digest does not match its canonical material`);
1179
+ }
1180
+ //#endregion
689
1181
  //#region src/intelligence/exact-process-candidate.ts
690
1182
  /** Candidate surfaces implemented by the neutral exact-process executor. */
691
1183
  const exactProcessCandidateExperimentExecutionSupport = Object.freeze({
@@ -1104,9 +1596,9 @@ function withIntelligence(agent, config) {
1104
1596
  * Tangle Intelligence SDK — trace capture plus reviewable improvement.
1105
1597
  *
1106
1598
  * The client keeps live-agent trace delivery best-effort. The separate
1107
- * improvement-cycle exports analyze completed traces, run a signed baseline
1108
- * versus candidate experiment, bind review to its result, and activate only
1109
- * the exact measured candidate.
1599
+ * improvement-cycle exports analyze completed traces and run a signed baseline
1600
+ * versus candidate experiment. Activation exports bind review to its result
1601
+ * and activate only the exact measured candidate.
1110
1602
  *
1111
1603
  * 1. OBSERVE — wrap a generic agent and export one trace span per call to
1112
1604
  * Tangle Intelligence, swallowing every export failure so a live agent