@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
@@ -11,6 +11,8 @@
11
11
  * field carries `.optional()`, not `.nullable()`.
12
12
  */
13
13
  import { z } from "zod";
14
+ import { isUnknownArray } from "../../lib/unknown-array.js";
15
+ import { parseUnknownRecord } from "../../lib/unknown-containers.js";
14
16
  import { apiFetchValidated, describeApiError, isUnexpectedApiError } from "./api-utils.js";
15
17
  const ENSEMBL_BASE = "https://rest.ensembl.org";
16
18
  const BGEE_BASE = "https://www.bgee.org/api";
@@ -60,28 +62,32 @@ export const EnsemblHomologyResponseSchema = z.object({
60
62
  data: z.array(z.object({ homologies: z.array(z.object({ id: z.string().optional(), type: z.string().optional() })).optional() })).optional(),
61
63
  });
62
64
  export function parseExpressionResponse(raw) {
63
- // `raw` is the untyped Bgee API payload; `.data.calls` is reached defensively and
64
- // the `Array.isArray` guard below means a shape mismatch degrades to an empty list.
65
- const calls = raw?.data?.calls;
66
- if (!Array.isArray(calls))
65
+ const calls = parseUnknownRecord(parseUnknownRecord(raw)?.data)?.calls;
66
+ if (!isUnknownArray(calls))
67
67
  return [];
68
68
  const out = [];
69
- for (const call of calls) {
70
- const anatName = call?.condition?.anatEntity?.name ?? "";
69
+ for (const entry of calls) {
70
+ const call = parseUnknownRecord(entry);
71
+ if (!call)
72
+ continue;
73
+ const condition = parseUnknownRecord(call.condition);
74
+ const anatEntity = parseUnknownRecord(condition?.anatEntity);
75
+ const anatName = typeof anatEntity?.name === "string" ? anatEntity.name : "";
71
76
  const tissue = anatName.trim().toLowerCase();
72
77
  if (!tissue)
73
78
  continue;
74
- const cellTypeName = call?.condition?.cellType?.name;
79
+ const cellTypeRecord = parseUnknownRecord(condition?.cellType);
80
+ const cellTypeName = cellTypeRecord?.name;
75
81
  const cellType = typeof cellTypeName === "string" && cellTypeName.trim() !== "" ? cellTypeName.trim().toLowerCase() : null;
76
- const rawScore = call?.expressionScore?.expressionScore;
82
+ const rawScore = parseUnknownRecord(call.expressionScore)?.expressionScore;
77
83
  let expressionScore = null;
78
84
  if (typeof rawScore === "string" || typeof rawScore === "number") {
79
85
  const n = typeof rawScore === "number" ? rawScore : parseFloat(rawScore);
80
86
  expressionScore = Number.isFinite(n) ? n : null;
81
87
  }
82
- const quality = call?.expressionQuality;
88
+ const quality = call.expressionQuality;
83
89
  const confidence = quality === "gold" || quality === "silver" ? quality : null;
84
- const stateRaw = call?.expressionState;
90
+ const stateRaw = call.expressionState;
85
91
  const expressionState = stateRaw === "not expressed" ? "not expressed" : "expressed";
86
92
  out.push({
87
93
  tissue,
@@ -11,19 +11,19 @@
11
11
  * not `.nullable()`.
12
12
  */
13
13
  import { z } from "zod";
14
- export interface CancerStudy {
14
+ export type CancerStudy = {
15
15
  studyId: string;
16
16
  cancerType: string;
17
17
  cancerTypeName: string;
18
- }
19
- export interface MutationFrequency {
18
+ };
19
+ export type MutationFrequency = {
20
20
  cancerTypeId: string;
21
21
  cancerTypeName: string;
22
22
  totalSamples: number;
23
23
  mutatedSamples: number;
24
24
  frequency: number;
25
25
  studies: string[];
26
- }
26
+ };
27
27
  export declare const RawMutationRowSchema: z.ZodObject<{
28
28
  studyId: z.ZodString;
29
29
  sampleId: z.ZodString;
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { z } from "zod";
14
14
  import { apiFetchValidated, describeApiError } from "./api-utils.js";
15
+ import { presentGet } from "../../lib/present.js";
15
16
  const CBIOPORTAL_BASE = "https://www.cbioportal.org/api";
16
17
  const HEADERS = { Accept: "application/json" };
17
18
  // Raw cBioPortal wire shapes, validated at the fetch boundary. Fields the code
@@ -52,7 +53,7 @@ async function listStudies() {
52
53
  const res = await apiFetchValidated(url, z.array(RawCancerStudySchema), { headers: HEADERS });
53
54
  if (res.isErr())
54
55
  throw new Error(describeApiError(res.error));
55
- return res.value ?? [];
56
+ return res.value;
56
57
  }
57
58
  /**
58
59
  * The cancer-type vocabulary, keyed by its id. The study SUMMARY projection
@@ -65,7 +66,7 @@ async function cancerTypeNames() {
65
66
  const names = new Map();
66
67
  if (res.isErr())
67
68
  return names;
68
- for (const row of res.value ?? []) {
69
+ for (const row of res.value) {
69
70
  if (row.cancerTypeId && row.name)
70
71
  names.set(row.cancerTypeId, row.name);
71
72
  }
@@ -76,14 +77,14 @@ async function listAllSampleLists() {
76
77
  const res = await apiFetchValidated(url, z.array(RawSampleListSchema), { headers: HEADERS });
77
78
  if (res.isErr())
78
79
  throw new Error(describeApiError(res.error));
79
- return res.value ?? [];
80
+ return res.value;
80
81
  }
81
82
  async function listMutationProfiles() {
82
83
  const url = `${CBIOPORTAL_BASE}/molecular-profiles?projection=SUMMARY&pageSize=10000`;
83
84
  const res = await apiFetchValidated(url, z.array(RawMolecularProfileSchema), { headers: HEADERS });
84
85
  if (res.isErr())
85
86
  throw new Error(describeApiError(res.error));
86
- return (res.value ?? []).filter((p) => p.molecularAlterationType === "MUTATION_EXTENDED");
87
+ return res.value.filter((p) => p.molecularAlterationType === "MUTATION_EXTENDED");
87
88
  }
88
89
  async function fetchMutationRowsForGene(entrezGeneId, profileIds) {
89
90
  if (profileIds.length === 0)
@@ -99,7 +100,7 @@ async function fetchMutationRowsForGene(entrezGeneId, profileIds) {
99
100
  });
100
101
  if (res.isErr())
101
102
  throw new Error(describeApiError(res.error));
102
- return res.value ?? [];
103
+ return res.value;
103
104
  }
104
105
  /**
105
106
  * Resolve a gene symbol to its NCBI Entrez Gene ID via cBioPortal's gene
@@ -111,7 +112,7 @@ async function resolveEntrezId(symbol) {
111
112
  const res = await apiFetchValidated(url, z.object({ entrezGeneId: z.number().optional() }), { headers: HEADERS });
112
113
  if (res.isErr())
113
114
  return null;
114
- return res.value?.entrezGeneId ?? null;
115
+ return res.value.entrezGeneId ?? null;
115
116
  }
116
117
  /**
117
118
  * Compute somatic mutation frequencies for a target across all curated
@@ -145,7 +146,7 @@ export async function getSomaticMutationFrequencies(geneSymbol, options = {}) {
145
146
  for (const m of mutations) {
146
147
  if (!mutatedStudySamples.has(m.studyId))
147
148
  mutatedStudySamples.set(m.studyId, new Set());
148
- mutatedStudySamples.get(m.studyId).add(m.sampleId);
149
+ presentGet(mutatedStudySamples, m.studyId, "the sample set of the study").add(m.sampleId);
149
150
  }
150
151
  const byCancerType = new Map();
151
152
  for (const studyId of studiesWithMutations) {
@@ -163,7 +164,7 @@ export async function getSomaticMutationFrequencies(geneSymbol, options = {}) {
163
164
  studies: new Set(),
164
165
  });
165
166
  }
166
- const bucket = byCancerType.get(cancerTypeId);
167
+ const bucket = presentGet(byCancerType, cancerTypeId, "the aggregate bucket");
167
168
  bucket.total += sampleCount;
168
169
  bucket.mutated += mutatedStudySamples.get(studyId)?.size ?? 0;
169
170
  bucket.studies.add(studyId);
@@ -9,24 +9,24 @@
9
9
  */
10
10
  import { z } from "zod";
11
11
  import type { Logger } from "../../lib/logger.js";
12
- export interface ChemblCompound {
12
+ export type ChemblCompound = {
13
13
  chemblId: string;
14
14
  preferredCompoundName: string | null;
15
15
  canonicalSmiles: string | null;
16
16
  molecularWeight: number | null;
17
17
  alogp: number | null;
18
18
  molecularFormula: string | null;
19
- }
19
+ };
20
20
  /** How `searchCompounds` interprets its query string. */
21
21
  export type CompoundSearchType = "target" | "compound" | "smiles";
22
- export interface ChemblTarget {
22
+ export type ChemblTarget = {
23
23
  targetChemblId: string;
24
24
  preferredName: string | null;
25
25
  targetType: string | null;
26
26
  organism: string | null;
27
27
  geneNames: string[];
28
- }
29
- export interface ChemblActivity {
28
+ };
29
+ export type ChemblActivity = {
30
30
  activityId: number | null;
31
31
  compoundChemblId: string;
32
32
  targetChemblId: string | null;
@@ -36,31 +36,31 @@ export interface ChemblActivity {
36
36
  assayChemblId: string | null;
37
37
  assayType: string | null;
38
38
  pchemblValue: number | null;
39
- }
40
- export interface ChemblMechanism {
39
+ };
40
+ export type ChemblMechanism = {
41
41
  mechanismOfAction: string | null;
42
42
  actionType: string | null;
43
43
  targetChemblId: string | null;
44
44
  targetName: string | null;
45
45
  moleculeChemblId: string;
46
- }
47
- export interface ChemblDrug {
46
+ };
47
+ export type ChemblDrug = {
48
48
  moleculeChemblId: string;
49
49
  preferredName: string | null;
50
50
  maxPhase: number | null;
51
51
  moleculeType: string | null;
52
52
  firstApproval: number | null;
53
53
  indication: string | null;
54
- }
55
- export interface ChemblModulator {
54
+ };
55
+ export type ChemblModulator = {
56
56
  moleculeChemblId: string;
57
57
  parentChemblId: string | null;
58
58
  preferredName: string | null;
59
59
  maxPhase: number | null;
60
60
  moleculeType: string | null;
61
61
  firstApproval: number | null;
62
- }
63
- export interface ChemblPolypharmHit {
62
+ };
63
+ export type ChemblPolypharmHit = {
64
64
  moleculeChemblId: string;
65
65
  targetChemblId: string;
66
66
  targetName: string | null;
@@ -70,7 +70,7 @@ export interface ChemblPolypharmHit {
70
70
  standardValue: number | null;
71
71
  standardUnits: string | null;
72
72
  pchemblValue: number | null;
73
- }
73
+ };
74
74
  export declare const TargetSearchResponseSchema: z.ZodObject<{
75
75
  targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
76
76
  target_chembl_id: z.ZodOptional<z.ZodString>;
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { z } from "zod";
11
11
  import { createNoopLogger } from "../../lib/console-logger.js";
12
+ import { presentAt } from "../../lib/present.js";
12
13
  import { apiFetchValidated, describeApiError, isUnexpectedApiError, zWireNumber } from "./api-utils.js";
13
14
  import { CHEMBL_BASE, CHEMBL_HEADERS as HEADERS } from "./chembl-config.js";
14
15
  /** The `max_phase` of an approved drug. ChEMBL serializes it as the string "4.0". */
@@ -184,7 +185,8 @@ async function searchCompoundsByTarget(query, limit) {
184
185
  }
185
186
  if (!targetRes.value.targets?.length)
186
187
  return [];
187
- const targetChemblId = targetRes.value.targets[0].target_chembl_id;
188
+ const firstTarget = targetRes.value.targets[0];
189
+ const targetChemblId = firstTarget?.target_chembl_id;
188
190
  if (!targetChemblId)
189
191
  return [];
190
192
  const activityRes = await apiFetchValidated(`${CHEMBL_BASE}/activity.json?target_chembl_id=${targetChemblId}&limit=${limit}`, CompoundActivityIdResponseSchema, {
@@ -439,7 +441,10 @@ async function searchApprovedDrugsByName(query, limit) {
439
441
  const approved = (res.value.molecules ?? []).filter((mol) => mol.max_phase != null && mol.max_phase >= APPROVED_MAX_PHASE);
440
442
  if (approved.length === 0)
441
443
  return [];
442
- const moleculeChemblIds = approved.map((mol) => mol.molecule_chembl_id).filter((id) => id !== undefined && id.length > 0);
444
+ const moleculeChemblIds = approved.flatMap((mol) => {
445
+ const id = mol.molecule_chembl_id;
446
+ return id !== undefined && id.length > 0 ? [id] : [];
447
+ });
443
448
  const indications = await fetchIndicationsOf(moleculeChemblIds);
444
449
  return approved.map((raw) => mapDrug(raw, indications.get(raw.molecule_chembl_id ?? "") ?? null));
445
450
  }
@@ -559,7 +564,7 @@ export async function getModulatorPolypharmacology(moleculeChemblId, options = {
559
564
  for (const [idx, id] of batch.entries()) {
560
565
  const hit = hits.find((h) => h.targetChemblId === id);
561
566
  if (hit)
562
- hit.targetName = names[idx];
567
+ hit.targetName = names[idx] ?? null;
563
568
  }
564
569
  }
565
570
  return hits.sort((a, b) => (b.pchemblValue ?? 0) - (a.pchemblValue ?? 0));
@@ -587,7 +592,9 @@ export async function getModulatorOnTargetPchembl(modulatorChemblId, targetChemb
587
592
  return null;
588
593
  values.sort((a, b) => a - b);
589
594
  const mid = Math.floor(values.length / 2);
590
- return values.length % 2 === 1 ? values[mid] : (values[mid - 1] + values[mid]) / 2;
595
+ return values.length % 2 === 1
596
+ ? presentAt(values, mid, "the middle activity value")
597
+ : (presentAt(values, mid - 1, "the lower middle activity value") + presentAt(values, mid, "the middle activity value")) / 2;
591
598
  }
592
599
  /**
593
600
  * Secondary path: fetch clinical-stage small molecules via the activity table.
@@ -3,21 +3,21 @@
3
3
  * absent value. The bundled dataset gives each key, and `getBenchmarks` answers
4
4
  * with the "all" baseline for an unknown therapeutic area.
5
5
  */
6
- export interface PhaseTransitions {
6
+ export type PhaseTransitions = {
7
7
  phase1_to_phase2: number;
8
8
  phase2_to_phase3: number;
9
9
  phase3_to_nda: number;
10
10
  nda_to_approval: number;
11
11
  phase1_to_approval: number;
12
- }
13
- export interface BenchmarkResult {
12
+ };
13
+ export type BenchmarkResult = {
14
14
  therapeutic_area: string;
15
15
  source: "available" | "fallback";
16
16
  data_version: string;
17
17
  data_window: string;
18
18
  attribution: string;
19
19
  transitions: PhaseTransitions;
20
- }
20
+ };
21
21
  /**
22
22
  * Infer therapeutic area from a list of indication labels using the
23
23
  * dataset's pattern map. First match wins.
@@ -5,9 +5,6 @@
5
5
  */
6
6
  import benchmarksData from "../../data/clinical-benchmarks.json" with { type: "json" };
7
7
  const dataset = benchmarksData;
8
- if (!dataset.phase_transitions || !dataset.phase_transitions.all) {
9
- throw new Error("clinical-benchmarks.json is missing phase_transitions.all baseline");
10
- }
11
8
  function loadDataset() {
12
9
  return dataset;
13
10
  }
@@ -36,15 +33,15 @@ export function inferTherapeuticArea(indicationLabels) {
36
33
  */
37
34
  export function getBenchmarks(therapeuticArea) {
38
35
  const dataset = loadDataset();
39
- const useFallback = !therapeuticArea || !dataset.phase_transitions[therapeuticArea];
40
- const ta = useFallback ? "all" : therapeuticArea;
36
+ const requested = !therapeuticArea ? undefined : dataset.phase_transitions[therapeuticArea];
37
+ const ta = requested === undefined || therapeuticArea === null ? "all" : therapeuticArea;
41
38
  return {
42
39
  therapeutic_area: ta,
43
- source: useFallback ? "fallback" : "available",
40
+ source: requested === undefined ? "fallback" : "available",
44
41
  data_version: dataset.data_version,
45
42
  data_window: dataset.data_window,
46
43
  attribution: dataset.source,
47
- transitions: dataset.phase_transitions[ta],
44
+ transitions: requested ?? dataset.phase_transitions.all,
48
45
  };
49
46
  }
50
47
  /** Return the dataset's metadata for transparency. */
@@ -6,7 +6,7 @@
6
6
  * `.optional()`, not `.nullable()`.
7
7
  */
8
8
  import { z } from "zod";
9
- export interface ClinicalTrial {
9
+ export type ClinicalTrial = {
10
10
  nctId: string;
11
11
  title: string;
12
12
  officialTitle: string | null;
@@ -24,13 +24,13 @@ export interface ClinicalTrial {
24
24
  briefSummary: string | null;
25
25
  detailedDescription: string | null;
26
26
  sponsor: string | null;
27
- }
28
- export interface ClinicalTrialIntervention {
27
+ };
28
+ export type ClinicalTrialIntervention = {
29
29
  name: string;
30
30
  type: string | null;
31
31
  description: string | null;
32
32
  otherNames: string[];
33
- }
33
+ };
34
34
  export type OutcomeEffect = {
35
35
  kind: "quantitative";
36
36
  value: number;
@@ -41,46 +41,46 @@ export type OutcomeEffect = {
41
41
  kind: "not_extracted";
42
42
  reason: "ctgov_no_numeric_result" | "ctgov_no_result_groups";
43
43
  };
44
- export interface OutcomeMeasure {
44
+ export type OutcomeMeasure = {
45
45
  type: "primary" | "secondary" | "other";
46
46
  measure: string;
47
47
  description: string | null;
48
48
  timeFrame: string | null;
49
49
  effect: OutcomeEffect;
50
- }
51
- export interface AdverseEventGroup {
50
+ };
51
+ export type AdverseEventGroup = {
52
52
  groupId: string;
53
53
  title: string;
54
54
  description: string | null;
55
- }
56
- export interface AdverseEventCount {
55
+ };
56
+ export type AdverseEventCount = {
57
57
  groupId: string;
58
58
  numAffected: number | null;
59
59
  numAtRisk: number | null;
60
- }
61
- export interface AdverseEvent {
60
+ };
61
+ export type AdverseEvent = {
62
62
  serious: boolean;
63
63
  term: string;
64
64
  organSystem: string | null;
65
65
  counts: AdverseEventCount[];
66
- }
67
- export interface TrialDetails {
66
+ };
67
+ export type TrialDetails = {
68
68
  trial: ClinicalTrial;
69
69
  whyStopped: string | null;
70
70
  outcomes: OutcomeMeasure[];
71
71
  adverseEventGroups: AdverseEventGroup[];
72
72
  adverseEvents: AdverseEvent[];
73
- }
73
+ };
74
74
  /**
75
75
  * One phase token of `protocolSection.designModule.phases`. `NA` marks a study
76
76
  * that runs under no phase, such as an observational study.
77
77
  */
78
78
  export type TrialPhase = "EARLY_PHASE1" | "PHASE1" | "PHASE2" | "PHASE3" | "PHASE4" | "NA";
79
- export interface SearchOptions {
79
+ export type SearchOptions = {
80
80
  phase?: TrialPhase;
81
81
  status?: "RECRUITING" | "ACTIVE_NOT_RECRUITING" | "COMPLETED" | "NOT_YET_RECRUITING" | "TERMINATED" | "WITHDRAWN" | "SUSPENDED";
82
82
  limit?: number;
83
- }
83
+ };
84
84
  /** One study record. It is exported so that the golden-fixture table drives it. */
85
85
  export declare const CtStudySchema: z.ZodObject<{
86
86
  protocolSection: z.ZodOptional<z.ZodObject<{
@@ -121,7 +121,7 @@ export declare const CtStudySchema: z.ZodObject<{
121
121
  name: z.ZodOptional<z.ZodString>;
122
122
  type: z.ZodOptional<z.ZodString>;
123
123
  description: z.ZodOptional<z.ZodString>;
124
- otherNames: z.ZodOptional<z.ZodUnknown>;
124
+ otherNames: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodJSONSchema>, z.ZodTransform<string[], z.JSONType[]>>>;
125
125
  }, z.core.$strip>>>;
126
126
  }, z.core.$strip>>;
127
127
  sponsorCollaboratorsModule: z.ZodOptional<z.ZodObject<{
@@ -232,7 +232,7 @@ export declare const CtSearchResponseSchema: z.ZodObject<{
232
232
  name: z.ZodOptional<z.ZodString>;
233
233
  type: z.ZodOptional<z.ZodString>;
234
234
  description: z.ZodOptional<z.ZodString>;
235
- otherNames: z.ZodOptional<z.ZodUnknown>;
235
+ otherNames: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodJSONSchema>, z.ZodTransform<string[], z.JSONType[]>>>;
236
236
  }, z.core.$strip>>>;
237
237
  }, z.core.$strip>>;
238
238
  sponsorCollaboratorsModule: z.ZodOptional<z.ZodObject<{
@@ -17,7 +17,11 @@ const CtInterventionSchema = z.object({
17
17
  name: z.string().optional(),
18
18
  type: z.string().optional(),
19
19
  description: z.string().optional(),
20
- otherNames: z.unknown().optional(),
20
+ // An alias is one name among others; a member that is not a string loses that name, never the study.
21
+ otherNames: z
22
+ .array(z.json())
23
+ .transform((names) => names.flatMap((name) => (typeof name === "string" ? [name] : [])))
24
+ .optional(),
21
25
  });
22
26
  const CtOutcomeSchema = z.object({
23
27
  measure: z.string().optional(),
@@ -140,7 +144,7 @@ export function mapClinicalTrialStudy(s) {
140
144
  name: i.name ?? "Unknown",
141
145
  type: i.type ?? null,
142
146
  description: i.description ?? null,
143
- otherNames: Array.isArray(i.otherNames) ? i.otherNames : [],
147
+ otherNames: i.otherNames ?? [],
144
148
  }));
145
149
  const interventions = interventionDetails.map((i) => i.name);
146
150
  const sponsor = proto.sponsorCollaboratorsModule?.leadSponsor?.name ?? null;
@@ -195,11 +199,11 @@ export async function searchTrials(query, options = {}) {
195
199
  });
196
200
  if (res.isErr())
197
201
  throw new Error(describeApiError(res.error));
198
- const studies = res.value?.studies ?? [];
202
+ const studies = res.value.studies ?? [];
199
203
  const phase = options.phase;
200
204
  const selected = phase ? studies.filter((study) => studyHasPhase(study, phase)) : studies;
201
205
  const trials = selected.slice(0, limit).map(mapClinicalTrialStudy);
202
- return { totalFound: res.value?.totalCount ?? trials.length, trials };
206
+ return { totalFound: res.value.totalCount ?? trials.length, trials };
203
207
  }
204
208
  /** Search trials whose intervention or condition mentions the gene/target. */
205
209
  export async function searchTrialsForTarget(symbol, options = {}) {
@@ -272,12 +276,8 @@ function extractEffect(resultsMeasure) {
272
276
  kind: "quantitative",
273
277
  value: num,
274
278
  units: resultsMeasure?.unitOfMeasure ?? "",
275
- ...(m.lowerLimit !== undefined && m.lowerLimit !== null && !isNaN(parseFloat(m.lowerLimit))
276
- ? { ci_low: parseFloat(m.lowerLimit) }
277
- : {}),
278
- ...(m.upperLimit !== undefined && m.upperLimit !== null && !isNaN(parseFloat(m.upperLimit))
279
- ? { ci_high: parseFloat(m.upperLimit) }
280
- : {}),
279
+ ci_low: m.lowerLimit !== undefined && !isNaN(parseFloat(m.lowerLimit)) ? parseFloat(m.lowerLimit) : undefined,
280
+ ci_high: m.upperLimit !== undefined && !isNaN(parseFloat(m.upperLimit)) ? parseFloat(m.upperLimit) : undefined,
281
281
  };
282
282
  }
283
283
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { z } from "zod";
7
7
  export type ClinicalSignificance = "pathogenic" | "likely-pathogenic" | "benign" | "likely-benign" | "uncertain";
8
- export interface ClinvarVariant {
8
+ export type ClinvarVariant = {
9
9
  variationId: string;
10
10
  title: string;
11
11
  clinicalSignificance: string;
@@ -14,7 +14,7 @@ export interface ClinvarVariant {
14
14
  molecularConsequence: string;
15
15
  conditions: string[];
16
16
  accession: string;
17
- }
17
+ };
18
18
  export declare const ClinvarSearchResponseSchema: z.ZodObject<{
19
19
  esearchresult: z.ZodOptional<z.ZodObject<{
20
20
  idlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -53,10 +53,10 @@ const SIG_MAP = {
53
53
  };
54
54
  /** Filter out uninformative ClinVar entries (literal "not provided", placeholders). */
55
55
  export function filterInformative(variants) {
56
- const noise = /^(not provided|not specified|reclassified)$/i;
56
+ const noise = new Set(["not provided", "not specified", "reclassified"]);
57
57
  return variants.filter((v) => {
58
- const sig = (v.clinicalSignificance ?? "").trim();
59
- if (!sig || noise.test(sig))
58
+ const sig = v.clinicalSignificance.trim();
59
+ if (!sig || noise.has(sig.toLowerCase()))
60
60
  return false;
61
61
  return true;
62
62
  });
@@ -76,8 +76,8 @@ export async function searchClinvar(ncbiApiKey, query, options = {}) {
76
76
  const searchRes = await apiFetchValidated(searchUrl, ClinvarSearchResponseSchema);
77
77
  if (searchRes.isErr())
78
78
  throw new Error(describeApiError(searchRes.error));
79
- const ids = searchRes.value?.esearchresult?.idlist ?? [];
80
- const totalFound = Number(searchRes.value?.esearchresult?.count ?? ids.length);
79
+ const ids = searchRes.value.esearchresult?.idlist ?? [];
80
+ const totalFound = Number(searchRes.value.esearchresult?.count ?? ids.length);
81
81
  if (ids.length === 0)
82
82
  return { totalFound, variants: [] };
83
83
  const summaryUrl = ncbiUrl(ncbiApiKey, "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi", {
@@ -98,7 +98,7 @@ export async function searchClinvar(ncbiApiKey, query, options = {}) {
98
98
  * golden-fixture table exercises it against a stored payload.
99
99
  */
100
100
  export function mapClinvarVariants(ids, summary) {
101
- const result = summary?.result ?? {};
101
+ const result = summary.result ?? {};
102
102
  const rawUids = result.uids;
103
103
  const uids = Array.isArray(rawUids) ? rawUids : ids;
104
104
  return uids.map((uid) => {