@tangle-network/agent-runtime 0.101.0 → 0.102.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 (53) hide show
  1. package/README.md +1 -1
  2. package/dist/agent.js +4 -3
  3. package/dist/agent.js.map +1 -1
  4. package/dist/candidate-execution/index.d.ts +13 -2
  5. package/dist/candidate-execution/index.js +7 -3
  6. package/dist/{chunk-LV6WCT43.js → chunk-23Z7N5IG.js} +5 -5
  7. package/dist/chunk-2VZYRB55.js +834 -0
  8. package/dist/chunk-2VZYRB55.js.map +1 -0
  9. package/dist/{chunk-VOPHC4LB.js → chunk-4AMAFNUD.js} +32 -192
  10. package/dist/chunk-4AMAFNUD.js.map +1 -0
  11. package/dist/{chunk-BXZ7GPL4.js → chunk-AIBIRAJ6.js} +2 -2
  12. package/dist/{chunk-Y3SRWZMP.js → chunk-AYU35OTU.js} +2 -2
  13. package/dist/{chunk-U4PRAATQ.js → chunk-DA7YL6I4.js} +3 -3
  14. package/dist/{chunk-HZDEXTSL.js → chunk-IKGCKPDX.js} +2 -833
  15. package/dist/chunk-IKGCKPDX.js.map +1 -0
  16. package/dist/{chunk-WYC2XJF2.js → chunk-KSBUSEUA.js} +2 -2
  17. package/dist/{chunk-UQ6PNNXM.js → chunk-KVJQV342.js} +5 -3
  18. package/dist/{chunk-UQ6PNNXM.js.map → chunk-KVJQV342.js.map} +1 -1
  19. package/dist/chunk-LKKIM5QD.js +200 -0
  20. package/dist/chunk-LKKIM5QD.js.map +1 -0
  21. package/dist/{chunk-FXF2OL34.js → chunk-MAONWP4R.js} +2 -2
  22. package/dist/{chunk-SGQ4YIQW.js → chunk-N2CEE5Q3.js} +3 -3
  23. package/dist/chunk-SPCD4IQQ.js +578 -0
  24. package/dist/chunk-SPCD4IQQ.js.map +1 -0
  25. package/dist/{chunk-HGSHPVJ6.js → chunk-TGDHHHH4.js} +189 -189
  26. package/dist/{chunk-HGSHPVJ6.js.map → chunk-TGDHHHH4.js.map} +1 -1
  27. package/dist/{improve-g75IE2Cx.d.ts → improve-CIml6hT3.d.ts} +7 -0
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.js +16 -10
  30. package/dist/index.js.map +1 -1
  31. package/dist/intelligence.d.ts +60 -59
  32. package/dist/intelligence.js +65 -473
  33. package/dist/intelligence.js.map +1 -1
  34. package/dist/knowledge.js +8 -6
  35. package/dist/loop-runner-bin.js +5 -4
  36. package/dist/loops.js +4 -3
  37. package/dist/mcp/bin.js +4 -3
  38. package/dist/mcp/bin.js.map +1 -1
  39. package/dist/mcp/index.js +6 -5
  40. package/dist/mcp/index.js.map +1 -1
  41. package/dist/testing.d.ts +6 -0
  42. package/dist/testing.js +2638 -0
  43. package/dist/testing.js.map +1 -0
  44. package/package.json +11 -4
  45. package/dist/chunk-HZDEXTSL.js.map +0 -1
  46. package/dist/chunk-VOPHC4LB.js.map +0 -1
  47. /package/dist/{chunk-LV6WCT43.js.map → chunk-23Z7N5IG.js.map} +0 -0
  48. /package/dist/{chunk-BXZ7GPL4.js.map → chunk-AIBIRAJ6.js.map} +0 -0
  49. /package/dist/{chunk-Y3SRWZMP.js.map → chunk-AYU35OTU.js.map} +0 -0
  50. /package/dist/{chunk-U4PRAATQ.js.map → chunk-DA7YL6I4.js.map} +0 -0
  51. /package/dist/{chunk-WYC2XJF2.js.map → chunk-KSBUSEUA.js.map} +0 -0
  52. /package/dist/{chunk-FXF2OL34.js.map → chunk-MAONWP4R.js.map} +0 -0
  53. /package/dist/{chunk-SGQ4YIQW.js.map → chunk-N2CEE5Q3.js.map} +0 -0
@@ -0,0 +1,200 @@
1
+ import {
2
+ agentImprovementTargetDigest,
3
+ agentImprovementTargetInput,
4
+ verifyAgentImprovementActivation,
5
+ verifyAgentImprovementProposal
6
+ } from "./chunk-4AMAFNUD.js";
7
+ import {
8
+ canonicalCandidateDigest,
9
+ canonicalCandidateDocument,
10
+ immutableCandidateValue,
11
+ verifyCanonicalCandidateDocument
12
+ } from "./chunk-TGDHHHH4.js";
13
+
14
+ // src/intelligence/activation.ts
15
+ import {
16
+ agentImprovementActivationResultSchema,
17
+ agentImprovementActivationSchema
18
+ } from "@tangle-network/agent-interface";
19
+ function createAgentImprovementActivationResult(transition, options) {
20
+ const activation = verifyCanonicalCandidateDocument(
21
+ agentImprovementActivationSchema.parse(transition.activation),
22
+ "agent improvement activation"
23
+ );
24
+ assertTransitionInput(activation, transition);
25
+ const result = agentImprovementActivationResultSchema.parse(
26
+ canonicalCandidateDocument({
27
+ kind: "agent-improvement-activation-result",
28
+ idempotencyKey: activation.digest,
29
+ attemptedAt: transition.attemptedAt,
30
+ completedAt: options.completedAt,
31
+ outcome: options.outcome
32
+ }).value
33
+ );
34
+ assertResultAgainstActivation(activation, result);
35
+ assertOutcomeDesiredState(
36
+ activation,
37
+ result,
38
+ new Map(transition.targets.map((target) => [targetIdentity(target), target.desiredDigest]))
39
+ );
40
+ return immutableCandidateValue(result);
41
+ }
42
+ function verifyAgentImprovementActivationResult(input) {
43
+ const proposal = verifyAgentImprovementProposal(input.proposal);
44
+ const activation = verifyAgentImprovementActivation(input);
45
+ const result = verifyCanonicalCandidateDocument(
46
+ agentImprovementActivationResultSchema.parse(input.result),
47
+ "agent improvement activation result"
48
+ );
49
+ assertResultAgainstActivation(activation, result);
50
+ assertResultDesiredState(proposal, activation, result);
51
+ return result;
52
+ }
53
+ async function executeAgentImprovementActivation(input, options) {
54
+ const proposal = verifyAgentImprovementProposal(input.proposal);
55
+ const activation = verifyAgentImprovementActivation(input);
56
+ const experiment = proposal.evaluation.experiment;
57
+ const targetArm = activation.intent === "activate-candidate" ? "candidate" : "baseline";
58
+ const observedAt = (options.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
59
+ const attemptedAt = Date.parse(observedAt) < Date.parse(activation.authorizedAt) ? activation.authorizedAt : observedAt;
60
+ const transition = immutableCandidateValue({
61
+ activation,
62
+ candidateBundle: experiment.candidate,
63
+ bundle: experiment[targetArm],
64
+ targets: activation.targets.map((target) => ({
65
+ ...target,
66
+ desiredDigest: agentImprovementTargetDigest(experiment, targetArm, target.surface),
67
+ desiredInput: agentImprovementTargetInput(experiment[targetArm], target.surface)
68
+ })),
69
+ attemptedAt,
70
+ expired: Date.parse(attemptedAt) >= Date.parse(activation.expiresAt)
71
+ });
72
+ if (transition.expired) {
73
+ if (!options.reconcile) {
74
+ return uncertainActivationResult(transition, "RECONCILIATION_UNAVAILABLE");
75
+ }
76
+ let reconciled;
77
+ try {
78
+ reconciled = await options.reconcile(transition);
79
+ } catch {
80
+ return uncertainActivationResult(transition, "RECONCILIATION_THROW");
81
+ }
82
+ if (reconciled === void 0) {
83
+ return createAgentImprovementActivationResult(transition, {
84
+ completedAt: transition.attemptedAt,
85
+ outcome: { status: "expired" }
86
+ });
87
+ }
88
+ try {
89
+ return verifyAgentImprovementActivationResult({ ...input, result: reconciled });
90
+ } catch {
91
+ return uncertainActivationResult(transition, "INVALID_RECONCILIATION");
92
+ }
93
+ }
94
+ let rawResult;
95
+ try {
96
+ rawResult = await options.transition(transition);
97
+ } catch {
98
+ return uncertainActivationResult(transition, "TRANSITION_THROW");
99
+ }
100
+ try {
101
+ return verifyAgentImprovementActivationResult({ ...input, result: rawResult });
102
+ } catch {
103
+ return uncertainActivationResult(transition, "INVALID_RESULT");
104
+ }
105
+ }
106
+ function uncertainActivationResult(transition, code) {
107
+ return createAgentImprovementActivationResult(transition, {
108
+ completedAt: transition.attemptedAt,
109
+ outcome: {
110
+ status: "indeterminate",
111
+ code,
112
+ message: "The product transition did not return a trustworthy commit result."
113
+ }
114
+ });
115
+ }
116
+ function assertTransitionInput(activation, transition) {
117
+ const authorized = targetMap(activation.targets);
118
+ const planned = targetMap(transition.targets);
119
+ const desiredInputsMatch = transition.targets.every(
120
+ (target) => canonicalCandidateDigest(target.desiredInput) === canonicalCandidateDigest(agentImprovementTargetInput(transition.bundle, target.surface))
121
+ );
122
+ if (authorized.size !== planned.size || [...authorized.entries()].some(
123
+ ([identity, target]) => planned.get(identity)?.expectedBaseDigest !== target.expectedBaseDigest
124
+ ) || transition.expired !== Date.parse(transition.attemptedAt) >= Date.parse(activation.expiresAt) || transition.candidateBundle.digest !== activation.candidateBundleDigest || !desiredInputsMatch || activation.intent === "activate-candidate" && transition.bundle.digest !== transition.candidateBundle.digest) {
125
+ throw new Error("activation transition does not match its authorization");
126
+ }
127
+ }
128
+ function assertResultAgainstActivation(activation, result) {
129
+ const attemptedAt = Date.parse(result.attemptedAt);
130
+ const completedAt = Date.parse(result.completedAt);
131
+ const expiresAt = Date.parse(activation.expiresAt);
132
+ if (result.idempotencyKey !== activation.digest || attemptedAt < Date.parse(activation.authorizedAt) || completedAt < attemptedAt) {
133
+ throw new Error("activation result does not bind its authorization");
134
+ }
135
+ const expired = attemptedAt >= expiresAt;
136
+ if (result.outcome.status === "expired" && !expired || expired && !["expired", "indeterminate", "already-applied"].includes(result.outcome.status)) {
137
+ throw new Error("activation result does not honor its authorization expiry");
138
+ }
139
+ if (!("targets" in result.outcome)) return;
140
+ const authorized = targetMap(activation.targets);
141
+ const observed = new Set(result.outcome.targets.map(targetIdentity));
142
+ if (authorized.size !== observed.size || [...authorized.keys()].some((identity) => !observed.has(identity))) {
143
+ throw new Error("activation result must cover every authorized target exactly once");
144
+ }
145
+ if (result.outcome.status === "applied" && result.outcome.targets.some(
146
+ (target) => target.beforeDigest !== authorized.get(targetIdentity(target))?.expectedBaseDigest
147
+ )) {
148
+ throw new Error("applied activation did not start from its authorized base state");
149
+ }
150
+ }
151
+ function assertResultDesiredState(proposal, activation, result) {
152
+ if (!("targets" in result.outcome)) return;
153
+ const experiment = proposal.evaluation.experiment;
154
+ const targetArm = activation.intent === "activate-candidate" ? "candidate" : "baseline";
155
+ const desired = new Map(
156
+ activation.targets.map((target) => [
157
+ targetIdentity(target),
158
+ agentImprovementTargetDigest(experiment, targetArm, target.surface)
159
+ ])
160
+ );
161
+ assertOutcomeDesiredState(activation, result, desired);
162
+ }
163
+ function assertOutcomeDesiredState(activation, result, desired) {
164
+ if (!("targets" in result.outcome)) return;
165
+ if (result.outcome.status === "applied") {
166
+ if (result.outcome.targets.some(
167
+ (target) => target.afterDigest !== desired.get(targetIdentity(target))
168
+ )) {
169
+ throw new Error("applied activation does not match the requested bundle");
170
+ }
171
+ return;
172
+ }
173
+ const allDesired = result.outcome.targets.every(
174
+ (target) => target.currentDigest === desired.get(targetIdentity(target))
175
+ );
176
+ if (result.outcome.status === "already-applied") {
177
+ if (!allDesired) throw new Error("already-applied activation is not at the requested state");
178
+ return;
179
+ }
180
+ const authorized = targetMap(activation.targets);
181
+ const hasStaleTarget = result.outcome.targets.some(
182
+ (target) => target.currentDigest !== authorized.get(targetIdentity(target))?.expectedBaseDigest
183
+ );
184
+ if (allDesired || !hasStaleTarget) {
185
+ throw new Error("activation conflict does not identify stale target state");
186
+ }
187
+ }
188
+ function targetMap(targets) {
189
+ return new Map(targets.map((target) => [targetIdentity(target), target]));
190
+ }
191
+ function targetIdentity(target) {
192
+ return `${target.surface}\0${target.identity}`;
193
+ }
194
+
195
+ export {
196
+ createAgentImprovementActivationResult,
197
+ verifyAgentImprovementActivationResult,
198
+ executeAgentImprovementActivation
199
+ };
200
+ //# sourceMappingURL=chunk-LKKIM5QD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/intelligence/activation.ts"],"sourcesContent":["import type {\n AgentCandidateBundle,\n AgentImprovementActivation,\n AgentImprovementActivationOutcome,\n AgentImprovementActivationResult,\n AgentImprovementActivationTarget,\n AgentImprovementProposal,\n AgentImprovementReview,\n AgentImprovementSurface,\n Sha256Digest,\n} from '@tangle-network/agent-interface'\nimport {\n agentImprovementActivationResultSchema,\n agentImprovementActivationSchema,\n} from '@tangle-network/agent-interface'\n\nimport {\n canonicalCandidateDigest,\n canonicalCandidateDocument,\n immutableCandidateValue,\n verifyCanonicalCandidateDocument,\n} from '../candidate-execution/digest'\nimport {\n verifyAgentImprovementActivation,\n verifyAgentImprovementProposal,\n} from './improvement-cycle'\nimport { agentImprovementTargetDigest, agentImprovementTargetInput } 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 interface AgentImprovementActivationTransitionInput {\n activation: AgentImprovementActivation\n candidateBundle: AgentCandidateBundle\n bundle: AgentCandidateBundle\n targets: [AgentImprovementActivationTargetPlan, ...AgentImprovementActivationTargetPlan[]]\n attemptedAt: string\n expired: boolean\n}\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 experiment = proposal.evaluation.experiment\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\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 transition = immutableCandidateValue<AgentImprovementActivationTransitionInput>({\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 AgentImprovementActivationTransitionInput['targets'],\n attemptedAt,\n expired: Date.parse(attemptedAt) >= Date.parse(activation.expiresAt),\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 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 const authorized = targetMap(activation.targets)\n const planned = targetMap(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 authorized.size !== planned.size ||\n [...authorized.entries()].some(\n ([identity, target]) =>\n planned.get(identity)?.expectedBaseDigest !== target.expectedBaseDigest,\n ) ||\n transition.expired !== Date.parse(transition.attemptedAt) >= Date.parse(activation.expiresAt) ||\n transition.candidateBundle.digest !== activation.candidateBundleDigest ||\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 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 experiment = proposal.evaluation.experiment\n const targetArm = activation.intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const desired = new Map(\n activation.targets.map((target) => [\n targetIdentity(target),\n agentImprovementTargetDigest(experiment, targetArm, target.surface),\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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","names":[]}
@@ -18,7 +18,7 @@ import {
18
18
  settledToIteration,
19
19
  supervise,
20
20
  withDriverExecutor
21
- } from "./chunk-UQ6PNNXM.js";
21
+ } from "./chunk-KVJQV342.js";
22
22
  import {
23
23
  InMemoryResultBlobStore,
24
24
  InMemorySpawnJournal
@@ -5788,4 +5788,4 @@ export {
5788
5788
  computeFindingId,
5789
5789
  makeFinding2 as makeFinding
5790
5790
  };
5791
- //# sourceMappingURL=chunk-FXF2OL34.js.map
5791
+ //# sourceMappingURL=chunk-MAONWP4R.js.map
@@ -5,10 +5,10 @@ import {
5
5
  definePersona,
6
6
  runPersonified,
7
7
  worktreeFanout
8
- } from "./chunk-FXF2OL34.js";
8
+ } from "./chunk-MAONWP4R.js";
9
9
  import {
10
10
  createExecutorRegistry
11
- } from "./chunk-UQ6PNNXM.js";
11
+ } from "./chunk-KVJQV342.js";
12
12
  import {
13
13
  runAnalystLoop
14
14
  } from "./chunk-FD2MBMOH.js";
@@ -196,4 +196,4 @@ export {
196
196
  runLoopRunnerCli,
197
197
  parseLoopRunnerArgv
198
198
  };
199
- //# sourceMappingURL=chunk-SGQ4YIQW.js.map
199
+ //# sourceMappingURL=chunk-N2CEE5Q3.js.map