@tangle-network/agent-runtime 0.105.0 → 0.106.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/README.md +2 -2
  2. package/dist/activation-CRjVfOiy.js +203 -0
  3. package/dist/activation-CRjVfOiy.js.map +1 -0
  4. package/dist/activation-DyWB0K6E.d.ts +98 -0
  5. package/dist/agent.d.ts +216 -234
  6. package/dist/agent.js +615 -547
  7. package/dist/agent.js.map +1 -1
  8. package/dist/analyst-loop-DGdtVENg.js +517 -0
  9. package/dist/analyst-loop-DGdtVENg.js.map +1 -0
  10. package/dist/analyst-loop.d.ts +10 -43
  11. package/dist/analyst-loop.js +2 -11
  12. package/dist/backends-CiOCyRHb.js +743 -0
  13. package/dist/backends-CiOCyRHb.js.map +1 -0
  14. package/dist/candidate-execution/index.d.ts +4 -192
  15. package/dist/candidate-execution/index.js +5 -66
  16. package/dist/candidate-execution-DqMbv1rU.js +488 -0
  17. package/dist/candidate-execution-DqMbv1rU.js.map +1 -0
  18. package/dist/coder-yhVWbdWc.js +40 -0
  19. package/dist/coder-yhVWbdWc.js.map +1 -0
  20. package/dist/conversation-BpLQZGPH.js +1265 -0
  21. package/dist/conversation-BpLQZGPH.js.map +1 -0
  22. package/dist/conversation.d.ts +2 -804
  23. package/dist/conversation.js +2 -55
  24. package/dist/environment-provider-CfLUmKmf.js +1168 -0
  25. package/dist/environment-provider-CfLUmKmf.js.map +1 -0
  26. package/dist/environment-provider-IUGU3epE.d.ts +964 -0
  27. package/dist/environment-provider.d.ts +2 -78
  28. package/dist/environment-provider.js +2 -18
  29. package/dist/errors-DEAvWQPy.js +111 -0
  30. package/dist/errors-DEAvWQPy.js.map +1 -0
  31. package/dist/improvement-adapter-Cr5TBSji.d.ts +166 -0
  32. package/dist/improvement-cycle-C095kS_g.js +2624 -0
  33. package/dist/improvement-cycle-C095kS_g.js.map +1 -0
  34. package/dist/index-BGdxAwfO.d.ts +838 -0
  35. package/dist/index-C-FYUuFG.d.ts +193 -0
  36. package/dist/index-CbNM40xG.d.ts +140 -0
  37. package/dist/index-DruSKs3Z.d.ts +7224 -0
  38. package/dist/index-Efjb3nrQ.d.ts +671 -0
  39. package/dist/index.d.ts +14 -1058
  40. package/dist/index.js +2106 -2082
  41. package/dist/index.js.map +1 -1
  42. package/dist/intelligence.d.ts +768 -889
  43. package/dist/intelligence.js +1466 -1367
  44. package/dist/intelligence.js.map +1 -1
  45. package/dist/{kb-gate-CwHO0vz6.d.ts → kb-gate-C8z2juK8.d.ts} +33 -31
  46. package/dist/kb-gate-DpaSwXVx.js +80 -0
  47. package/dist/kb-gate-DpaSwXVx.js.map +1 -0
  48. package/dist/knowledge-Ku-mPP4f.js +433 -0
  49. package/dist/knowledge-Ku-mPP4f.js.map +1 -0
  50. package/dist/knowledge.d.ts +2 -150
  51. package/dist/knowledge.js +2 -40
  52. package/dist/local-harness-Dh8PJ0ot.d.ts +455 -0
  53. package/dist/loop-runner-bin-BXsFEUcf.d.ts +162 -0
  54. package/dist/loop-runner-bin-CRagyuNb.js +268 -0
  55. package/dist/loop-runner-bin-CRagyuNb.js.map +1 -0
  56. package/dist/loop-runner-bin.d.ts +2 -15
  57. package/dist/loop-runner-bin.js +2 -24
  58. package/dist/loops.d.ts +5 -4164
  59. package/dist/loops.js +8 -419
  60. package/dist/mcp/bin.d.ts +1 -1
  61. package/dist/mcp/bin.js +116 -146
  62. package/dist/mcp/bin.js.map +1 -1
  63. package/dist/mcp/index.d.ts +295 -436
  64. package/dist/mcp/index.js +1242 -1177
  65. package/dist/mcp/index.js.map +1 -1
  66. package/dist/mcp/memory-bin.d.ts +1 -1
  67. package/dist/mcp/memory-bin.js +37 -16
  68. package/dist/mcp/memory-bin.js.map +1 -1
  69. package/dist/memory-server-DL6cE2Ag.js +234 -0
  70. package/dist/memory-server-DL6cE2Ag.js.map +1 -0
  71. package/dist/model-resolution-Btd9iIKV.js +98 -0
  72. package/dist/model-resolution-Btd9iIKV.js.map +1 -0
  73. package/dist/openai-tools-B68JaOCx.d.ts +24 -0
  74. package/dist/openai-tools-CKLy1C7M.js +44 -0
  75. package/dist/openai-tools-CKLy1C7M.js.map +1 -0
  76. package/dist/otel-export-D34IQW1C.js +843 -0
  77. package/dist/otel-export-D34IQW1C.js.map +1 -0
  78. package/dist/platform.d.ts +188 -185
  79. package/dist/platform.js +185 -218
  80. package/dist/platform.js.map +1 -1
  81. package/dist/prepare-B53sPV7M.js +4292 -0
  82. package/dist/prepare-B53sPV7M.js.map +1 -0
  83. package/dist/primeintellect/index.d.ts +149 -145
  84. package/dist/primeintellect/index.js +626 -1003
  85. package/dist/primeintellect/index.js.map +1 -1
  86. package/dist/profiles.d.ts +296 -490
  87. package/dist/profiles.js +722 -749
  88. package/dist/profiles.js.map +1 -1
  89. package/dist/protected-model-port-BLPH5VVv.js +722 -0
  90. package/dist/protected-model-port-BLPH5VVv.js.map +1 -0
  91. package/dist/protected-model-port-BP6Z4eau.d.ts +283 -0
  92. package/dist/protected-redaction--F3v1oo8.js +200 -0
  93. package/dist/protected-redaction--F3v1oo8.js.map +1 -0
  94. package/dist/redact-D-u-rrcn.js +82 -0
  95. package/dist/redact-D-u-rrcn.js.map +1 -0
  96. package/dist/redact-kbIOjfjM.d.ts +452 -0
  97. package/dist/researcher-CoVqNhfI.js +433 -0
  98. package/dist/researcher-CoVqNhfI.js.map +1 -0
  99. package/dist/runtime-5zM5XxLr.js +5408 -0
  100. package/dist/runtime-5zM5XxLr.js.map +1 -0
  101. package/dist/sandbox-events-DeI5xX8P.js +316 -0
  102. package/dist/sandbox-events-DeI5xX8P.js.map +1 -0
  103. package/dist/spawn-journal-CwPvKUTa.js +456 -0
  104. package/dist/spawn-journal-CwPvKUTa.js.map +1 -0
  105. package/dist/structural-rollout-IXUEplky.js +1445 -0
  106. package/dist/structural-rollout-IXUEplky.js.map +1 -0
  107. package/dist/substrate-B0TYNrXn.js +27 -0
  108. package/dist/substrate-B0TYNrXn.js.map +1 -0
  109. package/dist/{substrate-Dyiqmd3o.d.ts → substrate-BcnuSHXm.d.ts} +57 -54
  110. package/dist/supervise-BiRutHS9.js +7321 -0
  111. package/dist/supervise-BiRutHS9.js.map +1 -0
  112. package/dist/supervisor-DTKhF-RV.js +3826 -0
  113. package/dist/supervisor-DTKhF-RV.js.map +1 -0
  114. package/dist/testing.d.ts +4 -3
  115. package/dist/testing.js +2478 -2637
  116. package/dist/testing.js.map +1 -1
  117. package/dist/tool-server-RcWgLIsL.js +141 -0
  118. package/dist/tool-server-RcWgLIsL.js.map +1 -0
  119. package/dist/trace-propagation-CJJC7SVB.js +57 -0
  120. package/dist/trace-propagation-CJJC7SVB.js.map +1 -0
  121. package/dist/types-BaIpb0XT.d.ts +492 -0
  122. package/dist/types-BevOjfTY.d.ts +765 -0
  123. package/dist/types-C9j4qg6l.d.ts +500 -0
  124. package/dist/types-Cja5OTGh.d.ts +190 -0
  125. package/dist/util-MVgdwuIS.js +145 -0
  126. package/dist/util-MVgdwuIS.js.map +1 -0
  127. package/dist/workspace-archive-BosQiotA.js +575 -0
  128. package/dist/workspace-archive-BosQiotA.js.map +1 -0
  129. package/package.json +44 -56
  130. package/skills/build-with-agent-runtime/SKILL.md +1 -0
  131. package/dist/activation-Cm-9MMX1.d.ts +0 -69
  132. package/dist/analyst-loop.js.map +0 -1
  133. package/dist/backends-BO4Jqoe2.d.ts +0 -134
  134. package/dist/candidate-execution/index.js.map +0 -1
  135. package/dist/chunk-2KGAN2HM.js +0 -1256
  136. package/dist/chunk-2KGAN2HM.js.map +0 -1
  137. package/dist/chunk-2VZYRB55.js +0 -834
  138. package/dist/chunk-2VZYRB55.js.map +0 -1
  139. package/dist/chunk-3MDZX7YU.js +0 -125
  140. package/dist/chunk-3MDZX7YU.js.map +0 -1
  141. package/dist/chunk-5IBQAPVB.js +0 -29
  142. package/dist/chunk-5IBQAPVB.js.map +0 -1
  143. package/dist/chunk-5QOB7H74.js +0 -387
  144. package/dist/chunk-5QOB7H74.js.map +0 -1
  145. package/dist/chunk-C5RTIBNZ.js +0 -48
  146. package/dist/chunk-C5RTIBNZ.js.map +0 -1
  147. package/dist/chunk-CTRA64LY.js +0 -680
  148. package/dist/chunk-CTRA64LY.js.map +0 -1
  149. package/dist/chunk-DPEUKJRO.js +0 -27
  150. package/dist/chunk-DPEUKJRO.js.map +0 -1
  151. package/dist/chunk-FD2MBMOH.js +0 -494
  152. package/dist/chunk-FD2MBMOH.js.map +0 -1
  153. package/dist/chunk-H5QPIZNX.js +0 -907
  154. package/dist/chunk-H5QPIZNX.js.map +0 -1
  155. package/dist/chunk-HLKC4UYB.js +0 -3514
  156. package/dist/chunk-HLKC4UYB.js.map +0 -1
  157. package/dist/chunk-HNP72PNU.js +0 -192
  158. package/dist/chunk-HNP72PNU.js.map +0 -1
  159. package/dist/chunk-ISPWRSEC.js +0 -408
  160. package/dist/chunk-ISPWRSEC.js.map +0 -1
  161. package/dist/chunk-KRBFHMV6.js +0 -1228
  162. package/dist/chunk-KRBFHMV6.js.map +0 -1
  163. package/dist/chunk-M22PL4GH.js +0 -171
  164. package/dist/chunk-M22PL4GH.js.map +0 -1
  165. package/dist/chunk-NURIQBJQ.js +0 -72
  166. package/dist/chunk-NURIQBJQ.js.map +0 -1
  167. package/dist/chunk-OPVWXJ2H.js +0 -75
  168. package/dist/chunk-OPVWXJ2H.js.map +0 -1
  169. package/dist/chunk-PZZKQVQV.js +0 -52
  170. package/dist/chunk-PZZKQVQV.js.map +0 -1
  171. package/dist/chunk-Q2JSAVQ3.js +0 -671
  172. package/dist/chunk-Q2JSAVQ3.js.map +0 -1
  173. package/dist/chunk-RDOAVVHY.js +0 -699
  174. package/dist/chunk-RDOAVVHY.js.map +0 -1
  175. package/dist/chunk-SGKPNBXE.js +0 -60
  176. package/dist/chunk-SGKPNBXE.js.map +0 -1
  177. package/dist/chunk-SMQXZGLZ.js +0 -351
  178. package/dist/chunk-SMQXZGLZ.js.map +0 -1
  179. package/dist/chunk-UHEZW5BU.js +0 -2918
  180. package/dist/chunk-UHEZW5BU.js.map +0 -1
  181. package/dist/chunk-UPWGXKXB.js +0 -254
  182. package/dist/chunk-UPWGXKXB.js.map +0 -1
  183. package/dist/chunk-VISA6CI3.js +0 -200
  184. package/dist/chunk-VISA6CI3.js.map +0 -1
  185. package/dist/chunk-WMTCUOQL.js +0 -474
  186. package/dist/chunk-WMTCUOQL.js.map +0 -1
  187. package/dist/chunk-WRTOVNN4.js +0 -4728
  188. package/dist/chunk-WRTOVNN4.js.map +0 -1
  189. package/dist/chunk-WSTRQZYQ.js +0 -5576
  190. package/dist/chunk-WSTRQZYQ.js.map +0 -1
  191. package/dist/chunk-XBG2W2VW.js +0 -6434
  192. package/dist/chunk-XBG2W2VW.js.map +0 -1
  193. package/dist/chunk-YEJR7IXO.js +0 -68
  194. package/dist/chunk-YEJR7IXO.js.map +0 -1
  195. package/dist/chunk-YJZA2BIK.js +0 -1338
  196. package/dist/chunk-YJZA2BIK.js.map +0 -1
  197. package/dist/completion-gate-BMy5LGoP.d.ts +0 -256
  198. package/dist/conversation.js.map +0 -1
  199. package/dist/coordination-BZZSVYpZ.d.ts +0 -2570
  200. package/dist/environment-provider.js.map +0 -1
  201. package/dist/improvement-adapter-HAZz-7vK.d.ts +0 -203
  202. package/dist/knowledge.js.map +0 -1
  203. package/dist/local-harness-BDNcl6jI.d.ts +0 -175
  204. package/dist/loop-runner-bin-68aoM9-7.d.ts +0 -199
  205. package/dist/loop-runner-bin.js.map +0 -1
  206. package/dist/loops.js.map +0 -1
  207. package/dist/openai-tools-fnj6SRVg.d.ts +0 -46
  208. package/dist/protected-model-port-B4t-OQjL.d.ts +0 -271
  209. package/dist/redact-BuFjxBUJ.d.ts +0 -481
  210. package/dist/sanitize-DEbPNtyI.d.ts +0 -328
  211. package/dist/structural-rollout-DEh6CEsa.d.ts +0 -446
  212. package/dist/supervise-4_48wwvy.d.ts +0 -379
  213. package/dist/types-BCoemcXU.d.ts +0 -802
  214. package/dist/types-BwoZWq-i.d.ts +0 -510
  215. package/dist/types-Cbp72qyu.d.ts +0 -491
  216. package/dist/types-CmYCMbFT.d.ts +0 -203
  217. package/dist/types-CvNwMzQt.d.ts +0 -957
  218. package/dist/worktree-fanout-DxhAWr5Z.d.ts +0 -999
@@ -1,474 +0,0 @@
1
- import {
2
- researcherProfile
3
- } from "./chunk-5QOB7H74.js";
4
- import {
5
- captureAgentCandidateWorkspace,
6
- sealAgentCandidateBundle
7
- } from "./chunk-RDOAVVHY.js";
8
- import {
9
- createAgentImprovementActivationResult
10
- } from "./chunk-VISA6CI3.js";
11
- import {
12
- canonicalCandidateBytes,
13
- embeddedCandidateArtifact,
14
- omitTopLevelDigest,
15
- persistCandidateOutputArtifact
16
- } from "./chunk-WSTRQZYQ.js";
17
- import {
18
- supervise
19
- } from "./chunk-XBG2W2VW.js";
20
-
21
- // src/knowledge/activation.ts
22
- import { sha256DigestSchema } from "@tangle-network/agent-interface";
23
- import {
24
- fromAgentCandidateKnowledgeRef,
25
- loadKnowledgeImprovementActivationResult,
26
- promoteKnowledgeCandidate,
27
- restoreKnowledgeCandidateBaseline
28
- } from "@tangle-network/agent-knowledge";
29
- function createKnowledgeImprovementActivationExecutor(options) {
30
- if (!options.identity.trim()) throw new Error("knowledge activation identity is required");
31
- return {
32
- reconcile: async (transition) => {
33
- const inspected = await inspectKnowledgeActivation(options, transition);
34
- return inspected.settled ? inspected.result : void 0;
35
- },
36
- transition: async (transition) => {
37
- if (transition.expired) {
38
- throw new Error("knowledge write transition cannot run after authorization expires");
39
- }
40
- const inspected = await inspectKnowledgeActivation(options, transition);
41
- if (inspected.settled) return inspected.result;
42
- const mutationOptions = {
43
- root: options.root,
44
- candidate: inspected.candidate,
45
- activation: {
46
- activation: transition.activation,
47
- attemptedAt: transition.attemptedAt,
48
- identity: options.identity,
49
- createResult: (receipt) => inspected.create(
50
- knowledgeMutationOutcome(receipt, inspected, transition.activation.intent)
51
- )
52
- },
53
- ...options.ownerId ? { ownerId: options.ownerId } : {},
54
- ...options.leaseTtlMs === void 0 ? {} : { leaseTtlMs: options.leaseTtlMs },
55
- ...options.now ? { now: options.now } : {},
56
- ...options.onState ? { onState: options.onState } : {}
57
- };
58
- const improvement = transition.activation.intent === "activate-candidate" ? await promoteKnowledgeCandidate(mutationOptions) : await restoreKnowledgeCandidateBaseline(mutationOptions);
59
- if (!improvement.activationResult) {
60
- throw new Error("knowledge mutation did not persist its shared activation result");
61
- }
62
- return options.results.putIfAbsent(improvement.activationResult);
63
- }
64
- };
65
- }
66
- async function inspectKnowledgeActivation(options, transition) {
67
- const stored = await options.results.load(transition.activation.digest);
68
- if (stored !== void 0) return { settled: true, result: stored };
69
- const create = (outcome) => createAgentImprovementActivationResult(transition, {
70
- completedAt: completionTime(transition, options.now),
71
- outcome
72
- });
73
- const store = (outcome) => options.results.putIfAbsent(create(outcome));
74
- const target = supportedKnowledgeTarget(transition, options.identity);
75
- if (!target) {
76
- if (transition.expired) return { settled: true, result: void 0 };
77
- return {
78
- settled: true,
79
- result: await store({
80
- status: "unsupported",
81
- code: "KNOWLEDGE_TARGET_SET_UNSUPPORTED",
82
- message: "The knowledge adapter requires exactly one matching knowledge target."
83
- })
84
- };
85
- }
86
- const knowledge = transition.candidateBundle.knowledge;
87
- if (!knowledge) {
88
- if (transition.expired) return { settled: true, result: void 0 };
89
- return {
90
- settled: true,
91
- result: await store({
92
- status: "unsupported",
93
- code: "KNOWLEDGE_CANDIDATE_MISSING",
94
- message: "The measured candidate bundle does not contain a knowledge candidate."
95
- })
96
- };
97
- }
98
- const candidate = fromAgentCandidateKnowledgeRef(knowledge.candidate);
99
- const expectedDigest = transition.activation.intent === "activate-candidate" ? knowledge.candidate.baseHash : knowledge.candidate.candidateHash;
100
- const desiredDigest = transition.activation.intent === "activate-candidate" ? knowledge.candidate.candidateHash : knowledge.candidate.baseHash;
101
- if (target.expectedBaseDigest !== expectedDigest || target.desiredDigest !== desiredDigest) {
102
- if (transition.expired) return { settled: true, result: void 0 };
103
- return {
104
- settled: true,
105
- result: await store({
106
- status: "failed",
107
- code: "KNOWLEDGE_TARGET_MISMATCH",
108
- message: "The activation target does not match the measured knowledge candidate."
109
- })
110
- };
111
- }
112
- const durable = await loadKnowledgeImprovementActivationResult({
113
- root: options.root,
114
- candidate,
115
- activation: transition.activation,
116
- identity: options.identity
117
- });
118
- if (durable) {
119
- return {
120
- settled: true,
121
- result: await options.results.putIfAbsent(durable)
122
- };
123
- }
124
- if (transition.expired) return { settled: true, result: void 0 };
125
- return { settled: false, target, candidate, expectedDigest, desiredDigest, create };
126
- }
127
- function supportedKnowledgeTarget(transition, identity) {
128
- if (transition.targets.length !== 1) return void 0;
129
- const target = transition.targets[0];
130
- return target.surface === "knowledge" && target.identity === identity ? target : void 0;
131
- }
132
- function knowledgeMutationOutcome(receipt, inspected, intent) {
133
- const expectedTarget = intent === "activate-candidate" ? "candidate" : "baseline";
134
- const beforeDigest = prefixedDigest(receipt.beforeHash);
135
- const afterDigest = prefixedDigest(receipt.afterHash);
136
- if (receipt.target !== expectedTarget || receipt.changed !== (beforeDigest !== afterDigest) || !receipt.changed && (receipt.transactionId !== null || receipt.recovered)) {
137
- throw new Error("knowledge mutation returned inconsistent state evidence");
138
- }
139
- if (receipt.changed) {
140
- if (receipt.transactionId === null || beforeDigest !== inspected.expectedDigest || afterDigest !== inspected.desiredDigest) {
141
- throw new Error("knowledge activation did not apply its authorized content transition");
142
- }
143
- return {
144
- status: "applied",
145
- transactionId: receipt.transactionId,
146
- targets: [
147
- {
148
- surface: inspected.target.surface,
149
- identity: inspected.target.identity,
150
- beforeDigest,
151
- afterDigest
152
- }
153
- ]
154
- };
155
- }
156
- if (afterDigest === inspected.desiredDigest) {
157
- return {
158
- status: "already-applied",
159
- targets: [targetState(inspected.target, afterDigest)]
160
- };
161
- }
162
- if (afterDigest === inspected.expectedDigest) {
163
- throw new Error("knowledge activation did not attempt its authorized content transition");
164
- }
165
- return {
166
- status: "conflict",
167
- targets: [targetState(inspected.target, afterDigest)]
168
- };
169
- }
170
- function targetState(target, currentDigest) {
171
- return {
172
- surface: target.surface,
173
- identity: target.identity,
174
- currentDigest
175
- };
176
- }
177
- function prefixedDigest(hash) {
178
- return sha256DigestSchema.parse(`sha256:${hash}`);
179
- }
180
- function completionTime(transition, now) {
181
- const completedAt = (now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
182
- return Date.parse(completedAt) < Date.parse(transition.attemptedAt) ? transition.attemptedAt : completedAt;
183
- }
184
-
185
- // src/knowledge/improvement-job.ts
186
- import { realpath } from "fs/promises";
187
- import {
188
- agentCandidateKnowledgeSchema
189
- } from "@tangle-network/agent-interface";
190
- import {
191
- evaluateKnowledgeBaseReadiness,
192
- improveKnowledgeBase,
193
- knowledgeImprovementCandidateRef,
194
- toAgentCandidateKnowledgeRef,
195
- withKnowledgeImprovementComparison
196
- } from "@tangle-network/agent-knowledge";
197
-
198
- // src/knowledge/supervised-update.ts
199
- var RESEARCH_SUPERVISOR_SYSTEM_PROMPT = [
200
- "You are a research supervisor. You do not answer the research question yourself.",
201
- "You create and manage researcher workers that improve one shared knowledge base until it is ready.",
202
- "",
203
- "Each round:",
204
- "1. Read the goal and the gaps the readiness check still reports.",
205
- "2. Decompose the open work into independent sub-topics.",
206
- "3. Spawn one researcher per sub-topic; split by sub-topic, never duplicate work.",
207
- "4. Wait for researchers to settle, steer or re-spawn thin sub-topics, then stop when the check passes.",
208
- "",
209
- "Conserve the shared budget. Prefer a small number of well-scoped researchers over a large fanout that re-covers the same ground."
210
- ].join("\n");
211
- function knowledgeReadinessDeliverable(options) {
212
- return {
213
- describe: `knowledge base at ${options.root} is ready for: ${options.goal}`,
214
- async check() {
215
- const result = await options.readiness({
216
- root: options.root,
217
- goal: options.goal,
218
- readinessSpecs: options.readinessSpecs,
219
- readinessTaskId: options.readinessTaskId,
220
- readiness: options.readinessOptions
221
- });
222
- return typeof result === "boolean" ? result : result.ready;
223
- }
224
- };
225
- }
226
- function createSupervisedKnowledgeUpdater(options) {
227
- return (input) => runSupervisedKnowledgeUpdate({
228
- ...options,
229
- root: input.candidateRoot ?? input.root ?? options.root,
230
- goal: input.goal ?? options.goal,
231
- findings: input.findings ?? options.findings,
232
- metadata: { ...options.metadata, ...input.metadata }
233
- });
234
- }
235
- async function runSupervisedKnowledgeUpdate(options) {
236
- const { profile: workerProfile } = researcherProfile({ harness: options.harness });
237
- const baseInstructions = options.supervisorSystemPrompt ?? RESEARCH_SUPERVISOR_SYSTEM_PROMPT;
238
- const workerContract = workerProfile.prompt?.systemPrompt;
239
- const systemPrompt = workerContract ? `${baseInstructions}
240
-
241
- Each researcher worker you spawn follows this contract:
242
- ${workerContract}` : baseInstructions;
243
- const profile = {
244
- name: "knowledge-research-supervisor",
245
- model: options.supervisorModel,
246
- systemPrompt
247
- };
248
- const run = options.runSupervised ?? supervise;
249
- const task = formatSupervisedKnowledgeTask(options);
250
- const supervised = await run(profile, task, {
251
- ...options.superviseOptions,
252
- budget: options.budget,
253
- backend: options.backend,
254
- deliverable: knowledgeReadinessDeliverable(options),
255
- makeWorkerAgent: options.makeWorkerAgent,
256
- allowedModels: options.allowedModels
257
- });
258
- return {
259
- applied: supervised.kind === "winner",
260
- summary: supervised.kind === "winner" ? "research supervisor completed and the knowledge base passed readiness" : `research supervisor stopped without a ready knowledge base: ${supervised.reason}`,
261
- supervised,
262
- metadata: {
263
- supervised: true,
264
- root: options.root,
265
- goal: options.goal,
266
- result: supervised.kind
267
- }
268
- };
269
- }
270
- function formatSupervisedKnowledgeTask(options) {
271
- const sections = [
272
- `Goal: ${options.goal}`,
273
- `Knowledge base root: ${options.root}`,
274
- options.readinessTaskId ? `Readiness task id: ${options.readinessTaskId}` : void 0,
275
- options.readinessSpecs?.length ? `Readiness specs:
276
- ${JSON.stringify(options.readinessSpecs, null, 2)}` : void 0,
277
- options.findings?.length ? `Current findings:
278
- ${JSON.stringify(options.findings, null, 2)}` : void 0,
279
- options.metadata && Object.keys(options.metadata).length > 0 ? `Metadata:
280
- ${JSON.stringify(options.metadata, null, 2)}` : void 0
281
- ].filter((section) => Boolean(section));
282
- return `${sections.join("\n\n")}
283
-
284
- Update files under the knowledge base root only. Stop when the readiness check passes.`;
285
- }
286
-
287
- // src/knowledge/improvement-job.ts
288
- function createAgentKnowledgeReadinessCheck(options) {
289
- return async (input) => {
290
- const readiness = await evaluateKnowledgeBaseReadiness({
291
- root: input.root,
292
- goal: input.goal ?? options.goal,
293
- readinessSpecs: input.readinessSpecs ?? options.readinessSpecs,
294
- readinessTaskId: input.readinessTaskId ?? options.readinessTaskId,
295
- readiness: input.readiness ?? options.readiness,
296
- strict: options.strict,
297
- kbQuality: options.kbQuality
298
- });
299
- return {
300
- ready: readiness.ready,
301
- summary: readiness.summary,
302
- metadata: {
303
- dimensions: readiness.dimensions,
304
- validationOk: readiness.validation.ok,
305
- kbQualityOk: readiness.kbQuality.ok,
306
- blockingMissing: readiness.readiness?.report.blockingMissingRequirements.length ?? 0
307
- }
308
- };
309
- };
310
- }
311
- async function runKnowledgeImprovementJob(options) {
312
- const {
313
- allowedModels,
314
- backend,
315
- budget,
316
- candidateArtifacts,
317
- harness,
318
- makeWorkerAgent,
319
- onMeasurement,
320
- readinessCheck,
321
- runSupervised,
322
- supervisorModel,
323
- supervisorSystemPrompt,
324
- superviseOptions,
325
- ...knowledgeOptions
326
- } = options;
327
- const startedAtMs = Date.now();
328
- const startedAt = new Date(startedAtMs).toISOString();
329
- const supervisedSpent = emptySpent();
330
- let updateCalls = 0;
331
- let updateDurationMs = 0;
332
- const readiness = readinessCheck ?? createAgentKnowledgeReadinessCheck(options);
333
- const updateKnowledge = createSupervisedKnowledgeUpdater({
334
- root: options.root,
335
- goal: options.goal,
336
- readiness,
337
- readinessSpecs: options.readinessSpecs,
338
- readinessTaskId: options.readinessTaskId,
339
- readinessOptions: options.readiness,
340
- budget,
341
- backend,
342
- makeWorkerAgent,
343
- harness,
344
- supervisorModel,
345
- supervisorSystemPrompt,
346
- superviseOptions,
347
- allowedModels,
348
- runSupervised
349
- });
350
- const instrumentedUpdateKnowledge = async (input) => {
351
- const updateStartedAt = Date.now();
352
- updateCalls += 1;
353
- const result = await updateKnowledge(input);
354
- updateDurationMs += Date.now() - updateStartedAt;
355
- addSpent(supervisedSpent, result.supervised);
356
- return result;
357
- };
358
- const resolvedImprovement = await improveKnowledgeBase({
359
- ...knowledgeOptions,
360
- updateKnowledge: instrumentedUpdateKnowledge
361
- });
362
- let knowledge;
363
- if (resolvedImprovement.candidate?.status === "candidate-ready" || resolvedImprovement.candidate?.status === "promoted") {
364
- knowledge = await freezeKnowledgeCandidatePair(
365
- options.root,
366
- resolvedImprovement,
367
- candidateArtifacts,
368
- knowledgeOptions.signal
369
- );
370
- }
371
- const finishedAtMs = Date.now();
372
- const measurement = {
373
- startedAt,
374
- finishedAt: new Date(finishedAtMs).toISOString(),
375
- durationMs: finishedAtMs - startedAtMs,
376
- updateCalls,
377
- updateDurationMs,
378
- supervisedSpent
379
- };
380
- await onMeasurement?.(measurement);
381
- return {
382
- improvement: resolvedImprovement,
383
- ...knowledge ? { knowledge } : {},
384
- measurement,
385
- blocked: resolvedImprovement.blocked
386
- };
387
- }
388
- function buildKnowledgeImprovementExperimentBundles(bundle, knowledge) {
389
- const input = omitTopLevelDigest(bundle);
390
- const withSnapshot = (snapshot) => agentCandidateKnowledgeSchema.parse({
391
- candidate: knowledge.reference,
392
- snapshot,
393
- evaluation: knowledge.evaluation
394
- });
395
- return Object.freeze({
396
- baseline: sealAgentCandidateBundle({ ...input, knowledge: withSnapshot(knowledge.baseline) }),
397
- candidate: sealAgentCandidateBundle({ ...input, knowledge: withSnapshot(knowledge.candidate) })
398
- });
399
- }
400
- async function freezeKnowledgeCandidatePair(root, improvement, artifacts, signal) {
401
- const candidate = knowledgeImprovementCandidateRef(improvement);
402
- const candidateRef = toAgentCandidateKnowledgeRef(candidate);
403
- return withKnowledgeImprovementComparison({ root, candidate }, async (comparison) => {
404
- const freeze = async (target) => {
405
- const executionId = `knowledge-${candidate.candidateId}-${target}`;
406
- const captured = await captureAgentCandidateWorkspace(
407
- await realpath(comparison[target].root),
408
- {
409
- ...artifacts ? {
410
- artifactPersistence: {
411
- executionId,
412
- outputArtifacts: artifacts,
413
- ...signal ? { signal } : {}
414
- }
415
- } : {}
416
- }
417
- );
418
- return captured.snapshot;
419
- };
420
- const evaluation = await captureKnowledgeEvidence(
421
- canonicalCandidateBytes({
422
- kind: "agent-knowledge-candidate-evaluation",
423
- candidate: candidateRef,
424
- metric: comparison.evaluation
425
- }),
426
- "knowledge-evaluation",
427
- `knowledge-${candidate.candidateId}`,
428
- artifacts,
429
- signal
430
- );
431
- const baseline = await freeze("baseline");
432
- const proposed = await freeze("candidate");
433
- return Object.freeze({
434
- reference: candidateRef,
435
- evaluation,
436
- baseline,
437
- candidate: proposed
438
- });
439
- });
440
- }
441
- async function captureKnowledgeEvidence(bytes, purpose, executionId, artifacts, signal) {
442
- if (!artifacts) return embeddedCandidateArtifact(bytes);
443
- return persistCandidateOutputArtifact(artifacts, {
444
- executionId,
445
- purpose,
446
- bytes,
447
- ...signal ? { signal } : {}
448
- });
449
- }
450
- function emptySpent() {
451
- return { iterations: 0, inputTokens: 0, outputTokens: 0, usdKnown: true, usd: 0, ms: 0 };
452
- }
453
- function addSpent(target, result) {
454
- const spent = result.spentTotal;
455
- target.iterations += spent.iterations;
456
- target.inputTokens += spent.tokens.input;
457
- target.outputTokens += spent.tokens.output;
458
- target.usdKnown = target.usdKnown && spent.usdKnown !== false;
459
- target.usd += spent.usd;
460
- target.ms += spent.ms;
461
- }
462
-
463
- export {
464
- createKnowledgeImprovementActivationExecutor,
465
- RESEARCH_SUPERVISOR_SYSTEM_PROMPT,
466
- knowledgeReadinessDeliverable,
467
- createSupervisedKnowledgeUpdater,
468
- runSupervisedKnowledgeUpdate,
469
- formatSupervisedKnowledgeTask,
470
- createAgentKnowledgeReadinessCheck,
471
- runKnowledgeImprovementJob,
472
- buildKnowledgeImprovementExperimentBundles
473
- };
474
- //# sourceMappingURL=chunk-WMTCUOQL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/knowledge/activation.ts","../src/knowledge/improvement-job.ts","../src/knowledge/supervised-update.ts"],"sourcesContent":["import type {\n AgentImprovementActivationOutcome,\n AgentImprovementActivationResult,\n AgentImprovementActivationTarget,\n Sha256Digest,\n} from '@tangle-network/agent-interface'\nimport { sha256DigestSchema } from '@tangle-network/agent-interface'\nimport {\n fromAgentCandidateKnowledgeRef,\n type KnowledgeImprovementMutationReceipt,\n loadKnowledgeImprovementActivationResult,\n type PromoteKnowledgeCandidateOptions,\n promoteKnowledgeCandidate,\n restoreKnowledgeCandidateBaseline,\n} from '@tangle-network/agent-knowledge'\n\nimport {\n type AgentImprovementActivationReconciliation,\n type AgentImprovementActivationResultStore,\n type AgentImprovementActivationTransition,\n type AgentImprovementActivationTransitionInput,\n createAgentImprovementActivationResult,\n} from '../intelligence/activation'\n\nexport interface CreateKnowledgeImprovementActivationExecutorOptions\n extends Omit<PromoteKnowledgeCandidateOptions, 'root' | 'candidate'> {\n root: string\n identity: string\n results: AgentImprovementActivationResultStore\n}\n\nexport interface KnowledgeImprovementActivationExecutor {\n transition: AgentImprovementActivationTransition\n reconcile: AgentImprovementActivationReconciliation\n}\n\n/** Apply or restore one local knowledge candidate through the shared activation contract. */\nexport function createKnowledgeImprovementActivationExecutor(\n options: CreateKnowledgeImprovementActivationExecutorOptions,\n): KnowledgeImprovementActivationExecutor {\n if (!options.identity.trim()) throw new Error('knowledge activation identity is required')\n return {\n reconcile: async (transition) => {\n const inspected = await inspectKnowledgeActivation(options, transition)\n return inspected.settled ? inspected.result : undefined\n },\n transition: async (transition) => {\n if (transition.expired) {\n throw new Error('knowledge write transition cannot run after authorization expires')\n }\n const inspected = await inspectKnowledgeActivation(options, transition)\n if (inspected.settled) return inspected.result\n\n const mutationOptions = {\n root: options.root,\n candidate: inspected.candidate,\n activation: {\n activation: transition.activation,\n attemptedAt: transition.attemptedAt,\n identity: options.identity,\n createResult: (receipt: KnowledgeImprovementMutationReceipt) =>\n inspected.create(\n knowledgeMutationOutcome(receipt, inspected, transition.activation.intent),\n ),\n },\n ...(options.ownerId ? { ownerId: options.ownerId } : {}),\n ...(options.leaseTtlMs === undefined ? {} : { leaseTtlMs: options.leaseTtlMs }),\n ...(options.now ? { now: options.now } : {}),\n ...(options.onState ? { onState: options.onState } : {}),\n }\n const improvement =\n transition.activation.intent === 'activate-candidate'\n ? await promoteKnowledgeCandidate(mutationOptions)\n : await restoreKnowledgeCandidateBaseline(mutationOptions)\n if (!improvement.activationResult) {\n throw new Error('knowledge mutation did not persist its shared activation result')\n }\n return options.results.putIfAbsent(improvement.activationResult)\n },\n }\n}\n\ntype CreateKnowledgeActivation = (\n outcome: AgentImprovementActivationOutcome,\n) => AgentImprovementActivationResult\n\ntype InspectedKnowledgeActivation =\n | { settled: true; result: unknown | undefined }\n | {\n settled: false\n target: AgentImprovementActivationTransitionInput['targets'][number]\n candidate: PromoteKnowledgeCandidateOptions['candidate']\n expectedDigest: Sha256Digest\n desiredDigest: Sha256Digest\n create: CreateKnowledgeActivation\n }\n\nasync function inspectKnowledgeActivation(\n options: CreateKnowledgeImprovementActivationExecutorOptions,\n transition: AgentImprovementActivationTransitionInput,\n): Promise<InspectedKnowledgeActivation> {\n const stored = await options.results.load(transition.activation.digest)\n if (stored !== undefined) return { settled: true, result: stored }\n\n const create: CreateKnowledgeActivation = (outcome) =>\n createAgentImprovementActivationResult(transition, {\n completedAt: completionTime(transition, options.now),\n outcome,\n })\n const store = (outcome: AgentImprovementActivationOutcome) =>\n options.results.putIfAbsent(create(outcome))\n const target = supportedKnowledgeTarget(transition, options.identity)\n if (!target) {\n if (transition.expired) return { settled: true, result: undefined }\n return {\n settled: true,\n result: await store({\n status: 'unsupported',\n code: 'KNOWLEDGE_TARGET_SET_UNSUPPORTED',\n message: 'The knowledge adapter requires exactly one matching knowledge target.',\n }),\n }\n }\n const knowledge = transition.candidateBundle.knowledge\n if (!knowledge) {\n if (transition.expired) return { settled: true, result: undefined }\n return {\n settled: true,\n result: await store({\n status: 'unsupported',\n code: 'KNOWLEDGE_CANDIDATE_MISSING',\n message: 'The measured candidate bundle does not contain a knowledge candidate.',\n }),\n }\n }\n const candidate = fromAgentCandidateKnowledgeRef(knowledge.candidate)\n const expectedDigest =\n transition.activation.intent === 'activate-candidate'\n ? knowledge.candidate.baseHash\n : knowledge.candidate.candidateHash\n const desiredDigest =\n transition.activation.intent === 'activate-candidate'\n ? knowledge.candidate.candidateHash\n : knowledge.candidate.baseHash\n if (target.expectedBaseDigest !== expectedDigest || target.desiredDigest !== desiredDigest) {\n if (transition.expired) return { settled: true, result: undefined }\n return {\n settled: true,\n result: await store({\n status: 'failed',\n code: 'KNOWLEDGE_TARGET_MISMATCH',\n message: 'The activation target does not match the measured knowledge candidate.',\n }),\n }\n }\n\n const durable = await loadKnowledgeImprovementActivationResult({\n root: options.root,\n candidate,\n activation: transition.activation,\n identity: options.identity,\n })\n if (durable) {\n return {\n settled: true,\n result: await options.results.putIfAbsent(durable),\n }\n }\n if (transition.expired) return { settled: true, result: undefined }\n return { settled: false, target, candidate, expectedDigest, desiredDigest, create }\n}\n\nfunction supportedKnowledgeTarget(\n transition: AgentImprovementActivationTransitionInput,\n identity: string,\n): AgentImprovementActivationTransitionInput['targets'][number] | undefined {\n if (transition.targets.length !== 1) return undefined\n const target = transition.targets[0]\n return target.surface === 'knowledge' && target.identity === identity ? target : undefined\n}\n\nfunction knowledgeMutationOutcome(\n receipt: KnowledgeImprovementMutationReceipt,\n inspected: Extract<InspectedKnowledgeActivation, { settled: false }>,\n intent: AgentImprovementActivationTransitionInput['activation']['intent'],\n): AgentImprovementActivationOutcome {\n const expectedTarget = intent === 'activate-candidate' ? 'candidate' : 'baseline'\n const beforeDigest = prefixedDigest(receipt.beforeHash)\n const afterDigest = prefixedDigest(receipt.afterHash)\n if (\n receipt.target !== expectedTarget ||\n receipt.changed !== (beforeDigest !== afterDigest) ||\n (!receipt.changed && (receipt.transactionId !== null || receipt.recovered))\n ) {\n throw new Error('knowledge mutation returned inconsistent state evidence')\n }\n if (receipt.changed) {\n if (\n receipt.transactionId === null ||\n beforeDigest !== inspected.expectedDigest ||\n afterDigest !== inspected.desiredDigest\n ) {\n throw new Error('knowledge activation did not apply its authorized content transition')\n }\n return {\n status: 'applied',\n transactionId: receipt.transactionId,\n targets: [\n {\n surface: inspected.target.surface,\n identity: inspected.target.identity,\n beforeDigest,\n afterDigest,\n },\n ],\n }\n }\n if (afterDigest === inspected.desiredDigest) {\n return {\n status: 'already-applied',\n targets: [targetState(inspected.target, afterDigest)],\n }\n }\n if (afterDigest === inspected.expectedDigest) {\n throw new Error('knowledge activation did not attempt its authorized content transition')\n }\n return {\n status: 'conflict',\n targets: [targetState(inspected.target, afterDigest)],\n }\n}\n\nfunction targetState(target: AgentImprovementActivationTarget, currentDigest: Sha256Digest) {\n return {\n surface: target.surface,\n identity: target.identity,\n currentDigest,\n }\n}\n\nfunction prefixedDigest(hash: string): Sha256Digest {\n return sha256DigestSchema.parse(`sha256:${hash}`)\n}\n\nfunction completionTime(\n transition: AgentImprovementActivationTransitionInput,\n now: (() => Date) | undefined,\n): string {\n const completedAt = (now ?? (() => new Date()))().toISOString()\n return Date.parse(completedAt) < Date.parse(transition.attemptedAt)\n ? transition.attemptedAt\n : completedAt\n}\n","import { realpath } from 'node:fs/promises'\nimport {\n type AgentCandidateBundle,\n type AgentCandidateCapturedArtifact,\n type AgentCandidateKnowledge,\n agentCandidateKnowledgeSchema,\n} from '@tangle-network/agent-interface'\nimport {\n type BuildEvalKnowledgeBundleOptions,\n evaluateKnowledgeBaseReadiness,\n improveKnowledgeBase,\n type KnowledgeBaseQualityOptions,\n type KnowledgeImprovementOptions,\n type KnowledgeImprovementResult,\n type KnowledgeReadinessSpec,\n knowledgeImprovementCandidateRef,\n toAgentCandidateKnowledgeRef,\n withKnowledgeImprovementComparison,\n} from '@tangle-network/agent-knowledge'\nimport { sealAgentCandidateBundle } from '../candidate-execution/bundle'\nimport {\n canonicalCandidateBytes,\n embeddedCandidateArtifact,\n omitTopLevelDigest,\n} from '../candidate-execution/digest'\nimport { persistCandidateOutputArtifact } from '../candidate-execution/output-artifacts'\nimport type { AgentCandidateOutputArtifactPort } from '../candidate-execution/types'\nimport { captureAgentCandidateWorkspace } from '../candidate-execution/workspace-archive'\nimport type { ExecutorConfig } from '../runtime/supervise/runtime'\nimport type { SuperviseOptions } from '../runtime/supervise/supervise'\nimport type { SupervisorProfile } from '../runtime/supervise/supervisor-agent'\nimport type { Budget, SupervisedResult } from '../runtime/supervise/types'\nimport {\n createSupervisedKnowledgeUpdater,\n type KnowledgeReadinessCheck,\n type KnowledgeReadinessCheckResult,\n type SupervisedKnowledgeUpdateOptions,\n} from './supervised-update'\n\nexport interface RunKnowledgeImprovementJobOptions\n extends Omit<KnowledgeImprovementOptions, 'updateKnowledge'> {\n budget: Budget\n readinessCheck?: KnowledgeReadinessCheck\n backend?: ExecutorConfig\n makeWorkerAgent?: SuperviseOptions['makeWorkerAgent']\n harness?: string\n supervisorModel?: string\n supervisorSystemPrompt?: string\n superviseOptions?: Partial<\n Omit<\n SuperviseOptions,\n 'budget' | 'backend' | 'deliverable' | 'makeWorkerAgent' | 'allowedModels'\n >\n >\n allowedModels?: readonly string[]\n runSupervised?: (\n profile: SupervisorProfile,\n task: unknown,\n opts: SuperviseOptions,\n ) => Promise<SupervisedResult<unknown>>\n candidateArtifacts?: AgentCandidateOutputArtifactPort\n onMeasurement?: (measurement: KnowledgeImprovementJobMeasurement) => Promise<void> | void\n}\n\nexport interface KnowledgeImprovementJobMeasurement {\n startedAt: string\n finishedAt: string\n durationMs: number\n updateCalls: number\n updateDurationMs: number\n supervisedSpent: {\n iterations: number\n inputTokens: number\n outputTokens: number\n usdKnown: boolean\n usd: number\n ms: number\n }\n}\n\nexport interface KnowledgeImprovementJobResult {\n improvement: KnowledgeImprovementResult\n knowledge?: KnowledgeImprovementCandidatePair\n measurement: KnowledgeImprovementJobMeasurement\n blocked: boolean\n}\n\nexport interface KnowledgeImprovementCandidatePair {\n reference: AgentCandidateKnowledge['candidate']\n evaluation: AgentCandidateCapturedArtifact\n baseline: AgentCandidateKnowledge['snapshot']\n candidate: AgentCandidateKnowledge['snapshot']\n}\n\nexport interface KnowledgeImprovementExperimentBundles {\n baseline: AgentCandidateBundle\n candidate: AgentCandidateBundle\n}\n\nexport interface AgentKnowledgeReadinessCheckOptions {\n goal: string\n readinessSpecs?: readonly KnowledgeReadinessSpec[]\n readinessTaskId?: string\n readiness?: Omit<BuildEvalKnowledgeBundleOptions, 'taskId' | 'index' | 'specs'>\n strict?: boolean\n kbQuality?: KnowledgeBaseQualityOptions\n}\n\n/** Build the default readiness check backed by `@tangle-network/agent-knowledge` validation and scoring. */\nexport function createAgentKnowledgeReadinessCheck(\n options: AgentKnowledgeReadinessCheckOptions,\n): KnowledgeReadinessCheck {\n return async (input): Promise<KnowledgeReadinessCheckResult> => {\n const readiness = await evaluateKnowledgeBaseReadiness({\n root: input.root,\n goal: input.goal ?? options.goal,\n readinessSpecs:\n (input.readinessSpecs as readonly KnowledgeReadinessSpec[] | undefined) ??\n options.readinessSpecs,\n readinessTaskId: input.readinessTaskId ?? options.readinessTaskId,\n readiness:\n (input.readiness as AgentKnowledgeReadinessCheckOptions['readiness'] | undefined) ??\n options.readiness,\n strict: options.strict,\n kbQuality: options.kbQuality,\n })\n return {\n ready: readiness.ready,\n summary: readiness.summary,\n metadata: {\n dimensions: readiness.dimensions,\n validationOk: readiness.validation.ok,\n kbQualityOk: readiness.kbQuality.ok,\n blockingMissing: readiness.readiness?.report.blockingMissingRequirements.length ?? 0,\n },\n }\n }\n}\n\n/** Produce a frozen KB candidate while leaving live knowledge content unchanged. */\nexport async function runKnowledgeImprovementJob(\n options: RunKnowledgeImprovementJobOptions,\n): Promise<KnowledgeImprovementJobResult> {\n const {\n allowedModels,\n backend,\n budget,\n candidateArtifacts,\n harness,\n makeWorkerAgent,\n onMeasurement,\n readinessCheck,\n runSupervised,\n supervisorModel,\n supervisorSystemPrompt,\n superviseOptions,\n ...knowledgeOptions\n } = options\n const startedAtMs = Date.now()\n const startedAt = new Date(startedAtMs).toISOString()\n const supervisedSpent = emptySpent()\n let updateCalls = 0\n let updateDurationMs = 0\n\n const readiness = readinessCheck ?? createAgentKnowledgeReadinessCheck(options)\n const updateKnowledge = createSupervisedKnowledgeUpdater({\n root: options.root,\n goal: options.goal,\n readiness,\n readinessSpecs: options.readinessSpecs,\n readinessTaskId: options.readinessTaskId,\n readinessOptions: options.readiness,\n budget,\n backend,\n makeWorkerAgent,\n harness,\n supervisorModel,\n supervisorSystemPrompt,\n superviseOptions,\n allowedModels,\n runSupervised,\n } satisfies SupervisedKnowledgeUpdateOptions)\n\n const instrumentedUpdateKnowledge: KnowledgeImprovementOptions['updateKnowledge'] = async (\n input,\n ) => {\n const updateStartedAt = Date.now()\n updateCalls += 1\n const result = await updateKnowledge(input)\n updateDurationMs += Date.now() - updateStartedAt\n addSpent(supervisedSpent, result.supervised)\n return result\n }\n const resolvedImprovement = await improveKnowledgeBase({\n ...knowledgeOptions,\n updateKnowledge: instrumentedUpdateKnowledge,\n })\n let knowledge: KnowledgeImprovementCandidatePair | undefined\n if (\n resolvedImprovement.candidate?.status === 'candidate-ready' ||\n resolvedImprovement.candidate?.status === 'promoted'\n ) {\n knowledge = await freezeKnowledgeCandidatePair(\n options.root,\n resolvedImprovement,\n candidateArtifacts,\n knowledgeOptions.signal,\n )\n }\n const finishedAtMs = Date.now()\n const measurement: KnowledgeImprovementJobMeasurement = {\n startedAt,\n finishedAt: new Date(finishedAtMs).toISOString(),\n durationMs: finishedAtMs - startedAtMs,\n updateCalls,\n updateDurationMs,\n supervisedSpent,\n }\n await onMeasurement?.(measurement)\n return {\n improvement: resolvedImprovement,\n ...(knowledge ? { knowledge } : {}),\n measurement,\n blocked: resolvedImprovement.blocked,\n }\n}\n\n/** Attach both frozen knowledge inputs to one otherwise-identical bundle pair. */\nexport function buildKnowledgeImprovementExperimentBundles(\n bundle: AgentCandidateBundle,\n knowledge: KnowledgeImprovementCandidatePair,\n): KnowledgeImprovementExperimentBundles {\n const input = omitTopLevelDigest(bundle)\n const withSnapshot = (snapshot: AgentCandidateKnowledge['snapshot']) =>\n agentCandidateKnowledgeSchema.parse({\n candidate: knowledge.reference,\n snapshot,\n evaluation: knowledge.evaluation,\n })\n return Object.freeze({\n baseline: sealAgentCandidateBundle({ ...input, knowledge: withSnapshot(knowledge.baseline) }),\n candidate: sealAgentCandidateBundle({ ...input, knowledge: withSnapshot(knowledge.candidate) }),\n })\n}\n\nasync function freezeKnowledgeCandidatePair(\n root: string,\n improvement: KnowledgeImprovementResult,\n artifacts: AgentCandidateOutputArtifactPort | undefined,\n signal: AbortSignal | undefined,\n): Promise<KnowledgeImprovementCandidatePair> {\n const candidate = knowledgeImprovementCandidateRef(improvement)\n const candidateRef = toAgentCandidateKnowledgeRef(candidate)\n return withKnowledgeImprovementComparison({ root, candidate }, async (comparison) => {\n const freeze = async (\n target: 'baseline' | 'candidate',\n ): Promise<AgentCandidateKnowledge['snapshot']> => {\n const executionId = `knowledge-${candidate.candidateId}-${target}`\n const captured = await captureAgentCandidateWorkspace(\n await realpath(comparison[target].root),\n {\n ...(artifacts\n ? {\n artifactPersistence: {\n executionId,\n outputArtifacts: artifacts,\n ...(signal ? { signal } : {}),\n },\n }\n : {}),\n },\n )\n return captured.snapshot\n }\n const evaluation = await captureKnowledgeEvidence(\n canonicalCandidateBytes({\n kind: 'agent-knowledge-candidate-evaluation',\n candidate: candidateRef,\n metric: comparison.evaluation,\n }),\n 'knowledge-evaluation',\n `knowledge-${candidate.candidateId}`,\n artifacts,\n signal,\n )\n const baseline = await freeze('baseline')\n const proposed = await freeze('candidate')\n return Object.freeze({\n reference: candidateRef,\n evaluation,\n baseline,\n candidate: proposed,\n })\n })\n}\n\nasync function captureKnowledgeEvidence(\n bytes: Uint8Array,\n purpose: 'knowledge-evaluation',\n executionId: string,\n artifacts: AgentCandidateOutputArtifactPort | undefined,\n signal: AbortSignal | undefined,\n): Promise<AgentCandidateCapturedArtifact> {\n if (!artifacts) return embeddedCandidateArtifact(bytes)\n return persistCandidateOutputArtifact(artifacts, {\n executionId,\n purpose,\n bytes,\n ...(signal ? { signal } : {}),\n })\n}\n\nfunction emptySpent(): KnowledgeImprovementJobMeasurement['supervisedSpent'] {\n return { iterations: 0, inputTokens: 0, outputTokens: 0, usdKnown: true, usd: 0, ms: 0 }\n}\n\nfunction addSpent(\n target: KnowledgeImprovementJobMeasurement['supervisedSpent'],\n result: SupervisedResult<unknown>,\n): void {\n const spent = result.spentTotal\n target.iterations += spent.iterations\n target.inputTokens += spent.tokens.input\n target.outputTokens += spent.tokens.output\n target.usdKnown = target.usdKnown && spent.usdKnown !== false\n target.usd += spent.usd\n target.ms += spent.ms\n}\n","import type { RagKnowledgeUpdateResult } from '@tangle-network/agent-knowledge'\nimport { researcherProfile } from '../profiles/researcher'\nimport type { DeliverableSpec } from '../runtime/supervise/completion-gate'\nimport type { ExecutorConfig } from '../runtime/supervise/runtime'\nimport { type SuperviseOptions, supervise } from '../runtime/supervise/supervise'\nimport type { SupervisorProfile } from '../runtime/supervise/supervisor-agent'\nimport type { Budget, SupervisedResult } from '../runtime/supervise/types'\n\n/** Standing prompt for a supervisor that grows a shared knowledge base through spawned researchers. */\nexport const RESEARCH_SUPERVISOR_SYSTEM_PROMPT = [\n 'You are a research supervisor. You do not answer the research question yourself.',\n 'You create and manage researcher workers that improve one shared knowledge base until it is ready.',\n '',\n 'Each round:',\n '1. Read the goal and the gaps the readiness check still reports.',\n '2. Decompose the open work into independent sub-topics.',\n '3. Spawn one researcher per sub-topic; split by sub-topic, never duplicate work.',\n '4. Wait for researchers to settle, steer or re-spawn thin sub-topics, then stop when the check passes.',\n '',\n 'Conserve the shared budget. Prefer a small number of well-scoped researchers over a large fanout that re-covers the same ground.',\n].join('\\n')\n\nexport interface KnowledgeReadinessCheckInput {\n root: string\n goal: string\n readinessSpecs?: readonly unknown[]\n readinessTaskId?: string\n readiness?: unknown\n}\n\nexport type KnowledgeReadinessCheckResult =\n | boolean\n | {\n ready: boolean\n summary?: string\n metadata?: Record<string, unknown>\n }\n\nexport type KnowledgeReadinessCheck = (\n input: KnowledgeReadinessCheckInput,\n) => Promise<KnowledgeReadinessCheckResult> | KnowledgeReadinessCheckResult\n\nexport interface SupervisedKnowledgeUpdateInput {\n goal?: string\n root?: string\n candidateRoot?: string\n findings?: readonly unknown[]\n metadata?: Record<string, unknown>\n}\n\nexport interface SupervisedKnowledgeUpdateResult {\n applied: boolean\n summary: string\n supervised: SupervisedResult<unknown>\n metadata: NonNullable<RagKnowledgeUpdateResult['metadata']>\n}\n\nexport interface SupervisedKnowledgeUpdateOptions {\n root: string\n goal: string\n readiness: KnowledgeReadinessCheck\n readinessSpecs?: readonly unknown[]\n readinessTaskId?: string\n readinessOptions?: unknown\n findings?: readonly unknown[]\n metadata?: Record<string, unknown>\n budget: Budget\n backend?: ExecutorConfig\n makeWorkerAgent?: SuperviseOptions['makeWorkerAgent']\n harness?: string\n supervisorModel?: string\n supervisorSystemPrompt?: string\n superviseOptions?: Partial<\n Omit<\n SuperviseOptions,\n 'budget' | 'backend' | 'deliverable' | 'makeWorkerAgent' | 'allowedModels'\n >\n >\n allowedModels?: readonly string[]\n runSupervised?: (\n profile: SupervisorProfile,\n task: unknown,\n opts: SuperviseOptions,\n ) => Promise<SupervisedResult<unknown>>\n}\n\nexport type SupervisedKnowledgeUpdater = (\n input: SupervisedKnowledgeUpdateInput,\n) => Promise<SupervisedKnowledgeUpdateResult>\n\n/** Build the completion check a supervised KB update uses to stop only when the KB is ready. */\nexport function knowledgeReadinessDeliverable(\n options: Pick<\n SupervisedKnowledgeUpdateOptions,\n 'root' | 'goal' | 'readiness' | 'readinessSpecs' | 'readinessTaskId' | 'readinessOptions'\n >,\n): DeliverableSpec<unknown> {\n return {\n describe: `knowledge base at ${options.root} is ready for: ${options.goal}`,\n async check() {\n const result = await options.readiness({\n root: options.root,\n goal: options.goal,\n readinessSpecs: options.readinessSpecs,\n readinessTaskId: options.readinessTaskId,\n readiness: options.readinessOptions,\n })\n return typeof result === 'boolean' ? result : result.ready\n },\n }\n}\n\n/** Create an `improveKnowledgeBase` update callback backed by runtime supervision. */\nexport function createSupervisedKnowledgeUpdater(\n options: SupervisedKnowledgeUpdateOptions,\n): SupervisedKnowledgeUpdater {\n return (input) =>\n runSupervisedKnowledgeUpdate({\n ...options,\n root: input.candidateRoot ?? input.root ?? options.root,\n goal: input.goal ?? options.goal,\n findings: input.findings ?? options.findings,\n metadata: { ...options.metadata, ...input.metadata },\n })\n}\n\n/** Run a runtime supervisor that updates one candidate knowledge base and stops on readiness. */\nexport async function runSupervisedKnowledgeUpdate(\n options: SupervisedKnowledgeUpdateOptions,\n): Promise<SupervisedKnowledgeUpdateResult> {\n const { profile: workerProfile } = researcherProfile({ harness: options.harness })\n const baseInstructions = options.supervisorSystemPrompt ?? RESEARCH_SUPERVISOR_SYSTEM_PROMPT\n const workerContract = workerProfile.prompt?.systemPrompt\n const systemPrompt = workerContract\n ? `${baseInstructions}\\n\\nEach researcher worker you spawn follows this contract:\\n${workerContract}`\n : baseInstructions\n\n const profile: SupervisorProfile = {\n name: 'knowledge-research-supervisor',\n model: options.supervisorModel,\n systemPrompt,\n }\n const run = options.runSupervised ?? supervise\n const task = formatSupervisedKnowledgeTask(options)\n const supervised = await run(profile, task, {\n ...options.superviseOptions,\n budget: options.budget,\n backend: options.backend,\n deliverable: knowledgeReadinessDeliverable(options),\n makeWorkerAgent: options.makeWorkerAgent,\n allowedModels: options.allowedModels,\n })\n return {\n applied: supervised.kind === 'winner',\n summary:\n supervised.kind === 'winner'\n ? 'research supervisor completed and the knowledge base passed readiness'\n : `research supervisor stopped without a ready knowledge base: ${supervised.reason}`,\n supervised,\n metadata: {\n supervised: true,\n root: options.root,\n goal: options.goal,\n result: supervised.kind,\n },\n }\n}\n\n/** Format the supervisor task with the KB root, readiness requirements, current findings, and metadata. */\nexport function formatSupervisedKnowledgeTask(\n options: Pick<\n SupervisedKnowledgeUpdateOptions,\n 'root' | 'goal' | 'readinessSpecs' | 'readinessTaskId' | 'findings' | 'metadata'\n >,\n): string {\n const sections = [\n `Goal: ${options.goal}`,\n `Knowledge base root: ${options.root}`,\n options.readinessTaskId ? `Readiness task id: ${options.readinessTaskId}` : undefined,\n options.readinessSpecs?.length\n ? `Readiness specs:\\n${JSON.stringify(options.readinessSpecs, null, 2)}`\n : undefined,\n options.findings?.length\n ? `Current findings:\\n${JSON.stringify(options.findings, null, 2)}`\n : undefined,\n options.metadata && Object.keys(options.metadata).length > 0\n ? `Metadata:\\n${JSON.stringify(options.metadata, null, 2)}`\n : undefined,\n ].filter((section): section is string => Boolean(section))\n return `${sections.join('\\n\\n')}\\n\\nUpdate files under the knowledge base root only. Stop when the readiness check passes.`\n}\n"],"mappings":"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","names":[]}