@inflexa-ai/harness 0.45.1 → 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 (789) 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 +307 -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 +23 -7
  174. package/dist/lib/hooks.js +17 -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 +161 -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 +34 -0
  256. package/dist/loop/turn-credentials.js +73 -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/types.d.ts +55 -94
  304. package/dist/reference-data/catalog.d.ts +2 -15
  305. package/dist/reference-data/catalog.js +25 -8
  306. package/dist/reference-data/receipt.d.ts +2 -2
  307. package/dist/report-model/assert-rules.js +1 -1
  308. package/dist/report-model/authoring-grammar.d.ts +211 -233
  309. package/dist/report-model/block-walk.d.ts +10 -10
  310. package/dist/report-model/block-walk.js +2 -0
  311. package/dist/report-model/draft-finish.d.ts +8 -8
  312. package/dist/report-model/draft-finish.js +1 -1
  313. package/dist/report-model/draft-hash.js +8 -7
  314. package/dist/report-model/draft-operations.d.ts +22 -10
  315. package/dist/report-model/draft-operations.js +48 -30
  316. package/dist/report-model/draft-read.d.ts +19 -7
  317. package/dist/report-model/draft-read.js +16 -6
  318. package/dist/report-model/draft.d.ts +844 -2
  319. package/dist/report-model/draft.js +3 -1
  320. package/dist/report-model/fixture-resolver.js +39 -16
  321. package/dist/report-model/pin-snapshot.d.ts +2 -2
  322. package/dist/report-model/pin-snapshot.js +15 -15
  323. package/dist/report-model/production-resolver.d.ts +18 -18
  324. package/dist/report-model/production-resolver.js +50 -42
  325. package/dist/report-model/reference-resolver.d.ts +26 -10
  326. package/dist/report-model/reference-resolver.js +68 -5
  327. package/dist/report-model/reference-stamp.js +30 -38
  328. package/dist/report-model/structural-validation.js +12 -4
  329. package/dist/report-model/validate.d.ts +7 -7
  330. package/dist/report-model/validate.js +6 -6
  331. package/dist/report-render/assets.d.ts +2 -2
  332. package/dist/report-render/assets.js +27 -3
  333. package/dist/report-render/chart-export.d.ts +10 -2
  334. package/dist/report-render/chart-export.js +37 -11
  335. package/dist/report-render/chart-presets.d.ts +8 -8
  336. package/dist/report-render/chart-presets.js +3 -3
  337. package/dist/report-render/chart-renderers.d.ts +23 -16
  338. package/dist/report-render/chart-renderers.js +74 -53
  339. package/dist/report-render/chart-toolbox.d.ts +2 -2
  340. package/dist/report-render/chart-toolbox.js +7 -6
  341. package/dist/report-render/chart.d.ts +15 -16
  342. package/dist/report-render/chart.js +369 -252
  343. package/dist/report-render/design.d.ts +36 -297
  344. package/dist/report-render/design.js +0 -12
  345. package/dist/report-render/figures/common.d.ts +12 -12
  346. package/dist/report-render/figures/common.js +42 -31
  347. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  348. package/dist/report-render/figures/dendrogram.js +10 -10
  349. package/dist/report-render/figures/dense.js +15 -8
  350. package/dist/report-render/figures/dotplot.js +46 -33
  351. package/dist/report-render/figures/embedding.js +52 -43
  352. package/dist/report-render/figures/equal-units.d.ts +10 -10
  353. package/dist/report-render/figures/equal-units.js +27 -27
  354. package/dist/report-render/figures/forest.js +9 -7
  355. package/dist/report-render/figures/gsea.js +21 -11
  356. package/dist/report-render/figures/heatmap.js +13 -9
  357. package/dist/report-render/figures/index.d.ts +10 -10
  358. package/dist/report-render/figures/index.js +4 -2
  359. package/dist/report-render/figures/km.js +10 -9
  360. package/dist/report-render/figures/label-room.d.ts +12 -12
  361. package/dist/report-render/figures/label-room.js +7 -2
  362. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  363. package/dist/report-render/figures/locuszoom.js +59 -31
  364. package/dist/report-render/figures/lollipop.js +3 -2
  365. package/dist/report-render/figures/ma.js +8 -4
  366. package/dist/report-render/figures/manhattan.d.ts +1 -2
  367. package/dist/report-render/figures/manhattan.js +52 -34
  368. package/dist/report-render/figures/oncoprint.js +4 -5
  369. package/dist/report-render/figures/pca.js +25 -11
  370. package/dist/report-render/figures/qq.js +20 -9
  371. package/dist/report-render/figures/roc.js +1 -1
  372. package/dist/report-render/figures/sankey.d.ts +2 -2
  373. package/dist/report-render/figures/sankey.js +11 -10
  374. package/dist/report-render/figures/upset.d.ts +6 -6
  375. package/dist/report-render/figures/upset.js +7 -4
  376. package/dist/report-render/figures/volcano.js +12 -10
  377. package/dist/report-render/hybrid-svg.d.ts +4 -4
  378. package/dist/report-render/hybrid-svg.js +7 -5
  379. package/dist/report-render/number-format.d.ts +4 -4
  380. package/dist/report-render/number-format.js +62 -27
  381. package/dist/report-render/page.js +2 -1
  382. package/dist/report-render/provenance-data.d.ts +2 -2
  383. package/dist/report-render/references.d.ts +4 -4
  384. package/dist/report-render/render.d.ts +2 -2
  385. package/dist/report-render/render.js +10 -11
  386. package/dist/report-render/script-json.js +1 -1
  387. package/dist/report-render/table-data.d.ts +6 -6
  388. package/dist/report-render/test/options.d.ts +49 -0
  389. package/dist/report-render/test/options.js +143 -0
  390. package/dist/report-render/test/page-function.d.ts +19 -0
  391. package/dist/report-render/test/page-function.js +33 -0
  392. package/dist/report-render/types.d.ts +10 -10
  393. package/dist/report-render/value-bridge.d.ts +4 -4
  394. package/dist/report-render/value-bridge.js +27 -14
  395. package/dist/report-render/views/chart-view.d.ts +2 -2
  396. package/dist/report-render/views/chart-view.js +2 -2
  397. package/dist/report-render/views/lineage.d.ts +6 -6
  398. package/dist/report-render/views/lineage.js +2 -0
  399. package/dist/report-render/views/page-view.d.ts +2 -2
  400. package/dist/report-render/views/page-view.js +1 -0
  401. package/dist/report-render/views/prose.js +25 -8
  402. package/dist/report-render/views/references-view.js +12 -1
  403. package/dist/report-render/views/values.js +1 -1
  404. package/dist/runtime/assemble.d.ts +53 -26
  405. package/dist/runtime/assemble.js +103 -56
  406. package/dist/runtime/boot.d.ts +8 -7
  407. package/dist/runtime/boot.js +1 -1
  408. package/dist/runtime/connection-budget.d.ts +6 -6
  409. package/dist/runtime/connection-budget.js +1 -1
  410. package/dist/runtime/dbos.d.ts +29 -19
  411. package/dist/runtime/dbos.js +35 -20
  412. package/dist/runtime/result-serialization.js +18 -5
  413. package/dist/runtime/shutdown.d.ts +2 -2
  414. package/dist/sandbox/client.d.ts +7 -3
  415. package/dist/sandbox/cpu-files.d.ts +2 -2
  416. package/dist/sandbox/cpu-files.js +21 -4
  417. package/dist/sandbox/create-sandbox.d.ts +7 -8
  418. package/dist/sandbox/create-sandbox.js +6 -12
  419. package/dist/sandbox/docker-client.d.ts +48 -3
  420. package/dist/sandbox/docker-client.js +10 -6
  421. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  422. package/dist/sandbox/exec-outcome.d.ts +2 -2
  423. package/dist/sandbox/exec-outcome.js +1 -1
  424. package/dist/sandbox/exec.d.ts +10 -6
  425. package/dist/sandbox/exec.js +27 -12
  426. package/dist/sandbox/execution-id.js +14 -6
  427. package/dist/sandbox/farm.d.ts +2 -2
  428. package/dist/sandbox/farm.js +22 -27
  429. package/dist/sandbox/identity.d.ts +7 -0
  430. package/dist/sandbox/identity.js +14 -3
  431. package/dist/sandbox/image-packages.js +15 -27
  432. package/dist/sandbox/k8s-client.d.ts +35 -8
  433. package/dist/sandbox/k8s-client.js +6 -5
  434. package/dist/sandbox/labels.js +1 -0
  435. package/dist/sandbox/liveness.js +3 -1
  436. package/dist/sandbox/mount-plan.d.ts +10 -10
  437. package/dist/sandbox/mount-plan.js +13 -14
  438. package/dist/sandbox/notification-sweep.d.ts +4 -4
  439. package/dist/sandbox/notification-sweep.js +4 -7
  440. package/dist/sandbox/package-identity.d.ts +6 -13
  441. package/dist/sandbox/package-identity.js +46 -28
  442. package/dist/sandbox/reaper.d.ts +10 -10
  443. package/dist/sandbox/reaper.js +4 -6
  444. package/dist/sandbox/sandbox-error.d.ts +2 -9
  445. package/dist/sandbox/sandbox-error.js +21 -8
  446. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  447. package/dist/sandbox/sandbox-step-translate.js +22 -8
  448. package/dist/sandbox/step-sandbox.d.ts +47 -0
  449. package/dist/sandbox/step-sandbox.js +53 -0
  450. package/dist/sandbox/types.d.ts +18 -19
  451. package/dist/sandbox/types.js +1 -1
  452. package/dist/schemas/artifact-manifest.d.ts +4 -4
  453. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  454. package/dist/schemas/file-metadata.js +2 -4
  455. package/dist/schemas/plan-schemas.d.ts +31 -31
  456. package/dist/schemas/run-synthesis.d.ts +95 -26
  457. package/dist/schemas/run-synthesis.js +3 -1
  458. package/dist/schemas/validate-plan.d.ts +4 -4
  459. package/dist/schemas/validate-plan.js +17 -5
  460. package/dist/schemas/workflow-state.d.ts +19 -19
  461. package/dist/schemas/workflow-state.js +2 -2
  462. package/dist/state/active-turns.d.ts +36 -0
  463. package/dist/state/active-turns.js +67 -0
  464. package/dist/state/analyses-metrics.d.ts +8 -8
  465. package/dist/state/analyses-metrics.js +4 -4
  466. package/dist/state/analyses.d.ts +0 -14
  467. package/dist/state/analyses.js +0 -32
  468. package/dist/state/artifacts.d.ts +32 -19
  469. package/dist/state/artifacts.js +28 -5
  470. package/dist/state/data-profile.d.ts +2 -2
  471. package/dist/state/db.d.ts +12 -2
  472. package/dist/state/db.js +5 -0
  473. package/dist/state/edit-intents.d.ts +4 -0
  474. package/dist/state/edit-intents.js +71 -0
  475. package/dist/state/index.d.ts +4 -4
  476. package/dist/state/index.js +2 -2
  477. package/dist/state/init.d.ts +2 -1
  478. package/dist/state/init.js +5 -2
  479. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  480. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  482. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  484. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  486. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  488. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  490. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  492. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  494. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  496. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  498. package/dist/state/migrations/index.js +18 -0
  499. package/dist/state/paused-work.d.ts +52 -0
  500. package/dist/state/paused-work.js +105 -0
  501. package/dist/state/plans.d.ts +27 -8
  502. package/dist/state/plans.js +14 -11
  503. package/dist/state/purge-analysis.d.ts +6 -6
  504. package/dist/state/purge-analysis.js +10 -2
  505. package/dist/state/report-session-state.d.ts +43 -18
  506. package/dist/state/report-session-state.js +43 -4
  507. package/dist/state/report-versions.d.ts +16 -11
  508. package/dist/state/report-versions.js +5 -3
  509. package/dist/state/runs.d.ts +30 -19
  510. package/dist/state/runs.js +43 -51
  511. package/dist/state/schema.d.ts +18 -21
  512. package/dist/state/schema.js +4 -5
  513. package/dist/state/snapshot-parse.d.ts +2 -2
  514. package/dist/state/snapshot-parse.js +14 -8
  515. package/dist/state/step-executions.d.ts +20 -8
  516. package/dist/state/step-executions.js +6 -4
  517. package/dist/state/tool-outputs.d.ts +2 -2
  518. package/dist/state/tool-outputs.js +2 -1
  519. package/dist/state/vector-store.d.ts +16 -16
  520. package/dist/state/vector-store.js +11 -7
  521. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  522. package/dist/tasks/data-profile-absorb.js +21 -16
  523. package/dist/tasks/data-profile-activity.d.ts +5 -5
  524. package/dist/tasks/data-profile-activity.js +5 -5
  525. package/dist/tasks/data-profile-index.d.ts +4 -4
  526. package/dist/tasks/data-profile-index.js +32 -17
  527. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  528. package/dist/tasks/data-profile-resolve.js +88 -62
  529. package/dist/tasks/data-profile.d.ts +40 -31
  530. package/dist/tasks/data-profile.js +138 -95
  531. package/dist/tasks/extract-values.d.ts +26 -79
  532. package/dist/tasks/extract-values.js +48 -108
  533. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  534. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  535. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  536. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  537. package/dist/testing.d.ts +60 -0
  538. package/dist/testing.js +96 -0
  539. package/dist/tools/ad-hoc-router.d.ts +9 -9
  540. package/dist/tools/ad-hoc-router.js +65 -52
  541. package/dist/tools/analysis-invocation.d.ts +7 -0
  542. package/dist/tools/analysis-invocation.js +29 -5
  543. package/dist/tools/approval/contract.d.ts +8 -52
  544. package/dist/tools/approval/contract.js +7 -36
  545. package/dist/tools/approval/gateway.d.ts +27 -28
  546. package/dist/tools/approval/gateway.js +33 -130
  547. package/dist/tools/approval/queries.d.ts +6 -11
  548. package/dist/tools/approval/queries.js +43 -29
  549. package/dist/tools/approval/uuidv7.js +2 -2
  550. package/dist/tools/bio/chembl.d.ts +3 -3
  551. package/dist/tools/bio/chembl.js +10 -0
  552. package/dist/tools/bio/comptox.d.ts +25 -8
  553. package/dist/tools/bio/comptox.js +4 -2
  554. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  555. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  556. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  557. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  558. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  559. package/dist/tools/bio/keys.d.ts +2 -2
  560. package/dist/tools/bio/keys.js +3 -3
  561. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  562. package/dist/tools/bio/lookup-annotation.js +3 -0
  563. package/dist/tools/bio/opentargets.d.ts +1 -1
  564. package/dist/tools/bio/opentargets.js +6 -0
  565. package/dist/tools/bio/pubchem.d.ts +2 -2
  566. package/dist/tools/bio/pubchem.js +6 -0
  567. package/dist/tools/bio/pubmed.d.ts +26 -16
  568. package/dist/tools/bio/pubmed.js +9 -3
  569. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  570. package/dist/tools/bio/search-clinical-trials.js +5 -1
  571. package/dist/tools/bio/search-faers.d.ts +2 -2
  572. package/dist/tools/bio/search-faers.js +1 -1
  573. package/dist/tools/bio/search-gene.d.ts +2 -2
  574. package/dist/tools/bio/search-gene.js +1 -0
  575. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  576. package/dist/tools/bio/search-geo-datasets.js +5 -5
  577. package/dist/tools/bio/search-interactions.d.ts +1 -1
  578. package/dist/tools/bio/search-patents.d.ts +28 -22
  579. package/dist/tools/bio/search-patents.js +20 -17
  580. package/dist/tools/bio/search-protein.d.ts +2 -2
  581. package/dist/tools/bio/search-protein.js +1 -1
  582. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  583. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  584. package/dist/tools/bio/target-safety.d.ts +8 -8
  585. package/dist/tools/bio/target-safety.js +11 -6
  586. package/dist/tools/capability-data.d.ts +9 -5
  587. package/dist/tools/capability-data.js +2 -1
  588. package/dist/tools/define-tool.d.ts +55 -46
  589. package/dist/tools/define-tool.js +39 -27
  590. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  591. package/dist/tools/display/normalize-echart-spec.js +51 -27
  592. package/dist/tools/display/show-user.d.ts +2 -2
  593. package/dist/tools/display/show-user.js +1 -1
  594. package/dist/tools/execute-analysis.d.ts +19 -10
  595. package/dist/tools/execute-analysis.js +83 -62
  596. package/dist/tools/knowledge/check.d.ts +166 -44
  597. package/dist/tools/knowledge/check.js +5 -3
  598. package/dist/tools/knowledge/client.d.ts +31 -62
  599. package/dist/tools/knowledge/client.js +44 -27
  600. package/dist/tools/knowledge/environment.d.ts +6 -6
  601. package/dist/tools/knowledge/environment.js +18 -7
  602. package/dist/tools/knowledge/index.d.ts +2 -2
  603. package/dist/tools/knowledge/index.js +9 -9
  604. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  605. package/dist/tools/knowledge/local-slots.js +11 -4
  606. package/dist/tools/knowledge/pin.d.ts +2 -2
  607. package/dist/tools/knowledge/recommend.d.ts +20 -45
  608. package/dist/tools/knowledge/recommend.js +27 -19
  609. package/dist/tools/knowledge/situation.d.ts +40 -40
  610. package/dist/tools/knowledge/situation.js +2 -9
  611. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  612. package/dist/tools/knowledge/skeleton.js +10 -11
  613. package/dist/tools/knowledge/template.d.ts +20 -18
  614. package/dist/tools/knowledge/template.js +38 -32
  615. package/dist/tools/lib/alphafold-client.js +2 -1
  616. package/dist/tools/lib/amass-client.d.ts +28 -28
  617. package/dist/tools/lib/amass-client.js +20 -10
  618. package/dist/tools/lib/api-utils.d.ts +13 -3
  619. package/dist/tools/lib/api-utils.js +17 -3
  620. package/dist/tools/lib/bgee-client.d.ts +6 -6
  621. package/dist/tools/lib/bgee-client.js +16 -10
  622. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  623. package/dist/tools/lib/cbioportal-client.js +9 -8
  624. package/dist/tools/lib/chembl-client.d.ts +14 -14
  625. package/dist/tools/lib/chembl-client.js +11 -4
  626. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  628. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  629. package/dist/tools/lib/clinical-trials-client.js +10 -10
  630. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  631. package/dist/tools/lib/clinvar-client.js +6 -6
  632. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  633. package/dist/tools/lib/ctx-ops.js +13 -10
  634. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  635. package/dist/tools/lib/dgidb-client.js +10 -12
  636. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  637. package/dist/tools/lib/ema-client.d.ts +2 -2
  638. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  639. package/dist/tools/lib/ensembl-client.js +5 -4
  640. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  641. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  642. package/dist/tools/lib/html-text.d.ts +6 -0
  643. package/dist/tools/lib/html-text.js +9 -0
  644. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  645. package/dist/tools/lib/identifier-resolver.js +7 -3
  646. package/dist/tools/lib/impc-client.d.ts +8 -8
  647. package/dist/tools/lib/impc-client.js +46 -35
  648. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  649. package/dist/tools/lib/iuphar-client.js +7 -16
  650. package/dist/tools/lib/monarch-client.d.ts +4 -4
  651. package/dist/tools/lib/openfda-client.d.ts +22 -22
  652. package/dist/tools/lib/openfda-client.js +23 -22
  653. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  654. package/dist/tools/lib/pathway-client.d.ts +4 -4
  655. package/dist/tools/lib/pathway-client.js +15 -19
  656. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  657. package/dist/tools/lib/pharmgkb-client.js +1 -1
  658. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  659. package/dist/tools/lib/protein-family-modality.js +0 -2
  660. package/dist/tools/lib/protein-family-normalize.js +7 -0
  661. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  662. package/dist/tools/lib/pubchem-client.js +1 -0
  663. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  664. package/dist/tools/lib/pubchem-ops.js +8 -0
  665. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  666. package/dist/tools/lib/pubmed-client.js +1 -1
  667. package/dist/tools/lib/string-client.d.ts +6 -6
  668. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  669. package/dist/tools/lib/uniprot-client.js +5 -1
  670. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  671. package/dist/tools/memory/update-working-memory.js +21 -3
  672. package/dist/tools/read-tool-output.js +8 -2
  673. package/dist/tools/registry.d.ts +2 -2
  674. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  675. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  676. package/dist/tools/report-session/derive-table.d.ts +19 -59
  677. package/dist/tools/report-session/derive-table.js +120 -122
  678. package/dist/tools/report-session/examine-page.d.ts +6 -6
  679. package/dist/tools/report-session/examine-page.js +14 -12
  680. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  681. package/dist/tools/report-session/list-artifacts.js +5 -5
  682. package/dist/tools/report-session/page-faults.d.ts +6 -6
  683. package/dist/tools/report-session/page-faults.js +3 -1
  684. package/dist/tools/report-session/preview-report.d.ts +4 -3
  685. package/dist/tools/report-session/preview-report.js +26 -7
  686. package/dist/tools/report-session/record-version.d.ts +9 -4
  687. package/dist/tools/report-session/record-version.js +16 -9
  688. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  689. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  690. package/dist/tools/research/generate-analogy-report.js +80 -76
  691. package/dist/tools/research/generate-plan.d.ts +16 -16
  692. package/dist/tools/research/generate-plan.js +410 -374
  693. package/dist/tools/research/guarded-address.js +3 -2
  694. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  695. package/dist/tools/research/inspect-data-profile.js +26 -25
  696. package/dist/tools/research/inspect-run.d.ts +54 -27
  697. package/dist/tools/research/inspect-run.js +50 -40
  698. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  699. package/dist/tools/research/literature-reviewer.js +29 -28
  700. package/dist/tools/research/search-arxiv.d.ts +1 -1
  701. package/dist/tools/research/search-arxiv.js +1 -1
  702. package/dist/tools/research/search-github-repos.d.ts +10 -7
  703. package/dist/tools/research/search-github-repos.js +25 -22
  704. package/dist/tools/research/search-semantic-scholar.js +1 -1
  705. package/dist/tools/research/searxng-engine.d.ts +2 -2
  706. package/dist/tools/research/searxng-engine.js +6 -4
  707. package/dist/tools/research/web-fetch.d.ts +24 -21
  708. package/dist/tools/research/web-fetch.js +65 -74
  709. package/dist/tools/research/web-search.d.ts +26 -17
  710. package/dist/tools/research/web-search.js +26 -21
  711. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  712. package/dist/tools/sandbox/link-packages.js +11 -8
  713. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  714. package/dist/tools/sandbox/list-available-packages.js +31 -25
  715. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  716. package/dist/tools/sandbox/list-available-refs.js +61 -36
  717. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  718. package/dist/tools/sandbox/report-blocker.js +23 -73
  719. package/dist/tools/sandbox/skills.d.ts +16 -12
  720. package/dist/tools/sandbox/skills.js +16 -12
  721. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  722. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  723. package/dist/tools/start-report-session.d.ts +13 -5
  724. package/dist/tools/start-report-session.js +35 -8
  725. package/dist/tools/terminal-text.d.ts +5 -2
  726. package/dist/tools/terminal-text.js +35 -3
  727. package/dist/tools/workspace/decision-record.d.ts +4 -4
  728. package/dist/tools/workspace/decision-record.js +23 -13
  729. package/dist/tools/workspace/edit-file.d.ts +59 -20
  730. package/dist/tools/workspace/edit-file.js +81 -16
  731. package/dist/tools/workspace/execute-command.d.ts +15 -13
  732. package/dist/tools/workspace/execute-command.js +11 -9
  733. package/dist/tools/workspace/file-stat.d.ts +6 -3
  734. package/dist/tools/workspace/grep.d.ts +10 -7
  735. package/dist/tools/workspace/grep.js +9 -3
  736. package/dist/tools/workspace/list-files.d.ts +6 -3
  737. package/dist/tools/workspace/mutator.d.ts +28 -15
  738. package/dist/tools/workspace/mutator.js +107 -53
  739. package/dist/tools/workspace/read-file.d.ts +8 -5
  740. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  741. package/dist/tools/workspace/result-bounds.js +4 -2
  742. package/dist/tools/workspace/run-exec.d.ts +2 -2
  743. package/dist/tools/workspace/run-exec.js +3 -3
  744. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  745. package/dist/tools/workspace/scan-inputs.js +17 -5
  746. package/dist/tools/workspace/show-file.d.ts +1 -1
  747. package/dist/tools/workspace/show-file.js +2 -1
  748. package/dist/tools/workspace/show-plan.d.ts +8 -5
  749. package/dist/tools/workspace/show-plan.js +9 -8
  750. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  751. package/dist/tools/workspace/workspace-search.js +27 -14
  752. package/dist/tools/workspace/write-file.d.ts +9 -7
  753. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  754. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  755. package/dist/workflows/execute-analysis.d.ts +46 -62
  756. package/dist/workflows/execute-analysis.js +137 -219
  757. package/dist/workflows/pause.d.ts +71 -0
  758. package/dist/workflows/pause.js +173 -0
  759. package/dist/workflows/sandbox-step.d.ts +38 -61
  760. package/dist/workflows/sandbox-step.js +99 -106
  761. package/dist/workflows/test/sql-writes.d.ts +21 -0
  762. package/dist/workflows/test/sql-writes.js +36 -0
  763. package/dist/workspace/filesystem.d.ts +6 -6
  764. package/dist/workspace/filesystem.js +10 -8
  765. package/dist/workspace/paths.d.ts +1 -1
  766. package/dist/workspace/paths.js +15 -4
  767. package/dist/workspace/search-config.d.ts +2 -2
  768. package/dist/workspace/search-config.js +1 -1
  769. package/package.json +21 -22
  770. package/dist/loop/call-guard.d.ts +0 -50
  771. package/dist/loop/call-guard.js +0 -90
  772. package/dist/loop/continue-agent.d.ts +0 -40
  773. package/dist/loop/continue-agent.js +0 -38
  774. package/dist/loop/genai-spans.d.ts +0 -47
  775. package/dist/loop/genai-spans.js +0 -134
  776. package/dist/loop/run-agent.d.ts +0 -245
  777. package/dist/loop/run-agent.js +0 -1124
  778. package/dist/loop/run-step.d.ts +0 -29
  779. package/dist/loop/run-step.js +0 -34
  780. package/dist/loop/run-to-terminal.d.ts +0 -66
  781. package/dist/loop/run-to-terminal.js +0 -93
  782. package/dist/loop/tool-mask.d.ts +0 -23
  783. package/dist/loop/tool-mask.js +0 -46
  784. package/dist/providers/streaming-chat.d.ts +0 -32
  785. package/dist/providers/streaming-chat.js +0 -91
  786. package/dist/tasks/derive-table-exec.d.ts +0 -54
  787. package/dist/tasks/derive-table-exec.js +0 -86
  788. package/dist/workflows/suspension.d.ts +0 -32
  789. package/dist/workflows/suspension.js +0 -38
@@ -12,16 +12,20 @@
12
12
  * logger. The error contract: an expected
13
13
  * outcome ("not found", "no results") stays in the ok channel as a data
14
14
  * variant (`ok({ found: false })`); an unexpected failure is an `err(ToolError)`
15
- * or a throw. The loop (`dispatchTool`) owns the `is_error` envelope — it maps
16
- * both `err` and a thrown error to one `tool_result { is_error: true }`.
15
+ * or a throw. The tool adapter of the loop (`loop/tool-adapter.ts`) maps both
16
+ * `err` and a thrown error to one error result.
17
+ *
18
+ * Each call runs as one durable step inside a workflow. Thus a tool body must be
19
+ * safe to run again from its start, and its result must carry each fact that a
20
+ * caller reads later.
17
21
  */
18
22
  import type { Result } from "neverthrow";
19
23
  import { z } from "zod";
20
24
  import type { AgentSession } from "../auth/types.js";
21
25
  import type { AgentRunUsage } from "../loop/metrics.js";
22
26
  import type { EmitFn } from "../loop/types.js";
23
- import type { AskApproval, AskRequest } from "./approval/contract.js";
24
- export type { EmitFn };
27
+ import type { AskRequest } from "./approval/contract.js";
28
+ export type { EmitFn } from "../loop/types.js";
25
29
  /**
26
30
  * The error channel of a tool's `Result`. `error` is the message surfaced to
27
31
  * the model in the `is_error` `tool_result`; `retryable` tells it whether
@@ -30,18 +34,11 @@ export type { EmitFn };
30
34
  * builds one by hand — most failures stay thrown and the loop's backstop
31
35
  * derives the same shape via `classifyProviderError`.
32
36
  */
33
- export interface ToolError {
37
+ export type ToolError = {
34
38
  readonly error: string;
35
39
  readonly retryable: boolean;
36
40
  readonly cause?: unknown;
37
- }
38
- /**
39
- * How the loop runs a tool call. `step` (the default) wraps the whole call in
40
- * one durable step, thus a replay returns the cached result and never runs the
41
- * body again. `inline` runs the call with no step, for a tool whose effects are
42
- * not durable work.
43
- */
44
- export type ToolExecutionMode = "step" | "inline";
41
+ };
45
42
  /** Runtime guard — does a `Result`'s error value carry the `ToolError` shape? */
46
43
  export declare function isToolError(value: unknown): value is ToolError;
47
44
  /**
@@ -51,10 +48,10 @@ export declare function isToolError(value: unknown): value is ToolError;
51
48
  * an image content block. Thus the model sees the picture, and the JSON text
52
49
  * holds no bytes.
53
50
  */
54
- export interface ToolResultImage {
51
+ export type ToolResultImage = {
55
52
  readonly base64: string;
56
53
  readonly mediaType: string;
57
- }
54
+ };
58
55
  /**
59
56
  * The reserved key that carries the pictures on a tool ok value. It is a symbol,
60
57
  * thus it never collides with a data field. `JSON.stringify` also omits a symbol
@@ -89,10 +86,10 @@ export declare function readToolResultImages(value: unknown): ToolResultImage[];
89
86
  *
90
87
  * A call record is what a call leaves for process-local state, for example the
91
88
  * lineage collector of a sandbox step. A replay returns the cached result of a
92
- * step-mode call and never runs its body, thus a side effect of the body on
93
- * such state is lost on recovery. The record goes into the cached dispatch
94
- * instead, and the loop hands it to `foldCallRecord` after the call settles, on
95
- * the first run and on each replay alike.
89
+ * call and never runs its body, thus a side effect of the body on such state is
90
+ * lost on recovery. The record goes into the output of the step instead, and
91
+ * the loop hands it to `foldCallRecord` after each round, on the first run and
92
+ * on each replay alike.
96
93
  *
97
94
  * It is a symbol, thus `JSON.stringify` omits it and the model never reads it.
98
95
  * The record itself must be plain JSON, because the step cache serializes it.
@@ -113,59 +110,58 @@ export declare function readToolCallRecord(value: unknown): unknown;
113
110
  /**
114
111
  * The request-scoped values passed to every tool's `execute`. No injected
115
112
  * dependencies (see the harness-durable-runtime spec) — invocation identity,
116
- * `session`, `signal`, `emit`, the `ask` user-approval seam, and the turn's
117
- * usage accumulator a sub-agent-running tool hands to its child loop.
113
+ * `session`, `signal`, `emit`, and the turn's usage accumulator a
114
+ * sub-agent-running tool hands to its child loop.
118
115
  */
119
- export interface ToolContext {
116
+ export type ToolContext = {
120
117
  /** Stable identity of this AI SDK tool call. Redelivery preserves it; a new
121
118
  * model-issued call receives a new value. */
122
119
  readonly invocationId: string;
123
120
  readonly session: AgentSession;
124
121
  readonly signal: AbortSignal;
125
122
  readonly emit: EmitFn;
126
- /**
127
- * Pause for an explicit user decision on a concrete action. Resolves with the
128
- * approval (`once`/`always`) or throws `AskRejectedError` on denial. Resolves
129
- * to a deny-by-default realization when the embedder wires none, so a tool
130
- * that calls it in a non-interactive context is denied rather than left
131
- * waiting on a surface that cannot answer.
132
- */
133
- readonly ask: (request: AskRequest) => Promise<AskApproval>;
134
123
  /**
135
124
  * The turn's usage accumulator — the mutable total every loop under this
136
- * turn folds its LLM calls into. A tool that drives a child `runAgent`
125
+ * turn folds its LLM calls into. A tool that drives a child loop
137
126
  * passes it straight into that run's options, which is what puts the
138
127
  * child's tokens in the turn total its root loop reports. A tool that runs
139
128
  * no child agent ignores it.
140
129
  */
141
130
  readonly turnUsage?: AgentRunUsage;
142
- }
131
+ };
132
+ /** What the approval hook of a tool reads of its call. */
133
+ export type ToolApprovalContext = {
134
+ readonly invocationId: string;
135
+ readonly session: AgentSession;
136
+ };
143
137
  /**
144
138
  * A packaged tool: identity, the Zod input contract, the emitted AI SDK input
145
- * schema, execution mode, the optional hooks, and the executor.
139
+ * schema, the optional hooks, and the executor.
146
140
  */
147
- export interface Tool<Input = unknown, Output = unknown> {
141
+ export type Tool<Input = unknown, Output = unknown> = {
148
142
  readonly id: string;
149
143
  readonly description: string;
150
- readonly inputSchema: z.ZodType;
144
+ readonly inputSchema: z.ZodType<Input>;
151
145
  readonly jsonSchema: Record<string, unknown>;
152
- readonly executionMode: ToolExecutionMode;
153
146
  /** See {@link ToolDefinition.describeCall}. Absent when the tool declares none. */
154
- describeCall?(input: Input): string;
147
+ describeCall?(input: Input): string | undefined;
155
148
  /** See {@link ToolDefinition.describeResult}. Absent when the tool declares none. */
156
- describeResult?(input: Input, result: Output): string;
149
+ describeResult?(input: Input, result: Output): string | undefined;
157
150
  /**
158
151
  * See {@link ToolDefinition.foldCallRecord}. The record arrives untyped: the
159
152
  * loop passes back only what the `execute` of the same tool attached.
160
153
  */
161
154
  foldCallRecord?(record: unknown): void;
155
+ /** See {@link ToolDefinition.approval}. Absent when the call of the tool never needs the decision of a user. */
156
+ approval?(input: Input, ctx: ToolApprovalContext): AskRequest | undefined | Promise<AskRequest | undefined>;
157
+ /** See {@link ToolDefinition.startsWorkflow}. */
158
+ readonly startsWorkflow?: boolean;
162
159
  execute(input: Input, ctx: ToolContext): Promise<Result<Output, ToolError>>;
163
- }
164
- export interface ToolDefinition<Schema extends z.ZodType, Output> {
160
+ };
161
+ export type ToolDefinition<Schema extends z.ZodType<z.output<Schema>>, Output> = {
165
162
  readonly id: string;
166
163
  readonly description: string;
167
164
  readonly inputSchema: Schema;
168
- readonly executionMode?: ToolExecutionMode;
169
165
  /**
170
166
  * One line that names what THIS call does — the call-time counterpart of
171
167
  * `description`. `description` self-describes the tool at attach time, so an
@@ -198,7 +194,7 @@ export interface ToolDefinition<Schema extends z.ZodType, Output> {
198
194
  *
199
195
  * The hook never reaches the model.
200
196
  */
201
- describeCall: ((input: z.infer<Schema>) => string) | "none";
197
+ describeCall: ((input: z.infer<Schema>) => string | undefined) | "none";
202
198
  /**
203
199
  * One line that names what THIS call PRODUCED — the outcome-time counterpart
204
200
  * of `describeCall`. A page path, a recorded id, and a listed count are facts
@@ -228,12 +224,12 @@ export interface ToolDefinition<Schema extends z.ZodType, Output> {
228
224
  *
229
225
  * The hook never reaches the model.
230
226
  */
231
- readonly describeResult?: (input: z.infer<Schema>, result: Output) => string;
227
+ readonly describeResult?: (input: z.infer<Schema>, result: Output) => string | undefined;
232
228
  /**
233
229
  * Fold the call record of one settled call into process-local state. The
234
230
  * record is the one that `execute` attached with `withToolCallRecord`.
235
231
  *
236
- * The loop runs the hook after the round settles, in the order of the tool
232
+ * The loop runs the hook after each round, in the order of the tool
237
233
  * calls, on the first run and on each replay alike. Thus state that a
238
234
  * replay rebuilds from scratch sees the same records in the same order. A
239
235
  * call whose ok value carries no record, and a failed call, never reach it.
@@ -242,8 +238,21 @@ export interface ToolDefinition<Schema extends z.ZodType, Output> {
242
238
  * and its result may already be cached. The loop logs a throw and goes on.
243
239
  */
244
240
  readonly foldCallRecord?: (record: ToolCallRecordOf<Output>) => void;
241
+ /**
242
+ * The approval that a call needs, decided from its input before `execute` runs. The hook gives the request that
243
+ * a surface shows the user, or nothing when the call runs with no question. It can read the disk and the
244
+ * database, and it changes nothing. `execute` checks its input again, because a file can change while the user
245
+ * decides. A loop where no surface can answer denies each request.
246
+ */
247
+ readonly approval?: (input: z.infer<Schema>, ctx: ToolApprovalContext) => AskRequest | undefined | Promise<AskRequest | undefined>;
248
+ /**
249
+ * The call starts a child workflow, for example a sub-agent. A step cannot start a workflow, thus such a call
250
+ * runs in the body of the workflow, and its child holds the checkpoints of its work. `execute` must start the
251
+ * child before its first `await`, thus the parallel calls of one reply keep their order on a replay.
252
+ */
253
+ readonly startsWorkflow?: boolean;
245
254
  execute(input: z.infer<Schema>, ctx: ToolContext): Promise<Result<Output, ToolError>>;
246
- }
255
+ };
247
256
  /**
248
257
  * Package a `Tool`. The emitted JSON Schema must have a top-level
249
258
  * `"type": "object"` — model tool calling rejects anything else. A `z.discriminatedUnion`
@@ -251,4 +260,4 @@ export interface ToolDefinition<Schema extends z.ZodType, Output> {
251
260
  * the first LLM call). Union-shaped inputs must be modelled as a flat object
252
261
  * with a discriminator field.
253
262
  */
254
- export declare function defineTool<Schema extends z.ZodType, Output>(def: ToolDefinition<Schema, Output>): Tool<z.infer<Schema>, Output>;
263
+ export declare function defineTool<Schema extends z.ZodType<z.output<Schema>>, Output>(def: ToolDefinition<Schema, Output>): Tool<z.infer<Schema>, Output>;
@@ -12,13 +12,22 @@
12
12
  * logger. The error contract: an expected
13
13
  * outcome ("not found", "no results") stays in the ok channel as a data
14
14
  * variant (`ok({ found: false })`); an unexpected failure is an `err(ToolError)`
15
- * or a throw. The loop (`dispatchTool`) owns the `is_error` envelope — it maps
16
- * both `err` and a thrown error to one `tool_result { is_error: true }`.
15
+ * or a throw. The tool adapter of the loop (`loop/tool-adapter.ts`) maps both
16
+ * `err` and a thrown error to one error result.
17
+ *
18
+ * Each call runs as one durable step inside a workflow. Thus a tool body must be
19
+ * safe to run again from its start, and its result must carry each fact that a
20
+ * caller reads later.
17
21
  */
18
22
  import { z } from "zod";
19
23
  /** Runtime guard — does a `Result`'s error value carry the `ToolError` shape? */
20
24
  export function isToolError(value) {
21
- return typeof value === "object" && value !== null && typeof value.error === "string" && typeof value.retryable === "boolean";
25
+ return (typeof value === "object" &&
26
+ value !== null &&
27
+ "error" in value &&
28
+ typeof value.error === "string" &&
29
+ "retryable" in value &&
30
+ typeof value.retryable === "boolean");
22
31
  }
23
32
  /**
24
33
  * The reserved key that carries the pictures on a tool ok value. It is a symbol,
@@ -46,8 +55,7 @@ export function withToolResultImages(value, images) {
46
55
  function isToolResultImage(entry) {
47
56
  if (typeof entry !== "object" || entry === null)
48
57
  return false;
49
- const { base64, mediaType } = entry;
50
- return typeof base64 === "string" && typeof mediaType === "string";
58
+ return "base64" in entry && typeof entry.base64 === "string" && "mediaType" in entry && typeof entry.mediaType === "string";
51
59
  }
52
60
  /**
53
61
  * Read the pictures that a tool ok value carries, in order. A value with none
@@ -58,7 +66,7 @@ function isToolResultImage(entry) {
58
66
  export function readToolResultImages(value) {
59
67
  if (typeof value !== "object" || value === null)
60
68
  return [];
61
- const carried = value[toolResultImageKey];
69
+ const carried = toolResultImageKey in value ? value[toolResultImageKey] : undefined;
62
70
  const entries = Array.isArray(carried) ? carried : [carried];
63
71
  return entries.filter(isToolResultImage);
64
72
  }
@@ -67,10 +75,10 @@ export function readToolResultImages(value) {
67
75
  *
68
76
  * A call record is what a call leaves for process-local state, for example the
69
77
  * lineage collector of a sandbox step. A replay returns the cached result of a
70
- * step-mode call and never runs its body, thus a side effect of the body on
71
- * such state is lost on recovery. The record goes into the cached dispatch
72
- * instead, and the loop hands it to `foldCallRecord` after the call settles, on
73
- * the first run and on each replay alike.
78
+ * call and never runs its body, thus a side effect of the body on such state is
79
+ * lost on recovery. The record goes into the output of the step instead, and
80
+ * the loop hands it to `foldCallRecord` after each round, on the first run and
81
+ * on each replay alike.
74
82
  *
75
83
  * It is a symbol, thus `JSON.stringify` omits it and the model never reads it.
76
84
  * The record itself must be plain JSON, because the step cache serializes it.
@@ -84,7 +92,7 @@ export function withToolCallRecord(value, record) {
84
92
  export function readToolCallRecord(value) {
85
93
  if (typeof value !== "object" || value === null)
86
94
  return undefined;
87
- return value[toolCallRecordKey];
95
+ return toolCallRecordKey in value ? value[toolCallRecordKey] : undefined;
88
96
  }
89
97
  /**
90
98
  * Package a `Tool`. The emitted JSON Schema must have a top-level
@@ -103,25 +111,29 @@ export function defineTool(def) {
103
111
  `top-level "type" — model the input as a flat object with a ` +
104
112
  `discriminator field instead.`);
105
113
  }
106
- const executionMode = def.executionMode ?? "step";
107
- return {
114
+ const packaged = {
108
115
  id: def.id,
109
116
  description: def.description,
110
117
  inputSchema: def.inputSchema,
111
118
  jsonSchema,
112
- executionMode,
113
- // Spread rather than assigned: a tool that declines carries no
114
- // `describeCall` key at all, so "has a hook" is one property check.
115
- // `typeof` is the discriminator, not equality with the sentinel, so a
116
- // hook that returns the string `"none"` still packages as a hook.
117
- ...(typeof def.describeCall === "function" ? { describeCall: def.describeCall } : {}),
118
- // The same property-presence pattern as `describeCall`: a tool that
119
- // declares no result hook carries no key, thus "has a hook" is one
120
- // property check on either side.
121
- ...(typeof def.describeResult === "function" ? { describeResult: def.describeResult } : {}),
122
- // The loop passes back only a record that this tool's `execute`
123
- // attached, thus the record has the declared type.
124
- ...(typeof def.foldCallRecord === "function" ? { foldCallRecord: def.foldCallRecord } : {}),
125
- execute: def.execute,
119
+ execute: def.execute.bind(def),
126
120
  };
121
+ if (typeof def.foldCallRecord === "function")
122
+ packaged.foldCallRecord = def.foldCallRecord.bind(def);
123
+ if (typeof def.approval === "function")
124
+ packaged.approval = def.approval.bind(def);
125
+ // A tool that declines carries no `describeCall` key at all, so "has a
126
+ // hook" is one property check. The test is equality with the `"none"`
127
+ // sentinel: a function never equals it, so a hook that returns the string
128
+ // `"none"` still packages as a hook.
129
+ if (def.describeCall !== "none")
130
+ packaged.describeCall = def.describeCall;
131
+ // The same property-presence pattern as `describeCall`: a tool that
132
+ // declares no result hook carries no key, thus "has a hook" is one
133
+ // property check on either side.
134
+ if (def.describeResult !== undefined)
135
+ packaged.describeResult = def.describeResult;
136
+ if (def.startsWorkflow === true)
137
+ return { ...packaged, startsWorkflow: true };
138
+ return packaged;
127
139
  }
@@ -20,13 +20,13 @@
20
20
  * Pure: the input spec is never mutated. Modified branches are copy-on-write; untouched branches are
21
21
  * shared by reference. `normalize(normalize(x))` deep-equals `normalize(x)`.
22
22
  */
23
- export interface NormalizeEchartSpecOptions {
23
+ export type NormalizeEchartSpecOptions = {
24
24
  /**
25
25
  * The `show_user` `title` param — the card heading rendered above the chart canvas. Seeds the
26
26
  * `saveAsImage` download filename when the author supplied none.
27
27
  */
28
28
  title?: string;
29
- }
29
+ };
30
30
  /**
31
31
  * Kebab-case download filename: `"HMGCR — VST Expression"` → `"hmgcr-vst-expression"`.
32
32
  * Diacritics are folded, every other non-alphanumeric run collapses to a single dash.
@@ -20,6 +20,7 @@
20
20
  * Pure: the input spec is never mutated. Modified branches are copy-on-write; untouched branches are
21
21
  * shared by reference. `normalize(normalize(x))` deep-equals `normalize(x)`.
22
22
  */
23
+ import { isUnknownArray } from "../../lib/unknown-array.js";
23
24
  /** Max length of a derived `saveAsImage` filename. */
24
25
  const MAX_FILENAME_LEN = 64;
25
26
  /** Fallback download filename when no heading is available to derive one from. */
@@ -38,14 +39,29 @@ function axisEntries(axis) {
38
39
  * Diacritics are folded, every other non-alphanumeric run collapses to a single dash.
39
40
  */
40
41
  export function kebabFilename(source) {
41
- const slug = (source ?? "")
42
- .normalize("NFKD")
43
- .replace(/[\u0300-\u036f]/g, "")
44
- .toLowerCase()
45
- .replace(/[^a-z0-9]+/g, "-")
46
- .slice(0, MAX_FILENAME_LEN)
47
- .replace(/^-+|-+$/g, "");
48
- return slug.length > 0 ? slug : DEFAULT_FILENAME;
42
+ let out = "";
43
+ let inRun = false;
44
+ for (const char of (source ?? "").normalize("NFKD").toLowerCase()) {
45
+ if (char >= "\u0300" && char <= "\u036f")
46
+ continue;
47
+ const isSlugChar = (char >= "a" && char <= "z") || (char >= "0" && char <= "9");
48
+ if (!isSlugChar) {
49
+ inRun = true;
50
+ continue;
51
+ }
52
+ if (inRun && out.length > 0)
53
+ out += "-";
54
+ inRun = false;
55
+ out += char;
56
+ if (out.length >= MAX_FILENAME_LEN)
57
+ break;
58
+ }
59
+ // One append can add two characters, so the cap can land between a dash and the letter it introduces.
60
+ if (out.length > MAX_FILENAME_LEN)
61
+ out = out.slice(0, MAX_FILENAME_LEN);
62
+ if (out.endsWith("-"))
63
+ out = out.slice(0, -1);
64
+ return out.length > 0 ? out : DEFAULT_FILENAME;
49
65
  }
50
66
  /** Declared series count. `0` = none declared, which is also "nothing a legend could label". */
51
67
  function seriesCount(spec) {
@@ -164,7 +180,7 @@ export function normalizeEchartSpec(spec, opts = {}) {
164
180
  const axis = out[key];
165
181
  // A malformed entry is passed through rather than dropped — normalization rewrites layout,
166
182
  // never the shape of the spec it was handed.
167
- if (Array.isArray(axis))
183
+ if (isUnknownArray(axis))
168
184
  out[key] = axis.map((entry) => (isRecord(entry) ? normalizeAxis(entry, key === "xAxis") : entry));
169
185
  else if (isRecord(axis))
170
186
  out[key] = normalizeAxis(axis, key === "xAxis");
@@ -178,13 +194,18 @@ export function normalizeEchartSpec(spec, opts = {}) {
178
194
  const gridNormalizable = cartesian && !Array.isArray(grid) && (grid === undefined || (isRecord(grid) && grid.width === undefined && grid.height === undefined));
179
195
  if (gridNormalizable) {
180
196
  const authored = isRecord(grid) ? grid : {};
181
- out.grid = {
182
- ...authored,
183
- ...(authored.top === undefined ? { top: out.graphic !== undefined ? "12%" : "8%" } : {}),
184
- ...(authored.bottom === undefined ? { bottom: rotated ? (bottomLegend ? "30%" : "25%") : "20%" } : {}),
185
- ...(authored.left === undefined ? { left: "10%" } : {}),
186
- ...(authored.right === undefined ? { right: "5%" } : {}),
187
- };
197
+ const filled = { ...authored };
198
+ const annotated = out.graphic !== undefined && !(isUnknownArray(out.graphic) && out.graphic.length === 0);
199
+ if (authored.top === undefined)
200
+ filled.top = annotated ? "12%" : "8%";
201
+ // oxlint-disable-next-line no-unnecessary-condition -- tsgolint cannot see the normalizeAxis closure that sets rotated; the check is live (rotated labels get the larger bottom margin).
202
+ if (authored.bottom === undefined)
203
+ filled.bottom = rotated ? (bottomLegend ? "30%" : "25%") : "20%";
204
+ if (authored.left === undefined)
205
+ filled.left = "10%";
206
+ if (authored.right === undefined)
207
+ filled.right = "5%";
208
+ out.grid = filled;
188
209
  }
189
210
  // ── Toolbox ─────────────────────────────────────────────────────────
190
211
  if (!Array.isArray(out.toolbox)) {
@@ -194,18 +215,21 @@ export function normalizeEchartSpec(spec, opts = {}) {
194
215
  // The in-spec title is stripped, but it is still the author's own description of the chart —
195
216
  // a better filename seed than the generic fallback when no card title was given.
196
217
  const specTitleText = isRecord(specTitle) && typeof specTitle.text === "string" ? specTitle.text : undefined;
197
- out.toolbox = {
198
- ...authored,
199
- ...(hasPlacement(authored) ? {} : { right: 0, top: 0 }),
200
- feature: {
201
- ...feature,
202
- saveAsImage: {
203
- ...saveAsImage,
204
- ...(saveAsImage.type === undefined ? { type: "png" } : {}),
205
- ...(saveAsImage.name === undefined ? { name: kebabFilename(opts.title ?? specTitleText) } : {}),
206
- },
207
- },
218
+ const placed = { ...authored };
219
+ if (!hasPlacement(authored)) {
220
+ placed.right = 0;
221
+ placed.top = 0;
222
+ }
223
+ const saved = { ...saveAsImage };
224
+ if (saveAsImage.type === undefined)
225
+ saved.type = "png";
226
+ if (saveAsImage.name === undefined)
227
+ saved.name = kebabFilename(opts.title ?? specTitleText);
228
+ placed.feature = {
229
+ ...feature,
230
+ saveAsImage: saved,
208
231
  };
232
+ out.toolbox = placed;
209
233
  }
210
234
  return out;
211
235
  }
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * The presentation `id` is derived deterministically from the content, so
11
11
  * an identical re-emission carries the same id — duplicate suppression is a
12
- * downstream reconciliation concern of the emit pipeline (change 3), not a
12
+ * downstream reconciliation concern of the emit pipeline, not a
13
13
  * per-request `Set` smuggled through an ambient context bag.
14
14
  *
15
15
  * An `echart` spec's layout is normalized (`normalize-echart-spec.ts`) inside
@@ -26,7 +26,7 @@ type ShowUserOutput = {
26
26
  id: string;
27
27
  };
28
28
  export declare const showUserTool: import("../define-tool.js").Tool<{
29
- kind: "code" | "echart" | "markdown" | "svg" | "table" | "structure";
29
+ kind: "code" | "echart" | "markdown" | "structure" | "svg" | "table";
30
30
  title?: string | undefined;
31
31
  spec?: Record<string, unknown> | undefined;
32
32
  dataPath?: string | undefined;
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * The presentation `id` is derived deterministically from the content, so
11
11
  * an identical re-emission carries the same id — duplicate suppression is a
12
- * downstream reconciliation concern of the emit pipeline (change 3), not a
12
+ * downstream reconciliation concern of the emit pipeline, not a
13
13
  * per-request `Set` smuggled through an ambient context bag.
14
14
  *
15
15
  * An `echart` spec's layout is normalized (`normalize-echart-spec.ts`) inside
@@ -3,7 +3,9 @@
3
3
  * hoc analyses. Both modes launch the ordinary executeAnalysis workflow.
4
4
  */
5
5
  import { ResultAsync } from "neverthrow";
6
- import type { Pool } from "pg";
6
+ import { type Connectable } from "../lib/db-result.js";
7
+ import type { Querier } from "../state/db.js";
8
+ import { z } from "zod";
7
9
  import type { AgentSession } from "../auth/types.js";
8
10
  import type { UsageRecorder } from "../billing/usage-recorder.js";
9
11
  import type { EnvironmentStorePaths } from "../config/environment-stores.js";
@@ -16,9 +18,18 @@ import type { ExtendAnalysisFarm } from "../sandbox/types.js";
16
18
  import { type AnalysisPlan } from "../schemas/workflow-state.js";
17
19
  import type { ExecuteAnalysisInput, ExecuteAnalysisResult } from "../workflows/execute-analysis.js";
18
20
  import { type AdHocRoute } from "./ad-hoc-router.js";
21
+ import { type Tool } from "./define-tool.js";
22
+ declare const inputSchema: z.ZodObject<{
23
+ mode: z.ZodEnum<{
24
+ adhoc: "adhoc";
25
+ plan: "plan";
26
+ }>;
27
+ planId: z.ZodOptional<z.ZodString>;
28
+ request: z.ZodOptional<z.ZodString>;
29
+ }, z.core.$strip>;
19
30
  type ExecuteAnalysisWorkflow = (input: ExecuteAnalysisInput) => Promise<ExecuteAnalysisResult>;
20
- export interface ExecuteAnalysisToolDeps extends Pick<EnvironmentStorePaths, "farmLockFile" | "imagePackagesFile" | "readPoolInventory" | "refStorePath"> {
21
- readonly pool: Pool;
31
+ export type ExecuteAnalysisToolDeps = Pick<EnvironmentStorePaths, "farmLockFile" | "imagePackagesFile" | "readPoolInventory" | "refStorePath"> & {
32
+ readonly pool: Querier & Connectable;
22
33
  readonly executeAnalysisWorkflow: ExecuteAnalysisWorkflow;
23
34
  readonly runAuthorizer: RunAuthorizer;
24
35
  readonly runLauncher: RunLauncher;
@@ -34,7 +45,7 @@ export interface ExecuteAnalysisToolDeps extends Pick<EnvironmentStorePaths, "fa
34
45
  readonly extendAnalysisFarm?: ExtendAnalysisFarm;
35
46
  /** Falls back to the no-op recorder when omitted. */
36
47
  readonly usageRecorder?: UsageRecorder;
37
- }
48
+ };
38
49
  export declare class PlanNotFoundError extends Error {
39
50
  constructor(planId: string);
40
51
  }
@@ -116,12 +127,14 @@ export type LaunchPlanRunRefusal = {
116
127
  export declare function buildAdHocPlan(request: string, route: AdHocRoute, createdAt?: string): AnalysisPlan;
117
128
  /**
118
129
  * `newestRunId` is the newest run of the plan that the caller saw, or `null` when the caller saw no run.
119
- * Without it, the launch compares no run.
130
+ * Without it, the launch compares no run. `runId` is the id of the run that this launch starts, and a
131
+ * second launch with the same id starts nothing new. Without it, the launch takes a random id.
120
132
  */
121
133
  export type LaunchPlanRunInput = {
122
134
  session: AgentSession;
123
135
  planId: string;
124
136
  newestRunId?: string | null;
137
+ runId?: string;
125
138
  };
126
139
  /**
127
140
  * Start the run of a stored plan. It reads the plan under the analysis of the session, validates it,
@@ -134,11 +147,7 @@ export type LaunchPlanRunInput = {
134
147
  * promise.
135
148
  */
136
149
  export declare function launchPlanRun(deps: LaunchPlanRunDeps, input: LaunchPlanRunInput): ResultAsync<PlanLaunch, LaunchPlanRunRefusal>;
137
- export declare function createExecuteAnalysisTool(deps: ExecuteAnalysisToolDeps): import("./define-tool.js").Tool<{
138
- mode: "plan" | "adhoc";
139
- planId?: string | undefined;
140
- request?: string | undefined;
141
- }, {
150
+ export declare function createExecuteAnalysisTool(deps: ExecuteAnalysisToolDeps): Tool<z.infer<typeof inputSchema>, {
142
151
  runId: string;
143
152
  status: "in_progress";
144
153
  }>;