@inflexa-ai/harness 0.45.1 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (789) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +9 -3
  3. package/dist/agents/conversation-agent.js +34 -33
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +12 -14
  9. package/dist/agents/sandbox/shared.js +18 -12
  10. package/dist/agents/sandbox/types.d.ts +4 -4
  11. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  12. package/dist/agents/sandbox/validate-skills.js +3 -1
  13. package/dist/agents/sandbox-catalog.d.ts +2 -2
  14. package/dist/agents/sandbox-catalog.js +3 -3
  15. package/dist/agents/system-prompt.d.ts +2 -2
  16. package/dist/app/chat-turn-workflow.d.ts +114 -0
  17. package/dist/app/chat-turn-workflow.js +307 -0
  18. package/dist/app/chat-turn.d.ts +85 -57
  19. package/dist/app/chat-turn.js +123 -100
  20. package/dist/app/data-profile-orientation.js +10 -8
  21. package/dist/app/data-profile-view.d.ts +4 -4
  22. package/dist/app/data-profile-view.js +9 -8
  23. package/dist/app/in-process-turn.d.ts +42 -0
  24. package/dist/app/in-process-turn.js +139 -0
  25. package/dist/app/message-assembly.d.ts +10 -4
  26. package/dist/app/message-assembly.js +13 -8
  27. package/dist/app/report-session-runtime.d.ts +4 -4
  28. package/dist/app/report-session-runtime.js +36 -21
  29. package/dist/app/spawn-report-session.d.ts +33 -28
  30. package/dist/app/spawn-report-session.js +25 -40
  31. package/dist/app/synthesize-run.d.ts +22 -16
  32. package/dist/app/synthesize-run.js +41 -35
  33. package/dist/app/work.d.ts +96 -0
  34. package/dist/app/work.js +147 -0
  35. package/dist/auth/local-auth-context.d.ts +1 -3
  36. package/dist/auth/local-auth-context.js +1 -3
  37. package/dist/auth/local-run-authorizer.d.ts +1 -1
  38. package/dist/auth/local-run-authorizer.js +5 -3
  39. package/dist/auth/types.d.ts +26 -26
  40. package/dist/billing/cached-resolver.d.ts +4 -4
  41. package/dist/billing/run-charge.d.ts +5 -8
  42. package/dist/billing/run-charge.js +2 -2
  43. package/dist/billing/usage-recorder.d.ts +9 -9
  44. package/dist/citations/aggregate.js +1 -1
  45. package/dist/citations/clients/arxiv.d.ts +2 -2
  46. package/dist/citations/clients/arxiv.js +12 -4
  47. package/dist/citations/clients/common.js +4 -2
  48. package/dist/citations/clients/crossref.d.ts +2 -2
  49. package/dist/citations/clients/crossref.js +37 -37
  50. package/dist/citations/clients/doi-registry.js +15 -16
  51. package/dist/citations/clients/pubmed.d.ts +2 -2
  52. package/dist/citations/clients/pubmed.js +20 -13
  53. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  54. package/dist/citations/clients/semantic-scholar.js +9 -9
  55. package/dist/citations/compare.js +2 -2
  56. package/dist/citations/match.d.ts +2 -2
  57. package/dist/citations/match.js +12 -7
  58. package/dist/citations/normalize.js +35 -26
  59. package/dist/citations/plan.js +6 -2
  60. package/dist/citations/resolve.d.ts +6 -6
  61. package/dist/citations/resolve.js +34 -25
  62. package/dist/citations/types.d.ts +77 -77
  63. package/dist/config/environment-stores.d.ts +6 -6
  64. package/dist/config/resource-limits.js +1 -3
  65. package/dist/contracts/analogy-report.d.ts +7 -7
  66. package/dist/contracts/analogy-report.js +2 -2
  67. package/dist/contracts/chat-events.d.ts +38 -24
  68. package/dist/contracts/chat-frame.d.ts +15 -5
  69. package/dist/contracts/chat-frame.js +64 -41
  70. package/dist/contracts/chat-parts.d.ts +130 -67
  71. package/dist/contracts/chat-parts.js +1 -0
  72. package/dist/contracts/content-url.js +16 -2
  73. package/dist/contracts/data-profile.d.ts +38 -38
  74. package/dist/contracts/index.d.ts +2 -2
  75. package/dist/contracts/index.js +1 -1
  76. package/dist/contracts/message.d.ts +6 -6
  77. package/dist/contracts/organ-system.d.ts +11 -11
  78. package/dist/contracts/part-registry.d.ts +5 -4
  79. package/dist/contracts/part-registry.js +5 -0
  80. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  81. package/dist/contracts/profile-vocabulary.js +10 -3
  82. package/dist/contracts/report-blocks.d.ts +329 -329
  83. package/dist/contracts/report-reference.d.ts +105 -81
  84. package/dist/contracts/report-reference.js +30 -13
  85. package/dist/contracts/schemas/chat-events.d.ts +30 -16
  86. package/dist/contracts/schemas/chat-events.js +15 -6
  87. package/dist/contracts/schemas/chat-parts.d.ts +175 -102
  88. package/dist/contracts/schemas/chat-parts.js +33 -7
  89. package/dist/contracts/severity.d.ts +1 -1
  90. package/dist/contracts/structure-source.d.ts +3 -3
  91. package/dist/contracts/structure-source.js +6 -2
  92. package/dist/contracts/subagent-activity.d.ts +2 -2
  93. package/dist/contracts/subagent-activity.js +5 -3
  94. package/dist/contracts/usage.d.ts +2 -2
  95. package/dist/data/safety-panel-schema.d.ts +25 -25
  96. package/dist/data/safety-panel-schema.js +13 -4
  97. package/dist/execution/artifact-metadata.d.ts +23 -15
  98. package/dist/execution/artifact-metadata.js +33 -10
  99. package/dist/execution/artifact-record.d.ts +2 -2
  100. package/dist/execution/artifact-registration.d.ts +5 -5
  101. package/dist/execution/artifact-registry.d.ts +8 -8
  102. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  103. package/dist/execution/dbos-run-launcher.js +58 -4
  104. package/dist/execution/dbos-workflow-purger.d.ts +5 -6
  105. package/dist/execution/dbos-workflow-purger.js +8 -7
  106. package/dist/execution/input-signature.d.ts +2 -2
  107. package/dist/execution/post-step-pipeline.d.ts +9 -9
  108. package/dist/execution/post-step-pipeline.js +1 -1
  109. package/dist/execution/post-step.js +2 -2
  110. package/dist/execution/reconcile-manifest.d.ts +4 -4
  111. package/dist/execution/reconcile-manifest.js +3 -2
  112. package/dist/execution/run-authorizer.d.ts +46 -37
  113. package/dist/execution/run-authorizer.js +8 -8
  114. package/dist/execution/run-canceler.d.ts +7 -7
  115. package/dist/execution/run-canceler.js +14 -7
  116. package/dist/execution/run-end-record.d.ts +2 -3
  117. package/dist/execution/run-event-parts.d.ts +0 -8
  118. package/dist/execution/run-event-parts.js +29 -24
  119. package/dist/execution/run-event-stream.d.ts +8 -8
  120. package/dist/execution/run-event-stream.js +3 -4
  121. package/dist/execution/run-launcher.d.ts +4 -4
  122. package/dist/execution/run-synthesis.d.ts +49 -48
  123. package/dist/execution/run-synthesis.js +96 -255
  124. package/dist/execution/staged-input.d.ts +2 -2
  125. package/dist/execution/step-summary.d.ts +6 -6
  126. package/dist/execution/step-summary.js +4 -8
  127. package/dist/execution/topo-sort.js +4 -3
  128. package/dist/execution/workflow-purger.d.ts +2 -2
  129. package/dist/index.d.ts +17 -20
  130. package/dist/index.js +25 -36
  131. package/dist/input-sanitization.js +9 -2
  132. package/dist/input-scan/clustering.d.ts +6 -6
  133. package/dist/input-scan/clustering.js +11 -5
  134. package/dist/input-scan/companions.js +3 -2
  135. package/dist/input-scan/detect-sets.d.ts +2 -2
  136. package/dist/input-scan/detect-sets.js +25 -21
  137. package/dist/input-scan/enrich.d.ts +6 -6
  138. package/dist/input-scan/enrich.js +29 -12
  139. package/dist/input-scan/formats.d.ts +2 -2
  140. package/dist/input-scan/formats.js +8 -2
  141. package/dist/input-scan/markers.d.ts +2 -2
  142. package/dist/input-scan/markers.js +14 -5
  143. package/dist/input-scan/menu.d.ts +10 -10
  144. package/dist/input-scan/menu.js +0 -0
  145. package/dist/input-scan/quarantine.d.ts +2 -2
  146. package/dist/input-scan/quarantine.js +23 -18
  147. package/dist/input-scan/readout-budget.d.ts +2 -2
  148. package/dist/input-scan/readout-budget.js +1 -1
  149. package/dist/input-scan/readout.d.ts +2 -2
  150. package/dist/input-scan/readout.js +47 -34
  151. package/dist/input-scan/scan.d.ts +2 -2
  152. package/dist/input-scan/scan.js +7 -5
  153. package/dist/input-scan/set-types.d.ts +28 -28
  154. package/dist/input-scan/shapes.d.ts +4 -4
  155. package/dist/input-scan/shapes.js +0 -0
  156. package/dist/input-scan/templates.d.ts +10 -10
  157. package/dist/input-scan/templates.js +30 -22
  158. package/dist/input-scan/tokens.d.ts +6 -4
  159. package/dist/input-scan/tokens.js +100 -38
  160. package/dist/input-scan/types.d.ts +22 -22
  161. package/dist/lib/async-utils.d.ts +3 -7
  162. package/dist/lib/async-utils.js +5 -9
  163. package/dist/lib/cache.js +1 -1
  164. package/dist/lib/chrome.d.ts +46 -6
  165. package/dist/lib/console-logger.js +2 -2
  166. package/dist/lib/db-result.d.ts +22 -6
  167. package/dist/lib/db-result.js +9 -13
  168. package/dist/lib/eyes.d.ts +4 -4
  169. package/dist/lib/eyes.js +1 -1
  170. package/dist/lib/fs-helpers.js +18 -6
  171. package/dist/lib/fs-result.d.ts +1 -0
  172. package/dist/lib/fs-result.js +5 -6
  173. package/dist/lib/hooks.d.ts +23 -7
  174. package/dist/lib/hooks.js +17 -3
  175. package/dist/lib/host-concurrency.js +3 -2
  176. package/dist/lib/logger.d.ts +2 -2
  177. package/dist/lib/logger.js +2 -1
  178. package/dist/lib/metrics.d.ts +1 -1
  179. package/dist/lib/null-proto.d.ts +6 -0
  180. package/dist/lib/null-proto.js +17 -0
  181. package/dist/lib/otel-spans.d.ts +1 -1
  182. package/dist/lib/otel-spans.js +9 -5
  183. package/dist/lib/otel.d.ts +4 -2
  184. package/dist/lib/otel.js +10 -2
  185. package/dist/lib/page-capture.d.ts +8 -8
  186. package/dist/lib/page-capture.js +9 -4
  187. package/dist/lib/parse-json.d.ts +5 -0
  188. package/dist/lib/parse-json.js +12 -0
  189. package/dist/lib/present.d.ts +12 -0
  190. package/dist/lib/present.js +39 -0
  191. package/dist/lib/rate-limit.d.ts +4 -4
  192. package/dist/lib/rate-limit.js +12 -13
  193. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  194. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  195. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  196. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  197. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  198. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  199. package/dist/lib/regulatory-corpus.d.ts +10 -10
  200. package/dist/lib/regulatory-corpus.js +3 -1
  201. package/dist/lib/result.d.ts +10 -11
  202. package/dist/lib/result.js +15 -13
  203. package/dist/lib/storage.d.ts +2 -2
  204. package/dist/lib/test/async-iterable.d.ts +9 -0
  205. package/dist/lib/test/async-iterable.js +28 -0
  206. package/dist/lib/test/request-url.d.ts +5 -0
  207. package/dist/lib/test/request-url.js +7 -0
  208. package/dist/lib/test/result-assert.d.ts +12 -0
  209. package/dist/lib/test/result-assert.js +17 -0
  210. package/dist/lib/test/text-shapes.d.ts +24 -0
  211. package/dist/lib/test/text-shapes.js +63 -0
  212. package/dist/lib/text.d.ts +22 -0
  213. package/dist/lib/text.js +68 -0
  214. package/dist/lib/thrown.d.ts +18 -0
  215. package/dist/lib/thrown.js +30 -0
  216. package/dist/lib/unknown-array.d.ts +6 -0
  217. package/dist/lib/unknown-array.js +8 -0
  218. package/dist/lib/unknown-containers.d.ts +14 -0
  219. package/dist/lib/unknown-containers.js +17 -0
  220. package/dist/lib/unknown-text.d.ts +8 -0
  221. package/dist/lib/unknown-text.js +28 -0
  222. package/dist/lib/zod-issue-shape.d.ts +1 -1
  223. package/dist/lib/zod-issue-shape.js +31 -31
  224. package/dist/lib/zod-issues.d.ts +3 -3
  225. package/dist/lib/zod-issues.js +30 -17
  226. package/dist/literature/sources/arxiv.d.ts +6 -6
  227. package/dist/literature/sources/arxiv.js +92 -35
  228. package/dist/literature/sources/http.d.ts +2 -2
  229. package/dist/literature/sources/http.js +16 -15
  230. package/dist/literature/sources/pubmed.d.ts +16 -16
  231. package/dist/literature/sources/pubmed.js +96 -61
  232. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  233. package/dist/literature/sources/semantic-scholar.js +22 -13
  234. package/dist/loop/accounting.d.ts +63 -0
  235. package/dist/loop/accounting.js +141 -0
  236. package/dist/loop/call-policy.d.ts +73 -0
  237. package/dist/loop/call-policy.js +109 -0
  238. package/dist/loop/chat-stream.d.ts +62 -0
  239. package/dist/loop/chat-stream.js +237 -0
  240. package/dist/loop/compaction.d.ts +9 -9
  241. package/dist/loop/compaction.js +1 -1
  242. package/dist/loop/metrics.d.ts +12 -15
  243. package/dist/loop/metrics.js +14 -26
  244. package/dist/loop/run-loop.d.ts +233 -0
  245. package/dist/loop/run-loop.js +770 -0
  246. package/dist/loop/sub-agent.d.ts +61 -0
  247. package/dist/loop/sub-agent.js +161 -0
  248. package/dist/loop/tool-adapter.d.ts +98 -0
  249. package/dist/loop/tool-adapter.js +364 -0
  250. package/dist/loop/tool-detail.d.ts +1 -1
  251. package/dist/loop/tool-detail.js +6 -5
  252. package/dist/loop/tool-outcome.d.ts +1 -1
  253. package/dist/loop/tool-output.d.ts +4 -4
  254. package/dist/loop/tool-output.js +2 -2
  255. package/dist/loop/turn-credentials.d.ts +34 -0
  256. package/dist/loop/turn-credentials.js +73 -0
  257. package/dist/loop/types.d.ts +29 -38
  258. package/dist/loop/types.js +2 -7
  259. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  260. package/dist/memory/ai-sdk-message-storage.js +13 -11
  261. package/dist/memory/card-builders.d.ts +14 -14
  262. package/dist/memory/card-builders.js +19 -15
  263. package/dist/memory/conversation-display-recorder.d.ts +22 -4
  264. package/dist/memory/conversation-display-recorder.js +43 -24
  265. package/dist/memory/conversation-display-replay.js +3 -2
  266. package/dist/memory/conversation-display-storage.d.ts +15 -7
  267. package/dist/memory/conversation-display-storage.js +141 -36
  268. package/dist/memory/conversation-view.d.ts +4 -4
  269. package/dist/memory/conversation-view.js +5 -4
  270. package/dist/memory/count-tokens.js +10 -8
  271. package/dist/memory/derive-thread-title.d.ts +0 -13
  272. package/dist/memory/derive-thread-title.js +2 -1
  273. package/dist/memory/message-backfill.d.ts +12 -5
  274. package/dist/memory/message-backfill.js +5 -3
  275. package/dist/memory/thread-history.d.ts +36 -21
  276. package/dist/memory/thread-history.js +78 -54
  277. package/dist/memory/thread-store.d.ts +26 -17
  278. package/dist/memory/thread-store.js +15 -9
  279. package/dist/memory/tool-call-integrity.d.ts +2 -2
  280. package/dist/memory/tool-call-integrity.js +4 -3
  281. package/dist/memory/working-memory.d.ts +16 -12
  282. package/dist/memory/working-memory.js +72 -61
  283. package/dist/prompts/briefing.d.ts +12 -12
  284. package/dist/prompts/briefing.js +1 -1
  285. package/dist/prompts/synthesis-agent.d.ts +1 -1
  286. package/dist/prompts/synthesis-agent.js +6 -14
  287. package/dist/provenance/collector.d.ts +6 -6
  288. package/dist/provenance/collector.js +15 -8
  289. package/dist/provenance/exec-frame.d.ts +2 -2
  290. package/dist/provenance/exec-frame.js +6 -1
  291. package/dist/provenance/seam.d.ts +1 -4
  292. package/dist/provenance/types.d.ts +6 -6
  293. package/dist/providers/ai-sdk.d.ts +113 -62
  294. package/dist/providers/ai-sdk.js +283 -518
  295. package/dist/providers/embedding.d.ts +2 -2
  296. package/dist/providers/embedding.js +1 -1
  297. package/dist/providers/errors.d.ts +22 -2
  298. package/dist/providers/errors.js +98 -50
  299. package/dist/providers/prompt-cache.d.ts +8 -8
  300. package/dist/providers/prompt-cache.js +13 -11
  301. package/dist/providers/reasoning.d.ts +2 -2
  302. package/dist/providers/reasoning.js +2 -2
  303. package/dist/providers/types.d.ts +55 -94
  304. package/dist/reference-data/catalog.d.ts +2 -15
  305. package/dist/reference-data/catalog.js +25 -8
  306. package/dist/reference-data/receipt.d.ts +2 -2
  307. package/dist/report-model/assert-rules.js +1 -1
  308. package/dist/report-model/authoring-grammar.d.ts +211 -233
  309. package/dist/report-model/block-walk.d.ts +10 -10
  310. package/dist/report-model/block-walk.js +2 -0
  311. package/dist/report-model/draft-finish.d.ts +8 -8
  312. package/dist/report-model/draft-finish.js +1 -1
  313. package/dist/report-model/draft-hash.js +8 -7
  314. package/dist/report-model/draft-operations.d.ts +22 -10
  315. package/dist/report-model/draft-operations.js +48 -30
  316. package/dist/report-model/draft-read.d.ts +19 -7
  317. package/dist/report-model/draft-read.js +16 -6
  318. package/dist/report-model/draft.d.ts +844 -2
  319. package/dist/report-model/draft.js +3 -1
  320. package/dist/report-model/fixture-resolver.js +39 -16
  321. package/dist/report-model/pin-snapshot.d.ts +2 -2
  322. package/dist/report-model/pin-snapshot.js +15 -15
  323. package/dist/report-model/production-resolver.d.ts +18 -18
  324. package/dist/report-model/production-resolver.js +50 -42
  325. package/dist/report-model/reference-resolver.d.ts +26 -10
  326. package/dist/report-model/reference-resolver.js +68 -5
  327. package/dist/report-model/reference-stamp.js +30 -38
  328. package/dist/report-model/structural-validation.js +12 -4
  329. package/dist/report-model/validate.d.ts +7 -7
  330. package/dist/report-model/validate.js +6 -6
  331. package/dist/report-render/assets.d.ts +2 -2
  332. package/dist/report-render/assets.js +27 -3
  333. package/dist/report-render/chart-export.d.ts +10 -2
  334. package/dist/report-render/chart-export.js +37 -11
  335. package/dist/report-render/chart-presets.d.ts +8 -8
  336. package/dist/report-render/chart-presets.js +3 -3
  337. package/dist/report-render/chart-renderers.d.ts +23 -16
  338. package/dist/report-render/chart-renderers.js +74 -53
  339. package/dist/report-render/chart-toolbox.d.ts +2 -2
  340. package/dist/report-render/chart-toolbox.js +7 -6
  341. package/dist/report-render/chart.d.ts +15 -16
  342. package/dist/report-render/chart.js +369 -252
  343. package/dist/report-render/design.d.ts +36 -297
  344. package/dist/report-render/design.js +0 -12
  345. package/dist/report-render/figures/common.d.ts +12 -12
  346. package/dist/report-render/figures/common.js +42 -31
  347. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  348. package/dist/report-render/figures/dendrogram.js +10 -10
  349. package/dist/report-render/figures/dense.js +15 -8
  350. package/dist/report-render/figures/dotplot.js +46 -33
  351. package/dist/report-render/figures/embedding.js +52 -43
  352. package/dist/report-render/figures/equal-units.d.ts +10 -10
  353. package/dist/report-render/figures/equal-units.js +27 -27
  354. package/dist/report-render/figures/forest.js +9 -7
  355. package/dist/report-render/figures/gsea.js +21 -11
  356. package/dist/report-render/figures/heatmap.js +13 -9
  357. package/dist/report-render/figures/index.d.ts +10 -10
  358. package/dist/report-render/figures/index.js +4 -2
  359. package/dist/report-render/figures/km.js +10 -9
  360. package/dist/report-render/figures/label-room.d.ts +12 -12
  361. package/dist/report-render/figures/label-room.js +7 -2
  362. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  363. package/dist/report-render/figures/locuszoom.js +59 -31
  364. package/dist/report-render/figures/lollipop.js +3 -2
  365. package/dist/report-render/figures/ma.js +8 -4
  366. package/dist/report-render/figures/manhattan.d.ts +1 -2
  367. package/dist/report-render/figures/manhattan.js +52 -34
  368. package/dist/report-render/figures/oncoprint.js +4 -5
  369. package/dist/report-render/figures/pca.js +25 -11
  370. package/dist/report-render/figures/qq.js +20 -9
  371. package/dist/report-render/figures/roc.js +1 -1
  372. package/dist/report-render/figures/sankey.d.ts +2 -2
  373. package/dist/report-render/figures/sankey.js +11 -10
  374. package/dist/report-render/figures/upset.d.ts +6 -6
  375. package/dist/report-render/figures/upset.js +7 -4
  376. package/dist/report-render/figures/volcano.js +12 -10
  377. package/dist/report-render/hybrid-svg.d.ts +4 -4
  378. package/dist/report-render/hybrid-svg.js +7 -5
  379. package/dist/report-render/number-format.d.ts +4 -4
  380. package/dist/report-render/number-format.js +62 -27
  381. package/dist/report-render/page.js +2 -1
  382. package/dist/report-render/provenance-data.d.ts +2 -2
  383. package/dist/report-render/references.d.ts +4 -4
  384. package/dist/report-render/render.d.ts +2 -2
  385. package/dist/report-render/render.js +10 -11
  386. package/dist/report-render/script-json.js +1 -1
  387. package/dist/report-render/table-data.d.ts +6 -6
  388. package/dist/report-render/test/options.d.ts +49 -0
  389. package/dist/report-render/test/options.js +143 -0
  390. package/dist/report-render/test/page-function.d.ts +19 -0
  391. package/dist/report-render/test/page-function.js +33 -0
  392. package/dist/report-render/types.d.ts +10 -10
  393. package/dist/report-render/value-bridge.d.ts +4 -4
  394. package/dist/report-render/value-bridge.js +27 -14
  395. package/dist/report-render/views/chart-view.d.ts +2 -2
  396. package/dist/report-render/views/chart-view.js +2 -2
  397. package/dist/report-render/views/lineage.d.ts +6 -6
  398. package/dist/report-render/views/lineage.js +2 -0
  399. package/dist/report-render/views/page-view.d.ts +2 -2
  400. package/dist/report-render/views/page-view.js +1 -0
  401. package/dist/report-render/views/prose.js +25 -8
  402. package/dist/report-render/views/references-view.js +12 -1
  403. package/dist/report-render/views/values.js +1 -1
  404. package/dist/runtime/assemble.d.ts +53 -26
  405. package/dist/runtime/assemble.js +103 -56
  406. package/dist/runtime/boot.d.ts +8 -7
  407. package/dist/runtime/boot.js +1 -1
  408. package/dist/runtime/connection-budget.d.ts +6 -6
  409. package/dist/runtime/connection-budget.js +1 -1
  410. package/dist/runtime/dbos.d.ts +29 -19
  411. package/dist/runtime/dbos.js +35 -20
  412. package/dist/runtime/result-serialization.js +18 -5
  413. package/dist/runtime/shutdown.d.ts +2 -2
  414. package/dist/sandbox/client.d.ts +7 -3
  415. package/dist/sandbox/cpu-files.d.ts +2 -2
  416. package/dist/sandbox/cpu-files.js +21 -4
  417. package/dist/sandbox/create-sandbox.d.ts +7 -8
  418. package/dist/sandbox/create-sandbox.js +6 -12
  419. package/dist/sandbox/docker-client.d.ts +48 -3
  420. package/dist/sandbox/docker-client.js +10 -6
  421. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  422. package/dist/sandbox/exec-outcome.d.ts +2 -2
  423. package/dist/sandbox/exec-outcome.js +1 -1
  424. package/dist/sandbox/exec.d.ts +10 -6
  425. package/dist/sandbox/exec.js +27 -12
  426. package/dist/sandbox/execution-id.js +14 -6
  427. package/dist/sandbox/farm.d.ts +2 -2
  428. package/dist/sandbox/farm.js +22 -27
  429. package/dist/sandbox/identity.d.ts +7 -0
  430. package/dist/sandbox/identity.js +14 -3
  431. package/dist/sandbox/image-packages.js +15 -27
  432. package/dist/sandbox/k8s-client.d.ts +35 -8
  433. package/dist/sandbox/k8s-client.js +6 -5
  434. package/dist/sandbox/labels.js +1 -0
  435. package/dist/sandbox/liveness.js +3 -1
  436. package/dist/sandbox/mount-plan.d.ts +10 -10
  437. package/dist/sandbox/mount-plan.js +13 -14
  438. package/dist/sandbox/notification-sweep.d.ts +4 -4
  439. package/dist/sandbox/notification-sweep.js +4 -7
  440. package/dist/sandbox/package-identity.d.ts +6 -13
  441. package/dist/sandbox/package-identity.js +46 -28
  442. package/dist/sandbox/reaper.d.ts +10 -10
  443. package/dist/sandbox/reaper.js +4 -6
  444. package/dist/sandbox/sandbox-error.d.ts +2 -9
  445. package/dist/sandbox/sandbox-error.js +21 -8
  446. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  447. package/dist/sandbox/sandbox-step-translate.js +22 -8
  448. package/dist/sandbox/step-sandbox.d.ts +47 -0
  449. package/dist/sandbox/step-sandbox.js +53 -0
  450. package/dist/sandbox/types.d.ts +18 -19
  451. package/dist/sandbox/types.js +1 -1
  452. package/dist/schemas/artifact-manifest.d.ts +4 -4
  453. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  454. package/dist/schemas/file-metadata.js +2 -4
  455. package/dist/schemas/plan-schemas.d.ts +31 -31
  456. package/dist/schemas/run-synthesis.d.ts +95 -26
  457. package/dist/schemas/run-synthesis.js +3 -1
  458. package/dist/schemas/validate-plan.d.ts +4 -4
  459. package/dist/schemas/validate-plan.js +17 -5
  460. package/dist/schemas/workflow-state.d.ts +19 -19
  461. package/dist/schemas/workflow-state.js +2 -2
  462. package/dist/state/active-turns.d.ts +36 -0
  463. package/dist/state/active-turns.js +67 -0
  464. package/dist/state/analyses-metrics.d.ts +8 -8
  465. package/dist/state/analyses-metrics.js +4 -4
  466. package/dist/state/analyses.d.ts +0 -14
  467. package/dist/state/analyses.js +0 -32
  468. package/dist/state/artifacts.d.ts +32 -19
  469. package/dist/state/artifacts.js +28 -5
  470. package/dist/state/data-profile.d.ts +2 -2
  471. package/dist/state/db.d.ts +12 -2
  472. package/dist/state/db.js +5 -0
  473. package/dist/state/edit-intents.d.ts +4 -0
  474. package/dist/state/edit-intents.js +71 -0
  475. package/dist/state/index.d.ts +4 -4
  476. package/dist/state/index.js +2 -2
  477. package/dist/state/init.d.ts +2 -1
  478. package/dist/state/init.js +5 -2
  479. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  480. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  482. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  484. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  486. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  488. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  490. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  492. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  494. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  496. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  498. package/dist/state/migrations/index.js +18 -0
  499. package/dist/state/paused-work.d.ts +52 -0
  500. package/dist/state/paused-work.js +105 -0
  501. package/dist/state/plans.d.ts +27 -8
  502. package/dist/state/plans.js +14 -11
  503. package/dist/state/purge-analysis.d.ts +6 -6
  504. package/dist/state/purge-analysis.js +10 -2
  505. package/dist/state/report-session-state.d.ts +43 -18
  506. package/dist/state/report-session-state.js +43 -4
  507. package/dist/state/report-versions.d.ts +16 -11
  508. package/dist/state/report-versions.js +5 -3
  509. package/dist/state/runs.d.ts +30 -19
  510. package/dist/state/runs.js +43 -51
  511. package/dist/state/schema.d.ts +18 -21
  512. package/dist/state/schema.js +4 -5
  513. package/dist/state/snapshot-parse.d.ts +2 -2
  514. package/dist/state/snapshot-parse.js +14 -8
  515. package/dist/state/step-executions.d.ts +20 -8
  516. package/dist/state/step-executions.js +6 -4
  517. package/dist/state/tool-outputs.d.ts +2 -2
  518. package/dist/state/tool-outputs.js +2 -1
  519. package/dist/state/vector-store.d.ts +16 -16
  520. package/dist/state/vector-store.js +11 -7
  521. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  522. package/dist/tasks/data-profile-absorb.js +21 -16
  523. package/dist/tasks/data-profile-activity.d.ts +5 -5
  524. package/dist/tasks/data-profile-activity.js +5 -5
  525. package/dist/tasks/data-profile-index.d.ts +4 -4
  526. package/dist/tasks/data-profile-index.js +32 -17
  527. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  528. package/dist/tasks/data-profile-resolve.js +88 -62
  529. package/dist/tasks/data-profile.d.ts +40 -31
  530. package/dist/tasks/data-profile.js +138 -95
  531. package/dist/tasks/extract-values.d.ts +26 -79
  532. package/dist/tasks/extract-values.js +48 -108
  533. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  534. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  535. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  536. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  537. package/dist/testing.d.ts +60 -0
  538. package/dist/testing.js +96 -0
  539. package/dist/tools/ad-hoc-router.d.ts +9 -9
  540. package/dist/tools/ad-hoc-router.js +65 -52
  541. package/dist/tools/analysis-invocation.d.ts +7 -0
  542. package/dist/tools/analysis-invocation.js +29 -5
  543. package/dist/tools/approval/contract.d.ts +8 -52
  544. package/dist/tools/approval/contract.js +7 -36
  545. package/dist/tools/approval/gateway.d.ts +27 -28
  546. package/dist/tools/approval/gateway.js +33 -130
  547. package/dist/tools/approval/queries.d.ts +6 -11
  548. package/dist/tools/approval/queries.js +43 -29
  549. package/dist/tools/approval/uuidv7.js +2 -2
  550. package/dist/tools/bio/chembl.d.ts +3 -3
  551. package/dist/tools/bio/chembl.js +10 -0
  552. package/dist/tools/bio/comptox.d.ts +25 -8
  553. package/dist/tools/bio/comptox.js +4 -2
  554. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  555. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  556. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  557. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  558. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  559. package/dist/tools/bio/keys.d.ts +2 -2
  560. package/dist/tools/bio/keys.js +3 -3
  561. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  562. package/dist/tools/bio/lookup-annotation.js +3 -0
  563. package/dist/tools/bio/opentargets.d.ts +1 -1
  564. package/dist/tools/bio/opentargets.js +6 -0
  565. package/dist/tools/bio/pubchem.d.ts +2 -2
  566. package/dist/tools/bio/pubchem.js +6 -0
  567. package/dist/tools/bio/pubmed.d.ts +26 -16
  568. package/dist/tools/bio/pubmed.js +9 -3
  569. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  570. package/dist/tools/bio/search-clinical-trials.js +5 -1
  571. package/dist/tools/bio/search-faers.d.ts +2 -2
  572. package/dist/tools/bio/search-faers.js +1 -1
  573. package/dist/tools/bio/search-gene.d.ts +2 -2
  574. package/dist/tools/bio/search-gene.js +1 -0
  575. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  576. package/dist/tools/bio/search-geo-datasets.js +5 -5
  577. package/dist/tools/bio/search-interactions.d.ts +1 -1
  578. package/dist/tools/bio/search-patents.d.ts +28 -22
  579. package/dist/tools/bio/search-patents.js +20 -17
  580. package/dist/tools/bio/search-protein.d.ts +2 -2
  581. package/dist/tools/bio/search-protein.js +1 -1
  582. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  583. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  584. package/dist/tools/bio/target-safety.d.ts +8 -8
  585. package/dist/tools/bio/target-safety.js +11 -6
  586. package/dist/tools/capability-data.d.ts +9 -5
  587. package/dist/tools/capability-data.js +2 -1
  588. package/dist/tools/define-tool.d.ts +55 -46
  589. package/dist/tools/define-tool.js +39 -27
  590. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  591. package/dist/tools/display/normalize-echart-spec.js +51 -27
  592. package/dist/tools/display/show-user.d.ts +2 -2
  593. package/dist/tools/display/show-user.js +1 -1
  594. package/dist/tools/execute-analysis.d.ts +19 -10
  595. package/dist/tools/execute-analysis.js +83 -62
  596. package/dist/tools/knowledge/check.d.ts +166 -44
  597. package/dist/tools/knowledge/check.js +5 -3
  598. package/dist/tools/knowledge/client.d.ts +31 -62
  599. package/dist/tools/knowledge/client.js +44 -27
  600. package/dist/tools/knowledge/environment.d.ts +6 -6
  601. package/dist/tools/knowledge/environment.js +18 -7
  602. package/dist/tools/knowledge/index.d.ts +2 -2
  603. package/dist/tools/knowledge/index.js +9 -9
  604. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  605. package/dist/tools/knowledge/local-slots.js +11 -4
  606. package/dist/tools/knowledge/pin.d.ts +2 -2
  607. package/dist/tools/knowledge/recommend.d.ts +20 -45
  608. package/dist/tools/knowledge/recommend.js +27 -19
  609. package/dist/tools/knowledge/situation.d.ts +40 -40
  610. package/dist/tools/knowledge/situation.js +2 -9
  611. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  612. package/dist/tools/knowledge/skeleton.js +10 -11
  613. package/dist/tools/knowledge/template.d.ts +20 -18
  614. package/dist/tools/knowledge/template.js +38 -32
  615. package/dist/tools/lib/alphafold-client.js +2 -1
  616. package/dist/tools/lib/amass-client.d.ts +28 -28
  617. package/dist/tools/lib/amass-client.js +20 -10
  618. package/dist/tools/lib/api-utils.d.ts +13 -3
  619. package/dist/tools/lib/api-utils.js +17 -3
  620. package/dist/tools/lib/bgee-client.d.ts +6 -6
  621. package/dist/tools/lib/bgee-client.js +16 -10
  622. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  623. package/dist/tools/lib/cbioportal-client.js +9 -8
  624. package/dist/tools/lib/chembl-client.d.ts +14 -14
  625. package/dist/tools/lib/chembl-client.js +11 -4
  626. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  628. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  629. package/dist/tools/lib/clinical-trials-client.js +10 -10
  630. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  631. package/dist/tools/lib/clinvar-client.js +6 -6
  632. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  633. package/dist/tools/lib/ctx-ops.js +13 -10
  634. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  635. package/dist/tools/lib/dgidb-client.js +10 -12
  636. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  637. package/dist/tools/lib/ema-client.d.ts +2 -2
  638. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  639. package/dist/tools/lib/ensembl-client.js +5 -4
  640. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  641. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  642. package/dist/tools/lib/html-text.d.ts +6 -0
  643. package/dist/tools/lib/html-text.js +9 -0
  644. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  645. package/dist/tools/lib/identifier-resolver.js +7 -3
  646. package/dist/tools/lib/impc-client.d.ts +8 -8
  647. package/dist/tools/lib/impc-client.js +46 -35
  648. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  649. package/dist/tools/lib/iuphar-client.js +7 -16
  650. package/dist/tools/lib/monarch-client.d.ts +4 -4
  651. package/dist/tools/lib/openfda-client.d.ts +22 -22
  652. package/dist/tools/lib/openfda-client.js +23 -22
  653. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  654. package/dist/tools/lib/pathway-client.d.ts +4 -4
  655. package/dist/tools/lib/pathway-client.js +15 -19
  656. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  657. package/dist/tools/lib/pharmgkb-client.js +1 -1
  658. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  659. package/dist/tools/lib/protein-family-modality.js +0 -2
  660. package/dist/tools/lib/protein-family-normalize.js +7 -0
  661. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  662. package/dist/tools/lib/pubchem-client.js +1 -0
  663. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  664. package/dist/tools/lib/pubchem-ops.js +8 -0
  665. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  666. package/dist/tools/lib/pubmed-client.js +1 -1
  667. package/dist/tools/lib/string-client.d.ts +6 -6
  668. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  669. package/dist/tools/lib/uniprot-client.js +5 -1
  670. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  671. package/dist/tools/memory/update-working-memory.js +21 -3
  672. package/dist/tools/read-tool-output.js +8 -2
  673. package/dist/tools/registry.d.ts +2 -2
  674. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  675. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  676. package/dist/tools/report-session/derive-table.d.ts +19 -59
  677. package/dist/tools/report-session/derive-table.js +120 -122
  678. package/dist/tools/report-session/examine-page.d.ts +6 -6
  679. package/dist/tools/report-session/examine-page.js +14 -12
  680. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  681. package/dist/tools/report-session/list-artifacts.js +5 -5
  682. package/dist/tools/report-session/page-faults.d.ts +6 -6
  683. package/dist/tools/report-session/page-faults.js +3 -1
  684. package/dist/tools/report-session/preview-report.d.ts +4 -3
  685. package/dist/tools/report-session/preview-report.js +26 -7
  686. package/dist/tools/report-session/record-version.d.ts +9 -4
  687. package/dist/tools/report-session/record-version.js +16 -9
  688. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  689. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  690. package/dist/tools/research/generate-analogy-report.js +80 -76
  691. package/dist/tools/research/generate-plan.d.ts +16 -16
  692. package/dist/tools/research/generate-plan.js +410 -374
  693. package/dist/tools/research/guarded-address.js +3 -2
  694. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  695. package/dist/tools/research/inspect-data-profile.js +26 -25
  696. package/dist/tools/research/inspect-run.d.ts +54 -27
  697. package/dist/tools/research/inspect-run.js +50 -40
  698. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  699. package/dist/tools/research/literature-reviewer.js +29 -28
  700. package/dist/tools/research/search-arxiv.d.ts +1 -1
  701. package/dist/tools/research/search-arxiv.js +1 -1
  702. package/dist/tools/research/search-github-repos.d.ts +10 -7
  703. package/dist/tools/research/search-github-repos.js +25 -22
  704. package/dist/tools/research/search-semantic-scholar.js +1 -1
  705. package/dist/tools/research/searxng-engine.d.ts +2 -2
  706. package/dist/tools/research/searxng-engine.js +6 -4
  707. package/dist/tools/research/web-fetch.d.ts +24 -21
  708. package/dist/tools/research/web-fetch.js +65 -74
  709. package/dist/tools/research/web-search.d.ts +26 -17
  710. package/dist/tools/research/web-search.js +26 -21
  711. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  712. package/dist/tools/sandbox/link-packages.js +11 -8
  713. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  714. package/dist/tools/sandbox/list-available-packages.js +31 -25
  715. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  716. package/dist/tools/sandbox/list-available-refs.js +61 -36
  717. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  718. package/dist/tools/sandbox/report-blocker.js +23 -73
  719. package/dist/tools/sandbox/skills.d.ts +16 -12
  720. package/dist/tools/sandbox/skills.js +16 -12
  721. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  722. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  723. package/dist/tools/start-report-session.d.ts +13 -5
  724. package/dist/tools/start-report-session.js +35 -8
  725. package/dist/tools/terminal-text.d.ts +5 -2
  726. package/dist/tools/terminal-text.js +35 -3
  727. package/dist/tools/workspace/decision-record.d.ts +4 -4
  728. package/dist/tools/workspace/decision-record.js +23 -13
  729. package/dist/tools/workspace/edit-file.d.ts +59 -20
  730. package/dist/tools/workspace/edit-file.js +81 -16
  731. package/dist/tools/workspace/execute-command.d.ts +15 -13
  732. package/dist/tools/workspace/execute-command.js +11 -9
  733. package/dist/tools/workspace/file-stat.d.ts +6 -3
  734. package/dist/tools/workspace/grep.d.ts +10 -7
  735. package/dist/tools/workspace/grep.js +9 -3
  736. package/dist/tools/workspace/list-files.d.ts +6 -3
  737. package/dist/tools/workspace/mutator.d.ts +28 -15
  738. package/dist/tools/workspace/mutator.js +107 -53
  739. package/dist/tools/workspace/read-file.d.ts +8 -5
  740. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  741. package/dist/tools/workspace/result-bounds.js +4 -2
  742. package/dist/tools/workspace/run-exec.d.ts +2 -2
  743. package/dist/tools/workspace/run-exec.js +3 -3
  744. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  745. package/dist/tools/workspace/scan-inputs.js +17 -5
  746. package/dist/tools/workspace/show-file.d.ts +1 -1
  747. package/dist/tools/workspace/show-file.js +2 -1
  748. package/dist/tools/workspace/show-plan.d.ts +8 -5
  749. package/dist/tools/workspace/show-plan.js +9 -8
  750. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  751. package/dist/tools/workspace/workspace-search.js +27 -14
  752. package/dist/tools/workspace/write-file.d.ts +9 -7
  753. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  754. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  755. package/dist/workflows/execute-analysis.d.ts +46 -62
  756. package/dist/workflows/execute-analysis.js +137 -219
  757. package/dist/workflows/pause.d.ts +71 -0
  758. package/dist/workflows/pause.js +173 -0
  759. package/dist/workflows/sandbox-step.d.ts +38 -61
  760. package/dist/workflows/sandbox-step.js +99 -106
  761. package/dist/workflows/test/sql-writes.d.ts +21 -0
  762. package/dist/workflows/test/sql-writes.js +36 -0
  763. package/dist/workspace/filesystem.d.ts +6 -6
  764. package/dist/workspace/filesystem.js +10 -8
  765. package/dist/workspace/paths.d.ts +1 -1
  766. package/dist/workspace/paths.js +15 -4
  767. package/dist/workspace/search-config.d.ts +2 -2
  768. package/dist/workspace/search-config.js +1 -1
  769. package/package.json +21 -22
  770. package/dist/loop/call-guard.d.ts +0 -50
  771. package/dist/loop/call-guard.js +0 -90
  772. package/dist/loop/continue-agent.d.ts +0 -40
  773. package/dist/loop/continue-agent.js +0 -38
  774. package/dist/loop/genai-spans.d.ts +0 -47
  775. package/dist/loop/genai-spans.js +0 -134
  776. package/dist/loop/run-agent.d.ts +0 -245
  777. package/dist/loop/run-agent.js +0 -1124
  778. package/dist/loop/run-step.d.ts +0 -29
  779. package/dist/loop/run-step.js +0 -34
  780. package/dist/loop/run-to-terminal.d.ts +0 -66
  781. package/dist/loop/run-to-terminal.js +0 -93
  782. package/dist/loop/tool-mask.d.ts +0 -23
  783. package/dist/loop/tool-mask.js +0 -46
  784. package/dist/providers/streaming-chat.d.ts +0 -32
  785. package/dist/providers/streaming-chat.js +0 -91
  786. package/dist/tasks/derive-table-exec.d.ts +0 -54
  787. package/dist/tasks/derive-table-exec.js +0 -86
  788. package/dist/workflows/suspension.d.ts +0 -32
  789. package/dist/workflows/suspension.js +0 -38
@@ -53,9 +53,9 @@ function bandRows(blockId, rows, xs, lowColumn, highColumn) {
53
53
  const complete = [];
54
54
  for (let index = 0; index < rows.length; index += 1) {
55
55
  const x = xs[index];
56
- const low = toNumber(rows[index][lowColumn]);
57
- const high = toNumber(rows[index][highColumn]);
58
- if (x === null || low === null || high === null)
56
+ const low = toNumber(rows[index]?.[lowColumn]);
57
+ const high = toNumber(rows[index]?.[highColumn]);
58
+ if (x === null || x === undefined || low === null || high === null)
59
59
  continue;
60
60
  if (high < low) {
61
61
  return err(chartProblem(blockId, `The row ${index + 1} holds the band from ${low} in "${lowColumn}" to ${high} in "${highColumn}". ` +
@@ -67,19 +67,30 @@ function bandRows(blockId, rows, xs, lowColumn, highColumn) {
67
67
  if (complete.length <= QQ_BAND_POINTS)
68
68
  return ok(complete);
69
69
  const last = complete[complete.length - 1];
70
- const step = (last.x - complete[0].x) / (QQ_BAND_POINTS - 1);
70
+ const first = complete[0];
71
+ if (last === undefined || first === undefined)
72
+ return ok(complete);
73
+ const step = (last.x - first.x) / (QQ_BAND_POINTS - 1);
71
74
  // Each row sits zero steps from the next one, thus the rule of the step keeps each row.
72
75
  if (!(step > 0)) {
73
- return ok(Array.from({ length: QQ_BAND_POINTS }, (_row, place) => complete[Math.round((place * (complete.length - 1)) / (QQ_BAND_POINTS - 1))]));
76
+ return ok(Array.from({ length: QQ_BAND_POINTS }, (_row, place) => {
77
+ const sampled = complete[Math.round((place * (complete.length - 1)) / (QQ_BAND_POINTS - 1))];
78
+ return sampled ?? last;
79
+ }));
74
80
  }
75
81
  // The kept rows sit at least one step apart, and a kept row between the ends sits at least one step before
76
82
  // the last row. Thus the span holds at most `QQ_BAND_POINTS - 1` steps, and the band at most
77
83
  // `QQ_BAND_POINTS` rows.
78
- const kept = [complete[0]];
84
+ const kept = [first];
85
+ let previous = first;
79
86
  for (let place = 1; place < complete.length - 1; place += 1) {
80
87
  const row = complete[place];
81
- if (row.x - kept[kept.length - 1].x >= step && last.x - row.x >= step)
88
+ if (row === undefined)
89
+ continue;
90
+ if (row.x - previous.x >= step && last.x - row.x >= step) {
82
91
  kept.push(row);
92
+ previous = row;
93
+ }
83
94
  }
84
95
  kept.push(last);
85
96
  return ok(kept);
@@ -131,7 +142,7 @@ function deriveQq(block, rows, context) {
131
142
  for (let index = 0; index < rows.length; index += 1) {
132
143
  const expected = xs[index];
133
144
  const observed = ys[index];
134
- if (expected === null || observed === null)
145
+ if (expected === null || expected === undefined || observed === null || observed === undefined)
135
146
  continue;
136
147
  expectedValues.push(expected);
137
148
  observedValues.push(observed);
@@ -175,7 +186,7 @@ function deriveQq(block, rows, context) {
175
186
  ]
176
187
  : []),
177
188
  ],
178
- ...(statistics.length > 0 ? { graphic: statistics } : {}),
189
+ graphic: statistics,
179
190
  });
180
191
  }
181
192
  /** The QQ figure module. */
@@ -77,7 +77,7 @@ function deriveRoc(block, rows, context) {
77
77
  side: 0,
78
78
  legend: keyed,
79
79
  legendBand: { place: "bottom", entries: names },
80
- ...(squareLabel !== undefined ? { squareLabel } : {}),
80
+ squareLabel,
81
81
  });
82
82
  return ok({
83
83
  grid: layout.grid,
@@ -36,10 +36,10 @@ export declare const SANKEY_LABEL_BOX_COLOR = "#ffffff";
36
36
  /** The Sankey module: the source, the target, the flow, and the group. */
37
37
  export declare const SANKEY_FIGURE: FigureModule;
38
38
  /** One flow of the table: its two nodes. */
39
- export interface SankeyEdge {
39
+ export type SankeyEdge = {
40
40
  readonly source: string;
41
41
  readonly target: string;
42
- }
42
+ };
43
43
  /**
44
44
  * The stage of each node, in the order of first appearance: the longest chain of flows from a node with no
45
45
  * inflow. A node with no outflow takes the last stage. A cycle has no stage, thus it refuses, and the error
@@ -24,7 +24,7 @@
24
24
  */
25
25
  import { err, ok } from "neverthrow";
26
26
  import { declaredForColumn } from "../../contracts/report-reference.js";
27
- import { CHART_BODY_PX, CHART_EXPORT_SIZES, CHART_PAGE_TEXT_PX, CHART_PAGE_WIDTH_PX, MUTED_CHART_COLOR } from "../design.js";
27
+ import { CHART_BODY_PX, CHART_EXPORT_SIZES, CHART_INK, CHART_PAGE_TEXT_PX, CHART_PAGE_WIDTH_PX, MUTED_CHART_COLOR } from "../design.js";
28
28
  import { AREA_LEGEND_ICON, categoricalPalette, chartProblem, demandedColumn, firstAppearance, legendLineCount, legendLinePx, plainColumn, toNumber, } from "./common.js";
29
29
  import { largest } from "./dense.js";
30
30
  /** The opacity of a flow. A flow reads as the path of its source, and a label reads over it. */
@@ -110,15 +110,14 @@ function findCycle(nodes, outgoing) {
110
110
  continue;
111
111
  const path = [{ node: root, next: 0 }];
112
112
  state.set(root, "open");
113
- while (path.length > 0) {
114
- const top = path[path.length - 1];
113
+ for (let top = path.at(-1); top !== undefined; top = path.at(-1)) {
115
114
  const targets = outgoing.get(top.node) ?? [];
116
- if (top.next >= targets.length) {
115
+ const target = targets[top.next];
116
+ if (target === undefined) {
117
117
  state.set(top.node, "done");
118
118
  path.pop();
119
119
  continue;
120
120
  }
121
- const target = targets[top.next];
122
121
  top.next += 1;
123
122
  const seen = state.get(target);
124
123
  if (seen === "open") {
@@ -144,6 +143,8 @@ function topologicalOrder(nodes, outgoing) {
144
143
  const ready = nodes.filter((node) => inflow.get(node) === 0);
145
144
  for (let next = 0; next < ready.length; next += 1) {
146
145
  const node = ready[next];
146
+ if (node === undefined)
147
+ continue;
147
148
  order.push(node);
148
149
  for (const target of outgoing.get(node) ?? []) {
149
150
  const left = (inflow.get(target) ?? 0) - 1;
@@ -177,7 +178,7 @@ function readFlows(rows, source, target, value, group) {
177
178
  if (seen.has(key))
178
179
  return err(`The table holds two flows from "${from}" to "${to}". It holds one row for each flow.`);
179
180
  seen.add(key);
180
- flows.push({ source: from, target: to, value: amount, ...(groupName !== undefined ? { group: groupName } : {}) });
181
+ flows.push({ source: from, target: to, value: amount, group: groupName });
181
182
  }
182
183
  return ok(flows);
183
184
  }
@@ -234,7 +235,7 @@ function nodeColors(nodes, stages) {
234
235
  for (const members of byStage.values()) {
235
236
  const palette = categoricalPalette(members.length);
236
237
  for (const [place, node] of members.entries())
237
- colors.set(node, palette[place % palette.length]);
238
+ colors.set(node, palette[place % palette.length] ?? CHART_INK);
238
239
  }
239
240
  return colors;
240
241
  }
@@ -252,7 +253,7 @@ function legendBandPct(names) {
252
253
  return rounded(Math.max(bandAt(CHART_PAGE_WIDTH_PX, CHART_BODY_PX, CHART_PAGE_TEXT_PX), bandAt(single.widthPx, single.heightPx, single.textPx)));
253
254
  }
254
255
  function deriveSankey(block, rows, context) {
255
- const source = { blockId: context.blockId, rows, ...(context.columns !== undefined ? { columns: context.columns } : {}) };
256
+ const source = { blockId: context.blockId, rows, columns: context.columns };
256
257
  const encoding = block.encoding ?? {};
257
258
  const from = demandedColumn("sankey", encoding, "x", source);
258
259
  if (from.isErr())
@@ -284,7 +285,7 @@ function deriveSankey(block, rows, context) {
284
285
  const stageNodes = largest([...stageSizes.values()]) ?? 0;
285
286
  const groups = group.value === undefined ? [] : firstAppearance(flows.value.map((entry) => entry.group ?? ""));
286
287
  const groupPalette = categoricalPalette(groups.length);
287
- const groupColors = new Map(groups.map((name, place) => [name, groupPalette[place % groupPalette.length]]));
288
+ const groupColors = new Map(groups.map((name, place) => [name, groupPalette[place % groupPalette.length] ?? CHART_INK]));
288
289
  const grouped = group.value !== undefined;
289
290
  const bottom = grouped ? legendBandPct(groups) + BOTTOM_PCT : BOTTOM_PCT;
290
291
  const page = boxFields(PAGE_BOX, last + 1, stageNodes, bottom);
@@ -316,7 +317,7 @@ function deriveSankey(block, rows, context) {
316
317
  source: entry.source,
317
318
  target: entry.target,
318
319
  value: entry.value,
319
- ...(grouped ? { lineStyle: { color: groupColors.get(entry.group ?? "") } } : {}),
320
+ lineStyle: grouped ? { color: groupColors.get(entry.group ?? "") } : undefined,
320
321
  })),
321
322
  },
322
323
  ];
@@ -37,20 +37,20 @@ export declare const UPSET_INTERSECTION_LIMIT = 30;
37
37
  /** The UpSet module: the element and the set. */
38
38
  export declare const UPSET_FIGURE: FigureModule;
39
39
  /** One set: its name and the count of its elements. */
40
- export interface UpsetSet {
40
+ export type UpsetSet = {
41
41
  readonly name: string;
42
42
  readonly size: number;
43
- }
43
+ };
44
44
  /** One exact intersection: the places of its member sets in the set order, and the count of its elements. */
45
- export interface UpsetIntersection {
45
+ export type UpsetIntersection = {
46
46
  readonly members: readonly number[];
47
47
  readonly size: number;
48
- }
48
+ };
49
49
  /** The computed summary of the figure: the sets in size order, and each intersection in draw order. */
50
- export interface UpsetSummary {
50
+ export type UpsetSummary = {
51
51
  readonly sets: readonly UpsetSet[];
52
52
  readonly intersections: readonly UpsetIntersection[];
53
- }
53
+ };
54
54
  /**
55
55
  * The set sizes and the exact intersections of one membership table.
56
56
  *
@@ -118,8 +118,10 @@ export function upsetSummary(rows, element, set) {
118
118
  /** Compare two member lists of one degree by the set order: the list whose first different set comes first sorts first. */
119
119
  function compareMembers(a, b) {
120
120
  for (let place = 0; place < Math.min(a.length, b.length); place += 1) {
121
- if (a[place] !== b[place])
122
- return a[place] - b[place];
121
+ const left = a[place];
122
+ const right = b[place];
123
+ if (left !== right)
124
+ return (left ?? 0) - (right ?? 0);
123
125
  }
124
126
  return a.length - b.length;
125
127
  }
@@ -171,7 +173,7 @@ function pct(value) {
171
173
  return `${rounded(value)}%`;
172
174
  }
173
175
  function deriveUpset(block, rows, context) {
174
- const source = { blockId: context.blockId, rows, ...(context.columns !== undefined ? { columns: context.columns } : {}) };
176
+ const source = { blockId: context.blockId, rows, columns: context.columns };
175
177
  const encoding = block.encoding ?? {};
176
178
  const element = demandedColumn("upset", encoding, "x", source);
177
179
  if (element.isErr())
@@ -188,6 +190,7 @@ function deriveUpset(block, rows, context) {
188
190
  const { sets, intersections } = summary.value;
189
191
  const drawn = intersections.slice(0, UPSET_INTERSECTION_LIMIT);
190
192
  const hidden = intersections.length - drawn.length;
193
+ const shownName = hidden > 0 ? { ...axisNameFields("x", `Intersections: ${drawn.length} of ${intersections.length} shown`), nameGap: NAME_GAP_PX } : undefined;
191
194
  const setNames = sets.map((entry) => entry.name);
192
195
  const columnNames = drawn.map((entry) => entry.members.map((place) => setNames[place]).join(MEMBER_SEPARATOR));
193
196
  const layout = upsetLayout(sets.length, Math.max(...setNames.map((name) => name.length)));
@@ -283,7 +286,7 @@ function deriveUpset(block, rows, context) {
283
286
  gridIndex: 1,
284
287
  data: columnNames,
285
288
  ...hiddenAxis,
286
- ...(hidden > 0 ? { ...axisNameFields("x", `Intersections: ${drawn.length} of ${intersections.length} shown`), nameGap: NAME_GAP_PX } : {}),
289
+ ...shownName,
287
290
  },
288
291
  { ...valueAxis("x", SET_TITLE), gridIndex: 2, inverse: true, splitNumber: 2, minInterval: 1, axisLabel: { rotate: 0 } },
289
292
  ],
@@ -21,6 +21,7 @@
21
21
  import { err, ok } from "neverthrow";
22
22
  import { channelColumn } from "../../contracts/report-blocks.js";
23
23
  import { expandVolcano, VOLCANO_EFFECT_THRESHOLD, volcanoAxisTitles } from "../chart-presets.js";
24
+ import { parseUnknownRecord } from "../../lib/unknown-containers.js";
24
25
  import { CHART_PALETTE, MUTED_CHART_COLOR } from "../design.js";
25
26
  import { transformColumn } from "./common.js";
26
27
  import { axisOf, BELOW_RESOLUTION_SYMBOL, BELOW_RESOLUTION_SYMBOL_PX, BELOW_RESOLUTION_TOOLTIP, belowResolutionHeight, belowResolutionRows, countText, DENSE_NULL_OPACITY, DENSE_NULL_SYMBOL_PX, DENSE_NULL_Z, DENSE_SIGNAL_OPACITY, DENSE_SIGNAL_SYMBOL_PX, demandedChannel, largest, niceCeiling, plottedValues, pointLayer, POINT_NAMES, pointNameSeries, seriesOf, sizedSeries, symmetricRange, } from "./dense.js";
@@ -42,7 +43,7 @@ const READS = new Set(["x", "y", "label"]);
42
43
  function countedClassification(base, xs, ys) {
43
44
  const counts = new Map(base.categories.map((category) => [category.name, 0]));
44
45
  for (let index = 0; index < xs.length; index += 1) {
45
- const category = base.categoryOf(xs[index], ys[index], index);
46
+ const category = base.categoryOf(xs[index] ?? null, ys[index] ?? null, index);
46
47
  if (category !== undefined)
47
48
  counts.set(category, (counts.get(category) ?? 0) + 1);
48
49
  }
@@ -67,8 +68,8 @@ function labeledRows(rows, labelColumn, base, xs, ys, zeros) {
67
68
  const signal = new Set(base.categories.filter((category) => !category.muted).map((category) => category.name));
68
69
  const candidates = [];
69
70
  for (let index = 0; index < rows.length; index += 1) {
70
- const category = base.categoryOf(xs[index], ys[index], index);
71
- const name = rows[index][labelColumn];
71
+ const category = base.categoryOf(xs[index] ?? null, ys[index] ?? null, index);
72
+ const name = rows[index]?.[labelColumn];
72
73
  if (category !== undefined && signal.has(category) && name !== undefined && String(name).trim() !== "")
73
74
  candidates.push(index);
74
75
  }
@@ -110,14 +111,14 @@ function deriveVolcano(block, rows, context) {
110
111
  : labeledRows(rows, labelColumn, base, xs, ys, zeros).map((index) => ({
111
112
  x: xs[index] ?? 0,
112
113
  y: ys[index] ?? 0,
113
- text: String(rows[index][labelColumn]),
114
+ text: String(rows[index]?.[labelColumn]),
114
115
  }));
115
116
  const top = zeroRows.length > 0 ? Math.max(peak, zeroY) : peak;
116
117
  // The runtime ends the p axis at its own round number at or past the peak. The round number of the figure
117
118
  // is at or past it too, thus the names measure against a span at least as long as the drawn one.
118
119
  const plot = { x: { min: -end, max: end }, y: { min: 0, max: niceCeiling(top) } };
119
120
  const text = sizedSeries([POINT_NAMES], (frame) => pointNameSeries(names, placeLeaderNames(names, { xs, ys, pointPx: DENSE_SIGNAL_SYMBOL_PX }, plot, VOLCANO_NAME_SIDES, top, frame)));
120
- const legend = typeof option.legend === "object" && option.legend !== null ? option.legend : {};
121
+ const legend = parseUnknownRecord(option.legend) ?? {};
121
122
  return ok({
122
123
  ...option,
123
124
  ...text.member,
@@ -127,16 +128,17 @@ function deriveVolcano(block, rows, context) {
127
128
  yAxis: { ...axisOf(option, "yAxis"), min: 0 },
128
129
  series: [
129
130
  ...seriesOf(option).map((series, place) => ({ ...series, ...sideLayer(place, DENSE_SIGNAL_SYMBOL_PX, DENSE_NULL_SYMBOL_PX) })),
130
- ...zeroSeries(counted, zeroRows, xs, zeroY, labelColumn === undefined ? undefined : (index) => String(rows[index][labelColumn])),
131
+ ...zeroSeries(counted, zeroRows, xs, zeroY, labelColumn === undefined ? undefined : (index) => String(rows[index]?.[labelColumn])),
131
132
  ...text.page,
132
133
  ],
133
134
  });
134
135
  }
135
136
  /** The style of the points of one side, by the place of the side: the two signal sides, then the null side. */
136
137
  function sideLayer(place, signalPx, nullPx) {
137
- return place < SIDE_COLORS.length
138
- ? pointLayer(SIDE_COLORS[place], signalPx, DENSE_SIGNAL_OPACITY)
139
- : pointLayer(MUTED_CHART_COLOR, nullPx, DENSE_NULL_OPACITY, DENSE_NULL_Z);
138
+ const signal = SIDE_COLORS[place];
139
+ if (signal !== undefined)
140
+ return pointLayer(signal, signalPx, DENSE_SIGNAL_OPACITY);
141
+ return pointLayer(MUTED_CHART_COLOR, nullPx, DENSE_NULL_OPACITY, DENSE_NULL_Z);
140
142
  }
141
143
  /**
142
144
  * The series of the stored zeros: one series for each side that holds one, under the name and in the style of
@@ -146,7 +148,7 @@ function sideLayer(place, signalPx, nullPx) {
146
148
  function zeroSeries(classification, zeroRows, xs, zeroY, nameOf) {
147
149
  return classification.categories.flatMap((category, place) => {
148
150
  const data = zeroRows
149
- .filter((index) => classification.categoryOf(xs[index], zeroY, index) === category.name)
151
+ .filter((index) => classification.categoryOf(xs[index] ?? null, zeroY, index) === category.name)
150
152
  .map((index) => (nameOf === undefined ? [xs[index] ?? 0, zeroY] : { name: nameOf(index), value: [xs[index] ?? 0, zeroY] }));
151
153
  if (data.length === 0)
152
154
  return [];
@@ -12,20 +12,20 @@
12
12
  * option transforms and the two draws exist on the page alone, because the server never builds the file.
13
13
  */
14
14
  /** The box of one export in CSS pixels, and in millimeters for a column export. */
15
- export interface SvgRootSize {
15
+ export type SvgRootSize = {
16
16
  readonly widthPx: number;
17
17
  readonly heightPx: number;
18
18
  readonly widthMm?: number;
19
19
  readonly heightMm?: number;
20
- }
20
+ };
21
21
  /** The raster image of the point layer and its rectangle in the pixel space of the SVG. */
22
- export interface PointLayerImage {
22
+ export type PointLayerImage = {
23
23
  readonly href: string;
24
24
  readonly x: number;
25
25
  readonly y: number;
26
26
  readonly width: number;
27
27
  readonly height: number;
28
- }
28
+ };
29
29
  /**
30
30
  * True when one series draws a point for each row: a `scatter` whose symbol draws and which shows no series
31
31
  * label. A scatter of size zero, or one with a shown label, carries names, and names stay vector text.
@@ -11,18 +11,18 @@
11
11
  * function and the page function. A shared test vector runs both, thus the two cannot drift in silence. The
12
12
  * option transforms and the two draws exist on the page alone, because the server never builds the file.
13
13
  */
14
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
14
15
  /**
15
16
  * True when one series draws a point for each row: a `scatter` whose symbol draws and which shows no series
16
17
  * label. A scatter of size zero, or one with a shown label, carries names, and names stay vector text.
17
18
  */
18
19
  export function isPointLayer(series) {
19
- if (typeof series !== "object" || series === null)
20
+ const fields = parseUnknownRecord(series);
21
+ if (fields === undefined)
20
22
  return false;
21
- const fields = series;
22
23
  if (fields.type !== "scatter" || fields.symbolSize === 0 || fields.symbol === "none")
23
24
  return false;
24
- const label = fields.label;
25
- return !(typeof label === "object" && label !== null && label.show === true);
25
+ return parseUnknownRecord(fields.label)?.show !== true;
26
26
  }
27
27
  /** True when an option holds a point layer. The page can then build the hybrid SVG of the option. */
28
28
  export function holdsPointLayer(option) {
@@ -46,10 +46,12 @@ function layerNumber(value) {
46
46
  }
47
47
  /** One attribute value with each character that can close it written as an entity. */
48
48
  function attributeText(value) {
49
- return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
49
+ return value.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;");
50
50
  }
51
51
  /** The root tag of an SVG file, and the transparent background rectangle that the chart runtime writes first. */
52
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the SVG root tag of the chart output, read host-side and interpolated into the page script that locates the same tag.
52
53
  const ROOT_TAG = /^<svg\b[^>]*>/;
54
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the transparent background rectangle that the chart runtime writes first; the fixed attribute shape is the contract between the two sides.
53
55
  const BACKGROUND_RECT = /^\s*<rect width="[^"]*" height="[^"]*" x="0" y="0"[^>]*><\/rect>/;
54
56
  /**
55
57
  * The hybrid SVG file: the vector file with one `<image>` element of the point layer, and the root at the
@@ -31,10 +31,10 @@ import type { ColumnMeaning } from "../contracts/report-reference.js";
31
31
  /** The five number kinds that the renderer shows. */
32
32
  export type NumberKind = "scientific" | "compact" | "compact-scientific" | "identifier" | "below-resolution";
33
33
  /** One formatted cell. `full` holds the full digits, and it is present only when `text` hides one. */
34
- export interface FormattedNumber {
34
+ export type FormattedNumber = {
35
35
  readonly text: string;
36
36
  readonly full?: string;
37
- }
37
+ };
38
38
  /**
39
39
  * Format one cell in one kind.
40
40
  *
@@ -45,7 +45,7 @@ export interface FormattedNumber {
45
45
  * below-resolution kind alone, and the caller reads the column one time to get it. Thus this function stays
46
46
  * a pure function of its arguments, and it never reads a column.
47
47
  */
48
- export declare function formatNumberCell(cell: string | number, kind: NumberKind, bound?: number): FormattedNumber;
48
+ export declare function formatNumberCell(cell: string | number | undefined, kind: NumberKind, bound?: number): FormattedNumber;
49
49
  /**
50
50
  * Select the number kind for one cell of one column.
51
51
  *
@@ -59,7 +59,7 @@ export declare function formatNumberCell(cell: string | number, kind: NumberKind
59
59
  * that holds no finite number selects the compact-scientific kind too, because the format passes such a
60
60
  * cell through unchanged.
61
61
  */
62
- export declare function selectNumberKind(column: string, cell: string | number, meaning?: ColumnMeaning): NumberKind;
62
+ export declare function selectNumberKind(column: string, cell: string | number | undefined, meaning?: ColumnMeaning): NumberKind;
63
63
  /**
64
64
  * The number kind of one whole column.
65
65
  *
@@ -27,6 +27,7 @@
27
27
  * exponent in a notation that no shown form gives. Such a sentence drifts from the page, and the advisory
28
28
  * scan of a draft reports it.
29
29
  */
30
+ import { hasWhitespace, isAllDigits } from "../lib/text.js";
30
31
  /** The significant digits of the scientific coefficient, for example the two digits of `4.3e-5`. */
31
32
  const SCIENTIFIC_DIGITS = 2;
32
33
  /** The significant digits of the compact-scientific form, for example the three digits of `-3.09`. */
@@ -55,16 +56,26 @@ const GROUP_SIZE = 3;
55
56
  const P_VALUE_TOKENS = new Set(["p", "pval", "pvalue", "padj", "fdr", "q", "qval"]);
56
57
  /** The whole tokens of a column name that name an identifier. Such a value is a name, not a magnitude. */
57
58
  const IDENTIFIER_TOKENS = new Set(["id", "pmid", "doi", "entrez", "taxid", "year", "accession"]);
58
- /** The boundary between a lowercase or numeric character and an uppercase character. */
59
- const CASE_BOUNDARY = /([a-z0-9])([A-Z])/g;
60
- /** The separators of a column name: whitespace, an underscore, a point, and a hyphen. */
61
- const SEPARATORS = /[\s_.-]+/;
62
- /** A text that holds decimal digits alone. */
63
- const DIGIT_RUN = /^[0-9]+$/;
64
- /** Each group comma of a compact form. */
65
- const GROUP_COMMAS = /,/g;
66
- /** The exponent of one written or shown form, for example the `-05` of `4.3e-05`. */
67
- const EXPONENT_PART = /[eE]([+-]?\d+)$/;
59
+ /**
60
+ * The exponent of one written or shown form, for example the `-05` of `4.3e-05`.
61
+ * `null` when the text ends in no `e` or `E` marker and its digits.
62
+ */
63
+ function trailingExponentOf(text) {
64
+ let end = text.length;
65
+ while (end > 0 && text.charAt(end - 1) >= "0" && text.charAt(end - 1) <= "9")
66
+ end--;
67
+ if (end === text.length)
68
+ return null;
69
+ let start = end;
70
+ if (start > 0 && (text.charAt(start - 1) === "+" || text.charAt(start - 1) === "-"))
71
+ start--;
72
+ if (start === 0)
73
+ return null;
74
+ const marker = text.charAt(start - 1);
75
+ if (marker !== "e" && marker !== "E")
76
+ return null;
77
+ return text.slice(start);
78
+ }
68
79
  /**
69
80
  * The form of a stored zero that no positive neighbor bounds. It claims nearness, and it claims no bound,
70
81
  * because the column gives nothing better.
@@ -79,8 +90,6 @@ const TYPOGRAPHIC_MINUS = "−";
79
90
  const NAME_DELIMITER = "%";
80
91
  /** The count of segments that an encoded set name holds: the name, the collection, and the accession. */
81
92
  const NAME_SEGMENTS = 3;
82
- /** One whitespace character. A segment of an encoded name holds none. */
83
- const WHITESPACE = /\s/;
84
93
  /**
85
94
  * Format one cell in one kind.
86
95
  *
@@ -233,7 +242,7 @@ function firstNameSegment(text) {
233
242
  if (segments.length < NAME_SEGMENTS) {
234
243
  return undefined;
235
244
  }
236
- const encoded = segments.every((segment) => segment.length > 0 && !WHITESPACE.test(segment));
245
+ const encoded = segments.every((segment) => segment.length > 0 && !hasWhitespace(segment));
237
246
  return encoded ? segments[0] : undefined;
238
247
  }
239
248
  /**
@@ -310,7 +319,7 @@ export function smallestPositiveValue(cells) {
310
319
  * A text that carries no exponent, and a text that holds no finite number, both give false.
311
320
  */
312
321
  export function holdsADriftedExponent(text) {
313
- const written = EXPONENT_PART.exec(text.trim());
322
+ const written = trailingExponentOf(text.trim());
314
323
  if (written === null) {
315
324
  return false;
316
325
  }
@@ -318,13 +327,14 @@ export function holdsADriftedExponent(text) {
318
327
  if (value === null) {
319
328
  return false;
320
329
  }
321
- const shown = EXPONENT_PART.exec(formatNumberCell(value, "scientific").text);
322
- return shown !== null && shown[1] !== written[1];
330
+ const shown = trailingExponentOf(formatNumberCell(value, "scientific").text);
331
+ return shown !== null && shown !== written;
323
332
  }
324
333
  /**
325
334
  * One scientific form inside a text: a coefficient with its sign, and an exponent. The coefficient stands
326
335
  * alone, thus a name such as `rs1e5` holds no scientific form.
327
336
  */
337
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the coefficient and exponent captures with the boundary lookarounds keep a name such as `rs1e5` outside the match.
328
338
  const SCIENTIFIC_IN_TEXT = /(?<![\w.])([−-]?\d+(?:\.\d+)?)e([+-]?\d+)(?![\w.])/g;
329
339
  /** The superscript form of each decimal digit, in digit order. */
330
340
  const SUPERSCRIPT_DIGITS = ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹"];
@@ -341,7 +351,9 @@ const SUPERSCRIPT_MINUS = "⁻";
341
351
  export function typographicExponent(text) {
342
352
  return text.replace(SCIENTIFIC_IN_TEXT, (_form, coefficient, exponent) => {
343
353
  const power = Number(exponent);
344
- const digits = [...String(Math.abs(power))].map((digit) => SUPERSCRIPT_DIGITS[Number(digit)]).join("");
354
+ const digits = Array.from(String(Math.abs(power)))
355
+ .map((digit) => SUPERSCRIPT_DIGITS[Number(digit)])
356
+ .join("");
345
357
  return `${shownMinus(coefficient)} × 10${power < 0 ? SUPERSCRIPT_MINUS : ""}${digits}`;
346
358
  });
347
359
  }
@@ -359,7 +371,7 @@ export function typographicExponent(text) {
359
371
  * notation. Thus `<0.02` stands beside `0.04`, and no bound gives an exponent of zero.
360
372
  */
361
373
  function boundForm(bound) {
362
- const [mantissa, exponent] = bound.toExponential().split("e");
374
+ const [mantissa = "", exponent = ""] = bound.toExponential().split("e");
363
375
  const digits = mantissa.replace(".", "");
364
376
  const raised = Number(digits[0]) + (digits.length > 1 ? 1 : 0);
365
377
  const carries = raised === 10;
@@ -371,11 +383,14 @@ function boundForm(bound) {
371
383
  // The decimal text builds from the digit and the exponent, thus no float arithmetic can shift it.
372
384
  return power >= 0 ? `${digit}${"0".repeat(power)}` : `0.${"0".repeat(-power - 1)}${digit}`;
373
385
  }
374
- /** The finite number of one cell, or `null` when the cell holds no finite number. */
386
+ /** The finite number of one cell, or `null` when the cell is absent or holds no finite number. */
375
387
  function finiteValue(cell) {
376
388
  if (typeof cell === "number") {
377
389
  return Number.isFinite(cell) ? cell : null;
378
390
  }
391
+ if (cell === undefined) {
392
+ return null;
393
+ }
379
394
  const trimmed = cell.trim();
380
395
  if (trimmed === "") {
381
396
  return null;
@@ -435,7 +450,7 @@ function compactForm(value) {
435
450
  * thus a magnitude that `toFixed` gives in the exponential form stays whole.
436
451
  */
437
452
  function groupDigits(digits) {
438
- if (!DIGIT_RUN.test(digits)) {
453
+ if (!isAllDigits(digits)) {
439
454
  return digits;
440
455
  }
441
456
  let grouped = "";
@@ -443,7 +458,7 @@ function groupDigits(digits) {
443
458
  if (index > 0 && (digits.length - index) % GROUP_SIZE === 0) {
444
459
  grouped += ",";
445
460
  }
446
- grouped += digits[index];
461
+ grouped += digits.charAt(index);
447
462
  }
448
463
  return grouped;
449
464
  }
@@ -476,7 +491,7 @@ function trimTrailingZeros(text) {
476
491
  }
477
492
  /** One shown form without its group commas, thus the grouping alone never counts as a hidden digit. */
478
493
  function ungrouped(text) {
479
- return text.replace(GROUP_COMMAS, "");
494
+ return text.replaceAll(",", "");
480
495
  }
481
496
  /** True when the shown text no longer parses back to the value. */
482
497
  function hidesDigits(text, value) {
@@ -495,9 +510,29 @@ function isIdentifierColumn(column) {
495
510
  * gives `padj` and `bh`, and `p_value` gives `p` and `value`.
496
511
  */
497
512
  function columnTokens(column) {
498
- return column
499
- .replace(CASE_BOUNDARY, "$1 $2")
500
- .split(SEPARATORS)
501
- .filter((token) => token.length > 0)
502
- .map((token) => token.toLowerCase());
513
+ const tokens = [];
514
+ let token = "";
515
+ for (const char of column) {
516
+ const atCaseBoundary = token.length > 0 && isLowerOrDigit(token.charAt(token.length - 1)) && isAsciiUpper(char);
517
+ if (isNameSeparator(char) || atCaseBoundary) {
518
+ if (token.length > 0)
519
+ tokens.push(token);
520
+ token = "";
521
+ if (isNameSeparator(char))
522
+ continue;
523
+ }
524
+ token += char;
525
+ }
526
+ if (token.length > 0)
527
+ tokens.push(token);
528
+ return tokens.map((token) => token.toLowerCase());
529
+ }
530
+ function isLowerOrDigit(char) {
531
+ return (char >= "a" && char <= "z") || (char >= "0" && char <= "9");
532
+ }
533
+ function isAsciiUpper(char) {
534
+ return char >= "A" && char <= "Z";
535
+ }
536
+ function isNameSeparator(char) {
537
+ return char === "_" || char === "." || char === "-" || hasWhitespace(char);
503
538
  }
@@ -308,7 +308,8 @@ const PAGE_EXPORT_SIZES = Object.fromEntries(Object.entries(CHART_EXPORT_SIZES).
308
308
  textPx: size.textPx,
309
309
  width: size.widthPx,
310
310
  height: size.heightPx,
311
- ...("widthMm" in size ? { widthMm: size.widthMm, heightMm: size.heightMm } : {}),
311
+ widthMm: size.theme === "inflexa-print" ? size.widthMm : undefined,
312
+ heightMm: size.theme === "inflexa-print" ? size.heightMm : undefined,
312
313
  pixelRatio: size.pixelRatio,
313
314
  },
314
315
  ]));
@@ -29,10 +29,10 @@ export declare const REPORT_PROVENANCE_GLOBAL = "__REPORT_PROV";
29
29
  * Both are opaque strings. The renderer moves them into the page and never into a parse, thus a document of
30
30
  * any format rides unchanged and the page-side reader owns the format.
31
31
  */
32
- export interface ProvenanceExport {
32
+ export type ProvenanceExport = {
33
33
  readonly document: string;
34
34
  readonly attestation?: string;
35
- }
35
+ };
36
36
  /**
37
37
  * The data assets of one provenance export, in load order.
38
38
  *
@@ -22,10 +22,10 @@ import { type CitationReference, type Reference } from "../contracts/report-refe
22
22
  /** The citation key of one citation reference, in the prefixed `idKind:id` form. */
23
23
  export declare function citationKeyOf(reference: CitationReference): string;
24
24
  /** One source of a derivation: the pinned path that the script read, and the content hash of those bytes. */
25
- export interface DerivationChainSource {
25
+ export type DerivationChainSource = {
26
26
  readonly path: string;
27
27
  readonly hash: string;
28
- }
28
+ };
29
29
  /**
30
30
  * The chain of one derived path: the sources that the script read, and the hash of the script itself.
31
31
  *
@@ -38,13 +38,13 @@ export interface DerivationChainSource {
38
38
  * stages the script and it knows where the derived file sits, thus the caller states both and the renderer
39
39
  * reads no disk. A chain that carries neither renders its hashes alone.
40
40
  */
41
- export interface DerivationChain {
41
+ export type DerivationChain = {
42
42
  readonly outputPath: string;
43
43
  readonly sources: readonly DerivationChainSource[];
44
44
  readonly scriptHash: string;
45
45
  readonly scriptSource?: string;
46
46
  readonly outputSource?: string;
47
- }
47
+ };
48
48
  /** The chain of each derived path of one render, keyed by the output path that the bindings name. */
49
49
  export type DerivationChains = ReadonlyMap<string, DerivationChain>;
50
50
  /**