@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
@@ -21,9 +21,9 @@
21
21
  * `providers/request-headers.ts`).
22
22
  */
23
23
  /** Who the request is. Always complete. */
24
- export interface Identity {
24
+ export type Identity = {
25
25
  readonly user: string;
26
- }
26
+ };
27
27
  /**
28
28
  * What the request operates on. It owns its resource coordinates
29
29
  * (`scopeResource`) and the workload id (`scopeWorkloadId`) used for
@@ -43,27 +43,27 @@ declare const CRED_BRAND: unique symbol;
43
43
  * off it while still letting a concrete managed credential satisfy it
44
44
  * structurally.
45
45
  */
46
- export interface Credential {
46
+ export type Credential = {
47
47
  readonly [CRED_BRAND]?: never;
48
- }
48
+ };
49
49
  /**
50
50
  * The agent call chain at the point of a call. Read-only provenance —
51
51
  * events, logs, and OTel spans read it; control flow MUST NOT branch on it.
52
52
  */
53
- export interface Provenance {
53
+ export type Provenance = {
54
54
  readonly agentId: string;
55
55
  readonly callPath: readonly string[];
56
- }
56
+ };
57
57
  /** Present only inside a workflow run. */
58
- export interface RunFrame {
58
+ export type RunFrame = {
59
59
  readonly runId: string;
60
60
  readonly stepId?: string;
61
- }
61
+ };
62
62
  /** Canonical resource coordinates a `Scope` resolves to. */
63
- export interface ResourceCoordinates {
63
+ export type ResourceCoordinates = {
64
64
  readonly resourceType: "analysis";
65
65
  readonly resourceId: string;
66
- }
66
+ };
67
67
  /** Derive the `{ resourceType, resourceId }` a scope resolves through: `{ "analysis", analysisId }`. */
68
68
  export declare function scopeResource(scope: Scope): ResourceCoordinates;
69
69
  /** The value stamped into the workload tag — the workload id for this scope. */
@@ -79,14 +79,14 @@ declare const AUTH_BRAND: unique symbol;
79
79
  * off it while still letting a managed `{ credential, orgId }` literal satisfy
80
80
  * it structurally.
81
81
  */
82
- export interface AuthContext {
82
+ export type AuthContext = {
83
83
  readonly [AUTH_BRAND]?: never;
84
- }
84
+ };
85
85
  /**
86
86
  * The session view the agent loop, the provider seam, and tools accept —
87
87
  * the union of what every layer below the HTTP door actually reads. The
88
- * session is a conduit: `runAgent` forwards it to the provider and into each
89
- * tool; tools forward it to `embed` and into nested `runAgent`s. The deepest
88
+ * session is a conduit: `runLoop` forwards it to the provider and into each
89
+ * tool; tools forward it to `embed` and into nested `runLoop`s. The deepest
90
90
  * consumer is the provider, which reads every field, so the conduit type is
91
91
  * "all fields, generalized to what's read" — `credential` widened to the
92
92
  * opaque `Credential` (nothing in the harness branches on the concrete shape),
@@ -96,7 +96,7 @@ export interface AuthContext {
96
96
  * `RunSession` (with RunFrame) are each structurally assignable, so the
97
97
  * same agent loop runs under a live request and inside a durable workflow.
98
98
  */
99
- export interface AgentSession {
99
+ export type AgentSession = {
100
100
  readonly identity: Identity;
101
101
  readonly scope: Scope;
102
102
  readonly provenance: Provenance;
@@ -107,57 +107,57 @@ export interface AgentSession {
107
107
  * `getAuth`. The sole source of credential/org behind a session.
108
108
  */
109
109
  readonly auth: AuthContext;
110
- }
110
+ };
111
111
  /**
112
112
  * The live HTTP door. No `RunFrame` — `runId`/`stepId` are unrepresentable
113
113
  * until async work is authorized. SHALL NOT be JSON-serialized into durable
114
114
  * state.
115
115
  */
116
- export interface RequestSession {
116
+ export type RequestSession = {
117
117
  readonly identity: Identity;
118
118
  readonly scope: Scope;
119
119
  readonly provenance: Provenance;
120
120
  readonly auth: AuthContext;
121
- }
121
+ };
122
122
  /**
123
123
  * The durable, JSON-serializable bundle. Carries a `RunFrame`. Constructed
124
124
  * solely at the run-authorization seam.
125
125
  */
126
- export interface RunSession {
126
+ export type RunSession = {
127
127
  readonly identity: Identity;
128
128
  readonly scope: Scope;
129
129
  readonly provenance: Provenance;
130
130
  readonly runFrame: RunFrame;
131
131
  readonly auth: AuthContext;
132
- }
132
+ };
133
133
  /**
134
134
  * The session of a sandbox spawn. A sandbox takes its analysis id, its run id,
135
135
  * and its step id from this session.
136
136
  */
137
- export interface SpawnSession extends RunSession {
137
+ export type SpawnSession = RunSession & {
138
138
  readonly runFrame: RunFrame & {
139
139
  readonly stepId: string;
140
140
  };
141
- }
141
+ };
142
142
  /**
143
143
  * The minimal session view that a host hook reads. Both bundles satisfy it;
144
144
  * `runFrame` is present only on a `RunSession`, so a hook that gets a
145
145
  * `RequestSession` sees no run or step.
146
146
  */
147
- export interface HookSessionView {
147
+ export type HookSessionView = {
148
148
  readonly identity: Identity;
149
149
  readonly scope: Scope;
150
150
  readonly provenance: Provenance;
151
151
  readonly runFrame?: RunFrame;
152
- }
152
+ };
153
153
  /**
154
154
  * The session that the request headers hook gets: the hook view plus the
155
155
  * opaque `auth`, which a host realization downcasts to reach its credential.
156
156
  * `AgentSession` structurally satisfies it.
157
157
  */
158
- export interface ResolvableSession extends HookSessionView {
158
+ export type ResolvableSession = HookSessionView & {
159
159
  readonly auth: AuthContext;
160
- }
160
+ };
161
161
  /**
162
162
  * Derive a child session for a sub-agent call — provenance only. Sets the
163
163
  * child `agentId` and appends it to `callPath`, leaving identity, scope, and
@@ -12,16 +12,16 @@
12
12
  * owns eviction, coalescing, and expiry — the deep, drift-prone plumbing.
13
13
  */
14
14
  import { ResultAsync } from "neverthrow";
15
- export interface CachedResolverMetrics {
15
+ export type CachedResolverMetrics = {
16
16
  onHit(): void;
17
17
  /** Recorded once per upstream fetch — coalesced callers do not count. */
18
18
  onMiss(): void;
19
- }
20
- export interface CachedResolverConfig<In, Out, E> {
19
+ };
20
+ export type CachedResolverConfig<In, Out, E> = {
21
21
  readonly ttlMs: number;
22
22
  readonly maxEntries: number;
23
23
  readonly keyFn: (input: In) => string;
24
24
  readonly fetch: (input: In) => ResultAsync<Out, E>;
25
25
  readonly metrics?: CachedResolverMetrics;
26
- }
26
+ };
27
27
  export declare function createCachedResolver<In, Out, E>(cfg: CachedResolverConfig<In, Out, E>): (input: In) => ResultAsync<Out, E>;
@@ -6,21 +6,18 @@
6
6
  * external running-charge bracket; OSS wires a no-op. The harness only ever sees this
7
7
  * interface — the body brackets the run, the embedder owns the ledger.
8
8
  *
9
- * `open` is a gate: an `err` ends the run before a step starts, or suspends it
10
- * when the host asks. `close` is a notice: an `err` is logged, and the terminal
9
+ * `open` is a gate: an `err` ends the run before a step starts, or pauses it
10
+ * when the host sets the suspend flag. `close` is a notice: an `err` is logged, and the terminal
11
11
  * status of the run does not change (see `lib/hooks.ts`).
12
12
  */
13
13
  import type { ResultAsync } from "neverthrow";
14
14
  import type { AgentSession } from "../auth/types.js";
15
15
  import type { GateFailure, NoticeFailure } from "../lib/hooks.js";
16
- /** A suspension carries the reason of the host, which the harness does not read. */
16
+ /** The outcome of a run that ended. A paused run does not end, thus it closes no charge. */
17
17
  export type RunChargeOutcome = {
18
18
  readonly kind: "ok" | "error" | "canceled";
19
- } | {
20
- readonly kind: "suspended";
21
- readonly reason: string;
22
19
  };
23
- export interface RunCharge {
20
+ export type RunCharge = {
24
21
  /** Open the run's running charge at init. */
25
22
  open(args: {
26
23
  analysisId: string;
@@ -34,4 +31,4 @@ export interface RunCharge {
34
31
  outcome: RunChargeOutcome;
35
32
  session: AgentSession;
36
33
  }): ResultAsync<void, NoticeFailure>;
37
- }
34
+ };
@@ -6,8 +6,8 @@
6
6
  * external running-charge bracket; OSS wires a no-op. The harness only ever sees this
7
7
  * interface — the body brackets the run, the embedder owns the ledger.
8
8
  *
9
- * `open` is a gate: an `err` ends the run before a step starts, or suspends it
10
- * when the host asks. `close` is a notice: an `err` is logged, and the terminal
9
+ * `open` is a gate: an `err` ends the run before a step starts, or pauses it
10
+ * when the host sets the suspend flag. `close` is a notice: an `err` is logged, and the terminal
11
11
  * status of the run does not change (see `lib/hooks.ts`).
12
12
  */
13
13
  export {};
@@ -15,16 +15,16 @@ import type { Scope } from "../auth/types.js";
15
15
  import type { NoticeFailure } from "../lib/hooks.js";
16
16
  import type { ChatUsage } from "../providers/types.js";
17
17
  /** One completed LLM call's token usage, with the attribution held at the call site. */
18
- export interface LlmUsageRecord {
18
+ export type LlmUsageRecord = {
19
19
  /**
20
20
  * Idempotency key. Stable across every replay of the same call: under a
21
21
  * `RunFrame` it composes the `runId`, the frame's `stepId` when it carries
22
22
  * one, the session's provenance call path, the dispatching tool call's id
23
- * when the loop runs nested inside one, and the loop's deterministic step
24
- * name; outside a `RunFrame` (the chat path, where no replay exists) it is
25
- * freshly minted. Every component past the frame is load-bearing, because
26
- * a step name is unique only within one loop invocation and loops routinely
27
- * share a frame: the `stepId` keeps sibling step workflows of one run
23
+ * when the loop runs nested inside one, and the response id of the call,
24
+ * which the checkpoint of the call keeps; outside a `RunFrame` (the chat
25
+ * path, where no replay exists) it is freshly minted. Every component past
26
+ * the frame is load-bearing, because loops routinely share a frame: the
27
+ * `stepId` keeps sibling step workflows of one run
28
28
  * apart, the call path keeps distinct agent chains under one frame apart,
29
29
  * and the invocation id keeps parallel dispatches of one sub-agent apart.
30
30
  * The harness guarantees key stability, not at-most-once delivery —
@@ -48,7 +48,7 @@ export interface LlmUsageRecord {
48
48
  readonly servedModelId?: string;
49
49
  /** What the provider reported. Unreported figures stay absent, never zeroed. */
50
50
  readonly usage: ChatUsage;
51
- }
51
+ };
52
52
  /**
53
53
  * Records one `LlmUsageRecord` per completed LLM call.
54
54
  *
@@ -59,6 +59,6 @@ export interface LlmUsageRecord {
59
59
  * make a run slower, but a realization that throws before it returns a
60
60
  * `ResultAsync` still fails the run it was only meant to observe.
61
61
  */
62
- export interface UsageRecorder {
62
+ export type UsageRecorder = {
63
63
  record(record: LlmUsageRecord): ResultAsync<void, NoticeFailure>;
64
- }
64
+ };
@@ -35,7 +35,7 @@ export function aggregateCitationResolution(input, normalized, sourceOutcomes, m
35
35
  normalized,
36
36
  sourceOutcomes: [...sourceOutcomes],
37
37
  candidates,
38
- ...(selected === undefined ? {} : { selectedClusterId: selected.id }),
38
+ selectedClusterId: selected?.id,
39
39
  comparisons,
40
40
  conflicts: detectCitationConflicts(candidates),
41
41
  verdict,
@@ -1,6 +1,6 @@
1
1
  import type { CitationSourceClient } from "../types.js";
2
2
  import type { SourceHttpOptions } from "../../literature/sources/http.js";
3
- export interface ArxivCitationClientOptions extends SourceHttpOptions {
3
+ export type ArxivCitationClientOptions = SourceHttpOptions & {
4
4
  readonly maxCandidates?: number;
5
- }
5
+ };
6
6
  export declare function createArxivCitationClient(options?: ArxivCitationClientOptions): CitationSourceClient;
@@ -10,7 +10,7 @@ function arxivRecord(paper) {
10
10
  identifiers: { arxiv: identifier },
11
11
  title: paper.title,
12
12
  authors: paper.authors,
13
- ...(year === undefined ? {} : { year }),
13
+ year,
14
14
  venue: "arXiv",
15
15
  url: paper.url,
16
16
  };
@@ -22,9 +22,17 @@ export function createArxivCitationClient(options = {}) {
22
22
  async resolve(request, signal) {
23
23
  if (!request.plan.applicable)
24
24
  return sourceOutcome("arxiv", request.plan.operation, "not_applicable", 0, [], request.plan.reason);
25
- const result = request.plan.operation === "arxiv_exact"
26
- ? await source.lookupExact(request.normalized.identifiers.arxiv, options.maxCandidates ?? 5, signal)
27
- : await source.search({ query: request.input.title ?? request.input.citation, limit: options.maxCandidates ?? 5 }, signal);
25
+ if (request.plan.operation === "arxiv_exact") {
26
+ const arxivId = request.normalized.identifiers.arxiv;
27
+ if (arxivId === undefined)
28
+ return sourceOutcome("arxiv", request.plan.operation, "unavailable", 0, [], "the exact plan carries no arXiv identifier");
29
+ const result = await source.lookupExact(arxivId, options.maxCandidates ?? 5, signal);
30
+ if (result.status !== "ok")
31
+ return sourceOutcome("arxiv", request.plan.operation, result.status, 1, [], result.detail);
32
+ const records = result.value.map(arxivRecord);
33
+ return sourceOutcome("arxiv", request.plan.operation, records.length === 0 ? "no_data" : "ok", 1, records);
34
+ }
35
+ const result = await source.search({ query: request.input.title ?? request.input.citation, limit: options.maxCandidates ?? 5 }, signal);
28
36
  if (result.status !== "ok")
29
37
  return sourceOutcome("arxiv", request.plan.operation, result.status, 1, [], result.detail);
30
38
  const records = result.value.map(arxivRecord);
@@ -1,3 +1,5 @@
1
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- a publication year stands alone in untyped metadata; the boundaries keep the tail of a longer number out.
2
+ const YEAR_PATTERN = /\b(1[5-9]\d{2}|20\d{2}|21\d{2})\b/;
1
3
  export function notApplicableOutcome(plan) {
2
4
  return {
3
5
  source: plan.source,
@@ -15,7 +17,7 @@ export function sourceOutcome(source, operation, status, requestCount, records =
15
17
  status,
16
18
  requestCount,
17
19
  records,
18
- ...(detail === undefined ? {} : { detail }),
20
+ detail,
19
21
  };
20
22
  }
21
23
  /**
@@ -31,7 +33,7 @@ export function parseYear(value) {
31
33
  return value;
32
34
  if (typeof value !== "string")
33
35
  return undefined;
34
- const match = value.match(/\b(1[5-9]\d{2}|20\d{2}|21\d{2})\b/);
36
+ const match = value.match(YEAR_PATTERN);
35
37
  return match?.[1] === undefined ? undefined : Number(match[1]);
36
38
  }
37
39
  export function firstNonEmpty(values) {
@@ -1,8 +1,8 @@
1
1
  import type { CitationSourceClient } from "../types.js";
2
2
  import { type SourceHttpOptions } from "../../literature/sources/http.js";
3
- export interface CrossrefClientOptions extends SourceHttpOptions {
3
+ export type CrossrefClientOptions = SourceHttpOptions & {
4
4
  readonly mailto?: string;
5
5
  readonly userAgent?: string;
6
6
  readonly maxCandidates?: number;
7
- }
7
+ };
8
8
  export declare function createCrossrefClient(options?: CrossrefClientOptions): CitationSourceClient;
@@ -1,21 +1,20 @@
1
1
  import { z } from "zod";
2
2
  import { encodeDoiPath, firstNonEmpty, parseYear, sourceOutcome } from "./common.js";
3
+ import { firstSegmentOf } from "../../lib/text.js";
3
4
  import { requestJson } from "../../literature/sources/http.js";
4
- const CrossrefItemSchema = z
5
- .object({
5
+ const CrossrefItemSchema = z.looseObject({
6
6
  DOI: z.string().optional(),
7
7
  URL: z.string().optional(),
8
8
  title: z.array(z.string()).optional(),
9
- author: z.array(z.object({ given: z.string().optional(), family: z.string().optional(), name: z.string().optional() }).passthrough()).optional(),
9
+ author: z.array(z.looseObject({ given: z.string().optional(), family: z.string().optional(), name: z.string().optional() })).optional(),
10
10
  issued: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
11
11
  published: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
12
12
  "container-title": z.array(z.string()).optional(),
13
13
  volume: z.string().optional(),
14
14
  page: z.string().optional(),
15
- })
16
- .passthrough();
15
+ });
17
16
  const ExactSchema = z.object({ message: CrossrefItemSchema });
18
- const SearchSchema = z.object({ message: z.object({ items: z.array(CrossrefItemSchema) }).passthrough() });
17
+ const SearchSchema = z.object({ message: z.looseObject({ items: z.array(CrossrefItemSchema) }) });
19
18
  function crossrefRecord(item, index) {
20
19
  const doi = item.DOI?.toLocaleLowerCase("en-US");
21
20
  const sourceRecordId = firstNonEmpty([doi, item.URL, `candidate-${index}`]);
@@ -30,14 +29,14 @@ function crossrefRecord(item, index) {
30
29
  return {
31
30
  source: "crossref",
32
31
  sourceRecordId,
33
- identifiers: { ...(doi === undefined ? {} : { doi }) },
34
- ...(title === undefined ? {} : { title }),
35
- ...(authors === undefined || authors.length === 0 ? {} : { authors }),
36
- ...(dateParts?.[0] === undefined ? {} : { year: parseYear(dateParts[0]) }),
37
- ...(venue === undefined ? {} : { venue }),
38
- ...(item.volume === undefined ? {} : { volume: item.volume }),
39
- ...(item.page === undefined ? {} : { firstPage: item.page.split(/[-–]/)[0] }),
40
- ...(item.URL === undefined ? {} : { url: item.URL }),
32
+ identifiers: { doi },
33
+ title,
34
+ authors: authors !== undefined && authors.length > 0 ? authors : undefined,
35
+ year: dateParts?.[0] === undefined ? undefined : parseYear(dateParts[0]),
36
+ venue,
37
+ volume: item.volume,
38
+ firstPage: firstSegmentOf(item.page, "-–"),
39
+ url: item.URL,
41
40
  };
42
41
  }
43
42
  export function createCrossrefClient(options = {}) {
@@ -66,29 +65,30 @@ export function createCrossrefClient(options = {}) {
66
65
  }
67
66
  const doi = request.normalized.identifiers.doi;
68
67
  const exact = request.plan.operation === "crossref_doi_if_owned";
69
- const url = exact
70
- ? (() => {
71
- const target = new URL(`https://api.crossref.org/works/${encodeDoiPath(doi)}`);
72
- if (options.mailto)
73
- target.searchParams.set("mailto", options.mailto);
74
- return target.toString();
75
- })()
76
- : (() => {
77
- const params = new URLSearchParams({
78
- "query.bibliographic": request.input.citation,
79
- rows: String(options.maxCandidates ?? 5),
80
- });
81
- if (options.mailto)
82
- params.set("mailto", options.mailto);
83
- return `https://api.crossref.org/works?${params}`;
84
- })();
85
- const result = exact
86
- ? await requestJson(url, ExactSchema, options, signal, { headers })
87
- : await requestJson(url, SearchSchema, options, signal, { headers });
88
- if (result.status !== "ok")
89
- return sourceOutcome("crossref", request.plan.operation, result.status, 1, [], result.detail);
90
- const items = exact ? [result.value.message] : result.value.message.items;
91
- const records = items.flatMap((item, index) => {
68
+ let url;
69
+ if (exact) {
70
+ if (doi === undefined)
71
+ return sourceOutcome("crossref", request.plan.operation, "unavailable", 0, [], "the exact plan carries no DOI");
72
+ const target = new URL(`https://api.crossref.org/works/${encodeDoiPath(doi)}`);
73
+ if (options.mailto)
74
+ target.searchParams.set("mailto", options.mailto);
75
+ url = target.toString();
76
+ }
77
+ else {
78
+ const params = new URLSearchParams({
79
+ "query.bibliographic": request.input.citation,
80
+ rows: String(options.maxCandidates ?? 5),
81
+ });
82
+ if (options.mailto)
83
+ params.set("mailto", options.mailto);
84
+ url = `https://api.crossref.org/works?${params}`;
85
+ }
86
+ const fetched = exact
87
+ ? await requestJson(url, ExactSchema, options, signal, { headers }).then((result) => result.status === "ok" ? { status: "ok", value: [result.value.message] } : result)
88
+ : await requestJson(url, SearchSchema, options, signal, { headers }).then((result) => result.status === "ok" ? { status: "ok", value: result.value.message.items } : result);
89
+ if (fetched.status !== "ok")
90
+ return sourceOutcome("crossref", request.plan.operation, fetched.status, 1, [], fetched.detail);
91
+ const records = fetched.value.flatMap((item, index) => {
92
92
  const record = crossrefRecord(item, index);
93
93
  return record === undefined ? [] : [record];
94
94
  });
@@ -1,22 +1,21 @@
1
1
  import { z } from "zod";
2
2
  import { encodeDoiPath, firstNonEmpty, parseYear, sourceOutcome } from "./common.js";
3
+ import { firstSegmentOf } from "../../lib/text.js";
3
4
  import { requestJson } from "../../literature/sources/http.js";
4
- const HandleResponseSchema = z.object({ responseCode: z.number() }).passthrough();
5
- const RegistrationAgencySchema = z.array(z.object({ DOI: z.string().optional(), RA: z.string().optional() }).passthrough());
6
- const CslMetadataSchema = z
7
- .object({
5
+ const HandleResponseSchema = z.looseObject({ responseCode: z.number() });
6
+ const RegistrationAgencySchema = z.array(z.looseObject({ DOI: z.string().optional(), RA: z.string().optional() }));
7
+ const CslMetadataSchema = z.looseObject({
8
8
  DOI: z.string().optional(),
9
9
  id: z.string().optional(),
10
10
  title: z.union([z.string(), z.array(z.string())]).optional(),
11
- author: z.array(z.object({ given: z.string().optional(), family: z.string().optional(), literal: z.string().optional() }).passthrough()).optional(),
11
+ author: z.array(z.looseObject({ given: z.string().optional(), family: z.string().optional(), literal: z.string().optional() })).optional(),
12
12
  issued: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
13
13
  published: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
14
14
  "container-title": z.union([z.string(), z.array(z.string())]).optional(),
15
15
  volume: z.string().optional(),
16
16
  page: z.string().optional(),
17
17
  URL: z.string().optional(),
18
- })
19
- .passthrough();
18
+ });
20
19
  function scalar(value) {
21
20
  return Array.isArray(value) ? firstNonEmpty(value) : firstNonEmpty([value]);
22
21
  }
@@ -31,14 +30,14 @@ function cslRecord(doi, registrationAgency, metadata) {
31
30
  source: "doi_registry",
32
31
  sourceRecordId: doi,
33
32
  identifiers: { doi },
34
- ...(title === undefined ? {} : { title }),
35
- ...(authors === undefined || authors.length === 0 ? {} : { authors }),
36
- ...(dateParts?.[0] === undefined ? {} : { year: parseYear(dateParts[0]) }),
37
- ...(venue === undefined ? {} : { venue }),
38
- ...(metadata?.volume === undefined ? {} : { volume: metadata.volume }),
39
- ...(metadata?.page === undefined ? {} : { firstPage: metadata.page.split(/[-–]/)[0] }),
40
- ...(registrationAgency === undefined ? {} : { registrationAgency }),
41
- ...(metadata?.URL === undefined ? {} : { url: metadata.URL }),
33
+ title,
34
+ authors: authors !== undefined && authors.length > 0 ? authors : undefined,
35
+ year: dateParts?.[0] === undefined ? undefined : parseYear(dateParts[0]),
36
+ venue,
37
+ volume: metadata?.volume,
38
+ firstPage: firstSegmentOf(metadata?.page, "-–"),
39
+ registrationAgency,
40
+ url: metadata?.URL,
42
41
  };
43
42
  }
44
43
  export function createDoiRegistryClient(options = {}) {
@@ -86,7 +85,7 @@ export function createDoiRegistryClient(options = {}) {
86
85
  type: "doi",
87
86
  identifier: doi,
88
87
  exists: true,
89
- ...(registrationAgency === undefined ? {} : { registrationAgency }),
88
+ registrationAgency,
90
89
  metadataAvailable: metadata !== undefined,
91
90
  },
92
91
  };
@@ -1,6 +1,6 @@
1
1
  import type { CitationSourceClient } from "../types.js";
2
2
  import { type PubmedSourceOptions } from "../../literature/sources/pubmed.js";
3
- export interface PubmedCitationClientOptions extends PubmedSourceOptions {
3
+ export type PubmedCitationClientOptions = PubmedSourceOptions & {
4
4
  readonly maxCandidates?: number;
5
- }
5
+ };
6
6
  export declare function createPubmedCitationClient(options?: PubmedCitationClientOptions): CitationSourceClient;
@@ -5,11 +5,11 @@ function pubmedRecord(article) {
5
5
  return {
6
6
  source: "pubmed",
7
7
  sourceRecordId: article.pmid,
8
- identifiers: { pmid: article.pmid, ...(article.doi ? { doi: article.doi.toLocaleLowerCase("en-US") } : {}) },
9
- ...(article.title ? { title: article.title } : {}),
10
- ...(article.authors.length === 0 ? {} : { authors: article.authors }),
11
- ...(year === undefined ? {} : { year }),
12
- ...(article.journal ? { venue: article.journal } : {}),
8
+ identifiers: { pmid: article.pmid, doi: article.doi ? article.doi.toLocaleLowerCase("en-US") : undefined },
9
+ title: article.title ? article.title : undefined,
10
+ authors: article.authors.length > 0 ? article.authors : undefined,
11
+ year,
12
+ venue: article.journal ? article.journal : undefined,
13
13
  url: `https://pubmed.ncbi.nlm.nih.gov/${article.pmid}/`,
14
14
  };
15
15
  }
@@ -21,16 +21,19 @@ export function createPubmedCitationClient(options = {}) {
21
21
  let requestCount = 0;
22
22
  let pmids;
23
23
  if (request.plan.operation === "pubmed_exact") {
24
- pmids = [request.normalized.identifiers.pmid];
24
+ const pmid = request.normalized.identifiers.pmid;
25
+ if (pmid === undefined)
26
+ return sourceOutcome("pubmed", request.plan.operation, "unavailable", 0, [], "the exact plan carries no PMID");
27
+ pmids = [pmid];
25
28
  }
26
29
  else if (request.plan.operation === "pubmed_structured") {
27
30
  requestCount += 1;
28
31
  const match = await source.matchCitation({
29
- ...(request.input.venue === undefined ? {} : { venue: request.input.venue }),
30
- ...(request.input.year === undefined ? {} : { year: request.input.year }),
31
- ...(request.input.volume === undefined ? {} : { volume: request.input.volume }),
32
- ...(request.input.firstPage === undefined ? {} : { firstPage: request.input.firstPage }),
33
- ...(request.input.authors?.[0] === undefined ? {} : { firstAuthor: request.input.authors[0] }),
32
+ venue: request.input.venue,
33
+ year: request.input.year,
34
+ volume: request.input.volume,
35
+ firstPage: request.input.firstPage,
36
+ firstAuthor: request.input.authors?.[0],
34
37
  key: "citation-0",
35
38
  }, signal);
36
39
  if (match.status !== "ok")
@@ -39,7 +42,7 @@ export function createPubmedCitationClient(options = {}) {
39
42
  }
40
43
  else {
41
44
  requestCount += 1;
42
- const term = request.plan.operation === "pubmed_doi" ? `${request.normalized.identifiers.doi}[AID]` : `${request.input.title ?? ""}[Title]`;
45
+ const term = request.plan.operation === "pubmed_doi" ? `${String(request.normalized.identifiers.doi)}[AID]` : `${request.input.title ?? ""}[Title]`;
43
46
  const search = await source.searchIds(term, options.maxCandidates ?? 5, signal);
44
47
  if (search.status !== "ok")
45
48
  return sourceOutcome("pubmed", request.plan.operation, search.status, requestCount, [], search.detail);
@@ -77,7 +80,11 @@ export function createPubmedCitationClient(options = {}) {
77
80
  if (results[index] === undefined)
78
81
  results[index] = await resolve(request, signal);
79
82
  }));
80
- return results.map((result) => result);
83
+ return results.map((result) => {
84
+ if (result === undefined)
85
+ throw new Error("the pubmed batch left an outcome unresolved");
86
+ return result;
87
+ });
81
88
  }
82
89
  return { source: "pubmed", resolve, resolveMany };
83
90
  }
@@ -1,6 +1,6 @@
1
1
  import type { CitationSourceClient } from "../types.js";
2
2
  import { type SemanticScholarSourceOptions } from "../../literature/sources/semantic-scholar.js";
3
- export interface SemanticScholarCitationClientOptions extends SemanticScholarSourceOptions {
3
+ export type SemanticScholarCitationClientOptions = SemanticScholarSourceOptions & {
4
4
  readonly maxCandidates?: number;
5
- }
5
+ };
6
6
  export declare function createSemanticScholarCitationClient(options?: SemanticScholarCitationClientOptions): CitationSourceClient;
@@ -13,16 +13,16 @@ function semanticRecord(paper) {
13
13
  source: "semantic_scholar",
14
14
  sourceRecordId: paper.id,
15
15
  identifiers: {
16
- ...(doi === undefined ? {} : { doi }),
17
- ...(pmid === undefined ? {} : { pmid }),
18
- ...(arxiv === undefined ? {} : { arxiv }),
19
- ...(corpusId === undefined ? {} : { corpusId }),
16
+ doi,
17
+ pmid,
18
+ arxiv,
19
+ corpusId,
20
20
  },
21
- ...(paper.title === undefined ? {} : { title: paper.title }),
22
- ...(paper.authors.length === 0 ? {} : { authors: paper.authors }),
23
- ...(paper.year === undefined ? {} : { year: paper.year }),
24
- ...(paper.venue === undefined ? {} : { venue: paper.venue }),
25
- ...(paper.url === undefined ? {} : { url: paper.url }),
21
+ title: paper.title,
22
+ authors: paper.authors.length > 0 ? paper.authors : undefined,
23
+ year: paper.year,
24
+ venue: paper.venue,
25
+ url: paper.url,
26
26
  };
27
27
  }
28
28
  export function createSemanticScholarCitationClient(options = {}) {
@@ -10,7 +10,7 @@ function recordValue(record, field) {
10
10
  return record[field];
11
11
  }
12
12
  function normalizedValue(field, value) {
13
- if (field === "authors")
13
+ if (field === "authors" && Array.isArray(value))
14
14
  return value.map(normalizeAuthor).sort().join("|");
15
15
  if (field === "year")
16
16
  return String(value);
@@ -20,7 +20,7 @@ function authorMatch(supplied, source) {
20
20
  return supplied.every((author) => source.some((candidate) => authorNamesMatch(author, candidate)));
21
21
  }
22
22
  function fieldMatches(field, supplied, source) {
23
- if (field === "authors")
23
+ if (field === "authors" && Array.isArray(supplied) && Array.isArray(source))
24
24
  return authorMatch(supplied, source);
25
25
  if (field === "year")
26
26
  return Math.abs(Number(supplied) - Number(source)) <= 1;