@inflexa-ai/harness 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (802) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +19 -3
  3. package/dist/agents/conversation-agent.js +49 -30
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +35 -16
  9. package/dist/agents/sandbox/shared.js +63 -24
  10. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  11. package/dist/agents/sandbox/types.d.ts +26 -3
  12. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  13. package/dist/agents/sandbox/validate-skills.js +3 -1
  14. package/dist/agents/sandbox-catalog.d.ts +16 -2
  15. package/dist/agents/sandbox-catalog.js +22 -3
  16. package/dist/agents/system-prompt.d.ts +2 -2
  17. package/dist/app/approve-plan.d.ts +5 -2
  18. package/dist/app/approve-plan.js +1 -1
  19. package/dist/app/chat-turn-workflow.d.ts +114 -0
  20. package/dist/app/chat-turn-workflow.js +307 -0
  21. package/dist/app/chat-turn.d.ts +85 -57
  22. package/dist/app/chat-turn.js +125 -99
  23. package/dist/app/data-profile-orientation.js +10 -8
  24. package/dist/app/data-profile-view.d.ts +4 -4
  25. package/dist/app/data-profile-view.js +9 -8
  26. package/dist/app/in-process-turn.d.ts +42 -0
  27. package/dist/app/in-process-turn.js +139 -0
  28. package/dist/app/message-assembly.d.ts +10 -4
  29. package/dist/app/message-assembly.js +13 -8
  30. package/dist/app/report-session-runtime.d.ts +4 -4
  31. package/dist/app/report-session-runtime.js +36 -21
  32. package/dist/app/spawn-report-session.d.ts +33 -28
  33. package/dist/app/spawn-report-session.js +25 -40
  34. package/dist/app/synthesize-run.d.ts +22 -16
  35. package/dist/app/synthesize-run.js +41 -35
  36. package/dist/app/work.d.ts +96 -0
  37. package/dist/app/work.js +147 -0
  38. package/dist/auth/local-auth-context.d.ts +1 -3
  39. package/dist/auth/local-auth-context.js +1 -3
  40. package/dist/auth/local-run-authorizer.d.ts +1 -1
  41. package/dist/auth/local-run-authorizer.js +5 -3
  42. package/dist/auth/types.d.ts +26 -26
  43. package/dist/billing/cached-resolver.d.ts +4 -4
  44. package/dist/billing/run-charge.d.ts +5 -8
  45. package/dist/billing/run-charge.js +2 -2
  46. package/dist/billing/usage-recorder.d.ts +9 -9
  47. package/dist/citations/aggregate.js +1 -1
  48. package/dist/citations/clients/arxiv.d.ts +2 -2
  49. package/dist/citations/clients/arxiv.js +12 -4
  50. package/dist/citations/clients/common.js +4 -2
  51. package/dist/citations/clients/crossref.d.ts +2 -2
  52. package/dist/citations/clients/crossref.js +37 -37
  53. package/dist/citations/clients/doi-registry.js +15 -16
  54. package/dist/citations/clients/pubmed.d.ts +2 -2
  55. package/dist/citations/clients/pubmed.js +20 -13
  56. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  57. package/dist/citations/clients/semantic-scholar.js +9 -9
  58. package/dist/citations/compare.js +2 -2
  59. package/dist/citations/match.d.ts +2 -2
  60. package/dist/citations/match.js +12 -7
  61. package/dist/citations/normalize.js +35 -26
  62. package/dist/citations/plan.js +6 -2
  63. package/dist/citations/resolve.d.ts +6 -6
  64. package/dist/citations/resolve.js +34 -25
  65. package/dist/citations/types.d.ts +77 -77
  66. package/dist/config/environment-stores.d.ts +10 -8
  67. package/dist/config/resource-limits.js +1 -3
  68. package/dist/contracts/analogy-report.d.ts +7 -7
  69. package/dist/contracts/analogy-report.js +2 -2
  70. package/dist/contracts/chat-events.d.ts +46 -22
  71. package/dist/contracts/chat-events.js +1 -1
  72. package/dist/contracts/chat-frame.d.ts +15 -5
  73. package/dist/contracts/chat-frame.js +67 -40
  74. package/dist/contracts/chat-parts.d.ts +130 -67
  75. package/dist/contracts/chat-parts.js +1 -0
  76. package/dist/contracts/content-url.js +16 -2
  77. package/dist/contracts/data-profile.d.ts +38 -38
  78. package/dist/contracts/index.d.ts +3 -3
  79. package/dist/contracts/index.js +1 -1
  80. package/dist/contracts/message.d.ts +6 -6
  81. package/dist/contracts/organ-system.d.ts +11 -11
  82. package/dist/contracts/part-registry.d.ts +5 -4
  83. package/dist/contracts/part-registry.js +5 -0
  84. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  85. package/dist/contracts/profile-vocabulary.js +10 -3
  86. package/dist/contracts/report-blocks.d.ts +329 -329
  87. package/dist/contracts/report-reference.d.ts +105 -81
  88. package/dist/contracts/report-reference.js +30 -13
  89. package/dist/contracts/schemas/chat-events.d.ts +45 -6
  90. package/dist/contracts/schemas/chat-events.js +16 -0
  91. package/dist/contracts/schemas/chat-parts.d.ts +214 -102
  92. package/dist/contracts/schemas/chat-parts.js +50 -7
  93. package/dist/contracts/schemas/index.d.ts +1 -1
  94. package/dist/contracts/schemas/index.js +1 -1
  95. package/dist/contracts/severity.d.ts +1 -1
  96. package/dist/contracts/structure-source.d.ts +3 -3
  97. package/dist/contracts/structure-source.js +6 -2
  98. package/dist/contracts/subagent-activity.d.ts +2 -2
  99. package/dist/contracts/subagent-activity.js +5 -3
  100. package/dist/contracts/usage.d.ts +2 -2
  101. package/dist/data/safety-panel-schema.d.ts +25 -25
  102. package/dist/data/safety-panel-schema.js +13 -4
  103. package/dist/execution/artifact-metadata.d.ts +23 -15
  104. package/dist/execution/artifact-metadata.js +33 -10
  105. package/dist/execution/artifact-record.d.ts +2 -2
  106. package/dist/execution/artifact-registration.d.ts +5 -5
  107. package/dist/execution/artifact-registry.d.ts +8 -8
  108. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  109. package/dist/execution/dbos-run-launcher.js +58 -4
  110. package/dist/execution/dbos-workflow-purger.d.ts +7 -6
  111. package/dist/execution/dbos-workflow-purger.js +29 -21
  112. package/dist/execution/input-signature.d.ts +2 -2
  113. package/dist/execution/post-step-pipeline.d.ts +9 -9
  114. package/dist/execution/post-step-pipeline.js +1 -1
  115. package/dist/execution/post-step.js +2 -2
  116. package/dist/execution/reconcile-manifest.d.ts +4 -4
  117. package/dist/execution/reconcile-manifest.js +3 -2
  118. package/dist/execution/run-authorizer.d.ts +46 -37
  119. package/dist/execution/run-authorizer.js +8 -8
  120. package/dist/execution/run-canceler.d.ts +39 -17
  121. package/dist/execution/run-canceler.js +137 -28
  122. package/dist/execution/run-end-record.d.ts +29 -0
  123. package/dist/execution/run-end-record.js +27 -0
  124. package/dist/execution/run-event-parts.d.ts +0 -8
  125. package/dist/execution/run-event-parts.js +29 -24
  126. package/dist/execution/run-event-stream.d.ts +8 -8
  127. package/dist/execution/run-event-stream.js +3 -4
  128. package/dist/execution/run-launcher.d.ts +4 -4
  129. package/dist/execution/run-synthesis.d.ts +49 -48
  130. package/dist/execution/run-synthesis.js +96 -255
  131. package/dist/execution/staged-input.d.ts +2 -2
  132. package/dist/execution/step-summary.d.ts +6 -6
  133. package/dist/execution/step-summary.js +4 -8
  134. package/dist/execution/topo-sort.js +4 -3
  135. package/dist/execution/workflow-purger.d.ts +2 -2
  136. package/dist/index.d.ts +25 -24
  137. package/dist/index.js +36 -37
  138. package/dist/input-sanitization.js +9 -2
  139. package/dist/input-scan/clustering.d.ts +6 -6
  140. package/dist/input-scan/clustering.js +11 -5
  141. package/dist/input-scan/companions.js +3 -2
  142. package/dist/input-scan/detect-sets.d.ts +2 -2
  143. package/dist/input-scan/detect-sets.js +25 -21
  144. package/dist/input-scan/enrich.d.ts +6 -6
  145. package/dist/input-scan/enrich.js +29 -12
  146. package/dist/input-scan/formats.d.ts +2 -2
  147. package/dist/input-scan/formats.js +8 -2
  148. package/dist/input-scan/markers.d.ts +2 -2
  149. package/dist/input-scan/markers.js +14 -5
  150. package/dist/input-scan/menu.d.ts +10 -10
  151. package/dist/input-scan/menu.js +0 -0
  152. package/dist/input-scan/quarantine.d.ts +2 -2
  153. package/dist/input-scan/quarantine.js +23 -18
  154. package/dist/input-scan/readout-budget.d.ts +2 -2
  155. package/dist/input-scan/readout-budget.js +1 -1
  156. package/dist/input-scan/readout.d.ts +2 -2
  157. package/dist/input-scan/readout.js +47 -34
  158. package/dist/input-scan/scan.d.ts +2 -2
  159. package/dist/input-scan/scan.js +7 -5
  160. package/dist/input-scan/set-types.d.ts +28 -28
  161. package/dist/input-scan/shapes.d.ts +4 -4
  162. package/dist/input-scan/shapes.js +0 -0
  163. package/dist/input-scan/templates.d.ts +10 -10
  164. package/dist/input-scan/templates.js +30 -22
  165. package/dist/input-scan/tokens.d.ts +6 -4
  166. package/dist/input-scan/tokens.js +100 -38
  167. package/dist/input-scan/types.d.ts +22 -22
  168. package/dist/lib/async-utils.d.ts +3 -7
  169. package/dist/lib/async-utils.js +5 -9
  170. package/dist/lib/cache.js +1 -1
  171. package/dist/lib/chrome.d.ts +46 -6
  172. package/dist/lib/console-logger.js +2 -2
  173. package/dist/lib/db-result.d.ts +22 -6
  174. package/dist/lib/db-result.js +9 -13
  175. package/dist/lib/eyes.d.ts +4 -4
  176. package/dist/lib/eyes.js +1 -1
  177. package/dist/lib/fs-helpers.js +18 -6
  178. package/dist/lib/fs-result.d.ts +1 -0
  179. package/dist/lib/fs-result.js +5 -6
  180. package/dist/lib/hooks.d.ts +23 -7
  181. package/dist/lib/hooks.js +17 -3
  182. package/dist/lib/host-concurrency.js +3 -2
  183. package/dist/lib/logger.d.ts +2 -2
  184. package/dist/lib/logger.js +2 -1
  185. package/dist/lib/metrics.d.ts +1 -1
  186. package/dist/lib/null-proto.d.ts +6 -0
  187. package/dist/lib/null-proto.js +17 -0
  188. package/dist/lib/otel-spans.d.ts +1 -1
  189. package/dist/lib/otel-spans.js +9 -5
  190. package/dist/lib/otel.d.ts +4 -2
  191. package/dist/lib/otel.js +10 -2
  192. package/dist/lib/page-capture.d.ts +8 -8
  193. package/dist/lib/page-capture.js +9 -4
  194. package/dist/lib/parse-json.d.ts +5 -0
  195. package/dist/lib/parse-json.js +12 -0
  196. package/dist/lib/present.d.ts +12 -0
  197. package/dist/lib/present.js +39 -0
  198. package/dist/lib/rate-limit.d.ts +4 -4
  199. package/dist/lib/rate-limit.js +12 -13
  200. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  201. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  202. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  203. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  204. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  205. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  206. package/dist/lib/regulatory-corpus.d.ts +10 -10
  207. package/dist/lib/regulatory-corpus.js +3 -1
  208. package/dist/lib/result.d.ts +10 -11
  209. package/dist/lib/result.js +15 -13
  210. package/dist/lib/storage.d.ts +2 -2
  211. package/dist/lib/test/async-iterable.d.ts +9 -0
  212. package/dist/lib/test/async-iterable.js +28 -0
  213. package/dist/lib/test/request-url.d.ts +5 -0
  214. package/dist/lib/test/request-url.js +7 -0
  215. package/dist/lib/test/result-assert.d.ts +12 -0
  216. package/dist/lib/test/result-assert.js +17 -0
  217. package/dist/lib/test/text-shapes.d.ts +24 -0
  218. package/dist/lib/test/text-shapes.js +63 -0
  219. package/dist/lib/text.d.ts +22 -0
  220. package/dist/lib/text.js +68 -0
  221. package/dist/lib/thrown.d.ts +18 -0
  222. package/dist/lib/thrown.js +30 -0
  223. package/dist/lib/unknown-array.d.ts +6 -0
  224. package/dist/lib/unknown-array.js +8 -0
  225. package/dist/lib/unknown-containers.d.ts +14 -0
  226. package/dist/lib/unknown-containers.js +17 -0
  227. package/dist/lib/unknown-text.d.ts +8 -0
  228. package/dist/lib/unknown-text.js +28 -0
  229. package/dist/lib/zod-issue-shape.d.ts +1 -1
  230. package/dist/lib/zod-issue-shape.js +31 -31
  231. package/dist/lib/zod-issues.d.ts +3 -3
  232. package/dist/lib/zod-issues.js +30 -17
  233. package/dist/literature/sources/arxiv.d.ts +6 -6
  234. package/dist/literature/sources/arxiv.js +92 -35
  235. package/dist/literature/sources/http.d.ts +2 -2
  236. package/dist/literature/sources/http.js +16 -15
  237. package/dist/literature/sources/pubmed.d.ts +16 -16
  238. package/dist/literature/sources/pubmed.js +96 -61
  239. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  240. package/dist/literature/sources/semantic-scholar.js +22 -13
  241. package/dist/loop/accounting.d.ts +63 -0
  242. package/dist/loop/accounting.js +141 -0
  243. package/dist/loop/call-policy.d.ts +73 -0
  244. package/dist/loop/call-policy.js +109 -0
  245. package/dist/loop/chat-stream.d.ts +62 -0
  246. package/dist/loop/chat-stream.js +237 -0
  247. package/dist/loop/compaction.d.ts +14 -9
  248. package/dist/loop/compaction.js +17 -0
  249. package/dist/loop/metrics.d.ts +12 -15
  250. package/dist/loop/metrics.js +14 -26
  251. package/dist/loop/run-loop.d.ts +233 -0
  252. package/dist/loop/run-loop.js +770 -0
  253. package/dist/loop/sub-agent.d.ts +61 -0
  254. package/dist/loop/sub-agent.js +161 -0
  255. package/dist/loop/tool-adapter.d.ts +98 -0
  256. package/dist/loop/tool-adapter.js +364 -0
  257. package/dist/loop/tool-detail.d.ts +1 -1
  258. package/dist/loop/tool-detail.js +6 -5
  259. package/dist/loop/tool-outcome.d.ts +1 -1
  260. package/dist/loop/tool-output.d.ts +4 -4
  261. package/dist/loop/tool-output.js +2 -2
  262. package/dist/loop/turn-credentials.d.ts +34 -0
  263. package/dist/loop/turn-credentials.js +73 -0
  264. package/dist/loop/types.d.ts +34 -37
  265. package/dist/loop/types.js +2 -7
  266. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  267. package/dist/memory/ai-sdk-message-storage.js +13 -11
  268. package/dist/memory/card-builders.d.ts +14 -14
  269. package/dist/memory/card-builders.js +19 -15
  270. package/dist/memory/conversation-display-recorder.d.ts +22 -6
  271. package/dist/memory/conversation-display-recorder.js +64 -20
  272. package/dist/memory/conversation-display-replay.js +3 -2
  273. package/dist/memory/conversation-display-storage.d.ts +15 -7
  274. package/dist/memory/conversation-display-storage.js +141 -36
  275. package/dist/memory/conversation-view.d.ts +4 -4
  276. package/dist/memory/conversation-view.js +5 -4
  277. package/dist/memory/count-tokens.js +10 -8
  278. package/dist/memory/derive-thread-title.d.ts +0 -13
  279. package/dist/memory/derive-thread-title.js +2 -1
  280. package/dist/memory/message-backfill.d.ts +12 -5
  281. package/dist/memory/message-backfill.js +5 -3
  282. package/dist/memory/thread-history.d.ts +66 -24
  283. package/dist/memory/thread-history.js +212 -79
  284. package/dist/memory/thread-store.d.ts +26 -17
  285. package/dist/memory/thread-store.js +15 -9
  286. package/dist/memory/tool-call-integrity.d.ts +2 -2
  287. package/dist/memory/tool-call-integrity.js +4 -3
  288. package/dist/memory/working-memory.d.ts +16 -12
  289. package/dist/memory/working-memory.js +72 -61
  290. package/dist/prompts/briefing.d.ts +63 -9
  291. package/dist/prompts/briefing.js +130 -3
  292. package/dist/prompts/planner.js +13 -2
  293. package/dist/prompts/synthesis-agent.d.ts +1 -1
  294. package/dist/prompts/synthesis-agent.js +6 -14
  295. package/dist/provenance/collector.d.ts +6 -6
  296. package/dist/provenance/collector.js +15 -8
  297. package/dist/provenance/exec-frame.d.ts +2 -2
  298. package/dist/provenance/exec-frame.js +6 -1
  299. package/dist/provenance/seam.d.ts +24 -19
  300. package/dist/provenance/seam.js +7 -5
  301. package/dist/provenance/types.d.ts +6 -6
  302. package/dist/providers/ai-sdk.d.ts +113 -62
  303. package/dist/providers/ai-sdk.js +303 -458
  304. package/dist/providers/embedding.d.ts +2 -2
  305. package/dist/providers/embedding.js +1 -1
  306. package/dist/providers/errors.d.ts +22 -2
  307. package/dist/providers/errors.js +98 -50
  308. package/dist/providers/prompt-cache.d.ts +8 -8
  309. package/dist/providers/prompt-cache.js +13 -11
  310. package/dist/providers/reasoning.d.ts +2 -2
  311. package/dist/providers/reasoning.js +2 -2
  312. package/dist/providers/types.d.ts +59 -92
  313. package/dist/reference-data/catalog.d.ts +2 -15
  314. package/dist/reference-data/catalog.js +166 -10
  315. package/dist/reference-data/receipt.d.ts +2 -2
  316. package/dist/report-model/assert-rules.js +1 -1
  317. package/dist/report-model/authoring-grammar.d.ts +209 -231
  318. package/dist/report-model/block-walk.d.ts +10 -10
  319. package/dist/report-model/block-walk.js +2 -0
  320. package/dist/report-model/draft-finish.d.ts +8 -8
  321. package/dist/report-model/draft-finish.js +1 -1
  322. package/dist/report-model/draft-hash.js +8 -7
  323. package/dist/report-model/draft-operations.d.ts +22 -10
  324. package/dist/report-model/draft-operations.js +48 -30
  325. package/dist/report-model/draft-read.d.ts +19 -7
  326. package/dist/report-model/draft-read.js +16 -6
  327. package/dist/report-model/draft.d.ts +844 -2
  328. package/dist/report-model/draft.js +3 -1
  329. package/dist/report-model/fixture-resolver.js +39 -16
  330. package/dist/report-model/pin-snapshot.d.ts +2 -2
  331. package/dist/report-model/pin-snapshot.js +15 -15
  332. package/dist/report-model/production-resolver.d.ts +18 -18
  333. package/dist/report-model/production-resolver.js +50 -42
  334. package/dist/report-model/reference-resolver.d.ts +26 -10
  335. package/dist/report-model/reference-resolver.js +68 -5
  336. package/dist/report-model/reference-stamp.js +30 -38
  337. package/dist/report-model/structural-validation.js +12 -4
  338. package/dist/report-model/validate.d.ts +7 -7
  339. package/dist/report-model/validate.js +6 -6
  340. package/dist/report-render/assets.d.ts +2 -2
  341. package/dist/report-render/assets.js +27 -3
  342. package/dist/report-render/chart-export.d.ts +10 -2
  343. package/dist/report-render/chart-export.js +37 -11
  344. package/dist/report-render/chart-presets.d.ts +8 -8
  345. package/dist/report-render/chart-presets.js +3 -3
  346. package/dist/report-render/chart-renderers.d.ts +23 -16
  347. package/dist/report-render/chart-renderers.js +74 -53
  348. package/dist/report-render/chart-toolbox.d.ts +2 -2
  349. package/dist/report-render/chart-toolbox.js +7 -6
  350. package/dist/report-render/chart.d.ts +15 -16
  351. package/dist/report-render/chart.js +369 -252
  352. package/dist/report-render/design.d.ts +36 -297
  353. package/dist/report-render/design.js +0 -12
  354. package/dist/report-render/figures/common.d.ts +12 -12
  355. package/dist/report-render/figures/common.js +42 -31
  356. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  357. package/dist/report-render/figures/dendrogram.js +10 -10
  358. package/dist/report-render/figures/dense.js +15 -8
  359. package/dist/report-render/figures/dotplot.js +46 -33
  360. package/dist/report-render/figures/embedding.js +52 -43
  361. package/dist/report-render/figures/equal-units.d.ts +10 -10
  362. package/dist/report-render/figures/equal-units.js +27 -27
  363. package/dist/report-render/figures/forest.js +9 -7
  364. package/dist/report-render/figures/gsea.js +21 -11
  365. package/dist/report-render/figures/heatmap.js +13 -9
  366. package/dist/report-render/figures/index.d.ts +10 -10
  367. package/dist/report-render/figures/index.js +4 -2
  368. package/dist/report-render/figures/km.js +10 -9
  369. package/dist/report-render/figures/label-room.d.ts +12 -12
  370. package/dist/report-render/figures/label-room.js +7 -2
  371. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  372. package/dist/report-render/figures/locuszoom.js +59 -31
  373. package/dist/report-render/figures/lollipop.js +3 -2
  374. package/dist/report-render/figures/ma.js +8 -4
  375. package/dist/report-render/figures/manhattan.d.ts +1 -2
  376. package/dist/report-render/figures/manhattan.js +52 -34
  377. package/dist/report-render/figures/oncoprint.js +4 -5
  378. package/dist/report-render/figures/pca.js +25 -11
  379. package/dist/report-render/figures/qq.js +20 -9
  380. package/dist/report-render/figures/roc.js +1 -1
  381. package/dist/report-render/figures/sankey.d.ts +2 -2
  382. package/dist/report-render/figures/sankey.js +11 -10
  383. package/dist/report-render/figures/upset.d.ts +6 -6
  384. package/dist/report-render/figures/upset.js +7 -4
  385. package/dist/report-render/figures/volcano.js +12 -10
  386. package/dist/report-render/hybrid-svg.d.ts +4 -4
  387. package/dist/report-render/hybrid-svg.js +7 -5
  388. package/dist/report-render/number-format.d.ts +4 -4
  389. package/dist/report-render/number-format.js +62 -27
  390. package/dist/report-render/page.js +2 -1
  391. package/dist/report-render/provenance-data.d.ts +2 -2
  392. package/dist/report-render/references.d.ts +4 -4
  393. package/dist/report-render/render.d.ts +2 -2
  394. package/dist/report-render/render.js +10 -11
  395. package/dist/report-render/script-json.js +1 -1
  396. package/dist/report-render/table-data.d.ts +6 -6
  397. package/dist/report-render/test/options.d.ts +49 -0
  398. package/dist/report-render/test/options.js +143 -0
  399. package/dist/report-render/test/page-function.d.ts +19 -0
  400. package/dist/report-render/test/page-function.js +33 -0
  401. package/dist/report-render/types.d.ts +10 -10
  402. package/dist/report-render/value-bridge.d.ts +4 -4
  403. package/dist/report-render/value-bridge.js +27 -14
  404. package/dist/report-render/views/chart-view.d.ts +2 -2
  405. package/dist/report-render/views/chart-view.js +2 -2
  406. package/dist/report-render/views/lineage.d.ts +6 -6
  407. package/dist/report-render/views/lineage.js +2 -0
  408. package/dist/report-render/views/page-view.d.ts +2 -2
  409. package/dist/report-render/views/page-view.js +1 -0
  410. package/dist/report-render/views/prose.js +25 -8
  411. package/dist/report-render/views/references-view.js +12 -1
  412. package/dist/report-render/views/values.js +1 -1
  413. package/dist/runtime/assemble.d.ts +53 -26
  414. package/dist/runtime/assemble.js +103 -56
  415. package/dist/runtime/boot.d.ts +8 -7
  416. package/dist/runtime/boot.js +1 -1
  417. package/dist/runtime/connection-budget.d.ts +6 -6
  418. package/dist/runtime/connection-budget.js +1 -1
  419. package/dist/runtime/dbos.d.ts +29 -19
  420. package/dist/runtime/dbos.js +35 -20
  421. package/dist/runtime/result-serialization.js +18 -5
  422. package/dist/runtime/shutdown.d.ts +2 -2
  423. package/dist/sandbox/client.d.ts +7 -3
  424. package/dist/sandbox/cpu-files.d.ts +2 -2
  425. package/dist/sandbox/cpu-files.js +21 -4
  426. package/dist/sandbox/create-sandbox.d.ts +7 -8
  427. package/dist/sandbox/create-sandbox.js +6 -12
  428. package/dist/sandbox/docker-client.d.ts +48 -3
  429. package/dist/sandbox/docker-client.js +10 -6
  430. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  431. package/dist/sandbox/exec-outcome.d.ts +2 -2
  432. package/dist/sandbox/exec-outcome.js +1 -1
  433. package/dist/sandbox/exec.d.ts +10 -6
  434. package/dist/sandbox/exec.js +27 -12
  435. package/dist/sandbox/execution-id.js +14 -6
  436. package/dist/sandbox/farm.d.ts +2 -2
  437. package/dist/sandbox/farm.js +22 -27
  438. package/dist/sandbox/identity.d.ts +7 -0
  439. package/dist/sandbox/identity.js +14 -3
  440. package/dist/sandbox/image-packages.d.ts +26 -4
  441. package/dist/sandbox/image-packages.js +29 -27
  442. package/dist/sandbox/k8s-client.d.ts +35 -8
  443. package/dist/sandbox/k8s-client.js +6 -5
  444. package/dist/sandbox/labels.js +1 -0
  445. package/dist/sandbox/liveness.js +3 -1
  446. package/dist/sandbox/mount-plan.d.ts +10 -10
  447. package/dist/sandbox/mount-plan.js +13 -14
  448. package/dist/sandbox/notification-sweep.d.ts +4 -4
  449. package/dist/sandbox/notification-sweep.js +4 -7
  450. package/dist/sandbox/package-identity.d.ts +6 -13
  451. package/dist/sandbox/package-identity.js +46 -28
  452. package/dist/sandbox/reaper.d.ts +10 -10
  453. package/dist/sandbox/reaper.js +4 -6
  454. package/dist/sandbox/sandbox-error.d.ts +2 -9
  455. package/dist/sandbox/sandbox-error.js +21 -8
  456. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  457. package/dist/sandbox/sandbox-step-translate.js +22 -8
  458. package/dist/sandbox/step-sandbox.d.ts +47 -0
  459. package/dist/sandbox/step-sandbox.js +53 -0
  460. package/dist/sandbox/types.d.ts +18 -19
  461. package/dist/sandbox/types.js +1 -1
  462. package/dist/schemas/artifact-manifest.d.ts +4 -4
  463. package/dist/schemas/data-profile-schemas.d.ts +351 -306
  464. package/dist/schemas/file-metadata.js +2 -4
  465. package/dist/schemas/plan-schemas.d.ts +79 -25
  466. package/dist/schemas/plan-schemas.js +1 -1
  467. package/dist/schemas/run-synthesis.d.ts +95 -26
  468. package/dist/schemas/run-synthesis.js +3 -1
  469. package/dist/schemas/validate-plan.d.ts +4 -4
  470. package/dist/schemas/validate-plan.js +17 -5
  471. package/dist/schemas/workflow-state.d.ts +127 -14
  472. package/dist/schemas/workflow-state.js +56 -2
  473. package/dist/state/active-turns.d.ts +36 -0
  474. package/dist/state/active-turns.js +67 -0
  475. package/dist/state/analyses-metrics.d.ts +8 -8
  476. package/dist/state/analyses-metrics.js +4 -4
  477. package/dist/state/analyses.d.ts +0 -14
  478. package/dist/state/analyses.js +0 -32
  479. package/dist/state/artifacts.d.ts +47 -18
  480. package/dist/state/artifacts.js +48 -7
  481. package/dist/state/data-profile.d.ts +2 -2
  482. package/dist/state/db.d.ts +12 -2
  483. package/dist/state/db.js +5 -0
  484. package/dist/state/edit-intents.d.ts +4 -0
  485. package/dist/state/edit-intents.js +71 -0
  486. package/dist/state/index.d.ts +5 -5
  487. package/dist/state/index.js +3 -3
  488. package/dist/state/init.d.ts +2 -1
  489. package/dist/state/init.js +5 -2
  490. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  491. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  492. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  493. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  494. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  495. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  496. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  497. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  498. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  499. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  500. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  501. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  502. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  503. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  504. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  505. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  506. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  507. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  508. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  509. package/dist/state/migrations/index.js +18 -0
  510. package/dist/state/paused-work.d.ts +52 -0
  511. package/dist/state/paused-work.js +105 -0
  512. package/dist/state/plans.d.ts +27 -8
  513. package/dist/state/plans.js +14 -11
  514. package/dist/state/purge-analysis.d.ts +6 -6
  515. package/dist/state/purge-analysis.js +10 -2
  516. package/dist/state/report-session-state.d.ts +43 -18
  517. package/dist/state/report-session-state.js +43 -4
  518. package/dist/state/report-versions.d.ts +16 -11
  519. package/dist/state/report-versions.js +5 -3
  520. package/dist/state/runs.d.ts +70 -25
  521. package/dist/state/runs.js +127 -64
  522. package/dist/state/schema.d.ts +18 -21
  523. package/dist/state/schema.js +4 -5
  524. package/dist/state/snapshot-parse.d.ts +2 -2
  525. package/dist/state/snapshot-parse.js +14 -8
  526. package/dist/state/step-executions.d.ts +29 -8
  527. package/dist/state/step-executions.js +28 -4
  528. package/dist/state/tool-outputs.d.ts +2 -2
  529. package/dist/state/tool-outputs.js +2 -1
  530. package/dist/state/vector-store.d.ts +16 -16
  531. package/dist/state/vector-store.js +11 -7
  532. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  533. package/dist/tasks/data-profile-absorb.js +21 -16
  534. package/dist/tasks/data-profile-activity.d.ts +5 -5
  535. package/dist/tasks/data-profile-activity.js +5 -5
  536. package/dist/tasks/data-profile-index.d.ts +4 -4
  537. package/dist/tasks/data-profile-index.js +32 -17
  538. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  539. package/dist/tasks/data-profile-resolve.js +88 -62
  540. package/dist/tasks/data-profile.d.ts +40 -31
  541. package/dist/tasks/data-profile.js +138 -95
  542. package/dist/tasks/extract-values.d.ts +26 -79
  543. package/dist/tasks/extract-values.js +48 -108
  544. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  545. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  546. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  547. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  548. package/dist/testing.d.ts +60 -0
  549. package/dist/testing.js +96 -0
  550. package/dist/tools/ad-hoc-router.d.ts +11 -9
  551. package/dist/tools/ad-hoc-router.js +80 -51
  552. package/dist/tools/analysis-invocation.d.ts +7 -0
  553. package/dist/tools/analysis-invocation.js +29 -5
  554. package/dist/tools/approval/contract.d.ts +8 -52
  555. package/dist/tools/approval/contract.js +7 -36
  556. package/dist/tools/approval/gateway.d.ts +27 -28
  557. package/dist/tools/approval/gateway.js +33 -130
  558. package/dist/tools/approval/queries.d.ts +6 -11
  559. package/dist/tools/approval/queries.js +43 -29
  560. package/dist/tools/approval/uuidv7.js +2 -2
  561. package/dist/tools/bio/chembl.d.ts +3 -3
  562. package/dist/tools/bio/chembl.js +10 -0
  563. package/dist/tools/bio/comptox.d.ts +25 -8
  564. package/dist/tools/bio/comptox.js +4 -2
  565. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  566. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  567. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  568. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  569. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  570. package/dist/tools/bio/keys.d.ts +2 -2
  571. package/dist/tools/bio/keys.js +3 -3
  572. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  573. package/dist/tools/bio/lookup-annotation.js +3 -0
  574. package/dist/tools/bio/opentargets.d.ts +1 -1
  575. package/dist/tools/bio/opentargets.js +6 -0
  576. package/dist/tools/bio/pubchem.d.ts +2 -2
  577. package/dist/tools/bio/pubchem.js +6 -0
  578. package/dist/tools/bio/pubmed.d.ts +26 -16
  579. package/dist/tools/bio/pubmed.js +9 -3
  580. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  581. package/dist/tools/bio/search-clinical-trials.js +5 -1
  582. package/dist/tools/bio/search-faers.d.ts +2 -2
  583. package/dist/tools/bio/search-faers.js +1 -1
  584. package/dist/tools/bio/search-gene.d.ts +2 -2
  585. package/dist/tools/bio/search-gene.js +1 -0
  586. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  587. package/dist/tools/bio/search-geo-datasets.js +5 -5
  588. package/dist/tools/bio/search-interactions.d.ts +1 -1
  589. package/dist/tools/bio/search-patents.d.ts +28 -22
  590. package/dist/tools/bio/search-patents.js +20 -17
  591. package/dist/tools/bio/search-protein.d.ts +2 -2
  592. package/dist/tools/bio/search-protein.js +1 -1
  593. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  594. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  595. package/dist/tools/bio/target-safety.d.ts +8 -8
  596. package/dist/tools/bio/target-safety.js +11 -6
  597. package/dist/tools/capability-data.d.ts +40 -0
  598. package/dist/tools/capability-data.js +74 -0
  599. package/dist/tools/define-tool.d.ts +55 -46
  600. package/dist/tools/define-tool.js +39 -27
  601. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  602. package/dist/tools/display/normalize-echart-spec.js +51 -27
  603. package/dist/tools/display/show-user.d.ts +2 -2
  604. package/dist/tools/display/show-user.js +1 -1
  605. package/dist/tools/execute-analysis.d.ts +54 -17
  606. package/dist/tools/execute-analysis.js +193 -62
  607. package/dist/tools/knowledge/check.d.ts +182 -0
  608. package/dist/tools/knowledge/check.js +94 -0
  609. package/dist/tools/knowledge/client.d.ts +351 -0
  610. package/dist/tools/knowledge/client.js +319 -0
  611. package/dist/tools/knowledge/environment.d.ts +78 -0
  612. package/dist/tools/knowledge/environment.js +116 -0
  613. package/dist/tools/knowledge/index.d.ts +49 -0
  614. package/dist/tools/knowledge/index.js +70 -0
  615. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  616. package/dist/tools/knowledge/local-slots.js +184 -0
  617. package/dist/tools/knowledge/pin.d.ts +14 -0
  618. package/dist/tools/knowledge/pin.js +17 -0
  619. package/dist/tools/knowledge/recommend.d.ts +67 -0
  620. package/dist/tools/knowledge/recommend.js +106 -0
  621. package/dist/tools/knowledge/situation.d.ts +143 -0
  622. package/dist/tools/knowledge/situation.js +157 -0
  623. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  624. package/dist/tools/knowledge/skeleton.js +201 -0
  625. package/dist/tools/knowledge/template.d.ts +139 -0
  626. package/dist/tools/knowledge/template.js +273 -0
  627. package/dist/tools/lib/alphafold-client.js +2 -1
  628. package/dist/tools/lib/amass-client.d.ts +28 -28
  629. package/dist/tools/lib/amass-client.js +20 -10
  630. package/dist/tools/lib/api-utils.d.ts +13 -3
  631. package/dist/tools/lib/api-utils.js +17 -3
  632. package/dist/tools/lib/bgee-client.d.ts +6 -6
  633. package/dist/tools/lib/bgee-client.js +16 -10
  634. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  635. package/dist/tools/lib/cbioportal-client.js +9 -8
  636. package/dist/tools/lib/chembl-client.d.ts +14 -14
  637. package/dist/tools/lib/chembl-client.js +11 -4
  638. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  639. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  640. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  641. package/dist/tools/lib/clinical-trials-client.js +10 -10
  642. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  643. package/dist/tools/lib/clinvar-client.js +6 -6
  644. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  645. package/dist/tools/lib/ctx-ops.js +13 -10
  646. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  647. package/dist/tools/lib/dgidb-client.js +10 -12
  648. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  649. package/dist/tools/lib/ema-client.d.ts +2 -2
  650. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  651. package/dist/tools/lib/ensembl-client.js +5 -4
  652. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  653. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  654. package/dist/tools/lib/html-text.d.ts +6 -0
  655. package/dist/tools/lib/html-text.js +9 -0
  656. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  657. package/dist/tools/lib/identifier-resolver.js +7 -3
  658. package/dist/tools/lib/impc-client.d.ts +8 -8
  659. package/dist/tools/lib/impc-client.js +46 -35
  660. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  661. package/dist/tools/lib/iuphar-client.js +7 -16
  662. package/dist/tools/lib/monarch-client.d.ts +4 -4
  663. package/dist/tools/lib/openfda-client.d.ts +22 -22
  664. package/dist/tools/lib/openfda-client.js +23 -22
  665. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  666. package/dist/tools/lib/pathway-client.d.ts +4 -4
  667. package/dist/tools/lib/pathway-client.js +15 -19
  668. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  669. package/dist/tools/lib/pharmgkb-client.js +1 -1
  670. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  671. package/dist/tools/lib/protein-family-modality.js +0 -2
  672. package/dist/tools/lib/protein-family-normalize.js +7 -0
  673. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  674. package/dist/tools/lib/pubchem-client.js +1 -0
  675. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  676. package/dist/tools/lib/pubchem-ops.js +8 -0
  677. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  678. package/dist/tools/lib/pubmed-client.js +1 -1
  679. package/dist/tools/lib/string-client.d.ts +6 -6
  680. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  681. package/dist/tools/lib/uniprot-client.js +5 -1
  682. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  683. package/dist/tools/memory/update-working-memory.js +21 -3
  684. package/dist/tools/read-tool-output.js +8 -2
  685. package/dist/tools/registry.d.ts +2 -2
  686. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  687. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  688. package/dist/tools/report-session/derive-table.d.ts +19 -59
  689. package/dist/tools/report-session/derive-table.js +120 -122
  690. package/dist/tools/report-session/examine-page.d.ts +6 -6
  691. package/dist/tools/report-session/examine-page.js +14 -12
  692. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  693. package/dist/tools/report-session/list-artifacts.js +5 -5
  694. package/dist/tools/report-session/page-faults.d.ts +6 -6
  695. package/dist/tools/report-session/page-faults.js +3 -1
  696. package/dist/tools/report-session/preview-report.d.ts +4 -3
  697. package/dist/tools/report-session/preview-report.js +26 -7
  698. package/dist/tools/report-session/record-version.d.ts +9 -4
  699. package/dist/tools/report-session/record-version.js +16 -9
  700. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  701. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  702. package/dist/tools/research/generate-analogy-report.js +80 -76
  703. package/dist/tools/research/generate-plan.d.ts +39 -16
  704. package/dist/tools/research/generate-plan.js +565 -338
  705. package/dist/tools/research/guarded-address.d.ts +20 -0
  706. package/dist/tools/research/guarded-address.js +149 -0
  707. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  708. package/dist/tools/research/inspect-data-profile.js +26 -25
  709. package/dist/tools/research/inspect-run.d.ts +54 -27
  710. package/dist/tools/research/inspect-run.js +50 -40
  711. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  712. package/dist/tools/research/literature-reviewer.js +29 -28
  713. package/dist/tools/research/search-arxiv.d.ts +1 -1
  714. package/dist/tools/research/search-arxiv.js +1 -1
  715. package/dist/tools/research/search-github-repos.d.ts +10 -7
  716. package/dist/tools/research/search-github-repos.js +25 -22
  717. package/dist/tools/research/search-semantic-scholar.js +1 -1
  718. package/dist/tools/research/searxng-engine.d.ts +40 -0
  719. package/dist/tools/research/searxng-engine.js +122 -0
  720. package/dist/tools/research/web-fetch.d.ts +127 -0
  721. package/dist/tools/research/web-fetch.js +618 -0
  722. package/dist/tools/research/web-search.d.ts +84 -0
  723. package/dist/tools/research/web-search.js +117 -0
  724. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  725. package/dist/tools/sandbox/link-packages.js +11 -8
  726. package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
  727. package/dist/tools/sandbox/list-available-packages.js +43 -29
  728. package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
  729. package/dist/tools/sandbox/list-available-refs.js +119 -37
  730. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  731. package/dist/tools/sandbox/report-blocker.js +22 -68
  732. package/dist/tools/sandbox/skills.d.ts +16 -12
  733. package/dist/tools/sandbox/skills.js +16 -12
  734. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  735. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  736. package/dist/tools/start-report-session.d.ts +13 -5
  737. package/dist/tools/start-report-session.js +35 -8
  738. package/dist/tools/terminal-text.d.ts +14 -0
  739. package/dist/tools/terminal-text.js +51 -0
  740. package/dist/tools/workspace/decision-record.d.ts +81 -0
  741. package/dist/tools/workspace/decision-record.js +127 -0
  742. package/dist/tools/workspace/edit-file.d.ts +59 -18
  743. package/dist/tools/workspace/edit-file.js +98 -15
  744. package/dist/tools/workspace/execute-command.d.ts +31 -12
  745. package/dist/tools/workspace/execute-command.js +37 -8
  746. package/dist/tools/workspace/file-stat.d.ts +6 -3
  747. package/dist/tools/workspace/grep.d.ts +10 -7
  748. package/dist/tools/workspace/grep.js +9 -3
  749. package/dist/tools/workspace/index.d.ts +1 -0
  750. package/dist/tools/workspace/index.js +1 -0
  751. package/dist/tools/workspace/list-files.d.ts +6 -3
  752. package/dist/tools/workspace/mutator.d.ts +28 -15
  753. package/dist/tools/workspace/mutator.js +107 -53
  754. package/dist/tools/workspace/read-file.d.ts +8 -5
  755. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  756. package/dist/tools/workspace/result-bounds.js +4 -2
  757. package/dist/tools/workspace/run-exec.d.ts +2 -2
  758. package/dist/tools/workspace/run-exec.js +3 -3
  759. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  760. package/dist/tools/workspace/scan-inputs.js +17 -5
  761. package/dist/tools/workspace/show-file.d.ts +1 -1
  762. package/dist/tools/workspace/show-file.js +2 -1
  763. package/dist/tools/workspace/show-plan.d.ts +8 -5
  764. package/dist/tools/workspace/show-plan.js +9 -8
  765. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  766. package/dist/tools/workspace/workspace-search.js +27 -14
  767. package/dist/tools/workspace/write-file.d.ts +9 -7
  768. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  769. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  770. package/dist/workflows/execute-analysis.d.ts +100 -76
  771. package/dist/workflows/execute-analysis.js +380 -247
  772. package/dist/workflows/pause.d.ts +71 -0
  773. package/dist/workflows/pause.js +173 -0
  774. package/dist/workflows/sandbox-step.d.ts +50 -61
  775. package/dist/workflows/sandbox-step.js +99 -106
  776. package/dist/workflows/test/sql-writes.d.ts +21 -0
  777. package/dist/workflows/test/sql-writes.js +36 -0
  778. package/dist/workspace/filesystem.d.ts +6 -6
  779. package/dist/workspace/filesystem.js +10 -8
  780. package/dist/workspace/paths.d.ts +1 -1
  781. package/dist/workspace/paths.js +15 -4
  782. package/dist/workspace/search-config.d.ts +2 -2
  783. package/dist/workspace/search-config.js +1 -1
  784. package/package.json +25 -22
  785. package/dist/loop/continue-agent.d.ts +0 -40
  786. package/dist/loop/continue-agent.js +0 -38
  787. package/dist/loop/genai-spans.d.ts +0 -47
  788. package/dist/loop/genai-spans.js +0 -134
  789. package/dist/loop/run-agent.d.ts +0 -236
  790. package/dist/loop/run-agent.js +0 -1110
  791. package/dist/loop/run-step.d.ts +0 -29
  792. package/dist/loop/run-step.js +0 -34
  793. package/dist/loop/run-to-terminal.d.ts +0 -66
  794. package/dist/loop/run-to-terminal.js +0 -90
  795. package/dist/loop/tool-mask.d.ts +0 -23
  796. package/dist/loop/tool-mask.js +0 -46
  797. package/dist/providers/streaming-chat.d.ts +0 -32
  798. package/dist/providers/streaming-chat.js +0 -91
  799. package/dist/tasks/derive-table-exec.d.ts +0 -54
  800. package/dist/tasks/derive-table-exec.js +0 -86
  801. package/dist/workflows/suspension.d.ts +0 -32
  802. package/dist/workflows/suspension.js +0 -38
@@ -0,0 +1,84 @@
1
+ /**
2
+ * `web_search` — the web step of the conversation agent's research.
3
+ *
4
+ * The tool queries a `WebSearchEngine` the embedder injects at the composition
5
+ * root; the SearXNG realization ships beside it in `searxng-engine.ts`. The
6
+ * tool owns the input contract and the search semantics the spec pins — the
7
+ * domain-filter terms and the host re-filter, the queries merge, the bound —
8
+ * and every engine failure rides the ok channel as a data-status variant,
9
+ * never as an error of the turn.
10
+ */
11
+ import { type Result } from "neverthrow";
12
+ import { z } from "zod";
13
+ import { type Tool } from "../define-tool.js";
14
+ export type WebSearchAnswer = {
15
+ readonly answer?: string;
16
+ readonly url?: string;
17
+ };
18
+ export type WebSearchResult = {
19
+ readonly title: string;
20
+ readonly url: string;
21
+ readonly snippet?: string;
22
+ };
23
+ export type WebSearchOutput = {
24
+ readonly status: "ok";
25
+ readonly answers: readonly WebSearchAnswer[];
26
+ readonly results: readonly WebSearchResult[];
27
+ } | {
28
+ readonly status: "http_error";
29
+ readonly httpStatus: number;
30
+ readonly text: string;
31
+ } | {
32
+ readonly status: "retryable_status";
33
+ readonly httpStatus: number;
34
+ readonly text: string;
35
+ } | {
36
+ readonly status: "schema_mismatch";
37
+ readonly text: string;
38
+ } | {
39
+ readonly status: "not_json";
40
+ readonly text: string;
41
+ readonly detail?: string;
42
+ };
43
+ /** One query with its terms already composed: the engine adds transport, not semantics. */
44
+ export type WebSearchRequest = {
45
+ /** The final query text, `site:` / `-site:` terms included. */
46
+ readonly query: string;
47
+ readonly recencyFilter?: "day" | "week" | "month" | "year";
48
+ };
49
+ /** What one query returned: the mapped answers and the mapped result rows. */
50
+ export type WebSearchPage = {
51
+ readonly answers: readonly WebSearchAnswer[];
52
+ readonly results: readonly WebSearchResult[];
53
+ };
54
+ /** The error side of the engine result: the data-status variants the tool reports as normal results. */
55
+ export type WebSearchEngineError = Exclude<WebSearchOutput, {
56
+ readonly status: "ok";
57
+ }>;
58
+ /**
59
+ * The injected web-search engine: an embedder supplies one realization, and the
60
+ * conversation agent attaches `web_search` iff it did. `search` gets the final
61
+ * query terms and the optional recency filter, and resolves to the page or to
62
+ * the error variant that names the failure.
63
+ */
64
+ export type WebSearchEngine = {
65
+ search(request: WebSearchRequest): Promise<Result<WebSearchPage, WebSearchEngineError>>;
66
+ };
67
+ export type WebSearchToolDeps = {
68
+ /** The web-search engine the embedder injected. */
69
+ readonly engine: WebSearchEngine;
70
+ };
71
+ declare const WebSearchInputSchema: z.ZodObject<{
72
+ query: z.ZodOptional<z.ZodString>;
73
+ queries: z.ZodOptional<z.ZodArray<z.ZodString>>;
74
+ numResults: z.ZodDefault<z.ZodNumber>;
75
+ recencyFilter: z.ZodOptional<z.ZodEnum<{
76
+ day: "day";
77
+ month: "month";
78
+ week: "week";
79
+ year: "year";
80
+ }>>;
81
+ domainFilter: z.ZodOptional<z.ZodString>;
82
+ }, z.core.$strip>;
83
+ export declare function createWebSearchTool(deps: WebSearchToolDeps): Tool<z.infer<typeof WebSearchInputSchema>, WebSearchOutput>;
84
+ export {};
@@ -0,0 +1,117 @@
1
+ /**
2
+ * `web_search` — the web step of the conversation agent's research.
3
+ *
4
+ * The tool queries a `WebSearchEngine` the embedder injects at the composition
5
+ * root; the SearXNG realization ships beside it in `searxng-engine.ts`. The
6
+ * tool owns the input contract and the search semantics the spec pins — the
7
+ * domain-filter terms and the host re-filter, the queries merge, the bound —
8
+ * and every engine failure rides the ok channel as a data-status variant,
9
+ * never as an error of the turn.
10
+ */
11
+ import { ok } from "neverthrow";
12
+ import { z } from "zod";
13
+ import { defineTool } from "../define-tool.js";
14
+ function parseDomainFilter(raw) {
15
+ const trimmed = (raw ?? "").trim().toLowerCase();
16
+ if (trimmed === "" || trimmed === "-")
17
+ return null;
18
+ if (trimmed.startsWith("-")) {
19
+ const domain = trimmed.slice(1).trim();
20
+ return domain === "" ? null : { include: false, domain };
21
+ }
22
+ return { include: true, domain: trimmed };
23
+ }
24
+ function queryTerms(query, filter) {
25
+ if (!filter)
26
+ return query;
27
+ return `${query} ${filter.include ? "" : "-"}site:${filter.domain}`;
28
+ }
29
+ /** A domain matches a host and each subdomain of the domain. */
30
+ function hostMatchesDomain(host, domain) {
31
+ return host === domain || host.endsWith(`.${domain}`);
32
+ }
33
+ function hostOf(url) {
34
+ try {
35
+ return new URL(url).hostname;
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ /** Filter the merged rows by host again, because an engine can ignore `site:`. */
42
+ function applyDomainFilter(results, filter) {
43
+ if (!filter)
44
+ return [...results];
45
+ return results.filter((result) => {
46
+ const host = hostOf(result.url);
47
+ if (host === null)
48
+ return !filter.include;
49
+ const matches = hostMatchesDomain(host, filter.domain);
50
+ return filter.include ? matches : !matches;
51
+ });
52
+ }
53
+ const WebSearchInputSchema = z
54
+ .object({
55
+ query: z.string().min(1).optional().describe("One free-text search, for example a method name with its domain."),
56
+ queries: z
57
+ .array(z.string().min(1))
58
+ .min(1)
59
+ .max(5)
60
+ .optional()
61
+ .describe("Up to 5 searches that run in one pass. Answers and results merge into one bounded list."),
62
+ numResults: z.number().int().min(1).max(20).default(5).describe("Maximum merged results (1–20, default 5)."),
63
+ recencyFilter: z.enum(["day", "week", "month", "year"]).optional().describe("Keep only results from this recency."),
64
+ domainFilter: z.string().optional().describe('One domain the search stays in, for example "nih.gov". A leading "-" excludes the domain instead.'),
65
+ })
66
+ .refine((input) => (input.query !== undefined) !== (input.queries !== undefined), {
67
+ message: "Give exactly one of `query` or `queries`.",
68
+ });
69
+ export function createWebSearchTool(deps) {
70
+ return defineTool({
71
+ id: "web_search",
72
+ description: "Search the web for pages: titles, URLs, and short snippets, plus any direct answers the engines returned. " +
73
+ "Give `query` for one search, or `queries` (at most 5) for one pass whose answers and results merge into a single " +
74
+ "list of at most `numResults` results, duplicates by URL removed. `domainFilter` restricts the search to one domain " +
75
+ 'and a leading "-" excludes it, for example "-pinterest.com". `recencyFilter` keeps only results from the last day, ' +
76
+ "week, month, or year. Read one of the returned pages with `web_fetch`.\n" +
77
+ "ABSENCE IS NORMAL: an empty results array means no page matched, and a status of http_error, retryable_status, " +
78
+ "schema_mismatch, or not_json names a search that did not answer. Report either one and continue, do not retry unchanged.",
79
+ inputSchema: WebSearchInputSchema,
80
+ describeCall: "none",
81
+ execute: async ({ query, queries, numResults, recencyFilter, domainFilter }) => {
82
+ const filter = parseDomainFilter(domainFilter);
83
+ // The input refine guarantees exactly one of `query` and `queries`.
84
+ let queryList;
85
+ if (queries !== undefined)
86
+ queryList = queries;
87
+ else {
88
+ if (query === undefined)
89
+ throw new Error("search requires query");
90
+ queryList = [query];
91
+ }
92
+ const requests = queryList.map((raw) => deps.engine.search({ query: queryTerms(raw, filter), recencyFilter }));
93
+ const responses = [];
94
+ for (const response of await Promise.all(requests)) {
95
+ // An engine failure is the data-status variant the tool reports, not a turn error.
96
+ if (response.isErr())
97
+ return ok(response.error);
98
+ responses.push(response.value);
99
+ }
100
+ const answers = [];
101
+ const seen = new Set();
102
+ const results = [];
103
+ for (const response of responses) {
104
+ answers.push(...response.answers);
105
+ for (const result of applyDomainFilter(response.results, filter)) {
106
+ if (results.length >= numResults)
107
+ break;
108
+ if (seen.has(result.url))
109
+ continue;
110
+ seen.add(result.url);
111
+ results.push(result);
112
+ }
113
+ }
114
+ return ok({ status: "ok", answers, results });
115
+ },
116
+ });
117
+ }
@@ -14,22 +14,26 @@
14
14
  * the prompt layer.
15
15
  */
16
16
  import { type Result } from "neverthrow";
17
+ import { z } from "zod";
18
+ import { type Tool } from "../define-tool.js";
17
19
  import { type PackageQuery } from "../../sandbox/package-identity.js";
18
20
  import type { ExtendAnalysisFarm, PackageRequestOutcome } from "../../sandbox/types.js";
19
- export interface LinkPackagesDeps {
21
+ export type LinkPackagesDeps = {
20
22
  readonly extendAnalysisFarm: ExtendAnalysisFarm;
21
23
  readonly analysisId: string;
22
- }
24
+ };
23
25
  /** The tool result: one outcome per requested query, index-aligned. */
24
- export interface LinkPackagesResult {
26
+ export type LinkPackagesResult = {
25
27
  readonly outcomes: readonly PackageRequestOutcome[];
26
- }
28
+ };
27
29
  /**
28
30
  * Call the seam, and give the outcomes or the one reason that the call gave
29
31
  * no answer. An `err` and a rejected realization each give that reason, thus
30
32
  * no call site sees a throw.
31
33
  */
32
34
  export declare function callExtendAnalysisFarm(extendAnalysisFarm: ExtendAnalysisFarm, analysisId: string, queries: readonly PackageQuery[]): Promise<Result<readonly PackageRequestOutcome[], string>>;
33
- export declare function createLinkPackagesTool(deps: LinkPackagesDeps): import("../define-tool.js").Tool<{
34
- packages: string[];
35
- }, LinkPackagesResult>;
35
+ declare const LinkPackagesInputSchema: z.ZodObject<{
36
+ packages: z.ZodArray<z.ZodString>;
37
+ }, z.core.$strip>;
38
+ export declare function createLinkPackagesTool(deps: LinkPackagesDeps): Tool<z.infer<typeof LinkPackagesInputSchema>, LinkPackagesResult>;
39
+ export {};
@@ -13,6 +13,8 @@
13
13
  * capability, thus the agent learns one grammar for the plan, the tool, and
14
14
  * the prompt layer.
15
15
  */
16
+ import { errorMessageOf } from "../../lib/thrown.js";
17
+ import { textOf } from "../../lib/unknown-text.js";
16
18
  import { err, ok } from "neverthrow";
17
19
  import { z } from "zod";
18
20
  import { defineTool } from "../define-tool.js";
@@ -44,9 +46,16 @@ export async function callExtendAnalysisFarm(extendAnalysisFarm, analysisId, que
44
46
  return (await extendAnalysisFarm(analysisId, queries)).mapErr((failure) => failure.reason);
45
47
  }
46
48
  catch (cause) {
47
- return err(cause instanceof Error ? cause.message : String(cause));
49
+ return err(errorMessageOf(cause) ?? textOf(cause));
48
50
  }
49
51
  }
52
+ const LinkPackagesInputSchema = z.object({
53
+ packages: z
54
+ .array(z.string().min(1))
55
+ .min(1)
56
+ .max(50)
57
+ .describe('The packages to link into the farm, each as `[python:|r:]<name>[==<version>]`, for example ["scanpy", "r:Seurat", "numpy==1.26.4"]. A bare name searches both tracks.'),
58
+ });
50
59
  export function createLinkPackagesTool(deps) {
51
60
  return defineTool({
52
61
  id: "link_packages",
@@ -60,13 +69,7 @@ export function createLinkPackagesTool(deps) {
60
69
  "or `unavailable` (the link pass itself could not answer — the `reason` says why; it says nothing about the package's presence, so report the reason and do not re-request packages). " +
61
70
  "After a `collision` of one name that BOTH tracks hold, call this tool again for that package with the prefixed form, `python:<name>` or `r:<name>`. " +
62
71
  "A collision is terminal only after that second call also refuses, or when it names two versions of one distribution — then report it and continue without the package.",
63
- inputSchema: z.object({
64
- packages: z
65
- .array(z.string().min(1))
66
- .min(1)
67
- .max(50)
68
- .describe('The packages to link into the farm, each as `[python:|r:]<name>[==<version>]`, for example ["scanpy", "r:Seurat", "numpy==1.26.4"]. A bare name searches both tracks.'),
69
- }),
72
+ inputSchema: LinkPackagesInputSchema,
70
73
  describeCall: ({ packages }) => packages.join(", "),
71
74
  execute: async (input) => {
72
75
  // Every entry parses before any link lands. A partial link over a
@@ -19,6 +19,8 @@
19
19
  * content hash where the source records them. A full listing carries no
20
20
  * hashes — a thousand rows of sha256 would bury the signal.
21
21
  */
22
+ import { z } from "zod";
23
+ import { type Tool } from "../define-tool.js";
22
24
  import type { EnvironmentStorePaths, PoolInventoryPackage, PoolInventorySection } from "../../config/environment-stores.js";
23
25
  import { type Track } from "../../sandbox/package-identity.js";
24
26
  import { type FarmLock } from "../../sandbox/farm.js";
@@ -41,13 +43,16 @@ export declare function trackOfLockSubtree(subtree: string): Track | undefined;
41
43
  */
42
44
  export declare function lockSections(lock: FarmLock): Section[];
43
45
  /**
44
- * Group the image record into its two sections, in the order of the record.
45
- * An empty track yields no section, so the report never carries a heading
46
- * with nothing under it.
46
+ * Group the image record into its sections, in the order of the record. An
47
+ * empty or absent track yields no section, so the report never carries a
48
+ * heading with nothing under it.
47
49
  *
48
50
  * A `system_tools` row renders its `executable` name where the record gives
49
51
  * one, because an agent invokes the binary rather than the conda package
50
- * (the manifest `binaries:` map holds the pairs that differ).
52
+ * (the manifest `binaries:` map holds the pairs that differ). The `r_base`
53
+ * rows are the R track: a `names` lookup of `survival` or `MASS` resolves
54
+ * there, with the version the runtime ships, and the `language: "r"` filter
55
+ * lists them beside the farm packages.
51
56
  */
52
57
  export declare function imageSections(record: ImagePackages): Section[];
53
58
  /** One package entry of a section, with the store identity where the source records it. */
@@ -97,12 +102,12 @@ export type PackagesResult = {
97
102
  readonly content: string;
98
103
  };
99
104
  /** The tool's input, as parsed from `inputSchema`. */
100
- export interface PackagesQuery {
105
+ export type PackagesQuery = {
101
106
  readonly names?: readonly string[];
102
107
  readonly query?: string;
103
108
  readonly language?: "r" | "python" | "cli" | "node";
104
109
  readonly limit?: number;
105
- }
110
+ };
106
111
  /**
107
112
  * Answer a packages query against a parsed catalog. Pure — the tool's `execute`
108
113
  * is only the file read plus this call.
@@ -147,9 +152,16 @@ export declare function readInventorySections(deps: ListAvailablePackagesDeps, a
147
152
  * host-readable farm `inflexa.lock` otherwise (a sandbox agent). The image
148
153
  * record merges into either report.
149
154
  */
150
- export declare function createListAvailablePackagesTool(deps?: ListAvailablePackagesDeps): import("../define-tool.js").Tool<{
151
- names?: string[] | undefined;
152
- query?: string | undefined;
153
- language?: "r" | "python" | "node" | "cli" | undefined;
154
- limit?: number | undefined;
155
- }, PackagesResult>;
155
+ declare const ListAvailablePackagesInputSchema: z.ZodObject<{
156
+ names: z.ZodOptional<z.ZodArray<z.ZodString>>;
157
+ query: z.ZodOptional<z.ZodString>;
158
+ language: z.ZodOptional<z.ZodEnum<{
159
+ cli: "cli";
160
+ node: "node";
161
+ python: "python";
162
+ r: "r";
163
+ }>>;
164
+ limit: z.ZodOptional<z.ZodNumber>;
165
+ }, z.core.$strip>;
166
+ export declare function createListAvailablePackagesTool(deps?: ListAvailablePackagesDeps): Tool<z.infer<typeof ListAvailablePackagesInputSchema>, PackagesResult>;
167
+ export {};
@@ -20,6 +20,9 @@
20
20
  * hashes — a thousand rows of sha256 would bury the signal.
21
21
  */
22
22
  import { ok } from "neverthrow";
23
+ import { presentGet } from "../../lib/present.js";
24
+ import { errorMessageOf } from "../../lib/thrown.js";
25
+ import { textOf } from "../../lib/unknown-text.js";
23
26
  import { z } from "zod";
24
27
  import { defineTool } from "../define-tool.js";
25
28
  import { identityAddress, identityKey, identityOf, parseQuery, resolveQuery, } from "../../sandbox/package-identity.js";
@@ -53,6 +56,8 @@ const DEFAULT_IMAGE_PACKAGES_FILE = `${LIBS_CONTAINER_PATH}/${IMAGE_PACKAGES_FIL
53
56
  */
54
57
  const CLI_TITLE = "System tools (CLI)";
55
58
  const NODE_TITLE = "Node (npm)";
59
+ /** The R packages that ship with the R runtime of the image: the base and the recommended packages. */
60
+ const R_BASE_TITLE = "R (ships with R)";
56
61
  /** The section title of each known lock track. An unknown track titles itself. */
57
62
  const TRACK_TITLES = {
58
63
  python: "Python (pip)",
@@ -97,20 +102,26 @@ export function lockSections(lock) {
97
102
  .filter(([, packages]) => packages.length > 0)
98
103
  .map(([subtree, packages]) => {
99
104
  const track = trackOfLockSubtree(subtree);
100
- return { title: TRACK_TITLES[subtree] ?? subtree, packages, ...(track === undefined ? {} : { track }) };
105
+ return { title: TRACK_TITLES[subtree] ?? subtree, packages, track };
101
106
  });
102
107
  }
103
108
  /**
104
- * Group the image record into its two sections, in the order of the record.
105
- * An empty track yields no section, so the report never carries a heading
106
- * with nothing under it.
109
+ * Group the image record into its sections, in the order of the record. An
110
+ * empty or absent track yields no section, so the report never carries a
111
+ * heading with nothing under it.
107
112
  *
108
113
  * A `system_tools` row renders its `executable` name where the record gives
109
114
  * one, because an agent invokes the binary rather than the conda package
110
- * (the manifest `binaries:` map holds the pairs that differ).
115
+ * (the manifest `binaries:` map holds the pairs that differ). The `r_base`
116
+ * rows are the R track: a `names` lookup of `survival` or `MASS` resolves
117
+ * there, with the version the runtime ships, and the `language: "r"` filter
118
+ * lists them beside the farm packages.
111
119
  */
112
120
  export function imageSections(record) {
113
121
  const sections = [];
122
+ if (record.r_base !== undefined && record.r_base.length > 0) {
123
+ sections.push({ title: R_BASE_TITLE, track: "r", packages: record.r_base.map((pkg) => ({ name: pkg.name, version: pkg.version })) });
124
+ }
114
125
  if (record.system_tools.length > 0) {
115
126
  sections.push({
116
127
  title: CLI_TITLE,
@@ -152,7 +163,7 @@ function foldSections(sections) {
152
163
  open.packages.push(pkg);
153
164
  }
154
165
  }
155
- return [...byTitle.values()].map(({ title, track, packages }) => ({ title, packages, ...(track === undefined ? {} : { track }) }));
166
+ return [...byTitle.values()].map(({ title, track, packages }) => ({ title, packages, track }));
156
167
  }
157
168
  /**
158
169
  * Default cap on a listing — high enough that the real store is never truncated.
@@ -188,7 +199,9 @@ const POOL_UNAVAILABLE_NOTE = "Package list not available — the package pool c
188
199
  */
189
200
  const LANGUAGE_MATCHERS = {
190
201
  // `CLI_TITLE` — the conda-installed bioinformatics executables.
202
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the section heading names the executables section or the standalone word CLI, matched in display text.
191
203
  cli: (t) => /system tools|\bcli\b/i.test(t),
204
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the heading opens with the word node, the display form of the section name.
192
205
  node: (t) => /^node\b/i.test(t),
193
206
  };
194
207
  /** Whether one section answers the `language` filter of a call. */
@@ -197,7 +210,7 @@ function matchesLanguage(section, language) {
197
210
  return true;
198
211
  if (language === "r" || language === "python")
199
212
  return section.track === language;
200
- return LANGUAGE_MATCHERS[language](section.title);
213
+ return presentGet(LANGUAGE_MATCHERS, language, `the heading matcher for ${language}`)(section.title);
201
214
  }
202
215
  /**
203
216
  * The identity names that the Python track and the R track both hold.
@@ -287,9 +300,9 @@ function presentEntry(requested, row) {
287
300
  present: true,
288
301
  name: row.entry.name,
289
302
  section: row.section,
290
- ...(row.entry.version === undefined ? {} : { version: row.entry.version }),
291
- ...(row.entry.storeDir === undefined ? {} : { storeDir: row.entry.storeDir }),
292
- ...(row.entry.hash === undefined ? {} : { hash: row.entry.hash }),
303
+ version: row.entry.version,
304
+ storeDir: row.entry.storeDir,
305
+ hash: row.entry.hash,
293
306
  };
294
307
  }
295
308
  /**
@@ -357,7 +370,7 @@ export function queryPackages(rawSections, { names, query, language, limit }) {
357
370
  if (hits.length > 0)
358
371
  return hits;
359
372
  const suggestion = resolution.kind === "unknown" ? resolution.suggestion : undefined;
360
- return [{ requested, present: false, ...(suggestion === undefined ? {} : { suggestion: suggestion.name }) }];
373
+ return [{ requested, present: false, suggestion: suggestion?.name }];
361
374
  });
362
375
  return { available: true, checked };
363
376
  }
@@ -371,7 +384,7 @@ export function queryPackages(rawSections, { names, query, language, limit }) {
371
384
  .map((s) => ({
372
385
  title: s.title,
373
386
  packages: needle ? s.packages.filter((p) => p.name.toLowerCase().includes(needle)) : s.packages,
374
- ...(s.track === undefined ? {} : { track: s.track }),
387
+ track: s.track,
375
388
  }))
376
389
  .filter((s) => s.packages.length > 0);
377
390
  const total = filtered.reduce((n, s) => n + s.packages.length, 0);
@@ -414,7 +427,7 @@ export async function readInventorySections(deps, analysisId) {
414
427
  if (deps.readPoolInventory) {
415
428
  const pool = await deps.readPoolInventory().catch((cause) => ({
416
429
  kind: "unavailable",
417
- reason: cause instanceof Error ? cause.message : String(cause),
430
+ reason: errorMessageOf(cause) ?? textOf(cause),
418
431
  }));
419
432
  if (pool.kind === "unavailable")
420
433
  return { kind: "unavailable", reason: pool.reason };
@@ -441,6 +454,22 @@ export async function readInventorySections(deps, analysisId) {
441
454
  * host-readable farm `inflexa.lock` otherwise (a sandbox agent). The image
442
455
  * record merges into either report.
443
456
  */
457
+ const ListAvailablePackagesInputSchema = z.object({
458
+ names: z
459
+ .array(z.string())
460
+ .max(100)
461
+ .optional()
462
+ .describe("Check these packages for presence. Each entry is a query in the one grammar, `[python:|r:]<name>`. Returns one entry for each track that holds the name: present/absent + the language track it lives in. An absent name carries the spelling the pool holds, where there is one."),
463
+ query: z.string().optional().describe("Case-insensitive substring filter over package names."),
464
+ language: z.enum(["r", "python", "cli", "node"]).optional().describe("Restrict results to one language track."),
465
+ limit: z
466
+ .number()
467
+ .int()
468
+ .min(1)
469
+ .max(DEFAULT_LIMIT)
470
+ .optional()
471
+ .describe(`Cap the packages listed. Omit to get the whole set — the store fits well within the ${DEFAULT_LIMIT} ceiling. Ignored when \`names\` is given.`),
472
+ });
444
473
  export function createListAvailablePackagesTool(deps = {}) {
445
474
  const readPoolInventory = deps.readPoolInventory;
446
475
  // The scope decides the framing sentence: a sandbox agent reads what it can
@@ -465,22 +494,7 @@ export function createListAvailablePackagesTool(deps = {}) {
465
494
  "`language`: restrict to one track (r | python | cli | node). " +
466
495
  "`limit`: cap the packages listed; the response always carries the true `total` and a `hasMore` flag, so truncation is never silent. " +
467
496
  "Each entry renders as `name==version` where the source pins a version, and a `names` check also reports the store directory and the content hash where the source records them.",
468
- inputSchema: z.object({
469
- names: z
470
- .array(z.string())
471
- .max(100)
472
- .optional()
473
- .describe("Check these packages for presence. Each entry is a query in the one grammar, `[python:|r:]<name>`. Returns one entry for each track that holds the name: present/absent + the language track it lives in. An absent name carries the spelling the pool holds, where there is one."),
474
- query: z.string().optional().describe("Case-insensitive substring filter over package names."),
475
- language: z.enum(["r", "python", "cli", "node"]).optional().describe("Restrict results to one language track."),
476
- limit: z
477
- .number()
478
- .int()
479
- .min(1)
480
- .max(DEFAULT_LIMIT)
481
- .optional()
482
- .describe(`Cap the packages listed. Omit to get the whole set — the store fits well within the ${DEFAULT_LIMIT} ceiling. Ignored when \`names\` is given.`),
483
- }),
497
+ inputSchema: ListAvailablePackagesInputSchema,
484
498
  // `queryPackages` returns on `names` before it reads another field, thus
485
499
  // the presence check comes first. An empty array is not a presence check.
486
500
  // `names` are exact identifiers a caller checks for, thus they name the
@@ -27,9 +27,17 @@
27
27
  * only ever ENRICHES an entry — a file with no receipt and no catalog match is
28
28
  * still returned, because a user-provided store is as valid as a managed one.
29
29
  */
30
+ import { z } from "zod";
30
31
  import type { EnvironmentStorePaths } from "../../config/environment-stores.js";
32
+ import { type Tool } from "../define-tool.js";
33
+ declare const ListAvailableRefsInputSchema: z.ZodObject<{
34
+ path: z.ZodOptional<z.ZodString>;
35
+ category: z.ZodOptional<z.ZodString>;
36
+ query: z.ZodOptional<z.ZodString>;
37
+ limit: z.ZodOptional<z.ZodNumber>;
38
+ }, z.core.$strip>;
31
39
  export type ListAvailableRefsDeps = Pick<EnvironmentStorePaths, "refStorePath">;
32
- export interface ReferenceInventoryMetadata {
40
+ export type ReferenceInventoryMetadata = {
33
41
  readonly datasetId?: string;
34
42
  readonly version?: string;
35
43
  readonly title?: string;
@@ -45,11 +53,11 @@ export interface ReferenceInventoryMetadata {
45
53
  readonly contents?: string;
46
54
  readonly rows?: number;
47
55
  readonly endpoint?: string;
48
- }
49
- interface ReferenceInventoryEntryBase {
56
+ };
57
+ type ReferenceInventoryEntryBase = {
50
58
  readonly path: string;
51
59
  readonly metadata?: ReferenceInventoryMetadata;
52
- }
60
+ };
53
61
  /** A bounded, no-follow observation of the reference store. */
54
62
  export type ReferenceInventoryEntry = (ReferenceInventoryEntryBase & {
55
63
  readonly kind: "file";
@@ -69,7 +77,7 @@ export type ReferenceInventoryEntry = (ReferenceInventoryEntryBase & {
69
77
  * is explicit: `returned`/`total`/`hasMore` describe how much of the match set
70
78
  * this response carries, and `categories` is the drill-in index.
71
79
  */
72
- export interface ReferenceInventoryResult {
80
+ export type ReferenceInventoryResult = {
73
81
  readonly available: boolean;
74
82
  readonly state: RawScan["state"] | "out_of_scope";
75
83
  readonly path: string;
@@ -81,20 +89,36 @@ export interface ReferenceInventoryResult {
81
89
  readonly hasMore: boolean;
82
90
  readonly categories: readonly string[];
83
91
  readonly content: string;
84
- }
85
- interface RawScan {
92
+ };
93
+ type RawScan = {
86
94
  readonly state: "unavailable" | "empty" | "populated" | "not_found" | "not_a_directory" | "symlink";
87
95
  readonly entries: ReferenceInventoryEntry[];
88
96
  readonly scannedEntries: number;
89
97
  readonly truncated: boolean;
90
98
  readonly receipts?: unknown[];
91
99
  readonly legacyEntries?: unknown[];
92
- }
100
+ };
101
+ /**
102
+ * The dataset ids the install receipts of the store report, for a caller that must know whether a
103
+ * declared dataset is present BEFORE a run starts.
104
+ *
105
+ * `undefined` means the store itself could not be answered for: an unreadable root, a `.inflexa`
106
+ * that crosses a symlink, or a receipts directory that exists and cannot be listed. That is NOT an
107
+ * empty install, and a caller must never collapse the two — every dataset would read as absent, and
108
+ * a launch would be refused over data that is sitting in the store.
109
+ *
110
+ * An empty set is a real answer: the store is readable and it holds no receipt.
111
+ */
112
+ export declare function readInstalledDatasetIds(deps: ListAvailableRefsDeps): Promise<ReadonlySet<string> | undefined>;
93
113
  /** Create reference discovery over the host-visible reference store. */
94
- export declare function createListAvailableRefsTool(deps: ListAvailableRefsDeps): import("../define-tool.js").Tool<{
95
- path?: string | undefined;
96
- category?: string | undefined;
97
- query?: string | undefined;
98
- limit?: number | undefined;
99
- }, ReferenceInventoryResult>;
114
+ /**
115
+ * The whole enriched inventory of the store, for a host-side join: which
116
+ * collection a procedure names is present, and where. No envelope bound,
117
+ * because the caller keeps the join and drops the listing.
118
+ */
119
+ export declare function readReferenceInventory(storeRoot: string): Promise<{
120
+ readonly available: boolean;
121
+ readonly entries: readonly ReferenceInventoryEntry[];
122
+ }>;
123
+ export declare function createListAvailableRefsTool(deps: ListAvailableRefsDeps): Tool<z.infer<typeof ListAvailableRefsInputSchema>, ReferenceInventoryResult>;
100
124
  export {};