@inflexa-ai/harness 0.45.1 → 0.46.2

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 (790) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +9 -3
  3. package/dist/agents/conversation-agent.js +34 -33
  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 +12 -14
  9. package/dist/agents/sandbox/shared.js +18 -12
  10. package/dist/agents/sandbox/types.d.ts +4 -4
  11. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  12. package/dist/agents/sandbox/validate-skills.js +3 -1
  13. package/dist/agents/sandbox-catalog.d.ts +2 -2
  14. package/dist/agents/sandbox-catalog.js +3 -3
  15. package/dist/agents/system-prompt.d.ts +2 -2
  16. package/dist/app/chat-turn-workflow.d.ts +114 -0
  17. package/dist/app/chat-turn-workflow.js +306 -0
  18. package/dist/app/chat-turn.d.ts +85 -57
  19. package/dist/app/chat-turn.js +123 -100
  20. package/dist/app/data-profile-orientation.js +10 -8
  21. package/dist/app/data-profile-view.d.ts +4 -4
  22. package/dist/app/data-profile-view.js +9 -8
  23. package/dist/app/in-process-turn.d.ts +42 -0
  24. package/dist/app/in-process-turn.js +139 -0
  25. package/dist/app/message-assembly.d.ts +10 -4
  26. package/dist/app/message-assembly.js +13 -8
  27. package/dist/app/report-session-runtime.d.ts +4 -4
  28. package/dist/app/report-session-runtime.js +36 -21
  29. package/dist/app/spawn-report-session.d.ts +33 -28
  30. package/dist/app/spawn-report-session.js +25 -40
  31. package/dist/app/synthesize-run.d.ts +22 -16
  32. package/dist/app/synthesize-run.js +41 -35
  33. package/dist/app/work.d.ts +96 -0
  34. package/dist/app/work.js +147 -0
  35. package/dist/auth/local-auth-context.d.ts +1 -3
  36. package/dist/auth/local-auth-context.js +1 -3
  37. package/dist/auth/local-run-authorizer.d.ts +1 -1
  38. package/dist/auth/local-run-authorizer.js +5 -3
  39. package/dist/auth/types.d.ts +26 -26
  40. package/dist/billing/cached-resolver.d.ts +4 -4
  41. package/dist/billing/run-charge.d.ts +5 -8
  42. package/dist/billing/run-charge.js +2 -2
  43. package/dist/billing/usage-recorder.d.ts +9 -9
  44. package/dist/citations/aggregate.js +1 -1
  45. package/dist/citations/clients/arxiv.d.ts +2 -2
  46. package/dist/citations/clients/arxiv.js +12 -4
  47. package/dist/citations/clients/common.js +4 -2
  48. package/dist/citations/clients/crossref.d.ts +2 -2
  49. package/dist/citations/clients/crossref.js +37 -37
  50. package/dist/citations/clients/doi-registry.js +15 -16
  51. package/dist/citations/clients/pubmed.d.ts +2 -2
  52. package/dist/citations/clients/pubmed.js +20 -13
  53. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  54. package/dist/citations/clients/semantic-scholar.js +9 -9
  55. package/dist/citations/compare.js +2 -2
  56. package/dist/citations/match.d.ts +2 -2
  57. package/dist/citations/match.js +12 -7
  58. package/dist/citations/normalize.js +35 -26
  59. package/dist/citations/plan.js +6 -2
  60. package/dist/citations/resolve.d.ts +6 -6
  61. package/dist/citations/resolve.js +34 -25
  62. package/dist/citations/types.d.ts +77 -77
  63. package/dist/config/environment-stores.d.ts +6 -6
  64. package/dist/config/resource-limits.js +1 -3
  65. package/dist/contracts/analogy-report.d.ts +7 -7
  66. package/dist/contracts/analogy-report.js +2 -2
  67. package/dist/contracts/chat-events.d.ts +38 -24
  68. package/dist/contracts/chat-frame.d.ts +15 -5
  69. package/dist/contracts/chat-frame.js +64 -41
  70. package/dist/contracts/chat-parts.d.ts +130 -67
  71. package/dist/contracts/chat-parts.js +1 -0
  72. package/dist/contracts/content-url.js +16 -2
  73. package/dist/contracts/data-profile.d.ts +38 -38
  74. package/dist/contracts/index.d.ts +2 -2
  75. package/dist/contracts/index.js +1 -1
  76. package/dist/contracts/message.d.ts +6 -6
  77. package/dist/contracts/organ-system.d.ts +11 -11
  78. package/dist/contracts/part-registry.d.ts +5 -4
  79. package/dist/contracts/part-registry.js +5 -0
  80. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  81. package/dist/contracts/profile-vocabulary.js +10 -3
  82. package/dist/contracts/report-blocks.d.ts +329 -329
  83. package/dist/contracts/report-reference.d.ts +105 -81
  84. package/dist/contracts/report-reference.js +30 -13
  85. package/dist/contracts/schemas/chat-events.d.ts +30 -16
  86. package/dist/contracts/schemas/chat-events.js +15 -6
  87. package/dist/contracts/schemas/chat-parts.d.ts +175 -102
  88. package/dist/contracts/schemas/chat-parts.js +33 -7
  89. package/dist/contracts/severity.d.ts +1 -1
  90. package/dist/contracts/structure-source.d.ts +3 -3
  91. package/dist/contracts/structure-source.js +6 -2
  92. package/dist/contracts/subagent-activity.d.ts +2 -2
  93. package/dist/contracts/subagent-activity.js +5 -3
  94. package/dist/contracts/usage.d.ts +2 -2
  95. package/dist/data/safety-panel-schema.d.ts +25 -25
  96. package/dist/data/safety-panel-schema.js +13 -4
  97. package/dist/execution/artifact-metadata.d.ts +23 -15
  98. package/dist/execution/artifact-metadata.js +33 -10
  99. package/dist/execution/artifact-record.d.ts +2 -2
  100. package/dist/execution/artifact-registration.d.ts +5 -5
  101. package/dist/execution/artifact-registry.d.ts +8 -8
  102. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  103. package/dist/execution/dbos-run-launcher.js +58 -4
  104. package/dist/execution/dbos-workflow-purger.d.ts +5 -6
  105. package/dist/execution/dbos-workflow-purger.js +8 -7
  106. package/dist/execution/input-signature.d.ts +2 -2
  107. package/dist/execution/post-step-pipeline.d.ts +9 -9
  108. package/dist/execution/post-step-pipeline.js +1 -1
  109. package/dist/execution/post-step.js +2 -2
  110. package/dist/execution/reconcile-manifest.d.ts +4 -4
  111. package/dist/execution/reconcile-manifest.js +3 -2
  112. package/dist/execution/run-authorizer.d.ts +46 -37
  113. package/dist/execution/run-authorizer.js +8 -8
  114. package/dist/execution/run-canceler.d.ts +7 -7
  115. package/dist/execution/run-canceler.js +14 -7
  116. package/dist/execution/run-end-record.d.ts +2 -3
  117. package/dist/execution/run-event-parts.d.ts +0 -8
  118. package/dist/execution/run-event-parts.js +29 -24
  119. package/dist/execution/run-event-stream.d.ts +8 -8
  120. package/dist/execution/run-event-stream.js +3 -4
  121. package/dist/execution/run-launcher.d.ts +4 -4
  122. package/dist/execution/run-synthesis.d.ts +49 -48
  123. package/dist/execution/run-synthesis.js +96 -255
  124. package/dist/execution/staged-input.d.ts +2 -2
  125. package/dist/execution/step-summary.d.ts +6 -6
  126. package/dist/execution/step-summary.js +4 -8
  127. package/dist/execution/topo-sort.js +4 -3
  128. package/dist/execution/workflow-purger.d.ts +2 -2
  129. package/dist/index.d.ts +17 -20
  130. package/dist/index.js +25 -36
  131. package/dist/input-sanitization.js +9 -2
  132. package/dist/input-scan/clustering.d.ts +6 -6
  133. package/dist/input-scan/clustering.js +11 -5
  134. package/dist/input-scan/companions.js +3 -2
  135. package/dist/input-scan/detect-sets.d.ts +2 -2
  136. package/dist/input-scan/detect-sets.js +25 -21
  137. package/dist/input-scan/enrich.d.ts +6 -6
  138. package/dist/input-scan/enrich.js +29 -12
  139. package/dist/input-scan/formats.d.ts +2 -2
  140. package/dist/input-scan/formats.js +8 -2
  141. package/dist/input-scan/markers.d.ts +2 -2
  142. package/dist/input-scan/markers.js +14 -5
  143. package/dist/input-scan/menu.d.ts +10 -10
  144. package/dist/input-scan/menu.js +0 -0
  145. package/dist/input-scan/quarantine.d.ts +2 -2
  146. package/dist/input-scan/quarantine.js +23 -18
  147. package/dist/input-scan/readout-budget.d.ts +2 -2
  148. package/dist/input-scan/readout-budget.js +1 -1
  149. package/dist/input-scan/readout.d.ts +2 -2
  150. package/dist/input-scan/readout.js +47 -34
  151. package/dist/input-scan/scan.d.ts +2 -2
  152. package/dist/input-scan/scan.js +7 -5
  153. package/dist/input-scan/set-types.d.ts +28 -28
  154. package/dist/input-scan/shapes.d.ts +4 -4
  155. package/dist/input-scan/shapes.js +0 -0
  156. package/dist/input-scan/templates.d.ts +10 -10
  157. package/dist/input-scan/templates.js +30 -22
  158. package/dist/input-scan/tokens.d.ts +6 -4
  159. package/dist/input-scan/tokens.js +100 -38
  160. package/dist/input-scan/types.d.ts +22 -22
  161. package/dist/lib/async-utils.d.ts +3 -7
  162. package/dist/lib/async-utils.js +5 -9
  163. package/dist/lib/cache.js +1 -1
  164. package/dist/lib/chrome.d.ts +46 -6
  165. package/dist/lib/console-logger.js +2 -2
  166. package/dist/lib/db-result.d.ts +22 -6
  167. package/dist/lib/db-result.js +9 -13
  168. package/dist/lib/eyes.d.ts +4 -4
  169. package/dist/lib/eyes.js +1 -1
  170. package/dist/lib/fs-helpers.js +18 -6
  171. package/dist/lib/fs-result.d.ts +1 -0
  172. package/dist/lib/fs-result.js +5 -6
  173. package/dist/lib/hooks.d.ts +32 -7
  174. package/dist/lib/hooks.js +22 -3
  175. package/dist/lib/host-concurrency.js +3 -2
  176. package/dist/lib/logger.d.ts +2 -2
  177. package/dist/lib/logger.js +2 -1
  178. package/dist/lib/metrics.d.ts +1 -1
  179. package/dist/lib/null-proto.d.ts +6 -0
  180. package/dist/lib/null-proto.js +17 -0
  181. package/dist/lib/otel-spans.d.ts +1 -1
  182. package/dist/lib/otel-spans.js +9 -5
  183. package/dist/lib/otel.d.ts +4 -2
  184. package/dist/lib/otel.js +10 -2
  185. package/dist/lib/page-capture.d.ts +8 -8
  186. package/dist/lib/page-capture.js +9 -4
  187. package/dist/lib/parse-json.d.ts +5 -0
  188. package/dist/lib/parse-json.js +12 -0
  189. package/dist/lib/present.d.ts +12 -0
  190. package/dist/lib/present.js +39 -0
  191. package/dist/lib/rate-limit.d.ts +4 -4
  192. package/dist/lib/rate-limit.js +12 -13
  193. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  194. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  195. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  196. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  197. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  198. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  199. package/dist/lib/regulatory-corpus.d.ts +10 -10
  200. package/dist/lib/regulatory-corpus.js +3 -1
  201. package/dist/lib/result.d.ts +10 -11
  202. package/dist/lib/result.js +15 -13
  203. package/dist/lib/storage.d.ts +2 -2
  204. package/dist/lib/test/async-iterable.d.ts +9 -0
  205. package/dist/lib/test/async-iterable.js +28 -0
  206. package/dist/lib/test/request-url.d.ts +5 -0
  207. package/dist/lib/test/request-url.js +7 -0
  208. package/dist/lib/test/result-assert.d.ts +12 -0
  209. package/dist/lib/test/result-assert.js +17 -0
  210. package/dist/lib/test/text-shapes.d.ts +24 -0
  211. package/dist/lib/test/text-shapes.js +63 -0
  212. package/dist/lib/text.d.ts +22 -0
  213. package/dist/lib/text.js +68 -0
  214. package/dist/lib/thrown.d.ts +18 -0
  215. package/dist/lib/thrown.js +30 -0
  216. package/dist/lib/unknown-array.d.ts +6 -0
  217. package/dist/lib/unknown-array.js +8 -0
  218. package/dist/lib/unknown-containers.d.ts +14 -0
  219. package/dist/lib/unknown-containers.js +17 -0
  220. package/dist/lib/unknown-text.d.ts +8 -0
  221. package/dist/lib/unknown-text.js +28 -0
  222. package/dist/lib/zod-issue-shape.d.ts +1 -1
  223. package/dist/lib/zod-issue-shape.js +31 -31
  224. package/dist/lib/zod-issues.d.ts +3 -3
  225. package/dist/lib/zod-issues.js +30 -17
  226. package/dist/literature/sources/arxiv.d.ts +6 -6
  227. package/dist/literature/sources/arxiv.js +92 -35
  228. package/dist/literature/sources/http.d.ts +2 -2
  229. package/dist/literature/sources/http.js +16 -15
  230. package/dist/literature/sources/pubmed.d.ts +16 -16
  231. package/dist/literature/sources/pubmed.js +96 -61
  232. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  233. package/dist/literature/sources/semantic-scholar.js +22 -13
  234. package/dist/loop/accounting.d.ts +63 -0
  235. package/dist/loop/accounting.js +141 -0
  236. package/dist/loop/call-policy.d.ts +73 -0
  237. package/dist/loop/call-policy.js +109 -0
  238. package/dist/loop/chat-stream.d.ts +62 -0
  239. package/dist/loop/chat-stream.js +237 -0
  240. package/dist/loop/compaction.d.ts +9 -9
  241. package/dist/loop/compaction.js +1 -1
  242. package/dist/loop/metrics.d.ts +12 -15
  243. package/dist/loop/metrics.js +14 -26
  244. package/dist/loop/run-loop.d.ts +233 -0
  245. package/dist/loop/run-loop.js +770 -0
  246. package/dist/loop/sub-agent.d.ts +61 -0
  247. package/dist/loop/sub-agent.js +160 -0
  248. package/dist/loop/tool-adapter.d.ts +98 -0
  249. package/dist/loop/tool-adapter.js +364 -0
  250. package/dist/loop/tool-detail.d.ts +1 -1
  251. package/dist/loop/tool-detail.js +6 -5
  252. package/dist/loop/tool-outcome.d.ts +1 -1
  253. package/dist/loop/tool-output.d.ts +4 -4
  254. package/dist/loop/tool-output.js +2 -2
  255. package/dist/loop/turn-credentials.d.ts +39 -0
  256. package/dist/loop/turn-credentials.js +90 -0
  257. package/dist/loop/types.d.ts +29 -38
  258. package/dist/loop/types.js +2 -7
  259. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  260. package/dist/memory/ai-sdk-message-storage.js +13 -11
  261. package/dist/memory/card-builders.d.ts +14 -14
  262. package/dist/memory/card-builders.js +19 -15
  263. package/dist/memory/conversation-display-recorder.d.ts +22 -4
  264. package/dist/memory/conversation-display-recorder.js +43 -24
  265. package/dist/memory/conversation-display-replay.js +3 -2
  266. package/dist/memory/conversation-display-storage.d.ts +15 -7
  267. package/dist/memory/conversation-display-storage.js +141 -36
  268. package/dist/memory/conversation-view.d.ts +4 -4
  269. package/dist/memory/conversation-view.js +5 -4
  270. package/dist/memory/count-tokens.js +10 -8
  271. package/dist/memory/derive-thread-title.d.ts +0 -13
  272. package/dist/memory/derive-thread-title.js +2 -1
  273. package/dist/memory/message-backfill.d.ts +12 -5
  274. package/dist/memory/message-backfill.js +5 -3
  275. package/dist/memory/thread-history.d.ts +36 -21
  276. package/dist/memory/thread-history.js +78 -54
  277. package/dist/memory/thread-store.d.ts +26 -17
  278. package/dist/memory/thread-store.js +15 -9
  279. package/dist/memory/tool-call-integrity.d.ts +2 -2
  280. package/dist/memory/tool-call-integrity.js +4 -3
  281. package/dist/memory/working-memory.d.ts +16 -12
  282. package/dist/memory/working-memory.js +72 -61
  283. package/dist/prompts/briefing.d.ts +12 -12
  284. package/dist/prompts/briefing.js +1 -1
  285. package/dist/prompts/synthesis-agent.d.ts +1 -1
  286. package/dist/prompts/synthesis-agent.js +6 -14
  287. package/dist/provenance/collector.d.ts +6 -6
  288. package/dist/provenance/collector.js +15 -8
  289. package/dist/provenance/exec-frame.d.ts +2 -2
  290. package/dist/provenance/exec-frame.js +6 -1
  291. package/dist/provenance/seam.d.ts +1 -4
  292. package/dist/provenance/types.d.ts +6 -6
  293. package/dist/providers/ai-sdk.d.ts +113 -62
  294. package/dist/providers/ai-sdk.js +283 -518
  295. package/dist/providers/embedding.d.ts +2 -2
  296. package/dist/providers/embedding.js +1 -1
  297. package/dist/providers/errors.d.ts +22 -2
  298. package/dist/providers/errors.js +98 -50
  299. package/dist/providers/prompt-cache.d.ts +8 -8
  300. package/dist/providers/prompt-cache.js +13 -11
  301. package/dist/providers/reasoning.d.ts +2 -2
  302. package/dist/providers/reasoning.js +2 -2
  303. package/dist/providers/request-headers.js +12 -3
  304. package/dist/providers/types.d.ts +55 -94
  305. package/dist/reference-data/catalog.d.ts +2 -15
  306. package/dist/reference-data/catalog.js +25 -8
  307. package/dist/reference-data/receipt.d.ts +2 -2
  308. package/dist/report-model/assert-rules.js +1 -1
  309. package/dist/report-model/authoring-grammar.d.ts +211 -233
  310. package/dist/report-model/block-walk.d.ts +10 -10
  311. package/dist/report-model/block-walk.js +2 -0
  312. package/dist/report-model/draft-finish.d.ts +8 -8
  313. package/dist/report-model/draft-finish.js +1 -1
  314. package/dist/report-model/draft-hash.js +8 -7
  315. package/dist/report-model/draft-operations.d.ts +22 -10
  316. package/dist/report-model/draft-operations.js +48 -30
  317. package/dist/report-model/draft-read.d.ts +19 -7
  318. package/dist/report-model/draft-read.js +16 -6
  319. package/dist/report-model/draft.d.ts +844 -2
  320. package/dist/report-model/draft.js +3 -1
  321. package/dist/report-model/fixture-resolver.js +39 -16
  322. package/dist/report-model/pin-snapshot.d.ts +2 -2
  323. package/dist/report-model/pin-snapshot.js +15 -15
  324. package/dist/report-model/production-resolver.d.ts +18 -18
  325. package/dist/report-model/production-resolver.js +50 -42
  326. package/dist/report-model/reference-resolver.d.ts +26 -10
  327. package/dist/report-model/reference-resolver.js +68 -5
  328. package/dist/report-model/reference-stamp.js +30 -38
  329. package/dist/report-model/structural-validation.js +12 -4
  330. package/dist/report-model/validate.d.ts +7 -7
  331. package/dist/report-model/validate.js +6 -6
  332. package/dist/report-render/assets.d.ts +2 -2
  333. package/dist/report-render/assets.js +27 -3
  334. package/dist/report-render/chart-export.d.ts +10 -2
  335. package/dist/report-render/chart-export.js +37 -11
  336. package/dist/report-render/chart-presets.d.ts +8 -8
  337. package/dist/report-render/chart-presets.js +3 -3
  338. package/dist/report-render/chart-renderers.d.ts +23 -16
  339. package/dist/report-render/chart-renderers.js +74 -53
  340. package/dist/report-render/chart-toolbox.d.ts +2 -2
  341. package/dist/report-render/chart-toolbox.js +7 -6
  342. package/dist/report-render/chart.d.ts +15 -16
  343. package/dist/report-render/chart.js +369 -252
  344. package/dist/report-render/design.d.ts +36 -297
  345. package/dist/report-render/design.js +0 -12
  346. package/dist/report-render/figures/common.d.ts +12 -12
  347. package/dist/report-render/figures/common.js +42 -31
  348. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  349. package/dist/report-render/figures/dendrogram.js +10 -10
  350. package/dist/report-render/figures/dense.js +15 -8
  351. package/dist/report-render/figures/dotplot.js +46 -33
  352. package/dist/report-render/figures/embedding.js +52 -43
  353. package/dist/report-render/figures/equal-units.d.ts +10 -10
  354. package/dist/report-render/figures/equal-units.js +27 -27
  355. package/dist/report-render/figures/forest.js +9 -7
  356. package/dist/report-render/figures/gsea.js +21 -11
  357. package/dist/report-render/figures/heatmap.js +13 -9
  358. package/dist/report-render/figures/index.d.ts +10 -10
  359. package/dist/report-render/figures/index.js +4 -2
  360. package/dist/report-render/figures/km.js +10 -9
  361. package/dist/report-render/figures/label-room.d.ts +12 -12
  362. package/dist/report-render/figures/label-room.js +7 -2
  363. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  364. package/dist/report-render/figures/locuszoom.js +59 -31
  365. package/dist/report-render/figures/lollipop.js +3 -2
  366. package/dist/report-render/figures/ma.js +8 -4
  367. package/dist/report-render/figures/manhattan.d.ts +1 -2
  368. package/dist/report-render/figures/manhattan.js +52 -34
  369. package/dist/report-render/figures/oncoprint.js +4 -5
  370. package/dist/report-render/figures/pca.js +25 -11
  371. package/dist/report-render/figures/qq.js +20 -9
  372. package/dist/report-render/figures/roc.js +1 -1
  373. package/dist/report-render/figures/sankey.d.ts +2 -2
  374. package/dist/report-render/figures/sankey.js +11 -10
  375. package/dist/report-render/figures/upset.d.ts +6 -6
  376. package/dist/report-render/figures/upset.js +7 -4
  377. package/dist/report-render/figures/volcano.js +12 -10
  378. package/dist/report-render/hybrid-svg.d.ts +4 -4
  379. package/dist/report-render/hybrid-svg.js +7 -5
  380. package/dist/report-render/number-format.d.ts +4 -4
  381. package/dist/report-render/number-format.js +62 -27
  382. package/dist/report-render/page.js +2 -1
  383. package/dist/report-render/provenance-data.d.ts +2 -2
  384. package/dist/report-render/references.d.ts +4 -4
  385. package/dist/report-render/render.d.ts +2 -2
  386. package/dist/report-render/render.js +10 -11
  387. package/dist/report-render/script-json.js +1 -1
  388. package/dist/report-render/table-data.d.ts +6 -6
  389. package/dist/report-render/test/options.d.ts +49 -0
  390. package/dist/report-render/test/options.js +143 -0
  391. package/dist/report-render/test/page-function.d.ts +19 -0
  392. package/dist/report-render/test/page-function.js +33 -0
  393. package/dist/report-render/types.d.ts +10 -10
  394. package/dist/report-render/value-bridge.d.ts +4 -4
  395. package/dist/report-render/value-bridge.js +27 -14
  396. package/dist/report-render/views/chart-view.d.ts +2 -2
  397. package/dist/report-render/views/chart-view.js +2 -2
  398. package/dist/report-render/views/lineage.d.ts +6 -6
  399. package/dist/report-render/views/lineage.js +2 -0
  400. package/dist/report-render/views/page-view.d.ts +2 -2
  401. package/dist/report-render/views/page-view.js +1 -0
  402. package/dist/report-render/views/prose.js +25 -8
  403. package/dist/report-render/views/references-view.js +12 -1
  404. package/dist/report-render/views/values.js +1 -1
  405. package/dist/runtime/assemble.d.ts +53 -26
  406. package/dist/runtime/assemble.js +103 -56
  407. package/dist/runtime/boot.d.ts +8 -7
  408. package/dist/runtime/boot.js +1 -1
  409. package/dist/runtime/connection-budget.d.ts +6 -6
  410. package/dist/runtime/connection-budget.js +1 -1
  411. package/dist/runtime/dbos.d.ts +29 -19
  412. package/dist/runtime/dbos.js +35 -20
  413. package/dist/runtime/result-serialization.js +18 -5
  414. package/dist/runtime/shutdown.d.ts +2 -2
  415. package/dist/sandbox/client.d.ts +7 -3
  416. package/dist/sandbox/cpu-files.d.ts +2 -2
  417. package/dist/sandbox/cpu-files.js +21 -4
  418. package/dist/sandbox/create-sandbox.d.ts +7 -8
  419. package/dist/sandbox/create-sandbox.js +6 -12
  420. package/dist/sandbox/docker-client.d.ts +48 -3
  421. package/dist/sandbox/docker-client.js +10 -6
  422. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  423. package/dist/sandbox/exec-outcome.d.ts +2 -2
  424. package/dist/sandbox/exec-outcome.js +1 -1
  425. package/dist/sandbox/exec.d.ts +10 -6
  426. package/dist/sandbox/exec.js +27 -12
  427. package/dist/sandbox/execution-id.js +14 -6
  428. package/dist/sandbox/farm.d.ts +2 -2
  429. package/dist/sandbox/farm.js +22 -27
  430. package/dist/sandbox/identity.d.ts +7 -0
  431. package/dist/sandbox/identity.js +14 -3
  432. package/dist/sandbox/image-packages.js +15 -27
  433. package/dist/sandbox/k8s-client.d.ts +35 -8
  434. package/dist/sandbox/k8s-client.js +6 -5
  435. package/dist/sandbox/labels.js +1 -0
  436. package/dist/sandbox/liveness.js +3 -1
  437. package/dist/sandbox/mount-plan.d.ts +10 -10
  438. package/dist/sandbox/mount-plan.js +13 -14
  439. package/dist/sandbox/notification-sweep.d.ts +4 -4
  440. package/dist/sandbox/notification-sweep.js +4 -7
  441. package/dist/sandbox/package-identity.d.ts +6 -13
  442. package/dist/sandbox/package-identity.js +46 -28
  443. package/dist/sandbox/reaper.d.ts +10 -10
  444. package/dist/sandbox/reaper.js +4 -6
  445. package/dist/sandbox/sandbox-error.d.ts +2 -9
  446. package/dist/sandbox/sandbox-error.js +21 -8
  447. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  448. package/dist/sandbox/sandbox-step-translate.js +22 -8
  449. package/dist/sandbox/step-sandbox.d.ts +47 -0
  450. package/dist/sandbox/step-sandbox.js +53 -0
  451. package/dist/sandbox/types.d.ts +18 -19
  452. package/dist/sandbox/types.js +1 -1
  453. package/dist/schemas/artifact-manifest.d.ts +4 -4
  454. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  455. package/dist/schemas/file-metadata.js +2 -4
  456. package/dist/schemas/plan-schemas.d.ts +31 -31
  457. package/dist/schemas/run-synthesis.d.ts +95 -26
  458. package/dist/schemas/run-synthesis.js +3 -1
  459. package/dist/schemas/validate-plan.d.ts +4 -4
  460. package/dist/schemas/validate-plan.js +17 -5
  461. package/dist/schemas/workflow-state.d.ts +19 -19
  462. package/dist/schemas/workflow-state.js +2 -2
  463. package/dist/state/active-turns.d.ts +36 -0
  464. package/dist/state/active-turns.js +67 -0
  465. package/dist/state/analyses-metrics.d.ts +8 -8
  466. package/dist/state/analyses-metrics.js +4 -4
  467. package/dist/state/analyses.d.ts +0 -14
  468. package/dist/state/analyses.js +0 -32
  469. package/dist/state/artifacts.d.ts +32 -19
  470. package/dist/state/artifacts.js +28 -5
  471. package/dist/state/data-profile.d.ts +2 -2
  472. package/dist/state/db.d.ts +12 -2
  473. package/dist/state/db.js +5 -0
  474. package/dist/state/edit-intents.d.ts +4 -0
  475. package/dist/state/edit-intents.js +71 -0
  476. package/dist/state/index.d.ts +4 -4
  477. package/dist/state/index.js +2 -2
  478. package/dist/state/init.d.ts +2 -1
  479. package/dist/state/init.js +5 -2
  480. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  482. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  484. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  486. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  488. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  490. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  492. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  494. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  496. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  498. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  499. package/dist/state/migrations/index.js +18 -0
  500. package/dist/state/paused-work.d.ts +52 -0
  501. package/dist/state/paused-work.js +105 -0
  502. package/dist/state/plans.d.ts +27 -8
  503. package/dist/state/plans.js +14 -11
  504. package/dist/state/purge-analysis.d.ts +6 -6
  505. package/dist/state/purge-analysis.js +10 -2
  506. package/dist/state/report-session-state.d.ts +43 -18
  507. package/dist/state/report-session-state.js +43 -4
  508. package/dist/state/report-versions.d.ts +16 -11
  509. package/dist/state/report-versions.js +5 -3
  510. package/dist/state/runs.d.ts +30 -19
  511. package/dist/state/runs.js +43 -51
  512. package/dist/state/schema.d.ts +18 -21
  513. package/dist/state/schema.js +4 -5
  514. package/dist/state/snapshot-parse.d.ts +2 -2
  515. package/dist/state/snapshot-parse.js +14 -8
  516. package/dist/state/step-executions.d.ts +20 -8
  517. package/dist/state/step-executions.js +6 -4
  518. package/dist/state/tool-outputs.d.ts +2 -2
  519. package/dist/state/tool-outputs.js +2 -1
  520. package/dist/state/vector-store.d.ts +16 -16
  521. package/dist/state/vector-store.js +11 -7
  522. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  523. package/dist/tasks/data-profile-absorb.js +21 -16
  524. package/dist/tasks/data-profile-activity.d.ts +5 -5
  525. package/dist/tasks/data-profile-activity.js +5 -5
  526. package/dist/tasks/data-profile-index.d.ts +4 -4
  527. package/dist/tasks/data-profile-index.js +32 -17
  528. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  529. package/dist/tasks/data-profile-resolve.js +88 -62
  530. package/dist/tasks/data-profile.d.ts +40 -31
  531. package/dist/tasks/data-profile.js +138 -95
  532. package/dist/tasks/extract-values.d.ts +26 -79
  533. package/dist/tasks/extract-values.js +48 -108
  534. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  535. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  536. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  537. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  538. package/dist/testing.d.ts +62 -0
  539. package/dist/testing.js +101 -0
  540. package/dist/tools/ad-hoc-router.d.ts +9 -9
  541. package/dist/tools/ad-hoc-router.js +65 -52
  542. package/dist/tools/analysis-invocation.d.ts +7 -0
  543. package/dist/tools/analysis-invocation.js +29 -5
  544. package/dist/tools/approval/contract.d.ts +8 -52
  545. package/dist/tools/approval/contract.js +7 -36
  546. package/dist/tools/approval/gateway.d.ts +27 -28
  547. package/dist/tools/approval/gateway.js +33 -130
  548. package/dist/tools/approval/queries.d.ts +6 -11
  549. package/dist/tools/approval/queries.js +43 -29
  550. package/dist/tools/approval/uuidv7.js +2 -2
  551. package/dist/tools/bio/chembl.d.ts +3 -3
  552. package/dist/tools/bio/chembl.js +10 -0
  553. package/dist/tools/bio/comptox.d.ts +25 -8
  554. package/dist/tools/bio/comptox.js +4 -2
  555. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  556. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  557. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  558. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  559. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  560. package/dist/tools/bio/keys.d.ts +2 -2
  561. package/dist/tools/bio/keys.js +3 -3
  562. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  563. package/dist/tools/bio/lookup-annotation.js +3 -0
  564. package/dist/tools/bio/opentargets.d.ts +1 -1
  565. package/dist/tools/bio/opentargets.js +6 -0
  566. package/dist/tools/bio/pubchem.d.ts +2 -2
  567. package/dist/tools/bio/pubchem.js +6 -0
  568. package/dist/tools/bio/pubmed.d.ts +26 -16
  569. package/dist/tools/bio/pubmed.js +9 -3
  570. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  571. package/dist/tools/bio/search-clinical-trials.js +5 -1
  572. package/dist/tools/bio/search-faers.d.ts +2 -2
  573. package/dist/tools/bio/search-faers.js +1 -1
  574. package/dist/tools/bio/search-gene.d.ts +2 -2
  575. package/dist/tools/bio/search-gene.js +1 -0
  576. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  577. package/dist/tools/bio/search-geo-datasets.js +5 -5
  578. package/dist/tools/bio/search-interactions.d.ts +1 -1
  579. package/dist/tools/bio/search-patents.d.ts +28 -22
  580. package/dist/tools/bio/search-patents.js +20 -17
  581. package/dist/tools/bio/search-protein.d.ts +2 -2
  582. package/dist/tools/bio/search-protein.js +1 -1
  583. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  584. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  585. package/dist/tools/bio/target-safety.d.ts +8 -8
  586. package/dist/tools/bio/target-safety.js +11 -6
  587. package/dist/tools/capability-data.d.ts +9 -5
  588. package/dist/tools/capability-data.js +2 -1
  589. package/dist/tools/define-tool.d.ts +55 -46
  590. package/dist/tools/define-tool.js +39 -27
  591. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  592. package/dist/tools/display/normalize-echart-spec.js +51 -27
  593. package/dist/tools/display/show-user.d.ts +2 -2
  594. package/dist/tools/display/show-user.js +1 -1
  595. package/dist/tools/execute-analysis.d.ts +19 -10
  596. package/dist/tools/execute-analysis.js +83 -62
  597. package/dist/tools/knowledge/check.d.ts +166 -44
  598. package/dist/tools/knowledge/check.js +5 -3
  599. package/dist/tools/knowledge/client.d.ts +31 -62
  600. package/dist/tools/knowledge/client.js +44 -27
  601. package/dist/tools/knowledge/environment.d.ts +6 -6
  602. package/dist/tools/knowledge/environment.js +18 -7
  603. package/dist/tools/knowledge/index.d.ts +2 -2
  604. package/dist/tools/knowledge/index.js +9 -9
  605. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  606. package/dist/tools/knowledge/local-slots.js +11 -4
  607. package/dist/tools/knowledge/pin.d.ts +2 -2
  608. package/dist/tools/knowledge/recommend.d.ts +20 -45
  609. package/dist/tools/knowledge/recommend.js +27 -19
  610. package/dist/tools/knowledge/situation.d.ts +40 -40
  611. package/dist/tools/knowledge/situation.js +2 -9
  612. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  613. package/dist/tools/knowledge/skeleton.js +10 -11
  614. package/dist/tools/knowledge/template.d.ts +20 -18
  615. package/dist/tools/knowledge/template.js +38 -32
  616. package/dist/tools/lib/alphafold-client.js +2 -1
  617. package/dist/tools/lib/amass-client.d.ts +28 -28
  618. package/dist/tools/lib/amass-client.js +20 -10
  619. package/dist/tools/lib/api-utils.d.ts +13 -3
  620. package/dist/tools/lib/api-utils.js +17 -3
  621. package/dist/tools/lib/bgee-client.d.ts +6 -6
  622. package/dist/tools/lib/bgee-client.js +16 -10
  623. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  624. package/dist/tools/lib/cbioportal-client.js +9 -8
  625. package/dist/tools/lib/chembl-client.d.ts +14 -14
  626. package/dist/tools/lib/chembl-client.js +11 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  628. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  629. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  630. package/dist/tools/lib/clinical-trials-client.js +10 -10
  631. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  632. package/dist/tools/lib/clinvar-client.js +6 -6
  633. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  634. package/dist/tools/lib/ctx-ops.js +13 -10
  635. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  636. package/dist/tools/lib/dgidb-client.js +10 -12
  637. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  638. package/dist/tools/lib/ema-client.d.ts +2 -2
  639. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  640. package/dist/tools/lib/ensembl-client.js +5 -4
  641. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  642. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  643. package/dist/tools/lib/html-text.d.ts +6 -0
  644. package/dist/tools/lib/html-text.js +9 -0
  645. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  646. package/dist/tools/lib/identifier-resolver.js +7 -3
  647. package/dist/tools/lib/impc-client.d.ts +8 -8
  648. package/dist/tools/lib/impc-client.js +46 -35
  649. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  650. package/dist/tools/lib/iuphar-client.js +7 -16
  651. package/dist/tools/lib/monarch-client.d.ts +4 -4
  652. package/dist/tools/lib/openfda-client.d.ts +22 -22
  653. package/dist/tools/lib/openfda-client.js +23 -22
  654. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  655. package/dist/tools/lib/pathway-client.d.ts +4 -4
  656. package/dist/tools/lib/pathway-client.js +15 -19
  657. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  658. package/dist/tools/lib/pharmgkb-client.js +1 -1
  659. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  660. package/dist/tools/lib/protein-family-modality.js +0 -2
  661. package/dist/tools/lib/protein-family-normalize.js +7 -0
  662. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  663. package/dist/tools/lib/pubchem-client.js +1 -0
  664. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  665. package/dist/tools/lib/pubchem-ops.js +8 -0
  666. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  667. package/dist/tools/lib/pubmed-client.js +1 -1
  668. package/dist/tools/lib/string-client.d.ts +6 -6
  669. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  670. package/dist/tools/lib/uniprot-client.js +5 -1
  671. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  672. package/dist/tools/memory/update-working-memory.js +21 -3
  673. package/dist/tools/read-tool-output.js +8 -2
  674. package/dist/tools/registry.d.ts +2 -2
  675. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  676. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  677. package/dist/tools/report-session/derive-table.d.ts +19 -59
  678. package/dist/tools/report-session/derive-table.js +120 -122
  679. package/dist/tools/report-session/examine-page.d.ts +6 -6
  680. package/dist/tools/report-session/examine-page.js +14 -12
  681. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  682. package/dist/tools/report-session/list-artifacts.js +5 -5
  683. package/dist/tools/report-session/page-faults.d.ts +6 -6
  684. package/dist/tools/report-session/page-faults.js +3 -1
  685. package/dist/tools/report-session/preview-report.d.ts +4 -3
  686. package/dist/tools/report-session/preview-report.js +26 -7
  687. package/dist/tools/report-session/record-version.d.ts +9 -4
  688. package/dist/tools/report-session/record-version.js +16 -9
  689. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  690. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  691. package/dist/tools/research/generate-analogy-report.js +80 -76
  692. package/dist/tools/research/generate-plan.d.ts +16 -16
  693. package/dist/tools/research/generate-plan.js +410 -374
  694. package/dist/tools/research/guarded-address.js +3 -2
  695. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  696. package/dist/tools/research/inspect-data-profile.js +26 -25
  697. package/dist/tools/research/inspect-run.d.ts +54 -27
  698. package/dist/tools/research/inspect-run.js +50 -40
  699. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  700. package/dist/tools/research/literature-reviewer.js +29 -28
  701. package/dist/tools/research/search-arxiv.d.ts +1 -1
  702. package/dist/tools/research/search-arxiv.js +1 -1
  703. package/dist/tools/research/search-github-repos.d.ts +10 -7
  704. package/dist/tools/research/search-github-repos.js +25 -22
  705. package/dist/tools/research/search-semantic-scholar.js +1 -1
  706. package/dist/tools/research/searxng-engine.d.ts +2 -2
  707. package/dist/tools/research/searxng-engine.js +6 -4
  708. package/dist/tools/research/web-fetch.d.ts +24 -21
  709. package/dist/tools/research/web-fetch.js +65 -74
  710. package/dist/tools/research/web-search.d.ts +26 -17
  711. package/dist/tools/research/web-search.js +26 -21
  712. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  713. package/dist/tools/sandbox/link-packages.js +11 -8
  714. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  715. package/dist/tools/sandbox/list-available-packages.js +31 -25
  716. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  717. package/dist/tools/sandbox/list-available-refs.js +61 -36
  718. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  719. package/dist/tools/sandbox/report-blocker.js +23 -73
  720. package/dist/tools/sandbox/skills.d.ts +16 -12
  721. package/dist/tools/sandbox/skills.js +16 -12
  722. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  723. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  724. package/dist/tools/start-report-session.d.ts +13 -5
  725. package/dist/tools/start-report-session.js +35 -8
  726. package/dist/tools/terminal-text.d.ts +5 -2
  727. package/dist/tools/terminal-text.js +35 -3
  728. package/dist/tools/workspace/decision-record.d.ts +4 -4
  729. package/dist/tools/workspace/decision-record.js +23 -13
  730. package/dist/tools/workspace/edit-file.d.ts +59 -20
  731. package/dist/tools/workspace/edit-file.js +81 -16
  732. package/dist/tools/workspace/execute-command.d.ts +15 -13
  733. package/dist/tools/workspace/execute-command.js +11 -9
  734. package/dist/tools/workspace/file-stat.d.ts +6 -3
  735. package/dist/tools/workspace/grep.d.ts +10 -7
  736. package/dist/tools/workspace/grep.js +9 -3
  737. package/dist/tools/workspace/list-files.d.ts +6 -3
  738. package/dist/tools/workspace/mutator.d.ts +28 -15
  739. package/dist/tools/workspace/mutator.js +107 -53
  740. package/dist/tools/workspace/read-file.d.ts +8 -5
  741. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  742. package/dist/tools/workspace/result-bounds.js +4 -2
  743. package/dist/tools/workspace/run-exec.d.ts +2 -2
  744. package/dist/tools/workspace/run-exec.js +3 -3
  745. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  746. package/dist/tools/workspace/scan-inputs.js +17 -5
  747. package/dist/tools/workspace/show-file.d.ts +1 -1
  748. package/dist/tools/workspace/show-file.js +2 -1
  749. package/dist/tools/workspace/show-plan.d.ts +8 -5
  750. package/dist/tools/workspace/show-plan.js +9 -8
  751. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  752. package/dist/tools/workspace/workspace-search.js +27 -14
  753. package/dist/tools/workspace/write-file.d.ts +9 -7
  754. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  755. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  756. package/dist/workflows/execute-analysis.d.ts +46 -62
  757. package/dist/workflows/execute-analysis.js +137 -219
  758. package/dist/workflows/pause.d.ts +71 -0
  759. package/dist/workflows/pause.js +173 -0
  760. package/dist/workflows/sandbox-step.d.ts +38 -61
  761. package/dist/workflows/sandbox-step.js +99 -106
  762. package/dist/workflows/test/sql-writes.d.ts +21 -0
  763. package/dist/workflows/test/sql-writes.js +36 -0
  764. package/dist/workspace/filesystem.d.ts +6 -6
  765. package/dist/workspace/filesystem.js +10 -8
  766. package/dist/workspace/paths.d.ts +1 -1
  767. package/dist/workspace/paths.js +15 -4
  768. package/dist/workspace/search-config.d.ts +2 -2
  769. package/dist/workspace/search-config.js +1 -1
  770. package/package.json +21 -22
  771. package/dist/loop/call-guard.d.ts +0 -50
  772. package/dist/loop/call-guard.js +0 -90
  773. package/dist/loop/continue-agent.d.ts +0 -40
  774. package/dist/loop/continue-agent.js +0 -38
  775. package/dist/loop/genai-spans.d.ts +0 -47
  776. package/dist/loop/genai-spans.js +0 -134
  777. package/dist/loop/run-agent.d.ts +0 -245
  778. package/dist/loop/run-agent.js +0 -1124
  779. package/dist/loop/run-step.d.ts +0 -29
  780. package/dist/loop/run-step.js +0 -34
  781. package/dist/loop/run-to-terminal.d.ts +0 -66
  782. package/dist/loop/run-to-terminal.js +0 -93
  783. package/dist/loop/tool-mask.d.ts +0 -23
  784. package/dist/loop/tool-mask.js +0 -46
  785. package/dist/providers/streaming-chat.d.ts +0 -32
  786. package/dist/providers/streaming-chat.js +0 -91
  787. package/dist/tasks/derive-table-exec.d.ts +0 -54
  788. package/dist/tasks/derive-table-exec.js +0 -86
  789. package/dist/workflows/suspension.d.ts +0 -32
  790. package/dist/workflows/suspension.js +0 -38
@@ -15,12 +15,19 @@
15
15
  *
16
16
  * The primitive admits a flat object input only. Thus a destination is four optional fields, and not a
17
17
  * nested union. A conflict between the flat fields refuses before the core runs.
18
+ *
19
+ * Inside a durable step, a mutation stores its result for the thread and the step, in the transaction of
20
+ * the document and under the lock of the row. A rerun of the step after the landing, before its
21
+ * checkpoint, gives the stored result. Thus a rerun of `add_block` does not refuse its own block id, and a
22
+ * rerun of `remove_block` does not refuse its own removed target.
18
23
  */
19
24
  import { err, ok } from "neverthrow";
20
25
  import { basename } from "node:path";
21
26
  import { z } from "zod";
22
27
  import { createNoopLogger } from "../../lib/console-logger.js";
23
28
  import { capCodePoints, DETAIL_NEEDLE_MAX_LENGTH } from "../../loop/tool-detail.js";
29
+ import { parseJsonAs } from "../../lib/parse-json.js";
30
+ import { parseUnknownRecord } from "../../lib/unknown-containers.js";
24
31
  import { bindSessionEmit } from "../../provenance/seam.js";
25
32
  import { isSafeId } from "../../workspace/paths.js";
26
33
  import { addBlock, changeBlock, locate, moveBlock, removeBlock, setTitle, } from "../../report-model/draft-operations.js";
@@ -28,6 +35,7 @@ import { buildOutline, childOutline, readBlock } from "../../report-model/draft-
28
35
  import { finishDraft } from "../../report-model/draft-finish.js";
29
36
  import { AuthoringBlockSchema } from "../../report-model/authoring-grammar.js";
30
37
  import { defineTool } from "../define-tool.js";
38
+ import { durableStepKey } from "../workspace/edit-file.js";
31
39
  /**
32
40
  * The block payload.
33
41
  *
@@ -39,8 +47,8 @@ import { defineTool } from "../define-tool.js";
39
47
  * The grammar is the authoring one, thus no artifact reference of the published schema carries a hash. The
40
48
  * pinned snapshot owns that value, and the land path stamps it from the path.
41
49
  *
42
- * The `z.unknown()` member keeps the runtime parse permissive. Thus a malformed payload still reaches the
43
- * core, which parses it with the draft grammar and refuses `malformed-block` as typed data in the ok
50
+ * The `z.unknown()` member keeps the runtime parse permissive. Thus a malformed payload still reaches
51
+ * the core, which parses it with the draft grammar and refuses `malformed-block` as typed data in the ok
44
52
  * channel. A strict input schema would turn that designed refusal into a hard input-validation error from
45
53
  * the loop. A payload that carries a hash rides the same arm, and the stamp drops the value before the
46
54
  * parse.
@@ -98,6 +106,33 @@ const setTitleInput = z.object({
98
106
  title: z.string().min(1).describe("The title of the whole report."),
99
107
  });
100
108
  const finishDraftInput = z.object({});
109
+ /** Each kind of a draft block. The record type names each kind, thus a new kind fails the build here. */
110
+ const DRAFT_BLOCK_KINDS = {
111
+ section: true,
112
+ text: true,
113
+ claim: true,
114
+ metric: true,
115
+ table: true,
116
+ chart: true,
117
+ figure: true,
118
+ citation: true,
119
+ };
120
+ /** The events that a stored result carries. The harness wrote each one, thus a check of the event type is enough. */
121
+ const StoredEventsSchema = z.object({
122
+ events: z.array(z.custom((value) => z.object({ type: z.string() }).safeParse(value).success)),
123
+ });
124
+ const LandedResultSchema = z.object({
125
+ applied: z.literal(true),
126
+ changed: z.array(z.object({
127
+ parentId: z.string().optional(),
128
+ children: z.array(z.object({
129
+ id: z.string(),
130
+ kind: z.custom((value) => typeof value === "string" && Object.hasOwn(DRAFT_BLOCK_KINDS, value)),
131
+ depth: z.number(),
132
+ label: z.string(),
133
+ })),
134
+ })),
135
+ });
101
136
  /**
102
137
  * Resolve the report thread of a call, and load its state through the gateway.
103
138
  *
@@ -113,12 +148,12 @@ const finishDraftInput = z.object({});
113
148
  * The authoring tools and the preview tool share this one resolution, thus the two surfaces accept the
114
149
  * same thread id and map a load outcome onto a refusal the same way.
115
150
  */
116
- export async function openReportThread(gateway, scope) {
117
- if (scope.kind !== "analysis" || scope.threadId === undefined || !isSafeId(scope.threadId)) {
151
+ export async function openReportThread(gateway, scope, callKey) {
152
+ if (scope.threadId === undefined || !isSafeId(scope.threadId)) {
118
153
  return err({ reason: "no-thread-scope", detail: "the scope of the call names no usable report thread id" });
119
154
  }
120
155
  const { threadId, analysisId } = scope;
121
- const loaded = await gateway.load(threadId);
156
+ const loaded = await gateway.load(threadId, callKey);
122
157
  if (loaded.outcome === "absent") {
123
158
  return err({ reason: "absent-state", detail: `no report session exists for the thread ${threadId}, and this condition is permanent` });
124
159
  }
@@ -141,6 +176,7 @@ export async function openReportThread(gateway, scope) {
141
176
  token: loaded.token,
142
177
  seenDocumentHash: loaded.seenDocumentHash,
143
178
  derivations: loaded.derivations,
179
+ landed: loaded.landed,
144
180
  });
145
181
  }
146
182
  /** Read an absentable field. An explicit `null` and an omitted key both mean that the model gave no value. */
@@ -216,7 +252,7 @@ function decodeBlockPayload(block) {
216
252
  return block;
217
253
  }
218
254
  try {
219
- return JSON.parse(block);
255
+ return parseJsonAs(block, z.json());
220
256
  }
221
257
  catch {
222
258
  return block;
@@ -232,7 +268,7 @@ function readId(block) {
232
268
  }
233
269
  /** Read one field of an untyped payload, or `undefined` when the payload is not an object. */
234
270
  function fieldOf(value, field) {
235
- return value !== null && typeof value === "object" ? value[field] : undefined;
271
+ return parseUnknownRecord(value)?.[field];
236
272
  }
237
273
  function readStringField(block, field) {
238
274
  const value = fieldOf(block, field);
@@ -357,16 +393,6 @@ function containerIn(document, parentId) {
357
393
  const children = located !== undefined && located.block.kind === "section" ? located.block.blocks : [];
358
394
  return { parentId, children: childOutline(children, located?.path.length ?? 0) };
359
395
  }
360
- /**
361
- * Every tool of this surface runs inline.
362
- *
363
- * A tool loads the state of its thread, applies the pure operation, and persists the result in one body.
364
- * The reported outline must agree with the row that the body just wrote. A step-mode tool goes through
365
- * `DBOS.runStep`, which caches the result of a step and replays it without a fresh load. A replay could
366
- * then report an outline that the current row no longer holds. Inline mode reads and writes the row in one
367
- * lifetime, thus the outline never drifts from the state.
368
- */
369
- const AUTHORING_EXECUTION_MODE = "inline";
370
396
  /**
371
397
  * Make the eight authoring tools over a session-state gateway.
372
398
  *
@@ -379,6 +405,7 @@ const AUTHORING_EXECUTION_MODE = "inline";
379
405
  */
380
406
  export function createReportAuthoringTools(gateway, deps = {}) {
381
407
  const observe = bindSessionEmit(deps.provenance, (deps.logger ?? createNoopLogger()).named("report-authoring"));
408
+ const stepKey = deps.stepKey ?? durableStepKey;
382
409
  /**
383
410
  * Resolve the thread of the call, and load its state.
384
411
  *
@@ -387,6 +414,39 @@ export function createReportAuthoringTools(gateway, deps = {}) {
387
414
  * operation.
388
415
  */
389
416
  const openThread = (ctx) => openReportThread(gateway, ctx.session.scope);
417
+ const refuse = (refusal) => ({ applied: false, refusal });
418
+ /**
419
+ * The stored result of an earlier run of the call. The row holds what `land` stored, and a row that does not parse refuses.
420
+ *
421
+ * A crash between the persist and the emit of the earlier run loses its events, thus the rerun emits the stored
422
+ * events again. A consumer can get an act two times, never zero times. The parse of the result drops the events,
423
+ * thus the model reads the result alone.
424
+ */
425
+ const replayed = (landed) => {
426
+ const parsed = LandedResultSchema.safeParse(landed);
427
+ if (!parsed.success) {
428
+ return refuse({ reason: "state-unavailable", detail: "the stored result of an earlier run of this call does not parse" });
429
+ }
430
+ const stored = StoredEventsSchema.safeParse(landed);
431
+ for (const observed of stored.success ? stored.data.events : []) {
432
+ observe(observed);
433
+ }
434
+ return parsed.data;
435
+ };
436
+ /**
437
+ * Resolve the thread of a mutation, and load its state with the stored result of an earlier run of the
438
+ * call. A rerun of a landed call gives that result, and it never reaches the core, which would refuse
439
+ * the landing of its own earlier run.
440
+ */
441
+ const openMutation = async (ctx) => {
442
+ const callKey = stepKey();
443
+ const opened = await openReportThread(gateway, ctx.session.scope, callKey);
444
+ if (opened.isErr())
445
+ return { done: refuse(opened.error) };
446
+ if (opened.value.landed !== undefined)
447
+ return { done: replayed(opened.value.landed) };
448
+ return { opened: { ...opened.value, callKey } };
449
+ };
390
450
  /**
391
451
  * Persist a landing, and report the containers that the operation changed.
392
452
  *
@@ -396,7 +456,8 @@ export function createReportAuthoringTools(gateway, deps = {}) {
396
456
  * tool reports `applied: true` only after the row holds the new document.
397
457
  *
398
458
  * The persist is a compare-and-swap against the token that the load read. A concurrent turn that landed
399
- * first turns the persist into a conflict, and the tool refuses with `stale-state`.
459
+ * first turns the persist into a conflict, and the tool refuses with `stale-state`. Inside a durable
460
+ * step, the result lands in the transaction of the document, thus a rerun of the step gives it again.
400
461
  *
401
462
  * `events` gives the observations of the operation, and they emit after the persist landed. Thus one
402
463
  * site owns the rule, and a refusal, a conflict, and a persist fault each emit nothing. It reads the two
@@ -404,12 +465,18 @@ export function createReportAuthoringTools(gateway, deps = {}) {
404
465
  * added block sits in the second alone. A caller that cannot name the block of its own operation gives
405
466
  * no event.
406
467
  */
407
- const land = async (threadId, token, previous, result, holders, events) => {
468
+ const land = async (opened, result, holders, events) => {
408
469
  if (result.isErr()) {
409
470
  return { applied: false, refusal: result.error };
410
471
  }
472
+ const previous = opened.state.document;
411
473
  const next = result.value;
412
- const persisted = await gateway.persist(threadId, next, token);
474
+ // A move inside one container names the same holder two times.
475
+ const unique = [...new Set(holders(previous, next))];
476
+ const landed = { applied: true, changed: unique.map((parentId) => containerIn(next, parentId)) };
477
+ const observed = events(previous, next);
478
+ const call = opened.callKey === undefined ? undefined : { key: opened.callKey, result: { ...landed, events: observed } };
479
+ const persisted = await gateway.persist(opened.threadId, next, opened.token, call);
413
480
  if (persisted.outcome === "conflict") {
414
481
  return {
415
482
  applied: false,
@@ -419,14 +486,14 @@ export function createReportAuthoringTools(gateway, deps = {}) {
419
486
  if (persisted.outcome === "failed") {
420
487
  return { applied: false, refusal: { reason: "state-unavailable", detail: persisted.detail } };
421
488
  }
422
- for (const observed of events(previous, next)) {
423
- observe(observed);
489
+ if (persisted.outcome === "replayed") {
490
+ return replayed(persisted.landed);
424
491
  }
425
- // A move inside one container names the same holder two times.
426
- const unique = [...new Set(holders(previous, next))];
427
- return { applied: true, changed: unique.map((parentId) => containerIn(next, parentId)) };
492
+ for (const event of observed) {
493
+ observe(event);
494
+ }
495
+ return landed;
428
496
  };
429
- const refuse = (refusal) => ({ applied: false, refusal });
430
497
  const add_block = defineTool({
431
498
  id: "add_block",
432
499
  description: "Add one block to the draft. The block can be a section that carries its child blocks, thus one call can add a whole section with its atoms. " +
@@ -437,7 +504,6 @@ export function createReportAuthoringTools(gateway, deps = {}) {
437
504
  "The root admits a section only, and an atom needs a section as its parent. " +
438
505
  "A reference names the path of a pinned artifact, and the session stamps the hash from the pinned evidence.",
439
506
  inputSchema: addBlockInput,
440
- executionMode: AUTHORING_EXECUTION_MODE,
441
507
  describeCall: (input) => {
442
508
  const block = decodeBlockPayload(input.block);
443
509
  const kind = readKind(block);
@@ -448,18 +514,19 @@ export function createReportAuthoringTools(gateway, deps = {}) {
448
514
  return subject === undefined ? `add ${kind}` : `add ${kind} ${subject}`;
449
515
  },
450
516
  execute: async (input, ctx) => {
451
- const opened = await openThread(ctx);
452
- if (opened.isErr()) {
453
- return ok(refuse(opened.error));
517
+ const opening = await openMutation(ctx);
518
+ if ("done" in opening) {
519
+ return ok(opening.done);
454
520
  }
455
- const { threadId, analysisId, state, token } = opened.value;
521
+ const { opened } = opening;
522
+ const { threadId, analysisId, state } = opened;
456
523
  const destination = toDestination(input);
457
524
  if (destination.isErr()) {
458
525
  return ok(refuse(destination.error));
459
526
  }
460
527
  const block = decodeBlockPayload(input.block);
461
528
  const addedId = readId(block);
462
- return ok(await land(threadId, token, state.document, addBlock(state.document, { block, destination: destination.value }, state.snapshot), (_previous, next) => [addedId === undefined ? undefined : holderIdOf(next, addedId)],
529
+ return ok(await land(opened, addBlock(state.document, { block, destination: destination.value }, state.snapshot), (_previous, next) => [addedId === undefined ? undefined : holderIdOf(next, addedId)],
463
530
  // The grammar requires an id on the payload, thus a landed add always names one. A
464
531
  // payload with no id reaches the core, which refuses it, and no event is due.
465
532
  (_previous, next) => (addedId === undefined ? [] : addedActsOf({ analysisId, threadId }, next, addedId))));
@@ -471,19 +538,19 @@ export function createReportAuthoringTools(gateway, deps = {}) {
471
538
  "The change keeps the id of the target, thus the `id` of the payload does not matter. A kind change is permitted. " +
472
539
  "A reference names the path of a pinned artifact, and the session stamps the hash from the pinned evidence.",
473
540
  inputSchema: changeBlockInput,
474
- executionMode: AUTHORING_EXECUTION_MODE,
475
541
  describeCall: (input) => `change ${input.targetId}`,
476
542
  execute: async (input, ctx) => {
477
- const opened = await openThread(ctx);
478
- if (opened.isErr()) {
479
- return ok(refuse(opened.error));
543
+ const opening = await openMutation(ctx);
544
+ if ("done" in opening) {
545
+ return ok(opening.done);
480
546
  }
481
- const { threadId, analysisId, state, token } = opened.value;
547
+ const { opened } = opening;
548
+ const { threadId, analysisId, state } = opened;
482
549
  const operation = toChangeOperation(input);
483
550
  if (operation.isErr()) {
484
551
  return ok(refuse(operation.error));
485
552
  }
486
- return ok(await land(threadId, token, state.document, changeBlock(state.document, operation.value, state.snapshot), (_previous, next) => [holderIdOf(next, input.targetId)],
553
+ return ok(await land(opened, changeBlock(state.document, operation.value, state.snapshot), (_previous, next) => [holderIdOf(next, input.targetId)],
487
554
  // A change is permitted to change the kind, thus the event states the kind that the
488
555
  // document holds after the act.
489
556
  (_previous, next) => blockActOf("change-block", { analysisId, threadId }, next, input.targetId)));
@@ -493,15 +560,15 @@ export function createReportAuthoringTools(gateway, deps = {}) {
493
560
  id: "remove_block",
494
561
  description: "Remove one block by its id. A removed section takes its whole subtree with it, and the id is free for a later add.",
495
562
  inputSchema: removeBlockInput,
496
- executionMode: AUTHORING_EXECUTION_MODE,
497
563
  describeCall: (input) => `remove ${input.targetId}`,
498
564
  execute: async (input, ctx) => {
499
- const opened = await openThread(ctx);
500
- if (opened.isErr()) {
501
- return ok(refuse(opened.error));
565
+ const opening = await openMutation(ctx);
566
+ if ("done" in opening) {
567
+ return ok(opening.done);
502
568
  }
503
- const { threadId, analysisId, state, token } = opened.value;
504
- return ok(await land(threadId, token, state.document, removeBlock(state.document, { targetId: input.targetId }, state.snapshot), (previous) => [holderIdOf(previous, input.targetId)],
569
+ const { opened } = opening;
570
+ const { threadId, analysisId, state } = opened;
571
+ return ok(await land(opened, removeBlock(state.document, { targetId: input.targetId }, state.snapshot), (previous) => [holderIdOf(previous, input.targetId)],
505
572
  // The next document holds no removed block, thus the event states the kind that the
506
573
  // previous one carried.
507
574
  (previous) => blockActOf("remove-block", { analysisId, threadId }, previous, input.targetId)));
@@ -512,19 +579,19 @@ export function createReportAuthoringTools(gateway, deps = {}) {
512
579
  description: "Move one block by its id to a new destination. Name the destination with `parentId` and one of `place`, `before`, or `after`. " +
513
580
  "A section cannot move into its own subtree.",
514
581
  inputSchema: moveBlockInput,
515
- executionMode: AUTHORING_EXECUTION_MODE,
516
582
  describeCall: (input) => `move ${input.targetId}`,
517
583
  execute: async (input, ctx) => {
518
- const opened = await openThread(ctx);
519
- if (opened.isErr()) {
520
- return ok(refuse(opened.error));
584
+ const opening = await openMutation(ctx);
585
+ if ("done" in opening) {
586
+ return ok(opening.done);
521
587
  }
522
- const { threadId, analysisId, state, token } = opened.value;
588
+ const { opened } = opening;
589
+ const { threadId, analysisId, state } = opened;
523
590
  const destination = toDestination(input);
524
591
  if (destination.isErr()) {
525
592
  return ok(refuse(destination.error));
526
593
  }
527
- return ok(await land(threadId, token, state.document, moveBlock(state.document, { targetId: input.targetId, destination: destination.value }, state.snapshot), (previous, next) => [holderIdOf(previous, input.targetId), holderIdOf(next, input.targetId)], (_previous, next) => blockActOf("move-block", { analysisId, threadId }, next, input.targetId)));
594
+ return ok(await land(opened, moveBlock(state.document, { targetId: input.targetId, destination: destination.value }, state.snapshot), (previous, next) => [holderIdOf(previous, input.targetId), holderIdOf(next, input.targetId)], (_previous, next) => blockActOf("move-block", { analysisId, threadId }, next, input.targetId)));
528
595
  },
529
596
  });
530
597
  const set_title = defineTool({
@@ -532,16 +599,16 @@ export function createReportAuthoringTools(gateway, deps = {}) {
532
599
  description: "Set the title of the report document. A draft starts with no title, and a document needs one. " +
533
600
  "The title names the whole report, and it is not the title of a section.",
534
601
  inputSchema: setTitleInput,
535
- executionMode: AUTHORING_EXECUTION_MODE,
536
602
  describeCall: (input) => `title the report ${input.title}`,
537
603
  // The title sits on the document, thus no container changes its child order.
538
604
  execute: async (input, ctx) => {
539
- const opened = await openThread(ctx);
540
- if (opened.isErr()) {
541
- return ok(refuse(opened.error));
605
+ const opening = await openMutation(ctx);
606
+ if ("done" in opening) {
607
+ return ok(opening.done);
542
608
  }
543
- const { threadId, analysisId, state, token } = opened.value;
544
- return ok(await land(threadId, token, state.document, ok(setTitle(state.document, input.title)), () => [], () => [
609
+ const { opened } = opening;
610
+ const { threadId, analysisId, state } = opened;
611
+ return ok(await land(opened, ok(setTitle(state.document, input.title)), () => [], () => [
545
612
  {
546
613
  type: "set-title",
547
614
  analysisId,
@@ -557,7 +624,6 @@ export function createReportAuthoringTools(gateway, deps = {}) {
557
624
  "A label that ends with the character … is clipped. Use the outline as the primary view of the draft, " +
558
625
  "and read one block when the label is not enough.",
559
626
  inputSchema: readOutlineInput,
560
- executionMode: AUTHORING_EXECUTION_MODE,
561
627
  // The input carries no field, thus a hook can only restate the name of the tool.
562
628
  describeCall: "none",
563
629
  execute: async (_input, ctx) => {
@@ -574,16 +640,17 @@ export function createReportAuthoringTools(gateway, deps = {}) {
574
640
  "because the session owns the hash. A section gives its title and the id of each child, " +
575
641
  "because the outline already names every block under it. Use it when the outline label is not enough.",
576
642
  inputSchema: readBlockInput,
577
- executionMode: AUTHORING_EXECUTION_MODE,
578
643
  describeCall: (input) => `read ${input.targetId}`,
579
644
  execute: async (input, ctx) => {
580
645
  const opened = await openThread(ctx);
581
646
  if (opened.isErr()) {
582
647
  return ok({ refused: opened.error });
583
648
  }
584
- const block = readBlock(opened.value.state.document, input.targetId);
585
- const result = block !== undefined ? { found: true, block } : { found: false };
586
- return ok(result);
649
+ return readBlock(opened.value.state.document, input.targetId).match((block) => ok(block !== undefined ? { found: true, block } : { found: false }), (refused) => err({
650
+ error: `the stored block ${refused.id} does not match the authoring grammar, thus it cannot be read`,
651
+ retryable: false,
652
+ cause: refused.cause,
653
+ }));
587
654
  },
588
655
  });
589
656
  const finish_draft = defineTool({
@@ -593,7 +660,6 @@ export function createReportAuthoringTools(gateway, deps = {}) {
593
660
  "preview_report and record_report_version run the same check before they act, thus a finish directly before one of them does that check a second time. " +
594
661
  "Use it to make sure that the draft passes the whole document schema, the id rule, and the structural tier.",
595
662
  inputSchema: finishDraftInput,
596
- executionMode: AUTHORING_EXECUTION_MODE,
597
663
  // The input carries no field, thus a hook can only restate the name of the tool.
598
664
  describeCall: "none",
599
665
  execute: async (_input, ctx) => {
@@ -5,10 +5,12 @@
5
5
  * table that a block can bind: a join, a pivot, or an aggregate. The agent writes the script, and the record
6
6
  * chains the derived table back to the evidence that made it.
7
7
  *
8
- * A session derivation is not an analysis run. It mints no run id, it registers no artifact, and it writes
8
+ * A session derivation is not an analysis run. It mints no run id, no mandate, and no artifact, and it writes
9
9
  * under the session directory alone. The rails are the rails of the value tier (`tasks/extract-values.ts`):
10
- * the injected exec runner, the identity mint, and the authorizer on every terminal path. The container is
11
- * ephemeral, and it goes away with the work.
10
+ * one ephemeral container inside the step of the call (`sandbox/step-sandbox.ts`), which goes away with the
11
+ * work. The container stays until the record lands, thus a rerun of the step before the record adopts the
12
+ * container and the exec record of the first attempt, and the script does not run again. A rerun after the
13
+ * record finds the record of its call, and it gives that table back.
12
14
  *
13
15
  * The container mounts the analysis tree read-only, and one write mount covers the `derived/` directory of
14
16
  * the session alone. The script writes its table into that mount directly, thus a large table makes no
@@ -25,21 +27,13 @@
25
27
  * The tool refuses an output name that the membership already holds. A record is immutable, and a second
26
28
  * derivation of one table takes a new name.
27
29
  *
28
- * A composition with no sandbox client and no run authorizer cannot derive at all. The tool reports that
29
- * condition one time, up front, the same discipline as the eyes. A per-attempt failure would instead read as
30
- * a transient fault, and it would invite a repeat of a call that can never pass.
31
- *
32
- * The container runs behind a seam, and never in the turn. An exec is a durable step of a workflow, and a
33
- * report turn is not a workflow. Thus the tool takes an injected runner, and a registered workflow owns the
34
- * container. The tool holds no sandbox client, and it imports no DBOS.
30
+ * A composition with no sandbox client cannot derive at all. The tool reports that condition one time, up
31
+ * front, the same discipline as the eyes. A per-attempt failure would instead read as a transient fault, and
32
+ * it would invite a repeat of a call that can never pass.
35
33
  */
36
- import { type Result } from "neverthrow";
37
34
  import { z } from "zod";
38
- import type { RunSession } from "../../auth/types.js";
39
- import type { Suspension } from "../../workflows/suspension.js";
40
- import type { RunAuthorizer } from "../../execution/run-authorizer.js";
41
35
  import { type Logger } from "../../lib/logger.js";
42
- import type { ResourceSpec } from "../../config/resource-limits.js";
36
+ import type { SandboxClient } from "../../sandbox/client.js";
43
37
  import type { ExecRequest, ExecResult } from "../../sandbox/types.js";
44
38
  import type { DerivationSource, ReportSessionStateStore } from "../../state/report-session-state.js";
45
39
  import { type ResolveWorkspaceRoot } from "../../workspace/paths.js";
@@ -112,41 +106,31 @@ export type DeriveTableResult = {
112
106
  * The construction deps of the derivation tool.
113
107
  *
114
108
  * `derivations` is the append side of the durable session state, thus the record lands beside the document
115
- * and the pin. `sandboxClient` and `runAuthorizer` are the two rails of the exec, and a composition that
116
- * binds neither leaves the session with no derivation at all. `resolveWorkspaceRoot` maps the analysis of
117
- * the call onto its workspace root, thus one singleton tool serves every analysis.
109
+ * and the pin. `sandboxClient` is the rail of the exec, and a composition that binds none leaves the session
110
+ * with no derivation at all. `resolveWorkspaceRoot` maps the analysis of the call onto its workspace root,
111
+ * thus one singleton tool serves every analysis.
118
112
  */
119
- export interface DeriveTableToolDeps {
113
+ export type DeriveTableToolDeps = {
120
114
  readonly gateway: ReportSessionStateGateway;
121
115
  readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
122
116
  readonly derivations: Pick<ReportSessionStateStore, "appendDerivation">;
123
- readonly runDerivation?: DeriveTableRunner;
124
- readonly runAuthorizer?: RunAuthorizer;
117
+ readonly sandboxClient?: SandboxClient;
125
118
  /** The provenance seam; an unbound session emit emits nothing and the derivation runs the same. */
126
119
  readonly provenance?: ProvenanceSeam;
127
120
  readonly logger?: Logger;
128
- }
129
- /** The synthetic run id and step id of one derivation. Both are constants, and neither names a run row. */
130
- export declare const DERIVE_RUN_LITERAL: "derive-table";
131
- export declare const DERIVE_STEP_LITERAL: "derive";
132
- /** The exec budget of one derivation. It matches the budget of the value tier. */
133
- export declare const DERIVATION_DEADLINE_MS = 300000;
134
- /**
135
- * The container size of one derivation. A join or a pivot loads each declared input into pandas at one
136
- * time, thus the container needs the headroom of the value tier.
137
- */
138
- export declare const DERIVATION_RESOURCES: ResourceSpec;
121
+ };
139
122
  /** The environment variable that carries the declared inputs into the container. */
140
123
  export declare const DERIVE_INPUT_ENV = "DERIVE_INPUTS";
141
124
  /** The environment variable that carries the container path of the output file into the container. */
142
125
  export declare const DERIVE_OUTPUT_ENV = "DERIVE_OUTPUT";
143
126
  /** One declared input, as the container reads it: the mounted path of the file, and its pinned hash. */
144
- export interface DerivationInputMount {
127
+ export type DerivationInputMount = {
145
128
  readonly path: string;
146
129
  readonly hash: string;
147
- }
130
+ };
148
131
  /**
149
- * Build the sandbox exec of one derivation. The command runs the script of the agent through `python3 -c`.
132
+ * Build the sandbox exec of one derivation. The command clears the output path, and then it runs the script
133
+ * of the agent through `python3 -c`.
150
134
  *
151
135
  * The working directory is the write mount, thus the script writes its table beside where it stands. Each
152
136
  * declared input rides as its mounted path, thus the script opens the file wherever it works from. The
@@ -170,30 +154,6 @@ export declare function buildDerivationExec(args: {
170
154
  * The function is pure, thus a test asserts the mapping without a sandbox.
171
155
  */
172
156
  export declare function describeExecFailure(result: ExecResult): string | undefined;
173
- /**
174
- * The exec of one derivation, as a registered workflow reads it.
175
- *
176
- * Each field is plain data, thus the value crosses the workflow boundary and it survives a replay. The
177
- * paths are container paths already: the host maps them one time, before the start.
178
- */
179
- export interface DeriveTableExecInput {
180
- readonly analysisId: string;
181
- readonly runSession: RunSession;
182
- readonly executionId: string;
183
- readonly script: string;
184
- readonly writableTail: string;
185
- readonly workingDir: string;
186
- readonly inputs: readonly DerivationInputMount[];
187
- readonly output: string;
188
- }
189
- /**
190
- * Run one derivation exec and give the terminal result back.
191
- *
192
- * The composition realizes it over a registered workflow, thus the container and its exec live inside a
193
- * workflow. A fault of the sandbox rejects the promise, and the tool turns that rejection into one short
194
- * detail.
195
- */
196
- export type DeriveTableRunner = (input: DeriveTableExecInput) => Promise<Result<ExecResult, Suspension>>;
197
157
  /**
198
158
  * Make the derivation tool over the session-state gateway, the derivation ledger, and the sandbox rails.
199
159
  *