@inflexa-ai/harness 0.45.1 → 0.46.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (790) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +9 -3
  3. package/dist/agents/conversation-agent.js +34 -33
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +12 -14
  9. package/dist/agents/sandbox/shared.js +18 -12
  10. package/dist/agents/sandbox/types.d.ts +4 -4
  11. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  12. package/dist/agents/sandbox/validate-skills.js +3 -1
  13. package/dist/agents/sandbox-catalog.d.ts +2 -2
  14. package/dist/agents/sandbox-catalog.js +3 -3
  15. package/dist/agents/system-prompt.d.ts +2 -2
  16. package/dist/app/chat-turn-workflow.d.ts +114 -0
  17. package/dist/app/chat-turn-workflow.js +306 -0
  18. package/dist/app/chat-turn.d.ts +85 -57
  19. package/dist/app/chat-turn.js +123 -100
  20. package/dist/app/data-profile-orientation.js +10 -8
  21. package/dist/app/data-profile-view.d.ts +4 -4
  22. package/dist/app/data-profile-view.js +9 -8
  23. package/dist/app/in-process-turn.d.ts +42 -0
  24. package/dist/app/in-process-turn.js +139 -0
  25. package/dist/app/message-assembly.d.ts +10 -4
  26. package/dist/app/message-assembly.js +13 -8
  27. package/dist/app/report-session-runtime.d.ts +4 -4
  28. package/dist/app/report-session-runtime.js +36 -21
  29. package/dist/app/spawn-report-session.d.ts +33 -28
  30. package/dist/app/spawn-report-session.js +25 -40
  31. package/dist/app/synthesize-run.d.ts +22 -16
  32. package/dist/app/synthesize-run.js +41 -35
  33. package/dist/app/work.d.ts +96 -0
  34. package/dist/app/work.js +147 -0
  35. package/dist/auth/local-auth-context.d.ts +1 -3
  36. package/dist/auth/local-auth-context.js +1 -3
  37. package/dist/auth/local-run-authorizer.d.ts +1 -1
  38. package/dist/auth/local-run-authorizer.js +5 -3
  39. package/dist/auth/types.d.ts +26 -26
  40. package/dist/billing/cached-resolver.d.ts +4 -4
  41. package/dist/billing/run-charge.d.ts +5 -8
  42. package/dist/billing/run-charge.js +2 -2
  43. package/dist/billing/usage-recorder.d.ts +9 -9
  44. package/dist/citations/aggregate.js +1 -1
  45. package/dist/citations/clients/arxiv.d.ts +2 -2
  46. package/dist/citations/clients/arxiv.js +12 -4
  47. package/dist/citations/clients/common.js +4 -2
  48. package/dist/citations/clients/crossref.d.ts +2 -2
  49. package/dist/citations/clients/crossref.js +37 -37
  50. package/dist/citations/clients/doi-registry.js +15 -16
  51. package/dist/citations/clients/pubmed.d.ts +2 -2
  52. package/dist/citations/clients/pubmed.js +20 -13
  53. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  54. package/dist/citations/clients/semantic-scholar.js +9 -9
  55. package/dist/citations/compare.js +2 -2
  56. package/dist/citations/match.d.ts +2 -2
  57. package/dist/citations/match.js +12 -7
  58. package/dist/citations/normalize.js +35 -26
  59. package/dist/citations/plan.js +6 -2
  60. package/dist/citations/resolve.d.ts +6 -6
  61. package/dist/citations/resolve.js +34 -25
  62. package/dist/citations/types.d.ts +77 -77
  63. package/dist/config/environment-stores.d.ts +6 -6
  64. package/dist/config/resource-limits.js +1 -3
  65. package/dist/contracts/analogy-report.d.ts +7 -7
  66. package/dist/contracts/analogy-report.js +2 -2
  67. package/dist/contracts/chat-events.d.ts +38 -24
  68. package/dist/contracts/chat-frame.d.ts +15 -5
  69. package/dist/contracts/chat-frame.js +64 -41
  70. package/dist/contracts/chat-parts.d.ts +130 -67
  71. package/dist/contracts/chat-parts.js +1 -0
  72. package/dist/contracts/content-url.js +16 -2
  73. package/dist/contracts/data-profile.d.ts +38 -38
  74. package/dist/contracts/index.d.ts +2 -2
  75. package/dist/contracts/index.js +1 -1
  76. package/dist/contracts/message.d.ts +6 -6
  77. package/dist/contracts/organ-system.d.ts +11 -11
  78. package/dist/contracts/part-registry.d.ts +5 -4
  79. package/dist/contracts/part-registry.js +5 -0
  80. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  81. package/dist/contracts/profile-vocabulary.js +10 -3
  82. package/dist/contracts/report-blocks.d.ts +329 -329
  83. package/dist/contracts/report-reference.d.ts +105 -81
  84. package/dist/contracts/report-reference.js +30 -13
  85. package/dist/contracts/schemas/chat-events.d.ts +30 -16
  86. package/dist/contracts/schemas/chat-events.js +15 -6
  87. package/dist/contracts/schemas/chat-parts.d.ts +175 -102
  88. package/dist/contracts/schemas/chat-parts.js +33 -7
  89. package/dist/contracts/severity.d.ts +1 -1
  90. package/dist/contracts/structure-source.d.ts +3 -3
  91. package/dist/contracts/structure-source.js +6 -2
  92. package/dist/contracts/subagent-activity.d.ts +2 -2
  93. package/dist/contracts/subagent-activity.js +5 -3
  94. package/dist/contracts/usage.d.ts +2 -2
  95. package/dist/data/safety-panel-schema.d.ts +25 -25
  96. package/dist/data/safety-panel-schema.js +13 -4
  97. package/dist/execution/artifact-metadata.d.ts +23 -15
  98. package/dist/execution/artifact-metadata.js +33 -10
  99. package/dist/execution/artifact-record.d.ts +2 -2
  100. package/dist/execution/artifact-registration.d.ts +5 -5
  101. package/dist/execution/artifact-registry.d.ts +8 -8
  102. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  103. package/dist/execution/dbos-run-launcher.js +58 -4
  104. package/dist/execution/dbos-workflow-purger.d.ts +5 -6
  105. package/dist/execution/dbos-workflow-purger.js +8 -7
  106. package/dist/execution/input-signature.d.ts +2 -2
  107. package/dist/execution/post-step-pipeline.d.ts +9 -9
  108. package/dist/execution/post-step-pipeline.js +1 -1
  109. package/dist/execution/post-step.js +2 -2
  110. package/dist/execution/reconcile-manifest.d.ts +4 -4
  111. package/dist/execution/reconcile-manifest.js +3 -2
  112. package/dist/execution/run-authorizer.d.ts +46 -37
  113. package/dist/execution/run-authorizer.js +8 -8
  114. package/dist/execution/run-canceler.d.ts +7 -7
  115. package/dist/execution/run-canceler.js +14 -7
  116. package/dist/execution/run-end-record.d.ts +2 -3
  117. package/dist/execution/run-event-parts.d.ts +0 -8
  118. package/dist/execution/run-event-parts.js +29 -24
  119. package/dist/execution/run-event-stream.d.ts +8 -8
  120. package/dist/execution/run-event-stream.js +3 -4
  121. package/dist/execution/run-launcher.d.ts +4 -4
  122. package/dist/execution/run-synthesis.d.ts +49 -48
  123. package/dist/execution/run-synthesis.js +96 -255
  124. package/dist/execution/staged-input.d.ts +2 -2
  125. package/dist/execution/step-summary.d.ts +6 -6
  126. package/dist/execution/step-summary.js +4 -8
  127. package/dist/execution/topo-sort.js +4 -3
  128. package/dist/execution/workflow-purger.d.ts +2 -2
  129. package/dist/index.d.ts +17 -20
  130. package/dist/index.js +25 -36
  131. package/dist/input-sanitization.js +9 -2
  132. package/dist/input-scan/clustering.d.ts +6 -6
  133. package/dist/input-scan/clustering.js +11 -5
  134. package/dist/input-scan/companions.js +3 -2
  135. package/dist/input-scan/detect-sets.d.ts +2 -2
  136. package/dist/input-scan/detect-sets.js +25 -21
  137. package/dist/input-scan/enrich.d.ts +6 -6
  138. package/dist/input-scan/enrich.js +29 -12
  139. package/dist/input-scan/formats.d.ts +2 -2
  140. package/dist/input-scan/formats.js +8 -2
  141. package/dist/input-scan/markers.d.ts +2 -2
  142. package/dist/input-scan/markers.js +14 -5
  143. package/dist/input-scan/menu.d.ts +10 -10
  144. package/dist/input-scan/menu.js +0 -0
  145. package/dist/input-scan/quarantine.d.ts +2 -2
  146. package/dist/input-scan/quarantine.js +23 -18
  147. package/dist/input-scan/readout-budget.d.ts +2 -2
  148. package/dist/input-scan/readout-budget.js +1 -1
  149. package/dist/input-scan/readout.d.ts +2 -2
  150. package/dist/input-scan/readout.js +47 -34
  151. package/dist/input-scan/scan.d.ts +2 -2
  152. package/dist/input-scan/scan.js +7 -5
  153. package/dist/input-scan/set-types.d.ts +28 -28
  154. package/dist/input-scan/shapes.d.ts +4 -4
  155. package/dist/input-scan/shapes.js +0 -0
  156. package/dist/input-scan/templates.d.ts +10 -10
  157. package/dist/input-scan/templates.js +30 -22
  158. package/dist/input-scan/tokens.d.ts +6 -4
  159. package/dist/input-scan/tokens.js +100 -38
  160. package/dist/input-scan/types.d.ts +22 -22
  161. package/dist/lib/async-utils.d.ts +3 -7
  162. package/dist/lib/async-utils.js +5 -9
  163. package/dist/lib/cache.js +1 -1
  164. package/dist/lib/chrome.d.ts +46 -6
  165. package/dist/lib/console-logger.js +2 -2
  166. package/dist/lib/db-result.d.ts +22 -6
  167. package/dist/lib/db-result.js +9 -13
  168. package/dist/lib/eyes.d.ts +4 -4
  169. package/dist/lib/eyes.js +1 -1
  170. package/dist/lib/fs-helpers.js +18 -6
  171. package/dist/lib/fs-result.d.ts +1 -0
  172. package/dist/lib/fs-result.js +5 -6
  173. package/dist/lib/hooks.d.ts +32 -7
  174. package/dist/lib/hooks.js +22 -3
  175. package/dist/lib/host-concurrency.js +3 -2
  176. package/dist/lib/logger.d.ts +2 -2
  177. package/dist/lib/logger.js +2 -1
  178. package/dist/lib/metrics.d.ts +1 -1
  179. package/dist/lib/null-proto.d.ts +6 -0
  180. package/dist/lib/null-proto.js +17 -0
  181. package/dist/lib/otel-spans.d.ts +1 -1
  182. package/dist/lib/otel-spans.js +9 -5
  183. package/dist/lib/otel.d.ts +4 -2
  184. package/dist/lib/otel.js +10 -2
  185. package/dist/lib/page-capture.d.ts +8 -8
  186. package/dist/lib/page-capture.js +9 -4
  187. package/dist/lib/parse-json.d.ts +5 -0
  188. package/dist/lib/parse-json.js +12 -0
  189. package/dist/lib/present.d.ts +12 -0
  190. package/dist/lib/present.js +39 -0
  191. package/dist/lib/rate-limit.d.ts +4 -4
  192. package/dist/lib/rate-limit.js +12 -13
  193. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  194. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  195. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  196. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  197. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  198. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  199. package/dist/lib/regulatory-corpus.d.ts +10 -10
  200. package/dist/lib/regulatory-corpus.js +3 -1
  201. package/dist/lib/result.d.ts +10 -11
  202. package/dist/lib/result.js +15 -13
  203. package/dist/lib/storage.d.ts +2 -2
  204. package/dist/lib/test/async-iterable.d.ts +9 -0
  205. package/dist/lib/test/async-iterable.js +28 -0
  206. package/dist/lib/test/request-url.d.ts +5 -0
  207. package/dist/lib/test/request-url.js +7 -0
  208. package/dist/lib/test/result-assert.d.ts +12 -0
  209. package/dist/lib/test/result-assert.js +17 -0
  210. package/dist/lib/test/text-shapes.d.ts +24 -0
  211. package/dist/lib/test/text-shapes.js +63 -0
  212. package/dist/lib/text.d.ts +22 -0
  213. package/dist/lib/text.js +68 -0
  214. package/dist/lib/thrown.d.ts +18 -0
  215. package/dist/lib/thrown.js +30 -0
  216. package/dist/lib/unknown-array.d.ts +6 -0
  217. package/dist/lib/unknown-array.js +8 -0
  218. package/dist/lib/unknown-containers.d.ts +14 -0
  219. package/dist/lib/unknown-containers.js +17 -0
  220. package/dist/lib/unknown-text.d.ts +8 -0
  221. package/dist/lib/unknown-text.js +28 -0
  222. package/dist/lib/zod-issue-shape.d.ts +1 -1
  223. package/dist/lib/zod-issue-shape.js +31 -31
  224. package/dist/lib/zod-issues.d.ts +3 -3
  225. package/dist/lib/zod-issues.js +30 -17
  226. package/dist/literature/sources/arxiv.d.ts +6 -6
  227. package/dist/literature/sources/arxiv.js +92 -35
  228. package/dist/literature/sources/http.d.ts +2 -2
  229. package/dist/literature/sources/http.js +16 -15
  230. package/dist/literature/sources/pubmed.d.ts +16 -16
  231. package/dist/literature/sources/pubmed.js +96 -61
  232. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  233. package/dist/literature/sources/semantic-scholar.js +22 -13
  234. package/dist/loop/accounting.d.ts +63 -0
  235. package/dist/loop/accounting.js +141 -0
  236. package/dist/loop/call-policy.d.ts +73 -0
  237. package/dist/loop/call-policy.js +109 -0
  238. package/dist/loop/chat-stream.d.ts +62 -0
  239. package/dist/loop/chat-stream.js +237 -0
  240. package/dist/loop/compaction.d.ts +9 -9
  241. package/dist/loop/compaction.js +1 -1
  242. package/dist/loop/metrics.d.ts +12 -15
  243. package/dist/loop/metrics.js +14 -26
  244. package/dist/loop/run-loop.d.ts +233 -0
  245. package/dist/loop/run-loop.js +770 -0
  246. package/dist/loop/sub-agent.d.ts +61 -0
  247. package/dist/loop/sub-agent.js +160 -0
  248. package/dist/loop/tool-adapter.d.ts +98 -0
  249. package/dist/loop/tool-adapter.js +364 -0
  250. package/dist/loop/tool-detail.d.ts +1 -1
  251. package/dist/loop/tool-detail.js +6 -5
  252. package/dist/loop/tool-outcome.d.ts +1 -1
  253. package/dist/loop/tool-output.d.ts +4 -4
  254. package/dist/loop/tool-output.js +2 -2
  255. package/dist/loop/turn-credentials.d.ts +39 -0
  256. package/dist/loop/turn-credentials.js +90 -0
  257. package/dist/loop/types.d.ts +29 -38
  258. package/dist/loop/types.js +2 -7
  259. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  260. package/dist/memory/ai-sdk-message-storage.js +13 -11
  261. package/dist/memory/card-builders.d.ts +14 -14
  262. package/dist/memory/card-builders.js +19 -15
  263. package/dist/memory/conversation-display-recorder.d.ts +22 -4
  264. package/dist/memory/conversation-display-recorder.js +43 -24
  265. package/dist/memory/conversation-display-replay.js +3 -2
  266. package/dist/memory/conversation-display-storage.d.ts +15 -7
  267. package/dist/memory/conversation-display-storage.js +141 -36
  268. package/dist/memory/conversation-view.d.ts +4 -4
  269. package/dist/memory/conversation-view.js +5 -4
  270. package/dist/memory/count-tokens.js +10 -8
  271. package/dist/memory/derive-thread-title.d.ts +0 -13
  272. package/dist/memory/derive-thread-title.js +2 -1
  273. package/dist/memory/message-backfill.d.ts +12 -5
  274. package/dist/memory/message-backfill.js +5 -3
  275. package/dist/memory/thread-history.d.ts +36 -21
  276. package/dist/memory/thread-history.js +78 -54
  277. package/dist/memory/thread-store.d.ts +26 -17
  278. package/dist/memory/thread-store.js +15 -9
  279. package/dist/memory/tool-call-integrity.d.ts +2 -2
  280. package/dist/memory/tool-call-integrity.js +4 -3
  281. package/dist/memory/working-memory.d.ts +16 -12
  282. package/dist/memory/working-memory.js +72 -61
  283. package/dist/prompts/briefing.d.ts +12 -12
  284. package/dist/prompts/briefing.js +1 -1
  285. package/dist/prompts/synthesis-agent.d.ts +1 -1
  286. package/dist/prompts/synthesis-agent.js +6 -14
  287. package/dist/provenance/collector.d.ts +6 -6
  288. package/dist/provenance/collector.js +15 -8
  289. package/dist/provenance/exec-frame.d.ts +2 -2
  290. package/dist/provenance/exec-frame.js +6 -1
  291. package/dist/provenance/seam.d.ts +1 -4
  292. package/dist/provenance/types.d.ts +6 -6
  293. package/dist/providers/ai-sdk.d.ts +113 -62
  294. package/dist/providers/ai-sdk.js +283 -518
  295. package/dist/providers/embedding.d.ts +2 -2
  296. package/dist/providers/embedding.js +1 -1
  297. package/dist/providers/errors.d.ts +22 -2
  298. package/dist/providers/errors.js +98 -50
  299. package/dist/providers/prompt-cache.d.ts +8 -8
  300. package/dist/providers/prompt-cache.js +13 -11
  301. package/dist/providers/reasoning.d.ts +2 -2
  302. package/dist/providers/reasoning.js +2 -2
  303. package/dist/providers/request-headers.js +12 -3
  304. package/dist/providers/types.d.ts +55 -94
  305. package/dist/reference-data/catalog.d.ts +2 -15
  306. package/dist/reference-data/catalog.js +25 -8
  307. package/dist/reference-data/receipt.d.ts +2 -2
  308. package/dist/report-model/assert-rules.js +1 -1
  309. package/dist/report-model/authoring-grammar.d.ts +211 -233
  310. package/dist/report-model/block-walk.d.ts +10 -10
  311. package/dist/report-model/block-walk.js +2 -0
  312. package/dist/report-model/draft-finish.d.ts +8 -8
  313. package/dist/report-model/draft-finish.js +1 -1
  314. package/dist/report-model/draft-hash.js +8 -7
  315. package/dist/report-model/draft-operations.d.ts +22 -10
  316. package/dist/report-model/draft-operations.js +48 -30
  317. package/dist/report-model/draft-read.d.ts +19 -7
  318. package/dist/report-model/draft-read.js +16 -6
  319. package/dist/report-model/draft.d.ts +844 -2
  320. package/dist/report-model/draft.js +3 -1
  321. package/dist/report-model/fixture-resolver.js +39 -16
  322. package/dist/report-model/pin-snapshot.d.ts +2 -2
  323. package/dist/report-model/pin-snapshot.js +15 -15
  324. package/dist/report-model/production-resolver.d.ts +18 -18
  325. package/dist/report-model/production-resolver.js +50 -42
  326. package/dist/report-model/reference-resolver.d.ts +26 -10
  327. package/dist/report-model/reference-resolver.js +68 -5
  328. package/dist/report-model/reference-stamp.js +30 -38
  329. package/dist/report-model/structural-validation.js +12 -4
  330. package/dist/report-model/validate.d.ts +7 -7
  331. package/dist/report-model/validate.js +6 -6
  332. package/dist/report-render/assets.d.ts +2 -2
  333. package/dist/report-render/assets.js +27 -3
  334. package/dist/report-render/chart-export.d.ts +10 -2
  335. package/dist/report-render/chart-export.js +37 -11
  336. package/dist/report-render/chart-presets.d.ts +8 -8
  337. package/dist/report-render/chart-presets.js +3 -3
  338. package/dist/report-render/chart-renderers.d.ts +23 -16
  339. package/dist/report-render/chart-renderers.js +74 -53
  340. package/dist/report-render/chart-toolbox.d.ts +2 -2
  341. package/dist/report-render/chart-toolbox.js +7 -6
  342. package/dist/report-render/chart.d.ts +15 -16
  343. package/dist/report-render/chart.js +369 -252
  344. package/dist/report-render/design.d.ts +36 -297
  345. package/dist/report-render/design.js +0 -12
  346. package/dist/report-render/figures/common.d.ts +12 -12
  347. package/dist/report-render/figures/common.js +42 -31
  348. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  349. package/dist/report-render/figures/dendrogram.js +10 -10
  350. package/dist/report-render/figures/dense.js +15 -8
  351. package/dist/report-render/figures/dotplot.js +46 -33
  352. package/dist/report-render/figures/embedding.js +52 -43
  353. package/dist/report-render/figures/equal-units.d.ts +10 -10
  354. package/dist/report-render/figures/equal-units.js +27 -27
  355. package/dist/report-render/figures/forest.js +9 -7
  356. package/dist/report-render/figures/gsea.js +21 -11
  357. package/dist/report-render/figures/heatmap.js +13 -9
  358. package/dist/report-render/figures/index.d.ts +10 -10
  359. package/dist/report-render/figures/index.js +4 -2
  360. package/dist/report-render/figures/km.js +10 -9
  361. package/dist/report-render/figures/label-room.d.ts +12 -12
  362. package/dist/report-render/figures/label-room.js +7 -2
  363. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  364. package/dist/report-render/figures/locuszoom.js +59 -31
  365. package/dist/report-render/figures/lollipop.js +3 -2
  366. package/dist/report-render/figures/ma.js +8 -4
  367. package/dist/report-render/figures/manhattan.d.ts +1 -2
  368. package/dist/report-render/figures/manhattan.js +52 -34
  369. package/dist/report-render/figures/oncoprint.js +4 -5
  370. package/dist/report-render/figures/pca.js +25 -11
  371. package/dist/report-render/figures/qq.js +20 -9
  372. package/dist/report-render/figures/roc.js +1 -1
  373. package/dist/report-render/figures/sankey.d.ts +2 -2
  374. package/dist/report-render/figures/sankey.js +11 -10
  375. package/dist/report-render/figures/upset.d.ts +6 -6
  376. package/dist/report-render/figures/upset.js +7 -4
  377. package/dist/report-render/figures/volcano.js +12 -10
  378. package/dist/report-render/hybrid-svg.d.ts +4 -4
  379. package/dist/report-render/hybrid-svg.js +7 -5
  380. package/dist/report-render/number-format.d.ts +4 -4
  381. package/dist/report-render/number-format.js +62 -27
  382. package/dist/report-render/page.js +2 -1
  383. package/dist/report-render/provenance-data.d.ts +2 -2
  384. package/dist/report-render/references.d.ts +4 -4
  385. package/dist/report-render/render.d.ts +2 -2
  386. package/dist/report-render/render.js +10 -11
  387. package/dist/report-render/script-json.js +1 -1
  388. package/dist/report-render/table-data.d.ts +6 -6
  389. package/dist/report-render/test/options.d.ts +49 -0
  390. package/dist/report-render/test/options.js +143 -0
  391. package/dist/report-render/test/page-function.d.ts +19 -0
  392. package/dist/report-render/test/page-function.js +33 -0
  393. package/dist/report-render/types.d.ts +10 -10
  394. package/dist/report-render/value-bridge.d.ts +4 -4
  395. package/dist/report-render/value-bridge.js +27 -14
  396. package/dist/report-render/views/chart-view.d.ts +2 -2
  397. package/dist/report-render/views/chart-view.js +2 -2
  398. package/dist/report-render/views/lineage.d.ts +6 -6
  399. package/dist/report-render/views/lineage.js +2 -0
  400. package/dist/report-render/views/page-view.d.ts +2 -2
  401. package/dist/report-render/views/page-view.js +1 -0
  402. package/dist/report-render/views/prose.js +25 -8
  403. package/dist/report-render/views/references-view.js +12 -1
  404. package/dist/report-render/views/values.js +1 -1
  405. package/dist/runtime/assemble.d.ts +53 -26
  406. package/dist/runtime/assemble.js +103 -56
  407. package/dist/runtime/boot.d.ts +8 -7
  408. package/dist/runtime/boot.js +1 -1
  409. package/dist/runtime/connection-budget.d.ts +6 -6
  410. package/dist/runtime/connection-budget.js +1 -1
  411. package/dist/runtime/dbos.d.ts +29 -19
  412. package/dist/runtime/dbos.js +35 -20
  413. package/dist/runtime/result-serialization.js +18 -5
  414. package/dist/runtime/shutdown.d.ts +2 -2
  415. package/dist/sandbox/client.d.ts +7 -3
  416. package/dist/sandbox/cpu-files.d.ts +2 -2
  417. package/dist/sandbox/cpu-files.js +21 -4
  418. package/dist/sandbox/create-sandbox.d.ts +7 -8
  419. package/dist/sandbox/create-sandbox.js +6 -12
  420. package/dist/sandbox/docker-client.d.ts +48 -3
  421. package/dist/sandbox/docker-client.js +10 -6
  422. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  423. package/dist/sandbox/exec-outcome.d.ts +2 -2
  424. package/dist/sandbox/exec-outcome.js +1 -1
  425. package/dist/sandbox/exec.d.ts +10 -6
  426. package/dist/sandbox/exec.js +27 -12
  427. package/dist/sandbox/execution-id.js +14 -6
  428. package/dist/sandbox/farm.d.ts +2 -2
  429. package/dist/sandbox/farm.js +22 -27
  430. package/dist/sandbox/identity.d.ts +7 -0
  431. package/dist/sandbox/identity.js +14 -3
  432. package/dist/sandbox/image-packages.js +15 -27
  433. package/dist/sandbox/k8s-client.d.ts +35 -8
  434. package/dist/sandbox/k8s-client.js +6 -5
  435. package/dist/sandbox/labels.js +1 -0
  436. package/dist/sandbox/liveness.js +3 -1
  437. package/dist/sandbox/mount-plan.d.ts +10 -10
  438. package/dist/sandbox/mount-plan.js +13 -14
  439. package/dist/sandbox/notification-sweep.d.ts +4 -4
  440. package/dist/sandbox/notification-sweep.js +4 -7
  441. package/dist/sandbox/package-identity.d.ts +6 -13
  442. package/dist/sandbox/package-identity.js +46 -28
  443. package/dist/sandbox/reaper.d.ts +10 -10
  444. package/dist/sandbox/reaper.js +4 -6
  445. package/dist/sandbox/sandbox-error.d.ts +2 -9
  446. package/dist/sandbox/sandbox-error.js +21 -8
  447. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  448. package/dist/sandbox/sandbox-step-translate.js +22 -8
  449. package/dist/sandbox/step-sandbox.d.ts +47 -0
  450. package/dist/sandbox/step-sandbox.js +53 -0
  451. package/dist/sandbox/types.d.ts +18 -19
  452. package/dist/sandbox/types.js +1 -1
  453. package/dist/schemas/artifact-manifest.d.ts +4 -4
  454. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  455. package/dist/schemas/file-metadata.js +2 -4
  456. package/dist/schemas/plan-schemas.d.ts +31 -31
  457. package/dist/schemas/run-synthesis.d.ts +95 -26
  458. package/dist/schemas/run-synthesis.js +3 -1
  459. package/dist/schemas/validate-plan.d.ts +4 -4
  460. package/dist/schemas/validate-plan.js +17 -5
  461. package/dist/schemas/workflow-state.d.ts +19 -19
  462. package/dist/schemas/workflow-state.js +2 -2
  463. package/dist/state/active-turns.d.ts +36 -0
  464. package/dist/state/active-turns.js +67 -0
  465. package/dist/state/analyses-metrics.d.ts +8 -8
  466. package/dist/state/analyses-metrics.js +4 -4
  467. package/dist/state/analyses.d.ts +0 -14
  468. package/dist/state/analyses.js +0 -32
  469. package/dist/state/artifacts.d.ts +32 -19
  470. package/dist/state/artifacts.js +28 -5
  471. package/dist/state/data-profile.d.ts +2 -2
  472. package/dist/state/db.d.ts +12 -2
  473. package/dist/state/db.js +5 -0
  474. package/dist/state/edit-intents.d.ts +4 -0
  475. package/dist/state/edit-intents.js +71 -0
  476. package/dist/state/index.d.ts +4 -4
  477. package/dist/state/index.js +2 -2
  478. package/dist/state/init.d.ts +2 -1
  479. package/dist/state/init.js +5 -2
  480. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  482. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  484. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  486. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  488. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  490. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  492. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  494. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  496. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  498. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  499. package/dist/state/migrations/index.js +18 -0
  500. package/dist/state/paused-work.d.ts +52 -0
  501. package/dist/state/paused-work.js +105 -0
  502. package/dist/state/plans.d.ts +27 -8
  503. package/dist/state/plans.js +14 -11
  504. package/dist/state/purge-analysis.d.ts +6 -6
  505. package/dist/state/purge-analysis.js +10 -2
  506. package/dist/state/report-session-state.d.ts +43 -18
  507. package/dist/state/report-session-state.js +43 -4
  508. package/dist/state/report-versions.d.ts +16 -11
  509. package/dist/state/report-versions.js +5 -3
  510. package/dist/state/runs.d.ts +30 -19
  511. package/dist/state/runs.js +43 -51
  512. package/dist/state/schema.d.ts +18 -21
  513. package/dist/state/schema.js +4 -5
  514. package/dist/state/snapshot-parse.d.ts +2 -2
  515. package/dist/state/snapshot-parse.js +14 -8
  516. package/dist/state/step-executions.d.ts +20 -8
  517. package/dist/state/step-executions.js +6 -4
  518. package/dist/state/tool-outputs.d.ts +2 -2
  519. package/dist/state/tool-outputs.js +2 -1
  520. package/dist/state/vector-store.d.ts +16 -16
  521. package/dist/state/vector-store.js +11 -7
  522. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  523. package/dist/tasks/data-profile-absorb.js +21 -16
  524. package/dist/tasks/data-profile-activity.d.ts +5 -5
  525. package/dist/tasks/data-profile-activity.js +5 -5
  526. package/dist/tasks/data-profile-index.d.ts +4 -4
  527. package/dist/tasks/data-profile-index.js +32 -17
  528. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  529. package/dist/tasks/data-profile-resolve.js +88 -62
  530. package/dist/tasks/data-profile.d.ts +40 -31
  531. package/dist/tasks/data-profile.js +138 -95
  532. package/dist/tasks/extract-values.d.ts +26 -79
  533. package/dist/tasks/extract-values.js +48 -108
  534. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  535. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  536. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  537. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  538. package/dist/testing.d.ts +62 -0
  539. package/dist/testing.js +101 -0
  540. package/dist/tools/ad-hoc-router.d.ts +9 -9
  541. package/dist/tools/ad-hoc-router.js +65 -52
  542. package/dist/tools/analysis-invocation.d.ts +7 -0
  543. package/dist/tools/analysis-invocation.js +29 -5
  544. package/dist/tools/approval/contract.d.ts +8 -52
  545. package/dist/tools/approval/contract.js +7 -36
  546. package/dist/tools/approval/gateway.d.ts +27 -28
  547. package/dist/tools/approval/gateway.js +33 -130
  548. package/dist/tools/approval/queries.d.ts +6 -11
  549. package/dist/tools/approval/queries.js +43 -29
  550. package/dist/tools/approval/uuidv7.js +2 -2
  551. package/dist/tools/bio/chembl.d.ts +3 -3
  552. package/dist/tools/bio/chembl.js +10 -0
  553. package/dist/tools/bio/comptox.d.ts +25 -8
  554. package/dist/tools/bio/comptox.js +4 -2
  555. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  556. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  557. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  558. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  559. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  560. package/dist/tools/bio/keys.d.ts +2 -2
  561. package/dist/tools/bio/keys.js +3 -3
  562. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  563. package/dist/tools/bio/lookup-annotation.js +3 -0
  564. package/dist/tools/bio/opentargets.d.ts +1 -1
  565. package/dist/tools/bio/opentargets.js +6 -0
  566. package/dist/tools/bio/pubchem.d.ts +2 -2
  567. package/dist/tools/bio/pubchem.js +6 -0
  568. package/dist/tools/bio/pubmed.d.ts +26 -16
  569. package/dist/tools/bio/pubmed.js +9 -3
  570. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  571. package/dist/tools/bio/search-clinical-trials.js +5 -1
  572. package/dist/tools/bio/search-faers.d.ts +2 -2
  573. package/dist/tools/bio/search-faers.js +1 -1
  574. package/dist/tools/bio/search-gene.d.ts +2 -2
  575. package/dist/tools/bio/search-gene.js +1 -0
  576. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  577. package/dist/tools/bio/search-geo-datasets.js +5 -5
  578. package/dist/tools/bio/search-interactions.d.ts +1 -1
  579. package/dist/tools/bio/search-patents.d.ts +28 -22
  580. package/dist/tools/bio/search-patents.js +20 -17
  581. package/dist/tools/bio/search-protein.d.ts +2 -2
  582. package/dist/tools/bio/search-protein.js +1 -1
  583. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  584. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  585. package/dist/tools/bio/target-safety.d.ts +8 -8
  586. package/dist/tools/bio/target-safety.js +11 -6
  587. package/dist/tools/capability-data.d.ts +9 -5
  588. package/dist/tools/capability-data.js +2 -1
  589. package/dist/tools/define-tool.d.ts +55 -46
  590. package/dist/tools/define-tool.js +39 -27
  591. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  592. package/dist/tools/display/normalize-echart-spec.js +51 -27
  593. package/dist/tools/display/show-user.d.ts +2 -2
  594. package/dist/tools/display/show-user.js +1 -1
  595. package/dist/tools/execute-analysis.d.ts +19 -10
  596. package/dist/tools/execute-analysis.js +83 -62
  597. package/dist/tools/knowledge/check.d.ts +166 -44
  598. package/dist/tools/knowledge/check.js +5 -3
  599. package/dist/tools/knowledge/client.d.ts +31 -62
  600. package/dist/tools/knowledge/client.js +44 -27
  601. package/dist/tools/knowledge/environment.d.ts +6 -6
  602. package/dist/tools/knowledge/environment.js +18 -7
  603. package/dist/tools/knowledge/index.d.ts +2 -2
  604. package/dist/tools/knowledge/index.js +9 -9
  605. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  606. package/dist/tools/knowledge/local-slots.js +11 -4
  607. package/dist/tools/knowledge/pin.d.ts +2 -2
  608. package/dist/tools/knowledge/recommend.d.ts +20 -45
  609. package/dist/tools/knowledge/recommend.js +27 -19
  610. package/dist/tools/knowledge/situation.d.ts +40 -40
  611. package/dist/tools/knowledge/situation.js +2 -9
  612. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  613. package/dist/tools/knowledge/skeleton.js +10 -11
  614. package/dist/tools/knowledge/template.d.ts +20 -18
  615. package/dist/tools/knowledge/template.js +38 -32
  616. package/dist/tools/lib/alphafold-client.js +2 -1
  617. package/dist/tools/lib/amass-client.d.ts +28 -28
  618. package/dist/tools/lib/amass-client.js +20 -10
  619. package/dist/tools/lib/api-utils.d.ts +13 -3
  620. package/dist/tools/lib/api-utils.js +17 -3
  621. package/dist/tools/lib/bgee-client.d.ts +6 -6
  622. package/dist/tools/lib/bgee-client.js +16 -10
  623. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  624. package/dist/tools/lib/cbioportal-client.js +9 -8
  625. package/dist/tools/lib/chembl-client.d.ts +14 -14
  626. package/dist/tools/lib/chembl-client.js +11 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  628. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  629. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  630. package/dist/tools/lib/clinical-trials-client.js +10 -10
  631. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  632. package/dist/tools/lib/clinvar-client.js +6 -6
  633. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  634. package/dist/tools/lib/ctx-ops.js +13 -10
  635. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  636. package/dist/tools/lib/dgidb-client.js +10 -12
  637. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  638. package/dist/tools/lib/ema-client.d.ts +2 -2
  639. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  640. package/dist/tools/lib/ensembl-client.js +5 -4
  641. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  642. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  643. package/dist/tools/lib/html-text.d.ts +6 -0
  644. package/dist/tools/lib/html-text.js +9 -0
  645. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  646. package/dist/tools/lib/identifier-resolver.js +7 -3
  647. package/dist/tools/lib/impc-client.d.ts +8 -8
  648. package/dist/tools/lib/impc-client.js +46 -35
  649. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  650. package/dist/tools/lib/iuphar-client.js +7 -16
  651. package/dist/tools/lib/monarch-client.d.ts +4 -4
  652. package/dist/tools/lib/openfda-client.d.ts +22 -22
  653. package/dist/tools/lib/openfda-client.js +23 -22
  654. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  655. package/dist/tools/lib/pathway-client.d.ts +4 -4
  656. package/dist/tools/lib/pathway-client.js +15 -19
  657. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  658. package/dist/tools/lib/pharmgkb-client.js +1 -1
  659. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  660. package/dist/tools/lib/protein-family-modality.js +0 -2
  661. package/dist/tools/lib/protein-family-normalize.js +7 -0
  662. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  663. package/dist/tools/lib/pubchem-client.js +1 -0
  664. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  665. package/dist/tools/lib/pubchem-ops.js +8 -0
  666. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  667. package/dist/tools/lib/pubmed-client.js +1 -1
  668. package/dist/tools/lib/string-client.d.ts +6 -6
  669. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  670. package/dist/tools/lib/uniprot-client.js +5 -1
  671. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  672. package/dist/tools/memory/update-working-memory.js +21 -3
  673. package/dist/tools/read-tool-output.js +8 -2
  674. package/dist/tools/registry.d.ts +2 -2
  675. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  676. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  677. package/dist/tools/report-session/derive-table.d.ts +19 -59
  678. package/dist/tools/report-session/derive-table.js +120 -122
  679. package/dist/tools/report-session/examine-page.d.ts +6 -6
  680. package/dist/tools/report-session/examine-page.js +14 -12
  681. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  682. package/dist/tools/report-session/list-artifacts.js +5 -5
  683. package/dist/tools/report-session/page-faults.d.ts +6 -6
  684. package/dist/tools/report-session/page-faults.js +3 -1
  685. package/dist/tools/report-session/preview-report.d.ts +4 -3
  686. package/dist/tools/report-session/preview-report.js +26 -7
  687. package/dist/tools/report-session/record-version.d.ts +9 -4
  688. package/dist/tools/report-session/record-version.js +16 -9
  689. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  690. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  691. package/dist/tools/research/generate-analogy-report.js +80 -76
  692. package/dist/tools/research/generate-plan.d.ts +16 -16
  693. package/dist/tools/research/generate-plan.js +410 -374
  694. package/dist/tools/research/guarded-address.js +3 -2
  695. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  696. package/dist/tools/research/inspect-data-profile.js +26 -25
  697. package/dist/tools/research/inspect-run.d.ts +54 -27
  698. package/dist/tools/research/inspect-run.js +50 -40
  699. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  700. package/dist/tools/research/literature-reviewer.js +29 -28
  701. package/dist/tools/research/search-arxiv.d.ts +1 -1
  702. package/dist/tools/research/search-arxiv.js +1 -1
  703. package/dist/tools/research/search-github-repos.d.ts +10 -7
  704. package/dist/tools/research/search-github-repos.js +25 -22
  705. package/dist/tools/research/search-semantic-scholar.js +1 -1
  706. package/dist/tools/research/searxng-engine.d.ts +2 -2
  707. package/dist/tools/research/searxng-engine.js +6 -4
  708. package/dist/tools/research/web-fetch.d.ts +24 -21
  709. package/dist/tools/research/web-fetch.js +65 -74
  710. package/dist/tools/research/web-search.d.ts +26 -17
  711. package/dist/tools/research/web-search.js +26 -21
  712. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  713. package/dist/tools/sandbox/link-packages.js +11 -8
  714. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  715. package/dist/tools/sandbox/list-available-packages.js +31 -25
  716. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  717. package/dist/tools/sandbox/list-available-refs.js +61 -36
  718. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  719. package/dist/tools/sandbox/report-blocker.js +23 -73
  720. package/dist/tools/sandbox/skills.d.ts +16 -12
  721. package/dist/tools/sandbox/skills.js +16 -12
  722. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  723. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  724. package/dist/tools/start-report-session.d.ts +13 -5
  725. package/dist/tools/start-report-session.js +35 -8
  726. package/dist/tools/terminal-text.d.ts +5 -2
  727. package/dist/tools/terminal-text.js +35 -3
  728. package/dist/tools/workspace/decision-record.d.ts +4 -4
  729. package/dist/tools/workspace/decision-record.js +23 -13
  730. package/dist/tools/workspace/edit-file.d.ts +59 -20
  731. package/dist/tools/workspace/edit-file.js +81 -16
  732. package/dist/tools/workspace/execute-command.d.ts +15 -13
  733. package/dist/tools/workspace/execute-command.js +11 -9
  734. package/dist/tools/workspace/file-stat.d.ts +6 -3
  735. package/dist/tools/workspace/grep.d.ts +10 -7
  736. package/dist/tools/workspace/grep.js +9 -3
  737. package/dist/tools/workspace/list-files.d.ts +6 -3
  738. package/dist/tools/workspace/mutator.d.ts +28 -15
  739. package/dist/tools/workspace/mutator.js +107 -53
  740. package/dist/tools/workspace/read-file.d.ts +8 -5
  741. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  742. package/dist/tools/workspace/result-bounds.js +4 -2
  743. package/dist/tools/workspace/run-exec.d.ts +2 -2
  744. package/dist/tools/workspace/run-exec.js +3 -3
  745. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  746. package/dist/tools/workspace/scan-inputs.js +17 -5
  747. package/dist/tools/workspace/show-file.d.ts +1 -1
  748. package/dist/tools/workspace/show-file.js +2 -1
  749. package/dist/tools/workspace/show-plan.d.ts +8 -5
  750. package/dist/tools/workspace/show-plan.js +9 -8
  751. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  752. package/dist/tools/workspace/workspace-search.js +27 -14
  753. package/dist/tools/workspace/write-file.d.ts +9 -7
  754. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  755. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  756. package/dist/workflows/execute-analysis.d.ts +46 -62
  757. package/dist/workflows/execute-analysis.js +137 -219
  758. package/dist/workflows/pause.d.ts +71 -0
  759. package/dist/workflows/pause.js +173 -0
  760. package/dist/workflows/sandbox-step.d.ts +38 -61
  761. package/dist/workflows/sandbox-step.js +99 -106
  762. package/dist/workflows/test/sql-writes.d.ts +21 -0
  763. package/dist/workflows/test/sql-writes.js +36 -0
  764. package/dist/workspace/filesystem.d.ts +6 -6
  765. package/dist/workspace/filesystem.js +10 -8
  766. package/dist/workspace/paths.d.ts +1 -1
  767. package/dist/workspace/paths.js +15 -4
  768. package/dist/workspace/search-config.d.ts +2 -2
  769. package/dist/workspace/search-config.js +1 -1
  770. package/package.json +21 -22
  771. package/dist/loop/call-guard.d.ts +0 -50
  772. package/dist/loop/call-guard.js +0 -90
  773. package/dist/loop/continue-agent.d.ts +0 -40
  774. package/dist/loop/continue-agent.js +0 -38
  775. package/dist/loop/genai-spans.d.ts +0 -47
  776. package/dist/loop/genai-spans.js +0 -134
  777. package/dist/loop/run-agent.d.ts +0 -245
  778. package/dist/loop/run-agent.js +0 -1124
  779. package/dist/loop/run-step.d.ts +0 -29
  780. package/dist/loop/run-step.js +0 -34
  781. package/dist/loop/run-to-terminal.d.ts +0 -66
  782. package/dist/loop/run-to-terminal.js +0 -93
  783. package/dist/loop/tool-mask.d.ts +0 -23
  784. package/dist/loop/tool-mask.js +0 -46
  785. package/dist/providers/streaming-chat.d.ts +0 -32
  786. package/dist/providers/streaming-chat.js +0 -91
  787. package/dist/tasks/derive-table-exec.d.ts +0 -54
  788. package/dist/tasks/derive-table-exec.js +0 -86
  789. package/dist/workflows/suspension.d.ts +0 -32
  790. package/dist/workflows/suspension.js +0 -38
@@ -18,6 +18,7 @@
18
18
  * parses.
19
19
  */
20
20
  import { z } from "zod";
21
+ import type { SituationFieldsSchema } from "./situation.js";
21
22
  /** The role of the blocking factor. A role and never a column name, because the situation leaves the machine. */
22
23
  export type BlockingRole = "individual" | "cell_line" | "litter" | "site" | "pair" | "other";
23
24
  /** The role of a covariate of the design. A role and never a column name. */
@@ -25,48 +26,12 @@ export type CovariateRole = "sex" | "age" | "clinical" | "technical" | "other";
25
26
  /** The role of the numeric variable of interest when the question is a trend, not a comparison of groups. */
26
27
  export type PredictorRole = "dose" | "time" | "age" | "score" | "other";
27
28
  /** The typed description of one analysis situation. Never a sample row, never an identifier, and never a column name. */
28
- export interface KnowledgeSituation {
29
- readonly question: "differential_expression" | "enrichment" | "qc" | "full_plan";
30
- readonly modality: "bulk_rna_seq";
31
- readonly data_state: "fastq" | "counts" | "tpm_or_fpkm" | "log_normalized";
32
- readonly count_source?: "salmon" | "kallisto" | "star_featurecounts" | "rsem" | "unknown";
33
- /** Whether the length correction of a quantifier occurred. Never required: the service sets `unknown` on counts. */
34
- readonly import_state?: "quantifications" | "estimated_counts_with_lengths" | "corrected_counts" | "integer_counts" | "unknown";
35
- readonly organism: "human" | "mouse" | "other";
36
- readonly n_groups: number;
37
- readonly n_per_group_min: number;
38
- readonly n_per_group_max: number;
39
- /** The total number of biological samples. Never required. */
40
- readonly n_samples?: number;
41
- /** The number of samples with an observed event, for a survival question. Never required. */
42
- readonly n_events?: number;
43
- readonly paired: boolean;
44
- /** The role of the blocking factor, or null. The column name stays on the machine. */
45
- readonly blocking_factor?: BlockingRole | null;
46
- /** How the blocking factor relates to the condition: crossed, or nested inside one condition. */
47
- readonly block_structure?: "crossed" | "nested";
48
- readonly batch: "none" | "known_balanced" | "known_confounded" | "known_unbalanced" | "suspected";
49
- /** The role of each covariate of the design, one entry per covariate. The column names stay on the machine. */
50
- readonly covariates?: readonly CovariateRole[];
51
- readonly n_timepoints?: number | null;
52
- /** The role of the numeric variable of interest when the question is a trend over it; then `n_groups` is 1. The column name stays on the machine. */
53
- readonly continuous_predictor?: PredictorRole | null;
54
- /** True when some columns of the count table are technical replicates of one biological sample. */
55
- readonly technical_replicates?: boolean;
56
- /** The row unit of the count table. Absent for a gene-level table. */
57
- readonly feature_level?: "gene" | "exon" | "transcript";
58
- readonly library_type?: "polyA" | "total" | "three_prime" | "unknown";
59
- readonly strandedness?: "verified" | "declared_unverified" | "unknown";
60
- readonly interaction?: boolean;
61
- /** True for a classifier of the samples into classes; absent for a per-sample score. */
62
- readonly classifier?: boolean;
63
- readonly quality_flags?: readonly ("low_depth_sample" | "outlier_sample" | "sample_identity_doubt" | "high_duplication" | "degraded_rna")[];
64
- }
29
+ export type KnowledgeSituation = z.infer<typeof SituationFieldsSchema>;
65
30
  export declare const RecommendResponseSchema: z.ZodObject<{
66
31
  match: z.ZodEnum<{
67
- none: "none";
68
32
  applicable: "applicable";
69
33
  flag: "flag";
34
+ none: "none";
70
35
  }>;
71
36
  snapshot: z.ZodObject<{
72
37
  date: z.ZodString;
@@ -98,14 +63,14 @@ export declare const RecommendResponseSchema: z.ZodObject<{
98
63
  }, z.core.$loose>>;
99
64
  parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
100
65
  name: z.ZodString;
101
- value: z.ZodUnknown;
66
+ value: z.ZodJSONSchema;
102
67
  default_source: z.ZodOptional<z.ZodString>;
103
68
  }, z.core.$loose>>>;
104
69
  conflicts: z.ZodOptional<z.ZodArray<z.ZodObject<{
105
70
  parameter: z.ZodString;
106
71
  entries: z.ZodArray<z.ZodObject<{
107
72
  rule: z.ZodString;
108
- value: z.ZodUnknown;
73
+ value: z.ZodJSONSchema;
109
74
  }, z.core.$loose>>;
110
75
  }, z.core.$loose>>>;
111
76
  substitution: z.ZodOptional<z.ZodObject<{
@@ -132,6 +97,10 @@ export declare const RecommendResponseSchema: z.ZodObject<{
132
97
  why: z.ZodString;
133
98
  }, z.core.$loose>>;
134
99
  }, z.core.$loose>>;
100
+ package: z.ZodOptional<z.ZodObject<{
101
+ name: z.ZodString;
102
+ }, z.core.$loose>>;
103
+ forbids: z.ZodOptional<z.ZodJSONSchema>;
135
104
  }, z.core.$loose>>;
136
105
  uncovered: z.ZodArray<z.ZodString>;
137
106
  unrealized: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -211,7 +180,7 @@ export declare const RenderResponseSchema: z.ZodObject<{
211
180
  script: z.ZodString;
212
181
  slots: z.ZodArray<z.ZodObject<{
213
182
  name: z.ZodString;
214
- value: z.ZodOptional<z.ZodUnknown>;
183
+ value: z.ZodOptional<z.ZodJSONSchema>;
215
184
  source: z.ZodString;
216
185
  adaptable: z.ZodBoolean;
217
186
  lines: z.ZodArray<z.ZodNumber>;
@@ -229,7 +198,7 @@ export declare const RenderResponseSchema: z.ZodObject<{
229
198
  path: z.ZodString;
230
199
  description: z.ZodOptional<z.ZodString>;
231
200
  }, z.core.$loose>>;
232
- decision_record: z.ZodRecord<z.ZodString, z.ZodUnknown>;
201
+ decision_record: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
233
202
  }, z.core.$loose>;
234
203
  export type RenderResponse = z.infer<typeof RenderResponseSchema>;
235
204
  /**
@@ -245,7 +214,7 @@ declare const TemplateParameterSchema: z.ZodObject<{
245
214
  adaptable: z.ZodBoolean;
246
215
  local: z.ZodOptional<z.ZodBoolean>;
247
216
  required: z.ZodOptional<z.ZodBoolean>;
248
- default: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>]>>;
217
+ default: z.ZodOptional<z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodArray<z.ZodString>]>>>, z.ZodTransform<string | number | boolean | string[] | undefined, string | number | boolean | string[] | null | undefined>>>;
249
218
  default_source: z.ZodOptional<z.ZodString>;
250
219
  enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
251
220
  pattern: z.ZodOptional<z.ZodString>;
@@ -274,7 +243,7 @@ export declare const TemplateContractSchema: z.ZodObject<{
274
243
  adaptable: z.ZodBoolean;
275
244
  local: z.ZodOptional<z.ZodBoolean>;
276
245
  required: z.ZodOptional<z.ZodBoolean>;
277
- default: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>]>>;
246
+ default: z.ZodOptional<z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodArray<z.ZodString>]>>>, z.ZodTransform<string | number | boolean | string[] | undefined, string | number | boolean | string[] | null | undefined>>>;
278
247
  default_source: z.ZodOptional<z.ZodString>;
279
248
  enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
280
249
  pattern: z.ZodOptional<z.ZodString>;
@@ -295,11 +264,11 @@ export declare const TemplateContractSchema: z.ZodObject<{
295
264
  }, z.core.$loose>;
296
265
  export type TemplateContract = z.infer<typeof TemplateContractSchema>;
297
266
  /** The preferences of the caller: the language of the template the answer names. */
298
- export interface KnowledgePreferences {
267
+ export type KnowledgePreferences = {
299
268
  readonly language?: "R" | "python";
300
- }
269
+ };
301
270
  /** What a drafted step carries into the check. */
302
- export interface DraftedStep {
271
+ export type DraftedStep = {
303
272
  readonly step_type: string;
304
273
  readonly method: string;
305
274
  /** The catalog id of the method (`M-dddd`), copied from the recommendation. An exact match wins over the wording. */
@@ -311,22 +280,22 @@ export interface DraftedStep {
311
280
  }[];
312
281
  /** The outcome the step states when the design forbids inference, for example `descriptive_only`. */
313
282
  readonly outcome?: string;
314
- }
315
- export interface FarmPackage {
283
+ };
284
+ export type FarmPackage = {
316
285
  readonly name: string;
317
286
  readonly version: string;
318
- }
287
+ };
319
288
  /** The service could not answer after the retry policy. The run continues from the prose skills. */
320
- export interface KnowledgeUnavailable {
289
+ export type KnowledgeUnavailable = {
321
290
  readonly match: "unavailable";
322
291
  readonly reason: string;
323
- }
292
+ };
324
293
  /**
325
294
  * The service serves another release than the one the plan pinned, and it
326
295
  * did no work. A plan is not moved to a new release in silence: the caller
327
296
  * proceeds as with an unavailable service, and it states the two digests.
328
297
  */
329
- export interface KnowledgeSnapshotMismatch {
298
+ export type KnowledgeSnapshotMismatch = {
330
299
  readonly match: "snapshot_mismatch";
331
300
  readonly message: string;
332
301
  readonly expected: string;
@@ -334,9 +303,9 @@ export interface KnowledgeSnapshotMismatch {
334
303
  readonly date: string;
335
304
  readonly digest: string;
336
305
  };
337
- }
306
+ };
338
307
  /** The service refused the request and named the field or the slot and the permitted values. */
339
- export interface KnowledgeRejected {
308
+ export type KnowledgeRejected = {
340
309
  readonly match: "rejected";
341
310
  readonly message: string;
342
311
  readonly issues: readonly {
@@ -346,17 +315,17 @@ export interface KnowledgeRejected {
346
315
  readonly reason?: string;
347
316
  readonly permitted?: readonly string[];
348
317
  }[];
349
- }
318
+ };
350
319
  /** What a render call carries beside the template and the slots. */
351
- export interface RenderCallOptions {
320
+ export type RenderCallOptions = {
352
321
  /** The id of the plan step that runs the script. */
353
322
  readonly step?: string;
354
323
  /** The claims of the plan step that selected the template. Each must resolve in the served snapshot. */
355
324
  readonly claims?: readonly string[];
356
325
  /** The release digest the plan pinned. The service refuses another release with `snapshot_mismatch`. */
357
326
  readonly expectedSnapshot?: string;
358
- }
359
- export interface KnowledgeClient {
327
+ };
328
+ export type KnowledgeClient = {
360
329
  /** `expectedSnapshot` pins the release of an earlier answer of the same plan; the first call of a plan has none. */
361
330
  recommend(situation: KnowledgeSituation, responseFormat?: "concise" | "detailed", preferences?: KnowledgePreferences, expectedSnapshot?: string): Promise<RecommendResponse | KnowledgeUnavailable | KnowledgeRejected | KnowledgeSnapshotMismatch>;
362
331
  check(situation: KnowledgeSituation, steps: readonly DraftedStep[], expectedSnapshot?: string): Promise<CheckResponse | KnowledgeUnavailable | KnowledgeRejected | KnowledgeSnapshotMismatch>;
@@ -369,14 +338,14 @@ export interface KnowledgeClient {
369
338
  * unknown template is `rejected` with the field `template`.
370
339
  */
371
340
  contract(template: string): Promise<TemplateContract | KnowledgeUnavailable | KnowledgeRejected>;
372
- }
373
- export interface HttpKnowledgeClientConfig {
341
+ };
342
+ export type HttpKnowledgeClientConfig = {
374
343
  /** The service origin, for example `https://knowledge.inflexa.ai`. */
375
344
  readonly baseUrl: string;
376
345
  /** The bearer key. The license of the service. */
377
346
  readonly apiKey: string;
378
347
  readonly timeoutMs?: number;
379
348
  readonly maxRetries?: number;
380
- }
349
+ };
381
350
  export declare function createHttpKnowledgeClient(config: HttpKnowledgeClientConfig): KnowledgeClient;
382
351
  export {};
@@ -19,6 +19,8 @@
19
19
  */
20
20
  import { z } from "zod";
21
21
  import { apiFetchValidated, describeApiError } from "../lib/api-utils.js";
22
+ import { parseJsonAs, safeParseJsonAs } from "../../lib/parse-json.js";
23
+ import { parseUnknownRecord } from "../../lib/unknown-containers.js";
22
24
  // ── The answers, as the harness reads them ──────────────────────────
23
25
  const SnapshotRefSchema = z.object({ date: z.string(), digest: z.string() });
24
26
  /** A method of the catalog by id and label. */
@@ -26,7 +28,7 @@ const MethodRefSchema = z.looseObject({ id: z.string(), label: z.string() });
26
28
  /** Two rules of equal specificity and strength disagree on a parameter. The step omits the parameter and names both. */
27
29
  const ProcedureConflictSchema = z.looseObject({
28
30
  parameter: z.string(),
29
- entries: z.array(z.looseObject({ rule: z.string(), value: z.unknown() })),
31
+ entries: z.array(z.looseObject({ rule: z.string(), value: z.json() })),
30
32
  });
31
33
  /** The step method is a declared substitute: `for` names the method of record it stands in for. */
32
34
  const ProcedureSubstitutionSchema = z.looseObject({ for: z.string(), label: z.string(), template: z.string() });
@@ -52,11 +54,15 @@ const ProcedureStepSchema = z.looseObject({
52
54
  flags: z.array(z.looseObject({ rule: z.string(), severity: z.string(), message: z.string(), outcome: z.string().optional() })).optional(),
53
55
  alternatives: z.array(z.looseObject({ method: z.string(), label: z.string(), when: z.string(), rules: z.array(z.string()) })).optional(),
54
56
  disputed: z.looseObject({ rule: z.string(), sides: z.array(z.string()) }).optional(),
55
- parameters: z.array(z.looseObject({ name: z.string(), value: z.unknown(), default_source: z.string().optional() })).optional(),
57
+ parameters: z.array(z.looseObject({ name: z.string(), value: z.json(), default_source: z.string().optional() })).optional(),
56
58
  conflicts: z.array(ProcedureConflictSchema).optional(),
57
59
  substitution: ProcedureSubstitutionSchema.optional(),
58
60
  limit: ProcedureLimitSchema.optional(),
59
61
  unrealized: ProcedureUnrealizedSchema.optional(),
62
+ /** The runtime package the step installs, when the service names one. */
63
+ package: z.looseObject({ name: z.string() }).optional(),
64
+ /** The forbidden method ids, read defensively by the grounding report. */
65
+ forbids: z.json().optional(),
60
66
  });
61
67
  const ClaimSchema = z.looseObject({
62
68
  id: z.string(),
@@ -111,7 +117,7 @@ export const RenderResponseSchema = z.looseObject({
111
117
  /** A local slot entry has no value: the host binds it. */
112
118
  slots: z.array(z.looseObject({
113
119
  name: z.string(),
114
- value: z.unknown().optional(),
120
+ value: z.json().optional(),
115
121
  source: z.string(),
116
122
  adaptable: z.boolean(),
117
123
  lines: z.array(z.number()),
@@ -122,12 +128,13 @@ export const RenderResponseSchema = z.looseObject({
122
128
  environment: z.looseObject({ match: z.string() }),
123
129
  syntax: z.looseObject({ status: z.string() }),
124
130
  outputs: z.array(z.looseObject({ name: z.string(), path: z.string(), description: z.string().optional() })),
125
- decision_record: z.record(z.string(), z.unknown()),
131
+ decision_record: z.record(z.string(), z.json()),
126
132
  });
127
133
  // ── The template contract ───────────────────────────────────────────
128
- const SlotScalarSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
129
- /** A slot value on the wire: a scalar, or a list of scalars. */
130
- const SlotValueSchema = z.union([SlotScalarSchema, z.array(SlotScalarSchema)]);
134
+ /** A scalar on the wire. */
135
+ const SlotScalarSchema = z.union([z.string(), z.number(), z.boolean()]);
136
+ /** A slot value on the wire: a scalar, or a list of strings — the contract the service states for a default. */
137
+ const SlotValueSchema = z.union([SlotScalarSchema, z.array(z.string())]);
131
138
  /**
132
139
  * One slot of a template with the constraint a caller value must obey.
133
140
  * `adaptable: false` marks a pinned slot: the render refuses a caller value
@@ -142,7 +149,10 @@ const TemplateParameterSchema = z.looseObject({
142
149
  /** True for a slot whose value is a fact of the machine (a path, a column name, a level label, a formula): the host binds it, and the service never sees it. */
143
150
  local: z.boolean().optional(),
144
151
  required: z.boolean().optional(),
145
- default: SlotValueSchema.optional(),
152
+ /** A `null` default is a slot with no default: it parses to an absent value. */
153
+ default: SlotValueSchema.nullish()
154
+ .transform((value) => value ?? undefined)
155
+ .optional(),
146
156
  default_source: z.string().optional(),
147
157
  enum: z.array(z.string()).optional(),
148
158
  pattern: z.string().optional(),
@@ -185,12 +195,21 @@ const ValidationFailureSchema = z.looseObject({
185
195
  permitted: z.array(z.string()).optional(),
186
196
  })),
187
197
  });
198
+ /** The runtime shape of that answer, for the paths whose type says it cannot arrive. */
199
+ const SnapshotMismatchAnswerSchema = z.looseObject({
200
+ match: z.literal("snapshot_mismatch"),
201
+ message: z.string(),
202
+ });
203
+ /** True when `call` answered a mismatch envelope on a route whose type says it cannot carry one. */
204
+ function isSnapshotMismatchAnswer(answer) {
205
+ return SnapshotMismatchAnswerSchema.safeParse(answer).success;
206
+ }
188
207
  /** The `message` of an error envelope, or the body itself when it is not one. */
189
208
  function messageOf(body) {
190
209
  try {
191
- const raw = JSON.parse(body);
192
- if (raw !== null && typeof raw === "object" && "message" in raw && typeof raw.message === "string")
193
- return raw.message;
210
+ const message = parseUnknownRecord(parseJsonAs(body, z.json()))?.["message"];
211
+ if (typeof message === "string")
212
+ return message;
194
213
  }
195
214
  catch {
196
215
  // Not JSON: the body is the message.
@@ -223,28 +242,26 @@ function refusalOf(error, notFoundField) {
223
242
  return { match: "rejected", message, issues: [{ field: notFoundField, message }] };
224
243
  }
225
244
  if (error.status === 409) {
226
- let raw;
245
+ let parsed;
227
246
  try {
228
- raw = JSON.parse(error.body);
247
+ parsed = safeParseJsonAs(error.body, SnapshotMismatchSchema);
229
248
  }
230
249
  catch {
231
250
  return undefined;
232
251
  }
233
- const parsed = SnapshotMismatchSchema.safeParse(raw);
234
252
  if (!parsed.success)
235
253
  return undefined;
236
254
  return { match: "snapshot_mismatch", message: parsed.data.message, expected: parsed.data.expected, served: parsed.data.served };
237
255
  }
238
256
  if (error.status !== 400)
239
257
  return undefined;
240
- let raw;
258
+ let parsed;
241
259
  try {
242
- raw = JSON.parse(error.body);
260
+ parsed = safeParseJsonAs(error.body, ValidationFailureSchema);
243
261
  }
244
262
  catch {
245
263
  return { match: "rejected", message: error.body || "the service refused the request", issues: [] };
246
264
  }
247
- const parsed = ValidationFailureSchema.safeParse(raw);
248
265
  if (!parsed.success)
249
266
  return { match: "rejected", message: error.body, issues: [] };
250
267
  return { match: "rejected", message: parsed.data.message, issues: parsed.data.issues };
@@ -263,7 +280,7 @@ export function createHttpKnowledgeClient(config) {
263
280
  ...policy,
264
281
  method,
265
282
  headers,
266
- ...(body === undefined ? {} : { body: JSON.stringify(body) }),
283
+ body: JSON.stringify(body),
267
284
  });
268
285
  if (result.isOk())
269
286
  return result.value;
@@ -276,7 +293,7 @@ export function createHttpKnowledgeClient(config) {
276
293
  async function lookup(path, schema, notFoundField) {
277
294
  const answer = await call("GET", path, undefined, schema, notFoundField);
278
295
  // A GET without a body has no pin, thus a 409 is not among its answers; the guard keeps the type honest.
279
- if (typeof answer === "object" && answer !== null && "match" in answer && answer.match === "snapshot_mismatch") {
296
+ if (isSnapshotMismatchAnswer(answer)) {
280
297
  return { match: "unavailable", reason: answer.message };
281
298
  }
282
299
  return answer;
@@ -284,18 +301,18 @@ export function createHttpKnowledgeClient(config) {
284
301
  return {
285
302
  recommend: (situation, responseFormat, preferences, expectedSnapshot) => call("POST", "/v1/recommend", {
286
303
  situation,
287
- ...(responseFormat ? { response_format: responseFormat } : {}),
288
- ...(preferences ? { preferences } : {}),
289
- ...(expectedSnapshot ? { expected_snapshot: expectedSnapshot } : {}),
304
+ response_format: responseFormat,
305
+ preferences,
306
+ expected_snapshot: expectedSnapshot,
290
307
  }, RecommendResponseSchema),
291
- check: (situation, steps, expectedSnapshot) => call("POST", "/v1/check", { situation, steps, ...(expectedSnapshot ? { expected_snapshot: expectedSnapshot } : {}) }, CheckResponseSchema),
308
+ check: (situation, steps, expectedSnapshot) => call("POST", "/v1/check", { situation, steps, expected_snapshot: expectedSnapshot }, CheckResponseSchema),
292
309
  render: (template, slots, farm, options) => call("POST", "/v1/template/render", {
293
310
  template,
294
311
  slots,
295
- ...(farm ? { farm } : {}),
296
- ...(options?.step ? { step: options.step } : {}),
297
- ...(options?.claims ? { claims: options.claims } : {}),
298
- ...(options?.expectedSnapshot ? { expected_snapshot: options.expectedSnapshot } : {}),
312
+ farm,
313
+ step: options?.step,
314
+ claims: options?.claims,
315
+ expected_snapshot: options?.expectedSnapshot,
299
316
  }, RenderResponseSchema),
300
317
  contract: (template) => lookup(`/v1/templates/${encodeURIComponent(templateIdOf(template))}`, TemplateContractSchema, "template"),
301
318
  };
@@ -20,15 +20,15 @@
20
20
  * fills a gap and never names a path it did not read.
21
21
  */
22
22
  import type { FarmPackage, RecommendResponse } from "./client.js";
23
- export interface EnvironmentPaths {
23
+ export type EnvironmentPaths = {
24
24
  /** Host path of the farm `inflexa.lock`. Absent, the packages read as unknown. */
25
25
  readonly farmLockFile?: string;
26
26
  /** Host path of the `image-packages.json` of the store. Absent, the packages the image ships are unknown. */
27
27
  readonly imagePackagesFile?: string;
28
28
  /** Host path of the reference store. Absent, the collection reads as unknown. */
29
29
  readonly refStorePath?: string;
30
- }
31
- export interface StepEnvironment {
30
+ };
31
+ export type StepEnvironment = {
32
32
  readonly package?: {
33
33
  readonly name: string;
34
34
  readonly present: boolean;
@@ -40,14 +40,14 @@ export interface StepEnvironment {
40
40
  readonly path?: string;
41
41
  readonly title?: string;
42
42
  };
43
- }
43
+ };
44
44
  /** Where each fact of the environment came from: a record the host read, or nothing. */
45
- export interface EnvironmentSource {
45
+ export type EnvironmentSource = {
46
46
  readonly farm: "lock" | "unknown";
47
47
  /** `record` when the store carries the `image-packages.json` of the sandbox image. */
48
48
  readonly image: "record" | "unknown";
49
49
  readonly references: "store" | "unknown";
50
- }
50
+ };
51
51
  /** The recommend answer with an `environment` per step. */
52
52
  export type RecommendWithEnvironment = RecommendResponse & {
53
53
  readonly environment_source?: EnvironmentSource;
@@ -54,10 +54,21 @@ export function installedPackages(paths) {
54
54
  return { packages, farm: lock ? "lock" : "unknown", image: record ? "record" : "unknown" };
55
55
  }
56
56
  function tokens(text) {
57
- return text
58
- .toLowerCase()
59
- .split(/[^a-z0-9]+/)
60
- .filter((token) => token.length > 1);
57
+ const tokens = [];
58
+ let token = "";
59
+ const flush = () => {
60
+ if (token.length > 1)
61
+ tokens.push(token);
62
+ token = "";
63
+ };
64
+ for (const char of text.toLowerCase()) {
65
+ if ((char >= "a" && char <= "z") || (char >= "0" && char <= "9"))
66
+ token += char;
67
+ else
68
+ flush();
69
+ }
70
+ flush();
71
+ return tokens;
61
72
  }
62
73
  /** A collection term of the tree (`msigdb_hallmark_human`) matches an entry whose labels hold every token of the term. */
63
74
  function findCollection(term, entries) {
@@ -83,7 +94,7 @@ export async function joinEnvironment(answer, paths) {
83
94
  const pkg = step.package;
84
95
  if (pkg && farm) {
85
96
  const version = farm.get(pkg.name.toLowerCase());
86
- environment.package = { name: pkg.name, present: version !== undefined, ...(version !== undefined ? { version } : {}) };
97
+ environment.package = { name: pkg.name, present: version !== undefined, version };
87
98
  }
88
99
  const collection = step.parameters?.find((parameter) => parameter.name === "gene_set_collection");
89
100
  if (collection && typeof collection.value === "string" && entries) {
@@ -91,8 +102,8 @@ export async function joinEnvironment(answer, paths) {
91
102
  environment.collection = {
92
103
  name: collection.value,
93
104
  present: found !== undefined,
94
- ...(found ? { path: found.path } : {}),
95
- ...(found?.metadata?.title ? { title: found.metadata.title } : {}),
105
+ path: found?.path,
106
+ title: found?.metadata?.title,
96
107
  };
97
108
  }
98
109
  return Object.keys(environment).length > 0 ? { ...step, environment } : step;
@@ -21,7 +21,7 @@ export * from "./check.js";
21
21
  export * from "./recommend.js";
22
22
  export * from "./situation.js";
23
23
  export * from "./template.js";
24
- export interface KnowledgeToolsDeps {
24
+ export type KnowledgeToolsDeps = {
25
25
  readonly client?: KnowledgeClient;
26
26
  /** Host path of the farm `inflexa.lock`, or its resolver for each analysis, for the environment join of the recommend answer. */
27
27
  readonly farmLockFile?: EnvironmentStorePaths["farmLockFile"];
@@ -31,7 +31,7 @@ export interface KnowledgeToolsDeps {
31
31
  readonly refStorePath?: string;
32
32
  /** Receives each recommend answer the planner sees; see `KnowledgeRecommendDeps.onAnswer`. */
33
33
  readonly onRecommend?: KnowledgeRecommendDeps["onAnswer"];
34
- }
34
+ };
35
35
  /**
36
36
  * The planner tools: `knowledge_recommend` and `knowledge_check`, or an empty
37
37
  * list with no client. The two share one pin: the first recommend answer
@@ -35,24 +35,24 @@ export function createKnowledgeTools(deps) {
35
35
  createKnowledgeRecommendTool({
36
36
  client: deps.client,
37
37
  pin,
38
- ...(deps.farmLockFile ? { farmLockFile: deps.farmLockFile } : {}),
39
- ...(deps.imagePackagesFile ? { imagePackagesFile: deps.imagePackagesFile } : {}),
40
- ...(deps.refStorePath ? { refStorePath: deps.refStorePath } : {}),
41
- ...(deps.onRecommend ? { onAnswer: deps.onRecommend } : {}),
38
+ farmLockFile: deps.farmLockFile,
39
+ imagePackagesFile: deps.imagePackagesFile,
40
+ refStorePath: deps.refStorePath,
41
+ onAnswer: deps.onRecommend,
42
42
  }),
43
43
  createKnowledgeCheckTool({ client: deps.client, pin }),
44
44
  ];
45
45
  }
46
46
  /** A client that answers nothing: the definitions of the tools do not depend on the answers. */
47
47
  const NO_CLIENT = {
48
- recommend: async () => ({ match: "unavailable", reason: "no service" }),
49
- check: async () => ({ match: "unavailable", reason: "no service" }),
50
- render: async () => ({ match: "unavailable", reason: "no service" }),
51
- contract: async () => ({ match: "unavailable", reason: "no service" }),
48
+ recommend: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
49
+ check: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
50
+ render: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
51
+ contract: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
52
52
  };
53
53
  /** A mutator that writes nothing: the definition of the template tool does not depend on the workspace. */
54
54
  const NO_MUTATOR = {
55
- writeFile: async ({ path }) => ({ status: "out_of_scope", path }),
55
+ writeFile: ({ path }) => Promise.resolve({ status: "out_of_scope", path }),
56
56
  recordWrite: () => undefined,
57
57
  };
58
58
  /**
@@ -15,13 +15,13 @@ import type { TemplateParameter } from "./client.js";
15
15
  /** A slot value: a scalar, or a list of strings. */
16
16
  export type LocalSlotValue = string | number | boolean | readonly string[];
17
17
  /** One refusal of a local value, in the shape of a render rejection issue. */
18
- export interface LocalSlotIssue {
18
+ export type LocalSlotIssue = {
19
19
  readonly slot: string;
20
20
  readonly reason: string;
21
21
  readonly permitted?: readonly string[];
22
- }
22
+ };
23
23
  /** One bound slot as the decision record keeps it: the value, its source, and the lines that carried its marker. */
24
- export interface BoundLocalSlot {
24
+ export type BoundLocalSlot = {
25
25
  readonly name: string;
26
26
  readonly value: LocalSlotValue;
27
27
  readonly source: "caller" | "default";
@@ -30,7 +30,7 @@ export interface BoundLocalSlot {
30
30
  readonly lines: readonly number[];
31
31
  /** The `read` flag the service computed for the slot on the marked render, when it has a `when` condition. */
32
32
  readonly read?: boolean;
33
- }
33
+ };
34
34
  export type BindLocalSlotsResult = {
35
35
  readonly ok: false;
36
36
  readonly issues: readonly LocalSlotIssue[];
@@ -11,10 +11,14 @@
11
11
  * service for the same values. Keep the literal rules in step with the
12
12
  * service when a slot type is added.
13
13
  */
14
+ import { z } from "zod";
15
+ /** The contract of a validated local slot value, as `validateLocalSlot` accepts it. */
16
+ const LocalSlotValueSchema = z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]);
14
17
  /** The local slots of a contract, in the order the template declares them. */
15
18
  export function localParameters(parameters) {
16
19
  return parameters.filter((parameter) => parameter.local === true);
17
20
  }
21
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- a formula starts with ~ and holds only formula name characters; the shape is the slot contract.
18
22
  const FORMULA_PATTERN = /^~\s*[A-Za-z0-9_.+*:()\s-]+$/;
19
23
  /** Check one caller value against the contract of its slot, as the renderer of the service does. */
20
24
  export function validateLocalSlot(parameter, value) {
@@ -29,6 +33,7 @@ export function validateLocalSlot(parameter, value) {
29
33
  return { slot, reason: "a formula must start with ~ and hold only names, +, :, *, and parentheses" };
30
34
  if (permitted && !permitted.includes(value))
31
35
  return { slot, reason: `the value "${value}" is not permitted`, permitted };
36
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the pattern arrives as contract data from the template author, not from this module.
32
37
  if (parameter.pattern && !new RegExp(parameter.pattern).test(value))
33
38
  return { slot, reason: `the value must match ${parameter.pattern}` };
34
39
  return undefined;
@@ -135,7 +140,7 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
135
140
  continue;
136
141
  }
137
142
  // Validated above: a string, a finite number, a boolean, or a list of strings.
138
- const value = given;
143
+ const value = LocalSlotValueSchema.parse(given);
139
144
  values.set(parameter.name, value);
140
145
  slots.push({ name: parameter.name, value, source: "caller", adaptable: true, lines: [] });
141
146
  }
@@ -149,7 +154,7 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
149
154
  value,
150
155
  source: "default",
151
156
  adaptable: true,
152
- ...(parameter.default_source ? { default_source: parameter.default_source } : {}),
157
+ default_source: parameter.default_source,
153
158
  lines: [],
154
159
  });
155
160
  }
@@ -159,7 +164,9 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
159
164
  }
160
165
  if (issues.length > 0)
161
166
  return { ok: false, issues };
162
- const bound = script.replace(/\{\{([a-z][a-z0-9_]*)\}\}/g, (whole, name) => {
167
+ const bound =
168
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the {{name}} placeholders are the template grammar of the contract; the capture names the slot to bind.
169
+ script.replace(/\{\{([a-z][a-z0-9_]*)\}\}/g, (whole, name) => {
163
170
  const parameter = byName.get(name);
164
171
  if (!parameter)
165
172
  return whole;
@@ -171,7 +178,7 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
171
178
  const located = slots.map((entry) => ({
172
179
  ...entry,
173
180
  lines: script.split("\n").flatMap((line, index) => (line.includes(slotMarker(entry.name)) && index < lines.length ? [index + 1] : [])),
174
- ...(readByName.has(entry.name) ? { read: readByName.get(entry.name) } : {}),
181
+ read: readByName.get(entry.name),
175
182
  }));
176
183
  return { ok: true, script: bound, slots: located };
177
184
  }
@@ -5,10 +5,10 @@
5
5
  * moved to another release between two calls then refuses the call, and the
6
6
  * plan never mixes two releases in silence.
7
7
  */
8
- export interface SnapshotPin {
8
+ export type SnapshotPin = {
9
9
  /** The pinned release digest, or `undefined` before the first answer. */
10
10
  get(): string | undefined;
11
11
  /** Pin the release of the first answer. A later call with another digest changes nothing: the first release is the plan's. */
12
12
  set(digest: string): void;
13
- }
13
+ };
14
14
  export declare function createSnapshotPin(): SnapshotPin;