@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
@@ -4,7 +4,7 @@
4
4
  * One URL in, extracted text out: HTML becomes Markdown (Readability over a
5
5
  * `linkedom` DOM, then Turndown, with the body text as the fallback), a PDF
6
6
  * becomes the text of its first 100 pages through `pdf-parse`, and a text or
7
- * JSON body passes through. A bad scheme, a denied approval, an HTTP error, an
7
+ * JSON body passes through. A bad scheme, an internal address, an HTTP error, an
8
8
  * oversized body, a redirect chain past the limit, and a body the tool cannot
9
9
  * extract are all normal results on the ok channel — never a failure of the
10
10
  * turn.
@@ -15,9 +15,11 @@
15
15
  * runs no name lookup for a literal — and a name classifies inside the `lookup`
16
16
  * hook of `node:http`/`node:https`, over every address of the resolution,
17
17
  * because the connect layer falls back to a later address after an earlier one
18
- * fails. A guarded hop is destroyed before the user is asked, and an approval
19
- * re-sends the hop.
18
+ * fails. A guarded hop is destroyed before it connects, and the call gives a
19
+ * refusal that names the origin. The tool asks nothing.
20
20
  */
21
+ import { errorMessageOf } from "../../lib/thrown.js";
22
+ import { textOf } from "../../lib/unknown-text.js";
21
23
  import { lookup as dnsLookup } from "node:dns";
22
24
  import { request as httpRequest } from "node:http";
23
25
  import { request as httpsRequest } from "node:https";
@@ -28,8 +30,9 @@ import { Readability } from "@mozilla/readability";
28
30
  import { parseHTML } from "linkedom";
29
31
  import TurndownService from "turndown";
30
32
  import { z } from "zod";
33
+ import { presentLast } from "../../lib/present.js";
34
+ import { hasWhitespace } from "../../lib/text.js";
31
35
  import { keptTextOf, pairSafeIndex, TOOL_RESULT_CAP, toolOutputRef } from "../../loop/tool-output.js";
32
- import { AskRejectedError } from "../approval/contract.js";
33
36
  import { defineTool } from "../define-tool.js";
34
37
  import { HARNESS_USER_AGENT } from "../lib/api-utils.js";
35
38
  import { isGuardedAddress } from "./guarded-address.js";
@@ -66,7 +69,7 @@ function hopTimeoutError(url) {
66
69
  function isAbort(error, ctx) {
67
70
  return error.name === "AbortError" || ctx.signal.aborted;
68
71
  }
69
- /** The origin of an `always` approval: scheme, host, and the port the connection uses, with the default filled in. */
72
+ /** The origin of a URL: scheme, host, and the port the connection uses, with the default filled in. */
70
73
  function originOf(url) {
71
74
  const port = url.port !== "" ? url.port : url.protocol === "https:" ? "443" : "80";
72
75
  return `${url.protocol}//${url.hostname}:${port}`;
@@ -100,37 +103,17 @@ function withoutCredentials(url) {
100
103
  clean.password = "";
101
104
  return clean;
102
105
  }
103
- async function askForOrigin(url, origin, ctx) {
104
- const request = {
105
- title: "web_fetch: read a page from a guarded address",
106
- command: url.toString(),
107
- grantKey: `web_fetch:${origin}`,
108
- detail: `The address of ${url.hostname} is in a guarded range (loopback, private, link-local, or reserved). ` +
109
- `An "always" answer approves every later web_fetch of the origin ${origin}; a "once" answer approves this call only.`,
106
+ function refusedGuarded(url) {
107
+ return {
108
+ status: "refused",
109
+ text: `web_fetch did not read ${url.toString()}: the origin ${originOf(url)} has an internal address ` +
110
+ `(loopback, private, link-local, or reserved), and web_fetch reads no internal address.`,
110
111
  };
111
- try {
112
- await ctx.ask(request);
113
- return { kind: "approved" };
114
- }
115
- catch (error) {
116
- if (error instanceof AskRejectedError) {
117
- return {
118
- kind: "denied",
119
- output: {
120
- status: "refused",
121
- text: `web_fetch did not read ${url.toString()}: the guarded address ${url.hostname} was not approved.`,
122
- ...(error.feedback !== undefined ? { feedback: error.feedback } : {}),
123
- },
124
- };
125
- }
126
- throw error;
127
- }
128
112
  }
129
113
  /**
130
114
  * Send one hop. The `lookup` hook classifies every address of each resolution
131
- * before the connect can use any of it: when a guarded address appears and the
132
- * origin is not approved, the hook answers nothing and destroys the request, so
133
- * no socket opens while the user reads the prompt.
115
+ * before the connect can use any of it: when a guarded address appears, the hook
116
+ * answers nothing and destroys the request, so no socket opens.
134
117
  */
135
118
  function sendHop(url, state) {
136
119
  return new Promise((resolve, reject) => {
@@ -169,8 +152,7 @@ function sendHop(url, state) {
169
152
  callback(error, "");
170
153
  return;
171
154
  }
172
- const guarded = addresses.some((entry) => isGuardedAddress(entry.address));
173
- if (guarded && !state.approvedOrigins.has(originOf(url))) {
155
+ if (addresses.some((entry) => isGuardedAddress(entry.address))) {
174
156
  // With no callback the connect never starts, and the destroy
175
157
  // carries the signal out through the error event.
176
158
  request.destroy(new GuardedHopSignal());
@@ -193,6 +175,7 @@ function sendHop(url, state) {
193
175
  },
194
176
  });
195
177
  // The socket-idle timeout below does not bound a server that trickles bytes, so a wall clock bounds the whole hop.
178
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- a guard, not a wait: it destroys the in-flight hop at the wall clock, unrefs so it never holds the process, and the settle disposes it.
196
179
  const deadline = setTimeout(() => {
197
180
  const error = hopTimeoutError(url);
198
181
  liveResponse?.destroy(error);
@@ -289,6 +272,16 @@ const MAX_HTML_NESTING = 512;
289
272
  const VOID_TAGS = new Set(["area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param", "source", "track", "wbr"]);
290
273
  /** Elements whose content is raw text: the scanner skips to their close tag, because markup inside them is not structure. */
291
274
  const RAW_TEXT_TAGS = new Set(["script", "style", "textarea", "title", "xmp", "noscript", "iframe", "noembed"]);
275
+ /** A raw-text close repeats the element name in any letter case and ends at whitespace, a slash, or the bracket. */
276
+ function isRawTextClose(html, at, name) {
277
+ if (html.slice(at + 2, at + 2 + name.length).toLowerCase() !== name)
278
+ return false;
279
+ const next = html.charAt(at + 2 + name.length);
280
+ return next === ">" || next === "/" || hasWhitespace(next);
281
+ }
282
+ function isTagNameChar(char) {
283
+ return (char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9") || char === ":" || char === "-";
284
+ }
292
285
  /** An opening tag in a family closes its open peers before it nests — the implied-end rules that keep a list or a table row of any length flat. */
293
286
  const IMPLIED_CLOSE_PEERS = {
294
287
  li: new Set(["li"]),
@@ -316,10 +309,17 @@ const IMPLIED_CLOSE_PEERS = {
316
309
  export function htmlNestingDepth(html) {
317
310
  let max = 0;
318
311
  const stack = [];
319
- const tagName = (start, end) => html
320
- .slice(start, end)
321
- .match(/^[a-zA-Z][a-zA-Z0-9:-]*/)?.[0]
322
- ?.toLowerCase() ?? "";
312
+ const tagName = (start, end) => {
313
+ const text = html.slice(start, end);
314
+ const first = text.charAt(0);
315
+ const isLetter = (first >= "a" && first <= "z") || (first >= "A" && first <= "Z");
316
+ if (!isLetter)
317
+ return "";
318
+ let at = 1;
319
+ while (at < text.length && isTagNameChar(text.charAt(at)))
320
+ at++;
321
+ return text.slice(0, at).toLowerCase();
322
+ };
323
323
  let i = 0;
324
324
  while (i < html.length) {
325
325
  if (html[i] !== "<") {
@@ -372,17 +372,17 @@ export function htmlNestingDepth(html) {
372
372
  if (name === "")
373
373
  continue;
374
374
  if (RAW_TEXT_TAGS.has(name)) {
375
- const close = new RegExp(`</${name}(?=[\\s/>])`, "gi");
376
- close.lastIndex = i;
377
- const found = close.exec(html);
378
- i = found === null ? html.length : found.index + found[0].length;
375
+ let close = html.indexOf("</", i);
376
+ while (close !== -1 && !isRawTextClose(html, close, name))
377
+ close = html.indexOf("</", close + 1);
378
+ i = close === -1 ? html.length : close + 2 + name.length;
379
379
  continue;
380
380
  }
381
381
  if (selfClosed || VOID_TAGS.has(name))
382
382
  continue;
383
383
  const peers = IMPLIED_CLOSE_PEERS[name];
384
384
  if (peers !== undefined) {
385
- while (stack.length > 0 && peers.has(stack[stack.length - 1]))
385
+ while (stack.length > 0 && peers.has(presentLast(stack, "the top of the tag stack")))
386
386
  stack.pop();
387
387
  }
388
388
  stack.push(name);
@@ -399,7 +399,7 @@ function htmlToMarkdown(body) {
399
399
  const article = new Readability(dom.document).parse();
400
400
  if (article?.content)
401
401
  return markdownConverter.turndown(article.content).trim();
402
- return (dom.document.body?.textContent ?? "").trim();
402
+ return dom.document.body.textContent.trim();
403
403
  }
404
404
  /** Hostile HTML can throw inside the extraction stack; the body text, then the status union, catch the throw. A page that nests past the bound never reaches a parser, because the parse itself is the stall. */
405
405
  function htmlExtractionOf(body) {
@@ -413,7 +413,7 @@ function htmlExtractionOf(body) {
413
413
  catch {
414
414
  try {
415
415
  const dom = parseHTML(html);
416
- return { kind: "text", text: (dom.document.body?.textContent ?? "").trim() };
416
+ return { kind: "text", text: dom.document.body.textContent.trim() };
417
417
  }
418
418
  catch {
419
419
  return { kind: "unextractable", detail: "the HTML extraction failed" };
@@ -436,7 +436,7 @@ async function extractBody(contentType, body) {
436
436
  return { kind: "text", text: result.text.trim(), pdfCut };
437
437
  }
438
438
  catch (error) {
439
- return { kind: "unextractable", detail: `the PDF parser failed: ${error instanceof Error ? error.message : String(error)}` };
439
+ return { kind: "unextractable", detail: `the PDF parser failed: ${errorMessageOf(error) ?? textOf(error)}` };
440
440
  }
441
441
  finally {
442
442
  await parser.destroy();
@@ -449,13 +449,15 @@ async function extractBody(contentType, body) {
449
449
  }
450
450
  /** Build the ok result for one returned text, so the serialized-cap shrink rebuilds the same fields each round. */
451
451
  function okResultOf(base, fullText, kept, shown) {
452
- return {
452
+ const result = {
453
453
  ...base,
454
- ...(kept !== undefined ? { kept } : {}),
454
+ kept,
455
455
  text: shown,
456
456
  cut: shown.length < fullText.length,
457
- ...(shown.length < fullText.length && kept === undefined ? { remainderNotKept: true } : {}),
458
457
  };
458
+ if (shown.length < fullText.length && kept === undefined)
459
+ result.remainderNotKept = true;
460
+ return result;
459
461
  }
460
462
  async function fetchOneUrl(rawUrl, deps, ctx) {
461
463
  let parsed;
@@ -465,11 +467,9 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
465
467
  catch {
466
468
  return { status: "invalid_url", text: `web_fetch cannot read ${rawUrl}: it is not a valid URL.` };
467
469
  }
468
- const approvedOrigins = new Set();
469
470
  const state = {
470
471
  lookup: deps.lookup ?? dnsLookup,
471
472
  hopRequest: deps.hopRequest ?? defaultHopRequest,
472
- approvedOrigins,
473
473
  ctx,
474
474
  };
475
475
  let redirects = 0;
@@ -479,24 +479,14 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
479
479
  }
480
480
  if (current.username !== "" || current.password !== "")
481
481
  current = withoutCredentials(current);
482
- const origin = originOf(current);
483
482
  const literal = stripAddressBrackets(current.hostname);
484
- if (isIP(literal) !== 0 && isGuardedAddress(literal) && !approvedOrigins.has(origin)) {
485
- const asked = await askForOrigin(current, origin, ctx);
486
- if (asked.kind === "denied")
487
- return asked.output;
488
- approvedOrigins.add(origin);
489
- }
483
+ if (isIP(literal) !== 0 && isGuardedAddress(literal))
484
+ return refusedGuarded(current);
490
485
  const hop = await sendHop(current, state);
491
486
  if (hop.kind === "failed")
492
487
  return hop.output;
493
- if (hop.kind === "guarded") {
494
- const asked = await askForOrigin(current, origin, ctx);
495
- if (asked.kind === "denied")
496
- return asked.output;
497
- approvedOrigins.add(origin);
498
- continue;
499
- }
488
+ if (hop.kind === "guarded")
489
+ return refusedGuarded(current);
500
490
  const response = hop.response;
501
491
  try {
502
492
  const status = response.statusCode ?? 0;
@@ -565,7 +555,7 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
565
555
  status: "unextractable",
566
556
  contentType,
567
557
  text: `web_fetch cannot extract text from the content type ${named}.`,
568
- ...(extracted.detail !== undefined ? { detail: extracted.detail } : {}),
558
+ detail: extracted.detail,
569
559
  };
570
560
  }
571
561
  const fullText = extracted.text.trim();
@@ -575,7 +565,7 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
575
565
  finalUrl: current.toString(),
576
566
  contentType,
577
567
  totalLength: fullText.length,
578
- ...(extracted.pdfCut !== undefined ? { pdfCut: extracted.pdfCut } : {}),
568
+ pdfCut: extracted.pdfCut,
579
569
  };
580
570
  let output = okResultOf(base, fullText, undefined, shown);
581
571
  while (JSON.stringify(output).length > RESULT_BUDGET && shown.length > 0) {
@@ -593,20 +583,23 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
593
583
  ref,
594
584
  toolName: "web_fetch",
595
585
  toolCallId: ctx.invocationId,
596
- ...(ctx.session.scope.threadId !== undefined ? { threadId: ctx.session.scope.threadId } : {}),
586
+ threadId: ctx.session.scope.threadId,
597
587
  content,
598
588
  totalLength: fullText.length,
599
589
  });
600
590
  if (put.isOk())
601
591
  kept = { ref, keptLength: content.length };
602
592
  }
603
- return okResultOf({ ...base, ...(kept !== undefined ? { kept } : {}) }, fullText, kept, shown);
593
+ return okResultOf(base, fullText, kept, shown);
604
594
  }
605
595
  finally {
606
596
  hop.dispose();
607
597
  }
608
598
  }
609
599
  }
600
+ const WebFetchInputSchema = z.object({
601
+ url: z.string().min(1).max(2048).describe("The http or https URL of one page to read, for example a page a web_search result named."),
602
+ });
610
603
  export function createWebFetchTool(deps = {}) {
611
604
  return defineTool({
612
605
  id: "web_fetch",
@@ -615,12 +608,10 @@ export function createWebFetchTool(deps = {}) {
615
608
  "The tool returns at most 30,000 characters; a longer text is cut, and the result carries a reference " +
616
609
  "through which `read_tool_output` reads the remainder when the harness kept it.\n" +
617
610
  "ABSENCE AND FAILURE ARE NORMAL: the statuses invalid_url (a URL the tool cannot parse), " +
618
- "unsupported_scheme (a scheme that is not http or https), refused (a guarded address the user did not " +
619
- "approve), http_error, redirect_limit, body_too_large, unextractable, and request_failed each name what " +
611
+ "unsupported_scheme (a scheme that is not http or https), refused (an internal address: loopback, " +
612
+ "private, link-local, or reserved), http_error, redirect_limit, body_too_large, unextractable, and request_failed each name what " +
620
613
  "happened. Report the status and continue, do not retry unchanged.",
621
- inputSchema: z.object({
622
- url: z.string().min(1).max(2048).describe("The http or https URL of one page to read, for example a page a web_search result named."),
623
- }),
614
+ inputSchema: WebFetchInputSchema,
624
615
  describeCall: ({ url }) => url,
625
616
  execute: async ({ url }, ctx) => ok(await fetchOneUrl(url, deps, ctx)),
626
617
  });
@@ -9,15 +9,17 @@
9
9
  * never as an error of the turn.
10
10
  */
11
11
  import { type Result } from "neverthrow";
12
- export interface WebSearchAnswer {
12
+ import { z } from "zod";
13
+ import { type Tool } from "../define-tool.js";
14
+ export type WebSearchAnswer = {
13
15
  readonly answer?: string;
14
16
  readonly url?: string;
15
- }
16
- export interface WebSearchResult {
17
+ };
18
+ export type WebSearchResult = {
17
19
  readonly title: string;
18
20
  readonly url: string;
19
21
  readonly snippet?: string;
20
- }
22
+ };
21
23
  export type WebSearchOutput = {
22
24
  readonly status: "ok";
23
25
  readonly answers: readonly WebSearchAnswer[];
@@ -39,11 +41,11 @@ export type WebSearchOutput = {
39
41
  readonly detail?: string;
40
42
  };
41
43
  /** One query with its terms already composed: the engine adds transport, not semantics. */
42
- export interface WebSearchRequest {
44
+ export type WebSearchRequest = {
43
45
  /** The final query text, `site:` / `-site:` terms included. */
44
46
  readonly query: string;
45
47
  readonly recencyFilter?: "day" | "week" | "month" | "year";
46
- }
48
+ };
47
49
  /** What one query returned: the mapped answers and the mapped result rows. */
48
50
  export type WebSearchPage = {
49
51
  readonly answers: readonly WebSearchAnswer[];
@@ -59,17 +61,24 @@ export type WebSearchEngineError = Exclude<WebSearchOutput, {
59
61
  * query terms and the optional recency filter, and resolves to the page or to
60
62
  * the error variant that names the failure.
61
63
  */
62
- export interface WebSearchEngine {
64
+ export type WebSearchEngine = {
63
65
  search(request: WebSearchRequest): Promise<Result<WebSearchPage, WebSearchEngineError>>;
64
- }
65
- export interface WebSearchToolDeps {
66
+ };
67
+ export type WebSearchToolDeps = {
66
68
  /** The web-search engine the embedder injected. */
67
69
  readonly engine: WebSearchEngine;
68
- }
69
- export declare function createWebSearchTool(deps: WebSearchToolDeps): import("../define-tool.js").Tool<{
70
- numResults: number;
71
- query?: string | undefined;
72
- queries?: string[] | undefined;
73
- recencyFilter?: "year" | "day" | "week" | "month" | undefined;
74
- domainFilter?: string | undefined;
75
- }, WebSearchOutput>;
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 {};
@@ -50,6 +50,22 @@ function applyDomainFilter(results, filter) {
50
50
  return filter.include ? matches : !matches;
51
51
  });
52
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
+ });
53
69
  export function createWebSearchTool(deps) {
54
70
  return defineTool({
55
71
  id: "web_search",
@@ -60,31 +76,20 @@ export function createWebSearchTool(deps) {
60
76
  "week, month, or year. Read one of the returned pages with `web_fetch`.\n" +
61
77
  "ABSENCE IS NORMAL: an empty results array means no page matched, and a status of http_error, retryable_status, " +
62
78
  "schema_mismatch, or not_json names a search that did not answer. Report either one and continue, do not retry unchanged.",
63
- inputSchema: z
64
- .object({
65
- query: z.string().min(1).optional().describe("One free-text search, for example a method name with its domain."),
66
- queries: z
67
- .array(z.string().min(1))
68
- .min(1)
69
- .max(5)
70
- .optional()
71
- .describe("Up to 5 searches that run in one pass. Answers and results merge into one bounded list."),
72
- numResults: z.number().int().min(1).max(20).default(5).describe("Maximum merged results (1–20, default 5)."),
73
- recencyFilter: z.enum(["day", "week", "month", "year"]).optional().describe("Keep only results from this recency."),
74
- domainFilter: z
75
- .string()
76
- .optional()
77
- .describe('One domain the search stays in, for example "nih.gov". A leading "-" excludes the domain instead.'),
78
- })
79
- .refine((input) => (input.query !== undefined) !== (input.queries !== undefined), {
80
- message: "Give exactly one of `query` or `queries`.",
81
- }),
79
+ inputSchema: WebSearchInputSchema,
82
80
  describeCall: "none",
83
81
  execute: async ({ query, queries, numResults, recencyFilter, domainFilter }) => {
84
82
  const filter = parseDomainFilter(domainFilter);
85
83
  // The input refine guarantees exactly one of `query` and `queries`.
86
- const queryList = queries ?? [query];
87
- const requests = queryList.map((raw) => deps.engine.search({ query: queryTerms(raw, filter), ...(recencyFilter ? { recencyFilter } : {}) }));
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 }));
88
93
  const responses = [];
89
94
  for (const response of await Promise.all(requests)) {
90
95
  // An engine failure is the data-status variant the tool reports, not a turn error.
@@ -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";
@@ -100,12 +102,12 @@ export type PackagesResult = {
100
102
  readonly content: string;
101
103
  };
102
104
  /** The tool's input, as parsed from `inputSchema`. */
103
- export interface PackagesQuery {
105
+ export type PackagesQuery = {
104
106
  readonly names?: readonly string[];
105
107
  readonly query?: string;
106
108
  readonly language?: "r" | "python" | "cli" | "node";
107
109
  readonly limit?: number;
108
- }
110
+ };
109
111
  /**
110
112
  * Answer a packages query against a parsed catalog. Pure — the tool's `execute`
111
113
  * is only the file read plus this call.
@@ -150,9 +152,16 @@ export declare function readInventorySections(deps: ListAvailablePackagesDeps, a
150
152
  * host-readable farm `inflexa.lock` otherwise (a sandbox agent). The image
151
153
  * record merges into either report.
152
154
  */
153
- export declare function createListAvailablePackagesTool(deps?: ListAvailablePackagesDeps): import("../define-tool.js").Tool<{
154
- names?: string[] | undefined;
155
- query?: string | undefined;
156
- language?: "r" | "python" | "node" | "cli" | undefined;
157
- limit?: number | undefined;
158
- }, 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 {};