@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
@@ -1,10 +1,10 @@
1
1
  import type { CitationCandidateCluster, CitationInput, CitationRecord, NormalizedCitation } from "./types.js";
2
- export interface CitationMatchConfig {
2
+ export type CitationMatchConfig = {
3
3
  readonly minimumScore: number;
4
4
  readonly separationMargin: number;
5
5
  readonly clusterSimilarity: number;
6
6
  readonly relatedVersionSimilarity: number;
7
- }
7
+ };
8
8
  export declare const DEFAULT_MATCH_CONFIG: CitationMatchConfig;
9
9
  export declare function tokenSimilarity(left: string, right: string): number;
10
10
  export declare function clusterCitationRecords(input: CitationInput, normalized: NormalizedCitation, records: readonly CitationRecord[], config?: CitationMatchConfig): CitationCandidateCluster[];
@@ -1,4 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { presentAt } from "../lib/present.js";
2
3
  import { authorNamesMatch, normalizeAuthor, normalizeComparable } from "./normalize.js";
3
4
  export const DEFAULT_MATCH_CONFIG = {
4
5
  minimumScore: 0.72,
@@ -36,7 +37,11 @@ function authorSimilarity(left, right) {
36
37
  return intersection / Math.min(a.length, b.length);
37
38
  }
38
39
  function identifierEntries(identifiers) {
39
- return Object.entries(identifiers).flatMap(([kind, value]) => (value === undefined ? [] : [`${kind}:${value.toLocaleLowerCase("en-US")}`]));
40
+ // Object.entries types the values as `string`, but a record can carry a key set to
41
+ // `undefined` (the clients build `identifiers: { doi }` verbatim), so the entry value
42
+ // is widened to keep the skip of undefined values.
43
+ const entries = Object.entries(identifiers);
44
+ return entries.flatMap(([kind, value]) => (value === undefined ? [] : [`${kind}:${value.toLocaleLowerCase("en-US")}`]));
40
45
  }
41
46
  function sharesStrongIdentifier(left, right) {
42
47
  const rightIds = new Set(identifierEntries(right.identifiers));
@@ -69,7 +74,7 @@ class UnionFind {
69
74
  this.parent = Array.from({ length: size }, (_, index) => index);
70
75
  }
71
76
  find(index) {
72
- const parent = this.parent[index];
77
+ const parent = presentAt(this.parent, index, "the parent link");
73
78
  if (parent === index)
74
79
  return index;
75
80
  const root = this.find(parent);
@@ -111,8 +116,8 @@ function containsId(cluster, key) {
111
116
  function addRelatedVersions(clusters, config) {
112
117
  for (let left = 0; left < clusters.length; left += 1) {
113
118
  for (let right = left + 1; right < clusters.length; right += 1) {
114
- const a = clusters[left];
115
- const b = clusters[right];
119
+ const a = presentAt(clusters, left, "the left cluster");
120
+ const b = presentAt(clusters, right, "the right cluster");
116
121
  const similarity = Math.max(...a.records.flatMap((one) => b.records.map((two) => recordSimilarity(one, two))));
117
122
  if (similarity < config.relatedVersionSimilarity)
118
123
  continue;
@@ -139,8 +144,8 @@ export function clusterCitationRecords(input, normalized, records, config = DEFA
139
144
  const union = new UnionFind(records.length);
140
145
  for (let left = 0; left < records.length; left += 1) {
141
146
  for (let right = left + 1; right < records.length; right += 1) {
142
- const a = records[left];
143
- const b = records[right];
147
+ const a = presentAt(records, left, "the left record");
148
+ const b = presentAt(records, right, "the right record");
144
149
  if (sharesStrongIdentifier(a, b))
145
150
  union.union(left, right);
146
151
  else if ((!hasStrongIdentifier(a) || !hasStrongIdentifier(b)) && recordSimilarity(a, b) >= config.clusterSimilarity)
@@ -150,7 +155,7 @@ export function clusterCitationRecords(input, normalized, records, config = DEFA
150
155
  const grouped = new Map();
151
156
  for (let index = 0; index < records.length; index += 1) {
152
157
  const root = union.find(index);
153
- grouped.set(root, [...(grouped.get(root) ?? []), records[index]]);
158
+ grouped.set(root, [...(grouped.get(root) ?? []), presentAt(records, index, "the record")]);
154
159
  }
155
160
  const clusters = [...grouped.values()].map((members) => ({
156
161
  id: stableClusterId(members),
@@ -1,27 +1,28 @@
1
1
  import { CitationInputSchema } from "./types.js";
2
+ import { collapseWhitespace as collapseText, trimTrailingOf } from "../lib/text.js";
2
3
  // Each registry defines its own identifier syntax, and each is matched here rather than parsed:
3
4
  // a citation string is prose, so the identifier has to be found inside it, not read off a field.
4
5
  // The DOI suffix is deliberately permissive — the registry allows nearly any character in it, so
5
6
  // there is no delimiter to stop at, and `trimDoiPunctuation` walks back the sentence punctuation
6
7
  // and brackets a greedy match swallows. PMID and arXiv anchor instead, having fixed shapes.
8
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the DOI suffix is deliberately permissive because the registry allows nearly any character in it.
7
9
  const DOI_PATTERN = /(?:https?:\/\/(?:dx\.)?doi\.org\/|doi\s*:\s*)?(10\.\d{4,9}\/[^\s<>"']+)/i;
10
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- a PMID is a bounded digit run behind an optional `pmid:` prefix.
8
11
  const PMID_PATTERN = /^(?:pmid\s*:\s*)?(\d{1,9})$/i;
12
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the two arXiv id shapes (new-style and old-style) behind their optional URL and `arxiv:` spellings.
9
13
  const ARXIV_PATTERN = /^(?:https?:\/\/arxiv\.org\/(?:abs|pdf)\/|arxiv\s*:\s*)?((?:\d{4}\.\d{4,5}|[a-z-]+(?:\.[a-z-]+)?\/\d{7})(?:v\d+)?)(?:\.pdf)?$/i;
10
14
  function collapseWhitespace(value) {
11
- return value.normalize("NFKC").replace(/\s+/g, " ").trim();
15
+ return collapseText(value.normalize("NFKC"));
12
16
  }
17
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- punctuation and symbols carry no citation identity; they fold to spaces before comparison.
18
+ const PUNCTUATION_AND_SYMBOLS = /[\p{P}\p{S}]+/gu;
13
19
  export function normalizeComparable(value) {
14
- return collapseWhitespace(value)
15
- .toLocaleLowerCase("en-US")
16
- .replace(/[\p{P}\p{S}]+/gu, " ")
17
- .replace(/\s+/g, " ")
18
- .trim();
20
+ return collapseText(collapseWhitespace(value).toLocaleLowerCase("en-US").replace(PUNCTUATION_AND_SYMBOLS, " "));
19
21
  }
22
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- generational suffixes are noise in author comparison; the word boundaries keep the letters inside longer tokens.
23
+ const NAME_SUFFIX_WORDS = /\b(?:jr|sr|ii|iii|iv)\b/g;
20
24
  export function normalizeAuthor(value) {
21
- return normalizeComparable(value)
22
- .replace(/\b(?:jr|sr|ii|iii|iv)\b/g, "")
23
- .replace(/\s+/g, " ")
24
- .trim();
25
+ return collapseText(normalizeComparable(value).replace(NAME_SUFFIX_WORDS, ""));
25
26
  }
26
27
  function authorEvidence(value) {
27
28
  const tokens = normalizeAuthor(value).split(" ").filter(Boolean);
@@ -40,7 +41,7 @@ const SPELLED_OUT_MINIMUM = 3;
40
41
  * contributes only the initial it would abbreviate to.
41
42
  */
42
43
  function givenLetters(leftover, initials) {
43
- return [...initials, ...leftover.flatMap((word) => (word.length < SPELLED_OUT_MINIMUM ? [...word] : [word[0]]))].sort();
44
+ return [...initials, ...leftover.flatMap((word) => (word.length < SPELLED_OUT_MINIMUM ? Array.from(word) : [word.charAt(0)]))].sort();
44
45
  }
45
46
  function containsLetters(available, required) {
46
47
  const pool = [...available];
@@ -81,7 +82,7 @@ export function authorNamesMatch(left, right) {
81
82
  return lettersA.length <= lettersB.length ? containsLetters(lettersB, lettersA) : containsLetters(lettersA, lettersB);
82
83
  }
83
84
  function trimDoiPunctuation(value) {
84
- let result = value.replace(/[.,;]+$/g, "");
85
+ let result = trimTrailingOf(value, ".,;");
85
86
  const pairs = [
86
87
  ["(", ")"],
87
88
  ["[", "]"],
@@ -102,28 +103,36 @@ export function extractDoi(value) {
102
103
  export function extractPmid(value) {
103
104
  return collapseWhitespace(value).match(PMID_PATTERN)?.[1];
104
105
  }
106
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- an arXiv id carries a version suffix (`v3`) that the registry lookup must not see.
107
+ const ARXIV_VERSION_SUFFIX = /v\d+$/i;
105
108
  export function extractArxivId(value) {
106
109
  const match = collapseWhitespace(value).match(ARXIV_PATTERN)?.[1];
107
- return match?.toLocaleLowerCase("en-US").replace(/v\d+$/i, "");
110
+ return match?.toLocaleLowerCase("en-US").replace(ARXIV_VERSION_SUFFIX, "");
108
111
  }
112
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the phrase marks a personal communication; the boundaries keep partial words from matching.
113
+ const PERSONAL_COMMUNICATION = /\bpersonal communication\b/;
114
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the phrases that mark work with no registered record.
115
+ const UNPUBLISHED_WORK = /\bunpublished (?:data|work|manuscript)\b/;
116
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the phrases that mark work accepted but not yet registered.
117
+ const IN_PRESS = /\b(?:in press|forthcoming)\b/;
109
118
  function classifyUnsupportedWork(value) {
110
119
  const normalized = normalizeComparable(value);
111
- if (/\bpersonal communication\b/.test(normalized))
120
+ if (PERSONAL_COMMUNICATION.test(normalized))
112
121
  return "personal_communication";
113
- if (/\bunpublished (?:data|work|manuscript)\b/.test(normalized))
122
+ if (UNPUBLISHED_WORK.test(normalized))
114
123
  return "unpublished";
115
- if (/\b(?:in press|forthcoming)\b/.test(normalized))
124
+ if (IN_PRESS.test(normalized))
116
125
  return "unregistered_in_press";
117
126
  return undefined;
118
127
  }
119
128
  function normalizedSupplied(input) {
120
129
  return {
121
- ...(input.title === undefined ? {} : { title: normalizeComparable(input.title) }),
122
- ...(input.authors === undefined ? {} : { authors: input.authors.map(normalizeAuthor).filter(Boolean) }),
123
- ...(input.year === undefined ? {} : { year: input.year }),
124
- ...(input.venue === undefined ? {} : { venue: normalizeComparable(input.venue) }),
125
- ...(input.volume === undefined ? {} : { volume: normalizeComparable(input.volume) }),
126
- ...(input.firstPage === undefined ? {} : { firstPage: normalizeComparable(input.firstPage) }),
130
+ title: input.title === undefined ? undefined : normalizeComparable(input.title),
131
+ authors: input.authors?.map(normalizeAuthor).filter(Boolean),
132
+ year: input.year,
133
+ venue: input.venue === undefined ? undefined : normalizeComparable(input.venue),
134
+ volume: input.volume === undefined ? undefined : normalizeComparable(input.volume),
135
+ firstPage: input.firstPage === undefined ? undefined : normalizeComparable(input.firstPage),
127
136
  };
128
137
  }
129
138
  export function normalizeCitation(unparsed) {
@@ -155,12 +164,12 @@ export function normalizeCitation(unparsed) {
155
164
  query: normalizeComparable(citation),
156
165
  kind,
157
166
  identifiers: {
158
- ...(doi === undefined || !identified ? {} : { doi }),
159
- ...(pmid === undefined || !identified ? {} : { pmid }),
160
- ...(arxiv === undefined || !identified ? {} : { arxiv }),
167
+ doi: doi === undefined || !identified ? undefined : doi,
168
+ pmid: pmid === undefined || !identified ? undefined : pmid,
169
+ arxiv: arxiv === undefined || !identified ? undefined : arxiv,
161
170
  },
162
171
  supplied: normalizedSupplied(input),
163
- ...(unsupportedWorkKind === undefined ? {} : { unsupportedWorkKind }),
172
+ unsupportedWorkKind,
164
173
  };
165
174
  }
166
175
  /**
@@ -1,4 +1,8 @@
1
1
  const SOURCES = ["doi_registry", "crossref", "pubmed", "arxiv", "semantic_scholar"];
2
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the words "arxiv" or "preprint" anywhere in free prose flag a preprint; the boundaries keep them inside longer words out.
3
+ const ARXIV_PREPRINT_HINT = /\b(?:arxiv|preprint)\b/i;
4
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the same hint read off a venue string.
5
+ const ARXIV_VENUE_HINT = /\barxiv\b/i;
2
6
  function item(source, applicable, operation, reason, candidateGeneration = false) {
3
7
  return { source, applicable, operation: applicable ? operation : "none", candidateGeneration: applicable && candidateGeneration, reason };
4
8
  }
@@ -9,11 +13,11 @@ function enoughForEcitMatch(input) {
9
13
  return disambiguators >= 2;
10
14
  }
11
15
  function indicatesArxiv(input, normalized) {
12
- return /\b(?:arxiv|preprint)\b/i.test(input.citation) || /\barxiv\b/i.test(input.venue ?? "") || normalized.identifiers.arxiv !== undefined;
16
+ return ARXIV_PREPRINT_HINT.test(input.citation) || ARXIV_VENUE_HINT.test(input.venue ?? "") || normalized.identifiers.arxiv !== undefined;
13
17
  }
14
18
  export function planCitationSources(input, normalized) {
15
19
  if (normalized.unsupportedWorkKind !== undefined) {
16
- return SOURCES.map((source) => item(source, false, "none", `unsupported work kind: ${normalized.unsupportedWorkKind}`));
20
+ return SOURCES.map((source) => item(source, false, "none", `unsupported work kind: ${String(normalized.unsupportedWorkKind)}`));
17
21
  }
18
22
  if (normalized.kind === "doi") {
19
23
  return [
@@ -1,10 +1,10 @@
1
1
  import { type CitationMatchConfig } from "./match.js";
2
2
  import { type RateLimitConfig, type RateLimitRuntime } from "../lib/rate-limit.js";
3
3
  import { type CitationResolver, type CitationSource, type CitationSourceClient } from "./types.js";
4
- export interface CitationResolverSourceConfig extends Partial<RateLimitConfig> {
4
+ export type CitationResolverSourceConfig = Partial<RateLimitConfig> & {
5
5
  readonly enabled?: boolean;
6
- }
7
- export interface CitationResolverConfig {
6
+ };
7
+ export type CitationResolverConfig = {
8
8
  readonly maxBatchSize?: number;
9
9
  readonly timeoutMs?: number;
10
10
  readonly cache?: {
@@ -20,9 +20,9 @@ export interface CitationResolverConfig {
20
20
  };
21
21
  readonly ncbiApiKey?: string;
22
22
  readonly semanticScholarApiKey?: string;
23
- }
24
- export interface CitationResolverDependencies extends RateLimitRuntime {
23
+ };
24
+ export type CitationResolverDependencies = RateLimitRuntime & {
25
25
  readonly fetch?: typeof globalThis.fetch;
26
26
  readonly clients?: readonly CitationSourceClient[];
27
- }
27
+ };
28
28
  export declare function createCitationResolver(config?: CitationResolverConfig, deps?: CitationResolverDependencies): CitationResolver;
@@ -1,3 +1,5 @@
1
+ import { errorMessageOf, errorOf } from "../lib/thrown.js";
2
+ import { textOf } from "../lib/unknown-text.js";
1
3
  import { aggregateCitationResolution } from "./aggregate.js";
2
4
  import { BoundedTtlCache } from "../lib/cache.js";
3
5
  import { createArxivCitationClient } from "./clients/arxiv.js";
@@ -10,6 +12,7 @@ import { DEFAULT_MATCH_CONFIG } from "./match.js";
10
12
  import { citationLookupKey, normalizeCitation } from "./normalize.js";
11
13
  import { planCitationSources } from "./plan.js";
12
14
  import { createRateLimitSchedule } from "../lib/rate-limit.js";
15
+ import { presentAt, presentFind, presentFirst, presentGet } from "../lib/present.js";
13
16
  import { CitationInputSchema, } from "./types.js";
14
17
  const SOURCE_PLAN_VERSION = "citation-plan-v1";
15
18
  const SOURCE_ORDER = ["doi_registry", "crossref", "pubmed", "arxiv", "semantic_scholar"];
@@ -21,16 +24,16 @@ const DEFAULT_RATE_LIMITS = {
21
24
  semantic_scholar: { maxConcurrency: 1, requestsPerSecond: 1, maxRetries: 2, maxRetryDelayMs: 10_000 },
22
25
  };
23
26
  function mergedRateLimit(source, config) {
24
- return { ...DEFAULT_RATE_LIMITS[source], ...(config.sources?.[source] ?? {}) };
27
+ return { ...DEFAULT_RATE_LIMITS[source], ...config.sources?.[source] };
25
28
  }
26
29
  function createDefaultClients(config, deps) {
27
- const runtime = { ...(deps.now ? { now: deps.now } : {}), ...(deps.sleep ? { sleep: deps.sleep } : {}) };
30
+ const runtime = { now: deps.now, sleep: deps.sleep };
28
31
  const http = (source) => {
29
32
  const limits = mergedRateLimit(source, config);
30
33
  return {
31
- ...(deps.fetch === undefined ? {} : { fetch: deps.fetch }),
32
- ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),
33
- ...(deps.sleep ? { sleep: deps.sleep } : {}),
34
+ fetch: deps.fetch,
35
+ timeoutMs: config.timeoutMs,
36
+ sleep: deps.sleep,
34
37
  schedule: createRateLimitSchedule(limits, runtime),
35
38
  maxRetries: limits.maxRetries,
36
39
  maxRetryDelayMs: limits.maxRetryDelayMs,
@@ -40,17 +43,17 @@ function createDefaultClients(config, deps) {
40
43
  createDoiRegistryClient(http("doi_registry")),
41
44
  createCrossrefClient({
42
45
  ...http("crossref"),
43
- ...(config.crossref?.mailto === undefined ? {} : { mailto: config.crossref.mailto }),
44
- ...(config.crossref?.userAgent === undefined ? {} : { userAgent: config.crossref.userAgent }),
46
+ mailto: config.crossref?.mailto,
47
+ userAgent: config.crossref?.userAgent,
45
48
  }),
46
49
  createPubmedCitationClient({
47
50
  ...http("pubmed"),
48
- ...(config.ncbiApiKey === undefined ? {} : { apiKey: config.ncbiApiKey }),
51
+ apiKey: config.ncbiApiKey,
49
52
  }),
50
53
  createArxivCitationClient(http("arxiv")),
51
54
  createSemanticScholarCitationClient({
52
55
  ...http("semantic_scholar"),
53
- ...(config.semanticScholarApiKey === undefined ? {} : { apiKey: config.semanticScholarApiKey }),
56
+ apiKey: config.semanticScholarApiKey,
54
57
  }),
55
58
  ];
56
59
  }
@@ -60,7 +63,7 @@ function cacheable(outcomes) {
60
63
  return outcomes.some((outcome) => outcome.records.length > 0) ? "positive" : "negative";
61
64
  }
62
65
  function abortReason(signal) {
63
- return signal.reason instanceof Error ? signal.reason : new DOMException("The operation was aborted", "AbortError");
66
+ return errorOf(signal.reason) ?? new DOMException("The operation was aborted", "AbortError");
64
67
  }
65
68
  function withCallerSignal(promise, signal) {
66
69
  if (signal === undefined)
@@ -75,6 +78,7 @@ function withCallerSignal(promise, signal) {
75
78
  resolve(value);
76
79
  }, (error) => {
77
80
  signal.removeEventListener("abort", onAbort);
81
+ // oxlint-disable-next-line typescript/prefer-promise-reject-errors -- the rejection reason is the thrown value itself; the awaiter reads its identity, and a wrapper would erase it.
78
82
  reject(error);
79
83
  });
80
84
  });
@@ -105,12 +109,14 @@ function registrationAgencyEvidence(outcome) {
105
109
  */
106
110
  async function runSource(client, requests, signal) {
107
111
  const unavailable = (request, detail) => sourceOutcome(client.source, request.plan.operation, "unavailable", 0, [], detail);
108
- const describe = (error) => (error instanceof Error ? error.message : String(error));
112
+ const describe = (error) => errorMessageOf(error) ?? textOf(error);
109
113
  if (client.resolveMany === undefined) {
110
114
  const settled = await Promise.allSettled(requests.map((request) => client.resolve(request, signal)));
111
115
  if (signal?.aborted)
112
116
  throw abortReason(signal);
113
- return settled.map((outcome, index) => (outcome.status === "fulfilled" ? outcome.value : unavailable(requests[index], describe(outcome.reason))));
117
+ return settled.map((outcome, index) => outcome.status === "fulfilled"
118
+ ? outcome.value
119
+ : unavailable(presentAt(requests, index, "the request for the settled outcome"), describe(outcome.reason)));
114
120
  }
115
121
  try {
116
122
  const resolved = await client.resolveMany(requests, signal);
@@ -134,7 +140,7 @@ export function createCitationResolver(config = {}, deps = {}) {
134
140
  };
135
141
  const cache = new BoundedTtlCache(cacheConfig.maximum, now);
136
142
  const inFlight = new Map();
137
- const matchConfig = { ...DEFAULT_MATCH_CONFIG, ...(config.match ?? {}) };
143
+ const matchConfig = { ...DEFAULT_MATCH_CONFIG, ...config.match };
138
144
  const maxBatchSize = config.maxBatchSize ?? 200;
139
145
  const keyFor = (input) => `${SOURCE_PLAN_VERSION}:${citationLookupKey(input)}`;
140
146
  async function resolveUncachedBatch(entries, signal) {
@@ -145,10 +151,11 @@ export function createCitationResolver(config = {}, deps = {}) {
145
151
  const requests = [];
146
152
  const requestIndices = [];
147
153
  for (let index = 0; index < entries.length; index += 1) {
148
- const entry = entries[index];
149
- const plan = entry.plans.find((candidate) => candidate.source === source);
154
+ const entry = presentAt(entries, index, "the pending citation entry");
155
+ const entryOutcomes = presentAt(outcomes, index, "the outcome map of the pending citation entry");
156
+ const plan = presentFind(entry.plans, (candidate) => candidate.source === source, `the plan for ${source}`);
150
157
  if (!plan.applicable || sourceConfig?.enabled === false || client === undefined) {
151
- outcomes[index].set(source, sourceConfig?.enabled === false
158
+ entryOutcomes.set(source, sourceConfig?.enabled === false
152
159
  ? notApplicableOutcome({ ...plan, applicable: false, operation: "none", reason: "source disabled by resolver configuration" })
153
160
  : client === undefined
154
161
  ? notApplicableOutcome({ ...plan, applicable: false, operation: "none", reason: "source client unavailable" })
@@ -159,7 +166,7 @@ export function createCitationResolver(config = {}, deps = {}) {
159
166
  input: entry.input,
160
167
  normalized: entry.normalized,
161
168
  plan,
162
- registrationAgency: registrationAgencyEvidence(outcomes[index].get("doi_registry")),
169
+ registrationAgency: registrationAgencyEvidence(entryOutcomes.get("doi_registry")),
163
170
  });
164
171
  requestIndices.push(index);
165
172
  }
@@ -167,10 +174,12 @@ export function createCitationResolver(config = {}, deps = {}) {
167
174
  continue;
168
175
  const resolved = await runSource(client, requests, signal);
169
176
  for (let requestIndex = 0; requestIndex < resolved.length; requestIndex += 1) {
170
- outcomes[requestIndices[requestIndex]].set(source, resolved[requestIndex]);
177
+ const entryIndex = presentAt(requestIndices, requestIndex, "the entry index of the request");
178
+ presentAt(outcomes, entryIndex, "the outcome map of the pending citation entry").set(source, presentAt(resolved, requestIndex, "the resolved outcome"));
171
179
  }
172
180
  }
173
- return entries.map((entry, index) => SOURCE_ORDER.map((source) => outcomes[index].get(source) ?? notApplicableOutcome(entry.plans.find((plan) => plan.source === source))));
181
+ return entries.map((entry, index) => SOURCE_ORDER.map((source) => presentAt(outcomes, index, "the outcome map of the pending citation entry").get(source) ??
182
+ notApplicableOutcome(presentFind(entry.plans, (plan) => plan.source === source, `the plan for ${source}`))));
174
183
  }
175
184
  async function resolveMany(inputs, options = {}) {
176
185
  if (inputs.length > maxBatchSize)
@@ -200,15 +209,15 @@ export function createCitationResolver(config = {}, deps = {}) {
200
209
  pending.set(key, running);
201
210
  continue;
202
211
  }
203
- const input = firstByKey.get(key);
212
+ const input = presentGet(firstByKey, key, "the first input for the lookup key");
204
213
  const normalized = normalizeCitation(input);
205
214
  uncached.push({ key, entry: { input, normalized, plans: planCitationSources(input, normalized) } });
206
215
  }
207
216
  if (uncached.length > 0) {
208
217
  const batch = resolveUncachedBatch(uncached.map(({ entry }) => entry), options.signal);
209
218
  for (let index = 0; index < uncached.length; index += 1) {
210
- const { key } = uncached[index];
211
- const one = batch.then((results) => results[index]);
219
+ const { key } = presentAt(uncached, index, "the uncached entry");
220
+ const one = batch.then((results) => presentAt(results, index, "the outcome batch of the uncached entry"));
212
221
  const tracked = one.then((outcomes) => {
213
222
  const kind = cacheable(outcomes);
214
223
  if (kind !== undefined)
@@ -225,14 +234,14 @@ export function createCitationResolver(config = {}, deps = {}) {
225
234
  }
226
235
  const outcomesByKey = new Map();
227
236
  await Promise.all(uniqueOrder.map(async (key) => {
228
- outcomesByKey.set(key, await withCallerSignal(pending.get(key), options.signal));
237
+ outcomesByKey.set(key, await withCallerSignal(presentGet(pending, key, "the pending promise for the lookup key"), options.signal));
229
238
  }));
230
239
  // Aggregated per input, never per shared lookup: comparisons and the
231
240
  // verdict they drive belong to the caller's own supplied metadata.
232
- return parsed.map((input) => aggregateCitationResolution(input, normalizeCitation(input), outcomesByKey.get(keyFor(input)), matchConfig));
241
+ return parsed.map((input) => aggregateCitationResolution(input, normalizeCitation(input), presentGet(outcomesByKey, keyFor(input), "the outcomes for the lookup key"), matchConfig));
233
242
  }
234
243
  return {
235
- resolveOne: async (input, options = {}) => (await resolveMany([input], options))[0],
244
+ resolveOne: async (input, options = {}) => presentFirst(await resolveMany([input], options), "the single resolution"),
236
245
  resolveMany,
237
246
  };
238
247
  }