@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
@@ -12,6 +12,8 @@
12
12
  * specific class every one of its values satisfies.
13
13
  */
14
14
  import { KNOWN_EXTENSIONS } from "./formats.js";
15
+ import { isAllDigits, isAllHex } from "../lib/text.js";
16
+ import { presentAt, presentFirst } from "../lib/present.js";
15
17
  import { MAX_OPAQUE_ID_MEAN_RUN, MAX_OPAQUE_ID_SEPARATOR_FRACTION, MAX_SUFFIX_TOKEN_LENGTH, MIN_OPAQUE_ID_CASE_FLIPS, MIN_OPAQUE_ID_CHAR_CLASSES, MIN_OPAQUE_ID_DIGIT_FRACTION, MIN_OPAQUE_ID_LENGTH, OPAQUE_ID_CASE_FLIP_DIVISOR, } from "./tuning.js";
16
18
  export const ID_SYMBOL = "ID";
17
19
  export const DIGIT_SYMBOL = "#";
@@ -33,45 +35,106 @@ export function splitStem(fileName) {
33
35
  const parts = fileName.split(".");
34
36
  let cut = parts.length;
35
37
  while (cut > 1) {
36
- const candidate = parts[cut - 1].toLowerCase();
38
+ const candidate = presentAt(parts, cut - 1, "the trailing extension part").toLowerCase();
37
39
  if (!KNOWN_EXTENSIONS.has(candidate) || candidate.length > MAX_SUFFIX_TOKEN_LENGTH)
38
40
  break;
39
41
  cut--;
40
42
  }
41
43
  return { stem: parts.slice(0, cut).join("."), suffix: parts.slice(cut).join(".").toLowerCase() };
42
44
  }
45
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the fixed 8-4-4-4-12 hex groups are what make an identifier machine-issued rather than written.
43
46
  const UUID_PATTERN = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
44
- const HEX_DIGEST_PATTERN = /^(?:[0-9a-fA-F]{32}|[0-9a-fA-F]{40}|[0-9a-fA-F]{64})$/;
45
- const BASE64URL_PATTERN = /^[A-Za-z0-9\-_=]+$/;
47
+ const DIGEST_HEX_LENGTHS = new Set([32, 40, 64]);
48
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- captures year, month, and day out of `2026-08-24` or `2026_08_24` for the calendar range check below.
46
49
  const DELIMITED_DATE_PATTERN = /^(\d{4})[-_](\d{2})[-_](\d{2})$/;
50
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the same capture for the compact `20260824` form.
47
51
  const COMPACT_DATE_PATTERN = /^(\d{4})(\d{2})(\d{2})$/;
52
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- finds a date fused inside a longer run; the lookarounds keep digits outside the date in their own runs.
53
+ const EMBEDDED_DATE_PATTERN = /(?<![0-9])(?:\d{4}[-_]\d{2}[-_]\d{2}|\d{8})(?![0-9])/g;
54
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- letter and digit runs are the shape whose mean length separates written words from random class-mixed tokens.
55
+ const ALPHA_DIGIT_RUN_PATTERN = /[A-Za-z]+|[0-9]+/g;
56
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- splits a run into letter, digit, and `-_=` separator tokens; the three classes are the token lattice below.
57
+ const TOKEN_RUN_PATTERN = /[A-Za-z]+|[0-9]+|[-_=]+/g;
58
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- splits a path segment into base64url-charset runs and the runs outside that charset, each whole.
59
+ const SEGMENT_RUN_PATTERN = /[A-Za-z0-9\-_=]+|[^A-Za-z0-9\-_=]+/g;
60
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- an alphanumeric run of three or more characters inside a shared affix is identifier material to mask.
61
+ const MASKABLE_RUN_PATTERN = /[A-Za-z0-9]{3,}/g;
62
+ function isAsciiUpper(char) {
63
+ return char >= "A" && char <= "Z";
64
+ }
65
+ function isAsciiLower(char) {
66
+ return char >= "a" && char <= "z";
67
+ }
68
+ export function isAsciiLetter(char) {
69
+ return isAsciiUpper(char) || isAsciiLower(char);
70
+ }
71
+ export function isAsciiDigit(char) {
72
+ return char >= "0" && char <= "9";
73
+ }
74
+ function isBase64UrlSymbol(char) {
75
+ return char === "-" || char === "_" || char === "=";
76
+ }
77
+ function isAlphanumeric(char) {
78
+ return isAsciiLetter(char) || isAsciiDigit(char);
79
+ }
80
+ function hasAsciiUpper(value) {
81
+ return Array.from(value).some(isAsciiUpper);
82
+ }
83
+ function hasAsciiLower(value) {
84
+ return Array.from(value).some(isAsciiLower);
85
+ }
86
+ function hasAsciiLetter(value) {
87
+ return Array.from(value).some(isAsciiLetter);
88
+ }
89
+ function hasAsciiDigit(value) {
90
+ return Array.from(value).some(isAsciiDigit);
91
+ }
92
+ function hasAlphanumeric(value) {
93
+ return Array.from(value).some(isAlphanumeric);
94
+ }
95
+ function isBase64UrlRun(value) {
96
+ return value.length > 0 && Array.from(value).every((char) => isAlphanumeric(char) || isBase64UrlSymbol(char));
97
+ }
98
+ function isHexRun(value) {
99
+ return value.length > 0 && isAllHex(value);
100
+ }
48
101
  function charClassCount(value) {
49
102
  let classes = 0;
50
- for (const pattern of [/[A-Z]/, /[a-z]/, /[0-9]/, /[-_=]/])
51
- if (pattern.test(value))
52
- classes++;
103
+ if (hasAsciiUpper(value))
104
+ classes++;
105
+ if (hasAsciiLower(value))
106
+ classes++;
107
+ if (hasAsciiDigit(value))
108
+ classes++;
109
+ if (Array.from(value).some(isBase64UrlSymbol))
110
+ classes++;
53
111
  return classes;
54
112
  }
55
113
  function meanRunLength(value) {
56
- const runs = value.match(/[A-Za-z]+|[0-9]+/g) ?? [];
114
+ const runs = value.match(ALPHA_DIGIT_RUN_PATTERN) ?? [];
57
115
  if (runs.length === 0)
58
116
  return 0;
59
117
  return runs.reduce((total, run) => total + run.length, 0) / runs.length;
60
118
  }
61
119
  function caseTransitions(value) {
120
+ const chars = value.split("");
62
121
  let flips = 0;
63
- for (let i = 1; i < value.length; i++) {
64
- const before = value[i - 1];
65
- const after = value[i];
66
- if (!/[A-Za-z]/.test(before) || !/[A-Za-z]/.test(after))
122
+ for (let i = 1; i < chars.length; i++) {
123
+ const before = presentAt(chars, i - 1, "case-run characters");
124
+ const after = presentAt(chars, i, "case-run characters");
125
+ if (!isAsciiLetter(before) || !isAsciiLetter(after))
67
126
  continue;
68
127
  if ((before === before.toUpperCase()) !== (after === after.toUpperCase()))
69
128
  flips++;
70
129
  }
71
130
  return flips;
72
131
  }
73
- function fractionOf(value, pattern) {
74
- return (value.match(pattern) ?? []).length / value.length;
132
+ function charFraction(value, matches) {
133
+ let count = 0;
134
+ for (const char of value)
135
+ if (matches(char))
136
+ count++;
137
+ return count / value.length;
75
138
  }
76
139
  /**
77
140
  * A machine-issued identifier: a UUID, a fixed-length hex digest, or a long
@@ -86,20 +149,20 @@ function fractionOf(value, pattern) {
86
149
  export function isOpaqueId(value) {
87
150
  if (UUID_PATTERN.test(value))
88
151
  return true;
89
- if (HEX_DIGEST_PATTERN.test(value))
152
+ if (isHexRun(value) && DIGEST_HEX_LENGTHS.has(value.length))
90
153
  return true;
91
154
  if (value.length < MIN_OPAQUE_ID_LENGTH)
92
155
  return false;
93
- if (!BASE64URL_PATTERN.test(value))
156
+ if (!isBase64UrlRun(value))
94
157
  return false;
95
158
  if (charClassCount(value) < MIN_OPAQUE_ID_CHAR_CLASSES)
96
159
  return false;
97
160
  const flipBudget = Math.max(MIN_OPAQUE_ID_CASE_FLIPS, Math.floor(value.length / OPAQUE_ID_CASE_FLIP_DIVISOR));
98
161
  if (caseTransitions(value) >= flipBudget)
99
162
  return true;
100
- if (fractionOf(value, /[-_=]/g) > MAX_OPAQUE_ID_SEPARATOR_FRACTION)
163
+ if (charFraction(value, isBase64UrlSymbol) > MAX_OPAQUE_ID_SEPARATOR_FRACTION)
101
164
  return false;
102
- return meanRunLength(value) <= MAX_OPAQUE_ID_MEAN_RUN && fractionOf(value, /[0-9]/g) >= MIN_OPAQUE_ID_DIGIT_FRACTION;
165
+ return meanRunLength(value) <= MAX_OPAQUE_ID_MEAN_RUN && charFraction(value, isAsciiDigit) >= MIN_OPAQUE_ID_DIGIT_FRACTION;
103
166
  }
104
167
  /** A calendar date written compactly or with a single separator: `20260824`, `2026-08-24`. */
105
168
  export function isDateToken(value) {
@@ -111,11 +174,11 @@ export function isDateToken(value) {
111
174
  const day = Number(parts[3]);
112
175
  return year >= 1900 && year <= 2999 && month >= 1 && month <= 12 && day >= 1 && day <= 31;
113
176
  }
114
- const EMBEDDED_DATE_PATTERN = /(?<![0-9])(?:\d{4}[-_]\d{2}[-_]\d{2}|\d{8})(?![0-9])/g;
115
177
  function pushRuns(text, into) {
116
- for (const run of text.matchAll(/[A-Za-z]+|[0-9]+|[-_=]+/g)) {
178
+ for (const run of text.matchAll(TOKEN_RUN_PATTERN)) {
117
179
  const value = run[0];
118
- const kind = /^[0-9]/.test(value) ? "digit" : /^[A-Za-z]/.test(value) ? "alpha" : "delim";
180
+ const head = value.charAt(0);
181
+ const kind = isAsciiDigit(head) ? "digit" : isAsciiLetter(head) ? "alpha" : "delim";
119
182
  into.push({ kind, value });
120
183
  }
121
184
  }
@@ -130,9 +193,9 @@ function pushRuns(text, into) {
130
193
  */
131
194
  export function tokenizeSegment(segment) {
132
195
  const tokens = [];
133
- for (const match of segment.matchAll(/[A-Za-z0-9\-_=]+|[^A-Za-z0-9\-_=]+/g)) {
196
+ for (const match of segment.matchAll(SEGMENT_RUN_PATTERN)) {
134
197
  const value = match[0];
135
- if (!/[A-Za-z0-9]/.test(value)) {
198
+ if (!hasAlphanumeric(value)) {
136
199
  tokens.push({ kind: "delim", value });
137
200
  continue;
138
201
  }
@@ -164,7 +227,7 @@ export function tokenizeName(fileName) {
164
227
  for (let i = 0; i < parts.length; i++) {
165
228
  if (i > 0)
166
229
  tokens.push({ kind: "delim", value: "." });
167
- tokens.push(...tokenizeSegment(parts[i]));
230
+ tokens.push(...tokenizeSegment(presentAt(parts, i, "stem dot-parts")));
168
231
  }
169
232
  return { tokens, suffix };
170
233
  }
@@ -191,7 +254,7 @@ export function classifyValues(values) {
191
254
  if (values.length === 0)
192
255
  return { tokenClass: "any" };
193
256
  if (values.length === 1) {
194
- const only = values[0];
257
+ const only = presentFirst(values, "the single value");
195
258
  if (isDateToken(only))
196
259
  return { tokenClass: "date" };
197
260
  if (isOpaqueId(only))
@@ -200,24 +263,22 @@ export function classifyValues(values) {
200
263
  }
201
264
  if (values.every((value) => isDateToken(value)))
202
265
  return { tokenClass: "date" };
203
- if (values.every((value) => /^[0-9]+$/.test(value))) {
204
- const width = values[0].length;
266
+ if (values.every((value) => value.length > 0 && isAllDigits(value))) {
267
+ const width = presentFirst(values, "digit values").length;
205
268
  return values.every((value) => value.length === width) ? { tokenClass: "digits-fixed", width } : { tokenClass: "digits" };
206
269
  }
207
- if (values.every((value) => /^[0-9a-fA-F]+$/.test(value) && value.length >= 4))
270
+ if (values.every((value) => isHexRun(value) && value.length >= 4))
208
271
  return { tokenClass: "hex" };
209
272
  if (values.every((value) => isOpaqueId(value))) {
210
273
  const lengths = values.map((value) => value.length);
211
274
  return { tokenClass: "opaque-id", minLength: Math.min(...lengths), maxLength: Math.max(...lengths) };
212
275
  }
213
- if (values.every((value) => /^[A-Za-z]+$/.test(value)))
276
+ if (values.every((value) => value.length > 0 && Array.from(value).every(isAsciiLetter)))
214
277
  return { tokenClass: "word" };
215
278
  const skeletons = new Set(values.map((value) => maskSegment(value)));
216
- if (skeletons.size === 1) {
217
- const skeleton = [...skeletons][0];
218
- if (skeleton.includes(DIGIT_SYMBOL) || skeleton.includes(ID_SYMBOL) || skeleton.includes(DATE_SYMBOL)) {
219
- return { tokenClass: "pattern", skeleton };
220
- }
279
+ const [skeleton] = skeletons;
280
+ if (skeleton !== undefined && skeletons.size === 1 && (skeleton.includes(DIGIT_SYMBOL) || skeleton.includes(ID_SYMBOL) || skeleton.includes(DATE_SYMBOL))) {
281
+ return { tokenClass: "pattern", skeleton };
221
282
  }
222
283
  return { tokenClass: "any" };
223
284
  }
@@ -230,7 +291,8 @@ export function classifyValues(values) {
230
291
  export function commonAffixes(values) {
231
292
  if (values.length < 2)
232
293
  return { prefix: "", suffix: "" };
233
- let prefix = values[0];
294
+ const head = presentFirst(values, "affix values");
295
+ let prefix = head;
234
296
  for (const value of values) {
235
297
  let i = 0;
236
298
  while (i < prefix.length && i < value.length && prefix[i] === value[i])
@@ -239,7 +301,7 @@ export function commonAffixes(values) {
239
301
  if (!prefix)
240
302
  break;
241
303
  }
242
- let suffix = values[0].slice(prefix.length);
304
+ let suffix = head.slice(prefix.length);
243
305
  for (const value of values) {
244
306
  const rest = value.slice(prefix.length);
245
307
  let i = 0;
@@ -259,9 +321,9 @@ export function commonAffixes(values) {
259
321
  * member happened to share it.
260
322
  */
261
323
  export function maskAffix(affix) {
262
- return affix.replace(/[A-Za-z0-9]{3,}/g, (run) => {
263
- const mixedCase = /[A-Z]/.test(run) && /[a-z]/.test(run);
264
- const alphanumeric = /[A-Za-z]/.test(run) && /[0-9]/.test(run);
324
+ return affix.replace(MASKABLE_RUN_PATTERN, (run) => {
325
+ const mixedCase = hasAsciiUpper(run) && hasAsciiLower(run);
326
+ const alphanumeric = hasAsciiLetter(run) && hasAsciiDigit(run);
265
327
  return mixedCase || alphanumeric ? `<x${run.length}>` : run;
266
328
  });
267
329
  }
@@ -10,7 +10,7 @@
10
10
  * into its submission would make its central judgement invisible.
11
11
  */
12
12
  /** One file the walk found. `path` is relative to the analysis root. */
13
- export interface ScannedFile {
13
+ export type ScannedFile = {
14
14
  readonly path: string;
15
15
  readonly size: number;
16
16
  /** Trailing extension components, outermost last: `sample.vcf.gz` → `["vcf", "gz"]`. */
@@ -19,7 +19,7 @@ export interface ScannedFile {
19
19
  readonly format: string;
20
20
  /** Compression wrapper reported ALONGSIDE the inner format, never in place of it. */
21
21
  readonly wrapper?: string;
22
- }
22
+ };
23
23
  /**
24
24
  * A filename position whose token differs across a shape's members.
25
25
  *
@@ -27,7 +27,7 @@ export interface ScannedFile {
27
27
  * identifier (`0001`…`800`) from a categorical label (`tumor`/`normal`) from a shard
28
28
  * index (`chr1`…`chr22`), and those readings imply entirely different kinds.
29
29
  */
30
- export interface VariablePosition {
30
+ export type VariablePosition = {
31
31
  /** Token index within the shape's name pattern — the `<n>` placeholder it fills. */
32
32
  readonly index: number;
33
33
  /** Literal text immediately preceding the token, when any (`PT` in `PT001`). */
@@ -35,35 +35,35 @@ export interface VariablePosition {
35
35
  readonly distinctValues: number;
36
36
  /** Bounded sample of the values observed at this position. */
37
37
  readonly sampleValues: readonly string[];
38
- }
38
+ };
39
39
  /**
40
40
  * How two variable positions vary together. A fully-crossed pair is a nested design
41
41
  * (every subject × every timepoint); a partially-crossed one is not, and the
42
42
  * difference is design evidence a flat file count destroys.
43
43
  */
44
- export interface PositionCooccurrence {
44
+ export type PositionCooccurrence = {
45
45
  readonly positions: readonly [number, number];
46
46
  /** Distinct value pairs observed. */
47
47
  readonly observedPairs: number;
48
48
  /** Pairs the two value sets could form. `observedPairs === possiblePairs` is a full crossing. */
49
49
  readonly possiblePairs: number;
50
- }
50
+ };
51
51
  /** Header fields read from a bounded prefix of one member of a shape. */
52
- export interface HeaderReadout {
52
+ export type HeaderReadout = {
53
53
  /** The member the readout came from. */
54
54
  readonly path: string;
55
55
  /** Decoder-reported fields, flat and bounded (`delimiter`, `columns`, `sampleCount`, …). */
56
56
  readonly fields: Readonly<Record<string, string | number | boolean>>;
57
57
  /** Why no readout is present, when the decode did not produce one. */
58
58
  readonly unavailable?: string;
59
- }
59
+ };
60
60
  /**
61
61
  * A set of files that are mechanically indistinguishable by name structure, format,
62
62
  * and location. A shape is an observation, never a grouping of the dataset: the
63
63
  * agent may split one shape into several kinds, cover several shapes with one kind,
64
64
  * or ignore the shape entirely.
65
65
  */
66
- export interface FileShape {
66
+ export type FileShape = {
67
67
  /** Stable within one manifest (`shape-1`, `shape-2`, …) so overlaps can name shapes. */
68
68
  readonly id: string;
69
69
  /** Directory the members share, relative to the analysis root. */
@@ -81,7 +81,7 @@ export interface FileShape {
81
81
  readonly examplePaths: readonly string[];
82
82
  /** Present once the header readout has run for this shape. */
83
83
  readonly header?: HeaderReadout;
84
- }
84
+ };
85
85
  /**
86
86
  * Value-set overlap between two shapes' variable positions, reported WITH its gaps.
87
87
  *
@@ -89,7 +89,7 @@ export interface FileShape {
89
89
  * text before comparing, and near-miss namings defeat it. Reported as evidence it is
90
90
  * useful; asserted as a shared axis it is a guess a consumer cannot tell was guessed.
91
91
  */
92
- export interface ShapeValueOverlap {
92
+ export type ShapeValueOverlap = {
93
93
  readonly shapes: readonly [string, string];
94
94
  readonly positions: readonly [number, number];
95
95
  readonly sharedValues: number;
@@ -99,13 +99,13 @@ export interface ShapeValueOverlap {
99
99
  /** Bounded samples of the two gaps, so a near-complete correspondence names its misses. */
100
100
  readonly onlyInFirstSample: readonly string[];
101
101
  readonly onlyInSecondSample: readonly string[];
102
- }
102
+ };
103
103
  /** One member of the no-shared-structure aggregate. */
104
- export interface UnstructuredEntry {
104
+ export type UnstructuredEntry = {
105
105
  readonly path: string;
106
106
  readonly size: number;
107
107
  readonly format: string;
108
- }
108
+ };
109
109
  /**
110
110
  * Files whose name structure matches no other file, in aggregate.
111
111
  *
@@ -114,7 +114,7 @@ export interface UnstructuredEntry {
114
114
  * capability exists to prevent. Whether these are notable singletons worth prose or
115
115
  * an unclassified remainder is the agent's determination.
116
116
  */
117
- export interface UnstructuredFiles {
117
+ export type UnstructuredFiles = {
118
118
  readonly count: number;
119
119
  readonly totalBytes: number;
120
120
  /**
@@ -123,18 +123,18 @@ export interface UnstructuredFiles {
123
123
  * one file each — under whatever large files failed to group.
124
124
  */
125
125
  readonly sample: readonly UnstructuredEntry[];
126
- }
126
+ };
127
127
  /** How many files carry each detected format, across the whole scanned tree. */
128
- export interface FormatCount {
128
+ export type FormatCount = {
129
129
  readonly format: string;
130
130
  readonly count: number;
131
- }
131
+ };
132
132
  /**
133
133
  * The agent-facing manifest: bounded by construction, so injecting it into a briefing
134
134
  * or returning it from `scan_inputs` costs a fixed amount of context whatever the tree
135
135
  * size. The complete per-file list lives on {@link InputScan}, host-side.
136
136
  */
137
- export interface InputScanManifest {
137
+ export type InputScanManifest = {
138
138
  /** Path scanned, relative to the analysis root. */
139
139
  readonly root: string;
140
140
  readonly fileCount: number;
@@ -153,13 +153,13 @@ export interface InputScanManifest {
153
153
  readonly shapes: readonly FileShape[];
154
154
  readonly valueOverlaps: readonly ShapeValueOverlap[];
155
155
  readonly unstructured: UnstructuredFiles;
156
- }
156
+ };
157
157
  /**
158
158
  * The scan's full result. `files` is the complete enumeration — it stays host-side and
159
159
  * backs coverage and the index projection; `manifest` is the bounded projection the
160
160
  * agent reads.
161
161
  */
162
- export interface InputScan {
162
+ export type InputScan = {
163
163
  readonly files: readonly ScannedFile[];
164
164
  readonly manifest: InputScanManifest;
165
165
  /**
@@ -169,4 +169,4 @@ export interface InputScan {
169
169
  * tokenisation.
170
170
  */
171
171
  readonly positionValues: ReadonlyMap<string, readonly (readonly string[])[]>;
172
- }
172
+ };
@@ -7,16 +7,12 @@ export declare function sleep(ms: number): Promise<void>;
7
7
  * Run each task with a cap on how many run at the same time, and give back the results in the order of
8
8
  * the input.
9
9
  *
10
- * The signature mirrors `Promise.all`. The mapped return type is element-wise, thus a tuple of thunks
11
- * with different return types keeps each one, and a plain array of thunks gives a plain array. The input
12
- * is an array of thunks and not an array of promises, because a promise is already running when it is
13
- * made, and a cap over a set of started promises caps nothing.
10
+ * The input is an array of thunks and not an array of promises, because a promise is already running when
11
+ * it is made, and a cap over a set of started promises caps nothing.
14
12
  *
15
13
  * `concurrency` must be a number at or above 1. p-queue throws a `TypeError` for any other value.
16
14
  *
17
15
  * The failure behavior is that of `Promise.all`. The first rejection rejects the whole call, and each
18
16
  * task that the queue already started still runs to completion.
19
17
  */
20
- export declare function allWithConcurrency<T extends readonly (() => unknown)[] | []>(tasks: T, concurrency: number): Promise<{
21
- -readonly [P in keyof T]: Awaited<T[P] extends () => infer R ? R : never>;
22
- }>;
18
+ export declare function allWithConcurrency<R>(tasks: ReadonlyArray<() => R | PromiseLike<R>>, concurrency: number): Promise<Awaited<R>[]>;
@@ -1,19 +1,18 @@
1
1
  /**
2
2
  * Shared async utilities — sleep and a bounded-concurrency `Promise.all`.
3
3
  */
4
+ import { setTimeout as timerSleep } from "node:timers/promises";
4
5
  import PQueue from "p-queue";
5
6
  /** Promise-based delay. */
6
7
  export function sleep(ms) {
7
- return new Promise((resolve) => setTimeout(resolve, ms));
8
+ return timerSleep(ms);
8
9
  }
9
10
  /**
10
11
  * Run each task with a cap on how many run at the same time, and give back the results in the order of
11
12
  * the input.
12
13
  *
13
- * The signature mirrors `Promise.all`. The mapped return type is element-wise, thus a tuple of thunks
14
- * with different return types keeps each one, and a plain array of thunks gives a plain array. The input
15
- * is an array of thunks and not an array of promises, because a promise is already running when it is
16
- * made, and a cap over a set of started promises caps nothing.
14
+ * The input is an array of thunks and not an array of promises, because a promise is already running when
15
+ * it is made, and a cap over a set of started promises caps nothing.
17
16
  *
18
17
  * `concurrency` must be a number at or above 1. p-queue throws a `TypeError` for any other value.
19
18
  *
@@ -22,8 +21,5 @@ export function sleep(ms) {
22
21
  */
23
22
  export function allWithConcurrency(tasks, concurrency) {
24
23
  const queue = new PQueue({ concurrency });
25
- // `addAll` collapses every task onto one result type, thus it cannot express the element-wise type
26
- // above. The cast is sound because `addAll` maps the input array through `Promise.all`, which keeps
27
- // the position of each task, and each element is the awaited return of the task at that position.
28
- return queue.addAll(tasks);
24
+ return Promise.all(tasks.map((task) => queue.add(task)));
29
25
  }
package/dist/lib/cache.js CHANGED
@@ -27,7 +27,7 @@ export class BoundedTtlCache {
27
27
  this.entries.set(key, { value, expiresAt: this.now() + ttlMs });
28
28
  while (this.entries.size > this.maximum) {
29
29
  const oldest = this.entries.keys().next().value;
30
- if (oldest === undefined)
30
+ if (typeof oldest !== "string")
31
31
  break;
32
32
  this.entries.delete(oldest);
33
33
  }
@@ -8,9 +8,9 @@
8
8
  * A connection is lazy, and an endpoint connects again after a disconnect. Each endpoint also carries its own
9
9
  * page gate. The gate bounds the pages that run at the same time against that one sidecar.
10
10
  */
11
- import type { Browser, BrowserContext, Page } from "puppeteer-core";
11
+ import type { ConsoleMessage, HTTPRequest, MediaFeature, ScreenshotOptions, Viewport, WaitForOptions } from "puppeteer-core";
12
12
  import type { Logger } from "./logger.js";
13
- export interface ChromeConfig {
13
+ export type ChromeConfig = {
14
14
  /** Operational logging seam; omitted falls back to no-op. */
15
15
  readonly logger?: Logger;
16
16
  /**
@@ -24,7 +24,7 @@ export interface ChromeConfig {
24
24
  */
25
25
  readonly browserUrl?: string;
26
26
  readonly maxPages?: number;
27
- }
27
+ };
28
28
  /**
29
29
  * Whether the config names a browser to connect to. A composition with no endpoint has no eyes, and a
30
30
  * caller reads that up front instead of failing once for each attempted connection.
@@ -36,7 +36,47 @@ export declare function hasBrowserUrl(cfg: ChromeConfig): cfg is ChromeConfig &
36
36
  readonly browserUrl: string;
37
37
  };
38
38
  /** The connect operation of one endpoint. */
39
- export type BrowserConnector = (browserUrl: string) => Promise<Browser>;
39
+ export type BrowserConnector = (browserUrl: string) => Promise<ConnectedBrowser>;
40
+ /** A document area of one capture, in CSS pixels: the columns from `x`, and the rows from `fromY` to `toY`. */
41
+ export type CaptureArea = {
42
+ readonly x: number;
43
+ readonly width: number;
44
+ readonly fromY: number;
45
+ readonly toY: number;
46
+ };
47
+ /** The browser context that one look runs in. */
48
+ export type LookContext = {
49
+ newPage(): Promise<LookPage>;
50
+ close(): Promise<void>;
51
+ };
52
+ /** The page events that a look reads, with the payload each listener gets. */
53
+ export type LookPageEvents = {
54
+ console: ConsoleMessage;
55
+ pageerror: Error;
56
+ requestfailed: HTTPRequest;
57
+ };
58
+ /**
59
+ * The page surface that a look reads, with no vendor type in the shape. The evaluate member carries the
60
+ * three call forms the capture module drives, each with the return type that the read of the result needs.
61
+ */
62
+ export type LookPage = {
63
+ on<Key extends keyof LookPageEvents>(event: Key, listener: (event: LookPageEvents[Key]) => void): unknown;
64
+ setViewport(viewport: Viewport): Promise<void>;
65
+ emulateMediaFeatures(features: MediaFeature[]): Promise<void>;
66
+ goto(url: string, options?: WaitForOptions): Promise<unknown>;
67
+ waitForSelector(selector: string, options?: WaitForOptions): Promise<unknown>;
68
+ screenshot(options: ScreenshotOptions): Promise<string | Uint8Array>;
69
+ evaluate(pageFunction: () => number): Promise<number | undefined>;
70
+ evaluate(pageFunction: (attribute: string, blockId: string, margin: number) => CaptureArea | null, attribute: string, blockId: string, margin: number): Promise<CaptureArea | null>;
71
+ evaluate(pageFunction: (...args: never[]) => unknown, ...args: unknown[]): Promise<unknown>;
72
+ };
73
+ /** The browser surface that the connection cache reads: the live flag, the socket, and the page factory. */
74
+ export type ConnectedBrowser = {
75
+ readonly connected: boolean;
76
+ on(event: "disconnected", listener: () => void): unknown;
77
+ wsEndpoint(): string;
78
+ createBrowserContext(): Promise<LookContext>;
79
+ };
40
80
  /**
41
81
  * Replace the connect operation, and give back the restore of the previous one.
42
82
  *
@@ -48,5 +88,5 @@ export type BrowserConnector = (browserUrl: string) => Promise<Browser>;
48
88
  * binding, thus a replacement never reaches a later file of the same test run.
49
89
  */
50
90
  export declare function setBrowserConnector(next: BrowserConnector): () => void;
51
- export declare function getBrowser(browserUrl?: string, injected?: Logger): Promise<Browser>;
52
- export declare function withPage<T>(cfg: ChromeConfig, fn: (page: Page, context: BrowserContext) => Promise<T>): Promise<T>;
91
+ export declare function getBrowser(browserUrl?: string, injected?: Logger): Promise<ConnectedBrowser>;
92
+ export declare function withPage<T>(cfg: ChromeConfig, fn: (page: LookPage, context: LookContext) => Promise<T>): Promise<T>;
@@ -21,8 +21,8 @@ function prefixed(names, msg) {
21
21
  function makeConsoleLogger(names, bindings) {
22
22
  const emit = (level) => (msg, fields) => {
23
23
  // The one sanctioned console site in the harness — writing to console is
24
- // this function's entire contract. `no-console` exempts this file by path
25
- // in eslint.config.js rather than by an inline disable here.
24
+ // this function's entire contract. `no-console` exempts this file and its test
25
+ // by path in oxlint.config.ts rather than by an inline disable here.
26
26
  console[level](prefixed(names, msg), { ...bindings, ...fields });
27
27
  };
28
28
  return {
@@ -18,13 +18,30 @@
18
18
  * workflow-call seam (its `finally` only rolls back and releases).
19
19
  *
20
20
  * Consumers unwrap per their edge: HTTP routes `.match(...)`; DBOS step bodies
21
- * `resultStep(runStep)` / `unwrapOrThrow`; tool `execute` bodies `unwrapOrThrow`
22
- * (a throw becomes an `is_error` tool_result via dispatch).
21
+ * `unwrapOrThrow`; tool `execute` bodies `unwrapOrThrow` (the tool adapter of
22
+ * the loop turns a throw into an error tool result).
23
23
  */
24
24
  import { ResultAsync } from "neverthrow";
25
- import type { Pool, PoolClient } from "pg";
25
+ import type { Pool, PoolClient, QueryConfig, QueryResultRow } from "pg";
26
26
  /** A query/mutation/connection accepted by the data-access layer. */
27
- type Querier = Pool | PoolClient;
27
+ export type Querier = Pool | PoolClient;
28
+ /**
29
+ * What a transaction body reads of the client `withTransaction` opens: one
30
+ * structural `query`. A real `Pool` and `PoolClient` both satisfy it, and so
31
+ * does a test double that answers `query` alone.
32
+ */
33
+ export type TransactionQuerier = {
34
+ query<R extends QueryResultRow = Record<string, unknown>>(queryTextOrConfig: string | QueryConfig, values?: unknown[]): Promise<{
35
+ rows: R[];
36
+ rowCount: number | null;
37
+ }>;
38
+ };
39
+ /** What `withTransaction` reads of the pool it borrows from: one `connect`. */
40
+ export type Connectable = {
41
+ connect(): Promise<TransactionQuerier & {
42
+ release(): void;
43
+ }>;
44
+ };
28
45
  /**
29
46
  * A storage-layer failure. Absence is deliberately NOT modelled: single-row
30
47
  * reads return `ok(T | null)` and mutations against a missing row return
@@ -89,5 +106,4 @@ export declare function tryMutation<T>(op: string, fn: () => Promise<T>): Result
89
106
  * transaction and releases the connection so a cancelled tx never poisons the
90
107
  * pool.
91
108
  */
92
- export declare function withTransaction<T>(pool: Pool, op: string, fn: (client: PoolClient) => ResultAsync<T, DbError>): ResultAsync<T, DbError>;
93
- export type { Querier };
109
+ export declare function withTransaction<T>(pool: Connectable, op: string, fn: (client: TransactionQuerier) => ResultAsync<T, DbError>): ResultAsync<T, DbError>;
@@ -18,9 +18,10 @@
18
18
  * workflow-call seam (its `finally` only rolls back and releases).
19
19
  *
20
20
  * Consumers unwrap per their edge: HTTP routes `.match(...)`; DBOS step bodies
21
- * `resultStep(runStep)` / `unwrapOrThrow`; tool `execute` bodies `unwrapOrThrow`
22
- * (a throw becomes an `is_error` tool_result via dispatch).
21
+ * `unwrapOrThrow`; tool `execute` bodies `unwrapOrThrow` (the tool adapter of
22
+ * the loop turns a throw into an error tool result).
23
23
  */
24
+ import { z } from "zod";
24
25
  import { ResultAsync, err, ok } from "neverthrow";
25
26
  const _assertDomainError = true;
26
27
  /** pg SQLSTATE classes that mean "connection is gone", mapped to `connection_failed`. */
@@ -41,21 +42,16 @@ const CONSTRAINT_SQLSTATE = {
41
42
  "23502": "not_null",
42
43
  "23514": "check",
43
44
  };
45
+ const SqlstateCauseSchema = z.object({ code: z.string() });
44
46
  function sqlstate(cause) {
45
- if (cause && typeof cause === "object" && "code" in cause) {
46
- const code = cause.code;
47
- return typeof code === "string" ? code : undefined;
48
- }
49
- return undefined;
47
+ const parsed = SqlstateCauseSchema.safeParse(cause);
48
+ return parsed.success ? parsed.data.code : undefined;
50
49
  }
51
50
  /** pg surfaces the tripped constraint's name on `.constraint`. */
51
+ const ConstraintCauseSchema = z.object({ constraint: z.string().min(1) });
52
52
  function constraintName(cause) {
53
- if (cause && typeof cause === "object" && "constraint" in cause) {
54
- const name = cause.constraint;
55
- if (typeof name === "string" && name.length > 0)
56
- return name;
57
- }
58
- return "unknown";
53
+ const parsed = ConstraintCauseSchema.safeParse(cause);
54
+ return parsed.success ? parsed.data.constraint : "unknown";
59
55
  }
60
56
  /** A read throw → `connection_failed` for a connection SQLSTATE, else `query_failed`. */
61
57
  function readError(op, cause) {