@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
@@ -5,7 +5,59 @@
5
5
  * belief points at. The harness declares the seam here, thus a production realization can read storage,
6
6
  * and a fixture realization can read an in-memory snapshot. The two obey the same contract.
7
7
  */
8
+ import { err, ok } from "neverthrow";
9
+ import { z } from "zod";
8
10
  import { asFiniteNumber } from "./assert-rules.js";
11
+ /** One cell that a row of a snapshot may hold: a string or a number, or one of the empty-cell shapes. */
12
+ const CellSchema = z.union([z.string(), z.number()]).nullish();
13
+ /**
14
+ * Put one own data property on a row.
15
+ *
16
+ * A plain assignment at the key `__proto__` reaches the prototype setter, thus the row loses a column
17
+ * that the payload carries. The definition makes an own data property for each key.
18
+ */
19
+ function defineOwn(target, key, value) {
20
+ Object.defineProperty(target, key, { value, enumerable: true, writable: true, configurable: true });
21
+ }
22
+ /**
23
+ * Give back the present cells of a snapshot entry's rows, or an empty array for an entry with no rows.
24
+ *
25
+ * The structural tier and the fixture resolver both read this one parse. Thus the two tiers can never
26
+ * disagree about the rows of one entry.
27
+ *
28
+ * A real parser gives an empty cell back as an absent key, `undefined`, or `null`; the parse admits each
29
+ * and yields the present cells, so the reads below see one absence shape only. The `Err` channel carries
30
+ * the account of a row that the artifact forbids: an entry of the rows list that is not a record, or a
31
+ * cell that is neither a string nor a number. The caller refuses the reference through its own channel,
32
+ * so a malformed row never throws out of resolution.
33
+ */
34
+ export function snapshotRows(entry) {
35
+ const rows = entry?.rows;
36
+ if (rows === undefined)
37
+ return ok([]);
38
+ if (!Array.isArray(rows))
39
+ return err("the rows of the artifact are not a list");
40
+ const list = rows;
41
+ const parsed = [];
42
+ for (const [index, row] of list.entries()) {
43
+ if (row === null || typeof row !== "object" || Array.isArray(row)) {
44
+ return err(`row ${index} of the artifact is not a record`);
45
+ }
46
+ const cells = {};
47
+ for (const column of Object.keys(row)) {
48
+ const cell = Reflect.get(row, column);
49
+ const read = CellSchema.safeParse(cell);
50
+ if (!read.success) {
51
+ return err(`the cell ${column} of row ${index} is neither a string, a number, nor empty`);
52
+ }
53
+ if (read.data !== undefined && read.data !== null) {
54
+ defineOwn(cells, column, read.data);
55
+ }
56
+ }
57
+ parsed.push(cells);
58
+ }
59
+ return ok(parsed);
60
+ }
9
61
  /**
10
62
  * Give back each name in `columns` that no row holds, in the order of `columns`.
11
63
  *
@@ -47,15 +99,19 @@ function rankText(left, right) {
47
99
  return 0;
48
100
  }
49
101
  /**
50
- * A row that holds no rank in the column, which the bound keeps last in either direction.
102
+ * The row as a rankable row, or `undefined` for a row that holds no rank in the column. The bound keeps
103
+ * such a row last in either direction.
51
104
  *
52
105
  * A row that the column does not reach carries no value to rank. In a numeric column a cell that reads as
53
106
  * no number carries none either: a sentinel such as `NA` is the absence of a measurement, and a rank for it
54
107
  * against a real value would be invented. Thus a descending bound of the top 20 rows gives 20 measurements,
55
108
  * and never 20 sentinels.
56
109
  */
57
- function holdsNoRank(entry, numeric) {
58
- return entry.cell === undefined || (numeric && entry.value === undefined);
110
+ function asRankable(entry, numeric) {
111
+ const { cell } = entry;
112
+ if (cell === undefined || (numeric && entry.value === undefined))
113
+ return undefined;
114
+ return { ...entry, cell };
59
115
  }
60
116
  /**
61
117
  * The rank of two rows that both hold one. A numeric column compares the parsed numbers, and a column
@@ -92,8 +148,15 @@ export function applyRowBound(rows, bound) {
92
148
  const numeric = ranked.some((entry) => entry.value !== undefined);
93
149
  // A row with no rank stays behind every ranked row, and the direction never lifts it. The two lists
94
150
  // keep their source order, thus the tail is as stable as the head.
95
- const rankable = ranked.filter((entry) => !holdsNoRank(entry, numeric));
96
- const unrankable = ranked.filter((entry) => holdsNoRank(entry, numeric));
151
+ const rankable = [];
152
+ const unrankable = [];
153
+ for (const entry of ranked) {
154
+ const kept = asRankable(entry, numeric);
155
+ if (kept === undefined)
156
+ unrankable.push(entry);
157
+ else
158
+ rankable.push(kept);
159
+ }
97
160
  const sorted = [...rankable].sort((left, right) => {
98
161
  const rank = rankRankable(left, right, numeric);
99
162
  return rank === 0 ? left.index - right.index : descending ? -rank : rank;
@@ -22,17 +22,23 @@
22
22
  import { err, ok } from "neverthrow";
23
23
  import { snapshotEntry } from "./reference-resolver.js";
24
24
  /**
25
- * The three reference kinds that name one artifact directly, thus the three kinds that take a hash.
25
+ * Give the authored record of an object that takes a stamp, or `undefined` when the object takes none.
26
26
  *
27
- * The `satisfies` clause ties each literal to a member of the reference union. A renamed kind becomes a
28
- * compile error here. A new kind passes with no error, because the stamp fills a known kind and it never
29
- * refuses one.
27
+ * The test reads the shape alone, because the payload reaches the stamp before the grammar parse. A hash
28
+ * that the object carries decides nothing here, because the stamp writes the hash of the snapshot over it.
29
+ * The copy the function returns is the refusal's view of the author's object: the walk still stamps and
30
+ * returns the original, and the copy holds the same own enumerable fields, so the serialized refusal is
31
+ * unchanged.
30
32
  */
31
- const PINNED_KINDS = new Set(["artifact-value", "artifact-table", "artifact-file"]);
32
- /** Give `true` when an object carries an artifact pin. Such an object takes a stamp, and a read removes its hash. */
33
- function holdsPin(record) {
34
- const { kind } = record;
35
- return typeof kind === "string" && PINNED_KINDS.has(kind);
33
+ function stampablePin(record) {
34
+ if (!("kind" in record) || !("path" in record))
35
+ return undefined;
36
+ const kind = record.kind;
37
+ const path = record.path;
38
+ const pinned = kind === "artifact-value" ? "artifact-value" : kind === "artifact-table" ? "artifact-table" : kind === "artifact-file" ? "artifact-file" : undefined;
39
+ if (pinned === undefined || typeof path !== "string")
40
+ return undefined;
41
+ return { path, record: { ...record, kind: pinned, path } };
36
42
  }
37
43
  /**
38
44
  * Put one own data property on a copy.
@@ -43,19 +49,6 @@ function holdsPin(record) {
43
49
  function defineOwn(target, key, value) {
44
50
  Object.defineProperty(target, key, { value, enumerable: true, writable: true, configurable: true });
45
51
  }
46
- /**
47
- * Give the artifact path of an object that takes a stamp, or `undefined` when the object takes none.
48
- *
49
- * The test reads the shape alone, because the payload reaches the stamp before the grammar parse. A hash
50
- * that the object carries decides nothing here, because the stamp writes the hash of the snapshot over it.
51
- */
52
- function stampablePath(record) {
53
- const { path } = record;
54
- if (!holdsPin(record) || typeof path !== "string") {
55
- return undefined;
56
- }
57
- return path;
58
- }
59
52
  /**
60
53
  * Walk one value, and give the value with the hash of each artifact reference filled from the snapshot.
61
54
  *
@@ -78,23 +71,23 @@ function stampValue(value, snapshot, missing) {
78
71
  if (value === null || typeof value !== "object") {
79
72
  return value;
80
73
  }
81
- const record = value;
82
74
  let changed = false;
83
75
  const next = {};
84
- for (const key of Object.keys(record)) {
85
- const stamped = stampValue(record[key], snapshot, missing);
86
- if (stamped !== record[key]) {
76
+ for (const key of Object.keys(value)) {
77
+ const held = Reflect.get(value, key);
78
+ const stamped = stampValue(held, snapshot, missing);
79
+ if (stamped !== held) {
87
80
  changed = true;
88
81
  }
89
82
  defineOwn(next, key, stamped);
90
83
  }
91
- const path = stampablePath(record);
92
- if (path === undefined) {
84
+ const pin = stampablePin(value);
85
+ if (pin === undefined) {
93
86
  return changed ? next : value;
94
87
  }
95
- const entry = snapshotEntry(snapshot, path);
88
+ const entry = snapshotEntry(snapshot, pin.path);
96
89
  if (entry === undefined) {
97
- missing.push({ path, record });
90
+ missing.push({ path: pin.path, record: pin.record });
98
91
  return changed ? next : value;
99
92
  }
100
93
  return { ...next, hash: entry.hash };
@@ -116,9 +109,8 @@ export function stampReferenceHashes(payload, snapshot) {
116
109
  return ok(stamped);
117
110
  }
118
111
  const unresolved = missing.map((pin) => ({
119
- // The payload reaches the stamp before the parse, thus the object holds the fields of a reference
120
- // as the author wrote them. The refusal names that object, and this assertion is the one place
121
- // where the pre-parse shape enters the parsed reference type.
112
+ // The payload reaches the stamp before the parse, thus the refusal carries the object as the
113
+ // author wrote it, and the `AuthoredPinRecord` arm of `UnresolvedReferenceSchema` types it.
122
114
  reference: pin.record,
123
115
  reason: "artifact-missing",
124
116
  detail: `no artifact at ${pin.path}`,
@@ -154,17 +146,17 @@ export function stripReferenceHashes(value) {
154
146
  if (value === null || typeof value !== "object") {
155
147
  return value;
156
148
  }
157
- const record = value;
158
- const pinned = holdsPin(record);
149
+ const pinned = stampablePin(value) !== undefined;
159
150
  let changed = false;
160
151
  const next = {};
161
- for (const key of Object.keys(record)) {
152
+ for (const key of Object.keys(value)) {
162
153
  if (pinned && key === "hash") {
163
154
  changed = true;
164
155
  continue;
165
156
  }
166
- const stripped = stripReferenceHashes(record[key]);
167
- if (stripped !== record[key]) {
157
+ const held = Reflect.get(value, key);
158
+ const stripped = stripReferenceHashes(held);
159
+ if (stripped !== held) {
168
160
  changed = true;
169
161
  }
170
162
  defineOwn(next, key, stripped);
@@ -8,7 +8,7 @@
8
8
  * value. As a result the costly read happens one time for each report version, and never for each edit.
9
9
  */
10
10
  import { err, ok } from "neverthrow";
11
- import { columnsHeldByNoRow, fileTypeHoldsNoCell, snapshotEntry } from "./reference-resolver.js";
11
+ import { columnsHeldByNoRow, fileTypeHoldsNoCell, snapshotEntry, snapshotRows } from "./reference-resolver.js";
12
12
  /** Build an `Err` that carries the unresolved reference. The `detail` key is present only when there is a detail to carry. */
13
13
  function fail(reference, reason, detail) {
14
14
  const failure = detail !== undefined ? { reference, reason, detail } : { reference, reason };
@@ -29,7 +29,7 @@ function validatePin(reference, snapshot) {
29
29
  const readsACell = reference.kind === "artifact-value" || reference.kind === "artifact-table";
30
30
  const fileType = entry.fileType;
31
31
  if (readsACell && fileTypeHoldsNoCell(fileType)) {
32
- return fail(reference, "unreadable-artifact", `the ${fileType} at ${reference.path} holds no cell to read`);
32
+ return fail(reference, "unreadable-artifact", `the ${String(fileType)} at ${reference.path} holds no cell to read`);
33
33
  }
34
34
  return ok();
35
35
  }
@@ -51,7 +51,11 @@ function validateColumns(reference, snapshot, columns) {
51
51
  return fail(reference, "locator-out-of-range", `the chart names column ${outside.join(", ")}, which the bound column subset leaves out`);
52
52
  }
53
53
  }
54
- const absent = columnsHeldByNoRow(snapshotEntry(snapshot, reference.path)?.rows ?? [], columns);
54
+ const readRows = snapshotRows(snapshotEntry(snapshot, reference.path));
55
+ if (readRows.isErr()) {
56
+ return fail(reference, "unreadable-artifact", `the artifact at ${reference.path} holds a malformed row: ${readRows.error}`);
57
+ }
58
+ const absent = columnsHeldByNoRow(readRows.value, columns);
55
59
  if (absent.length > 0) {
56
60
  return fail(reference, "locator-out-of-range", `the chart names column ${absent.join(", ")}, which the bound table does not hold`);
57
61
  }
@@ -80,7 +84,11 @@ export function validateReferenceStructure(reference, snapshot, columns) {
80
84
  // artifact does not hold refuses here, exactly as a grammar column of a chart does.
81
85
  const bound = reference.rowBound;
82
86
  if (bound !== undefined) {
83
- const absent = columnsHeldByNoRow(snapshotEntry(snapshot, reference.path)?.rows ?? [], [bound.column]);
87
+ const readRows = snapshotRows(snapshotEntry(snapshot, reference.path));
88
+ if (readRows.isErr()) {
89
+ return fail(reference, "unreadable-artifact", `the artifact at ${reference.path} holds a malformed row: ${readRows.error}`);
90
+ }
91
+ const absent = columnsHeldByNoRow(readRows.value, [bound.column]);
84
92
  if (absent.length > 0) {
85
93
  return fail(reference, "locator-out-of-range", `the row bound names column ${bound.column}, which the bound table does not hold`);
86
94
  }
@@ -10,7 +10,7 @@
10
10
  import type { UnresolvedReference } from "../contracts/report-reference.js";
11
11
  import { type AnyBlock, type ChartSlot, type CollectedReference, type ReportWarning } from "./block-walk.js";
12
12
  import { type ReferenceResolver, type ReportSnapshot, type ResolvedValue } from "./reference-resolver.js";
13
- export type { ReportWarning };
13
+ export type { ReportWarning } from "./block-walk.js";
14
14
  /**
15
15
  * The cap on how many references resolve at the same time.
16
16
  *
@@ -19,19 +19,19 @@ export type { ReportWarning };
19
19
  */
20
20
  export declare const RESOLUTION_CONCURRENCY = 8;
21
21
  /** One schema conformance problem, reduced to a path and a message. */
22
- export interface SchemaIssue {
22
+ export type SchemaIssue = {
23
23
  path: string;
24
24
  message: string;
25
- }
25
+ };
26
26
  /**
27
27
  * One reference that did not resolve, tied to the block that carries it. `slot` names the place of the
28
28
  * reference inside a chart block, thus a reviewer tells a failed track or statistic from a failed binding.
29
29
  */
30
- export interface ResolutionFailure {
30
+ export type ResolutionFailure = {
31
31
  blockId: string;
32
32
  slot?: ChartSlot;
33
33
  failure: UnresolvedReference;
34
- }
34
+ };
35
35
  /**
36
36
  * The result of validation. `valid` is false when the schema failed, a block id repeats, or a reference
37
37
  * did not resolve. `duplicateIds` names each repeated id one time, in sorted order. The warnings ride
@@ -56,7 +56,7 @@ export type ReportValidation = {
56
56
  */
57
57
  export declare function checkChartEncoding(entry: CollectedReference, value: ResolvedValue): UnresolvedReference | undefined;
58
58
  /** The resolved values and the failures of one resolution pass over the references of a block tree. */
59
- export interface ReferenceResolution {
59
+ export type ReferenceResolution = {
60
60
  /** The resolved value of the binding of each block whose binding resolved, keyed by its block id. */
61
61
  resolvedByBlock: Map<string, ResolvedValue>;
62
62
  /**
@@ -66,7 +66,7 @@ export interface ReferenceResolution {
66
66
  resolvedBySlot: Map<string, Map<ChartSlot, ResolvedValue>>;
67
67
  /** Each reference that did not resolve, or whose chart encoding named an absent column. */
68
68
  failures: ResolutionFailure[];
69
- }
69
+ };
70
70
  /**
71
71
  * Resolve each reference of a block tree under the concurrency bound, and run the chart-encoding match.
72
72
  *
@@ -105,12 +105,12 @@ export async function validateReport(document, snapshot, resolver) {
105
105
  const { repeatedIds, warnings } = walkBlocks(parsed.data.sections);
106
106
  const { failures: resolutionFailures } = await resolveDocumentReferences(parsed.data.sections, snapshot, resolver);
107
107
  if (repeatedIds.length > 0 || resolutionFailures.length > 0) {
108
- return {
109
- valid: false,
110
- ...(repeatedIds.length > 0 ? { duplicateIds: repeatedIds } : {}),
111
- ...(resolutionFailures.length > 0 ? { resolutionFailures } : {}),
112
- warnings,
113
- };
108
+ const failure = { valid: false, warnings };
109
+ if (repeatedIds.length > 0)
110
+ failure.duplicateIds = repeatedIds;
111
+ if (resolutionFailures.length > 0)
112
+ failure.resolutionFailures = resolutionFailures;
113
+ return failure;
114
114
  }
115
115
  return { valid: true, warnings };
116
116
  }
@@ -26,10 +26,10 @@ export declare const DEPS_DIR = "deps";
26
26
  * One staged asset. `file` is the path under the assets directory, and `specifier` is the module
27
27
  * specifier of the source file inside the installed package.
28
28
  */
29
- export interface PageAsset {
29
+ export type PageAsset = {
30
30
  readonly file: string;
31
31
  readonly specifier: string;
32
- }
32
+ };
33
33
  /** The relative source of a staged asset. The page directory is self-contained, thus the source is `assets/<file>`. */
34
34
  export declare function assetSource(asset: PageAsset): string;
35
35
  /** The relative source of a staged file by its name. A page reference never spells the directory itself. */
@@ -43,10 +43,34 @@ const HASH_CHARS = 12;
43
43
  * The head takes the hex alone, and the basename takes each unsafe run as one dash.
44
44
  */
45
45
  export function tableSidecarName(hash, path) {
46
- const hex = hash.slice(hash.lastIndexOf(":") + 1).replace(/[^a-z0-9]+/gi, "");
47
- const base = path.slice(path.lastIndexOf("/") + 1).replace(/[^a-z0-9._-]+/gi, "-");
46
+ const hex = keepAlphanumeric(hash.slice(hash.lastIndexOf(":") + 1));
47
+ const base = keepFileSafe(path.slice(path.lastIndexOf("/") + 1));
48
48
  return `${hex.slice(0, HASH_CHARS)}-${base}`;
49
49
  }
50
+ /** Each character outside the letters and digits leaves the text. */
51
+ function keepAlphanumeric(text) {
52
+ return Array.from(text).filter(isNameChar).join("");
53
+ }
54
+ /** Each run of characters outside `[a-zA-Z0-9._-]` becomes one dash. */
55
+ function keepFileSafe(text) {
56
+ let out = "";
57
+ let inRun = false;
58
+ for (const char of text) {
59
+ const safe = isNameChar(char) || char === "." || char === "_" || char === "-";
60
+ if (safe) {
61
+ out += char;
62
+ inRun = false;
63
+ }
64
+ else if (!inRun) {
65
+ out += "-";
66
+ inRun = true;
67
+ }
68
+ }
69
+ return out;
70
+ }
71
+ function isNameChar(char) {
72
+ return (char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9");
73
+ }
50
74
  /**
51
75
  * The staged name of the script of one derivation: a hash head, in the content-address style of a data
52
76
  * asset.
@@ -59,7 +83,7 @@ export function tableSidecarName(hash, path) {
59
83
  * container.
60
84
  */
61
85
  export function derivationScriptName(scriptHash) {
62
- const hex = scriptHash.slice(scriptHash.lastIndexOf(":") + 1).replace(/[^a-z0-9]+/gi, "");
86
+ const hex = keepAlphanumeric(scriptHash.slice(scriptHash.lastIndexOf(":") + 1));
63
87
  return `d-${hex.slice(0, HASH_CHARS)}.py`;
64
88
  }
65
89
  /** The chart runtime. The page-side bootstrap reads the `echarts` global that this file declares. */
@@ -11,6 +11,7 @@
11
11
  import type * as Echarts from "echarts";
12
12
  import { type Result } from "neverthrow";
13
13
  import type { EchartOption } from "./chart.js";
14
+ import { type RenderApi } from "./chart-renderers.js";
14
15
  import { type ChartExportSize } from "./design.js";
15
16
  import type { DataAsset } from "./table-data.js";
16
17
  import type { RenderProblem } from "./types.js";
@@ -25,10 +26,17 @@ export type ChartRuntime = typeof Echarts;
25
26
  */
26
27
  export declare function loadChartRuntime(): Promise<ChartRuntime>;
27
28
  /** The two SVG files of one chart: the single journal column and the double journal column. */
28
- export interface ChartSvgs {
29
+ export type ChartSvgs = {
29
30
  readonly single: DataAsset;
30
31
  readonly double: DataAsset;
31
- }
32
+ };
33
+ /**
34
+ * The part of the chart runtime API that a renderer reads, taken from the API of the runtime.
35
+ *
36
+ * The runtime types each item dimension as its parsed value, and the derivation writes numbers alone,
37
+ * thus the number and text conversions read the same values that the raw API gives.
38
+ */
39
+ export declare function rendererApi(api: Echarts.CustomSeriesRenderItemAPI): RenderApi;
32
40
  /**
33
41
  * Render one option to SVG text at one column size.
34
42
  *
@@ -8,18 +8,24 @@
8
8
  * classes with counters of the whole process, thus two renders of one option differ in those tokens alone.
9
9
  * The export renumbers each token in order of first appearance, and two renders give one byte sequence.
10
10
  */
11
+ import { errorMessageOf } from "../lib/thrown.js";
12
+ import { textOf } from "../lib/unknown-text.js";
11
13
  import { createHash } from "node:crypto";
12
14
  import { err, ok } from "neverthrow";
13
15
  import { exportOption, OUTLINE_RENDERER, registerChartRenderers } from "./chart-renderers.js";
16
+ import { isUnknownArray } from "../lib/unknown-array.js";
17
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
14
18
  import { CHART_BODY_PX, CHART_EXPORT_SIZES, CHART_PRINT_THEME_NAME, CHART_PRINT_TEXT_PX, chartTheme, exportSizeFor, SCATTER_CROWD_ROWS, } from "./design.js";
15
19
  import { millimeterRoot } from "./hybrid-svg.js";
16
20
  /** One instance token of the chart runtime: a class, a clip path, or a gradient, for example `zr1-cls-2`. */
21
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the chart-runtime token grammar (zr<digits>-<family>-<n>); the renumbering rewrites exactly these tokens and nothing else.
17
22
  const INSTANCE_TOKEN = /zr\d+-[a-z]+-?\d+/g;
18
23
  /**
19
24
  * The places where the chart runtime writes an instance token: the value of an `id` or a `class` attribute,
20
25
  * a `url(#...)` reference, and the style block. A text node is none of them, thus a category name that
21
26
  * reads as a token keeps its text.
22
27
  */
28
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the three attribute and reference places carry the tokens; the alternation bounds the rewrite to them.
23
29
  const TOKEN_PLACES = /\s(?:id|class)="[^"]*"|url\(#[^)]*\)|<style[^>]*>[\s\S]*?<\/style>/g;
24
30
  /** The count of hash characters in an asset name. It matches the name of a table asset. */
25
31
  const HASH_CHARS = 12;
@@ -33,6 +39,26 @@ const HASH_CHARS = 12;
33
39
  export function loadChartRuntime() {
34
40
  return import("echarts");
35
41
  }
42
+ /** One pair of pixel numbers, as the renderer API reads it from the coordinate of the chart runtime. */
43
+ function pixelPair(values) {
44
+ if (typeof values === "number")
45
+ return [values, values];
46
+ return [values[0] ?? Number.NaN, values[1] ?? Number.NaN];
47
+ }
48
+ /**
49
+ * The part of the chart runtime API that a renderer reads, taken from the API of the runtime.
50
+ *
51
+ * The runtime types each item dimension as its parsed value, and the derivation writes numbers alone,
52
+ * thus the number and text conversions read the same values that the raw API gives.
53
+ */
54
+ export function rendererApi(api) {
55
+ return {
56
+ value: (dimension) => Number(api.value(dimension)),
57
+ coord: (point) => pixelPair(api.coord(point)),
58
+ size: (delta) => pixelPair(api.size?.(delta) ?? []),
59
+ visual: (name) => textOf(api.visual(name)),
60
+ };
61
+ }
36
62
  /**
37
63
  * Render one option to SVG text at one column size.
38
64
  *
@@ -44,9 +70,7 @@ export function loadChartRuntime() {
44
70
  export function renderChartSvg(echarts, option, size) {
45
71
  echarts.registerTheme(CHART_PRINT_THEME_NAME, chartTheme(CHART_PRINT_TEXT_PX));
46
72
  registerChartRenderers({
47
- // The runtime types each item dimension as a string or a number. Each item that the derivation writes
48
- // for a named renderer holds numbers alone, thus the renderer reads a number at each dimension.
49
- registerCustomSeries: (name, render) => echarts.registerCustomSeries(name, render),
73
+ registerCustomSeries: (name, render) => echarts.registerCustomSeries(name, (params, api) => render({ itemPayload: params.itemPayload }, rendererApi(api))),
50
74
  });
51
75
  let chart;
52
76
  // The axis jitter of the chart runtime places a point that finds no free place with `Math.random`. The
@@ -60,7 +84,7 @@ export function renderChartSvg(echarts, option, size) {
60
84
  return ok(finishedSvg(chart.renderToSVGString(), size));
61
85
  }
62
86
  catch (cause) {
63
- return err(cause instanceof Error ? cause.message : String(cause));
87
+ return err(errorMessageOf(cause) ?? textOf(cause));
64
88
  }
65
89
  finally {
66
90
  Math.random = random;
@@ -96,7 +120,9 @@ function finishedSvg(svg, size) {
96
120
  const renumber = (token) => {
97
121
  let next = tokens.get(token);
98
122
  if (next === undefined) {
99
- const family = /^zr\d+-([a-z]+)/.exec(token)?.[1] ?? "t";
123
+ const family =
124
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the token family (zr<digits>-<letters>) is the runtime's own naming scheme, read verbatim from the token it renumbers.
125
+ /^zr\d+-([a-z]+)/.exec(token)?.[1] ?? "t";
100
126
  next = `zr0-${family}-${tokens.size}`;
101
127
  tokens.set(token, next);
102
128
  }
@@ -118,10 +144,10 @@ function plottedPoints(option) {
118
144
  return 0;
119
145
  let count = 0;
120
146
  for (const entry of series) {
121
- if (typeof entry !== "object" || entry === null)
147
+ const fields = parseUnknownRecord(entry);
148
+ if (fields === undefined)
122
149
  continue;
123
- const fields = entry;
124
- if (!Array.isArray(fields.data))
150
+ if (!isUnknownArray(fields.data))
125
151
  continue;
126
152
  for (const item of fields.data) {
127
153
  if (fields.type === "radar")
@@ -136,7 +162,7 @@ function plottedPoints(option) {
136
162
  }
137
163
  /** True when one item draws a coordinate: a number, or a value whose members hold no empty slot. */
138
164
  function drawnItem(item) {
139
- const value = typeof item === "object" && item !== null && !Array.isArray(item) ? item.value : item;
165
+ const value = parseUnknownRecord(item)?.value ?? item;
140
166
  if (typeof value === "number")
141
167
  return true;
142
168
  return Array.isArray(value) && value.every((member) => member !== null && member !== undefined && member !== "-");
@@ -153,13 +179,13 @@ function outlineVertices(item) {
153
179
  const OUTLINE_LEAD_MEMBERS = 4;
154
180
  /** The count of coordinates that one radar polygon draws: each member of its value that is not empty. */
155
181
  function polygonCoordinates(item) {
156
- const value = typeof item === "object" && item !== null ? item.value : undefined;
182
+ const value = parseUnknownRecord(item)?.value;
157
183
  return Array.isArray(value) ? value.filter((member) => member !== null && member !== undefined).length : 0;
158
184
  }
159
185
  /** One SVG asset: the content-addressed name, with the column in millimeters, and the text. */
160
186
  function svgAsset(bytes, size) {
161
187
  const hash = createHash("sha256").update(bytes).digest("hex").slice(0, HASH_CHARS);
162
- return { name: `c-${hash}-${size.widthMm}mm.svg`, bytes };
188
+ return { name: `c-${hash}-${String(size.widthMm)}mm.svg`, bytes };
163
189
  }
164
190
  /**
165
191
  * The two SVG files of one chart, or `undefined` for a chart past the export bound.
@@ -22,15 +22,15 @@ export declare const MANHATTAN_P_THRESHOLD = 5e-8;
22
22
  /** The baseline of an MA plot. A point above it rose, and a point below it fell. */
23
23
  export declare const MA_BASELINE = 0;
24
24
  /** The semantic axis titles of one preset. A preset whose axis carries no fixed quantity states none. */
25
- export interface PresetAxisTitles {
25
+ export type PresetAxisTitles = {
26
26
  readonly x?: string;
27
27
  readonly y?: string;
28
- }
28
+ };
29
29
  /** One category of a preset classification: the name that a legend reads, and whether it states no finding. */
30
- export interface PresetCategory {
30
+ export type PresetCategory = {
31
31
  readonly name: string;
32
32
  readonly muted: boolean;
33
- }
33
+ };
34
34
  /**
35
35
  * The classification rule as plain data: the kind of the split, and the two cuts that it reads.
36
36
  *
@@ -63,16 +63,16 @@ export type PresetRule = {
63
63
  * guide lines carry. The color split then lands on the drawn lines. A row that gives no pair belongs to no
64
64
  * category, and its point drops.
65
65
  */
66
- export interface PresetClassification {
66
+ export type PresetClassification = {
67
67
  readonly categories: readonly PresetCategory[];
68
68
  readonly categoryOf: (x: number | null, y: number | null, index: number) => string | undefined;
69
69
  readonly rule: PresetRule;
70
- }
70
+ };
71
71
  /** The expansion of the volcano: the composition of its points and its guides, and its classification. */
72
- export interface PresetExpansion {
72
+ export type PresetExpansion = {
73
73
  readonly composition: ChartComposition;
74
74
  readonly classification: PresetClassification;
75
- }
75
+ };
76
76
  /**
77
77
  * The composition of a volcano: the effect on x, the transformed p-value on y, three guide lines, and the
78
78
  * three-way classification.
@@ -124,12 +124,12 @@ function volcanoClassification(significance, effect) {
124
124
  * `axes` field, where an agent title sits and where they would outrank the label.
125
125
  */
126
126
  export function volcanoAxisTitles(x) {
127
- return { ...(channelTransform(x) === undefined ? { x: LOG2_EFFECT_TITLE } : {}), y: NEG_LOG10_P_TITLE };
127
+ return { x: channelTransform(x) === undefined ? LOG2_EFFECT_TITLE : undefined, y: NEG_LOG10_P_TITLE };
128
128
  }
129
129
  /** The two optional channels that the volcano carries through from the quick-path encoding. */
130
130
  function optionalChannels(encoding) {
131
131
  return {
132
- ...(encoding.group !== undefined ? { group: encoding.group } : {}),
133
- ...(encoding.label !== undefined ? { label: encoding.label } : {}),
132
+ group: encoding.group,
133
+ label: encoding.label,
134
134
  };
135
135
  }