@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
@@ -8,7 +8,9 @@
8
8
  * key to omit.
9
9
  */
10
10
  import { z } from "zod";
11
- import { apiFetch, apiFetchValidated, parseTSV } from "./api-utils.js";
11
+ import { apiFetchText, apiFetchValidated, parseTSV } from "./api-utils.js";
12
+ import { collapseWhitespace } from "../../lib/text.js";
13
+ import { stripHtmlTags } from "./html-text.js";
12
14
  const KEGG_BASE = "https://rest.kegg.jp";
13
15
  // Both `reactome.org/ContentService` and `release.reactome.org/ContentService`
14
16
  // answer 200 on each path that this file calls. The two hosts serve different
@@ -17,16 +19,7 @@ const KEGG_BASE = "https://rest.kegg.jp";
17
19
  // links to stay on the primary host.
18
20
  const REACTOME_BASE = "https://release.reactome.org/ContentService";
19
21
  export function stripHtmlAndCollapseWs(s) {
20
- // Strip tags to a fixpoint: a single pass can leave a `<…>` behind when
21
- // removing an inner tag lets the surrounding angle brackets form a new one,
22
- // so repeat until the string stops changing.
23
- let out = s;
24
- let prev;
25
- do {
26
- prev = out;
27
- out = out.replace(/<[^>]+>/g, "");
28
- } while (out !== prev);
29
- return out.replace(/\s+/g, " ").trim();
22
+ return collapseWhitespace(stripHtmlTags(s));
30
23
  }
31
24
  const ORGANISM_MAP = {
32
25
  hsa: "Homo sapiens",
@@ -60,7 +53,7 @@ export const ReactomeParticipantEntitiesSchema = z.array(z.object({
60
53
  refEntities: z.array(z.object({ schemaClass: z.string().optional(), identifier: z.string().optional() })).optional(),
61
54
  }));
62
55
  export async function searchKegg(query, organism, maxResults, includeGenes) {
63
- const searchRes = await apiFetch(`${KEGG_BASE}/find/pathway/${encodeURIComponent(query)}`, { parseAs: "text" });
56
+ const searchRes = await apiFetchText(`${KEGG_BASE}/find/pathway/${encodeURIComponent(query)}`);
64
57
  if (searchRes.isErr())
65
58
  return [];
66
59
  const rows = parseTSV(searchRes.value);
@@ -75,7 +68,7 @@ export async function searchKegg(query, organism, maxResults, includeGenes) {
75
68
  });
76
69
  if (includeGenes) {
77
70
  for (const pw of pathways) {
78
- const geneRes = await apiFetch(`${KEGG_BASE}/link/${organism}/${pw.id}`, { parseAs: "text" });
71
+ const geneRes = await apiFetchText(`${KEGG_BASE}/link/${organism}/${pw.id}`);
79
72
  if (geneRes.isOk()) {
80
73
  const geneRows = parseTSV(geneRes.value);
81
74
  pw.genes = geneRows.map((r) => (r[1] ?? "").replace(`${organism}:`, ""));
@@ -125,13 +118,13 @@ export function parseKeggPathwayLinks(rows) {
125
118
  * organism, thus it replaces one `get/{id}` call for each membership.
126
119
  */
127
120
  export async function keggPathwaysForGene(geneSymbol, organism, maxResults) {
128
- const geneRes = await apiFetch(`${KEGG_BASE}/find/${organism}/${encodeURIComponent(geneSymbol)}`, { parseAs: "text" });
121
+ const geneRes = await apiFetchText(`${KEGG_BASE}/find/${organism}/${encodeURIComponent(geneSymbol)}`);
129
122
  if (geneRes.isErr())
130
123
  return [];
131
124
  const geneId = selectKeggGeneId(parseTSV(geneRes.value), geneSymbol);
132
125
  if (!geneId)
133
126
  return [];
134
- const linkRes = await apiFetch(`${KEGG_BASE}/link/pathway/${encodeURIComponent(geneId)}`, { parseAs: "text" });
127
+ const linkRes = await apiFetchText(`${KEGG_BASE}/link/pathway/${encodeURIComponent(geneId)}`);
135
128
  if (linkRes.isErr())
136
129
  return [];
137
130
  const pathwayIds = parseKeggPathwayLinks(parseTSV(linkRes.value)).slice(0, maxResults);
@@ -148,7 +141,7 @@ export async function keggPathwaysForGene(geneSymbol, organism, maxResults) {
148
141
  /** The pathway vocabulary of one organism, keyed by the pathway identifier. */
149
142
  async function keggPathwayNames(organism) {
150
143
  const names = new Map();
151
- const res = await apiFetch(`${KEGG_BASE}/list/pathway/${encodeURIComponent(organism)}`, { parseAs: "text" });
144
+ const res = await apiFetchText(`${KEGG_BASE}/list/pathway/${encodeURIComponent(organism)}`);
152
145
  if (res.isErr())
153
146
  return names;
154
147
  for (const cols of parseTSV(res.value)) {
@@ -217,16 +210,19 @@ export async function searchPathways(query, options = {}) {
217
210
  return results.flat();
218
211
  }
219
212
  /** A Reactome stable identifier, for example `R-HSA-109581`. */
213
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the Reactome stable-id grammar: R-, three letters, digits, and an optional dotted subnumber.
220
214
  const REACTOME_ID_RE = /^R-[A-Z]{3}-\d+(\.\d+)?$/;
221
215
  /** A KEGG pathway identifier, for example `hsa04010` or `map04010`. */
216
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the KEGG pathway-id grammar: three or four lowercase organism letters plus five digits.
222
217
  const KEGG_ID_RE = /^[a-z]{3,4}\d{5}$/;
223
218
  /** Read one field out of a KEGG flat-file record. */
224
219
  function keggField(record, field) {
220
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the field name is a caller literal ("NAME", "DESCRIPTION"); the anchored multiline form reads the KEGG flat-file grammar.
225
221
  const match = new RegExp(`^${field}\\s+(.*)$`, "m").exec(record);
226
222
  return match?.[1]?.trim() || null;
227
223
  }
228
224
  async function getKeggPathway(id) {
229
- const res = await apiFetch(`${KEGG_BASE}/get/${encodeURIComponent(id)}`, { parseAs: "text" });
225
+ const res = await apiFetchText(`${KEGG_BASE}/get/${encodeURIComponent(id)}`);
230
226
  if (res.isErr())
231
227
  return null;
232
228
  const record = res.value;
@@ -238,7 +234,7 @@ async function getKeggPathway(id) {
238
234
  id,
239
235
  name,
240
236
  source: "kegg",
241
- ...(description ? { description } : {}),
237
+ description: description ?? undefined,
242
238
  url: `https://www.kegg.jp/pathway/${id}`,
243
239
  };
244
240
  }
@@ -255,7 +251,7 @@ async function getReactomePathway(id) {
255
251
  id: stId,
256
252
  name: stripHtmlAndCollapseWs(entry.displayName ?? ""),
257
253
  source: "reactome",
258
- ...(description ? { description: stripHtmlAndCollapseWs(description) } : {}),
254
+ description: description === undefined ? undefined : stripHtmlAndCollapseWs(description),
259
255
  url: `https://reactome.org/content/detail/${stId}`,
260
256
  };
261
257
  }
@@ -45,11 +45,11 @@ export declare const PharmgkbResponseSchema: z.ZodObject<{
45
45
  * phenotype, guideline source and summary live on other PharmGKB resources, so
46
46
  * they are absent here rather than present-and-null.
47
47
  */
48
- export interface PharmgkbAnnotation {
48
+ export type PharmgkbAnnotation = {
49
49
  gene: string;
50
50
  drug: string;
51
51
  levelOfEvidence: string;
52
- }
52
+ };
53
53
  export declare function searchPharmgkb(query: string, searchType: "gene" | "drug", limit?: number): Promise<{
54
54
  annotations: PharmgkbAnnotation[];
55
55
  totalFound: number;
@@ -38,7 +38,7 @@ export async function searchPharmgkb(query, searchType, limit = 20) {
38
38
  return { annotations: [], totalFound: 0 };
39
39
  throw new Error(describeApiError(res.error));
40
40
  }
41
- const data = res.value?.data ?? [];
41
+ const data = res.value.data ?? [];
42
42
  const annotations = data.slice(0, limit).map((ann) => ({
43
43
  gene: ann.location?.genes?.map((g) => g.symbol).join(", ") ?? query,
44
44
  drug: ann.relatedChemicals?.map((c) => c.name).join(", ") ?? "",
@@ -2,12 +2,12 @@
2
2
  * Protein-family → preferred modality lookup, used by §2.2 Tractability
3
3
  * fallback when Open Targets has no tractability assessment for the target.
4
4
  */
5
- export interface ModalityFallback {
5
+ export type ModalityFallback = {
6
6
  family: string | null;
7
7
  preferred_modality: string;
8
8
  rationale: string;
9
9
  source: "family-match" | "default";
10
- }
10
+ };
11
11
  /**
12
12
  * Infer a preferred modality from a free-text protein-family description
13
13
  * (typically the UniProt family/keyword). Returns the dataset default when
@@ -4,8 +4,6 @@
4
4
  */
5
5
  import familyMappingData from "../../data/protein-family-modality.json" with { type: "json" };
6
6
  import { normalizeProteinFamily } from "./protein-family-normalize.js";
7
- // The JSON import yields an untyped/structurally-wide value; cast to the declared
8
- // shape, which the bundled data file is authored to satisfy.
9
7
  const dataset = familyMappingData;
10
8
  function loadDataset() {
11
9
  return dataset;
@@ -11,19 +11,26 @@ const FAMILIES = [
11
11
  {
12
12
  canonical: "g protein-coupled receptor",
13
13
  patterns: [
14
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the hyphen-variant spellings of the GPCR name, matched as whole words.
14
15
  /\bg[-\s]?protein[-\s]?coupled\s+receptor\b/i,
16
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the GPCR abbreviation as a whole word.
15
17
  /\bgpcr\b/i,
18
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the seven-transmembrane spelling of the family name.
16
19
  /\b7tm\s+receptor\b/i,
20
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the rhodopsin-like subfamily spelling.
17
21
  /\brhodopsin-like\s+receptor\b/i,
22
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the secretin-like subfamily spelling.
18
23
  /\bsecretin-like\s+receptor\b/i,
19
24
  ],
20
25
  },
21
26
  {
22
27
  canonical: "serine/threonine-protein kinase",
28
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the hyphen-variant spellings of the serine/threonine kinase name.
23
29
  patterns: [/\bserine\/threonine[-\s]?protein\s+kinase\b/i],
24
30
  },
25
31
  {
26
32
  canonical: "tyrosine-protein kinase",
33
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the hyphen-variant spellings of the tyrosine kinase name.
27
34
  patterns: [/\btyrosine[-\s]?protein\s+kinase\b/i],
28
35
  },
29
36
  // Extend as additional hyphen-style mismatches surface. The default branch
@@ -13,14 +13,14 @@
13
13
  * carries `.optional()`, not `.nullable()`.
14
14
  */
15
15
  import { z } from "zod";
16
- export interface PubChemCompoundProperties {
16
+ export type PubChemCompoundProperties = {
17
17
  cid: number;
18
18
  molecularWeight: number | null;
19
19
  inchiKey: string | null;
20
20
  canonicalSmiles: string | null;
21
21
  hBondDonorCount: number | null;
22
22
  hBondAcceptorCount: number | null;
23
- }
23
+ };
24
24
  export declare const PubChemPropertyResponseSchema: z.ZodObject<{
25
25
  PropertyTable: z.ZodOptional<z.ZodObject<{
26
26
  Properties: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -100,6 +100,7 @@ export async function getCompoundPropertiesByInChIKey(inchiKey) {
100
100
  return null;
101
101
  return getCompoundPropertiesByCID(cid);
102
102
  }
103
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the amide-bond motif C(=O)N read out of a SMILES string; the literal atoms are the chemistry.
103
104
  const AMIDE_BOND_RE = /C\(=O\)N/g;
104
105
  /**
105
106
  * Heuristic molecule-type classifier driven by PubChem properties.
@@ -102,11 +102,11 @@ export declare const PubChemPropertyResponseSchema: z.ZodObject<{
102
102
  }>>>>;
103
103
  }, z.core.$strip>>;
104
104
  }, z.core.$strip>;
105
- export interface PubChemCrossRef {
105
+ export type PubChemCrossRef = {
106
106
  /** The registry that the identifier pattern names, or `null` when no pattern matches. */
107
107
  source: string | null;
108
108
  id: string;
109
- }
109
+ };
110
110
  export declare const PubChemXrefResponseSchema: z.ZodObject<{
111
111
  InformationList: z.ZodOptional<z.ZodObject<{
112
112
  Information: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -117,13 +117,13 @@ export declare const PubChemXrefResponseSchema: z.ZodObject<{
117
117
  }, z.core.$strip>;
118
118
  /** The registry of one identifier, or `null` when no pattern matches it. */
119
119
  export declare function classifyRegistryId(id: string): string | null;
120
- export interface PubChemAssay {
120
+ export type PubChemAssay = {
121
121
  aid: number;
122
122
  assayName: string | null;
123
123
  targetName: string | null;
124
124
  activityOutcome: string | null;
125
125
  activityValue: number | null;
126
- }
126
+ };
127
127
  export declare const PugAssaySummarySchema: z.ZodObject<{
128
128
  Table: z.ZodOptional<z.ZodObject<{
129
129
  Columns: z.ZodOptional<z.ZodObject<{
@@ -95,18 +95,26 @@ export const PubChemXrefResponseSchema = z.object({
95
95
  * A loose pattern runs last, thus a specific registry claims its own id first.
96
96
  */
97
97
  const REGISTRY_PATTERNS = [
98
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the ChEMBL id format: the CHEMBL prefix plus digits.
98
99
  ["ChEMBL", /^CHEMBL\d+$/],
100
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the ChEBI id format: the CHEBI: prefix plus digits.
99
101
  ["ChEBI", /^CHEBI:\d+$/],
102
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the DrugBank id format: the DB prefix plus five digits.
100
103
  ["DrugBank", /^DB\d{5}$/],
104
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the KEGG id format: one C or D compound letter plus five digits.
101
105
  ["KEGG", /^[CD]\d{5}$/],
106
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the HMDB id format: the HMDB prefix plus digits.
102
107
  ["HMDB", /^HMDB\d+$/],
108
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the CAS registry format: two to seven digits, a dash pair, and one check digit.
103
109
  ["CAS", /^\d{2,7}-\d{2}-\d$/],
104
110
  // A PDB id is four characters that start with a digit. The lookahead demands a
105
111
  // letter as well, thus a plain registry number does not read as a structure.
112
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the PDB id format: a digit, then three alphanumerics, with the lookahead that demands a letter among them.
106
113
  ["PDB", /^[1-9](?=.*[A-Za-z])[0-9A-Za-z]{3}$/],
107
114
  // A UNII is ten alphanumeric characters, and the lookahead demands a letter
108
115
  // among them. A plain ten-digit registry number, such as `0000050782`, matches
109
116
  // the pattern without it, and the row then names the wrong registry.
117
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the UNII format: ten uppercase alphanumerics, with the lookahead that demands a letter among them.
110
118
  ["UNII", /^(?=.*[A-Z])[A-Z0-9]{10}$/],
111
119
  ];
112
120
  /** The registry of one identifier, or `null` when no pattern matches it. */
@@ -9,29 +9,29 @@
9
9
  * `.optional()`, not `.nullable()`.
10
10
  */
11
11
  import { type ArticleDetail, type ArticleSection, type FullTextResult, type PubmedSearchOptions, type PubMedSummary } from "../../literature/sources/pubmed.js";
12
- export type { PubMedSummary, ArticleDetail, ArticleSection, FullTextResult };
12
+ export type { PubMedSummary, ArticleDetail, ArticleSection, FullTextResult } from "../../literature/sources/pubmed.js";
13
13
  export type SearchOptions = PubmedSearchOptions;
14
14
  /** PubMed search via esearch + esummary. */
15
15
  export declare function searchPubmed(ncbiApiKey: string | undefined, query: string, options?: SearchOptions, signal?: AbortSignal): Promise<{
16
16
  totalFound: number;
17
17
  results: PubMedSummary[];
18
18
  }>;
19
- export interface DetailOptions {
19
+ export type DetailOptions = {
20
20
  /** Authors kept per article before collapsing the rest into `authorCount`. */
21
21
  maxAuthors?: number;
22
22
  /** MeSH terms kept per article; 0 drops the list entirely. */
23
23
  maxMeshTerms?: number;
24
- }
24
+ };
25
25
  /**
26
26
  * One article as the tool returns it: `ArticleDetail` with the two unbounded
27
27
  * list fields trimmed. A consortium paper can carry hundreds of authors and
28
28
  * dozens of MeSH headings — neither is worth the context, so the counts travel
29
29
  * instead of the tails.
30
30
  */
31
- export interface BoundedArticleDetail extends ArticleDetail {
31
+ export type BoundedArticleDetail = ArticleDetail & {
32
32
  authorCount: number;
33
33
  meshTermCount: number;
34
- }
34
+ };
35
35
  /** Fetch full PubMed article details (efetch + ID Converter for PMC). */
36
36
  export declare function getArticleDetails(ncbiApiKey: string | undefined, pmids: string[], signal?: AbortSignal): Promise<{
37
37
  articles: ArticleDetail[];
@@ -39,19 +39,19 @@ export declare function getArticleDetails(ncbiApiKey: string | undefined, pmids:
39
39
  }>;
40
40
  /** Trim the two unbounded list fields on each article, recording their true sizes. */
41
41
  export declare function boundArticleDetails(articles: ArticleDetail[], options?: DetailOptions): BoundedArticleDetail[];
42
- export interface FullTextOptions {
42
+ export type FullTextOptions = {
43
43
  /** Case-insensitive substring match against section headings. */
44
44
  sections?: string[];
45
45
  /** Character budget across the returned section bodies. */
46
46
  maxChars?: number;
47
- }
47
+ };
48
48
  /**
49
49
  * A full text trimmed to a character budget. `outline` always lists EVERY
50
50
  * section in the article with its size and whether the body came back, so one
51
51
  * call is enough to decide which sections a follow-up should request — the
52
52
  * alternative is the agent guessing headings it has not seen.
53
53
  */
54
- export interface BoundedFullText {
54
+ export type BoundedFullText = {
55
55
  fullText: string;
56
56
  sections: ArticleSection[];
57
57
  outline: {
@@ -62,7 +62,7 @@ export interface BoundedFullText {
62
62
  totalChars: number;
63
63
  returnedChars: number;
64
64
  truncated: boolean;
65
- }
65
+ };
66
66
  /**
67
67
  * Fetch open-access full text from PMC, trimmed to a section filter and a
68
68
  * character budget. Returns null when the article is not open-access.
@@ -11,7 +11,7 @@
11
11
  import { createPubmedSource, } from "../../literature/sources/pubmed.js";
12
12
  function pubmedSource(ncbiApiKey) {
13
13
  return createPubmedSource({
14
- ...(ncbiApiKey === undefined ? {} : { apiKey: ncbiApiKey }),
14
+ apiKey: ncbiApiKey,
15
15
  maxRetries: 3,
16
16
  retryDelayMs: 1_000,
17
17
  timeoutMs: 90_000,
@@ -8,15 +8,15 @@
8
8
  * `.nullable()`.
9
9
  */
10
10
  import { z } from "zod";
11
- export interface StringInteraction {
11
+ export type StringInteraction = {
12
12
  proteinA: string;
13
13
  proteinB: string;
14
14
  score: number;
15
15
  experimentalScore?: number;
16
16
  databaseScore?: number;
17
17
  textminingScore?: number;
18
- }
19
- export interface StringEnrichment {
18
+ };
19
+ export type StringEnrichment = {
20
20
  category: string;
21
21
  term: string;
22
22
  description: string;
@@ -24,12 +24,12 @@ export interface StringEnrichment {
24
24
  fdr: number;
25
25
  geneCount: number;
26
26
  genes: string[];
27
- }
28
- export interface InteractionOptions {
27
+ };
28
+ export type InteractionOptions = {
29
29
  species?: number;
30
30
  minScore?: number;
31
31
  limit?: number;
32
- }
32
+ };
33
33
  export declare const StringInteractionSchema: z.ZodPipe<z.ZodObject<{
34
34
  preferredName_A: z.ZodOptional<z.ZodString>;
35
35
  preferredName_B: z.ZodOptional<z.ZodString>;
@@ -7,14 +7,14 @@
7
7
  * carries `.optional()`, not `.nullable()`.
8
8
  */
9
9
  import { z } from "zod";
10
- export interface UniProtRecord {
10
+ export type UniProtRecord = {
11
11
  primaryAccession: string;
12
12
  uniProtkbId: string | null;
13
13
  geneNames: string[];
14
14
  chemblIds: string[];
15
15
  reactomePathwayIds: string[];
16
16
  proteinFamilyText: string | null;
17
- }
17
+ };
18
18
  /**
19
19
  * Fetch a single UniProtKB entry by accession. Returns null on 404; throws
20
20
  * on other HTTP errors so callers can surface upstream outages.
@@ -25,7 +25,7 @@ export declare function getChemblIdsByUniProt(accession: string): Promise<string
25
25
  /** All Reactome pathway ids cross-referenced from a UniProt accession. */
26
26
  export declare function getReactomePathwaysByUniProt(accession: string): Promise<string[]>;
27
27
  /** One protein of a UniProtKB search. */
28
- export interface UniProtProtein {
28
+ export type UniProtProtein = {
29
29
  accession: string;
30
30
  /** The UniProtKB ID, for example `BRCA1_HUMAN`. */
31
31
  uniProtkbId: string | null;
@@ -38,7 +38,7 @@ export interface UniProtProtein {
38
38
  subcellularLocations: string[];
39
39
  /** True for a Swiss-Prot entry, false for a TrEMBL entry. */
40
40
  reviewed: boolean;
41
- }
41
+ };
42
42
  /**
43
43
  * One result row of `uniprotkb/search`, with the same all-optional discipline as
44
44
  * `UniProtRecordSchema`: UniProt omits the key of an absent value, thus every
@@ -131,19 +131,19 @@ export declare const UniProtSearchResponseSchema: z.ZodObject<{
131
131
  * never reach one, because the 400 fails the whole request.
132
132
  */
133
133
  export declare function isUniProtAccession(query: string): boolean;
134
- export interface SearchProteinsOptions {
134
+ export type SearchProteinsOptions = {
135
135
  /** NCBI taxonomy id; omit to search every organism. */
136
136
  organismId?: number;
137
137
  /** Swiss-Prot only when true (the default), Swiss-Prot and TrEMBL when false. */
138
138
  reviewedOnly?: boolean;
139
139
  /** Max rows returned. */
140
140
  limit?: number;
141
- }
142
- export interface SearchProteinsResult {
141
+ };
142
+ export type SearchProteinsResult = {
143
143
  proteins: UniProtProtein[];
144
144
  /** True when UniProt held at least one row beyond `limit`. */
145
145
  hasMore: boolean;
146
- }
146
+ };
147
147
  /**
148
148
  * Search UniProtKB for a protein by gene symbol or by accession.
149
149
  *
@@ -206,7 +206,10 @@ function toProtein(raw) {
206
206
  accession: raw.primaryAccession ?? "",
207
207
  uniProtkbId: raw.uniProtkbId ?? null,
208
208
  proteinName: extractProteinName(raw),
209
- geneNames: (raw.genes ?? []).map((gene) => gene.geneName?.value).filter((name) => Boolean(name)),
209
+ geneNames: (raw.genes ?? []).flatMap((gene) => {
210
+ const name = gene.geneName?.value;
211
+ return name ? [name] : [];
212
+ }),
210
213
  sequenceLength: raw.sequence?.length ?? null,
211
214
  function: extractFunctionText(raw),
212
215
  subcellularLocations: extractSubcellularLocations(raw),
@@ -222,6 +225,7 @@ function toProtein(raw) {
222
225
  * that match this form. Thus the match decides only whether the `accession:`
223
226
  * clause is SAFE to send, never which space the query names.
224
227
  */
228
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the full UniProt accession grammar, both entry-class arms with the optional isoform suffix; the shape overlap with gene symbols is why the match decides safety only.
225
229
  const ACCESSION_RE = /^(?:[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})(?:-\d+)?$/i;
226
230
  /**
227
231
  * Can the query ride in an `accession:` clause?
@@ -23,41 +23,44 @@
23
23
  * exists AND belongs to this analysis (`cortex_runs.analysis_id`) before it is
24
24
  * stored: an unknown runId is an `err(ToolError)` the model can correct from,
25
25
  * not a silent reference to a run that never existed.
26
+ *
27
+ * Inside a durable step, the store records the key of the step in the
28
+ * transaction of the edit. A rerun of the step after the edit, before its
29
+ * checkpoint, then changes nothing and gives ok.
26
30
  */
27
31
  import type { Pool } from "pg";
28
32
  import { z } from "zod";
29
33
  import type { WorkingMemoryStore } from "../../memory/working-memory.js";
34
+ import { type Tool } from "../define-tool.js";
30
35
  declare const inputSchema: z.ZodObject<{
31
36
  section: z.ZodEnum<{
32
37
  constraint: "constraint";
38
+ finding: "finding";
33
39
  goal: "goal";
34
40
  hypothesis: "hypothesis";
35
- finding: "finding";
36
41
  }>;
37
42
  operation: z.ZodOptional<z.ZodEnum<{
38
43
  add: "add";
39
- revise: "revise";
40
44
  retire: "retire";
45
+ revise: "revise";
41
46
  }>>;
42
47
  text: z.ZodOptional<z.ZodString>;
43
48
  id: z.ZodOptional<z.ZodString>;
44
49
  origin: z.ZodOptional<z.ZodEnum<{
45
- user: "user";
46
50
  agent: "agent";
51
+ user: "user";
47
52
  }>>;
48
53
  runId: z.ZodOptional<z.ZodString>;
49
54
  }, z.core.$strip>;
50
55
  type Input = z.infer<typeof inputSchema>;
51
- interface UpdateOutput {
56
+ type UpdateOutput = {
52
57
  readonly ok: true;
53
58
  readonly section: Input["section"];
54
- }
55
- export declare function createUpdateWorkingMemoryTool(workingMemory: WorkingMemoryStore, pool: Pool): import("../define-tool.js").Tool<{
56
- section: "constraint" | "goal" | "hypothesis" | "finding";
57
- operation?: "add" | "revise" | "retire" | undefined;
58
- text?: string | undefined;
59
- id?: string | undefined;
60
- origin?: "user" | "agent" | undefined;
61
- runId?: string | undefined;
62
- }, UpdateOutput>;
59
+ };
60
+ export type UpdateWorkingMemoryOpts = {
61
+ /** The key of the durable step that runs the call, `undefined` outside one. */
62
+ readonly stepKey: () => string | undefined;
63
+ };
64
+ export declare const DEFAULT_UPDATE_WORKING_MEMORY_OPTS: UpdateWorkingMemoryOpts;
65
+ export declare function createUpdateWorkingMemoryTool(workingMemory: WorkingMemoryStore, pool: Pool, opts?: UpdateWorkingMemoryOpts): Tool<z.infer<typeof inputSchema>, UpdateOutput>;
63
66
  export {};
@@ -23,6 +23,10 @@
23
23
  * exists AND belongs to this analysis (`cortex_runs.analysis_id`) before it is
24
24
  * stored: an unknown runId is an `err(ToolError)` the model can correct from,
25
25
  * not a silent reference to a run that never existed.
26
+ *
27
+ * Inside a durable step, the store records the key of the step in the
28
+ * transaction of the edit. A rerun of the step after the edit, before its
29
+ * checkpoint, then changes nothing and gives ok.
26
30
  */
27
31
  import { err, ok } from "neverthrow";
28
32
  import { z } from "zod";
@@ -31,6 +35,7 @@ import { toThrowable, unwrapOrThrow } from "../../lib/result.js";
31
35
  import { isWorkingMemoryRejection, WORKING_MEMORY_LIMITS } from "../../memory/working-memory.js";
32
36
  import { queryRun } from "../../state/index.js";
33
37
  import { defineTool } from "../define-tool.js";
38
+ import { durableStepKey } from "../workspace/edit-file.js";
34
39
  const { goalChars, entryChars, constraints, hypotheses, findings } = WORKING_MEMORY_LIMITS;
35
40
  const inputSchema = z
36
41
  .object({
@@ -91,10 +96,16 @@ const inputSchema = z
91
96
  function toListOp(input) {
92
97
  switch (input.operation ?? "add") {
93
98
  case "add":
99
+ if (input.text === undefined)
100
+ throw new Error("add requires text");
94
101
  return { op: "add", text: input.text };
95
102
  case "revise":
103
+ if (input.id === undefined || input.text === undefined)
104
+ throw new Error("revise requires id and text");
96
105
  return { op: "revise", id: input.id, text: input.text };
97
106
  case "retire":
107
+ if (input.id === undefined)
108
+ throw new Error("retire requires id");
98
109
  return { op: "retire", id: input.id };
99
110
  }
100
111
  }
@@ -105,12 +116,17 @@ function toConstraintOp(input) {
105
116
  /** As `toListOp`, but an added finding also carries the run it is attributed to. */
106
117
  function toFindingOp(input) {
107
118
  const base = toListOp(input);
108
- return base.op === "add" ? { ...base, runId: input.runId } : base;
119
+ if (base.op !== "add")
120
+ return base;
121
+ if (input.runId === undefined)
122
+ throw new Error("a finding add requires runId");
123
+ return { ...base, runId: input.runId };
109
124
  }
110
- export function createUpdateWorkingMemoryTool(workingMemory, pool) {
125
+ export const DEFAULT_UPDATE_WORKING_MEMORY_OPTS = { stepKey: durableStepKey };
126
+ export function createUpdateWorkingMemoryTool(workingMemory, pool, opts = DEFAULT_UPDATE_WORKING_MEMORY_OPTS) {
111
127
  /** Write one amendment, mapping a refused write to a model-visible error. */
112
128
  async function apply(analysisId, section, value) {
113
- const written = await workingMemory.updateSection(analysisId, section, value);
129
+ const written = await workingMemory.updateSection(analysisId, section, value, opts.stepKey());
114
130
  if (written.isErr()) {
115
131
  // A refused write (cap hit, unknown id) is an expected outcome the model
116
132
  // can act on — its message carries the remedy. A DbError is not: it throws,
@@ -161,6 +177,8 @@ export function createUpdateWorkingMemoryTool(workingMemory, pool) {
161
177
  const analysisId = scopeResource(ctx.session.scope).resourceId;
162
178
  switch (input.section) {
163
179
  case "goal":
180
+ if (input.text === undefined)
181
+ throw new Error("goal requires text");
164
182
  return apply(analysisId, "goal", { text: input.text });
165
183
  case "constraint":
166
184
  return apply(analysisId, "constraint", toConstraintOp(input));
@@ -2,6 +2,8 @@
2
2
  * `read_tool_output` — reads the kept text of a tool result that the loop cut, by a window or by a pattern.
3
3
  * Each result stays under the cap of the loop, thus the loop never cuts a result of this tool.
4
4
  */
5
+ import { errorMessageOf } from "../lib/thrown.js";
6
+ import { textOf } from "../lib/unknown-text.js";
5
7
  import { ok } from "neverthrow";
6
8
  import { z } from "zod";
7
9
  import { unwrapOrThrow } from "../lib/result.js";
@@ -61,10 +63,11 @@ function page(ref, text, start, limit) {
61
63
  function search(ref, text, start, limit, pattern) {
62
64
  let regex;
63
65
  try {
66
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the caller-supplied search pattern is the tool's input; the dynamic form is the feature, and an invalid pattern is the handled error below.
64
67
  regex = new RegExp(pattern, "g");
65
68
  }
66
69
  catch (err) {
67
- return { status: "invalid_pattern", pattern, error: err instanceof Error ? err.message : String(err) };
70
+ return { status: "invalid_pattern", pattern, error: errorMessageOf(err) ?? textOf(err) };
68
71
  }
69
72
  const stop = limit === undefined ? text.length : windowEnd(text, start, limit);
70
73
  const window = text.slice(start, stop);
@@ -97,7 +100,10 @@ function search(ref, text, start, limit, pattern) {
97
100
  });
98
101
  let result = at(end);
99
102
  while (!fits(result) && matches.length > 1) {
100
- end = matches.pop().offset;
103
+ const dropped = matches.pop();
104
+ if (dropped === undefined)
105
+ break;
106
+ end = dropped.offset;
101
107
  result = at(end);
102
108
  }
103
109
  return result;
@@ -6,10 +6,10 @@
6
6
  */
7
7
  import { type ToolSet } from "ai";
8
8
  import type { Tool } from "./define-tool.js";
9
- export interface Registry {
9
+ export type Registry = {
10
10
  /** The AI SDK tool definitions to send with a chat request. */
11
11
  definitions(): ToolSet;
12
12
  /** Resolve a tool by name for dispatch; `undefined` if unknown. */
13
13
  get(name: string): Tool | undefined;
14
- }
14
+ };
15
15
  export declare function createRegistry(tools: readonly Tool[]): Registry;