@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
@@ -115,6 +115,7 @@ const GENE_LINE_PLACE = 0.25;
115
115
  const GENE_CHARACTER_SHARE = 0.6;
116
116
  const GENE_GAP_CHARACTERS = 1;
117
117
  /** The trailing unit of a declared position label, which the megabase axis replaces. */
118
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the declared unit suffix (bp, base pairs, kb, Mb) in its parenthesised form, stripped with the whitespace around it.
118
119
  const POSITION_UNIT = /\s*\((bp|base pairs|kb|Mb)\)\s*$/i;
119
120
  function deriveLocusZoom(block, rows, context) {
120
121
  const columns = locusColumns(block, rows, context);
@@ -124,16 +125,16 @@ function deriveLocusZoom(block, rows, context) {
124
125
  const xs = rows.map((row) => toNumber(row[position]));
125
126
  const faulty = xs.findIndex((x) => x === null);
126
127
  if (faulty >= 0) {
127
- return err(chartProblem(context.blockId, `The locuszoom reads the "${position}" column as a position in base pairs, and row ${faulty + 1} holds "${String(rows[faulty][position] ?? "")}", which is not a number.`));
128
+ return err(chartProblem(context.blockId, `The locuszoom reads the "${position}" column as a position in base pairs, and row ${faulty + 1} holds "${String(rows[faulty]?.[position] ?? "")}", which is not a number.`));
128
129
  }
129
130
  const chromosomes = chromosome === undefined ? [] : distinctNames(rows, chromosome);
130
131
  if (chromosomes.length > 1) {
131
- return err(chartProblem(context.blockId, `The locuszoom draws one region of one chromosome, and the "${chromosome}" column holds "${chromosomes[0]}" and "${chromosomes[1]}".`));
132
+ return err(chartProblem(context.blockId, `The locuszoom draws one region of one chromosome, and the "${String(chromosome)}" column holds "${String(chromosomes[0])}" and "${String(chromosomes[1])}".`));
132
133
  }
133
134
  const r2s = rows.map((row) => toNumber(row[r2]));
134
135
  const outside = r2s.findIndex((value) => value !== null && (value < 0 || value > 1));
135
136
  if (outside >= 0) {
136
- return err(chartProblem(context.blockId, `The locuszoom reads the "${r2}" column as the r² with the lead variant, and row ${outside + 1} holds ${r2s[outside]}, which is outside 0 to 1.`));
137
+ return err(chartProblem(context.blockId, `The locuszoom reads the "${r2}" column as the r² with the lead variant, and row ${outside + 1} holds ${String(r2s[outside])}, which is outside 0 to 1.`));
137
138
  }
138
139
  const line = -Math.log10(MANHATTAN_P_THRESHOLD);
139
140
  const finite = transformColumn(rows, p, "neg_log10");
@@ -151,7 +152,7 @@ function deriveLocusZoom(block, rows, context) {
151
152
  const lanes = genes.value === undefined ? 0 : Math.max(1, (largest(genes.value.map((gene) => gene.lane)) ?? 0) + 1);
152
153
  const composition = {
153
154
  series: [
154
- { form: "scatter", encoding: { x: position, y: { column: p, transform: "neg_log10" }, color: r2, ...(label !== undefined ? { label } : {}) } },
155
+ { form: "scatter", encoding: { x: position, y: { column: p, transform: "neg_log10" }, color: r2, label } },
155
156
  ...(rate !== undefined ? [{ form: "line", name: RECOMBINATION_NAME, encoding: { x: position, y: rate } }] : []),
156
157
  ],
157
158
  annotations: [{ kind: "reference-line", axis: "y", value: line }],
@@ -163,17 +164,17 @@ function deriveLocusZoom(block, rows, context) {
163
164
  const option = composed.value;
164
165
  const [points, recombination] = seriesOf(option);
165
166
  const nameOf = (index) => {
166
- const cell = label === undefined ? undefined : rows[index][label];
167
- return cell === undefined || cell === null || String(cell).trim() === "" ? undefined : String(cell);
167
+ const cell = label === undefined ? undefined : rows[index]?.[label];
168
+ return cell === undefined || String(cell).trim() === "" ? undefined : String(cell);
168
169
  };
169
170
  const item = (index, y) => {
170
171
  const name = nameOf(index);
171
- return { ...(name !== undefined ? { name } : {}), value: [xs[index] ?? 0, y] };
172
+ return { name, value: [xs[index] ?? 0, y] };
172
173
  };
173
174
  const missing = [];
174
175
  for (let index = 0; index < rows.length; index += 1) {
175
176
  const y = finite[index];
176
- if (r2s[index] === null && y !== null)
177
+ if (r2s[index] === null && y !== null && y !== undefined)
177
178
  missing.push(item(index, y));
178
179
  }
179
180
  const rated = rate === undefined ? [] : ratesInOrder(rows, xs, rate);
@@ -213,7 +214,7 @@ function deriveLocusZoom(block, rows, context) {
213
214
  ]
214
215
  : []),
215
216
  ...(missing.length > 0 ? [missingSeries(missing)] : []),
216
- ...(zeroRows.length > 0 ? [zeroSeries(zeroRows.map((index) => ({ ...item(index, zeroY), itemStyle: { color: binColor(r2s[index]) } })))] : []),
217
+ ...(zeroRows.length > 0 ? [zeroSeries(zeroRows.map((index) => ({ ...item(index, zeroY), itemStyle: { color: binColor(r2s[index] ?? null) } })))] : []),
217
218
  tickSeries(window),
218
219
  guideSeries(guideText(MANHATTAN_P_THRESHOLD), line, { ys, xs, rated, top, rateTop, window, layout }),
219
220
  ...(lead !== undefined ? [leadSeries(item(lead, ys[lead] ?? 0))] : []),
@@ -250,16 +251,20 @@ function locusColumns(block, rows, context) {
250
251
  return err(chartProblem(context.blockId, `The locuszoom reads the "${name}" column as it stands, thus the channel takes no transform and no "orderBy".`));
251
252
  }
252
253
  }
254
+ const metric = encoding.metric;
255
+ const group = encoding.group;
253
256
  const found = {
254
257
  position: channelColumn(x.value),
255
258
  // The figure applies the transform of the p column itself, as the Manhattan figure does.
256
259
  p: channelColumn(y.value),
257
260
  r2: channelColumn(encoding.color),
258
- ...(encoding.label !== undefined ? { label: encoding.label } : {}),
259
- ...(encoding.metric !== undefined ? { rate: channelColumn(encoding.metric) } : {}),
260
- ...(encoding.group !== undefined ? { chromosome: channelColumn(encoding.group) } : {}),
261
+ label: encoding.label,
262
+ rate: metric === undefined ? undefined : channelColumn(metric),
263
+ chromosome: group === undefined ? undefined : channelColumn(group),
261
264
  };
262
- for (const column of Object.values(found)) {
265
+ for (const column of [found.position, found.p, found.r2, found.label, found.rate, found.chromosome]) {
266
+ if (column === undefined)
267
+ continue;
263
268
  if (rows.length > 0 && !columnPresent(column, rows, context.columns)) {
264
269
  return err(chartProblem(context.blockId, `The column "${column}" is absent from every row.`));
265
270
  }
@@ -271,7 +276,7 @@ function distinctNames(rows, column) {
271
276
  const names = [];
272
277
  for (const row of rows) {
273
278
  const cell = row[column];
274
- if (cell === undefined || cell === null || String(cell).trim() === "")
279
+ if (cell === undefined || String(cell).trim() === "")
275
280
  continue;
276
281
  const name = categoryName(cell);
277
282
  if (!names.includes(name))
@@ -290,7 +295,7 @@ function leadRow(xs, finite, zeros) {
290
295
  let best = Number.NEGATIVE_INFINITY;
291
296
  for (let index = 0; index < finite.length; index += 1) {
292
297
  const rank = zeros.has(index) ? Number.POSITIVE_INFINITY : finite[index];
293
- if (rank === null)
298
+ if (rank === null || rank === undefined)
294
299
  continue;
295
300
  if (lead === undefined || rank > best || (rank === best && (xs[index] ?? 0) < (xs[lead] ?? 0))) {
296
301
  lead = index;
@@ -309,7 +314,7 @@ function ratesInOrder(rows, xs, rate) {
309
314
  for (const [index, row] of rows.entries()) {
310
315
  const x = xs[index];
311
316
  const value = toNumber(row[rate]);
312
- if (x !== null && value !== null)
317
+ if (x !== null && x !== undefined && value !== null)
313
318
  pairs.push([x, value]);
314
319
  }
315
320
  return pairs.sort((a, b) => a[0] - b[0]);
@@ -339,17 +344,21 @@ function guideStart(text, line, room) {
339
344
  const blocked = [];
340
345
  for (const [index, x] of room.xs.entries()) {
341
346
  const y = room.ys[index];
342
- if (x !== null && y !== null && y + reach >= low && y - reach <= high)
347
+ if (x !== null && y !== null && y !== undefined && y + reach >= low && y - reach <= high)
343
348
  blocked.push([x - half, x + half]);
344
349
  }
345
350
  if (room.rateTop > 0) {
346
351
  const rateLow = (low / room.top) * room.rateTop;
347
352
  const rateHigh = (high / room.top) * room.rateTop;
348
- for (let index = 1; index < room.rated.length; index += 1) {
349
- const [x1, r1] = room.rated[index - 1];
350
- const [x2, r2] = room.rated[index];
351
- if (Math.max(r1, r2) >= rateLow && Math.min(r1, r2) <= rateHigh)
352
- blocked.push([x1, x2]);
353
+ let previous;
354
+ for (const pair of room.rated) {
355
+ if (previous !== undefined) {
356
+ const [x1, r1] = previous;
357
+ const [x2, r2] = pair;
358
+ if (Math.max(r1, r2) >= rateLow && Math.min(r1, r2) <= rateHigh)
359
+ blocked.push([x1, x2]);
360
+ }
361
+ previous = pair;
353
362
  }
354
363
  }
355
364
  const marks = union(blocked);
@@ -387,13 +396,16 @@ function union(intervals) {
387
396
  function coverage(marks) {
388
397
  const before = [0];
389
398
  for (const [start, end] of marks)
390
- before.push(before[before.length - 1] + end - start);
399
+ before.push((before[before.length - 1] ?? 0) + end - start);
391
400
  const firstEndingAfter = (x) => {
392
401
  let low = 0;
393
402
  let high = marks.length;
394
403
  while (low < high) {
395
404
  const middle = (low + high) >> 1;
396
- if (marks[middle][1] > x)
405
+ const mark = marks[middle];
406
+ if (mark === undefined)
407
+ break;
408
+ if (mark[1] > x)
397
409
  high = middle;
398
410
  else
399
411
  low = middle + 1;
@@ -403,11 +415,18 @@ function coverage(marks) {
403
415
  return (from, to) => {
404
416
  const first = firstEndingAfter(from);
405
417
  let last = firstEndingAfter(to);
406
- if (last < marks.length && marks[last][0] < to)
418
+ const next = marks[last];
419
+ if (next !== undefined && next[0] < to)
407
420
  last += 1;
408
421
  if (first >= last)
409
422
  return 0;
410
- return before[last] - before[first] - Math.max(0, from - marks[first][0]) - Math.max(0, marks[last - 1][1] - to);
423
+ const startMark = marks[first];
424
+ const endMark = marks[last - 1];
425
+ const startSum = before[first];
426
+ const endSum = before[last];
427
+ if (startMark === undefined || endMark === undefined || startSum === undefined || endSum === undefined)
428
+ return 0;
429
+ return endSum - startSum - Math.max(0, from - startMark[0]) - Math.max(0, endMark[1] - to);
411
430
  };
412
431
  }
413
432
  /**
@@ -451,8 +470,13 @@ function positionWindow(xs) {
451
470
  }
452
471
  const from = low ?? 0;
453
472
  const to = high ?? 0;
454
- const span = Math.max(to - from, POSITION_STEPS[0]);
455
- const step = POSITION_STEPS.find((candidate) => span / candidate <= POSITION_TICK_COUNT) ?? POSITION_STEPS[POSITION_STEPS.length - 1];
473
+ const smallest = POSITION_STEPS[0];
474
+ const widest = POSITION_STEPS[POSITION_STEPS.length - 1];
475
+ if (smallest === undefined || widest === undefined) {
476
+ return { min: from, max: Math.max(to, from + 1), step: 1 };
477
+ }
478
+ const span = Math.max(to - from, smallest);
479
+ const step = POSITION_STEPS.find((candidate) => span / candidate <= POSITION_TICK_COUNT) ?? widest;
456
480
  return { min: from, max: Math.max(to, from + 1), step };
457
481
  }
458
482
  /**
@@ -465,7 +489,7 @@ function positionTitle(context, column, chromosome) {
465
489
  return `${declared.replace(POSITION_UNIT, "")} (Mb)`;
466
490
  if (chromosome === undefined)
467
491
  return "Position (Mb)";
468
- const name = chromosome.replace(/^chr/i, "");
492
+ const name = chromosome.toLowerCase().startsWith("chr") ? chromosome.slice(3) : chromosome;
469
493
  return `Position on chr${name} (Mb)`;
470
494
  }
471
495
  /**
@@ -504,7 +528,10 @@ function decimalsOf(step) {
504
528
  function binColor(r2) {
505
529
  if (r2 === null)
506
530
  return LD_MISSING_COLOR;
507
- return (LD_BINS.find((bin, place) => r2 >= bin.low && (r2 < bin.high || place === LD_BINS.length - 1)) ?? LD_BINS[0]).color;
531
+ const first = LD_BINS[0];
532
+ if (first === undefined)
533
+ return LD_MISSING_COLOR;
534
+ return (LD_BINS.find((bin, place) => r2 >= bin.low && (r2 < bin.high || place === LD_BINS.length - 1)) ?? first).color;
508
535
  }
509
536
  /**
510
537
  * The legend of the LD bins: a piecewise map over the r² of the points, highest bin first, with the gray entry
@@ -517,7 +544,8 @@ function binColor(r2) {
517
544
  function ldLegend() {
518
545
  const bins = [...LD_BINS].reverse().map((bin, place) => ({
519
546
  gte: bin.low,
520
- ...(place === 0 ? { lte: bin.high } : { lt: bin.high }),
547
+ lte: place === 0 ? bin.high : undefined,
548
+ lt: place === 0 ? undefined : bin.high,
521
549
  label: `${bin.low}–${bin.high}`,
522
550
  color: bin.color,
523
551
  }));
@@ -11,6 +11,7 @@
11
11
  * box is one row of the track, and the lane of a box is the first lane where it overlaps no earlier box, thus
12
12
  * the lanes follow the order of the track rows.
13
13
  */
14
+ import { textOf } from "../../lib/unknown-text.js";
14
15
  import { err, ok } from "neverthrow";
15
16
  import { channelColumn, channelOrder, channelTransform } from "../../contracts/report-blocks.js";
16
17
  import { STEM_RENDERER } from "../chart-renderers.js";
@@ -77,7 +78,7 @@ function deriveLollipop(block, rows, context) {
77
78
  const stemTitle = valueAxisTitle(context.labels, count.value, COUNT_TITLE);
78
79
  const series = group === undefined
79
80
  ? [stemSeries(stemTitle, CHART_PALETTE[0], stems, label)]
80
- : classes.map((name, index) => stemSeries(categoryName(name), colors[index], stems.filter((stem) => classOf(stem.row, group) === name), label));
81
+ : classes.map((name, index) => stemSeries(categoryName(name), colors[index] ?? CHART_PALETTE[0], stems.filter((stem) => classOf(stem.row, group) === name), label));
81
82
  if (label !== undefined)
82
83
  series.push(labelSeries(stems, label));
83
84
  const positionTitle = valueAxisTitle(context.labels, position.value, POSITION_TITLE);
@@ -87,7 +88,7 @@ function deriveLollipop(block, rows, context) {
87
88
  itemWidth: LEGEND_ICON_PX,
88
89
  itemHeight: LEGEND_ICON_PX,
89
90
  itemGap: LEGEND_GAP_PX,
90
- data: series.filter((entry) => entry.renderItem === STEM_RENDERER).map((entry) => String(entry.name)),
91
+ data: series.filter((entry) => entry.renderItem === STEM_RENDERER).map((entry) => textOf(entry.name)),
91
92
  };
92
93
  if (boxes.value === undefined) {
93
94
  return ok({ tooltip: { trigger: "item" }, xAxis: valueAxis("x", positionTitle, { min: 0, max: length }), yAxis: countAxis, series, legend });
@@ -43,7 +43,7 @@ function maClassification(rows, pColumn, pTitle, cut) {
43
43
  categoryOf: (x, y, index) => {
44
44
  if (x === null || y === null || x <= 0)
45
45
  return undefined;
46
- const p = toNumber(rows[index][pColumn]);
46
+ const p = toNumber(rows[index]?.[pColumn]);
47
47
  return p !== null && p < cut ? significant : MA_NULL;
48
48
  },
49
49
  };
@@ -74,7 +74,7 @@ function deriveMa(block, rows, context) {
74
74
  if (pColumn.isErr())
75
75
  return err(pColumn.error);
76
76
  const composition = {
77
- series: [{ form: "scatter", encoding: { x: x.value, y: y.value, ...(encoding.label !== undefined ? { label: encoding.label } : {}) } }],
77
+ series: [{ form: "scatter", encoding: { x: x.value, y: y.value, label: encoding.label } }],
78
78
  annotations: [{ kind: "reference-line", axis: "y", value: MA_BASELINE }],
79
79
  axes: { x: { scale: "log" } },
80
80
  };
@@ -90,7 +90,7 @@ function deriveMa(block, rows, context) {
90
90
  for (let index = 0; index < rows.length; index += 1) {
91
91
  const mean = xs[index];
92
92
  const effect = ys[index];
93
- if (mean === null || effect === null || mean <= 0)
93
+ if (mean === null || mean === undefined || effect === null || effect === undefined || mean <= 0)
94
94
  continue;
95
95
  means.push(mean);
96
96
  effects.push(Math.abs(effect));
@@ -101,7 +101,11 @@ function deriveMa(block, rows, context) {
101
101
  const option = composed.value;
102
102
  return ok({
103
103
  ...option,
104
- xAxis: { ...axisOf(option, "xAxis"), ...(low !== undefined && high !== undefined ? { min: decadeFloor(low), max: decadeCeiling(high) } : {}) },
104
+ xAxis: {
105
+ ...axisOf(option, "xAxis"),
106
+ min: low === undefined || high === undefined ? undefined : decadeFloor(low),
107
+ max: low === undefined || high === undefined ? undefined : decadeCeiling(high),
108
+ },
105
109
  yAxis: { ...axisOf(option, "yAxis"), ...symmetricRange(reach) },
106
110
  series: classification === undefined
107
111
  ? seriesOf(option).map((series) => ({ ...series, symbolSize: DENSE_SIGNAL_SYMBOL_PX }))
@@ -51,8 +51,7 @@ export declare function guideLabelBox(line: number, x: {
51
51
  readonly min: number;
52
52
  readonly max: number;
53
53
  }, top: number, text: string, frame: NameFrame): Box;
54
- /**
55
- * The genome order of two chromosome names: the numbered chromosomes in numeric order, then X, Y, and MT, then
54
+ /** The genome order of two chromosome names: the numbered chromosomes in numeric order, then X, Y, and MT, then
56
55
  * each other name in text order. A `chr` prefix takes no part in the order.
57
56
  */
58
57
  export declare function compareChromosomes(a: Cell, b: Cell): number;
@@ -27,12 +27,16 @@
27
27
  * as mark members, and the chromosome names and the lead names ride one series each after them. Thus the page
28
28
  * draws each of them over the payload points.
29
29
  */
30
+ import { textOf } from "../../lib/unknown-text.js";
30
31
  import { err, ok } from "neverthrow";
31
32
  import { channelColumn } from "../../contracts/report-blocks.js";
32
33
  import { MANHATTAN_P_THRESHOLD } from "../chart-presets.js";
33
34
  import { GENOME_MEMBER, GENOME_POSITION_FUNCTION } from "../chart-toolbox.js";
35
+ import { isUnknownArray } from "../../lib/unknown-array.js";
36
+ import { parseUnknownRecord } from "../../lib/unknown-containers.js";
34
37
  import { CHART_INK, CHART_PALETTE, MUTED_CHART_COLOR } from "../design.js";
35
38
  import { formatNumberCell, typographicExponent } from "../number-format.js";
39
+ import { isAllDigits } from "../../lib/text.js";
36
40
  import { categoryName, transformColumn } from "./common.js";
37
41
  import { axisOf, BELOW_RESOLUTION_NAME, BELOW_RESOLUTION_SYMBOL, BELOW_RESOLUTION_SYMBOL_PX, BELOW_RESOLUTION_TOOLTIP, belowResolutionHeight, belowResolutionRows, DENSE_NULL_SYMBOL_PX, DENSE_SIGNAL_OPACITY, demandedChannel, largest, niceCeiling, plottedValues, pointLayer, POINT_NAMES, pointNameSeries, seriesOf, sizedSeries, smallest, } from "./dense.js";
38
42
  import { placeLeaderNames, textWidthPx } from "./label-room.js";
@@ -141,28 +145,29 @@ function chromosomeNames(found) {
141
145
  */
142
146
  function genomeAxis(found) {
143
147
  const byPlace = [...found].sort((a, b) => a.low - b.low);
144
- return {
145
- names: CHROMOSOME_NAMES,
146
- starts: byPlace.map((chromosome, index) => [
147
- index === 0 ? 0 : byPlace[index - 1].high,
148
- `chr${categoryName(chromosome.name).trim().replace(CHROMOSOME_PREFIX, "")}`,
149
- ]),
150
- };
148
+ const starts = [];
149
+ let previous;
150
+ for (const chromosome of byPlace) {
151
+ starts.push([previous === undefined ? 0 : previous.high, `chr${withoutChrPrefix(categoryName(chromosome.name).trim())}`]);
152
+ previous = chromosome;
153
+ }
154
+ return { names: CHROMOSOME_NAMES, starts };
151
155
  }
152
156
  /** The sides of a peak where a lead name sits, in the order that the figure tries them. */
153
157
  const LEAD_NAME_SIDES = ["top", "right", "left"];
154
158
  /** The place of the three named chromosomes after the numbered ones, in genome order. */
155
159
  const NAMED_CHROMOSOMES = { X: 0, Y: 1, MT: 2, M: 2 };
156
- /** The text prefix of a chromosome name that some tables carry, for example `chr1`. */
157
- const CHROMOSOME_PREFIX = /^chr/i;
158
- /**
159
- * The genome order of two chromosome names: the numbered chromosomes in numeric order, then X, Y, and MT, then
160
+ /** The chromosome name without its leading `chr`, in either case. */
161
+ function withoutChrPrefix(name) {
162
+ return name.toLowerCase().startsWith("chr") ? name.slice(3) : name;
163
+ }
164
+ /** The genome order of two chromosome names: the numbered chromosomes in numeric order, then X, Y, and MT, then
160
165
  * each other name in text order. A `chr` prefix takes no part in the order.
161
166
  */
162
167
  export function compareChromosomes(a, b) {
163
168
  const rank = (cell) => {
164
- const name = String(cell).trim().replace(CHROMOSOME_PREFIX, "");
165
- if (/^\d+$/.test(name))
169
+ const name = withoutChrPrefix(String(cell).trim());
170
+ if (name.length > 0 && isAllDigits(name))
166
171
  return [0, Number(name), name];
167
172
  const named = NAMED_CHROMOSOMES[name.toUpperCase()];
168
173
  return named !== undefined ? [1, named, name] : [2, 0, name];
@@ -184,10 +189,10 @@ function chromosomes(rows, groupColumn, labelColumn, xs, ys, line) {
184
189
  const byKey = new Map();
185
190
  const order = [];
186
191
  for (let index = 0; index < rows.length; index += 1) {
187
- const value = rows[index][groupColumn];
192
+ const value = rows[index]?.[groupColumn];
188
193
  const x = xs[index];
189
194
  const y = ys[index];
190
- if (value === undefined || x === null || y === null)
195
+ if (value === undefined || x === null || x === undefined || y === null || y === undefined)
191
196
  continue;
192
197
  // The key carries the type of the cell, as the series split does.
193
198
  const key = `${typeof value}:${String(value)}`;
@@ -199,7 +204,7 @@ function chromosomes(rows, groupColumn, labelColumn, xs, ys, line) {
199
204
  }
200
205
  chromosome.low = Math.min(chromosome.low, x);
201
206
  chromosome.high = Math.max(chromosome.high, x);
202
- const name = labelColumn === undefined ? undefined : rows[index][labelColumn];
207
+ const name = labelColumn === undefined ? undefined : rows[index]?.[labelColumn];
203
208
  if (y > line && name !== undefined && String(name).trim() !== "" && (chromosome.lead === undefined || leads(index, chromosome.lead, xs, ys))) {
204
209
  chromosome.lead = index;
205
210
  }
@@ -217,12 +222,16 @@ function leads(index, other, xs, ys) {
217
222
  }
218
223
  /** The guide lines of a mark member, with the label of the genome-wide line over the line. */
219
224
  function guideOverLine(markLine, line) {
220
- const data = Array.isArray(markLine.data) ? markLine.data : [];
225
+ const data = isUnknownArray(markLine.data) ? markLine.data : [];
221
226
  return {
222
227
  ...markLine,
223
- data: data.map((entry) => entry.yAxis === line && typeof entry.label === "object" && entry.label !== null
224
- ? { ...entry, label: { ...entry.label, position: GUIDE_OVER_LINE } }
225
- : entry),
228
+ data: data.map((entry) => {
229
+ const fields = parseUnknownRecord(entry);
230
+ const label = fields === undefined ? undefined : parseUnknownRecord(fields.label);
231
+ if (fields === undefined || label === undefined || fields.yAxis !== line)
232
+ return entry;
233
+ return { ...fields, label: { ...label, position: GUIDE_OVER_LINE } };
234
+ }),
226
235
  };
227
236
  }
228
237
  /** The text of a guide p-value: the p in the scientific form of the number helper, as a power of ten. */
@@ -262,7 +271,7 @@ function deriveManhattan(block, rows, context) {
262
271
  x: x.value,
263
272
  y: { column: pColumn, transform: "neg_log10" },
264
273
  group: group.value,
265
- ...(encoding.label !== undefined ? { label: encoding.label } : {}),
274
+ label: encoding.label,
266
275
  },
267
276
  },
268
277
  ],
@@ -284,12 +293,12 @@ function deriveManhattan(block, rows, context) {
284
293
  // The composition splits the series in the order of the rows, thus each series takes the color of the
285
294
  // genome place of its chromosome, and never of its place in the series list.
286
295
  const places = new Map(found.map((chromosome, place) => [categoryName(chromosome.name), place]));
287
- const colorOf = (name) => MANHATTAN_COLORS[(places.get(String(name)) ?? 0) % MANHATTAN_COLORS.length];
296
+ const colorOf = (name) => MANHATTAN_COLORS[(places.get(textOf(name)) ?? 0) % MANHATTAN_COLORS.length] ?? CHART_PALETTE[0];
288
297
  const low = smallest(found.map((chromosome) => chromosome.low));
289
298
  const high = largest(found.map((chromosome) => chromosome.high));
290
299
  const top = niceCeiling(Math.max(peak, line, zeroRows.length > 0 ? zeroY : 0));
291
300
  const labelColumn = encoding.label;
292
- const names = labelColumn === undefined ? [] : leadRows.map((index) => ({ x: xs[index] ?? 0, y: ys[index] ?? 0, text: String(rows[index][labelColumn]) }));
301
+ const names = labelColumn === undefined ? [] : leadRows.map((index) => ({ x: xs[index] ?? 0, y: ys[index] ?? 0, text: String(rows[index]?.[labelColumn]) }));
293
302
  const span = low !== undefined && high !== undefined ? { min: low, max: high } : undefined;
294
303
  const text = sizedSeries([CHROMOSOME_NAMES, POINT_NAMES], (frame) => {
295
304
  if (span === undefined)
@@ -306,18 +315,24 @@ function deriveManhattan(block, rows, context) {
306
315
  legend: { show: false },
307
316
  xAxis: {
308
317
  ...axisOf(option, "xAxis"),
309
- ...(low !== undefined && high !== undefined ? { min: low, max: high } : {}),
318
+ min: low,
319
+ max: high,
310
320
  axisLabel: { show: false, formatter: GENOME_POSITION_FUNCTION },
311
321
  axisTick: { show: false },
312
322
  [GENOME_MEMBER]: genomeAxis(found),
313
323
  },
314
324
  yAxis: { ...axisOf(option, "yAxis"), min: 0, max: top },
315
325
  series: [
316
- ...seriesOf(option).map((series) => ({
317
- ...series,
318
- ...pointLayer(colorOf(series.name), DENSE_NULL_SYMBOL_PX, DENSE_SIGNAL_OPACITY),
319
- ...(series.markLine !== undefined ? { markLine: guideOverLine(series.markLine, line) } : {}),
320
- })),
326
+ ...seriesOf(option).map((series) => {
327
+ const guided = {
328
+ ...series,
329
+ ...pointLayer(colorOf(series.name), DENSE_NULL_SYMBOL_PX, DENSE_SIGNAL_OPACITY),
330
+ };
331
+ if (series.markLine !== undefined) {
332
+ guided.markLine = guideOverLine(parseUnknownRecord(series.markLine) ?? {}, line);
333
+ }
334
+ return guided;
335
+ }),
321
336
  ...(zeroRows.length > 0
322
337
  ? [
323
338
  {
@@ -327,11 +342,14 @@ function deriveManhattan(block, rows, context) {
327
342
  symbolSize: BELOW_RESOLUTION_SYMBOL_PX,
328
343
  itemStyle: { opacity: DENSE_SIGNAL_OPACITY },
329
344
  tooltip: BELOW_RESOLUTION_TOOLTIP,
330
- data: zeroRows.map((index) => ({
331
- ...(labelColumn !== undefined ? { name: String(rows[index][labelColumn]) } : {}),
332
- value: [xs[index] ?? 0, zeroY],
333
- itemStyle: { color: colorOf(categoryName(rows[index][groupColumn])) },
334
- })),
345
+ data: zeroRows.map((index) => {
346
+ const group = rows[index]?.[groupColumn];
347
+ return {
348
+ name: labelColumn === undefined ? undefined : String(rows[index]?.[labelColumn]),
349
+ value: [xs[index] ?? 0, zeroY],
350
+ itemStyle: { color: group === undefined ? MANHATTAN_COLORS[0] : colorOf(categoryName(group)) },
351
+ };
352
+ }),
335
353
  },
336
354
  ]
337
355
  : []),
@@ -173,11 +173,10 @@ function deriveOncoprint(block, rows, context) {
173
173
  legend: {
174
174
  // A taller body holds the legend lines of the single column export, thus the page legend starts
175
175
  // under the sample title and the free part of the band sits under it.
176
- ...(tall
177
- ? {
178
- top: percentOf(100 - bottom + ((CHART_PAGE_TEXT_PX * (1 + TITLE_LINE_SHARE) + SAMPLE_TITLE_GAP) / Math.min(body, CHART_BODY_MAX_PX)) * 100),
179
- }
180
- : { bottom: 0 }),
176
+ top: tall
177
+ ? percentOf(100 - bottom + ((CHART_PAGE_TEXT_PX * (1 + TITLE_LINE_SHARE) + SAMPLE_TITLE_GAP) / Math.min(body, CHART_BODY_MAX_PX)) * 100)
178
+ : undefined,
179
+ bottom: tall ? undefined : 0,
181
180
  itemWidth: LEGEND_ICON_PX,
182
181
  itemHeight: LEGEND_ICON_PX,
183
182
  itemGap: LEGEND_GAP_PX,
@@ -17,6 +17,7 @@
17
17
  */
18
18
  import { err, ok } from "neverthrow";
19
19
  import { channelColumn, channelOrder, channelTransform } from "../../contracts/report-blocks.js";
20
+ import { parseUnknownRecord } from "../../lib/unknown-containers.js";
20
21
  import { CHART_INK, CHART_PALETTE } from "../design.js";
21
22
  import { categoricalPalette, categoryName, chartProblem, columnPresent, firstAppearance, POINT_LEGEND_ICON, toNumber, transformColumn, valueAxis, valueAxisTitle, } from "./common.js";
22
23
  import { equalRanges, squareLayout } from "./equal-units.js";
@@ -147,7 +148,13 @@ function deriveShapeDraw(block, rows, context, draw) {
147
148
  const ps = shapes?.values[index] ?? null;
148
149
  if (px === null || py === null || (groups !== undefined && pg === null) || (shapes !== undefined && ps === null))
149
150
  continue;
150
- points.push({ index, x: px, y: py, ...(pg !== null ? { group: categoryName(pg) } : {}), ...(ps !== null ? { shape: categoryName(ps) } : {}) });
151
+ points.push({
152
+ index,
153
+ x: px,
154
+ y: py,
155
+ group: pg === null ? undefined : categoryName(pg),
156
+ shape: ps === null ? undefined : categoryName(ps),
157
+ });
151
158
  }
152
159
  const groupNames = firstAppearance(points.flatMap((point) => (point.group === undefined ? [] : [point.group])));
153
160
  const shapeNames = firstAppearance(points.flatMap((point) => (point.shape === undefined ? [] : [point.shape])));
@@ -164,10 +171,13 @@ function deriveShapeDraw(block, rows, context, draw) {
164
171
  const named = labelColumn !== undefined;
165
172
  const labeled = named && draw.labelRows > 0 && points.length <= draw.labelRows;
166
173
  const sides = new Map();
167
- if (labeled && labelColumn !== undefined) {
168
- const placed = pointNameSides(points.map((point) => ({ x: point.x, y: point.y, text: String(rows[point.index][labelColumn] ?? "") })), ranges, SHAPED_POINT_PX);
169
- for (const [place, point] of points.entries())
170
- sides.set(point.index, placed[place]);
174
+ if (labelColumn !== undefined && labeled) {
175
+ const placed = pointNameSides(points.map((point) => ({ x: point.x, y: point.y, text: String(rows[point.index]?.[labelColumn] ?? "") })), ranges, SHAPED_POINT_PX);
176
+ for (const [place, point] of points.entries()) {
177
+ const side = placed[place];
178
+ if (side !== undefined)
179
+ sides.set(point.index, side);
180
+ }
171
181
  }
172
182
  const buckets = new Map();
173
183
  for (const point of points) {
@@ -189,17 +199,21 @@ function deriveShapeDraw(block, rows, context, draw) {
189
199
  series.push({
190
200
  type: "scatter",
191
201
  name: groupKey ?? shapeKey ?? yTitle,
192
- ...(shapeKey !== undefined ? { symbol: SHAPE_SYMBOLS[shapePlace] } : {}),
202
+ symbol: shapeKey !== undefined ? SHAPE_SYMBOLS[shapePlace] : undefined,
193
203
  symbolSize: SHAPED_POINT_PX,
194
204
  itemStyle: { color: groupKey !== undefined ? palette[groupPlace] : CHART_PALETTE[0] },
195
- ...(labeled ? POINT_LABEL_FIELDS : {}),
205
+ label: labeled ? POINT_LABEL_FIELDS.label : undefined,
196
206
  data: members.map((point) => {
197
207
  const pair = [point.x, point.y];
198
- const name = labelColumn === undefined ? undefined : rows[point.index][labelColumn];
208
+ const name = labelColumn === undefined ? undefined : rows[point.index]?.[labelColumn];
199
209
  if (name === undefined)
200
210
  return pair;
201
211
  const side = sides.get(point.index);
202
- return { value: pair, name: String(name), ...(side !== undefined && side !== "right" ? { label: { position: side } } : {}) };
212
+ return {
213
+ value: pair,
214
+ name: String(name),
215
+ label: side !== undefined && side !== "right" ? { position: side } : undefined,
216
+ };
203
217
  }),
204
218
  });
205
219
  }
@@ -219,7 +233,7 @@ function deriveShapeDraw(block, rows, context, draw) {
219
233
  const option = {
220
234
  tooltip: named ? { ...NAMED_POINT_TOOLTIP } : { ...PLAIN_POINT_TOOLTIP },
221
235
  series,
222
- legend: keyed ? { orient: draw.equalUnits ? "vertical" : "horizontal", ...(draw.equalUnits ? {} : { bottom: 0 }), data: entries } : { show: false },
236
+ legend: keyed ? { orient: draw.equalUnits ? "vertical" : "horizontal", bottom: draw.equalUnits ? undefined : 0, data: entries } : { show: false },
223
237
  };
224
238
  if (!draw.equalUnits) {
225
239
  return ok({ ...option, xAxis: valueAxis("x", xTitle, { scale: true }), yAxis: valueAxis("y", yTitle, { scale: true }) });
@@ -231,7 +245,7 @@ function deriveShapeDraw(block, rows, context, draw) {
231
245
  grid: layout.grid,
232
246
  xAxis: { ...valueAxis("x", xTitle, ranges.x), ...interval },
233
247
  yAxis: { ...valueAxis("y", yTitle, ranges.y), ...interval },
234
- ...(keyed && layout.legend !== undefined ? { legend: { ...option.legend, ...layout.legend } } : {}),
248
+ legend: { ...parseUnknownRecord(option.legend), ...layout.legend },
235
249
  media: layout.media,
236
250
  });
237
251
  }