@inflexa-ai/harness 0.45.0 → 0.46.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 (802) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +19 -3
  3. package/dist/agents/conversation-agent.js +49 -30
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +35 -16
  9. package/dist/agents/sandbox/shared.js +63 -24
  10. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  11. package/dist/agents/sandbox/types.d.ts +26 -3
  12. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  13. package/dist/agents/sandbox/validate-skills.js +3 -1
  14. package/dist/agents/sandbox-catalog.d.ts +16 -2
  15. package/dist/agents/sandbox-catalog.js +22 -3
  16. package/dist/agents/system-prompt.d.ts +2 -2
  17. package/dist/app/approve-plan.d.ts +5 -2
  18. package/dist/app/approve-plan.js +1 -1
  19. package/dist/app/chat-turn-workflow.d.ts +114 -0
  20. package/dist/app/chat-turn-workflow.js +307 -0
  21. package/dist/app/chat-turn.d.ts +85 -57
  22. package/dist/app/chat-turn.js +125 -99
  23. package/dist/app/data-profile-orientation.js +10 -8
  24. package/dist/app/data-profile-view.d.ts +4 -4
  25. package/dist/app/data-profile-view.js +9 -8
  26. package/dist/app/in-process-turn.d.ts +42 -0
  27. package/dist/app/in-process-turn.js +139 -0
  28. package/dist/app/message-assembly.d.ts +10 -4
  29. package/dist/app/message-assembly.js +13 -8
  30. package/dist/app/report-session-runtime.d.ts +4 -4
  31. package/dist/app/report-session-runtime.js +36 -21
  32. package/dist/app/spawn-report-session.d.ts +33 -28
  33. package/dist/app/spawn-report-session.js +25 -40
  34. package/dist/app/synthesize-run.d.ts +22 -16
  35. package/dist/app/synthesize-run.js +41 -35
  36. package/dist/app/work.d.ts +96 -0
  37. package/dist/app/work.js +147 -0
  38. package/dist/auth/local-auth-context.d.ts +1 -3
  39. package/dist/auth/local-auth-context.js +1 -3
  40. package/dist/auth/local-run-authorizer.d.ts +1 -1
  41. package/dist/auth/local-run-authorizer.js +5 -3
  42. package/dist/auth/types.d.ts +26 -26
  43. package/dist/billing/cached-resolver.d.ts +4 -4
  44. package/dist/billing/run-charge.d.ts +5 -8
  45. package/dist/billing/run-charge.js +2 -2
  46. package/dist/billing/usage-recorder.d.ts +9 -9
  47. package/dist/citations/aggregate.js +1 -1
  48. package/dist/citations/clients/arxiv.d.ts +2 -2
  49. package/dist/citations/clients/arxiv.js +12 -4
  50. package/dist/citations/clients/common.js +4 -2
  51. package/dist/citations/clients/crossref.d.ts +2 -2
  52. package/dist/citations/clients/crossref.js +37 -37
  53. package/dist/citations/clients/doi-registry.js +15 -16
  54. package/dist/citations/clients/pubmed.d.ts +2 -2
  55. package/dist/citations/clients/pubmed.js +20 -13
  56. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  57. package/dist/citations/clients/semantic-scholar.js +9 -9
  58. package/dist/citations/compare.js +2 -2
  59. package/dist/citations/match.d.ts +2 -2
  60. package/dist/citations/match.js +12 -7
  61. package/dist/citations/normalize.js +35 -26
  62. package/dist/citations/plan.js +6 -2
  63. package/dist/citations/resolve.d.ts +6 -6
  64. package/dist/citations/resolve.js +34 -25
  65. package/dist/citations/types.d.ts +77 -77
  66. package/dist/config/environment-stores.d.ts +10 -8
  67. package/dist/config/resource-limits.js +1 -3
  68. package/dist/contracts/analogy-report.d.ts +7 -7
  69. package/dist/contracts/analogy-report.js +2 -2
  70. package/dist/contracts/chat-events.d.ts +46 -22
  71. package/dist/contracts/chat-events.js +1 -1
  72. package/dist/contracts/chat-frame.d.ts +15 -5
  73. package/dist/contracts/chat-frame.js +67 -40
  74. package/dist/contracts/chat-parts.d.ts +130 -67
  75. package/dist/contracts/chat-parts.js +1 -0
  76. package/dist/contracts/content-url.js +16 -2
  77. package/dist/contracts/data-profile.d.ts +38 -38
  78. package/dist/contracts/index.d.ts +3 -3
  79. package/dist/contracts/index.js +1 -1
  80. package/dist/contracts/message.d.ts +6 -6
  81. package/dist/contracts/organ-system.d.ts +11 -11
  82. package/dist/contracts/part-registry.d.ts +5 -4
  83. package/dist/contracts/part-registry.js +5 -0
  84. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  85. package/dist/contracts/profile-vocabulary.js +10 -3
  86. package/dist/contracts/report-blocks.d.ts +329 -329
  87. package/dist/contracts/report-reference.d.ts +105 -81
  88. package/dist/contracts/report-reference.js +30 -13
  89. package/dist/contracts/schemas/chat-events.d.ts +45 -6
  90. package/dist/contracts/schemas/chat-events.js +16 -0
  91. package/dist/contracts/schemas/chat-parts.d.ts +214 -102
  92. package/dist/contracts/schemas/chat-parts.js +50 -7
  93. package/dist/contracts/schemas/index.d.ts +1 -1
  94. package/dist/contracts/schemas/index.js +1 -1
  95. package/dist/contracts/severity.d.ts +1 -1
  96. package/dist/contracts/structure-source.d.ts +3 -3
  97. package/dist/contracts/structure-source.js +6 -2
  98. package/dist/contracts/subagent-activity.d.ts +2 -2
  99. package/dist/contracts/subagent-activity.js +5 -3
  100. package/dist/contracts/usage.d.ts +2 -2
  101. package/dist/data/safety-panel-schema.d.ts +25 -25
  102. package/dist/data/safety-panel-schema.js +13 -4
  103. package/dist/execution/artifact-metadata.d.ts +23 -15
  104. package/dist/execution/artifact-metadata.js +33 -10
  105. package/dist/execution/artifact-record.d.ts +2 -2
  106. package/dist/execution/artifact-registration.d.ts +5 -5
  107. package/dist/execution/artifact-registry.d.ts +8 -8
  108. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  109. package/dist/execution/dbos-run-launcher.js +58 -4
  110. package/dist/execution/dbos-workflow-purger.d.ts +7 -6
  111. package/dist/execution/dbos-workflow-purger.js +29 -21
  112. package/dist/execution/input-signature.d.ts +2 -2
  113. package/dist/execution/post-step-pipeline.d.ts +9 -9
  114. package/dist/execution/post-step-pipeline.js +1 -1
  115. package/dist/execution/post-step.js +2 -2
  116. package/dist/execution/reconcile-manifest.d.ts +4 -4
  117. package/dist/execution/reconcile-manifest.js +3 -2
  118. package/dist/execution/run-authorizer.d.ts +46 -37
  119. package/dist/execution/run-authorizer.js +8 -8
  120. package/dist/execution/run-canceler.d.ts +39 -17
  121. package/dist/execution/run-canceler.js +137 -28
  122. package/dist/execution/run-end-record.d.ts +29 -0
  123. package/dist/execution/run-end-record.js +27 -0
  124. package/dist/execution/run-event-parts.d.ts +0 -8
  125. package/dist/execution/run-event-parts.js +29 -24
  126. package/dist/execution/run-event-stream.d.ts +8 -8
  127. package/dist/execution/run-event-stream.js +3 -4
  128. package/dist/execution/run-launcher.d.ts +4 -4
  129. package/dist/execution/run-synthesis.d.ts +49 -48
  130. package/dist/execution/run-synthesis.js +96 -255
  131. package/dist/execution/staged-input.d.ts +2 -2
  132. package/dist/execution/step-summary.d.ts +6 -6
  133. package/dist/execution/step-summary.js +4 -8
  134. package/dist/execution/topo-sort.js +4 -3
  135. package/dist/execution/workflow-purger.d.ts +2 -2
  136. package/dist/index.d.ts +25 -24
  137. package/dist/index.js +36 -37
  138. package/dist/input-sanitization.js +9 -2
  139. package/dist/input-scan/clustering.d.ts +6 -6
  140. package/dist/input-scan/clustering.js +11 -5
  141. package/dist/input-scan/companions.js +3 -2
  142. package/dist/input-scan/detect-sets.d.ts +2 -2
  143. package/dist/input-scan/detect-sets.js +25 -21
  144. package/dist/input-scan/enrich.d.ts +6 -6
  145. package/dist/input-scan/enrich.js +29 -12
  146. package/dist/input-scan/formats.d.ts +2 -2
  147. package/dist/input-scan/formats.js +8 -2
  148. package/dist/input-scan/markers.d.ts +2 -2
  149. package/dist/input-scan/markers.js +14 -5
  150. package/dist/input-scan/menu.d.ts +10 -10
  151. package/dist/input-scan/menu.js +0 -0
  152. package/dist/input-scan/quarantine.d.ts +2 -2
  153. package/dist/input-scan/quarantine.js +23 -18
  154. package/dist/input-scan/readout-budget.d.ts +2 -2
  155. package/dist/input-scan/readout-budget.js +1 -1
  156. package/dist/input-scan/readout.d.ts +2 -2
  157. package/dist/input-scan/readout.js +47 -34
  158. package/dist/input-scan/scan.d.ts +2 -2
  159. package/dist/input-scan/scan.js +7 -5
  160. package/dist/input-scan/set-types.d.ts +28 -28
  161. package/dist/input-scan/shapes.d.ts +4 -4
  162. package/dist/input-scan/shapes.js +0 -0
  163. package/dist/input-scan/templates.d.ts +10 -10
  164. package/dist/input-scan/templates.js +30 -22
  165. package/dist/input-scan/tokens.d.ts +6 -4
  166. package/dist/input-scan/tokens.js +100 -38
  167. package/dist/input-scan/types.d.ts +22 -22
  168. package/dist/lib/async-utils.d.ts +3 -7
  169. package/dist/lib/async-utils.js +5 -9
  170. package/dist/lib/cache.js +1 -1
  171. package/dist/lib/chrome.d.ts +46 -6
  172. package/dist/lib/console-logger.js +2 -2
  173. package/dist/lib/db-result.d.ts +22 -6
  174. package/dist/lib/db-result.js +9 -13
  175. package/dist/lib/eyes.d.ts +4 -4
  176. package/dist/lib/eyes.js +1 -1
  177. package/dist/lib/fs-helpers.js +18 -6
  178. package/dist/lib/fs-result.d.ts +1 -0
  179. package/dist/lib/fs-result.js +5 -6
  180. package/dist/lib/hooks.d.ts +23 -7
  181. package/dist/lib/hooks.js +17 -3
  182. package/dist/lib/host-concurrency.js +3 -2
  183. package/dist/lib/logger.d.ts +2 -2
  184. package/dist/lib/logger.js +2 -1
  185. package/dist/lib/metrics.d.ts +1 -1
  186. package/dist/lib/null-proto.d.ts +6 -0
  187. package/dist/lib/null-proto.js +17 -0
  188. package/dist/lib/otel-spans.d.ts +1 -1
  189. package/dist/lib/otel-spans.js +9 -5
  190. package/dist/lib/otel.d.ts +4 -2
  191. package/dist/lib/otel.js +10 -2
  192. package/dist/lib/page-capture.d.ts +8 -8
  193. package/dist/lib/page-capture.js +9 -4
  194. package/dist/lib/parse-json.d.ts +5 -0
  195. package/dist/lib/parse-json.js +12 -0
  196. package/dist/lib/present.d.ts +12 -0
  197. package/dist/lib/present.js +39 -0
  198. package/dist/lib/rate-limit.d.ts +4 -4
  199. package/dist/lib/rate-limit.js +12 -13
  200. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  201. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  202. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  203. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  204. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  205. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  206. package/dist/lib/regulatory-corpus.d.ts +10 -10
  207. package/dist/lib/regulatory-corpus.js +3 -1
  208. package/dist/lib/result.d.ts +10 -11
  209. package/dist/lib/result.js +15 -13
  210. package/dist/lib/storage.d.ts +2 -2
  211. package/dist/lib/test/async-iterable.d.ts +9 -0
  212. package/dist/lib/test/async-iterable.js +28 -0
  213. package/dist/lib/test/request-url.d.ts +5 -0
  214. package/dist/lib/test/request-url.js +7 -0
  215. package/dist/lib/test/result-assert.d.ts +12 -0
  216. package/dist/lib/test/result-assert.js +17 -0
  217. package/dist/lib/test/text-shapes.d.ts +24 -0
  218. package/dist/lib/test/text-shapes.js +63 -0
  219. package/dist/lib/text.d.ts +22 -0
  220. package/dist/lib/text.js +68 -0
  221. package/dist/lib/thrown.d.ts +18 -0
  222. package/dist/lib/thrown.js +30 -0
  223. package/dist/lib/unknown-array.d.ts +6 -0
  224. package/dist/lib/unknown-array.js +8 -0
  225. package/dist/lib/unknown-containers.d.ts +14 -0
  226. package/dist/lib/unknown-containers.js +17 -0
  227. package/dist/lib/unknown-text.d.ts +8 -0
  228. package/dist/lib/unknown-text.js +28 -0
  229. package/dist/lib/zod-issue-shape.d.ts +1 -1
  230. package/dist/lib/zod-issue-shape.js +31 -31
  231. package/dist/lib/zod-issues.d.ts +3 -3
  232. package/dist/lib/zod-issues.js +30 -17
  233. package/dist/literature/sources/arxiv.d.ts +6 -6
  234. package/dist/literature/sources/arxiv.js +92 -35
  235. package/dist/literature/sources/http.d.ts +2 -2
  236. package/dist/literature/sources/http.js +16 -15
  237. package/dist/literature/sources/pubmed.d.ts +16 -16
  238. package/dist/literature/sources/pubmed.js +96 -61
  239. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  240. package/dist/literature/sources/semantic-scholar.js +22 -13
  241. package/dist/loop/accounting.d.ts +63 -0
  242. package/dist/loop/accounting.js +141 -0
  243. package/dist/loop/call-policy.d.ts +73 -0
  244. package/dist/loop/call-policy.js +109 -0
  245. package/dist/loop/chat-stream.d.ts +62 -0
  246. package/dist/loop/chat-stream.js +237 -0
  247. package/dist/loop/compaction.d.ts +14 -9
  248. package/dist/loop/compaction.js +17 -0
  249. package/dist/loop/metrics.d.ts +12 -15
  250. package/dist/loop/metrics.js +14 -26
  251. package/dist/loop/run-loop.d.ts +233 -0
  252. package/dist/loop/run-loop.js +770 -0
  253. package/dist/loop/sub-agent.d.ts +61 -0
  254. package/dist/loop/sub-agent.js +161 -0
  255. package/dist/loop/tool-adapter.d.ts +98 -0
  256. package/dist/loop/tool-adapter.js +364 -0
  257. package/dist/loop/tool-detail.d.ts +1 -1
  258. package/dist/loop/tool-detail.js +6 -5
  259. package/dist/loop/tool-outcome.d.ts +1 -1
  260. package/dist/loop/tool-output.d.ts +4 -4
  261. package/dist/loop/tool-output.js +2 -2
  262. package/dist/loop/turn-credentials.d.ts +34 -0
  263. package/dist/loop/turn-credentials.js +73 -0
  264. package/dist/loop/types.d.ts +34 -37
  265. package/dist/loop/types.js +2 -7
  266. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  267. package/dist/memory/ai-sdk-message-storage.js +13 -11
  268. package/dist/memory/card-builders.d.ts +14 -14
  269. package/dist/memory/card-builders.js +19 -15
  270. package/dist/memory/conversation-display-recorder.d.ts +22 -6
  271. package/dist/memory/conversation-display-recorder.js +64 -20
  272. package/dist/memory/conversation-display-replay.js +3 -2
  273. package/dist/memory/conversation-display-storage.d.ts +15 -7
  274. package/dist/memory/conversation-display-storage.js +141 -36
  275. package/dist/memory/conversation-view.d.ts +4 -4
  276. package/dist/memory/conversation-view.js +5 -4
  277. package/dist/memory/count-tokens.js +10 -8
  278. package/dist/memory/derive-thread-title.d.ts +0 -13
  279. package/dist/memory/derive-thread-title.js +2 -1
  280. package/dist/memory/message-backfill.d.ts +12 -5
  281. package/dist/memory/message-backfill.js +5 -3
  282. package/dist/memory/thread-history.d.ts +66 -24
  283. package/dist/memory/thread-history.js +212 -79
  284. package/dist/memory/thread-store.d.ts +26 -17
  285. package/dist/memory/thread-store.js +15 -9
  286. package/dist/memory/tool-call-integrity.d.ts +2 -2
  287. package/dist/memory/tool-call-integrity.js +4 -3
  288. package/dist/memory/working-memory.d.ts +16 -12
  289. package/dist/memory/working-memory.js +72 -61
  290. package/dist/prompts/briefing.d.ts +63 -9
  291. package/dist/prompts/briefing.js +130 -3
  292. package/dist/prompts/planner.js +13 -2
  293. package/dist/prompts/synthesis-agent.d.ts +1 -1
  294. package/dist/prompts/synthesis-agent.js +6 -14
  295. package/dist/provenance/collector.d.ts +6 -6
  296. package/dist/provenance/collector.js +15 -8
  297. package/dist/provenance/exec-frame.d.ts +2 -2
  298. package/dist/provenance/exec-frame.js +6 -1
  299. package/dist/provenance/seam.d.ts +24 -19
  300. package/dist/provenance/seam.js +7 -5
  301. package/dist/provenance/types.d.ts +6 -6
  302. package/dist/providers/ai-sdk.d.ts +113 -62
  303. package/dist/providers/ai-sdk.js +303 -458
  304. package/dist/providers/embedding.d.ts +2 -2
  305. package/dist/providers/embedding.js +1 -1
  306. package/dist/providers/errors.d.ts +22 -2
  307. package/dist/providers/errors.js +98 -50
  308. package/dist/providers/prompt-cache.d.ts +8 -8
  309. package/dist/providers/prompt-cache.js +13 -11
  310. package/dist/providers/reasoning.d.ts +2 -2
  311. package/dist/providers/reasoning.js +2 -2
  312. package/dist/providers/types.d.ts +59 -92
  313. package/dist/reference-data/catalog.d.ts +2 -15
  314. package/dist/reference-data/catalog.js +166 -10
  315. package/dist/reference-data/receipt.d.ts +2 -2
  316. package/dist/report-model/assert-rules.js +1 -1
  317. package/dist/report-model/authoring-grammar.d.ts +209 -231
  318. package/dist/report-model/block-walk.d.ts +10 -10
  319. package/dist/report-model/block-walk.js +2 -0
  320. package/dist/report-model/draft-finish.d.ts +8 -8
  321. package/dist/report-model/draft-finish.js +1 -1
  322. package/dist/report-model/draft-hash.js +8 -7
  323. package/dist/report-model/draft-operations.d.ts +22 -10
  324. package/dist/report-model/draft-operations.js +48 -30
  325. package/dist/report-model/draft-read.d.ts +19 -7
  326. package/dist/report-model/draft-read.js +16 -6
  327. package/dist/report-model/draft.d.ts +844 -2
  328. package/dist/report-model/draft.js +3 -1
  329. package/dist/report-model/fixture-resolver.js +39 -16
  330. package/dist/report-model/pin-snapshot.d.ts +2 -2
  331. package/dist/report-model/pin-snapshot.js +15 -15
  332. package/dist/report-model/production-resolver.d.ts +18 -18
  333. package/dist/report-model/production-resolver.js +50 -42
  334. package/dist/report-model/reference-resolver.d.ts +26 -10
  335. package/dist/report-model/reference-resolver.js +68 -5
  336. package/dist/report-model/reference-stamp.js +30 -38
  337. package/dist/report-model/structural-validation.js +12 -4
  338. package/dist/report-model/validate.d.ts +7 -7
  339. package/dist/report-model/validate.js +6 -6
  340. package/dist/report-render/assets.d.ts +2 -2
  341. package/dist/report-render/assets.js +27 -3
  342. package/dist/report-render/chart-export.d.ts +10 -2
  343. package/dist/report-render/chart-export.js +37 -11
  344. package/dist/report-render/chart-presets.d.ts +8 -8
  345. package/dist/report-render/chart-presets.js +3 -3
  346. package/dist/report-render/chart-renderers.d.ts +23 -16
  347. package/dist/report-render/chart-renderers.js +74 -53
  348. package/dist/report-render/chart-toolbox.d.ts +2 -2
  349. package/dist/report-render/chart-toolbox.js +7 -6
  350. package/dist/report-render/chart.d.ts +15 -16
  351. package/dist/report-render/chart.js +369 -252
  352. package/dist/report-render/design.d.ts +36 -297
  353. package/dist/report-render/design.js +0 -12
  354. package/dist/report-render/figures/common.d.ts +12 -12
  355. package/dist/report-render/figures/common.js +42 -31
  356. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  357. package/dist/report-render/figures/dendrogram.js +10 -10
  358. package/dist/report-render/figures/dense.js +15 -8
  359. package/dist/report-render/figures/dotplot.js +46 -33
  360. package/dist/report-render/figures/embedding.js +52 -43
  361. package/dist/report-render/figures/equal-units.d.ts +10 -10
  362. package/dist/report-render/figures/equal-units.js +27 -27
  363. package/dist/report-render/figures/forest.js +9 -7
  364. package/dist/report-render/figures/gsea.js +21 -11
  365. package/dist/report-render/figures/heatmap.js +13 -9
  366. package/dist/report-render/figures/index.d.ts +10 -10
  367. package/dist/report-render/figures/index.js +4 -2
  368. package/dist/report-render/figures/km.js +10 -9
  369. package/dist/report-render/figures/label-room.d.ts +12 -12
  370. package/dist/report-render/figures/label-room.js +7 -2
  371. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  372. package/dist/report-render/figures/locuszoom.js +59 -31
  373. package/dist/report-render/figures/lollipop.js +3 -2
  374. package/dist/report-render/figures/ma.js +8 -4
  375. package/dist/report-render/figures/manhattan.d.ts +1 -2
  376. package/dist/report-render/figures/manhattan.js +52 -34
  377. package/dist/report-render/figures/oncoprint.js +4 -5
  378. package/dist/report-render/figures/pca.js +25 -11
  379. package/dist/report-render/figures/qq.js +20 -9
  380. package/dist/report-render/figures/roc.js +1 -1
  381. package/dist/report-render/figures/sankey.d.ts +2 -2
  382. package/dist/report-render/figures/sankey.js +11 -10
  383. package/dist/report-render/figures/upset.d.ts +6 -6
  384. package/dist/report-render/figures/upset.js +7 -4
  385. package/dist/report-render/figures/volcano.js +12 -10
  386. package/dist/report-render/hybrid-svg.d.ts +4 -4
  387. package/dist/report-render/hybrid-svg.js +7 -5
  388. package/dist/report-render/number-format.d.ts +4 -4
  389. package/dist/report-render/number-format.js +62 -27
  390. package/dist/report-render/page.js +2 -1
  391. package/dist/report-render/provenance-data.d.ts +2 -2
  392. package/dist/report-render/references.d.ts +4 -4
  393. package/dist/report-render/render.d.ts +2 -2
  394. package/dist/report-render/render.js +10 -11
  395. package/dist/report-render/script-json.js +1 -1
  396. package/dist/report-render/table-data.d.ts +6 -6
  397. package/dist/report-render/test/options.d.ts +49 -0
  398. package/dist/report-render/test/options.js +143 -0
  399. package/dist/report-render/test/page-function.d.ts +19 -0
  400. package/dist/report-render/test/page-function.js +33 -0
  401. package/dist/report-render/types.d.ts +10 -10
  402. package/dist/report-render/value-bridge.d.ts +4 -4
  403. package/dist/report-render/value-bridge.js +27 -14
  404. package/dist/report-render/views/chart-view.d.ts +2 -2
  405. package/dist/report-render/views/chart-view.js +2 -2
  406. package/dist/report-render/views/lineage.d.ts +6 -6
  407. package/dist/report-render/views/lineage.js +2 -0
  408. package/dist/report-render/views/page-view.d.ts +2 -2
  409. package/dist/report-render/views/page-view.js +1 -0
  410. package/dist/report-render/views/prose.js +25 -8
  411. package/dist/report-render/views/references-view.js +12 -1
  412. package/dist/report-render/views/values.js +1 -1
  413. package/dist/runtime/assemble.d.ts +53 -26
  414. package/dist/runtime/assemble.js +103 -56
  415. package/dist/runtime/boot.d.ts +8 -7
  416. package/dist/runtime/boot.js +1 -1
  417. package/dist/runtime/connection-budget.d.ts +6 -6
  418. package/dist/runtime/connection-budget.js +1 -1
  419. package/dist/runtime/dbos.d.ts +29 -19
  420. package/dist/runtime/dbos.js +35 -20
  421. package/dist/runtime/result-serialization.js +18 -5
  422. package/dist/runtime/shutdown.d.ts +2 -2
  423. package/dist/sandbox/client.d.ts +7 -3
  424. package/dist/sandbox/cpu-files.d.ts +2 -2
  425. package/dist/sandbox/cpu-files.js +21 -4
  426. package/dist/sandbox/create-sandbox.d.ts +7 -8
  427. package/dist/sandbox/create-sandbox.js +6 -12
  428. package/dist/sandbox/docker-client.d.ts +48 -3
  429. package/dist/sandbox/docker-client.js +10 -6
  430. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  431. package/dist/sandbox/exec-outcome.d.ts +2 -2
  432. package/dist/sandbox/exec-outcome.js +1 -1
  433. package/dist/sandbox/exec.d.ts +10 -6
  434. package/dist/sandbox/exec.js +27 -12
  435. package/dist/sandbox/execution-id.js +14 -6
  436. package/dist/sandbox/farm.d.ts +2 -2
  437. package/dist/sandbox/farm.js +22 -27
  438. package/dist/sandbox/identity.d.ts +7 -0
  439. package/dist/sandbox/identity.js +14 -3
  440. package/dist/sandbox/image-packages.d.ts +26 -4
  441. package/dist/sandbox/image-packages.js +29 -27
  442. package/dist/sandbox/k8s-client.d.ts +35 -8
  443. package/dist/sandbox/k8s-client.js +6 -5
  444. package/dist/sandbox/labels.js +1 -0
  445. package/dist/sandbox/liveness.js +3 -1
  446. package/dist/sandbox/mount-plan.d.ts +10 -10
  447. package/dist/sandbox/mount-plan.js +13 -14
  448. package/dist/sandbox/notification-sweep.d.ts +4 -4
  449. package/dist/sandbox/notification-sweep.js +4 -7
  450. package/dist/sandbox/package-identity.d.ts +6 -13
  451. package/dist/sandbox/package-identity.js +46 -28
  452. package/dist/sandbox/reaper.d.ts +10 -10
  453. package/dist/sandbox/reaper.js +4 -6
  454. package/dist/sandbox/sandbox-error.d.ts +2 -9
  455. package/dist/sandbox/sandbox-error.js +21 -8
  456. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  457. package/dist/sandbox/sandbox-step-translate.js +22 -8
  458. package/dist/sandbox/step-sandbox.d.ts +47 -0
  459. package/dist/sandbox/step-sandbox.js +53 -0
  460. package/dist/sandbox/types.d.ts +18 -19
  461. package/dist/sandbox/types.js +1 -1
  462. package/dist/schemas/artifact-manifest.d.ts +4 -4
  463. package/dist/schemas/data-profile-schemas.d.ts +351 -306
  464. package/dist/schemas/file-metadata.js +2 -4
  465. package/dist/schemas/plan-schemas.d.ts +79 -25
  466. package/dist/schemas/plan-schemas.js +1 -1
  467. package/dist/schemas/run-synthesis.d.ts +95 -26
  468. package/dist/schemas/run-synthesis.js +3 -1
  469. package/dist/schemas/validate-plan.d.ts +4 -4
  470. package/dist/schemas/validate-plan.js +17 -5
  471. package/dist/schemas/workflow-state.d.ts +127 -14
  472. package/dist/schemas/workflow-state.js +56 -2
  473. package/dist/state/active-turns.d.ts +36 -0
  474. package/dist/state/active-turns.js +67 -0
  475. package/dist/state/analyses-metrics.d.ts +8 -8
  476. package/dist/state/analyses-metrics.js +4 -4
  477. package/dist/state/analyses.d.ts +0 -14
  478. package/dist/state/analyses.js +0 -32
  479. package/dist/state/artifacts.d.ts +47 -18
  480. package/dist/state/artifacts.js +48 -7
  481. package/dist/state/data-profile.d.ts +2 -2
  482. package/dist/state/db.d.ts +12 -2
  483. package/dist/state/db.js +5 -0
  484. package/dist/state/edit-intents.d.ts +4 -0
  485. package/dist/state/edit-intents.js +71 -0
  486. package/dist/state/index.d.ts +5 -5
  487. package/dist/state/index.js +3 -3
  488. package/dist/state/init.d.ts +2 -1
  489. package/dist/state/init.js +5 -2
  490. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  491. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  492. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  493. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  494. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  495. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  496. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  497. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  498. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  499. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  500. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  501. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  502. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  503. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  504. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  505. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  506. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  507. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  508. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  509. package/dist/state/migrations/index.js +18 -0
  510. package/dist/state/paused-work.d.ts +52 -0
  511. package/dist/state/paused-work.js +105 -0
  512. package/dist/state/plans.d.ts +27 -8
  513. package/dist/state/plans.js +14 -11
  514. package/dist/state/purge-analysis.d.ts +6 -6
  515. package/dist/state/purge-analysis.js +10 -2
  516. package/dist/state/report-session-state.d.ts +43 -18
  517. package/dist/state/report-session-state.js +43 -4
  518. package/dist/state/report-versions.d.ts +16 -11
  519. package/dist/state/report-versions.js +5 -3
  520. package/dist/state/runs.d.ts +70 -25
  521. package/dist/state/runs.js +127 -64
  522. package/dist/state/schema.d.ts +18 -21
  523. package/dist/state/schema.js +4 -5
  524. package/dist/state/snapshot-parse.d.ts +2 -2
  525. package/dist/state/snapshot-parse.js +14 -8
  526. package/dist/state/step-executions.d.ts +29 -8
  527. package/dist/state/step-executions.js +28 -4
  528. package/dist/state/tool-outputs.d.ts +2 -2
  529. package/dist/state/tool-outputs.js +2 -1
  530. package/dist/state/vector-store.d.ts +16 -16
  531. package/dist/state/vector-store.js +11 -7
  532. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  533. package/dist/tasks/data-profile-absorb.js +21 -16
  534. package/dist/tasks/data-profile-activity.d.ts +5 -5
  535. package/dist/tasks/data-profile-activity.js +5 -5
  536. package/dist/tasks/data-profile-index.d.ts +4 -4
  537. package/dist/tasks/data-profile-index.js +32 -17
  538. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  539. package/dist/tasks/data-profile-resolve.js +88 -62
  540. package/dist/tasks/data-profile.d.ts +40 -31
  541. package/dist/tasks/data-profile.js +138 -95
  542. package/dist/tasks/extract-values.d.ts +26 -79
  543. package/dist/tasks/extract-values.js +48 -108
  544. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  545. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  546. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  547. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  548. package/dist/testing.d.ts +60 -0
  549. package/dist/testing.js +96 -0
  550. package/dist/tools/ad-hoc-router.d.ts +11 -9
  551. package/dist/tools/ad-hoc-router.js +80 -51
  552. package/dist/tools/analysis-invocation.d.ts +7 -0
  553. package/dist/tools/analysis-invocation.js +29 -5
  554. package/dist/tools/approval/contract.d.ts +8 -52
  555. package/dist/tools/approval/contract.js +7 -36
  556. package/dist/tools/approval/gateway.d.ts +27 -28
  557. package/dist/tools/approval/gateway.js +33 -130
  558. package/dist/tools/approval/queries.d.ts +6 -11
  559. package/dist/tools/approval/queries.js +43 -29
  560. package/dist/tools/approval/uuidv7.js +2 -2
  561. package/dist/tools/bio/chembl.d.ts +3 -3
  562. package/dist/tools/bio/chembl.js +10 -0
  563. package/dist/tools/bio/comptox.d.ts +25 -8
  564. package/dist/tools/bio/comptox.js +4 -2
  565. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  566. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  567. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  568. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  569. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  570. package/dist/tools/bio/keys.d.ts +2 -2
  571. package/dist/tools/bio/keys.js +3 -3
  572. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  573. package/dist/tools/bio/lookup-annotation.js +3 -0
  574. package/dist/tools/bio/opentargets.d.ts +1 -1
  575. package/dist/tools/bio/opentargets.js +6 -0
  576. package/dist/tools/bio/pubchem.d.ts +2 -2
  577. package/dist/tools/bio/pubchem.js +6 -0
  578. package/dist/tools/bio/pubmed.d.ts +26 -16
  579. package/dist/tools/bio/pubmed.js +9 -3
  580. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  581. package/dist/tools/bio/search-clinical-trials.js +5 -1
  582. package/dist/tools/bio/search-faers.d.ts +2 -2
  583. package/dist/tools/bio/search-faers.js +1 -1
  584. package/dist/tools/bio/search-gene.d.ts +2 -2
  585. package/dist/tools/bio/search-gene.js +1 -0
  586. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  587. package/dist/tools/bio/search-geo-datasets.js +5 -5
  588. package/dist/tools/bio/search-interactions.d.ts +1 -1
  589. package/dist/tools/bio/search-patents.d.ts +28 -22
  590. package/dist/tools/bio/search-patents.js +20 -17
  591. package/dist/tools/bio/search-protein.d.ts +2 -2
  592. package/dist/tools/bio/search-protein.js +1 -1
  593. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  594. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  595. package/dist/tools/bio/target-safety.d.ts +8 -8
  596. package/dist/tools/bio/target-safety.js +11 -6
  597. package/dist/tools/capability-data.d.ts +40 -0
  598. package/dist/tools/capability-data.js +74 -0
  599. package/dist/tools/define-tool.d.ts +55 -46
  600. package/dist/tools/define-tool.js +39 -27
  601. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  602. package/dist/tools/display/normalize-echart-spec.js +51 -27
  603. package/dist/tools/display/show-user.d.ts +2 -2
  604. package/dist/tools/display/show-user.js +1 -1
  605. package/dist/tools/execute-analysis.d.ts +54 -17
  606. package/dist/tools/execute-analysis.js +193 -62
  607. package/dist/tools/knowledge/check.d.ts +182 -0
  608. package/dist/tools/knowledge/check.js +94 -0
  609. package/dist/tools/knowledge/client.d.ts +351 -0
  610. package/dist/tools/knowledge/client.js +319 -0
  611. package/dist/tools/knowledge/environment.d.ts +78 -0
  612. package/dist/tools/knowledge/environment.js +116 -0
  613. package/dist/tools/knowledge/index.d.ts +49 -0
  614. package/dist/tools/knowledge/index.js +70 -0
  615. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  616. package/dist/tools/knowledge/local-slots.js +184 -0
  617. package/dist/tools/knowledge/pin.d.ts +14 -0
  618. package/dist/tools/knowledge/pin.js +17 -0
  619. package/dist/tools/knowledge/recommend.d.ts +67 -0
  620. package/dist/tools/knowledge/recommend.js +106 -0
  621. package/dist/tools/knowledge/situation.d.ts +143 -0
  622. package/dist/tools/knowledge/situation.js +157 -0
  623. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  624. package/dist/tools/knowledge/skeleton.js +201 -0
  625. package/dist/tools/knowledge/template.d.ts +139 -0
  626. package/dist/tools/knowledge/template.js +273 -0
  627. package/dist/tools/lib/alphafold-client.js +2 -1
  628. package/dist/tools/lib/amass-client.d.ts +28 -28
  629. package/dist/tools/lib/amass-client.js +20 -10
  630. package/dist/tools/lib/api-utils.d.ts +13 -3
  631. package/dist/tools/lib/api-utils.js +17 -3
  632. package/dist/tools/lib/bgee-client.d.ts +6 -6
  633. package/dist/tools/lib/bgee-client.js +16 -10
  634. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  635. package/dist/tools/lib/cbioportal-client.js +9 -8
  636. package/dist/tools/lib/chembl-client.d.ts +14 -14
  637. package/dist/tools/lib/chembl-client.js +11 -4
  638. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  639. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  640. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  641. package/dist/tools/lib/clinical-trials-client.js +10 -10
  642. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  643. package/dist/tools/lib/clinvar-client.js +6 -6
  644. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  645. package/dist/tools/lib/ctx-ops.js +13 -10
  646. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  647. package/dist/tools/lib/dgidb-client.js +10 -12
  648. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  649. package/dist/tools/lib/ema-client.d.ts +2 -2
  650. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  651. package/dist/tools/lib/ensembl-client.js +5 -4
  652. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  653. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  654. package/dist/tools/lib/html-text.d.ts +6 -0
  655. package/dist/tools/lib/html-text.js +9 -0
  656. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  657. package/dist/tools/lib/identifier-resolver.js +7 -3
  658. package/dist/tools/lib/impc-client.d.ts +8 -8
  659. package/dist/tools/lib/impc-client.js +46 -35
  660. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  661. package/dist/tools/lib/iuphar-client.js +7 -16
  662. package/dist/tools/lib/monarch-client.d.ts +4 -4
  663. package/dist/tools/lib/openfda-client.d.ts +22 -22
  664. package/dist/tools/lib/openfda-client.js +23 -22
  665. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  666. package/dist/tools/lib/pathway-client.d.ts +4 -4
  667. package/dist/tools/lib/pathway-client.js +15 -19
  668. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  669. package/dist/tools/lib/pharmgkb-client.js +1 -1
  670. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  671. package/dist/tools/lib/protein-family-modality.js +0 -2
  672. package/dist/tools/lib/protein-family-normalize.js +7 -0
  673. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  674. package/dist/tools/lib/pubchem-client.js +1 -0
  675. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  676. package/dist/tools/lib/pubchem-ops.js +8 -0
  677. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  678. package/dist/tools/lib/pubmed-client.js +1 -1
  679. package/dist/tools/lib/string-client.d.ts +6 -6
  680. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  681. package/dist/tools/lib/uniprot-client.js +5 -1
  682. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  683. package/dist/tools/memory/update-working-memory.js +21 -3
  684. package/dist/tools/read-tool-output.js +8 -2
  685. package/dist/tools/registry.d.ts +2 -2
  686. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  687. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  688. package/dist/tools/report-session/derive-table.d.ts +19 -59
  689. package/dist/tools/report-session/derive-table.js +120 -122
  690. package/dist/tools/report-session/examine-page.d.ts +6 -6
  691. package/dist/tools/report-session/examine-page.js +14 -12
  692. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  693. package/dist/tools/report-session/list-artifacts.js +5 -5
  694. package/dist/tools/report-session/page-faults.d.ts +6 -6
  695. package/dist/tools/report-session/page-faults.js +3 -1
  696. package/dist/tools/report-session/preview-report.d.ts +4 -3
  697. package/dist/tools/report-session/preview-report.js +26 -7
  698. package/dist/tools/report-session/record-version.d.ts +9 -4
  699. package/dist/tools/report-session/record-version.js +16 -9
  700. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  701. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  702. package/dist/tools/research/generate-analogy-report.js +80 -76
  703. package/dist/tools/research/generate-plan.d.ts +39 -16
  704. package/dist/tools/research/generate-plan.js +565 -338
  705. package/dist/tools/research/guarded-address.d.ts +20 -0
  706. package/dist/tools/research/guarded-address.js +149 -0
  707. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  708. package/dist/tools/research/inspect-data-profile.js +26 -25
  709. package/dist/tools/research/inspect-run.d.ts +54 -27
  710. package/dist/tools/research/inspect-run.js +50 -40
  711. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  712. package/dist/tools/research/literature-reviewer.js +29 -28
  713. package/dist/tools/research/search-arxiv.d.ts +1 -1
  714. package/dist/tools/research/search-arxiv.js +1 -1
  715. package/dist/tools/research/search-github-repos.d.ts +10 -7
  716. package/dist/tools/research/search-github-repos.js +25 -22
  717. package/dist/tools/research/search-semantic-scholar.js +1 -1
  718. package/dist/tools/research/searxng-engine.d.ts +40 -0
  719. package/dist/tools/research/searxng-engine.js +122 -0
  720. package/dist/tools/research/web-fetch.d.ts +127 -0
  721. package/dist/tools/research/web-fetch.js +618 -0
  722. package/dist/tools/research/web-search.d.ts +84 -0
  723. package/dist/tools/research/web-search.js +117 -0
  724. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  725. package/dist/tools/sandbox/link-packages.js +11 -8
  726. package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
  727. package/dist/tools/sandbox/list-available-packages.js +43 -29
  728. package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
  729. package/dist/tools/sandbox/list-available-refs.js +119 -37
  730. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  731. package/dist/tools/sandbox/report-blocker.js +22 -68
  732. package/dist/tools/sandbox/skills.d.ts +16 -12
  733. package/dist/tools/sandbox/skills.js +16 -12
  734. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  735. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  736. package/dist/tools/start-report-session.d.ts +13 -5
  737. package/dist/tools/start-report-session.js +35 -8
  738. package/dist/tools/terminal-text.d.ts +14 -0
  739. package/dist/tools/terminal-text.js +51 -0
  740. package/dist/tools/workspace/decision-record.d.ts +81 -0
  741. package/dist/tools/workspace/decision-record.js +127 -0
  742. package/dist/tools/workspace/edit-file.d.ts +59 -18
  743. package/dist/tools/workspace/edit-file.js +98 -15
  744. package/dist/tools/workspace/execute-command.d.ts +31 -12
  745. package/dist/tools/workspace/execute-command.js +37 -8
  746. package/dist/tools/workspace/file-stat.d.ts +6 -3
  747. package/dist/tools/workspace/grep.d.ts +10 -7
  748. package/dist/tools/workspace/grep.js +9 -3
  749. package/dist/tools/workspace/index.d.ts +1 -0
  750. package/dist/tools/workspace/index.js +1 -0
  751. package/dist/tools/workspace/list-files.d.ts +6 -3
  752. package/dist/tools/workspace/mutator.d.ts +28 -15
  753. package/dist/tools/workspace/mutator.js +107 -53
  754. package/dist/tools/workspace/read-file.d.ts +8 -5
  755. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  756. package/dist/tools/workspace/result-bounds.js +4 -2
  757. package/dist/tools/workspace/run-exec.d.ts +2 -2
  758. package/dist/tools/workspace/run-exec.js +3 -3
  759. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  760. package/dist/tools/workspace/scan-inputs.js +17 -5
  761. package/dist/tools/workspace/show-file.d.ts +1 -1
  762. package/dist/tools/workspace/show-file.js +2 -1
  763. package/dist/tools/workspace/show-plan.d.ts +8 -5
  764. package/dist/tools/workspace/show-plan.js +9 -8
  765. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  766. package/dist/tools/workspace/workspace-search.js +27 -14
  767. package/dist/tools/workspace/write-file.d.ts +9 -7
  768. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  769. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  770. package/dist/workflows/execute-analysis.d.ts +100 -76
  771. package/dist/workflows/execute-analysis.js +380 -247
  772. package/dist/workflows/pause.d.ts +71 -0
  773. package/dist/workflows/pause.js +173 -0
  774. package/dist/workflows/sandbox-step.d.ts +50 -61
  775. package/dist/workflows/sandbox-step.js +99 -106
  776. package/dist/workflows/test/sql-writes.d.ts +21 -0
  777. package/dist/workflows/test/sql-writes.js +36 -0
  778. package/dist/workspace/filesystem.d.ts +6 -6
  779. package/dist/workspace/filesystem.js +10 -8
  780. package/dist/workspace/paths.d.ts +1 -1
  781. package/dist/workspace/paths.js +15 -4
  782. package/dist/workspace/search-config.d.ts +2 -2
  783. package/dist/workspace/search-config.js +1 -1
  784. package/package.json +25 -22
  785. package/dist/loop/continue-agent.d.ts +0 -40
  786. package/dist/loop/continue-agent.js +0 -38
  787. package/dist/loop/genai-spans.d.ts +0 -47
  788. package/dist/loop/genai-spans.js +0 -134
  789. package/dist/loop/run-agent.d.ts +0 -236
  790. package/dist/loop/run-agent.js +0 -1110
  791. package/dist/loop/run-step.d.ts +0 -29
  792. package/dist/loop/run-step.js +0 -34
  793. package/dist/loop/run-to-terminal.d.ts +0 -66
  794. package/dist/loop/run-to-terminal.js +0 -90
  795. package/dist/loop/tool-mask.d.ts +0 -23
  796. package/dist/loop/tool-mask.js +0 -46
  797. package/dist/providers/streaming-chat.d.ts +0 -32
  798. package/dist/providers/streaming-chat.js +0 -91
  799. package/dist/tasks/derive-table-exec.d.ts +0 -54
  800. package/dist/tasks/derive-table-exec.js +0 -86
  801. package/dist/workflows/suspension.d.ts +0 -32
  802. package/dist/workflows/suspension.js +0 -38
@@ -49,12 +49,16 @@
49
49
  * deadline. A realization that hangs while it starts a browser would otherwise hold the whole agent turn,
50
50
  * and no outcome would ever arrive.
51
51
  */
52
+ import { errorMessageOf } from "../../lib/thrown.js";
53
+ import { textOf } from "../../lib/unknown-text.js";
52
54
  import { err, ok } from "neverthrow";
53
55
  import { access } from "node:fs/promises";
54
56
  import { join } from "node:path";
55
57
  import { pathToFileURL } from "node:url";
58
+ import { setTimeout as sleep } from "node:timers/promises";
56
59
  import { z } from "zod";
57
60
  import { hasBrowserUrl } from "../../lib/chrome.js";
61
+ import { errnoOf } from "../../lib/fs-result.js";
58
62
  import { createNoopLogger } from "../../lib/console-logger.js";
59
63
  import { createStaticEyes } from "../../lib/eyes.js";
60
64
  import { defaultErrorFields } from "../../lib/logger.js";
@@ -114,7 +118,7 @@ const ACQUIRE_DEADLINE_MS = 60_000;
114
118
  * provisions.
115
119
  */
116
120
  const RELEASE_DEADLINE_MS = 10_000;
117
- /** The win of the timer arm. A symbol cannot collide with a value that the operation gives. */
121
+ /** The win of the expiry arm. A symbol cannot collide with a value that the operation gives. */
118
122
  const EXPIRED = Symbol("expired");
119
123
  /**
120
124
  * Run one operation against a deadline, and give the value, the cause, or the expiry.
@@ -122,19 +126,17 @@ const EXPIRED = Symbol("expired");
122
126
  * The eyes seam takes no abort signal, thus a race is the whole bound. The loser of the race stays in
123
127
  * flight, and the caller of an expired operation owns whatever arrives late.
124
128
  *
125
- * Each path clears the timer. `sleep` of `async-utils.ts` holds a timer that nothing can clear. Thus an
126
- * operation that wins its race would still keep the process alive for the rest of the budget.
129
+ * The abort after the race clears the wait of a settled operation, so no armed timer outlives the budget.
127
130
  */
128
131
  async function withDeadline(work, ms) {
129
- let timer;
130
132
  // The settled arm never rejects. Thus a fault that arrives after the expiry stays contained here, and it
131
133
  // never reaches the process as an unhandled rejection.
132
134
  const settled = work.then((value) => ok(value), (cause) => err({ kind: "threw", cause }));
133
- const expiry = new Promise((resolve) => {
134
- timer = setTimeout(() => resolve(EXPIRED), ms);
135
- });
135
+ const gate = new AbortController();
136
+ // The rejection arm answers the abort of a settled race, and its value is never read.
137
+ const expiry = sleep(ms, undefined, { signal: gate.signal }).then(() => EXPIRED, () => EXPIRED);
136
138
  const winner = await Promise.race([settled, expiry]);
137
- clearTimeout(timer);
139
+ gate.abort();
138
140
  return winner === EXPIRED ? err({ kind: "expired" }) : winner;
139
141
  }
140
142
  /** The cause of one such fault. An expiry names its budget, thus the detail of the outcome names it too. */
@@ -153,6 +155,7 @@ function startSeamCall(call) {
153
155
  return call();
154
156
  }
155
157
  catch (cause) {
158
+ // oxlint-disable-next-line typescript/prefer-promise-reject-errors -- the rejection reason is the thrown value itself; the awaiter reads its identity, and a wrapper would erase it.
156
159
  return Promise.reject(cause);
157
160
  }
158
161
  }
@@ -251,7 +254,6 @@ export function createExaminePageTool(deps) {
251
254
  "The outcomes no-page and missed-stamp mean that no preview rendered the current page: run preview_report, then look again. " +
252
255
  "The outcome no-browser means that this host gives no browser, and a repeat gives the same outcome.",
253
256
  inputSchema: examinePageInput,
254
- executionMode: "inline",
255
257
  describeCall: (input) => {
256
258
  const blockId = input.blockId ?? undefined;
257
259
  return blockId === undefined ? "look at the page" : `look at ${blockId}`;
@@ -288,7 +290,7 @@ export function createExaminePageTool(deps) {
288
290
  await access(pagePath);
289
291
  }
290
292
  catch (cause) {
291
- if (cause.code === "ENOENT") {
293
+ if (errnoOf(cause) === "ENOENT") {
292
294
  // No preview wrote the page yet. The agent runs the preview first.
293
295
  return ok({ outcome: "no-page" });
294
296
  }
@@ -330,7 +332,7 @@ export function createExaminePageTool(deps) {
330
332
  if (looked.isErr()) {
331
333
  const { stage, cause } = looked.error;
332
334
  logger.warn(LOOK_FAULT_MESSAGE[stage], { threadId, analysisId, ...defaultErrorFields(cause) });
333
- return ok({ outcome: "capture-failed", detail: cause instanceof Error ? cause.message : String(cause) });
335
+ return ok({ outcome: "capture-failed", detail: errorMessageOf(cause) ?? textOf(cause) });
334
336
  }
335
337
  const captured = looked.value;
336
338
  if (blockId !== undefined && captured.coverage.kind === "no-block") {
@@ -360,7 +362,7 @@ export function createExaminePageTool(deps) {
360
362
  return ok(withToolResultImages({
361
363
  outcome: "examined",
362
364
  coverage: captured.coverage,
363
- ...(tiles.length === 0 ? {} : { tiles }),
365
+ tiles: tiles.length === 0 ? undefined : tiles,
364
366
  ...digestPageFaults(captured.consoleErrors, captured.failedRequests),
365
367
  pagePath: relativePagePath,
366
368
  }, captured.screenshots.map((shot) => ({ base64: shot.base64, mediaType: SCREENSHOT_MEDIA_TYPE }))));
@@ -38,12 +38,12 @@ export type ListPinnedArtifactsInput = z.infer<typeof listPinnedArtifactsInput>;
38
38
  * only for a header that the read recovered, thus their absence says nothing about the content of the file.
39
39
  * The listing gives `columnCount`, and a call with a path gives `columns` as well.
40
40
  */
41
- export interface PinnedArtifact {
41
+ export type PinnedArtifact = {
42
42
  path: string;
43
43
  fileType?: string;
44
44
  columnCount?: number;
45
45
  columns?: string[];
46
- }
46
+ };
47
47
  /**
48
48
  * One pinned citation of the listing: the key, and the short citation of its pinned record.
49
49
  *
@@ -51,10 +51,10 @@ export interface PinnedArtifact {
51
51
  * the pin recorded no citation for carries none, because absence is a normal condition. The description of
52
52
  * the record stays out, because the listing is an orientation surface.
53
53
  */
54
- export interface PinnedCitation {
54
+ export type PinnedCitation = {
55
55
  key: string;
56
56
  citation?: string;
57
- }
57
+ };
58
58
  /**
59
59
  * The typed outcome of the listing tool. Each arm is ok-channel data, thus the tool never throws for one
60
60
  * of them.
@@ -87,11 +87,11 @@ export type ListPinnedArtifactsResult = {
87
87
  * `resolveWorkspaceRoot` maps the analysis of the call onto its workspace root, thus one singleton tool
88
88
  * serves every analysis and it resolves the root per call from the scope.
89
89
  */
90
- export interface ListPinnedArtifactsToolDeps {
90
+ export type ListPinnedArtifactsToolDeps = {
91
91
  readonly gateway: ReportSessionStateGateway;
92
92
  readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
93
93
  readonly logger?: Logger;
94
- }
94
+ };
95
95
  /**
96
96
  * The header columns of a file on disk, or `undefined` when the file gives none.
97
97
  *
@@ -27,9 +27,10 @@ import { extname } from "node:path";
27
27
  import { z } from "zod";
28
28
  import { resolveWorkspacePath } from "../../workspace/paths.js";
29
29
  import { createNoopLogger } from "../../lib/console-logger.js";
30
+ import { splitLines } from "../../lib/text.js";
30
31
  import { tryFs } from "../../lib/fs-result.js";
31
32
  import { defaultErrorFields } from "../../lib/logger.js";
32
- import { citationRecordOf, fileTypeHoldsNoCell } from "../../report-model/reference-resolver.js";
33
+ import { citationRecordOf, fileTypeHoldsNoCell, snapshotEntry } from "../../report-model/reference-resolver.js";
33
34
  import { defineTool } from "../define-tool.js";
34
35
  import { openReportThread } from "../report-authoring/authoring-tools.js";
35
36
  /** No path lists the pinned set. A path gives the header columns of that one pinned artifact. */
@@ -87,7 +88,7 @@ async function readHeaderLine(absolute) {
87
88
  if (head === undefined) {
88
89
  return undefined;
89
90
  }
90
- const line = head.text.split(/\r?\n/, 1)[0];
91
+ const [line = ""] = splitLines(head.text).slice(0, 1);
91
92
  if (line.length === 0) {
92
93
  return undefined;
93
94
  }
@@ -147,7 +148,6 @@ export function createListPinnedArtifactsTool(deps) {
147
148
  "Read the listing to orient before you bind a block. Read the columns of one artifact to choose the column that a locator names. " +
148
149
  "A reference names the path alone: the session stamps the hash from this evidence, thus the tool gives no hash.",
149
150
  inputSchema: listPinnedArtifactsInput,
150
- executionMode: "inline",
151
151
  describeCall: (input) => input.path ?? "the pinned set",
152
152
  // The size of the listing is what a watcher reads, and the cap makes that size differ from the
153
153
  // pinned set. Thus a truncated listing names the total beside the count, and a whole listing names
@@ -180,8 +180,8 @@ export function createListPinnedArtifactsTool(deps) {
180
180
  logger.warn("the workspace root did not resolve", { threadId, analysisId, ...defaultErrorFields(cause) });
181
181
  }
182
182
  const describe = async (path) => {
183
- const fileType = state.snapshot.artifacts[path].fileType;
184
- const artifact = { path, ...(typeof fileType === "string" ? { fileType } : {}) };
183
+ const fileType = snapshotEntry(state.snapshot, path)?.fileType ?? undefined;
184
+ const artifact = { path, fileType };
185
185
  if (root === undefined || fileTypeHoldsNoCell(fileType)) {
186
186
  return { artifact };
187
187
  }
@@ -4,25 +4,25 @@
4
4
  */
5
5
  import type { FailedRequest } from "../../lib/page-capture.js";
6
6
  /** One distinct console error of a look, and how many times the page logged it. */
7
- export interface ConsoleErrorEntry {
7
+ export type ConsoleErrorEntry = {
8
8
  text: string;
9
9
  count: number;
10
- }
10
+ };
11
11
  /** One distinct failed request of a look, and how many times the page made it. */
12
- export interface FailedRequestEntry {
12
+ export type FailedRequestEntry = {
13
13
  url: string;
14
14
  reason: string;
15
15
  count: number;
16
- }
16
+ };
17
17
  /** The digest of one look. `omittedFaults` counts the distinct entries that the cap left out, thus a cut is never silent. */
18
- export interface PageFaults {
18
+ export type PageFaults = {
19
19
  consoleErrors: ConsoleErrorEntry[];
20
20
  failedRequests: FailedRequestEntry[];
21
21
  omittedFaults?: {
22
22
  consoleErrors: number;
23
23
  failedRequests: number;
24
24
  };
25
- }
25
+ };
26
26
  /** Shorten one fault text: the inline data becomes placeholders, and the text stops at the cap. */
27
27
  export declare function shortenFaultText(text: string): string;
28
28
  /** Digest the raw faults of one capture into the short lists that the agent reads. */
@@ -8,8 +8,10 @@ const MAX_FAULT_TEXT = 300;
8
8
  /** The most distinct entries of one list. */
9
9
  const MAX_FAULT_ENTRIES = 20;
10
10
  /** A data URI. A fault text quotes a URI in quotes or parentheses, thus those characters end the data. */
11
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the data-URI grammar of an inlined fault (media type, parameters, payload) with the quote and bracket characters that end it.
11
12
  const DATA_URI = /data:([a-z0-9.+-]+\/[a-z0-9.+-]+)?((?:;[^,;\s'"()<>]*)*),([^\s'"()<>]*)/gi;
12
13
  /** A base64 run of 100 characters or more. A content hash in hex is 64 characters, thus a hash stays. */
14
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the base64 charset run with its padding; the length floor keeps a 64-character hex hash outside the match.
13
15
  const BASE64_RUN = /[A-Za-z0-9+/]{100,}={0,2}/g;
14
16
  /** Shorten one fault text: the inline data becomes placeholders, and the text stops at the cap. */
15
17
  export function shortenFaultText(text) {
@@ -43,6 +45,6 @@ export function digestPageFaults(consoleErrors, failedRequests) {
43
45
  return {
44
46
  consoleErrors: errors.slice(0, MAX_FAULT_ENTRIES),
45
47
  failedRequests: requests.slice(0, MAX_FAULT_ENTRIES),
46
- ...(omittedErrors + omittedRequests > 0 ? { omittedFaults: { consoleErrors: omittedErrors, failedRequests: omittedRequests } } : {}),
48
+ omittedFaults: omittedErrors + omittedRequests > 0 ? { consoleErrors: omittedErrors, failedRequests: omittedRequests } : undefined,
47
49
  };
48
50
  }
@@ -39,7 +39,7 @@
39
39
  */
40
40
  import { z } from "zod";
41
41
  import { type ResolveWorkspaceRoot } from "../../workspace/paths.js";
42
- import type { AuthContext } from "../../auth/types.js";
42
+ import type { AuthContext, Identity } from "../../auth/types.js";
43
43
  import { type Logger } from "../../lib/logger.js";
44
44
  import type { ThreadStore } from "../../memory/thread-store.js";
45
45
  import { type ReportWarning } from "../../report-model/block-walk.js";
@@ -134,10 +134,11 @@ export type ResolvePageAsset = (specifier: string) => string;
134
134
  * lands, and attaches the URL beside the path. A refused mint rides the `rendered` arm as data, and it
135
135
  * never fails the render.
136
136
  */
137
- export interface PreviewReportToolDeps {
137
+ export type PreviewReportToolDeps = {
138
138
  readonly gateway: ReportSessionStateGateway;
139
139
  readonly makeResolver?: (scope: {
140
140
  analysisId: string;
141
+ identity: Identity;
141
142
  auth: AuthContext;
142
143
  }) => Promise<ReferenceResolver>;
143
144
  readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
@@ -152,7 +153,7 @@ export interface PreviewReportToolDeps {
152
153
  /** Names the report thread after the rendered document. Omitted, the thread keeps its title. */
153
154
  readonly threads?: Pick<ThreadStore, "setAutoTitle">;
154
155
  readonly logger?: Logger;
155
- }
156
+ };
156
157
  /**
157
158
  * Make the render-and-preview tool over the session-state gateway and the render seams.
158
159
  *
@@ -38,7 +38,6 @@
38
38
  * control-flow exception propagate.
39
39
  */
40
40
  import { err, ok } from "neverthrow";
41
- import { randomUUID } from "node:crypto";
42
41
  import { copyFile, mkdir, readdir, rm, writeFile } from "node:fs/promises";
43
42
  import { extname, join } from "node:path";
44
43
  import { relative as relativePosix } from "node:path/posix";
@@ -70,9 +69,26 @@ const previewReportInput = z.object({});
70
69
  * collide on the staged name.
71
70
  */
72
71
  function assetFileName(file) {
73
- const slug = file.hash.replace(/[^a-z0-9]+/gi, "-");
72
+ const slug = dashUnsafeRuns(file.hash);
74
73
  return slug + extname(file.path);
75
74
  }
75
+ /** Each run of characters outside the letters and digits becomes one dash. */
76
+ function dashUnsafeRuns(text) {
77
+ let out = "";
78
+ let inRun = false;
79
+ for (const char of text) {
80
+ const isNameChar = (char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9");
81
+ if (isNameChar) {
82
+ out += char;
83
+ inRun = false;
84
+ }
85
+ else if (!inRun) {
86
+ out += "-";
87
+ inRun = true;
88
+ }
89
+ }
90
+ return out;
91
+ }
76
92
  /** The relative source of a staged figure. The page directory is self-contained, thus the source is `assets/<name>`. */
77
93
  function figureSourcePolicy(file) {
78
94
  return `assets/${assetFileName(file)}`;
@@ -360,7 +376,6 @@ export function createPreviewReportTool(deps) {
360
376
  "The render marks the page that examine_page looks at next. " +
361
377
  "Use it to see the report, and to confirm that each reference resolves.",
362
378
  inputSchema: previewReportInput,
363
- executionMode: "inline",
364
379
  describeCall: "none",
365
380
  // The page path is the one fact of a preview that a watcher wants, and it exists only in the
366
381
  // result. Each other arm is a degraded condition whose kind already names it, thus the kind
@@ -387,7 +402,7 @@ export function createPreviewReportTool(deps) {
387
402
  // control-flow exception propagates and the unresolvable root does not.
388
403
  let resolver;
389
404
  try {
390
- resolver = await deps.makeResolver({ analysisId, auth: ctx.session.auth });
405
+ resolver = await deps.makeResolver({ analysisId, identity: ctx.session.identity, auth: ctx.session.auth });
391
406
  }
392
407
  catch (cause) {
393
408
  logger.warn("the workspace root did not resolve", { threadId, analysisId, ...defaultErrorFields(cause) });
@@ -464,16 +479,20 @@ export function createPreviewReportTool(deps) {
464
479
  }
465
480
  }
466
481
  // The part rides the rendered arm only. Each degraded arm shows no
467
- // fresh page, thus it emits nothing.
482
+ // fresh page, thus it emits nothing. The part id is the id of the call,
483
+ // thus a rerun of the call gives the same part again.
468
484
  await ctx.emit({
469
485
  type: "data-report-rendered",
470
- data: { id: randomUUID(), renderedAt: new Date().toISOString(), title: document.title },
486
+ data: { id: ctx.invocationId, renderedAt: new Date().toISOString(), title: document.title },
471
487
  });
472
488
  // The event rides the rendered arm alone, the same as the part above. The hash is the hash of
473
489
  // the draft that the page shows, thus a consumer ties the page to the document that made it.
474
490
  observe({ type: "preview", analysisId, threadId, pagePath: written.value, documentHash: renderedHash });
475
491
  const access = await mintAccess(deps.makeSessionPages, analysisId, threadId, ctx.session.auth, logger);
476
- return ok({ outcome: "rendered", pagePath: written.value, ...(access !== undefined ? { access } : {}), warnings: finished.warnings });
492
+ const renderedOk = { outcome: "rendered", pagePath: written.value, warnings: finished.warnings };
493
+ if (access !== undefined)
494
+ return ok({ ...renderedOk, access });
495
+ return ok(renderedOk);
477
496
  },
478
497
  });
479
498
  }
@@ -21,7 +21,9 @@
21
21
  * the thread row. A record on a thread that holds a version replaces that version whole, under the same
22
22
  * version id. Thus the loop is unbounded: the agent amends, looks again, and records again, and the stored
23
23
  * version equals the page that the last look accepted. A refused record leaves the stored version as it was.
24
- * The outcome of a pass carries the version id, and it names a replacement.
24
+ * The outcome of a pass carries the version id, and it names a replacement. Inside a durable step, the id
25
+ * of a new version is the UUIDv5 of the key of the step. Thus a rerun of the step gives the same version, and
26
+ * it does not read as a replacement.
25
27
  *
26
28
  * The prune runs after the version lands. It removes the output file of each derivation that the recorded
27
29
  * document does not reference, under the `derived/` directory of the session alone. The records stay
@@ -29,7 +31,7 @@
29
31
  * changes no outcome.
30
32
  */
31
33
  import { z } from "zod";
32
- import type { AuthContext } from "../../auth/types.js";
34
+ import type { AuthContext, Identity } from "../../auth/types.js";
33
35
  import type { Logger } from "../../lib/logger.js";
34
36
  import type { ThreadStore } from "../../memory/thread-store.js";
35
37
  import { type ReportWarning } from "../../report-model/block-walk.js";
@@ -97,19 +99,22 @@ export type RecordVersionResult = {
97
99
  * derived directory of the session under that root, thus the seam is mandatory: a composition that bound
98
100
  * none would record a version and leave every unused derivation on disk.
99
101
  */
100
- export interface RecordVersionToolDeps {
102
+ export type RecordVersionToolDeps = {
101
103
  readonly gateway: ReportSessionStateGateway;
102
104
  readonly store: ReportVersionStore;
103
105
  readonly threads: Pick<ThreadStore, "getThread">;
104
106
  readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
105
107
  readonly makeResolver?: (scope: {
106
108
  analysisId: string;
109
+ identity: Identity;
107
110
  auth: AuthContext;
108
111
  }) => Promise<ReferenceResolver>;
109
112
  /** The provenance seam; an unbound session emit emits nothing and the record runs the same. */
110
113
  readonly provenance?: ProvenanceSeam;
111
114
  readonly logger?: Logger;
112
- }
115
+ /** The key of the durable step that runs the call, `undefined` outside one. Defaults to {@link durableStepKey}. */
116
+ readonly stepKey?: () => string | undefined;
117
+ };
113
118
  /**
114
119
  * Make the record tool over the session-state gateway, the version store, the thread store, and the
115
120
  * resolver.
@@ -21,7 +21,9 @@
21
21
  * the thread row. A record on a thread that holds a version replaces that version whole, under the same
22
22
  * version id. Thus the loop is unbounded: the agent amends, looks again, and records again, and the stored
23
23
  * version equals the page that the last look accepted. A refused record leaves the stored version as it was.
24
- * The outcome of a pass carries the version id, and it names a replacement.
24
+ * The outcome of a pass carries the version id, and it names a replacement. Inside a durable step, the id
25
+ * of a new version is the UUIDv5 of the key of the step. Thus a rerun of the step gives the same version, and
26
+ * it does not read as a replacement.
25
27
  *
26
28
  * The prune runs after the version lands. It removes the output file of each derivation that the recorded
27
29
  * document does not reference, under the `derived/` directory of the session alone. The records stay
@@ -41,6 +43,7 @@ import { computeDraftHash } from "../../report-model/draft-hash.js";
41
43
  import { validateReport } from "../../report-model/validate.js";
42
44
  import { reportSessionDerivedDir, resolveWorkspacePath } from "../../workspace/paths.js";
43
45
  import { defineTool } from "../define-tool.js";
46
+ import { durableStepKey, stepUuid } from "../workspace/edit-file.js";
44
47
  import { openReportThread } from "../report-authoring/authoring-tools.js";
45
48
  import { bindSessionEmit } from "../../provenance/seam.js";
46
49
  /** The empty input. The tool records the current draft of the thread, thus it needs no field. */
@@ -124,6 +127,7 @@ async function pruneUnusedDerivations(args) {
124
127
  export function createRecordVersionTool(deps) {
125
128
  const logger = (deps.logger ?? createNoopLogger()).named("record-report-version");
126
129
  const observe = bindSessionEmit(deps.provenance, logger);
130
+ const stepKey = deps.stepKey ?? durableStepKey;
127
131
  return defineTool({
128
132
  id: "record_report_version",
129
133
  description: "Record the current draft as one report version. The tool runs the whole gate first: it finishes the draft, " +
@@ -134,7 +138,6 @@ export function createRecordVersionTool(deps) {
134
138
  "A thread holds one version, thus a later record replaces it whole. Amend the draft, look at the page again, and record again. " +
135
139
  "After the version lands, the tool removes the file of each derived table that no block of the recorded report binds.",
136
140
  inputSchema: recordVersionInput,
137
- executionMode: "inline",
138
141
  describeCall: "none",
139
142
  // The version id is the one durable product of the first record, thus the created arm names it. A
140
143
  // later record writes over that same id, thus the line names the update and never reads as a
@@ -174,7 +177,7 @@ export function createRecordVersionTool(deps) {
174
177
  // control-flow exception propagates and the unresolvable root does not.
175
178
  let resolver;
176
179
  try {
177
- resolver = await deps.makeResolver({ analysisId, auth: ctx.session.auth });
180
+ resolver = await deps.makeResolver({ analysisId, identity: ctx.session.identity, auth: ctx.session.auth });
178
181
  }
179
182
  catch (cause) {
180
183
  logger.warn("the workspace root did not resolve", { threadId, analysisId, ...logger.errorFields(cause) });
@@ -182,12 +185,14 @@ export function createRecordVersionTool(deps) {
182
185
  }
183
186
  const validation = await validateReport(finished.document, snapshot, resolver);
184
187
  if (!validation.valid) {
185
- return ok({
186
- outcome: "invalid",
187
- ...(validation.schemaIssues ? { schemaIssues: validation.schemaIssues } : {}),
188
- ...(validation.duplicateIds ? { duplicateIds: validation.duplicateIds } : {}),
189
- ...(validation.resolutionFailures ? { resolutionFailures: validation.resolutionFailures } : {}),
190
- });
188
+ const invalid = { outcome: "invalid" };
189
+ if (validation.schemaIssues)
190
+ invalid.schemaIssues = validation.schemaIssues;
191
+ if (validation.duplicateIds)
192
+ invalid.duplicateIds = validation.duplicateIds;
193
+ if (validation.resolutionFailures)
194
+ invalid.resolutionFailures = validation.resolutionFailures;
195
+ return ok(invalid);
191
196
  }
192
197
  const thread = await deps.threads.getThread(threadId);
193
198
  if (thread.isErr()) {
@@ -205,6 +210,8 @@ export function createRecordVersionTool(deps) {
205
210
  threadId,
206
211
  parentThreadId: thread.value.parentThreadId,
207
212
  parentSeq: thread.value.parentSeq,
213
+ // A rerun of the step gives the same id, thus the version that its first run made reads as created.
214
+ versionId: stepUuid(stepKey()),
208
215
  });
209
216
  if (recorded.isOk()) {
210
217
  // The version stands from here, thus the event states a version that a reader can open.
@@ -17,18 +17,18 @@
17
17
  import { type ResultAsync } from "neverthrow";
18
18
  import type { AuthContext } from "../../auth/types.js";
19
19
  /** The grant of one session page: the content-server base, the token, and its expiry. */
20
- export interface SessionPageGrant {
20
+ export type SessionPageGrant = {
21
21
  readonly baseUrl: string;
22
22
  readonly token: string;
23
23
  readonly expiresAt: string;
24
- }
24
+ };
25
25
  /** What a failed mint is allowed to carry. */
26
- export interface SessionPageMintFailure {
26
+ export type SessionPageMintFailure = {
27
27
  readonly status?: number;
28
28
  readonly error: {
29
29
  readonly message?: string;
30
30
  };
31
- }
31
+ };
32
32
  /**
33
33
  * Renders a failed mint as the line an agent reads back from the preview tool.
34
34
  *
@@ -38,7 +38,7 @@ export interface SessionPageMintFailure {
38
38
  * It lives beside the type because its whole job is to honour that type's optionality.
39
39
  */
40
40
  export declare function describeSessionPageMintFailure(failure: SessionPageMintFailure): string;
41
- export interface SessionPagePublisher {
41
+ export type SessionPagePublisher = {
42
42
  /**
43
43
  * Mint the access grant of one session page. The publisher binds the analysis, thus the mint takes
44
44
  * the thread id alone. `baseUrl` is the base URL of the content server, with no res path — the
@@ -46,7 +46,7 @@ export interface SessionPagePublisher {
46
46
  * contract and never in a realization.
47
47
  */
48
48
  mintSessionPageAccess(threadId: string): ResultAsync<SessionPageGrant, SessionPageMintFailure>;
49
- }
49
+ };
50
50
  /**
51
51
  * The per-call construction of the publisher. The factory binds one analysis and the auth of the tool
52
52
  * call, thus a realization mints under the credential of the caller and holds no ambient state.
@@ -2,18 +2,25 @@
2
2
  * generateAnalogyReport — cross-domain analogy report as a sub-agent tool.
3
3
  *
4
4
  * An inline harness `AgentDefinition` (mirroring `createLiteratureReviewerTool`)
5
- * driven by `runToTerminal`. The result reaches the wrapper through one of two
6
- * terminal tools because the output envelope is a union and `defineTool` takes
7
- * only a top-level object. A run with no outcome gets one salvage continuation,
8
- * then an `extraction-failed` envelope, so the frontend never renders raw prose.
5
+ * driven by `runWithSalvage`. The result reaches the wrapper through one of two
6
+ * submit tools because the output envelope is a union and `defineTool` takes
7
+ * only a top-level object. Neither tool ends the run: the wrapper selects the
8
+ * last accepted report from the recorded calls, else the first blocker. A run
9
+ * with no outcome gets one salvage request, then an `extraction-failed`
10
+ * envelope, so the frontend never renders raw prose.
9
11
  */
10
12
  import { z } from "zod";
13
+ import { type AnalogyReport } from "@inflexa-ai/harness/contracts/analogy-report.js";
11
14
  import type { Logger } from "../../lib/logger.js";
15
+ import { type LoopStep } from "../../loop/run-loop.js";
16
+ import type { SubAgentRegistrar } from "../../loop/sub-agent.js";
12
17
  import type { ToolOutputStore } from "../../loop/tool-output.js";
13
18
  import type { ChatProvider } from "../../providers/types.js";
14
19
  import type { UsageRecorder } from "../../billing/usage-recorder.js";
15
20
  import { type Tool } from "../define-tool.js";
16
21
  import { type BioToolKeys } from "../bio/keys.js";
22
+ /** The last report of a run that its call accepted. The input schema of the tool checked it. */
23
+ export declare function acceptedReportOf(steps: readonly LoopStep[]): AnalogyReport | undefined;
17
24
  export declare const generateAnalogyReportInputSchema: z.ZodObject<{
18
25
  problem: z.ZodString;
19
26
  context: z.ZodOptional<z.ZodString>;
@@ -29,7 +36,7 @@ export type GenerateAnalogyReportInput = z.infer<typeof generateAnalogyReportInp
29
36
  * Exported for unit testing.
30
37
  */
31
38
  export declare function buildResearchPrompt(input: GenerateAnalogyReportInput): string;
32
- export interface GenerateAnalogyReportDeps {
39
+ export type GenerateAnalogyReportDeps = {
33
40
  /** The LLM seam the child loop runs on. */
34
41
  readonly provider: ChatProvider;
35
42
  /** Model id — provenance / metric label; the provider owns the wire model. */
@@ -42,6 +49,6 @@ export interface GenerateAnalogyReportDeps {
42
49
  readonly toolOutputStore?: ToolOutputStore;
43
50
  /** Logging seam; omitted falls back to no-op. Logs the salvage warning and an accounting error of the reasoner loop. */
44
51
  readonly logger?: Logger;
45
- }
52
+ };
46
53
  /** Build the `generate_analogy_report` delegation tool bound to its provider. */
47
- export declare function createGenerateAnalogyReportTool(deps: GenerateAnalogyReportDeps): Tool;
54
+ export declare function createGenerateAnalogyReportTool(deps: GenerateAnalogyReportDeps, registerSubAgent: SubAgentRegistrar): Tool;