@inflexa-ai/harness 0.45.1 → 0.46.2

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 (790) 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 +306 -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 +32 -7
  174. package/dist/lib/hooks.js +22 -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 +160 -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 +39 -0
  256. package/dist/loop/turn-credentials.js +90 -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/request-headers.js +12 -3
  304. package/dist/providers/types.d.ts +55 -94
  305. package/dist/reference-data/catalog.d.ts +2 -15
  306. package/dist/reference-data/catalog.js +25 -8
  307. package/dist/reference-data/receipt.d.ts +2 -2
  308. package/dist/report-model/assert-rules.js +1 -1
  309. package/dist/report-model/authoring-grammar.d.ts +211 -233
  310. package/dist/report-model/block-walk.d.ts +10 -10
  311. package/dist/report-model/block-walk.js +2 -0
  312. package/dist/report-model/draft-finish.d.ts +8 -8
  313. package/dist/report-model/draft-finish.js +1 -1
  314. package/dist/report-model/draft-hash.js +8 -7
  315. package/dist/report-model/draft-operations.d.ts +22 -10
  316. package/dist/report-model/draft-operations.js +48 -30
  317. package/dist/report-model/draft-read.d.ts +19 -7
  318. package/dist/report-model/draft-read.js +16 -6
  319. package/dist/report-model/draft.d.ts +844 -2
  320. package/dist/report-model/draft.js +3 -1
  321. package/dist/report-model/fixture-resolver.js +39 -16
  322. package/dist/report-model/pin-snapshot.d.ts +2 -2
  323. package/dist/report-model/pin-snapshot.js +15 -15
  324. package/dist/report-model/production-resolver.d.ts +18 -18
  325. package/dist/report-model/production-resolver.js +50 -42
  326. package/dist/report-model/reference-resolver.d.ts +26 -10
  327. package/dist/report-model/reference-resolver.js +68 -5
  328. package/dist/report-model/reference-stamp.js +30 -38
  329. package/dist/report-model/structural-validation.js +12 -4
  330. package/dist/report-model/validate.d.ts +7 -7
  331. package/dist/report-model/validate.js +6 -6
  332. package/dist/report-render/assets.d.ts +2 -2
  333. package/dist/report-render/assets.js +27 -3
  334. package/dist/report-render/chart-export.d.ts +10 -2
  335. package/dist/report-render/chart-export.js +37 -11
  336. package/dist/report-render/chart-presets.d.ts +8 -8
  337. package/dist/report-render/chart-presets.js +3 -3
  338. package/dist/report-render/chart-renderers.d.ts +23 -16
  339. package/dist/report-render/chart-renderers.js +74 -53
  340. package/dist/report-render/chart-toolbox.d.ts +2 -2
  341. package/dist/report-render/chart-toolbox.js +7 -6
  342. package/dist/report-render/chart.d.ts +15 -16
  343. package/dist/report-render/chart.js +369 -252
  344. package/dist/report-render/design.d.ts +36 -297
  345. package/dist/report-render/design.js +0 -12
  346. package/dist/report-render/figures/common.d.ts +12 -12
  347. package/dist/report-render/figures/common.js +42 -31
  348. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  349. package/dist/report-render/figures/dendrogram.js +10 -10
  350. package/dist/report-render/figures/dense.js +15 -8
  351. package/dist/report-render/figures/dotplot.js +46 -33
  352. package/dist/report-render/figures/embedding.js +52 -43
  353. package/dist/report-render/figures/equal-units.d.ts +10 -10
  354. package/dist/report-render/figures/equal-units.js +27 -27
  355. package/dist/report-render/figures/forest.js +9 -7
  356. package/dist/report-render/figures/gsea.js +21 -11
  357. package/dist/report-render/figures/heatmap.js +13 -9
  358. package/dist/report-render/figures/index.d.ts +10 -10
  359. package/dist/report-render/figures/index.js +4 -2
  360. package/dist/report-render/figures/km.js +10 -9
  361. package/dist/report-render/figures/label-room.d.ts +12 -12
  362. package/dist/report-render/figures/label-room.js +7 -2
  363. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  364. package/dist/report-render/figures/locuszoom.js +59 -31
  365. package/dist/report-render/figures/lollipop.js +3 -2
  366. package/dist/report-render/figures/ma.js +8 -4
  367. package/dist/report-render/figures/manhattan.d.ts +1 -2
  368. package/dist/report-render/figures/manhattan.js +52 -34
  369. package/dist/report-render/figures/oncoprint.js +4 -5
  370. package/dist/report-render/figures/pca.js +25 -11
  371. package/dist/report-render/figures/qq.js +20 -9
  372. package/dist/report-render/figures/roc.js +1 -1
  373. package/dist/report-render/figures/sankey.d.ts +2 -2
  374. package/dist/report-render/figures/sankey.js +11 -10
  375. package/dist/report-render/figures/upset.d.ts +6 -6
  376. package/dist/report-render/figures/upset.js +7 -4
  377. package/dist/report-render/figures/volcano.js +12 -10
  378. package/dist/report-render/hybrid-svg.d.ts +4 -4
  379. package/dist/report-render/hybrid-svg.js +7 -5
  380. package/dist/report-render/number-format.d.ts +4 -4
  381. package/dist/report-render/number-format.js +62 -27
  382. package/dist/report-render/page.js +2 -1
  383. package/dist/report-render/provenance-data.d.ts +2 -2
  384. package/dist/report-render/references.d.ts +4 -4
  385. package/dist/report-render/render.d.ts +2 -2
  386. package/dist/report-render/render.js +10 -11
  387. package/dist/report-render/script-json.js +1 -1
  388. package/dist/report-render/table-data.d.ts +6 -6
  389. package/dist/report-render/test/options.d.ts +49 -0
  390. package/dist/report-render/test/options.js +143 -0
  391. package/dist/report-render/test/page-function.d.ts +19 -0
  392. package/dist/report-render/test/page-function.js +33 -0
  393. package/dist/report-render/types.d.ts +10 -10
  394. package/dist/report-render/value-bridge.d.ts +4 -4
  395. package/dist/report-render/value-bridge.js +27 -14
  396. package/dist/report-render/views/chart-view.d.ts +2 -2
  397. package/dist/report-render/views/chart-view.js +2 -2
  398. package/dist/report-render/views/lineage.d.ts +6 -6
  399. package/dist/report-render/views/lineage.js +2 -0
  400. package/dist/report-render/views/page-view.d.ts +2 -2
  401. package/dist/report-render/views/page-view.js +1 -0
  402. package/dist/report-render/views/prose.js +25 -8
  403. package/dist/report-render/views/references-view.js +12 -1
  404. package/dist/report-render/views/values.js +1 -1
  405. package/dist/runtime/assemble.d.ts +53 -26
  406. package/dist/runtime/assemble.js +103 -56
  407. package/dist/runtime/boot.d.ts +8 -7
  408. package/dist/runtime/boot.js +1 -1
  409. package/dist/runtime/connection-budget.d.ts +6 -6
  410. package/dist/runtime/connection-budget.js +1 -1
  411. package/dist/runtime/dbos.d.ts +29 -19
  412. package/dist/runtime/dbos.js +35 -20
  413. package/dist/runtime/result-serialization.js +18 -5
  414. package/dist/runtime/shutdown.d.ts +2 -2
  415. package/dist/sandbox/client.d.ts +7 -3
  416. package/dist/sandbox/cpu-files.d.ts +2 -2
  417. package/dist/sandbox/cpu-files.js +21 -4
  418. package/dist/sandbox/create-sandbox.d.ts +7 -8
  419. package/dist/sandbox/create-sandbox.js +6 -12
  420. package/dist/sandbox/docker-client.d.ts +48 -3
  421. package/dist/sandbox/docker-client.js +10 -6
  422. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  423. package/dist/sandbox/exec-outcome.d.ts +2 -2
  424. package/dist/sandbox/exec-outcome.js +1 -1
  425. package/dist/sandbox/exec.d.ts +10 -6
  426. package/dist/sandbox/exec.js +27 -12
  427. package/dist/sandbox/execution-id.js +14 -6
  428. package/dist/sandbox/farm.d.ts +2 -2
  429. package/dist/sandbox/farm.js +22 -27
  430. package/dist/sandbox/identity.d.ts +7 -0
  431. package/dist/sandbox/identity.js +14 -3
  432. package/dist/sandbox/image-packages.js +15 -27
  433. package/dist/sandbox/k8s-client.d.ts +35 -8
  434. package/dist/sandbox/k8s-client.js +6 -5
  435. package/dist/sandbox/labels.js +1 -0
  436. package/dist/sandbox/liveness.js +3 -1
  437. package/dist/sandbox/mount-plan.d.ts +10 -10
  438. package/dist/sandbox/mount-plan.js +13 -14
  439. package/dist/sandbox/notification-sweep.d.ts +4 -4
  440. package/dist/sandbox/notification-sweep.js +4 -7
  441. package/dist/sandbox/package-identity.d.ts +6 -13
  442. package/dist/sandbox/package-identity.js +46 -28
  443. package/dist/sandbox/reaper.d.ts +10 -10
  444. package/dist/sandbox/reaper.js +4 -6
  445. package/dist/sandbox/sandbox-error.d.ts +2 -9
  446. package/dist/sandbox/sandbox-error.js +21 -8
  447. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  448. package/dist/sandbox/sandbox-step-translate.js +22 -8
  449. package/dist/sandbox/step-sandbox.d.ts +47 -0
  450. package/dist/sandbox/step-sandbox.js +53 -0
  451. package/dist/sandbox/types.d.ts +18 -19
  452. package/dist/sandbox/types.js +1 -1
  453. package/dist/schemas/artifact-manifest.d.ts +4 -4
  454. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  455. package/dist/schemas/file-metadata.js +2 -4
  456. package/dist/schemas/plan-schemas.d.ts +31 -31
  457. package/dist/schemas/run-synthesis.d.ts +95 -26
  458. package/dist/schemas/run-synthesis.js +3 -1
  459. package/dist/schemas/validate-plan.d.ts +4 -4
  460. package/dist/schemas/validate-plan.js +17 -5
  461. package/dist/schemas/workflow-state.d.ts +19 -19
  462. package/dist/schemas/workflow-state.js +2 -2
  463. package/dist/state/active-turns.d.ts +36 -0
  464. package/dist/state/active-turns.js +67 -0
  465. package/dist/state/analyses-metrics.d.ts +8 -8
  466. package/dist/state/analyses-metrics.js +4 -4
  467. package/dist/state/analyses.d.ts +0 -14
  468. package/dist/state/analyses.js +0 -32
  469. package/dist/state/artifacts.d.ts +32 -19
  470. package/dist/state/artifacts.js +28 -5
  471. package/dist/state/data-profile.d.ts +2 -2
  472. package/dist/state/db.d.ts +12 -2
  473. package/dist/state/db.js +5 -0
  474. package/dist/state/edit-intents.d.ts +4 -0
  475. package/dist/state/edit-intents.js +71 -0
  476. package/dist/state/index.d.ts +4 -4
  477. package/dist/state/index.js +2 -2
  478. package/dist/state/init.d.ts +2 -1
  479. package/dist/state/init.js +5 -2
  480. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  482. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  484. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  486. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  488. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  490. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  492. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  494. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  496. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  498. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  499. package/dist/state/migrations/index.js +18 -0
  500. package/dist/state/paused-work.d.ts +52 -0
  501. package/dist/state/paused-work.js +105 -0
  502. package/dist/state/plans.d.ts +27 -8
  503. package/dist/state/plans.js +14 -11
  504. package/dist/state/purge-analysis.d.ts +6 -6
  505. package/dist/state/purge-analysis.js +10 -2
  506. package/dist/state/report-session-state.d.ts +43 -18
  507. package/dist/state/report-session-state.js +43 -4
  508. package/dist/state/report-versions.d.ts +16 -11
  509. package/dist/state/report-versions.js +5 -3
  510. package/dist/state/runs.d.ts +30 -19
  511. package/dist/state/runs.js +43 -51
  512. package/dist/state/schema.d.ts +18 -21
  513. package/dist/state/schema.js +4 -5
  514. package/dist/state/snapshot-parse.d.ts +2 -2
  515. package/dist/state/snapshot-parse.js +14 -8
  516. package/dist/state/step-executions.d.ts +20 -8
  517. package/dist/state/step-executions.js +6 -4
  518. package/dist/state/tool-outputs.d.ts +2 -2
  519. package/dist/state/tool-outputs.js +2 -1
  520. package/dist/state/vector-store.d.ts +16 -16
  521. package/dist/state/vector-store.js +11 -7
  522. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  523. package/dist/tasks/data-profile-absorb.js +21 -16
  524. package/dist/tasks/data-profile-activity.d.ts +5 -5
  525. package/dist/tasks/data-profile-activity.js +5 -5
  526. package/dist/tasks/data-profile-index.d.ts +4 -4
  527. package/dist/tasks/data-profile-index.js +32 -17
  528. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  529. package/dist/tasks/data-profile-resolve.js +88 -62
  530. package/dist/tasks/data-profile.d.ts +40 -31
  531. package/dist/tasks/data-profile.js +138 -95
  532. package/dist/tasks/extract-values.d.ts +26 -79
  533. package/dist/tasks/extract-values.js +48 -108
  534. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  535. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  536. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  537. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  538. package/dist/testing.d.ts +62 -0
  539. package/dist/testing.js +101 -0
  540. package/dist/tools/ad-hoc-router.d.ts +9 -9
  541. package/dist/tools/ad-hoc-router.js +65 -52
  542. package/dist/tools/analysis-invocation.d.ts +7 -0
  543. package/dist/tools/analysis-invocation.js +29 -5
  544. package/dist/tools/approval/contract.d.ts +8 -52
  545. package/dist/tools/approval/contract.js +7 -36
  546. package/dist/tools/approval/gateway.d.ts +27 -28
  547. package/dist/tools/approval/gateway.js +33 -130
  548. package/dist/tools/approval/queries.d.ts +6 -11
  549. package/dist/tools/approval/queries.js +43 -29
  550. package/dist/tools/approval/uuidv7.js +2 -2
  551. package/dist/tools/bio/chembl.d.ts +3 -3
  552. package/dist/tools/bio/chembl.js +10 -0
  553. package/dist/tools/bio/comptox.d.ts +25 -8
  554. package/dist/tools/bio/comptox.js +4 -2
  555. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  556. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  557. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  558. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  559. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  560. package/dist/tools/bio/keys.d.ts +2 -2
  561. package/dist/tools/bio/keys.js +3 -3
  562. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  563. package/dist/tools/bio/lookup-annotation.js +3 -0
  564. package/dist/tools/bio/opentargets.d.ts +1 -1
  565. package/dist/tools/bio/opentargets.js +6 -0
  566. package/dist/tools/bio/pubchem.d.ts +2 -2
  567. package/dist/tools/bio/pubchem.js +6 -0
  568. package/dist/tools/bio/pubmed.d.ts +26 -16
  569. package/dist/tools/bio/pubmed.js +9 -3
  570. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  571. package/dist/tools/bio/search-clinical-trials.js +5 -1
  572. package/dist/tools/bio/search-faers.d.ts +2 -2
  573. package/dist/tools/bio/search-faers.js +1 -1
  574. package/dist/tools/bio/search-gene.d.ts +2 -2
  575. package/dist/tools/bio/search-gene.js +1 -0
  576. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  577. package/dist/tools/bio/search-geo-datasets.js +5 -5
  578. package/dist/tools/bio/search-interactions.d.ts +1 -1
  579. package/dist/tools/bio/search-patents.d.ts +28 -22
  580. package/dist/tools/bio/search-patents.js +20 -17
  581. package/dist/tools/bio/search-protein.d.ts +2 -2
  582. package/dist/tools/bio/search-protein.js +1 -1
  583. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  584. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  585. package/dist/tools/bio/target-safety.d.ts +8 -8
  586. package/dist/tools/bio/target-safety.js +11 -6
  587. package/dist/tools/capability-data.d.ts +9 -5
  588. package/dist/tools/capability-data.js +2 -1
  589. package/dist/tools/define-tool.d.ts +55 -46
  590. package/dist/tools/define-tool.js +39 -27
  591. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  592. package/dist/tools/display/normalize-echart-spec.js +51 -27
  593. package/dist/tools/display/show-user.d.ts +2 -2
  594. package/dist/tools/display/show-user.js +1 -1
  595. package/dist/tools/execute-analysis.d.ts +19 -10
  596. package/dist/tools/execute-analysis.js +83 -62
  597. package/dist/tools/knowledge/check.d.ts +166 -44
  598. package/dist/tools/knowledge/check.js +5 -3
  599. package/dist/tools/knowledge/client.d.ts +31 -62
  600. package/dist/tools/knowledge/client.js +44 -27
  601. package/dist/tools/knowledge/environment.d.ts +6 -6
  602. package/dist/tools/knowledge/environment.js +18 -7
  603. package/dist/tools/knowledge/index.d.ts +2 -2
  604. package/dist/tools/knowledge/index.js +9 -9
  605. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  606. package/dist/tools/knowledge/local-slots.js +11 -4
  607. package/dist/tools/knowledge/pin.d.ts +2 -2
  608. package/dist/tools/knowledge/recommend.d.ts +20 -45
  609. package/dist/tools/knowledge/recommend.js +27 -19
  610. package/dist/tools/knowledge/situation.d.ts +40 -40
  611. package/dist/tools/knowledge/situation.js +2 -9
  612. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  613. package/dist/tools/knowledge/skeleton.js +10 -11
  614. package/dist/tools/knowledge/template.d.ts +20 -18
  615. package/dist/tools/knowledge/template.js +38 -32
  616. package/dist/tools/lib/alphafold-client.js +2 -1
  617. package/dist/tools/lib/amass-client.d.ts +28 -28
  618. package/dist/tools/lib/amass-client.js +20 -10
  619. package/dist/tools/lib/api-utils.d.ts +13 -3
  620. package/dist/tools/lib/api-utils.js +17 -3
  621. package/dist/tools/lib/bgee-client.d.ts +6 -6
  622. package/dist/tools/lib/bgee-client.js +16 -10
  623. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  624. package/dist/tools/lib/cbioportal-client.js +9 -8
  625. package/dist/tools/lib/chembl-client.d.ts +14 -14
  626. package/dist/tools/lib/chembl-client.js +11 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  628. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  629. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  630. package/dist/tools/lib/clinical-trials-client.js +10 -10
  631. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  632. package/dist/tools/lib/clinvar-client.js +6 -6
  633. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  634. package/dist/tools/lib/ctx-ops.js +13 -10
  635. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  636. package/dist/tools/lib/dgidb-client.js +10 -12
  637. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  638. package/dist/tools/lib/ema-client.d.ts +2 -2
  639. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  640. package/dist/tools/lib/ensembl-client.js +5 -4
  641. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  642. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  643. package/dist/tools/lib/html-text.d.ts +6 -0
  644. package/dist/tools/lib/html-text.js +9 -0
  645. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  646. package/dist/tools/lib/identifier-resolver.js +7 -3
  647. package/dist/tools/lib/impc-client.d.ts +8 -8
  648. package/dist/tools/lib/impc-client.js +46 -35
  649. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  650. package/dist/tools/lib/iuphar-client.js +7 -16
  651. package/dist/tools/lib/monarch-client.d.ts +4 -4
  652. package/dist/tools/lib/openfda-client.d.ts +22 -22
  653. package/dist/tools/lib/openfda-client.js +23 -22
  654. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  655. package/dist/tools/lib/pathway-client.d.ts +4 -4
  656. package/dist/tools/lib/pathway-client.js +15 -19
  657. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  658. package/dist/tools/lib/pharmgkb-client.js +1 -1
  659. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  660. package/dist/tools/lib/protein-family-modality.js +0 -2
  661. package/dist/tools/lib/protein-family-normalize.js +7 -0
  662. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  663. package/dist/tools/lib/pubchem-client.js +1 -0
  664. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  665. package/dist/tools/lib/pubchem-ops.js +8 -0
  666. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  667. package/dist/tools/lib/pubmed-client.js +1 -1
  668. package/dist/tools/lib/string-client.d.ts +6 -6
  669. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  670. package/dist/tools/lib/uniprot-client.js +5 -1
  671. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  672. package/dist/tools/memory/update-working-memory.js +21 -3
  673. package/dist/tools/read-tool-output.js +8 -2
  674. package/dist/tools/registry.d.ts +2 -2
  675. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  676. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  677. package/dist/tools/report-session/derive-table.d.ts +19 -59
  678. package/dist/tools/report-session/derive-table.js +120 -122
  679. package/dist/tools/report-session/examine-page.d.ts +6 -6
  680. package/dist/tools/report-session/examine-page.js +14 -12
  681. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  682. package/dist/tools/report-session/list-artifacts.js +5 -5
  683. package/dist/tools/report-session/page-faults.d.ts +6 -6
  684. package/dist/tools/report-session/page-faults.js +3 -1
  685. package/dist/tools/report-session/preview-report.d.ts +4 -3
  686. package/dist/tools/report-session/preview-report.js +26 -7
  687. package/dist/tools/report-session/record-version.d.ts +9 -4
  688. package/dist/tools/report-session/record-version.js +16 -9
  689. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  690. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  691. package/dist/tools/research/generate-analogy-report.js +80 -76
  692. package/dist/tools/research/generate-plan.d.ts +16 -16
  693. package/dist/tools/research/generate-plan.js +410 -374
  694. package/dist/tools/research/guarded-address.js +3 -2
  695. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  696. package/dist/tools/research/inspect-data-profile.js +26 -25
  697. package/dist/tools/research/inspect-run.d.ts +54 -27
  698. package/dist/tools/research/inspect-run.js +50 -40
  699. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  700. package/dist/tools/research/literature-reviewer.js +29 -28
  701. package/dist/tools/research/search-arxiv.d.ts +1 -1
  702. package/dist/tools/research/search-arxiv.js +1 -1
  703. package/dist/tools/research/search-github-repos.d.ts +10 -7
  704. package/dist/tools/research/search-github-repos.js +25 -22
  705. package/dist/tools/research/search-semantic-scholar.js +1 -1
  706. package/dist/tools/research/searxng-engine.d.ts +2 -2
  707. package/dist/tools/research/searxng-engine.js +6 -4
  708. package/dist/tools/research/web-fetch.d.ts +24 -21
  709. package/dist/tools/research/web-fetch.js +65 -74
  710. package/dist/tools/research/web-search.d.ts +26 -17
  711. package/dist/tools/research/web-search.js +26 -21
  712. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  713. package/dist/tools/sandbox/link-packages.js +11 -8
  714. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  715. package/dist/tools/sandbox/list-available-packages.js +31 -25
  716. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  717. package/dist/tools/sandbox/list-available-refs.js +61 -36
  718. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  719. package/dist/tools/sandbox/report-blocker.js +23 -73
  720. package/dist/tools/sandbox/skills.d.ts +16 -12
  721. package/dist/tools/sandbox/skills.js +16 -12
  722. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  723. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  724. package/dist/tools/start-report-session.d.ts +13 -5
  725. package/dist/tools/start-report-session.js +35 -8
  726. package/dist/tools/terminal-text.d.ts +5 -2
  727. package/dist/tools/terminal-text.js +35 -3
  728. package/dist/tools/workspace/decision-record.d.ts +4 -4
  729. package/dist/tools/workspace/decision-record.js +23 -13
  730. package/dist/tools/workspace/edit-file.d.ts +59 -20
  731. package/dist/tools/workspace/edit-file.js +81 -16
  732. package/dist/tools/workspace/execute-command.d.ts +15 -13
  733. package/dist/tools/workspace/execute-command.js +11 -9
  734. package/dist/tools/workspace/file-stat.d.ts +6 -3
  735. package/dist/tools/workspace/grep.d.ts +10 -7
  736. package/dist/tools/workspace/grep.js +9 -3
  737. package/dist/tools/workspace/list-files.d.ts +6 -3
  738. package/dist/tools/workspace/mutator.d.ts +28 -15
  739. package/dist/tools/workspace/mutator.js +107 -53
  740. package/dist/tools/workspace/read-file.d.ts +8 -5
  741. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  742. package/dist/tools/workspace/result-bounds.js +4 -2
  743. package/dist/tools/workspace/run-exec.d.ts +2 -2
  744. package/dist/tools/workspace/run-exec.js +3 -3
  745. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  746. package/dist/tools/workspace/scan-inputs.js +17 -5
  747. package/dist/tools/workspace/show-file.d.ts +1 -1
  748. package/dist/tools/workspace/show-file.js +2 -1
  749. package/dist/tools/workspace/show-plan.d.ts +8 -5
  750. package/dist/tools/workspace/show-plan.js +9 -8
  751. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  752. package/dist/tools/workspace/workspace-search.js +27 -14
  753. package/dist/tools/workspace/write-file.d.ts +9 -7
  754. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  755. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  756. package/dist/workflows/execute-analysis.d.ts +46 -62
  757. package/dist/workflows/execute-analysis.js +137 -219
  758. package/dist/workflows/pause.d.ts +71 -0
  759. package/dist/workflows/pause.js +173 -0
  760. package/dist/workflows/sandbox-step.d.ts +38 -61
  761. package/dist/workflows/sandbox-step.js +99 -106
  762. package/dist/workflows/test/sql-writes.d.ts +21 -0
  763. package/dist/workflows/test/sql-writes.js +36 -0
  764. package/dist/workspace/filesystem.d.ts +6 -6
  765. package/dist/workspace/filesystem.js +10 -8
  766. package/dist/workspace/paths.d.ts +1 -1
  767. package/dist/workspace/paths.js +15 -4
  768. package/dist/workspace/search-config.d.ts +2 -2
  769. package/dist/workspace/search-config.js +1 -1
  770. package/package.json +21 -22
  771. package/dist/loop/call-guard.d.ts +0 -50
  772. package/dist/loop/call-guard.js +0 -90
  773. package/dist/loop/continue-agent.d.ts +0 -40
  774. package/dist/loop/continue-agent.js +0 -38
  775. package/dist/loop/genai-spans.d.ts +0 -47
  776. package/dist/loop/genai-spans.js +0 -134
  777. package/dist/loop/run-agent.d.ts +0 -245
  778. package/dist/loop/run-agent.js +0 -1124
  779. package/dist/loop/run-step.d.ts +0 -29
  780. package/dist/loop/run-step.js +0 -34
  781. package/dist/loop/run-to-terminal.d.ts +0 -66
  782. package/dist/loop/run-to-terminal.js +0 -93
  783. package/dist/loop/tool-mask.d.ts +0 -23
  784. package/dist/loop/tool-mask.js +0 -46
  785. package/dist/providers/streaming-chat.d.ts +0 -32
  786. package/dist/providers/streaming-chat.js +0 -91
  787. package/dist/tasks/derive-table-exec.d.ts +0 -54
  788. package/dist/tasks/derive-table-exec.js +0 -86
  789. package/dist/workflows/suspension.d.ts +0 -32
  790. package/dist/workflows/suspension.js +0 -38
@@ -41,48 +41,48 @@ export declare function statisticSlot(index: number): ChartSlot;
41
41
  * chart grammar names, and the track and each tree carry each column that they name, thus the structural tier
42
42
  * and the value tier match the same set.
43
43
  */
44
- export interface CollectedReference {
44
+ export type CollectedReference = {
45
45
  blockId: string;
46
46
  reference: Reference;
47
47
  slot?: ChartSlot;
48
48
  encodingColumns?: string[];
49
- }
49
+ };
50
50
  /** An advisory warning about the prose of one block. The detail is the numeral that the prose carries. */
51
- export interface FreeNumeralWarning {
51
+ export type FreeNumeralWarning = {
52
52
  blockId: string;
53
53
  kind: "free-numeral";
54
54
  detail: string;
55
- }
55
+ };
56
56
  /**
57
57
  * An advisory warning about one exponent form that the prose of a block carries and the page never prints.
58
58
  * The detail is the written form.
59
59
  */
60
- export interface ExponentFormWarning {
60
+ export type ExponentFormWarning = {
61
61
  blockId: string;
62
62
  kind: "exponent-form";
63
63
  detail: string;
64
- }
64
+ };
65
65
  /** One advisory warning about the prose of a block. */
66
66
  export type ProseWarning = FreeNumeralWarning | ExponentFormWarning;
67
67
  /**
68
68
  * An advisory warning about one derivation that no binding of the document names. The detail is the output
69
69
  * path of the record. The record stays, and the bytes are reproducible from the script and the sources.
70
70
  */
71
- export interface UnusedDerivationWarning {
71
+ export type UnusedDerivationWarning = {
72
72
  kind: "unused-derivation";
73
73
  detail: string;
74
- }
74
+ };
75
75
  /** One advisory warning about a report. A warning never makes a report invalid. */
76
76
  export type ReportWarning = ProseWarning | UnusedDerivationWarning;
77
77
  /** What one walk over a block tree found. */
78
- export interface BlockWalk {
78
+ export type BlockWalk = {
79
79
  /** Each reference, in document order, tied to the block that carries it. */
80
80
  references: CollectedReference[];
81
81
  /** Each id that more than one block holds, named one time, in sorted order. */
82
82
  repeatedIds: string[];
83
83
  /** Each free numeral and each drifted exponent form that prose carries. */
84
84
  warnings: ProseWarning[];
85
- }
85
+ };
86
86
  /** Warn for each free-standing numeral that the prose of one block carries. */
87
87
  export declare function numeralWarnings(blockId: string, prose: string): FreeNumeralWarning[];
88
88
  /**
@@ -35,6 +35,7 @@ export function statisticSlot(index) {
35
35
  * can be a real free-standing figure or a harmless part of a name. Thus a hit warns, and it never fails
36
36
  * the report.
37
37
  */
38
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- a free-standing numeral with its optional sign, percent, and decimals; the lookbehind keeps a symbol such as `TP53` outside the match.
38
39
  const NUMERAL_PATTERN = /(?<![A-Za-z0-9])-?\d+(?:\.\d+)?%?/g;
39
40
  /**
40
41
  * A free-standing token that states a number in an exponent form, for example `4.3e-05`.
@@ -42,6 +43,7 @@ const NUMERAL_PATTERN = /(?<![A-Za-z0-9])-?\d+(?:\.\d+)?%?/g;
42
43
  * The left boundary is the one of the numeral scan, thus a token inside a name never matches. The exponent
43
44
  * itself carries an optional sign, because a written form gives one and a shown form never does.
44
45
  */
46
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the same left boundary with the exponent tail, so one warning names the exponent form and not its coefficient alone.
45
47
  const EXPONENT_PATTERN = /(?<![A-Za-z0-9])-?\d+(?:\.\d+)?[eE][+-]?\d+/g;
46
48
  /** Warn for each free-standing numeral that the prose of one block carries. */
47
49
  export function numeralWarnings(blockId, prose) {
@@ -31,26 +31,26 @@ import { type ChartSlot, type ReportWarning } from "./block-walk.js";
31
31
  import type { DraftDocument } from "./draft.js";
32
32
  import type { ReportSnapshot } from "./reference-resolver.js";
33
33
  /** A schema conformance gap, reduced to a path and a message. */
34
- export interface SchemaGap {
34
+ export type SchemaGap = {
35
35
  kind: "schema";
36
36
  path: string;
37
37
  message: string;
38
- }
38
+ };
39
39
  /** A duplicate id gap. More than one block holds the id. */
40
- export interface DuplicateIdGap {
40
+ export type DuplicateIdGap = {
41
41
  kind: "duplicate-id";
42
42
  id: string;
43
- }
43
+ };
44
44
  /**
45
45
  * An unresolved reference gap. It ties the block that carries the reference to the reason it did not resolve.
46
46
  * `slot` names the place of the reference inside a chart block: the binding, the track, a tree, or one statistic.
47
47
  */
48
- export interface UnresolvedReferenceGap {
48
+ export type UnresolvedReferenceGap = {
49
49
  kind: "unresolved-reference";
50
50
  blockId: string;
51
51
  slot?: ChartSlot;
52
52
  failure: UnresolvedReference;
53
- }
53
+ };
54
54
  /** One completeness gap of a draft. The kind set is closed. */
55
55
  export type FinishGap = SchemaGap | DuplicateIdGap | UnresolvedReferenceGap;
56
56
  /**
@@ -70,9 +70,9 @@ export type FinishResult = {
70
70
  * One derivation of the session, as the finish reads it. The finish needs the output path alone, because
71
71
  * the used set is the paths that the bindings name.
72
72
  */
73
- export interface SessionDerivation {
73
+ export type SessionDerivation = {
74
74
  readonly outputPath: string;
75
- }
75
+ };
76
76
  /**
77
77
  * Finish a draft. The finish validates the schema, the unique ids, and the structural resolution of each
78
78
  * reference, and it reports each gap as data. It warns about each free numeral in prose, and about each
@@ -79,7 +79,7 @@ export function finishDraft(draft, snapshot, derivations = []) {
79
79
  gaps.push({
80
80
  kind: "unresolved-reference",
81
81
  blockId: entry.blockId,
82
- ...(entry.slot !== undefined ? { slot: entry.slot } : {}),
82
+ slot: entry.slot,
83
83
  failure: result.error,
84
84
  });
85
85
  }
@@ -10,6 +10,7 @@
10
10
  * give one hash, and a marker survives a round trip through storage.
11
11
  */
12
12
  import { createHash } from "node:crypto";
13
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
13
14
  /**
14
15
  * Give back a copy of a value with each object key in sorted order, at every depth.
15
16
  *
@@ -20,14 +21,14 @@ function canonicalize(value) {
20
21
  if (Array.isArray(value)) {
21
22
  return value.map(canonicalize);
22
23
  }
23
- if (value !== null && typeof value === "object") {
24
- const sorted = {};
25
- for (const key of Object.keys(value).sort()) {
26
- sorted[key] = canonicalize(value[key]);
27
- }
28
- return sorted;
24
+ const record = parseUnknownRecord(value);
25
+ if (record === undefined)
26
+ return value;
27
+ const sorted = {};
28
+ for (const key of Object.keys(record).sort()) {
29
+ sorted[key] = canonicalize(record[key]);
29
30
  }
30
- return value;
31
+ return sorted;
31
32
  }
32
33
  /** The sha256 hash of the draft, over a JSON serialization with sorted keys. */
33
34
  export function computeDraftHash(document) {
@@ -47,15 +47,15 @@ export type DraftPlace = "start" | "end" | {
47
47
  after: string;
48
48
  };
49
49
  /** The destination of an add or a move. `parentId` names a section, or the root when it is absent. */
50
- export interface DraftDestination {
50
+ export type DraftDestination = {
51
51
  parentId?: string;
52
52
  place?: DraftPlace;
53
- }
53
+ };
54
54
  /** The add operation value. The payload can be an atom, or a section that carries children. */
55
- export interface AddOperation {
55
+ export type AddOperation = {
56
56
  block: unknown;
57
57
  destination?: DraftDestination;
58
- }
58
+ };
59
59
  /**
60
60
  * The change operation value. A `title` retitles a section target. A `block` replaces an atom target.
61
61
  * The operation stamps the target id on the block, thus an id mismatch is unrepresentable.
@@ -68,14 +68,14 @@ export type ChangeOperation = {
68
68
  block: unknown;
69
69
  });
70
70
  /** The remove operation value. It names one block by its id. */
71
- export interface RemoveOperation {
71
+ export type RemoveOperation = {
72
72
  targetId: string;
73
- }
73
+ };
74
74
  /** The move operation value. It names one block, and a destination with the shape of the add destination. */
75
- export interface MoveOperation {
75
+ export type MoveOperation = {
76
76
  targetId: string;
77
77
  destination?: DraftDestination;
78
- }
78
+ };
79
79
  /**
80
80
  * Set the title of the document.
81
81
  *
@@ -114,15 +114,27 @@ export declare function removeBlock(draft: DraftDocument, operation: RemoveOpera
114
114
  */
115
115
  export declare function moveBlock(draft: DraftDocument, operation: MoveOperation, snapshot: ReportSnapshot): Result<DraftDocument, DraftRefusal>;
116
116
  /** One block, the path of child indices from the root to the block, and the section that holds it. */
117
- export interface Located {
117
+ export type Located = {
118
118
  block: DraftBlock;
119
119
  path: number[];
120
+ /** The path of the container that holds the block, empty when the container is the root. */
121
+ containerPath: number[];
122
+ /** The index of the block inside its container. */
123
+ index: number;
120
124
  /** The section that holds the block, or `undefined` when the block sits at the root. */
121
125
  parent?: DraftSectionBlock;
122
- }
126
+ };
123
127
  /**
124
128
  * Find a block by its id, with the path from the root. The search visits each block one time.
125
129
  *
126
130
  * The read surface needs the same search, thus this is the one find-by-id in the draft model.
127
131
  */
128
132
  export declare function locate(document: DraftDocument, id: string): Located | undefined;
133
+ /**
134
+ * Rebuild the document with new children at a container path, and share each untouched branch.
135
+ *
136
+ * The root holds sections only, thus a root path with a child that is not a section refuses with
137
+ * `atom-at-root` and gives no candidate. Each operation refuses an atom at the root before it builds a
138
+ * candidate, thus no operation reaches this refusal.
139
+ */
140
+ export declare function setChildren(document: DraftDocument, containerPath: number[], children: DraftBlock[]): Result<DraftDocument, DraftRefusal>;
@@ -16,6 +16,7 @@
16
16
  * an anchor id stays stable.
17
17
  */
18
18
  import { err, ok } from "neverthrow";
19
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
19
20
  import { walkBlocks } from "./block-walk.js";
20
21
  import { DraftBlockSchema } from "./draft.js";
21
22
  import { stampReferenceHashes } from "./reference-stamp.js";
@@ -52,8 +53,7 @@ export function addBlock(draft, operation, snapshot) {
52
53
  if (destination.parentIsRoot && block.kind !== "section") {
53
54
  return err({ reason: "atom-at-root", detail: `a ${block.kind} block cannot sit at the root` });
54
55
  }
55
- const candidate = insertAt(draft, destination.containerPath, destination.index, block);
56
- return commit(candidate, block, snapshot);
56
+ return insertAt(draft, destination.containerPath, destination.index, block).andThen((candidate) => commit(candidate, block, snapshot));
57
57
  });
58
58
  }
59
59
  /**
@@ -67,20 +67,19 @@ export function changeBlock(draft, operation, snapshot) {
67
67
  if (target === undefined) {
68
68
  return err({ reason: "unknown-target", detail: `no block holds the id ${operation.targetId}` });
69
69
  }
70
- const containerPath = target.path.slice(0, -1);
71
- const index = target.path[target.path.length - 1];
70
+ const { containerPath, index } = target;
72
71
  if (target.block.kind === "section") {
73
72
  if (!("title" in operation)) {
74
73
  return err({ reason: "payload-kind-mismatch", detail: `the section ${operation.targetId} takes a title, not a block payload` });
75
74
  }
76
75
  const retitled = { ...target.block, title: operation.title };
77
- return commit(replaceAt(draft, containerPath, index, retitled), undefined, snapshot);
76
+ return replaceAt(draft, containerPath, index, retitled).andThen((candidate) => commit(candidate, undefined, snapshot));
78
77
  }
79
78
  if ("title" in operation) {
80
79
  return err({ reason: "payload-kind-mismatch", detail: `the block ${operation.targetId} is an atom, and it takes a full block, not a title` });
81
80
  }
82
- const payload = operation.block;
83
- if (payload === null || typeof payload !== "object") {
81
+ const payload = parseUnknownRecord(operation.block);
82
+ if (payload === undefined) {
84
83
  return err({ reason: "malformed-block", detail: "the payload is not an object" });
85
84
  }
86
85
  // The id stamp sets the target id on the payload before the parse. Thus an id mismatch is
@@ -99,7 +98,8 @@ export function changeBlock(draft, operation, snapshot) {
99
98
  if (parsed.data.kind === "section") {
100
99
  return err({ reason: "payload-kind-mismatch", detail: `the block ${operation.targetId} is an atom, and it cannot take a section payload` });
101
100
  }
102
- return commit(replaceAt(draft, containerPath, index, parsed.data), parsed.data, snapshot);
101
+ const replacement = parsed.data;
102
+ return replaceAt(draft, containerPath, index, replacement).andThen((candidate) => commit(candidate, replacement, snapshot));
103
103
  }
104
104
  /**
105
105
  * Remove one block by its id.
@@ -111,9 +111,8 @@ export function removeBlock(draft, operation, snapshot) {
111
111
  if (target === undefined) {
112
112
  return err({ reason: "unknown-target", detail: `no block holds the id ${operation.targetId}` });
113
113
  }
114
- const containerPath = target.path.slice(0, -1);
115
- const index = target.path[target.path.length - 1];
116
- return commit(removeAt(draft, containerPath, index), undefined, snapshot);
114
+ const { containerPath, index } = target;
115
+ return removeAt(draft, containerPath, index).andThen((candidate) => commit(candidate, undefined, snapshot));
117
116
  }
118
117
  /**
119
118
  * Move one block to a destination.
@@ -129,7 +128,7 @@ export function moveBlock(draft, operation, snapshot) {
129
128
  const movedBlock = target.block;
130
129
  const movedPath = target.path;
131
130
  const place = operation.destination?.place;
132
- if (place !== undefined && typeof place === "object") {
131
+ if (place !== undefined && place !== "start" && place !== "end") {
133
132
  const anchorId = "before" in place ? place.before : place.after;
134
133
  if (anchorId === operation.targetId) {
135
134
  return err({ reason: "unknown-target", detail: `the block ${operation.targetId} cannot anchor its own move` });
@@ -144,13 +143,11 @@ export function moveBlock(draft, operation, snapshot) {
144
143
  if (movedBlock.kind === "section" && isPrefix(movedPath, destination.containerPath)) {
145
144
  return err({ reason: "cycle", detail: `the section ${operation.targetId} cannot move into its own subtree` });
146
145
  }
147
- const afterRemove = removeAt(draft, movedPath.slice(0, -1), movedPath[movedPath.length - 1]);
148
146
  // The removal shifts the sibling indices of the old parent. Thus the destination resolves again
149
147
  // against the reduced tree, and the fresh path and index address the correct place.
150
- return resolveDestination(afterRemove, operation.destination).andThen((landing) => {
151
- const candidate = insertAt(afterRemove, landing.containerPath, landing.index, movedBlock);
152
- return commit(candidate, undefined, snapshot);
153
- });
148
+ return removeAt(draft, target.containerPath, target.index).andThen((afterRemove) => resolveDestination(afterRemove, operation.destination)
149
+ .andThen((landing) => insertAt(afterRemove, landing.containerPath, landing.index, movedBlock))
150
+ .andThen((candidate) => commit(candidate, undefined, snapshot)));
154
151
  });
155
152
  }
156
153
  /**
@@ -162,14 +159,14 @@ export function moveBlock(draft, operation, snapshot) {
162
159
  function resolveDestination(document, destination) {
163
160
  const place = destination?.place ?? "end";
164
161
  const parentId = destination?.parentId;
165
- if (typeof place === "object") {
162
+ if (place !== "start" && place !== "end") {
166
163
  const anchorId = "before" in place ? place.before : place.after;
167
164
  const anchor = locate(document, anchorId);
168
165
  if (anchor === undefined) {
169
166
  return err({ reason: "unknown-target", detail: `no block holds the anchor id ${anchorId}` });
170
167
  }
171
- const containerPath = anchor.path.slice(0, -1);
172
- const anchorIndex = anchor.path[anchor.path.length - 1];
168
+ const containerPath = anchor.containerPath;
169
+ const anchorIndex = anchor.index;
173
170
  const parentIsRoot = containerPath.length === 0;
174
171
  if (parentId !== undefined && idAtPath(document, containerPath) !== parentId) {
175
172
  return err({ reason: "unknown-target", detail: `the parent ${parentId} does not hold the anchor ${anchorId}` });
@@ -235,11 +232,11 @@ export function locate(document, id) {
235
232
  return locateInBlocks(document.sections, id, [], undefined);
236
233
  }
237
234
  function locateInBlocks(blocks, id, prefix, parent) {
238
- for (let index = 0; index < blocks.length; index++) {
239
- const block = blocks[index];
235
+ for (const [index, block] of blocks.entries()) {
240
236
  const path = [...prefix, index];
241
237
  if (block.id === id) {
242
- return parent === undefined ? { block, path } : { block, path, parent };
238
+ const located = { block, path, containerPath: prefix, index };
239
+ return parent === undefined ? located : { ...located, parent };
243
240
  }
244
241
  if (block.kind === "section") {
245
242
  const found = locateInBlocks(block.blocks, id, path, block);
@@ -270,7 +267,7 @@ function getChildren(document, containerPath) {
270
267
  let blocks = document.sections;
271
268
  for (const index of containerPath) {
272
269
  const node = blocks[index];
273
- if (node.kind !== "section") {
270
+ if (node === undefined || node.kind !== "section") {
274
271
  // A container path names a section at each step, thus this branch never runs.
275
272
  return [];
276
273
  }
@@ -278,19 +275,36 @@ function getChildren(document, containerPath) {
278
275
  }
279
276
  return blocks;
280
277
  }
281
- /** Rebuild the document with new children at a container path, and share each untouched branch. */
282
- function setChildren(document, containerPath, children) {
278
+ /** Give `true` when every member of the list is a section. The root of a draft holds sections alone. */
279
+ function isSectionBlocks(blocks) {
280
+ return blocks.every((block) => block.kind === "section");
281
+ }
282
+ /**
283
+ * Rebuild the document with new children at a container path, and share each untouched branch.
284
+ *
285
+ * The root holds sections only, thus a root path with a child that is not a section refuses with
286
+ * `atom-at-root` and gives no candidate. Each operation refuses an atom at the root before it builds a
287
+ * candidate, thus no operation reaches this refusal.
288
+ */
289
+ export function setChildren(document, containerPath, children) {
283
290
  if (containerPath.length === 0) {
284
- // The root holds sections only. Each operation enforces that rule before it builds a candidate.
285
- return { ...document, sections: children };
291
+ if (!isSectionBlocks(children)) {
292
+ const atom = children.find((child) => child.kind !== "section");
293
+ return err({ reason: "atom-at-root", detail: `a ${atom?.kind ?? "non-section"} block cannot sit at the root` });
294
+ }
295
+ return ok({ ...document, sections: children });
286
296
  }
287
- return { ...document, sections: setChildrenInBlocks(document.sections, containerPath, children) };
297
+ return ok({ ...document, sections: setChildrenInBlocks(document.sections, containerPath, children) });
288
298
  }
289
299
  function setChildrenInBlocks(blocks, containerPath, children) {
290
300
  const head = containerPath[0];
301
+ if (head === undefined) {
302
+ // setChildren splits off the root before it calls here, thus the path carries an index.
303
+ return blocks;
304
+ }
291
305
  const rest = containerPath.slice(1);
292
306
  const target = blocks[head];
293
- if (target.kind !== "section") {
307
+ if (target === undefined || target.kind !== "section") {
294
308
  // A container path names a section at each step, thus this branch never runs.
295
309
  return blocks;
296
310
  }
@@ -349,6 +363,10 @@ function isPrefix(prefix, path) {
349
363
  /** Reduce a parse failure to a `malformed-block` refusal that names the first fault. */
350
364
  function malformed(error) {
351
365
  const issue = error.issues[0];
366
+ if (issue === undefined) {
367
+ // A ZodError carries at least one issue, thus this branch never runs.
368
+ return { reason: "malformed-block", detail: "the block does not match the draft grammar" };
369
+ }
352
370
  const location = issue.path.map((segment) => String(segment)).join(".");
353
371
  const detail = location.length > 0 ? `${location}: ${issue.message}` : issue.message;
354
372
  return { reason: "malformed-block", detail };
@@ -13,18 +13,19 @@
13
13
  * A read gives each binding with no hash. The pinned snapshot owns that value, thus an echoed hash would
14
14
  * give the agent a value to mistype.
15
15
  */
16
- import type { AuthoringAtomBlock } from "./authoring-grammar.js";
16
+ import { type Result } from "neverthrow";
17
+ import { type AuthoringAtomBlock } from "./authoring-grammar.js";
17
18
  import type { DraftBlock, DraftDocument } from "./draft.js";
18
19
  /**
19
20
  * One outline entry. It carries the id, the kind, the nesting depth, and a short label. A top-level
20
21
  * section is depth 0. The entry carries no binding, thus the outline stays small.
21
22
  */
22
- export interface OutlineEntry {
23
+ export type OutlineEntry = {
23
24
  id: string;
24
25
  kind: DraftBlock["kind"];
25
26
  depth: number;
26
27
  label: string;
27
- }
28
+ };
28
29
  /**
29
30
  * A section as the read surface gives it: its own fields, and the id of each child in document order.
30
31
  *
@@ -32,12 +33,12 @@ export interface OutlineEntry {
32
33
  * subtree would be a second copy of the outline, and a read of a top-level section would return the whole
33
34
  * draft.
34
35
  */
35
- export interface ShallowSection {
36
+ export type ShallowSection = {
36
37
  kind: "section";
37
38
  id: string;
38
39
  title: string;
39
40
  childIds: string[];
40
- }
41
+ };
41
42
  /** One block as the read surface gives it. An atom reads in full and hash-free, and a section reads shallow. */
42
43
  export type ReadableBlock = AuthoringAtomBlock | ShallowSection;
43
44
  /**
@@ -55,8 +56,19 @@ export declare function buildOutline(draft: DraftDocument): OutlineEntry[];
55
56
  * `depth` is the depth of the children, thus the entries read the same as the entries of a full outline.
56
57
  */
57
58
  export declare function childOutline(blocks: readonly DraftBlock[], depth: number): OutlineEntry[];
59
+ /**
60
+ * A stored atom that the authoring grammar refuses. The draft grammar admits every stored atom, and the
61
+ * read gives the atom in the authoring grammar. The two grammars differ in the stamped hash alone, thus
62
+ * this failure shows drift between them, not a missing block.
63
+ */
64
+ export type AtomRefusedByAuthoringGrammar = {
65
+ type: "atom-refused-by-authoring-grammar";
66
+ id: string;
67
+ cause: unknown;
68
+ };
58
69
  /**
59
70
  * Read one block by its id. An atom gives the block with its bindings, and each binding gives no hash. A
60
- * section gives its own fields and the id of each child. A block that no id holds gives `undefined`.
71
+ * section gives its own fields and the id of each child. A block that no id holds gives `undefined`. A
72
+ * stored atom that the authoring grammar refuses gives an error that names the id.
61
73
  */
62
- export declare function readBlock(draft: DraftDocument, id: string): ReadableBlock | undefined;
74
+ export declare function readBlock(draft: DraftDocument, id: string): Result<ReadableBlock | undefined, AtomRefusedByAuthoringGrammar>;
@@ -13,7 +13,9 @@
13
13
  * A read gives each binding with no hash. The pinned snapshot owns that value, thus an echoed hash would
14
14
  * give the agent a value to mistype.
15
15
  */
16
+ import { err, ok } from "neverthrow";
16
17
  import { locate } from "./draft-operations.js";
18
+ import { AuthoringBlockSchema } from "./authoring-grammar.js";
17
19
  import { stripReferenceHashes } from "./reference-stamp.js";
18
20
  /** The label keeps a prose head of at most this many code points. A clipped label ends with the marker. */
19
21
  const PROSE_CLIP = 80;
@@ -31,7 +33,7 @@ const CLIP_MARKER = "…";
31
33
  * were the whole one.
32
34
  */
33
35
  function clip(text) {
34
- const points = [...text];
36
+ const points = Array.from(text);
35
37
  if (points.length <= PROSE_CLIP) {
36
38
  return text;
37
39
  }
@@ -109,17 +111,25 @@ export function childOutline(blocks, depth) {
109
111
  }
110
112
  /**
111
113
  * Read one block by its id. An atom gives the block with its bindings, and each binding gives no hash. A
112
- * section gives its own fields and the id of each child. A block that no id holds gives `undefined`.
114
+ * section gives its own fields and the id of each child. A block that no id holds gives `undefined`. A
115
+ * stored atom that the authoring grammar refuses gives an error that names the id.
113
116
  */
114
117
  export function readBlock(draft, id) {
115
118
  const found = locate(draft, id)?.block;
116
119
  if (found === undefined) {
117
- return undefined;
120
+ return ok(undefined);
118
121
  }
119
122
  if (found.kind === "section") {
120
- return { kind: "section", id: found.id, title: found.title, childIds: found.blocks.map((child) => child.id) };
123
+ return ok({ kind: "section", id: found.id, title: found.title, childIds: found.blocks.map((child) => child.id) });
121
124
  }
122
125
  // The stored atom and the read atom differ in the stamped hash alone, and the walk removes that field.
123
- // Thus the assertion states what the walk did.
124
- return stripReferenceHashes(found);
126
+ const atom = AuthoringBlockSchema.safeParse(stripReferenceHashes(found));
127
+ if (!atom.success) {
128
+ return err({ type: "atom-refused-by-authoring-grammar", id, cause: atom.error });
129
+ }
130
+ if (atom.data.kind === "section") {
131
+ // The walk keeps the kind of a stored atom, thus this branch never runs. It refuses and does not give a section as an atom.
132
+ return err({ type: "atom-refused-by-authoring-grammar", id, cause: atom.data });
133
+ }
134
+ return ok(atom.data);
125
135
  }