@tangle-network/agent-runtime 0.115.1 → 0.117.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 (88) hide show
  1. package/README.md +7 -1
  2. package/dist/{activation-Bt_XVkjK.js → activation-BZ2FyX0O.js} +3 -3
  3. package/dist/{activation-Bt_XVkjK.js.map → activation-BZ2FyX0O.js.map} +1 -1
  4. package/dist/agent.d.ts +3 -64
  5. package/dist/agent.js +5 -207
  6. package/dist/agent.js.map +1 -1
  7. package/dist/{analyst-loop-BoNIG2hA.js → analyst-loop-DvSciOfB.js} +2 -2
  8. package/dist/{analyst-loop-BoNIG2hA.js.map → analyst-loop-DvSciOfB.js.map} +1 -1
  9. package/dist/analyst-loop.js +1 -1
  10. package/dist/candidate-execution/index.d.ts +3 -3
  11. package/dist/candidate-execution/index.js +5 -5
  12. package/dist/{candidate-execution-CfpJrd3o.js → candidate-execution-PX61zXd2.js} +4 -4
  13. package/dist/{candidate-execution-CfpJrd3o.js.map → candidate-execution-PX61zXd2.js.map} +1 -1
  14. package/dist/{environment-provider-Cygthiy3.d.ts → environment-provider-CTZjdIUg.d.ts} +661 -34
  15. package/dist/{environment-provider-CCaEhA-l.js → environment-provider-CzcEyRL7.js} +140 -31
  16. package/dist/environment-provider-CzcEyRL7.js.map +1 -0
  17. package/dist/environment-provider.d.ts +1 -1
  18. package/dist/environment-provider.js +1 -1
  19. package/dist/{improvement-cycle-tEswzEPr.js → improvement-cycle-Bcqz8rZI.js} +160 -19
  20. package/dist/improvement-cycle-Bcqz8rZI.js.map +1 -0
  21. package/dist/{index-DZukewLl.d.ts → index-BHSYaWrC.d.ts} +3 -3
  22. package/dist/{index-K7nucOmw.d.ts → index-BTUG4Xln.d.ts} +8 -7
  23. package/dist/{index-BUWd8QJq.d.ts → index-DPWJxSRa.d.ts} +884 -497
  24. package/dist/{index-C-FYUuFG.d.ts → index-X2YwyWkc.d.ts} +2 -2
  25. package/dist/index.d.ts +9 -10
  26. package/dist/index.js +12 -13
  27. package/dist/index.js.map +1 -1
  28. package/dist/intelligence.d.ts +10 -9
  29. package/dist/intelligence.js +15 -9
  30. package/dist/intelligence.js.map +1 -1
  31. package/dist/kernel.d.ts +4 -4
  32. package/dist/kernel.js +8 -8
  33. package/dist/{knowledge-CUXQE8Sq.js → knowledge-CDlrayRc.js} +7 -7
  34. package/dist/knowledge-CDlrayRc.js.map +1 -0
  35. package/dist/knowledge.d.ts +1 -1
  36. package/dist/knowledge.js +1 -1
  37. package/dist/{local-harness-BnB1E9nM.d.ts → local-harness-t6cDWDQ2.d.ts} +3 -105
  38. package/dist/{loop-runner-bin-DzJz48Fb.js → loop-runner-bin-BxhhDtmG.js} +4 -4
  39. package/dist/{loop-runner-bin-DzJz48Fb.js.map → loop-runner-bin-BxhhDtmG.js.map} +1 -1
  40. package/dist/{loop-runner-bin-BZl5vp7t.d.ts → loop-runner-bin-oyL7it5O.d.ts} +3 -3
  41. package/dist/loop-runner-bin.d.ts +1 -1
  42. package/dist/loop-runner-bin.js +1 -1
  43. package/dist/mcp/bin.js +43 -10
  44. package/dist/mcp/bin.js.map +1 -1
  45. package/dist/mcp/index.d.ts +4 -43
  46. package/dist/mcp/index.js +5 -205
  47. package/dist/mcp/index.js.map +1 -1
  48. package/dist/{openai-tools-CynwZMZd.js → openai-tools-CO9X36zy.js} +2 -2
  49. package/dist/{openai-tools-CynwZMZd.js.map → openai-tools-CO9X36zy.js.map} +1 -1
  50. package/dist/{prepare-BHQBb02e.js → prepare-BbI6qGOW.js} +5 -2
  51. package/dist/prepare-BbI6qGOW.js.map +1 -0
  52. package/dist/primeintellect/index.d.ts +1 -1
  53. package/dist/{protected-model-port-BP6Z4eau.d.ts → protected-model-port-B0yXMpLL.d.ts} +10 -2
  54. package/dist/{protected-model-port-DqAH1Z2M.js → protected-model-port-COnyZfML.js} +2 -2
  55. package/dist/{protected-model-port-DqAH1Z2M.js.map → protected-model-port-COnyZfML.js.map} +1 -1
  56. package/dist/{redact-BRaHUFMf.d.ts → redact-BEtQtvd6.d.ts} +2 -2
  57. package/dist/{runtime-BatQajPB.js → runtime-Ce39zfqn.js} +145 -53
  58. package/dist/runtime-Ce39zfqn.js.map +1 -0
  59. package/dist/{sandbox-events-DeI5xX8P.js → sandbox-events-Yhd1GYWl.js} +4 -2
  60. package/dist/sandbox-events-Yhd1GYWl.js.map +1 -0
  61. package/dist/spawn-journal-B_mu_oH2.js +857 -0
  62. package/dist/spawn-journal-B_mu_oH2.js.map +1 -0
  63. package/dist/{structural-rollout-DEf37yQy.js → structural-rollout-DLwW69R4.js} +4 -4
  64. package/dist/structural-rollout-DLwW69R4.js.map +1 -0
  65. package/dist/{supervise-B7TIJR3D.js → supervise-U7_K5yuV.js} +2645 -829
  66. package/dist/supervise-U7_K5yuV.js.map +1 -0
  67. package/dist/{supervisor-DzQu5Ydu.js → supervisor-CAXiCKnX.js} +3802 -967
  68. package/dist/supervisor-CAXiCKnX.js.map +1 -0
  69. package/dist/testing.js +98 -76
  70. package/dist/testing.js.map +1 -1
  71. package/dist/{workspace-archive-DXzJq7WP.js → workspace-archive-CqPIijFA.js} +2 -2
  72. package/dist/{workspace-archive-DXzJq7WP.js.map → workspace-archive-CqPIijFA.js.map} +1 -1
  73. package/package.json +1 -1
  74. package/dist/environment-provider-CCaEhA-l.js.map +0 -1
  75. package/dist/improvement-cycle-tEswzEPr.js.map +0 -1
  76. package/dist/knowledge-CUXQE8Sq.js.map +0 -1
  77. package/dist/otel-export-CPZTSADj.js +0 -852
  78. package/dist/otel-export-CPZTSADj.js.map +0 -1
  79. package/dist/prepare-BHQBb02e.js.map +0 -1
  80. package/dist/runtime-BatQajPB.js.map +0 -1
  81. package/dist/sandbox-events-DeI5xX8P.js.map +0 -1
  82. package/dist/spawn-journal-DCPbicXB.js +0 -457
  83. package/dist/spawn-journal-DCPbicXB.js.map +0 -1
  84. package/dist/structural-rollout-DEf37yQy.js.map +0 -1
  85. package/dist/supervise-B7TIJR3D.js.map +0 -1
  86. package/dist/supervisor-DzQu5Ydu.js.map +0 -1
  87. package/dist/trace-propagation-B-pL7xn_.js +0 -57
  88. package/dist/trace-propagation-B-pL7xn_.js.map +0 -1
package/README.md CHANGED
@@ -116,7 +116,13 @@ One supervisor spawns and steers workers toward a goal. Where the workers run (a
116
116
  import { supervise } from '@tangle-network/agent-runtime/kernel'
117
117
 
118
118
  const result = await supervise(
119
- { name: 'supervisor', harness: null, systemPrompt: 'Delegate to workers; do not solve the task yourself.' },
119
+ {
120
+ name: 'supervisor',
121
+ harness: 'cli-base',
122
+ prompt: {
123
+ systemPrompt: 'Delegate to workers; do not solve the task yourself.',
124
+ },
125
+ },
120
126
  'Implement the feature and make the tests pass.',
121
127
  { budget, router, backend }, // backend = where workers run: router-tools | sandbox+harness | bridge
122
128
  )
@@ -1,5 +1,5 @@
1
- import { it as canonicalCandidateDocument, rt as canonicalCandidateDigest$1, st as immutableCandidateValue, ut as verifyCanonicalCandidateDocument } from "./prepare-BHQBb02e.js";
2
- import { C as agentImprovementTargetInput, S as agentImprovementTargetDigest, T as agentProfileImprovementStateDigest, c as requireSealedCandidateExperiment, d as verifyAgentImprovementActivation, f as verifyAgentImprovementProposal } from "./improvement-cycle-tEswzEPr.js";
1
+ import { it as canonicalCandidateDocument, rt as canonicalCandidateDigest$1, st as immutableCandidateValue, ut as verifyCanonicalCandidateDocument } from "./prepare-BbI6qGOW.js";
2
+ import { C as agentImprovementTargetInput, S as agentImprovementTargetDigest, T as agentProfileImprovementStateDigest, c as requireSealedCandidateExperiment, d as verifyAgentImprovementActivation, f as verifyAgentImprovementProposal } from "./improvement-cycle-Bcqz8rZI.js";
3
3
  import { agentImprovementActivationResultSchema, agentImprovementActivationSchema, agentProfileImprovementExperimentSchema } from "@tangle-network/agent-interface";
4
4
  //#region src/intelligence/activation.ts
5
5
  /** Create the exact result a product stores in the same transaction as its target write. */
@@ -201,4 +201,4 @@ function targetIdentity(target) {
201
201
  //#endregion
202
202
  export { executeAgentImprovementActivation as n, verifyAgentImprovementActivationResult as r, createAgentImprovementActivationResult as t };
203
203
 
204
- //# sourceMappingURL=activation-Bt_XVkjK.js.map
204
+ //# sourceMappingURL=activation-BZ2FyX0O.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activation-Bt_XVkjK.js","names":["canonicalCandidateDigest"],"sources":["../src/intelligence/activation.ts"],"sourcesContent":["import type {\n AgentCandidateBundle,\n AgentCandidateExperiment,\n AgentImprovementActivation,\n AgentImprovementActivationOutcome,\n AgentImprovementActivationResult,\n AgentImprovementActivationTarget,\n AgentImprovementProposal,\n AgentImprovementReview,\n AgentImprovementSurface,\n AgentProfileImprovementChange,\n AgentProfileImprovementExperiment,\n Sha256Digest,\n} from '@tangle-network/agent-interface'\nimport {\n agentImprovementActivationResultSchema,\n agentImprovementActivationSchema,\n agentProfileImprovementExperimentSchema,\n} from '@tangle-network/agent-interface'\n\nimport {\n canonicalCandidateDigest,\n canonicalCandidateDocument,\n immutableCandidateValue,\n verifyCanonicalCandidateDocument,\n} from '../candidate-execution/digest'\nimport {\n requireSealedCandidateExperiment,\n verifyAgentImprovementActivation,\n verifyAgentImprovementProposal,\n} from './improvement-cycle'\nimport {\n agentImprovementTargetDigest,\n agentImprovementTargetInput,\n agentProfileImprovementStateDigest,\n} from './improvement-surfaces'\n\nexport interface CreateAgentImprovementActivationResultOptions {\n completedAt: string\n outcome: AgentImprovementActivationOutcome\n}\n\nexport interface AgentImprovementActivationTargetPlan extends AgentImprovementActivationTarget {\n desiredDigest: Sha256Digest\n /**\n * Exact measured input the product must apply to reach `desiredDigest`.\n * Transition surfaces such as code and knowledge are applied operations, so\n * their resulting state digest is not the digest of this input document.\n */\n desiredInput: unknown\n}\n\nexport type AgentProfileImprovementActivationOperation =\n | {\n kind: 'apply-change'\n changes: AgentProfileImprovementChange\n }\n | {\n /** The product must load its own saved state at `desiredStateDigest`. */\n kind: 'restore-state'\n }\n\nexport interface AgentProfileImprovementActivationTargetPlan\n extends AgentImprovementActivationTarget {\n desiredDigest: Sha256Digest\n desiredInput: AgentProfileImprovementActivationOperation\n}\n\nexport interface SealedCandidateActivationTransitionInput {\n kind: 'sealed-candidate'\n activation: AgentImprovementActivation\n candidateBundle: AgentCandidateBundle\n bundle: AgentCandidateBundle\n targets: [AgentImprovementActivationTargetPlan, ...AgentImprovementActivationTargetPlan[]]\n attemptedAt: string\n expired: boolean\n}\n\n/**\n * A measured profile change without raw profile bytes.\n * The product owns the private state lookup and atomic write.\n */\nexport interface ProfileImprovementActivationTransitionInput {\n kind: 'profile-improvement'\n activation: AgentImprovementActivation\n experiment: AgentProfileImprovementExperiment\n sourceStateDigest: Sha256Digest\n desiredStateDigest: Sha256Digest\n operation: AgentProfileImprovementActivationOperation\n targets: [\n AgentProfileImprovementActivationTargetPlan,\n ...AgentProfileImprovementActivationTargetPlan[],\n ]\n attemptedAt: string\n expired: boolean\n}\n\nexport type AgentImprovementActivationTransitionInput =\n | SealedCandidateActivationTransitionInput\n | ProfileImprovementActivationTransitionInput\n\nexport interface AgentImprovementActivationResultStore {\n load(idempotencyKey: Sha256Digest): Promise<unknown | undefined>\n putIfAbsent(result: AgentImprovementActivationResult): Promise<unknown>\n}\n\n/**\n * Product-owned or Runtime-composed transition.\n *\n * Implementations resolve a stored result for `activation.digest`, compare\n * every target, and make the write durably idempotent. Co-located targets store\n * the all-or-none write with its result. Other targets throw when result\n * storage fails so a retry can reconcile it. Runtime never invokes this write\n * function after authorization expires.\n */\nexport type AgentImprovementActivationTransition = (\n input: AgentImprovementActivationTransitionInput,\n) => Promise<unknown>\n\n/**\n * Target-read-only check for a prior exact write.\n * It may persist recovered result metadata, but must not change an activation target.\n * Return undefined only when no target write can have committed.\n */\nexport type AgentImprovementActivationReconciliation = (\n input: AgentImprovementActivationTransitionInput,\n) => Promise<unknown | undefined>\n\nexport interface ExecuteAgentImprovementActivationInput {\n proposal: AgentImprovementProposal\n review: AgentImprovementReview\n activation: AgentImprovementActivation\n}\n\nexport interface ExecuteAgentImprovementActivationOptions {\n transition: AgentImprovementActivationTransition\n reconcile?: AgentImprovementActivationReconciliation\n now?: () => Date\n}\n\n/** Create the exact result a product stores in the same transaction as its target write. */\nexport function createAgentImprovementActivationResult(\n transition: AgentImprovementActivationTransitionInput,\n options: CreateAgentImprovementActivationResultOptions,\n): AgentImprovementActivationResult {\n const activation = verifyCanonicalCandidateDocument(\n agentImprovementActivationSchema.parse(transition.activation),\n 'agent improvement activation',\n )\n assertTransitionInput(activation, transition)\n const result = agentImprovementActivationResultSchema.parse(\n canonicalCandidateDocument<AgentImprovementActivationResult>({\n kind: 'agent-improvement-activation-result',\n idempotencyKey: activation.digest,\n attemptedAt: transition.attemptedAt,\n completedAt: options.completedAt,\n outcome: options.outcome,\n }).value,\n )\n assertResultAgainstActivation(activation, result)\n assertOutcomeDesiredState(\n activation,\n result,\n new Map(transition.targets.map((target) => [targetIdentity(target), target.desiredDigest])),\n )\n return immutableCandidateValue(result)\n}\n\n/**\n * Recompute one historical activation result against the exact measured proposal and authority.\n * The result records that attempt; it is not a query of the target's current state.\n */\nexport function verifyAgentImprovementActivationResult(input: {\n proposal: unknown\n review: unknown\n activation: unknown\n result: unknown\n}): AgentImprovementActivationResult {\n const proposal = verifyAgentImprovementProposal(input.proposal)\n const activation = verifyAgentImprovementActivation(input)\n const result = verifyCanonicalCandidateDocument(\n agentImprovementActivationResultSchema.parse(input.result),\n 'agent improvement activation result',\n )\n assertResultAgainstActivation(activation, result)\n assertResultDesiredState(proposal, activation, result)\n return result\n}\n\n/** Validate and execute one product-owned activation transition. */\nexport async function executeAgentImprovementActivation(\n input: ExecuteAgentImprovementActivationInput,\n options: ExecuteAgentImprovementActivationOptions,\n): Promise<AgentImprovementActivationResult> {\n const proposal = verifyAgentImprovementProposal(input.proposal)\n const activation = verifyAgentImprovementActivation(input)\n const observedAt = (options.now ?? (() => new Date()))().toISOString()\n const attemptedAt =\n Date.parse(observedAt) < Date.parse(activation.authorizedAt)\n ? activation.authorizedAt\n : observedAt\n const expired = Date.parse(attemptedAt) >= Date.parse(activation.expiresAt)\n const transition = immutableCandidateValue<AgentImprovementActivationTransitionInput>(\n proposal.evaluation.kind === 'agent-improvement-measured-comparison'\n ? sealedCandidateTransition(proposal.evaluation.experiment, activation, attemptedAt, expired)\n : profileImprovementTransition(\n proposal.evaluation.experiment,\n activation,\n attemptedAt,\n expired,\n ),\n )\n\n if (transition.expired) {\n if (!options.reconcile) {\n return uncertainActivationResult(transition, 'RECONCILIATION_UNAVAILABLE')\n }\n let reconciled: unknown\n try {\n reconciled = await options.reconcile(transition)\n } catch {\n return uncertainActivationResult(transition, 'RECONCILIATION_THROW')\n }\n if (reconciled === undefined) {\n return createAgentImprovementActivationResult(transition, {\n completedAt: transition.attemptedAt,\n outcome: { status: 'expired' },\n })\n }\n try {\n return verifyAgentImprovementActivationResult({ ...input, result: reconciled })\n } catch {\n return uncertainActivationResult(transition, 'INVALID_RECONCILIATION')\n }\n }\n\n let rawResult: unknown\n try {\n rawResult = await options.transition(transition)\n } catch {\n return uncertainActivationResult(transition, 'TRANSITION_THROW')\n }\n try {\n return verifyAgentImprovementActivationResult({ ...input, result: rawResult })\n } catch {\n return uncertainActivationResult(transition, 'INVALID_RESULT')\n }\n}\n\nfunction sealedCandidateTransition(\n experiment: AgentCandidateExperiment,\n activation: AgentImprovementActivation,\n attemptedAt: string,\n expired: boolean,\n): SealedCandidateActivationTransitionInput {\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n return {\n kind: 'sealed-candidate',\n activation,\n candidateBundle: experiment.candidate,\n bundle: experiment[targetArm],\n targets: activation.targets.map((target) => ({\n ...target,\n desiredDigest: agentImprovementTargetDigest(experiment, targetArm, target.surface),\n desiredInput: agentImprovementTargetInput(experiment[targetArm], target.surface),\n })) as SealedCandidateActivationTransitionInput['targets'],\n attemptedAt,\n expired,\n }\n}\n\nfunction profileImprovementTransition(\n experiment: AgentProfileImprovementExperiment,\n activation: AgentImprovementActivation,\n attemptedAt: string,\n expired: boolean,\n): ProfileImprovementActivationTransitionInput {\n const sourceArm = activation.intent === 'activate-candidate' ? 'baseline' : 'candidate'\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const operation = profileImprovementOperation(experiment, activation.intent)\n return {\n kind: 'profile-improvement',\n activation,\n experiment,\n sourceStateDigest: agentProfileImprovementStateDigest(experiment, sourceArm),\n desiredStateDigest: agentProfileImprovementStateDigest(experiment, targetArm),\n operation,\n targets: activation.targets.map((target) => ({\n ...target,\n desiredDigest: agentProfileImprovementStateDigest(experiment, targetArm),\n desiredInput: operation,\n })) as ProfileImprovementActivationTransitionInput['targets'],\n attemptedAt,\n expired,\n }\n}\n\nfunction profileImprovementOperation(\n experiment: AgentProfileImprovementExperiment,\n intent: AgentImprovementActivation['intent'],\n): AgentProfileImprovementActivationOperation {\n return intent === 'activate-candidate'\n ? { kind: 'apply-change', changes: experiment.change }\n : { kind: 'restore-state' }\n}\n\nfunction uncertainActivationResult(\n transition: AgentImprovementActivationTransitionInput,\n code: string,\n): AgentImprovementActivationResult {\n return createAgentImprovementActivationResult(transition, {\n completedAt: transition.attemptedAt,\n outcome: {\n status: 'indeterminate',\n code,\n message: 'The product transition did not return a trustworthy commit result.',\n },\n })\n}\n\nfunction assertTransitionInput(\n activation: AgentImprovementActivation,\n transition: AgentImprovementActivationTransitionInput,\n): void {\n if (transition.kind === 'sealed-candidate') {\n assertSealedCandidateTransitionInput(activation, transition)\n return\n }\n assertProfileImprovementTransitionInput(activation, transition)\n}\n\nfunction assertSealedCandidateTransitionInput(\n activation: AgentImprovementActivation,\n transition: SealedCandidateActivationTransitionInput,\n): void {\n assertAuthorizedTransitionTargets(activation, transition.targets)\n const desiredInputsMatch = transition.targets.every(\n (target) =>\n canonicalCandidateDigest(target.desiredInput) ===\n canonicalCandidateDigest(agentImprovementTargetInput(transition.bundle, target.surface)),\n )\n if (\n transition.expired !== Date.parse(transition.attemptedAt) >= Date.parse(activation.expiresAt) ||\n transition.candidateBundle.digest !== activation.candidateDigest ||\n !desiredInputsMatch ||\n (activation.intent === 'activate-candidate' &&\n transition.bundle.digest !== transition.candidateBundle.digest)\n ) {\n throw new Error('activation transition does not match its authorization')\n }\n}\n\nfunction assertProfileImprovementTransitionInput(\n activation: AgentImprovementActivation,\n transition: ProfileImprovementActivationTransitionInput,\n): void {\n assertAuthorizedTransitionTargets(activation, transition.targets)\n const targetsAgentProfile = activation.targets.some(\n (target) => target.surface === 'agent-profile',\n )\n const experiment = agentProfileImprovementExperimentSchema.parse(transition.experiment)\n const sourceArm = activation.intent === 'activate-candidate' ? 'baseline' : 'candidate'\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const sourceStateDigest = agentProfileImprovementStateDigest(experiment, sourceArm)\n const desiredStateDigest = agentProfileImprovementStateDigest(experiment, targetArm)\n const operation = profileImprovementOperation(experiment, activation.intent)\n const targetsMatch = transition.targets.every(\n (target) =>\n target.expectedBaseDigest === sourceStateDigest &&\n target.desiredDigest === desiredStateDigest &&\n canonicalCandidateDigest(target.desiredInput) === canonicalCandidateDigest(operation),\n )\n if (\n transition.expired !== Date.parse(transition.attemptedAt) >= Date.parse(activation.expiresAt) ||\n experiment.digest !== activation.experimentDigest ||\n experiment.candidate.stateDigest !== activation.candidateDigest ||\n (targetsAgentProfile &&\n (activation.executionRef === undefined ||\n canonicalCandidateDigest(activation.executionRef) !==\n canonicalCandidateDigest(experiment.executionRef))) ||\n transition.sourceStateDigest !== sourceStateDigest ||\n transition.desiredStateDigest !== desiredStateDigest ||\n canonicalCandidateDigest(transition.operation) !== canonicalCandidateDigest(operation) ||\n !targetsMatch\n ) {\n throw new Error('activation transition does not match its authorization')\n }\n}\n\nfunction assertAuthorizedTransitionTargets(\n activation: AgentImprovementActivation,\n targets: readonly AgentImprovementActivationTargetPlan[],\n): void {\n const authorized = targetMap(activation.targets)\n const planned = targetMap(targets)\n if (\n authorized.size !== planned.size ||\n [...authorized.entries()].some(\n ([identity, target]) =>\n planned.get(identity)?.expectedBaseDigest !== target.expectedBaseDigest,\n )\n ) {\n throw new Error('activation transition does not match its authorization')\n }\n}\n\nfunction assertResultAgainstActivation(\n activation: AgentImprovementActivation,\n result: AgentImprovementActivationResult,\n): void {\n const attemptedAt = Date.parse(result.attemptedAt)\n const completedAt = Date.parse(result.completedAt)\n const expiresAt = Date.parse(activation.expiresAt)\n if (\n result.idempotencyKey !== activation.digest ||\n attemptedAt < Date.parse(activation.authorizedAt) ||\n completedAt < attemptedAt\n ) {\n throw new Error('activation result does not bind its authorization')\n }\n const expired = attemptedAt >= expiresAt\n if (\n (result.outcome.status === 'expired' && !expired) ||\n (expired && !['expired', 'indeterminate', 'already-applied'].includes(result.outcome.status))\n ) {\n throw new Error('activation result does not honor its authorization expiry')\n }\n if (!('targets' in result.outcome)) return\n const authorized = targetMap(activation.targets)\n const observed = new Set(result.outcome.targets.map(targetIdentity))\n if (\n authorized.size !== observed.size ||\n [...authorized.keys()].some((identity) => !observed.has(identity))\n ) {\n throw new Error('activation result must cover every authorized target exactly once')\n }\n if (\n result.outcome.status === 'applied' &&\n result.outcome.targets.some(\n (target) =>\n target.beforeDigest !== authorized.get(targetIdentity(target))?.expectedBaseDigest,\n )\n ) {\n throw new Error('applied activation did not start from its authorized base state')\n }\n}\n\nfunction assertResultDesiredState(\n proposal: AgentImprovementProposal,\n activation: AgentImprovementActivation,\n result: AgentImprovementActivationResult,\n): void {\n if (!('targets' in result.outcome)) return\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const desiredStateDigest =\n proposal.evaluation.kind === 'agent-profile-improvement-measured-comparison'\n ? agentProfileImprovementStateDigest(proposal.evaluation.experiment, targetArm)\n : undefined\n const desired = new Map(\n activation.targets.map((target) => [\n targetIdentity(target),\n desiredStateDigest ??\n agentImprovementTargetDigest(\n requireSealedCandidateExperiment(proposal),\n targetArm,\n target.surface,\n ),\n ]),\n )\n assertOutcomeDesiredState(activation, result, desired)\n}\n\nfunction assertOutcomeDesiredState(\n activation: AgentImprovementActivation,\n result: AgentImprovementActivationResult,\n desired: ReadonlyMap<string, Sha256Digest>,\n): void {\n if (!('targets' in result.outcome)) return\n if (result.outcome.status === 'applied') {\n if (\n result.outcome.targets.some(\n (target) => target.afterDigest !== desired.get(targetIdentity(target)),\n )\n ) {\n throw new Error('applied activation does not match the requested bundle')\n }\n return\n }\n const allDesired = result.outcome.targets.every(\n (target) => target.currentDigest === desired.get(targetIdentity(target)),\n )\n if (result.outcome.status === 'already-applied') {\n if (!allDesired) throw new Error('already-applied activation is not at the requested state')\n return\n }\n const authorized = targetMap(activation.targets)\n const hasStaleTarget = result.outcome.targets.some(\n (target) => target.currentDigest !== authorized.get(targetIdentity(target))?.expectedBaseDigest,\n )\n if (allDesired || !hasStaleTarget) {\n throw new Error('activation conflict does not identify stale target state')\n }\n}\n\nfunction targetMap<T extends { surface: AgentImprovementSurface; identity: string }>(\n targets: readonly T[],\n): Map<string, T> {\n return new Map(targets.map((target) => [targetIdentity(target), target]))\n}\n\nfunction targetIdentity(target: { surface: AgentImprovementSurface; identity: string }): string {\n return `${target.surface}\\u0000${target.identity}`\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"activation-BZ2FyX0O.js","names":["canonicalCandidateDigest"],"sources":["../src/intelligence/activation.ts"],"sourcesContent":["import type {\n AgentCandidateBundle,\n AgentCandidateExperiment,\n AgentImprovementActivation,\n AgentImprovementActivationOutcome,\n AgentImprovementActivationResult,\n AgentImprovementActivationTarget,\n AgentImprovementProposal,\n AgentImprovementReview,\n AgentImprovementSurface,\n AgentProfileImprovementChange,\n AgentProfileImprovementExperiment,\n Sha256Digest,\n} from '@tangle-network/agent-interface'\nimport {\n agentImprovementActivationResultSchema,\n agentImprovementActivationSchema,\n agentProfileImprovementExperimentSchema,\n} from '@tangle-network/agent-interface'\n\nimport {\n canonicalCandidateDigest,\n canonicalCandidateDocument,\n immutableCandidateValue,\n verifyCanonicalCandidateDocument,\n} from '../candidate-execution/digest'\nimport {\n requireSealedCandidateExperiment,\n verifyAgentImprovementActivation,\n verifyAgentImprovementProposal,\n} from './improvement-cycle'\nimport {\n agentImprovementTargetDigest,\n agentImprovementTargetInput,\n agentProfileImprovementStateDigest,\n} from './improvement-surfaces'\n\nexport interface CreateAgentImprovementActivationResultOptions {\n completedAt: string\n outcome: AgentImprovementActivationOutcome\n}\n\nexport interface AgentImprovementActivationTargetPlan extends AgentImprovementActivationTarget {\n desiredDigest: Sha256Digest\n /**\n * Exact measured input the product must apply to reach `desiredDigest`.\n * Transition surfaces such as code and knowledge are applied operations, so\n * their resulting state digest is not the digest of this input document.\n */\n desiredInput: unknown\n}\n\nexport type AgentProfileImprovementActivationOperation =\n | {\n kind: 'apply-change'\n changes: AgentProfileImprovementChange\n }\n | {\n /** The product must load its own saved state at `desiredStateDigest`. */\n kind: 'restore-state'\n }\n\nexport interface AgentProfileImprovementActivationTargetPlan\n extends AgentImprovementActivationTarget {\n desiredDigest: Sha256Digest\n desiredInput: AgentProfileImprovementActivationOperation\n}\n\nexport interface SealedCandidateActivationTransitionInput {\n kind: 'sealed-candidate'\n activation: AgentImprovementActivation\n candidateBundle: AgentCandidateBundle\n bundle: AgentCandidateBundle\n targets: [AgentImprovementActivationTargetPlan, ...AgentImprovementActivationTargetPlan[]]\n attemptedAt: string\n expired: boolean\n}\n\n/**\n * A measured profile change without raw profile bytes.\n * The product owns the private state lookup and atomic write.\n */\nexport interface ProfileImprovementActivationTransitionInput {\n kind: 'profile-improvement'\n activation: AgentImprovementActivation\n experiment: AgentProfileImprovementExperiment\n sourceStateDigest: Sha256Digest\n desiredStateDigest: Sha256Digest\n operation: AgentProfileImprovementActivationOperation\n targets: [\n AgentProfileImprovementActivationTargetPlan,\n ...AgentProfileImprovementActivationTargetPlan[],\n ]\n attemptedAt: string\n expired: boolean\n}\n\nexport type AgentImprovementActivationTransitionInput =\n | SealedCandidateActivationTransitionInput\n | ProfileImprovementActivationTransitionInput\n\nexport interface AgentImprovementActivationResultStore {\n load(idempotencyKey: Sha256Digest): Promise<unknown | undefined>\n putIfAbsent(result: AgentImprovementActivationResult): Promise<unknown>\n}\n\n/**\n * Product-owned or Runtime-composed transition.\n *\n * Implementations resolve a stored result for `activation.digest`, compare\n * every target, and make the write durably idempotent. Co-located targets store\n * the all-or-none write with its result. Other targets throw when result\n * storage fails so a retry can reconcile it. Runtime never invokes this write\n * function after authorization expires.\n */\nexport type AgentImprovementActivationTransition = (\n input: AgentImprovementActivationTransitionInput,\n) => Promise<unknown>\n\n/**\n * Target-read-only check for a prior exact write.\n * It may persist recovered result metadata, but must not change an activation target.\n * Return undefined only when no target write can have committed.\n */\nexport type AgentImprovementActivationReconciliation = (\n input: AgentImprovementActivationTransitionInput,\n) => Promise<unknown | undefined>\n\nexport interface ExecuteAgentImprovementActivationInput {\n proposal: AgentImprovementProposal\n review: AgentImprovementReview\n activation: AgentImprovementActivation\n}\n\nexport interface ExecuteAgentImprovementActivationOptions {\n transition: AgentImprovementActivationTransition\n reconcile?: AgentImprovementActivationReconciliation\n now?: () => Date\n}\n\n/** Create the exact result a product stores in the same transaction as its target write. */\nexport function createAgentImprovementActivationResult(\n transition: AgentImprovementActivationTransitionInput,\n options: CreateAgentImprovementActivationResultOptions,\n): AgentImprovementActivationResult {\n const activation = verifyCanonicalCandidateDocument(\n agentImprovementActivationSchema.parse(transition.activation),\n 'agent improvement activation',\n )\n assertTransitionInput(activation, transition)\n const result = agentImprovementActivationResultSchema.parse(\n canonicalCandidateDocument<AgentImprovementActivationResult>({\n kind: 'agent-improvement-activation-result',\n idempotencyKey: activation.digest,\n attemptedAt: transition.attemptedAt,\n completedAt: options.completedAt,\n outcome: options.outcome,\n }).value,\n )\n assertResultAgainstActivation(activation, result)\n assertOutcomeDesiredState(\n activation,\n result,\n new Map(transition.targets.map((target) => [targetIdentity(target), target.desiredDigest])),\n )\n return immutableCandidateValue(result)\n}\n\n/**\n * Recompute one historical activation result against the exact measured proposal and authority.\n * The result records that attempt; it is not a query of the target's current state.\n */\nexport function verifyAgentImprovementActivationResult(input: {\n proposal: unknown\n review: unknown\n activation: unknown\n result: unknown\n}): AgentImprovementActivationResult {\n const proposal = verifyAgentImprovementProposal(input.proposal)\n const activation = verifyAgentImprovementActivation(input)\n const result = verifyCanonicalCandidateDocument(\n agentImprovementActivationResultSchema.parse(input.result),\n 'agent improvement activation result',\n )\n assertResultAgainstActivation(activation, result)\n assertResultDesiredState(proposal, activation, result)\n return result\n}\n\n/** Validate and execute one product-owned activation transition. */\nexport async function executeAgentImprovementActivation(\n input: ExecuteAgentImprovementActivationInput,\n options: ExecuteAgentImprovementActivationOptions,\n): Promise<AgentImprovementActivationResult> {\n const proposal = verifyAgentImprovementProposal(input.proposal)\n const activation = verifyAgentImprovementActivation(input)\n const observedAt = (options.now ?? (() => new Date()))().toISOString()\n const attemptedAt =\n Date.parse(observedAt) < Date.parse(activation.authorizedAt)\n ? activation.authorizedAt\n : observedAt\n const expired = Date.parse(attemptedAt) >= Date.parse(activation.expiresAt)\n const transition = immutableCandidateValue<AgentImprovementActivationTransitionInput>(\n proposal.evaluation.kind === 'agent-improvement-measured-comparison'\n ? sealedCandidateTransition(proposal.evaluation.experiment, activation, attemptedAt, expired)\n : profileImprovementTransition(\n proposal.evaluation.experiment,\n activation,\n attemptedAt,\n expired,\n ),\n )\n\n if (transition.expired) {\n if (!options.reconcile) {\n return uncertainActivationResult(transition, 'RECONCILIATION_UNAVAILABLE')\n }\n let reconciled: unknown\n try {\n reconciled = await options.reconcile(transition)\n } catch {\n return uncertainActivationResult(transition, 'RECONCILIATION_THROW')\n }\n if (reconciled === undefined) {\n return createAgentImprovementActivationResult(transition, {\n completedAt: transition.attemptedAt,\n outcome: { status: 'expired' },\n })\n }\n try {\n return verifyAgentImprovementActivationResult({ ...input, result: reconciled })\n } catch {\n return uncertainActivationResult(transition, 'INVALID_RECONCILIATION')\n }\n }\n\n let rawResult: unknown\n try {\n rawResult = await options.transition(transition)\n } catch {\n return uncertainActivationResult(transition, 'TRANSITION_THROW')\n }\n try {\n return verifyAgentImprovementActivationResult({ ...input, result: rawResult })\n } catch {\n return uncertainActivationResult(transition, 'INVALID_RESULT')\n }\n}\n\nfunction sealedCandidateTransition(\n experiment: AgentCandidateExperiment,\n activation: AgentImprovementActivation,\n attemptedAt: string,\n expired: boolean,\n): SealedCandidateActivationTransitionInput {\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n return {\n kind: 'sealed-candidate',\n activation,\n candidateBundle: experiment.candidate,\n bundle: experiment[targetArm],\n targets: activation.targets.map((target) => ({\n ...target,\n desiredDigest: agentImprovementTargetDigest(experiment, targetArm, target.surface),\n desiredInput: agentImprovementTargetInput(experiment[targetArm], target.surface),\n })) as SealedCandidateActivationTransitionInput['targets'],\n attemptedAt,\n expired,\n }\n}\n\nfunction profileImprovementTransition(\n experiment: AgentProfileImprovementExperiment,\n activation: AgentImprovementActivation,\n attemptedAt: string,\n expired: boolean,\n): ProfileImprovementActivationTransitionInput {\n const sourceArm = activation.intent === 'activate-candidate' ? 'baseline' : 'candidate'\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const operation = profileImprovementOperation(experiment, activation.intent)\n return {\n kind: 'profile-improvement',\n activation,\n experiment,\n sourceStateDigest: agentProfileImprovementStateDigest(experiment, sourceArm),\n desiredStateDigest: agentProfileImprovementStateDigest(experiment, targetArm),\n operation,\n targets: activation.targets.map((target) => ({\n ...target,\n desiredDigest: agentProfileImprovementStateDigest(experiment, targetArm),\n desiredInput: operation,\n })) as ProfileImprovementActivationTransitionInput['targets'],\n attemptedAt,\n expired,\n }\n}\n\nfunction profileImprovementOperation(\n experiment: AgentProfileImprovementExperiment,\n intent: AgentImprovementActivation['intent'],\n): AgentProfileImprovementActivationOperation {\n return intent === 'activate-candidate'\n ? { kind: 'apply-change', changes: experiment.change }\n : { kind: 'restore-state' }\n}\n\nfunction uncertainActivationResult(\n transition: AgentImprovementActivationTransitionInput,\n code: string,\n): AgentImprovementActivationResult {\n return createAgentImprovementActivationResult(transition, {\n completedAt: transition.attemptedAt,\n outcome: {\n status: 'indeterminate',\n code,\n message: 'The product transition did not return a trustworthy commit result.',\n },\n })\n}\n\nfunction assertTransitionInput(\n activation: AgentImprovementActivation,\n transition: AgentImprovementActivationTransitionInput,\n): void {\n if (transition.kind === 'sealed-candidate') {\n assertSealedCandidateTransitionInput(activation, transition)\n return\n }\n assertProfileImprovementTransitionInput(activation, transition)\n}\n\nfunction assertSealedCandidateTransitionInput(\n activation: AgentImprovementActivation,\n transition: SealedCandidateActivationTransitionInput,\n): void {\n assertAuthorizedTransitionTargets(activation, transition.targets)\n const desiredInputsMatch = transition.targets.every(\n (target) =>\n canonicalCandidateDigest(target.desiredInput) ===\n canonicalCandidateDigest(agentImprovementTargetInput(transition.bundle, target.surface)),\n )\n if (\n transition.expired !== Date.parse(transition.attemptedAt) >= Date.parse(activation.expiresAt) ||\n transition.candidateBundle.digest !== activation.candidateDigest ||\n !desiredInputsMatch ||\n (activation.intent === 'activate-candidate' &&\n transition.bundle.digest !== transition.candidateBundle.digest)\n ) {\n throw new Error('activation transition does not match its authorization')\n }\n}\n\nfunction assertProfileImprovementTransitionInput(\n activation: AgentImprovementActivation,\n transition: ProfileImprovementActivationTransitionInput,\n): void {\n assertAuthorizedTransitionTargets(activation, transition.targets)\n const targetsAgentProfile = activation.targets.some(\n (target) => target.surface === 'agent-profile',\n )\n const experiment = agentProfileImprovementExperimentSchema.parse(transition.experiment)\n const sourceArm = activation.intent === 'activate-candidate' ? 'baseline' : 'candidate'\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const sourceStateDigest = agentProfileImprovementStateDigest(experiment, sourceArm)\n const desiredStateDigest = agentProfileImprovementStateDigest(experiment, targetArm)\n const operation = profileImprovementOperation(experiment, activation.intent)\n const targetsMatch = transition.targets.every(\n (target) =>\n target.expectedBaseDigest === sourceStateDigest &&\n target.desiredDigest === desiredStateDigest &&\n canonicalCandidateDigest(target.desiredInput) === canonicalCandidateDigest(operation),\n )\n if (\n transition.expired !== Date.parse(transition.attemptedAt) >= Date.parse(activation.expiresAt) ||\n experiment.digest !== activation.experimentDigest ||\n experiment.candidate.stateDigest !== activation.candidateDigest ||\n (targetsAgentProfile &&\n (activation.executionRef === undefined ||\n canonicalCandidateDigest(activation.executionRef) !==\n canonicalCandidateDigest(experiment.executionRef))) ||\n transition.sourceStateDigest !== sourceStateDigest ||\n transition.desiredStateDigest !== desiredStateDigest ||\n canonicalCandidateDigest(transition.operation) !== canonicalCandidateDigest(operation) ||\n !targetsMatch\n ) {\n throw new Error('activation transition does not match its authorization')\n }\n}\n\nfunction assertAuthorizedTransitionTargets(\n activation: AgentImprovementActivation,\n targets: readonly AgentImprovementActivationTargetPlan[],\n): void {\n const authorized = targetMap(activation.targets)\n const planned = targetMap(targets)\n if (\n authorized.size !== planned.size ||\n [...authorized.entries()].some(\n ([identity, target]) =>\n planned.get(identity)?.expectedBaseDigest !== target.expectedBaseDigest,\n )\n ) {\n throw new Error('activation transition does not match its authorization')\n }\n}\n\nfunction assertResultAgainstActivation(\n activation: AgentImprovementActivation,\n result: AgentImprovementActivationResult,\n): void {\n const attemptedAt = Date.parse(result.attemptedAt)\n const completedAt = Date.parse(result.completedAt)\n const expiresAt = Date.parse(activation.expiresAt)\n if (\n result.idempotencyKey !== activation.digest ||\n attemptedAt < Date.parse(activation.authorizedAt) ||\n completedAt < attemptedAt\n ) {\n throw new Error('activation result does not bind its authorization')\n }\n const expired = attemptedAt >= expiresAt\n if (\n (result.outcome.status === 'expired' && !expired) ||\n (expired && !['expired', 'indeterminate', 'already-applied'].includes(result.outcome.status))\n ) {\n throw new Error('activation result does not honor its authorization expiry')\n }\n if (!('targets' in result.outcome)) return\n const authorized = targetMap(activation.targets)\n const observed = new Set(result.outcome.targets.map(targetIdentity))\n if (\n authorized.size !== observed.size ||\n [...authorized.keys()].some((identity) => !observed.has(identity))\n ) {\n throw new Error('activation result must cover every authorized target exactly once')\n }\n if (\n result.outcome.status === 'applied' &&\n result.outcome.targets.some(\n (target) =>\n target.beforeDigest !== authorized.get(targetIdentity(target))?.expectedBaseDigest,\n )\n ) {\n throw new Error('applied activation did not start from its authorized base state')\n }\n}\n\nfunction assertResultDesiredState(\n proposal: AgentImprovementProposal,\n activation: AgentImprovementActivation,\n result: AgentImprovementActivationResult,\n): void {\n if (!('targets' in result.outcome)) return\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const desiredStateDigest =\n proposal.evaluation.kind === 'agent-profile-improvement-measured-comparison'\n ? agentProfileImprovementStateDigest(proposal.evaluation.experiment, targetArm)\n : undefined\n const desired = new Map(\n activation.targets.map((target) => [\n targetIdentity(target),\n desiredStateDigest ??\n agentImprovementTargetDigest(\n requireSealedCandidateExperiment(proposal),\n targetArm,\n target.surface,\n ),\n ]),\n )\n assertOutcomeDesiredState(activation, result, desired)\n}\n\nfunction assertOutcomeDesiredState(\n activation: AgentImprovementActivation,\n result: AgentImprovementActivationResult,\n desired: ReadonlyMap<string, Sha256Digest>,\n): void {\n if (!('targets' in result.outcome)) return\n if (result.outcome.status === 'applied') {\n if (\n result.outcome.targets.some(\n (target) => target.afterDigest !== desired.get(targetIdentity(target)),\n )\n ) {\n throw new Error('applied activation does not match the requested bundle')\n }\n return\n }\n const allDesired = result.outcome.targets.every(\n (target) => target.currentDigest === desired.get(targetIdentity(target)),\n )\n if (result.outcome.status === 'already-applied') {\n if (!allDesired) throw new Error('already-applied activation is not at the requested state')\n return\n }\n const authorized = targetMap(activation.targets)\n const hasStaleTarget = result.outcome.targets.some(\n (target) => target.currentDigest !== authorized.get(targetIdentity(target))?.expectedBaseDigest,\n )\n if (allDesired || !hasStaleTarget) {\n throw new Error('activation conflict does not identify stale target state')\n }\n}\n\nfunction targetMap<T extends { surface: AgentImprovementSurface; identity: string }>(\n targets: readonly T[],\n): Map<string, T> {\n return new Map(targets.map((target) => [targetIdentity(target), target]))\n}\n\nfunction targetIdentity(target: { surface: AgentImprovementSurface; identity: string }): string {\n return `${target.surface}\\u0000${target.identity}`\n}\n"],"mappings":"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"}
package/dist/agent.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { x as RuntimeStreamEvent } from "./types-C9j4qg6l.js";
2
2
  import { a as createSurfaceImprovementProposer, c as SurfaceValidationIssue, d as validateSurfaces, i as SurfaceImprovementEdit, l as renderSurfaceIssues, n as DraftPatchInput, o as AgentSurfaces, r as DraftPatchOutput, s as ResolvedSurface, t as CreateSurfaceImprovementProposerOptions, u as resolveSubjectPath } from "./improvement-adapter-D5gwwoXQ.js";
3
+ import { Af as DefineProfileMaterializationContractOptions, Bf as promptControlProfileMaterialization, Df as AgentProfileMaterializationAxis, Ef as AGENT_PROFILE_MATERIALIZATION_AXES, Ff as assertProfileMaterialization, Gf as sandboxActProfileMaterialization, Hf as promptOnlyProfileMaterialization, If as controlProfileMaterialization, Kf as validateProfileMaterialization, Lf as defineProfileMaterializationContract, Mf as ProfileMaterializationContract, Nf as ProfileMaterializationIssue, Of as AssertProfileMaterializationOptions, Pf as ValidateProfileMaterializationOptions, Rf as fullProfileMaterialization, Uf as promptResourceProfileMaterialization, Vf as promptModelProfileMaterialization, Wf as renderProfileMaterializationIssues, jf as KnownAgentProfileMaterializationAxis, kf as CanonicalAgentProfileMaterializationAxis, qf as worktreeCliProfileMaterialization, zf as profileMaterializationAxes } from "./index-DPWJxSRa.js";
3
4
  import { E as SandboxClient, t as AgentRunSpec, w as OutputAdapter } from "./types-DnNGJ5Gz.js";
4
- import "./index-BUWd8QJq.js";
5
5
  import { TraceAnalystDefinition } from "@tangle-network/agent-eval";
6
- import { AGENT_PROFILE_MATERIALIZATION_AXES, AgentProfile as AgentProfile$1, AgentProfileFileMount, AgentProfileMcpServer, CanonicalAgentProfileMaterializationAxis } from "@tangle-network/agent-interface";
6
+ import { AgentProfile as AgentProfile$1, AgentProfileFileMount, AgentProfileMcpServer } from "@tangle-network/agent-interface";
7
7
  import { SandboxEvent } from "@tangle-network/sandbox";
8
8
  //#region src/agent/define-agent.d.ts
9
9
  /**
@@ -227,67 +227,6 @@ declare class AgentManifestError extends Error {
227
227
  */
228
228
  declare function defineAgent<TPersona = unknown, TRunOutput = unknown>(manifest: AgentManifest<TPersona, TRunOutput>): AgentManifest<TPersona, TRunOutput>;
229
229
  //#endregion
230
- //#region src/agent/profile-materialization.d.ts
231
- type KnownAgentProfileMaterializationAxis = CanonicalAgentProfileMaterializationAxis;
232
- /** AgentProfile axis name, with `custom:<name>` reserved for caller-owned extensions. */
233
- type AgentProfileMaterializationAxis = KnownAgentProfileMaterializationAxis | `custom:${string}`;
234
- /** Declares which AgentProfile axes a concrete run path really carries. */
235
- interface ProfileMaterializationContract {
236
- /** Human-readable run path, e.g. `createSandboxAct` or `prompt-only-message`. */
237
- name: string;
238
- /** Profile axes this run path actually carries into execution. */
239
- axes: readonly AgentProfileMaterializationAxis[];
240
- }
241
- /** One changed AgentProfile axis that would be dropped by a run path. */
242
- interface ProfileMaterializationIssue {
243
- contract: string;
244
- axis: AgentProfileMaterializationAxis;
245
- reason: 'unsupported-axis';
246
- supportedAxes: readonly AgentProfileMaterializationAxis[];
247
- }
248
- /** Input for declaring a run path's profile-axis support. */
249
- interface DefineProfileMaterializationContractOptions {
250
- name: string;
251
- axes: readonly AgentProfileMaterializationAxis[];
252
- }
253
- /** Input for checking a candidate diff against a run path. */
254
- interface ValidateProfileMaterializationOptions {
255
- contract: ProfileMaterializationContract;
256
- changedAxes: readonly AgentProfileMaterializationAxis[];
257
- }
258
- /** Input for throwing on dropped profile axes. */
259
- interface AssertProfileMaterializationOptions extends ValidateProfileMaterializationOptions {
260
- /** Extra label included in the thrown error, usually the caller or run id. */
261
- context?: string;
262
- }
263
- /**
264
- * Materialization contract for `createSandboxAct`.
265
- *
266
- * `createSandboxAct` hands the whole `AgentProfile` to the sandbox as `backend.profile`, so every
267
- * profile leaf crosses the boundary. `buildBackendOptions` resolves the runner from an explicit
268
- * `sandboxOverrides.backend.type`, then `profile.metadata.backendType`, then `profile.harness`,
269
- * so a candidate that changes only `harness` runs on the harness it declares — and one declaring
270
- * a harness the sandbox cannot run throws rather than running elsewhere and reporting success.
271
- */
272
- declare const sandboxActProfileMaterialization: ProfileMaterializationContract;
273
- /** Materialization contract for a run path that only injects prompt text. */
274
- declare const promptOnlyProfileMaterialization: ProfileMaterializationContract;
275
- /**
276
- * Materialization contract for a run path that injects prompt text plus inline resources.
277
- *
278
- * `resourceFailOnError` is absent: it is a resolution POLICY the attaching path would have to
279
- * enforce, and inlining resource content does not carry it.
280
- */
281
- declare const promptResourceProfileMaterialization: ProfileMaterializationContract;
282
- /** Define the profile axes a concrete run path actually carries into execution. */
283
- declare function defineProfileMaterializationContract(options: DefineProfileMaterializationContractOptions): ProfileMaterializationContract;
284
- /** Return every changed profile axis that the selected run path would drop. */
285
- declare function validateProfileMaterialization(options: ValidateProfileMaterializationOptions): readonly ProfileMaterializationIssue[];
286
- /** Throw when a candidate changes axes the selected run path cannot carry. */
287
- declare function assertProfileMaterialization(options: AssertProfileMaterializationOptions): void;
288
- /** Format profile-axis drop issues into a concise operator-facing error. */
289
- declare function renderProfileMaterializationIssues(issues: readonly ProfileMaterializationIssue[], context?: string): string;
290
- //#endregion
291
230
  //#region src/agent/sandbox-act.d.ts
292
231
  /** Per-persona profile-merge slots applied over the base profile (§1.5: the caller authors the
293
232
  * per-persona profile). Each slot overlays the base; an absent slot leaves the base untouched. */
@@ -336,5 +275,5 @@ interface CreateSandboxActOptions<TPersona, TRunOutput> {
336
275
  */
337
276
  declare function createSandboxAct<TPersona, TRunOutput>(options: CreateSandboxActOptions<TPersona, TRunOutput>): (persona: TPersona, ctx: AgentRunContext) => AgentRunInvocation<TRunOutput>;
338
277
  //#endregion
339
- export { AGENT_PROFILE_MATERIALIZATION_AXES, type AgentManifest, AgentManifestError, type AgentProfileMaterializationAxis, type AgentRubric, type AgentRunContext, type AgentRunInvocation, type AgentRuntime, type AgentSurfaces, type AnalystConfig, type AssertProfileMaterializationOptions, type CreateSandboxActOptions, type CreateSurfaceImprovementProposerOptions, type DefineProfileMaterializationContractOptions, type DraftPatchInput, type DraftPatchOutput, type JudgeConfig, type KnownAgentProfileMaterializationAxis, type ProfileMaterializationContract, type ProfileMaterializationIssue, type ResolvedSurface, type RubricDimension, type SandboxActComposeOverrides, type SurfaceImprovementEdit, type SurfaceValidationIssue, type ValidateProfileMaterializationOptions, assertProfileMaterialization, collectAgentRun, createSandboxAct, createSurfaceImprovementProposer, defineAgent, defineProfileMaterializationContract, promptOnlyProfileMaterialization, promptResourceProfileMaterialization, renderProfileMaterializationIssues, renderSurfaceIssues, resolveSubjectPath, sandboxActProfileMaterialization, unimplementedAgentRun, validateProfileMaterialization, validateSurfaces };
278
+ export { AGENT_PROFILE_MATERIALIZATION_AXES, type AgentManifest, AgentManifestError, type AgentProfileMaterializationAxis, type AgentRubric, type AgentRunContext, type AgentRunInvocation, type AgentRuntime, type AgentSurfaces, type AnalystConfig, type AssertProfileMaterializationOptions, type CanonicalAgentProfileMaterializationAxis, type CreateSandboxActOptions, type CreateSurfaceImprovementProposerOptions, type DefineProfileMaterializationContractOptions, type DraftPatchInput, type DraftPatchOutput, type JudgeConfig, type KnownAgentProfileMaterializationAxis, type ProfileMaterializationContract, type ProfileMaterializationIssue, type ResolvedSurface, type RubricDimension, type SandboxActComposeOverrides, type SurfaceImprovementEdit, type SurfaceValidationIssue, type ValidateProfileMaterializationOptions, assertProfileMaterialization, collectAgentRun, controlProfileMaterialization, createSandboxAct, createSurfaceImprovementProposer, defineAgent, defineProfileMaterializationContract, fullProfileMaterialization, profileMaterializationAxes, promptControlProfileMaterialization, promptModelProfileMaterialization, promptOnlyProfileMaterialization, promptResourceProfileMaterialization, renderProfileMaterializationIssues, renderSurfaceIssues, resolveSubjectPath, sandboxActProfileMaterialization, unimplementedAgentRun, validateProfileMaterialization, validateSurfaces, worktreeCliProfileMaterialization };
340
279
  //# sourceMappingURL=agent.d.ts.map
package/dist/agent.js CHANGED
@@ -1,8 +1,7 @@
1
- import { u as ValidationError } from "./errors-DEAvWQPy.js";
2
- import "./runtime-BatQajPB.js";
3
- import { r as mapSandboxEvent } from "./sandbox-events-DeI5xX8P.js";
4
- import { Kt as createSandboxForSpec } from "./supervise-B7TIJR3D.js";
5
- import { AGENT_PROFILE_MATERIALIZATION_AXES } from "@tangle-network/agent-interface";
1
+ import { At as promptResourceProfileMaterialization, Ct as controlProfileMaterialization, Dt as promptControlProfileMaterialization, Et as profileMaterializationAxes, Mt as sandboxActProfileMaterialization, Nt as validateProfileMaterialization, Ot as promptModelProfileMaterialization, Pt as worktreeCliProfileMaterialization, St as assertProfileMaterialization, Tt as fullProfileMaterialization, jt as renderProfileMaterializationIssues, kt as promptOnlyProfileMaterialization, wt as defineProfileMaterializationContract, xt as AGENT_PROFILE_MATERIALIZATION_AXES } from "./supervisor-CAXiCKnX.js";
2
+ import "./runtime-Ce39zfqn.js";
3
+ import { r as mapSandboxEvent } from "./sandbox-events-Yhd1GYWl.js";
4
+ import { Lt as createSandboxForSpec } from "./supervise-U7_K5yuV.js";
6
5
  import { createHash } from "node:crypto";
7
6
  import { existsSync, readFileSync, statSync } from "node:fs";
8
7
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -435,207 +434,6 @@ function sha256(s) {
435
434
  return createHash("sha256").update(s, "utf-8").digest("hex");
436
435
  }
437
436
  //#endregion
438
- //#region src/agent/profile-materialization.ts
439
- const KNOWN_AXIS_SET = new Set(AGENT_PROFILE_MATERIALIZATION_AXES);
440
- /**
441
- * Compound AgentProfile properties and the canonical leaves they cover.
442
- *
443
- * agent-interface publishes two axis vocabularies, and this module has to sit between them:
444
- * `profileMaterializationAxes` emits canonical LEAVES, while `changedAgentProfileAxes` emits
445
- * DIFF axes, which are compound property names (`model`, `prompt`, `resources`, `identity`) for
446
- * everything except the already-scalar properties. A changed-axis input is therefore expanded
447
- * through this map, so both producers compose with this validator.
448
- *
449
- * A CONTRACT may still only name leaves. Expanding an input is safe — it asks about more, never
450
- * less — whereas letting a contract claim a parent is what silently swallows a dropped child.
451
- */
452
- const compoundAxisLeaves = {
453
- identity: [
454
- "name",
455
- "description",
456
- "version",
457
- "tags"
458
- ],
459
- prompt: ["systemPrompt", "instructions"],
460
- model: [
461
- "modelDefault",
462
- "modelSmall",
463
- "modelProvider",
464
- "modelReasoningEffort",
465
- "modelMetadata"
466
- ],
467
- resources: [
468
- "files",
469
- "resourceTools",
470
- "skills",
471
- "resourceAgents",
472
- "commands",
473
- "resourceInstructions",
474
- "resourceFailOnError"
475
- ],
476
- mcpConnections: ["mcp"]
477
- };
478
- /**
479
- * Materialization contract for `createSandboxAct`.
480
- *
481
- * `createSandboxAct` hands the whole `AgentProfile` to the sandbox as `backend.profile`, so every
482
- * profile leaf crosses the boundary. `buildBackendOptions` resolves the runner from an explicit
483
- * `sandboxOverrides.backend.type`, then `profile.metadata.backendType`, then `profile.harness`,
484
- * so a candidate that changes only `harness` runs on the harness it declares — and one declaring
485
- * a harness the sandbox cannot run throws rather than running elsewhere and reporting success.
486
- */
487
- const sandboxActProfileMaterialization = defineProfileMaterializationContract({
488
- name: "createSandboxAct",
489
- axes: [
490
- "name",
491
- "description",
492
- "version",
493
- "tags",
494
- "harness",
495
- "systemPrompt",
496
- "instructions",
497
- "modelDefault",
498
- "modelSmall",
499
- "modelProvider",
500
- "modelReasoningEffort",
501
- "modelMetadata",
502
- "permissions",
503
- "tools",
504
- "mcp",
505
- "connections",
506
- "subagents",
507
- "files",
508
- "resourceTools",
509
- "skills",
510
- "resourceAgents",
511
- "commands",
512
- "resourceInstructions",
513
- "resourceFailOnError",
514
- "hooks",
515
- "modes",
516
- "confidential",
517
- "metadata",
518
- "extensions"
519
- ]
520
- });
521
- /** Materialization contract for a run path that only injects prompt text. */
522
- const promptOnlyProfileMaterialization = defineProfileMaterializationContract({
523
- name: "prompt-only-message",
524
- axes: ["systemPrompt", "instructions"]
525
- });
526
- /**
527
- * Materialization contract for a run path that injects prompt text plus inline resources.
528
- *
529
- * `resourceFailOnError` is absent: it is a resolution POLICY the attaching path would have to
530
- * enforce, and inlining resource content does not carry it.
531
- */
532
- const promptResourceProfileMaterialization = defineProfileMaterializationContract({
533
- name: "prompt-resource-attachment",
534
- axes: [
535
- "systemPrompt",
536
- "instructions",
537
- "files",
538
- "resourceTools",
539
- "skills",
540
- "resourceAgents",
541
- "commands",
542
- "resourceInstructions"
543
- ]
544
- });
545
- /** Define the profile axes a concrete run path actually carries into execution. */
546
- function defineProfileMaterializationContract(options) {
547
- const name = options.name.trim();
548
- if (!name) throw new ValidationError("defineProfileMaterializationContract: name is required");
549
- return {
550
- name,
551
- axes: normalizeContractAxes(options.axes, `${name}.axes`)
552
- };
553
- }
554
- /** Return every changed profile axis that the selected run path would drop. */
555
- function validateProfileMaterialization(options) {
556
- const changedAxes = normalizeChangedAxes(options.changedAxes, "changedAxes");
557
- const supported = new Set(normalizeContractAxes(options.contract.axes, `${options.contract.name}.axes`));
558
- const issues = [];
559
- for (const axis of changedAxes) {
560
- if (isAxisSupported(axis, supported)) continue;
561
- issues.push({
562
- contract: options.contract.name,
563
- axis,
564
- reason: "unsupported-axis",
565
- supportedAxes: [...supported]
566
- });
567
- }
568
- return issues;
569
- }
570
- /** Throw when a candidate changes axes the selected run path cannot carry. */
571
- function assertProfileMaterialization(options) {
572
- const issues = validateProfileMaterialization(options);
573
- if (issues.length === 0) return;
574
- throw new ValidationError(renderProfileMaterializationIssues(issues, options.context));
575
- }
576
- /** Format profile-axis drop issues into a concise operator-facing error. */
577
- function renderProfileMaterializationIssues(issues, context) {
578
- if (issues.length === 0) return "";
579
- const contract = issues[0]?.contract ?? "<unknown>";
580
- const prefix = context ? `${context}: ` : "";
581
- const droppedAxes = issues.map((issue) => issue.axis).join(", ");
582
- const supportedAxes = issues[0]?.supportedAxes.join(", ") || "<none>";
583
- return [
584
- `${prefix}profile materialization would drop axis changes on "${contract}": ${droppedAxes}.`,
585
- `Supported axes: ${supportedAxes}.`,
586
- "Use a run path that carries those AgentProfile axes, or remove them from the candidate."
587
- ].join("\n");
588
- }
589
- /** Contract side: leaves (or `custom:`) only. A parent claim would hide a dropped child. */
590
- function normalizeContractAxes(axes, label) {
591
- return dedupe(axes.map((raw) => assertLeafAxis(raw, label)));
592
- }
593
- /**
594
- * Input side: leaves, `custom:`, and compound diff axes, which expand to their leaves so
595
- * `changedAgentProfileAxes` output composes with a leaf-only contract.
596
- */
597
- function normalizeChangedAxes(axes, label) {
598
- const out = [];
599
- for (const raw of axes) {
600
- const axis = readAxisName(raw, label);
601
- const leaves = compoundAxisLeaves[axis];
602
- if (leaves && !KNOWN_AXIS_SET.has(axis)) {
603
- out.push(...leaves);
604
- continue;
605
- }
606
- out.push(assertLeafAxis(raw, label));
607
- }
608
- return dedupe(out);
609
- }
610
- function dedupe(axes) {
611
- const out = [];
612
- const seen = /* @__PURE__ */ new Set();
613
- for (const axis of axes) {
614
- if (seen.has(axis)) continue;
615
- seen.add(axis);
616
- out.push(axis);
617
- }
618
- return out;
619
- }
620
- function readAxisName(raw, label) {
621
- if (typeof raw !== "string") throw new ValidationError(`${label}: profile axis must be a string`);
622
- const axis = raw.trim();
623
- if (!axis) throw new ValidationError(`${label}: profile axis must be non-empty`);
624
- return axis;
625
- }
626
- function assertLeafAxis(raw, label) {
627
- const axis = readAxisName(raw, label);
628
- if (!KNOWN_AXIS_SET.has(axis) && !axis.startsWith("custom:")) {
629
- const leaves = compoundAxisLeaves[axis];
630
- if (leaves) throw new ValidationError(`${label}: "${axis}" is a compound AgentProfile property, not a materialization axis. Name the exact leaves this path carries: ${leaves.join(", ")}.`);
631
- throw new ValidationError(`${label}: unknown profile axis "${axis}". Use a known axis or custom:<name>.`);
632
- }
633
- return axis;
634
- }
635
- function isAxisSupported(axis, supported) {
636
- return supported.has(axis);
637
- }
638
- //#endregion
639
437
  //#region src/agent/sandbox-act.ts
640
438
  /**
641
439
  * Build an `AgentRuntime.act` implementation backed by a single prod-profile
@@ -720,6 +518,6 @@ function applyComposeOverrides(base, overrides) {
720
518
  };
721
519
  }
722
520
  //#endregion
723
- export { AGENT_PROFILE_MATERIALIZATION_AXES, AgentManifestError, assertProfileMaterialization, collectAgentRun, createSandboxAct, createSurfaceImprovementProposer, defineAgent, defineProfileMaterializationContract, promptOnlyProfileMaterialization, promptResourceProfileMaterialization, renderProfileMaterializationIssues, renderSurfaceIssues, resolveSubjectPath, sandboxActProfileMaterialization, unimplementedAgentRun, validateProfileMaterialization, validateSurfaces };
521
+ export { AGENT_PROFILE_MATERIALIZATION_AXES, AgentManifestError, assertProfileMaterialization, collectAgentRun, controlProfileMaterialization, createSandboxAct, createSurfaceImprovementProposer, defineAgent, defineProfileMaterializationContract, fullProfileMaterialization, profileMaterializationAxes, promptControlProfileMaterialization, promptModelProfileMaterialization, promptOnlyProfileMaterialization, promptResourceProfileMaterialization, renderProfileMaterializationIssues, renderSurfaceIssues, resolveSubjectPath, sandboxActProfileMaterialization, unimplementedAgentRun, validateProfileMaterialization, validateSurfaces, worktreeCliProfileMaterialization };
724
522
 
725
523
  //# sourceMappingURL=agent.js.map