@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
package/dist/index.d.ts CHANGED
@@ -27,7 +27,7 @@ export { createConversationAgent } from "./agents/conversation-agent.js";
27
27
  export type { ConversationAgentDeps } from "./agents/conversation-agent.js";
28
28
  export type { BioToolKeys } from "./tools/bio/keys.js";
29
29
  export { createLocalRunAuthorizer } from "./auth/local-run-authorizer.js";
30
- export type { RunAuthorizer, AuthorizeRunInput, RunAuthorization, RevokeByJtiRef } from "./execution/run-authorizer.js";
30
+ export type { RunAuthorizer, AuthorizeRunInput, RevokeByMandateRef } from "./execution/run-authorizer.js";
31
31
  export type { GateFailure, NoticeFailure } from "./lib/hooks.js";
32
32
  export type { RequestHeaders, ResolveRequestHeaders } from "./providers/request-headers.js";
33
33
  export { createNoopRunCharge } from "./billing/noop-run-charge.js";
@@ -63,16 +63,12 @@ export type { WebSearchEngine } from "./tools/research/web-search.js";
63
63
  export { CitationKindSchema, CitationInputSchema, CitationSourceSchema, CitationSourceStatusSchema, CitationResolutionResultSchema, CitationVerdictSchema, CitationCoverageSchema, ComparisonStatusSchema, CitationFieldSchema, UnsupportedWorkKindSchema, CitationIdentifiersSchema, NormalizedCitationMetadataSchema, NormalizedCitationSchema, CitationRecordSchema, IdentifierEvidenceSchema, CitationSourceOutcomeSchema, CitationFieldComparisonSchema, CitationConflictSchema, CitationCandidateClusterSchema, CitationClusterRelationSchema, CitationSourceOperationSchema, CitationSourcePlanItemSchema, } from "./citations/types.js";
64
64
  export type { CitationKind, CitationInput, CitationSource, CitationSourceStatus, CitationResolver, CitationResolveOptions, CitationResolutionResult, CitationVerdict, CitationCoverage, ComparisonStatus, CitationField, UnsupportedWorkKind, CitationIdentifiers, NormalizedCitationMetadata, NormalizedCitation, CitationSourceOutcome, CitationRecord, IdentifierEvidence, CitationFieldComparison, CitationConflict, CitationCandidateCluster, CitationSourceClient, CitationSourceRequest, CitationSourceOperation, CitationSourcePlanItem, RegistrationAgencyEvidence, } from "./citations/types.js";
65
65
  export { createAskGateway } from "./tools/approval/gateway.js";
66
- export type { AskGateway, AskGatewayDeps, AskContext, AnswerOutcome, PendingAsk } from "./tools/approval/gateway.js";
67
- export { UnavailableAsk, AskRejectedError } from "./tools/approval/contract.js";
68
- export type { Ask, AskRequest, AskReply, AskApproval } from "./tools/approval/contract.js";
69
- export { runAgent, finalText } from "./loop/run-agent.js";
70
- export type { RunAgentOptions, RunAgentResult, AgentFinish, AgentRound } from "./loop/run-agent.js";
71
- export type { CompactionPolicy, CompactionRules } from "./loop/compaction.js";
72
- export type { ToolMask } from "./loop/tool-mask.js";
73
- export type { AgentDefinition, RunStep, EmitFn, EmitEvent, EventSource } from "./loop/types.js";
66
+ export type { AskGateway, AskGatewayDeps, AskScope, AnswerOutcome, PendingAsk } from "./tools/approval/gateway.js";
67
+ export type { AskRequest, AskReply } from "./tools/approval/contract.js";
68
+ export type { AgentFinish, AgentRound } from "./loop/run-loop.js";
69
+ export type { CompactionRules } from "./loop/compaction.js";
70
+ export type { AgentDefinition, EmitFn, EmitEvent, EventSource } from "./loop/types.js";
74
71
  export type { KeptToolOutput, ToolOutputStore } from "./loop/tool-output.js";
75
- export { passthroughStep } from "./loop/run-step.js";
76
72
  export { forStep, forSubAgent, scopeResource, scopeWorkloadId } from "./auth/types.js";
77
73
  export type { AgentSession, RequestSession, RunSession, Identity, Scope, Credential, Provenance, RunFrame, AuthContext, ResourceCoordinates, HookSessionView, ResolvableSession, } from "./auth/types.js";
78
74
  export { makeLocalAuth } from "./auth/local-auth-context.js";
@@ -80,18 +76,19 @@ export { createConfiguredAiSdkProvider, DEFAULT_MAX_OUTPUT_TOKENS } from "./prov
80
76
  export type { AiSdkProviderConfig, ConfiguredAiSdkProviderDeps, ProviderHostPolicy } from "./providers/ai-sdk.js";
81
77
  export { createEmbeddingProvider } from "./providers/embedding.js";
82
78
  export type { EmbeddingProviderDeps } from "./providers/embedding.js";
83
- export type { AgentChat, ChatProvider, EmbeddingProvider, ChatRequest, ChatResponse, ChatStreamEvent, ChatUsage, ModelMessage, PromptCachePolicy, ReasoningPolicy, } from "./providers/types.js";
79
+ export type { BoundModel, ChatProvider, EmbeddingProvider, ChatStreamEvent, ChatUsage, ModelBinding, ModelMessage, PromptCachePolicy, ReasoningPolicy, } from "./providers/types.js";
84
80
  export { CONVERSATION_PROMPT_CACHE, DEFAULT_PROMPT_CACHE, promptCacheProviderOptions, withPromptCacheBreakpoint } from "./providers/prompt-cache.js";
85
81
  export { DEFAULT_REASONING } from "./providers/reasoning.js";
86
82
  export { toProviderError, isProviderError } from "./providers/errors.js";
87
83
  export type { ProviderError } from "./providers/errors.js";
88
84
  export { DEFAULT_SUSPEND_ON } from "./providers/errors.js";
89
85
  export type { SuspendOn } from "./providers/errors.js";
90
- export { suspensionOfFailure } from "./workflows/suspension.js";
91
- export type { Suspension } from "./workflows/suspension.js";
92
- export { createStreamingChat } from "./providers/streaming-chat.js";
93
- export { openChatTurn, prepareChatTurn, runChatTurn } from "./app/chat-turn.js";
94
- export type { ChatTurnOutcome, ChatTurnRan, ChatTurnRefusal, ChatTurnResult, ChatTurnSession, OpenChatTurn, OpenChatTurnParams, PrepareChatTurnDeps, PrepareChatTurnParams, PrepareChatTurnResult, RunChatTurnDeps, RunChatTurnParams, RunOpenChatTurnParams, } from "./app/chat-turn.js";
86
+ export { DEFAULT_PAUSE_RETRY_DELAYS_MS } from "./workflows/pause.js";
87
+ export type { PausedWorkflow, Work, WorkHold, WorkResume, WorkStop, WorkSurface } from "./app/work.js";
88
+ export { DATA_PROFILE_STOPPED } from "./tasks/data-profile.js";
89
+ export { prepareChatTurn } from "./app/chat-turn.js";
90
+ export type { ChatTurnRefusal, ChatTurnSession, PrepareChatTurnDeps, PrepareChatTurnParams, PrepareChatTurnResult } from "./app/chat-turn.js";
91
+ export type { ChatTurnEnd, ChatTurns, ChatTurnStart, OpenChatTurnRequest } from "./app/chat-turn-workflow.js";
95
92
  export { createThreadStore } from "./memory/thread-store.js";
96
93
  export type { ThreadStore, Thread, ThreadType, ThreadInputError, CreateThreadInput, ListThreadsInput, ListRecentThreadsInput, ThreadPage, } from "./memory/thread-store.js";
97
94
  export { createThreadHistory, conversationRecordTurn } from "./memory/thread-history.js";
@@ -103,13 +100,13 @@ export { envelopeDisplayMessages, parseStoredDisplayEnvelope } from "./memory/co
103
100
  export type { ConversationDisplayMetadata, ConversationUIData, ConversationUIMessage, StoredDisplayEnvelope } from "./memory/conversation-display-storage.js";
104
101
  export { storedMessagesToChat } from "./memory/conversation-display-replay.js";
105
102
  export type { ChatEvent, ChatFrame, ChatPartFrame, TextDeltaEvent, IterationEvent, ToolStartedEvent, ToolFinishedEvent, ToolOutcome, ToolCallOutcome, ToolCallDetail, FinishEvent, ChatErrorEvent, MessageStartEvent, } from "./contracts/chat-events.js";
106
- export { toChatFrame, applyChatFrame, checkChatPart } from "./contracts/chat-frame.js";
103
+ export { toChatFrame, applyChatFrame, checkChatPart, isKnownPartFrame } from "./contracts/chat-frame.js";
107
104
  export { createSubAgentActivityTracker, SUBAGENT_ACTIVITY_MAX_ENTRIES } from "./contracts/subagent-activity.js";
108
105
  export type { SubAgentActivityTracker } from "./contracts/subagent-activity.js";
109
106
  export type { TextPart, ToolCallPart, MessagePart, ChatMessage } from "./contracts/message.js";
110
107
  export type { TurnTerminal, ApplyFrameResult, ChatPartCheck } from "./contracts/chat-frame.js";
111
108
  export type { TokenUsageRollup } from "./contracts/usage.js";
112
- export type { ChatPart, PresentationPart, PresentationContent, PlanPart, RunCardPart, PlanApprovalPart, FileReferencePart, FileReferenceEntry, RunStartedPart, DagStatePart, DagStepState, PlanGraphStep, StepStatus, StepActivityPart, ActivityEntryPart, SubAgentActivityEntry, SubAgentActivityPart, StepPhase, StepFileTreePart, FileTreeEntry, StepOutputPart, StepOutputFile, StepSummaryPart, StepUsagePart, StepBlockedPart, RunSynthesisPart, FindingReference, SynthesizedFinding, BiologicalTheme, SynthesisProgressPart, SynthesisPhase, RunCompletedPart, RunCompletedFinding, RunFailedPart, CompactionPart, AskPart, ChildSessionStartedPart, ReportRenderedPart, } from "./contracts/chat-parts.js";
109
+ export type { ChatPart, PresentationPart, PresentationContent, PlanPart, RunCardPart, PlanApprovalPart, FileReferencePart, FileReferenceEntry, RunStartedPart, DagStatePart, DagStepState, PlanGraphStep, StepStatus, StepActivityPart, ActivityEntryPart, SubAgentActivityEntry, SubAgentActivityPart, StepPhase, StepFileTreePart, FileTreeEntry, StepOutputPart, StepOutputFile, StepSummaryPart, StepUsagePart, StepBlockedPart, RunSynthesisPart, FindingReference, SynthesizedFinding, BiologicalTheme, SynthesisProgressPart, SynthesisPhase, RunCompletedPart, RunCompletedFinding, RunFailedPart, CompactionPart, PauseCause, WorkKind, PausePart, ModelRetryPart, AskPart, ChildSessionStartedPart, ReportRenderedPart, } from "./contracts/chat-parts.js";
113
110
  export { PART_REGISTRY, isTransient, isReconciling, isSidebarPart } from "./contracts/part-registry.js";
114
111
  export type { ChatPartType, PartDescriptor, PartEmitter, PartConsumer } from "./contracts/part-registry.js";
115
112
  export { parseStructureUrl, alphafoldEntryUrl, alphafoldPredictionUrl } from "./contracts/structure-source.js";
@@ -144,8 +141,8 @@ export type { DataProfileAxis, DataProfileChecked, DataProfileCompanionCompleten
144
141
  export type { DataProfileStatus } from "./state/data-profile.js";
145
142
  export { queryLatestRunsByAnalyses, queryDataProfileStatusByAnalyses, queryRunProgressByRuns, queryRunsEndedSince } from "./state/analyses-metrics.js";
146
143
  export type { DataProfileSummary, EndedRunSummary, LatestRunSummary, RunProgressSummary } from "./state/analyses-metrics.js";
147
- export { queryArtifactPage, countArtifactsByRuns } from "./state/artifacts.js";
148
- export type { ArtifactExtensionCount, ArtifactPage, ArtifactPageEntry, ArtifactPageQuery, ArtifactPageSort, RunArtifactCount } from "./state/artifacts.js";
144
+ export { queryArtifactPage, queryArtifactOrigins, countArtifactsByRuns } from "./state/artifacts.js";
145
+ export type { ArtifactExtensionCount, ArtifactOrigin, ArtifactPage, ArtifactPageEntry, ArtifactPageQuery, ArtifactPageSort, RunArtifactCount, } from "./state/artifacts.js";
149
146
  export { readRunSynthesis } from "./execution/run-synthesis.js";
150
147
  export type { ReadSynthesisInput } from "./execution/run-synthesis.js";
151
148
  export { DIMENSION_CATEGORIES, DIMENSION_CATEGORY_IDS, DIMENSION_PROBES, DIMENSION_PROBE_IDS, GROUP_CATEGORIES, GROUP_CATEGORY_IDS, GROUP_ROLES, GROUP_ROLE_IDS, PROBE_OUTCOME_IDS, dimensionCategoryEntry, dimensionScope, groupCategoryEntry, } from "./contracts/profile-vocabulary.js";
package/dist/index.js CHANGED
@@ -92,19 +92,12 @@ export { createCitationResolver } from "./citations/resolve.js";
92
92
  // the conversation agent constructs them itself.
93
93
  export { createSearxngEngine } from "./tools/research/searxng-engine.js";
94
94
  export { CitationKindSchema, CitationInputSchema, CitationSourceSchema, CitationSourceStatusSchema, CitationResolutionResultSchema, CitationVerdictSchema, CitationCoverageSchema, ComparisonStatusSchema, CitationFieldSchema, UnsupportedWorkKindSchema, CitationIdentifiersSchema, NormalizedCitationMetadataSchema, NormalizedCitationSchema, CitationRecordSchema, IdentifierEvidenceSchema, CitationSourceOutcomeSchema, CitationFieldComparisonSchema, CitationConflictSchema, CitationCandidateClusterSchema, CitationClusterRelationSchema, CitationSourceOperationSchema, CitationSourcePlanItemSchema, } from "./citations/types.js";
95
- // Seam: tool approval (`ctx.ask`). `createAskGateway` realizes the `Ask` seam
96
- // over the injected `Pool` and carries the outward `answer`/`pending` API plus
97
- // the boot-time `sweepExpired`; `UnavailableAsk` is the shipped deny-by-default
98
- // realization for an unwired or non-interactive host. The `AskRequest`/`AskReply`
99
- // contract and the `AskRejectedError` denial throw come from the seam contract.
95
+ // Tool approval. The approval hook of a tool gives an `AskRequest`, and a turn
96
+ // workflow raises it in the ask ledger of `createAskGateway`. A host lists the
97
+ // pending asks with `pending`, answers one with the `answer` of
98
+ // `CoreRuntime.chatTurns`, and expires the orphans of a dead process with the
99
+ // boot-time `sweepExpired`.
100
100
  export { createAskGateway } from "./tools/approval/gateway.js";
101
- export { UnavailableAsk, AskRejectedError } from "./tools/approval/contract.js";
102
- // Agent loop.
103
- export { runAgent, finalText } from "./loop/run-agent.js";
104
- // `passthroughStep` is the in-process `RunStep`: the host request/chat path runs
105
- // the loop with no durability wrapper (workflow contexts use the durable step).
106
- // An embedder driving `runAgent` outside a workflow passes it as `runStep`.
107
- export { passthroughStep } from "./loop/run-step.js";
108
101
  // Session value objects + helpers.
109
102
  export { forStep, forSubAgent, scopeResource, scopeWorkloadId } from "./auth/types.js";
110
103
  export { makeLocalAuth } from "./auth/local-auth-context.js";
@@ -118,34 +111,30 @@ export { createEmbeddingProvider } from "./providers/embedding.js";
118
111
  // to the request itself, or a proxy miscounts. The root chat loop gets
119
112
  // `CONVERSATION_PROMPT_CACHE` (1h), because a person can reply minutes later.
120
113
  export { CONVERSATION_PROMPT_CACHE, DEFAULT_PROMPT_CACHE, promptCacheProviderOptions, withPromptCacheBreakpoint } from "./providers/prompt-cache.js";
121
- // Effort resolves in order: `ChatRequest.reasoning`, the provider config's
114
+ // Effort resolves in order: the effort of the run, the provider config's
122
115
  // `reasoning`, then `DEFAULT_REASONING`, downgraded to what the model accepts.
123
116
  // A model with no reasoning support takes `"provider-default"`.
124
117
  export { DEFAULT_REASONING } from "./providers/reasoning.js";
125
- // Provider error channel. `ProviderError` is the value `chat`/`embed` fail
126
- // with; `toProviderError` is its sole constructor. Exposed so an embedder
127
- // realizing its own `ChatProvider`/`EmbeddingProvider` fails with the exact
128
- // same shape the harness's own realizations do, rather than re-deriving it.
129
- // `isProviderError` is the structural guard an embedder driving `chatStream`
130
- // directly needs: `chatStream` throws a `ProviderError` value (a plain object,
131
- // not an `Error`), so a `catch` recognizes it by shape, not `instanceof`.
118
+ // Provider error channel. `ProviderError` is the value a model call and `embed`
119
+ // fail with; `toProviderError` is its sole constructor. Exposed so an embedder
120
+ // realizing its own `EmbeddingProvider` fails with the exact same shape the
121
+ // harness's own realizations do, rather than re-deriving it. `isProviderError`
122
+ // is the structural guard of that plain-object value.
132
123
  export { toProviderError, isProviderError } from "./providers/errors.js";
133
124
  // The suspend map of a provider: an HTTP status to the suspend reason of the
134
125
  // host. A map from the host replaces `DEFAULT_SUSPEND_ON`, which holds `402`.
135
126
  export { DEFAULT_SUSPEND_ON } from "./providers/errors.js";
136
- // The suspension of work. A host reads the suspend reason of a failed chat turn
137
- // with `suspensionOfFailure`, by the kind of the error, never by its text.
138
- export { suspensionOfFailure } from "./workflows/suspension.js";
139
- // `createStreamingChat` wraps a `ChatProvider` as a streaming `AgentChat` (the
140
- // type `runAgent`'s `provider` option takes): its `chat` drives the provider's
141
- // `chatStream` and forwards each text delta to `onText`, so a same-process host
142
- // gets live token streaming out of the otherwise non-streaming loop.
143
- export { createStreamingChat } from "./providers/streaming-chat.js";
144
- // Conversation turn + thread memory. A host runs a chat turn with `runChatTurn`
145
- // and gives only its transport values: the harness stores the opening, each round,
146
- // and the outcome. `appendTurn` stays for a record of a host. `createThreadStore`
147
- // owns thread metadata (create/list/title).
148
- export { openChatTurn, prepareChatTurn, runChatTurn } from "./app/chat-turn.js";
127
+ // The durable work of an analysis. A host lists the active work, stops it, and
128
+ // resumes or holds paused work with `CoreRuntime.work`, and it reads the
129
+ // `data-pause` part of each waiting workflow in the stream of the work.
130
+ export { DEFAULT_PAUSE_RETRY_DELAYS_MS } from "./workflows/pause.js";
131
+ export { DATA_PROFILE_STOPPED } from "./tasks/data-profile.js";
132
+ // Conversation turn + thread memory. A host opens a chat turn with the `open`
133
+ // of `CoreRuntime.chatTurns`, which starts the workflow of the turn, and reads
134
+ // its frames with `read`, live or again after a lost connection. The harness
135
+ // stores the opening, each round, and the outcome. `appendTurn` stays for a
136
+ // record of a host. `createThreadStore` owns thread metadata (create/list/title).
137
+ export { prepareChatTurn } from "./app/chat-turn.js";
149
138
  export { createThreadStore } from "./memory/thread-store.js";
150
139
  export { createThreadHistory, conversationRecordTurn } from "./memory/thread-history.js";
151
140
  // The synthetic-message primitives. A host appends a record of out-of-band work (an analysis run's
@@ -170,7 +159,7 @@ export { envelopeDisplayMessages, parseStoredDisplayEnvelope } from "./memory/co
170
159
  // one thing a read can now meet and not understand — a part whose key this vocabulary has retired —
171
160
  // by dropping that part, so one stale row cannot fail a whole thread.
172
161
  export { storedMessagesToChat } from "./memory/conversation-display-replay.js";
173
- export { toChatFrame, applyChatFrame, checkChatPart } from "./contracts/chat-frame.js";
162
+ export { toChatFrame, applyChatFrame, checkChatPart, isKnownPartFrame } from "./contracts/chat-frame.js";
174
163
  export { createSubAgentActivityTracker, SUBAGENT_ACTIVITY_MAX_ENTRIES } from "./contracts/subagent-activity.js";
175
164
  export { PART_REGISTRY, isTransient, isReconciling, isSidebarPart } from "./contracts/part-registry.js";
176
165
  // The source grammar of a `structure` presentation card — a host re-runs the same parse over a
@@ -233,8 +222,8 @@ export { upsertAnalysis } from "./state/analyses.js";
233
222
  export { clearDataProfile, loadDataProfileStatus, tryRetryDataProfile, reconcileOrphanedDataProfile } from "./state/data-profile.js";
234
223
  // The grouped reads that summarize a page of analyses: one statement for the whole list.
235
224
  export { queryLatestRunsByAnalyses, queryDataProfileStatusByAnalyses, queryRunProgressByRuns, queryRunsEndedSince } from "./state/analyses-metrics.js";
236
- // The artifact ledger reads of one analysis: one page with an exact total, and the step-output count of each run of a list in one statement.
237
- export { queryArtifactPage, countArtifactsByRuns } from "./state/artifacts.js";
225
+ // The artifact ledger reads of one analysis: one page with an exact total, the origin of each path of a list, and the step-output count of each run of a list, each list in one statement.
226
+ export { queryArtifactPage, queryArtifactOrigins, countArtifactsByRuns } from "./state/artifacts.js";
238
227
  // The validated synthesis record of a run as the flat `data-run-synthesis` part of the run stream, or null.
239
228
  export { readRunSynthesis } from "./execution/run-synthesis.js";
240
229
  // The controlled vocabulary the profiler draws from, as data. A consumer rendering a
@@ -10,7 +10,7 @@
10
10
  * C0/C1 control characters and DEL, excluding `\t` (U+0009) and `\n`
11
11
  * (U+000A) which are legitimate whitespace in user prose.
12
12
  */
13
- // eslint-disable-next-line no-control-regex -- matching control characters is the intent: this pattern strips invisible C0/C1 bytes and DEL from untrusted user input (see `normalizeUnicode` below).
13
+ // oxlint-disable-next-line no-control-regex, eslint-js/no-restricted-syntax -- matching control characters is the intent: this pattern strips invisible C0/C1 bytes and DEL from untrusted user input (see `normalizeUnicode` below).
14
14
  const CONTROL_CHARS = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F]/g;
15
15
  /**
16
16
  * NFC-normalize and strip control characters.
@@ -31,7 +31,7 @@ export function normalizeUnicode(text) {
31
31
  * arrives through no fault of the model: tool results carry raw command output
32
32
  * and file bytes, which is why they are otherwise left unsanitized.
33
33
  */
34
- // eslint-disable-next-line no-control-regex -- matching NUL is the intent; see above.
34
+ // oxlint-disable-next-line no-control-regex, eslint-js/no-restricted-syntax -- matching NUL is the intent; see above.
35
35
  const NUL = /\u0000/g;
36
36
  /**
37
37
  * Strip every NUL from `text`. Applied where a tool result is built — so the
@@ -58,17 +58,24 @@ export function stripNulCharacters(text) {
58
58
  * Anthropic label wins; `sk-(?!ant-)` additionally excludes it by lookahead.
59
59
  */
60
60
  const SECRET_PATTERNS = [
61
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the AWS access-key format with its fixed AKIA prefix and 16-character id body.
61
62
  { name: "AWS Access Key", pattern: /\bAKIA[0-9A-Z]{16}\b/g },
63
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the Anthropic key format with its sk-ant- prefix and base64url body.
62
64
  { name: "Anthropic API Key", pattern: /\bsk-ant-[A-Za-z0-9_-]{20,}\b/g },
65
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the generic OpenAI sk- format; the (?!ant-) lookahead keeps the Anthropic label ahead of it.
63
66
  { name: "OpenAI API Key", pattern: /\bsk-(?!ant-)[A-Za-z0-9_-]{20,}\b/g },
67
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the GitHub token format with its gh*_ prefix and 36-character body.
64
68
  { name: "GitHub Token", pattern: /\bgh[psoru]_[A-Za-z0-9_]{36,}\b/g },
65
69
  {
66
70
  name: "JWT Token",
71
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the three dot-separated base64url JWT segments after the eyJ signature prefix.
67
72
  pattern: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,
68
73
  },
74
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the Bearer scheme with its token characters and padding, the header form of a leaked credential.
69
75
  { name: "Bearer Token", pattern: /\bBearer\s+[A-Za-z0-9_\-.~+/]+=*/gi },
70
76
  {
71
77
  name: "Connection String",
78
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the DB connection schemes with their :// and unquoted authority, the connection-string form of a leaked credential.
72
79
  pattern: /\b(?:postgres|postgresql|mysql|mongodb|redis|amqp|mssql):\/\/[^\s"'`]+/gi,
73
80
  },
74
81
  ];
@@ -14,24 +14,24 @@
14
14
  * {@link ContentSimilarity}.
15
15
  */
16
16
  import type { MemberFile } from "./set-types.js";
17
- export interface DirectoryNode {
17
+ export type DirectoryNode = {
18
18
  readonly name: string;
19
19
  readonly children: Map<string, DirectoryNode>;
20
20
  readonly files: MemberFile[];
21
21
  readonly fineSignature: Set<string>;
22
22
  readonly coarseSignature: Set<string>;
23
23
  readonly childNames: Set<string>;
24
- }
24
+ };
25
25
  /** One concrete directory, carrying the values of the template positions above it. */
26
- export interface DirectoryEntry {
26
+ export type DirectoryEntry = {
27
27
  readonly node: DirectoryNode;
28
28
  readonly varValues: readonly string[];
29
- }
29
+ };
30
30
  /** What a content-schema comparison would be given to judge two candidate clusters by. */
31
- export interface ClusterEvidence {
31
+ export type ClusterEvidence = {
32
32
  readonly names: readonly string[];
33
33
  readonly files: readonly MemberFile[];
34
- }
34
+ };
35
35
  /**
36
36
  * Similarity from file contents — header fields, delimiters, column names.
37
37
  *
@@ -15,16 +15,18 @@
15
15
  */
16
16
  import { DATE_SYMBOL, DIGIT_SYMBOL, ID_SYMBOL, maskSegment, skeletonOf, tokenizeName } from "./tokens.js";
17
17
  import { COARSE_SIMILARITY, CONTAINMENT_SIMILARITY, FINE_SIMILARITY, MAX_SIGNATURE_KEYS } from "./tuning.js";
18
+ import { firstSegmentOf } from "../lib/text.js";
18
19
  function newNode(name) {
19
20
  return { name, children: new Map(), files: [], fineSignature: new Set(), coarseSignature: new Set(), childNames: new Set() };
20
21
  }
22
+ import { presentAt } from "../lib/present.js";
21
23
  export function buildTree(files) {
22
24
  const root = newNode("");
23
25
  for (const file of files) {
24
26
  const segments = file.path.split("/");
25
27
  let node = root;
26
28
  for (let i = 0; i < segments.length - 1; i++) {
27
- const name = segments[i];
29
+ const name = presentAt(segments, i, "path segments");
28
30
  let child = node.children.get(name);
29
31
  if (!child) {
30
32
  child = newNode(name);
@@ -95,8 +97,10 @@ function hasMask(skeleton) {
95
97
  function skeletonKin(a, b) {
96
98
  if (a === b && hasMask(a))
97
99
  return true;
98
- const head = a.split(/[_\-.]/)[0];
99
- return head === b.split(/[_\-.]/)[0] && hasMask(head);
100
+ const head = firstSegmentOf(a, "_-.");
101
+ if (head === undefined)
102
+ return false;
103
+ return head === firstSegmentOf(b, "_-.") && hasMask(head);
100
104
  }
101
105
  function filesUnder(node, out = []) {
102
106
  out.push(...node.files);
@@ -193,9 +197,11 @@ export function clusterChildren(entries, contentSimilarity) {
193
197
  let merged = false;
194
198
  for (let i = 0; i < clusters.length && !merged; i++) {
195
199
  for (let j = i + 1; j < clusters.length; j++) {
196
- if (!agrees(clusters[i], clusters[j], contentSimilarity))
200
+ const left = presentAt(clusters, i, "directory clusters");
201
+ const right = presentAt(clusters, j, "directory clusters");
202
+ if (!agrees(left, right, contentSimilarity))
197
203
  continue;
198
- absorb(clusters[i], clusters[j]);
204
+ absorb(left, right);
199
205
  clusters.splice(j, 1);
200
206
  merged = true;
201
207
  break;
@@ -8,6 +8,7 @@
8
8
  * into a second set that mirrors the first.
9
9
  */
10
10
  import { basenameOf } from "./tokens.js";
11
+ import { presentGet } from "../lib/present.js";
11
12
  import { EXPECTED_COMPANION_SHARE, MAX_INCOMPLETE_SAMPLE } from "./tuning.js";
12
13
  /** Suffixes that name a helper file. The list is a floor; growth is additive. */
13
14
  const COMPANION_SUFFIXES = [".bai", ".crai", ".tbi", ".csi", ".idx", ".fai", ".gzi", ".dict", ".md5", ".sha1", ".sha256"];
@@ -80,7 +81,7 @@ export function attachCompanions(files) {
80
81
  if (root === undefined)
81
82
  continue;
82
83
  const bucket = attached.get(root);
83
- const companion = { path: file.path, suffix: suffixes.get(file.path), size: file.size };
84
+ const companion = { path: file.path, suffix: presentGet(suffixes, file.path, "companion suffixes"), size: file.size };
84
85
  if (bucket)
85
86
  bucket.push(companion);
86
87
  else
@@ -96,7 +97,7 @@ export function attachCompanions(files) {
96
97
  name: basenameOf(file.path),
97
98
  size: file.size,
98
99
  format: file.format,
99
- ...(file.wrapper ? { wrapper: file.wrapper } : {}),
100
+ wrapper: file.wrapper,
100
101
  companions,
101
102
  });
102
103
  }
@@ -16,9 +16,9 @@
16
16
  import type { ContentSimilarity } from "./clustering.js";
17
17
  import type { DetectedSets } from "./set-types.js";
18
18
  import type { ScannedFile } from "./types.js";
19
- export interface DetectSetsOptions {
19
+ export type DetectSetsOptions = {
20
20
  /** Read-based agreement between candidate clusters, when the caller has header readouts. */
21
21
  readonly contentSimilarity?: ContentSimilarity;
22
- }
22
+ };
23
23
  /** Observe the detected sets of a scanned tree. Pure — no I/O, no container, no model. */
24
24
  export declare function detectSets(files: readonly ScannedFile[], options?: DetectSetsOptions): DetectedSets;
@@ -19,6 +19,7 @@ import { applyMarkers } from "./markers.js";
19
19
  import { quarantine } from "./quarantine.js";
20
20
  import { selectReadouts } from "./readout-budget.js";
21
21
  import { catchAll, describeGroup, describeSlot, mineContext, slotToken } from "./templates.js";
22
+ import { presentAt } from "../lib/present.js";
22
23
  import { IDENTITY_CROSS_CHECK_RATIO, MAX_EXAMPLE_PATHS, MAX_LEFTOVER_SAMPLE, MAX_SETS_PER_CONTEXT, MIN_IDENTITY_TOKEN_LENGTH } from "./tuning.js";
23
24
  function fileCountOf(members) {
24
25
  return members.reduce((total, member) => total + 1 + member.companions.length, 0);
@@ -41,7 +42,7 @@ function wrapperCensus(members) {
41
42
  return [...counts.entries()].map(([wrapper, count]) => ({ wrapper, count })).sort((a, b) => b.count - a.count || a.wrapper.localeCompare(b.wrapper, "en"));
42
43
  }
43
44
  function renderTemplate(segments, slots) {
44
- return segments.map((segment) => (segment.kind === "literal" ? segment.text : slotToken(slots[segment.slot]))).join("");
45
+ return segments.map((segment) => (segment.kind === "literal" ? segment.text : slotToken(presentAt(slots, segment.slot, "template slots")))).join("");
45
46
  }
46
47
  /** The token value at a slot's position, with the literal affixes the template shows stripped off. */
47
48
  function coreAt(item, slot) {
@@ -65,12 +66,11 @@ function crossCheckIdentity(group, nameSlots, directorySlots, directoryValues) {
65
66
  for (const slot of nameSlots) {
66
67
  if (slot.distinctValues < 2)
67
68
  continue;
68
- for (let k = 0; k < directoryValues.length; k++) {
69
- const values = directoryValues[k];
70
- const paired = directorySlots[k].distinctValues === slot.distinctValues;
69
+ for (const [k, values] of directoryValues.entries()) {
70
+ const paired = presentAt(directorySlots, k, "directory slots").distinctValues === slot.distinctValues;
71
71
  let matches = 0;
72
- for (let i = 0; i < group.items.length; i++) {
73
- const core = coreAt(group.items[i], slot);
72
+ for (const [i, item] of group.items.entries()) {
73
+ const core = coreAt(item, slot);
74
74
  const segment = values[i] ?? "";
75
75
  const alike = core === segment ||
76
76
  (segment.includes(core) && (paired || core.length >= MIN_IDENTITY_TOKEN_LENGTH)) ||
@@ -101,8 +101,9 @@ function assembleMinedSet(group, path) {
101
101
  const at = variablePosition++;
102
102
  const values = members.map((member) => member.varValues[at] ?? "");
103
103
  const distinct = new Set(values);
104
- if (distinct.size === 1) {
105
- directorySegments.push({ kind: "literal", text: `${[...distinct][0]}/` });
104
+ const [only] = distinct;
105
+ if (only !== undefined && distinct.size === 1) {
106
+ directorySegments.push({ kind: "literal", text: `${only}/` });
106
107
  continue;
107
108
  }
108
109
  const slot = describeSlot(values, "directory", segment.index);
@@ -128,26 +129,28 @@ function finalizeSet(draft, index) {
128
129
  const id = `set-${index + 1}`;
129
130
  const slotIds = draft.slots.map((_, position) => `${id}.slot-${position + 1}`);
130
131
  const slots = draft.slots.map((slot, position) => ({
131
- id: slotIds[position],
132
+ id: presentAt(slotIds, position, "slot ids"),
132
133
  location: slot.location,
133
134
  index: slot.index,
134
135
  tokenClass: slot.tokenClass,
135
- ...(slot.width !== undefined ? { width: slot.width } : {}),
136
- ...(slot.minLength !== undefined ? { minLength: slot.minLength, maxLength: slot.maxLength } : {}),
137
- ...(slot.skeleton !== undefined ? { skeleton: slot.skeleton } : {}),
138
- ...(slot.prefix !== undefined ? { prefix: slot.prefix } : {}),
139
- ...(slot.suffix !== undefined ? { suffix: slot.suffix } : {}),
136
+ width: slot.width,
137
+ minLength: slot.minLength,
138
+ maxLength: slot.maxLength,
139
+ skeleton: slot.skeleton,
140
+ prefix: slot.prefix,
141
+ suffix: slot.suffix,
140
142
  distinctValues: slot.distinctValues,
141
143
  sampleValues: slot.sampleValues,
142
- ...(slot.sameAs !== undefined ? { sameAsSlot: slotIds[slot.sameAs], crossCheckMismatches: slot.crossCheckMismatches ?? 0 } : {}),
144
+ sameAsSlot: slot.sameAs === undefined ? undefined : presentAt(slotIds, slot.sameAs, "slot ids"),
145
+ crossCheckMismatches: slot.sameAs === undefined ? undefined : (slot.crossCheckMismatches ?? 0),
143
146
  }));
144
- const segments = draft.segments.map((segment) => segment.kind === "literal" ? { kind: "literal", text: segment.text } : { kind: "slot", slotId: slotIds[segment.slot] });
147
+ const segments = draft.segments.map((segment) => segment.kind === "literal" ? { kind: "literal", text: segment.text } : { kind: "slot", slotId: presentAt(slotIds, segment.slot, "slot ids") });
145
148
  const { members, completeness } = assessCompleteness(draft.members);
146
149
  return {
147
150
  set: {
148
151
  id,
149
152
  origin: draft.origin,
150
- ...(draft.marker ? { marker: draft.marker } : {}),
153
+ marker: draft.marker,
151
154
  pathTemplate: draft.pathTemplate,
152
155
  segments,
153
156
  memberCount: members.length,
@@ -160,8 +163,8 @@ function finalizeSet(draft, index) {
160
163
  examplePaths: members.slice(0, MAX_EXAMPLE_PATHS).map((member) => member.path),
161
164
  members,
162
165
  },
163
- values: draft.slots.map((slot, position) => [slotIds[position], slot.values]),
164
- memberValues: draft.slots.map((slot, position) => [slotIds[position], slot.memberValues]),
166
+ values: draft.slots.map((slot, position) => [presentAt(slotIds, position, "slot ids"), slot.values]),
167
+ memberValues: draft.slots.map((slot, position) => [presentAt(slotIds, position, "slot ids"), slot.memberValues]),
165
168
  };
166
169
  }
167
170
  /**
@@ -236,8 +239,9 @@ export function detectSets(files, options = {}) {
236
239
  if (children.length === 0)
237
240
  return;
238
241
  for (const cluster of clusterChildren(children, options.contentSimilarity)) {
239
- if (cluster.names.length === 1) {
240
- descend(cluster.entries, [...path, { kind: "literal", name: cluster.names[0] }]);
242
+ const [name] = cluster.names;
243
+ if (name !== undefined && cluster.names.length === 1) {
244
+ descend(cluster.entries, [...path, { kind: "literal", name }]);
241
245
  continue;
242
246
  }
243
247
  const next = cluster.entries.map((entry) => ({ node: entry.node, varValues: [...entry.varValues, entry.node.name] }));
@@ -36,12 +36,12 @@ export declare const READOUT_CONCURRENCY = 8;
36
36
  */
37
37
  export declare const SANDBOX_CONTAINER_FORMATS: ReadonlySet<string>;
38
38
  /** One file to read a header from, and what the scan already knows about its bytes. */
39
- export interface ReadoutTargetSpec {
39
+ export type ReadoutTargetSpec = {
40
40
  readonly path: string;
41
41
  readonly format: string;
42
42
  readonly wrapper?: string;
43
- }
44
- export interface ReadHeadersArgs {
43
+ };
44
+ export type ReadHeadersArgs = {
45
45
  readonly targets: readonly ReadoutTargetSpec[];
46
46
  readonly session: AgentSession;
47
47
  readonly fs: WorkspaceFilesystem;
@@ -52,8 +52,8 @@ export interface ReadHeadersArgs {
52
52
  readonly mountRoot: string;
53
53
  readonly deadlineMs: number;
54
54
  readonly emit: EmitFn;
55
- }
56
- export interface EnrichShapesArgs {
55
+ };
56
+ export type EnrichShapesArgs = {
57
57
  readonly shapes: readonly FileShape[];
58
58
  readonly session: AgentSession;
59
59
  readonly fs: WorkspaceFilesystem;
@@ -64,7 +64,7 @@ export interface EnrichShapesArgs {
64
64
  readonly mountRoot: string;
65
65
  readonly deadlineMs: number;
66
66
  readonly emit: EmitFn;
67
- }
67
+ };
68
68
  /**
69
69
  * Read a header from each named file, keyed by path.
70
70
  *
@@ -16,8 +16,12 @@
16
16
  * enrichment reads a bounded number of members per shape whatever the tree's size.
17
17
  */
18
18
  import { readFile } from "node:fs/promises";
19
+ import { z } from "zod";
19
20
  import { runSandboxExec } from "../tools/workspace/run-exec.js";
20
21
  import { READOUT_PREFIX_BYTES, readPrefix } from "./readout.js";
22
+ import { safeParseJsonAs } from "../lib/parse-json.js";
23
+ import { presentAt } from "../lib/present.js";
24
+ import { collapseWhitespace } from "../lib/text.js";
21
25
  /** Members decoded per shape. One is enough to characterise a set whose names already match. */
22
26
  export const MEMBERS_DECODED_PER_SHAPE = 1;
23
27
  /** Wall-clock bound on the container-decode exec. It opens footers, nothing more. */
@@ -57,7 +61,7 @@ export async function readHeaders(args) {
57
61
  let next = 0;
58
62
  await Promise.all(Array.from({ length: Math.min(READOUT_CONCURRENCY, prefixed.length) }, async () => {
59
63
  for (let i = next++; i < prefixed.length; i = next++) {
60
- const target = prefixed[i];
64
+ const target = presentAt(prefixed, i, "readout targets");
61
65
  readouts.set(target.path, await readFromPrefix(args, target));
62
66
  }
63
67
  }));
@@ -85,7 +89,7 @@ export async function enrichShapes(args) {
85
89
  return [...args.shapes];
86
90
  const readouts = await readHeaders({
87
91
  ...args,
88
- targets: [...targets.entries()].map(([path, shape]) => ({ path, format: shape.format, ...(shape.wrapper ? { wrapper: shape.wrapper } : {}) })),
92
+ targets: [...targets.entries()].map(([path, shape]) => ({ path, format: shape.format, wrapper: shape.wrapper })),
89
93
  });
90
94
  const byShape = new Map();
91
95
  for (const [path, shape] of targets) {
@@ -105,9 +109,15 @@ async function readFromPrefix(args, target) {
105
109
  .unwrapOr({ kind: "read_failed" });
106
110
  if (read.kind !== "ok")
107
111
  return { path, fields: {}, unavailable: `prefix unreadable (${read.kind})` };
108
- const readout = await readPrefix({ prefix: read.bytes, format: target.format, ...(target.wrapper ? { wrapper: target.wrapper } : {}) });
109
- return { path, fields: readout.fields, ...(readout.unavailable ? { unavailable: readout.unavailable } : {}) };
112
+ const readout = await readPrefix({ prefix: read.bytes, format: target.format, wrapper: target.wrapper });
113
+ return { path, fields: readout.fields, unavailable: readout.unavailable };
110
114
  }
115
+ /** One JSON line the decoder prints on stdout: the path it read, its fields, or why it could not. */
116
+ const ReadoutLineSchema = z.object({
117
+ path: z.string().optional(),
118
+ fields: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),
119
+ unavailable: z.string().optional(),
120
+ });
111
121
  async function decodeContainers(args, machine, containers) {
112
122
  const readouts = new Map();
113
123
  const source = await readFile(CONTAINER_DECODER, "utf8").catch(() => undefined);
@@ -133,18 +143,21 @@ async function decodeContainers(args, machine, containers) {
133
143
  continue;
134
144
  let parsed;
135
145
  try {
136
- parsed = JSON.parse(trimmed);
146
+ parsed = safeParseJsonAs(trimmed, ReadoutLineSchema);
137
147
  }
138
148
  catch {
149
+ // The sandbox caps stdout and a timeout can stop the decoder mid-write, so the last line can be cut.
139
150
  continue;
140
151
  }
141
- const target = parsed.path ? byAbsolute.get(parsed.path) : undefined;
152
+ if (!parsed.success)
153
+ continue;
154
+ const target = parsed.data.path ? byAbsolute.get(parsed.data.path) : undefined;
142
155
  if (!target)
143
156
  continue;
144
157
  readouts.set(target.path, {
145
158
  path: target.path,
146
- fields: parsed.fields ?? {},
147
- ...(parsed.unavailable ? { unavailable: parsed.unavailable } : {}),
159
+ fields: parsed.data.fields ?? {},
160
+ unavailable: parsed.data.unavailable,
148
161
  });
149
162
  }
150
163
  // A target the decoder said nothing about is told WHY, from the exec's own outcome: the
@@ -158,14 +171,18 @@ async function decodeContainers(args, machine, containers) {
158
171
  }
159
172
  return readouts;
160
173
  }
174
+ const CUT_OUTPUT_REASON = "container decoder output was cut at the sandbox byte cap";
161
175
  function describeExecFailure(result) {
176
+ const cut = result.stdoutTruncated ? ` (${CUT_OUTPUT_REASON})` : "";
162
177
  if (result.timedOut)
163
- return `container decoder timed out after ${ENRICH_TIMEOUT_SECONDS}s`;
178
+ return `container decoder timed out after ${ENRICH_TIMEOUT_SECONDS}s${cut}`;
164
179
  if (result.syntheticFailure)
165
- return `container decoder did not complete: ${result.syntheticFailure.reason}`;
180
+ return `container decoder did not complete: ${result.syntheticFailure.reason}${cut}`;
166
181
  if (result.exitCode !== 0) {
167
- const stderr = result.stderr.replace(/\s+/g, " ").trim().slice(0, MAX_STDERR_CHARS);
168
- return `container decoder exited ${result.exitCode ?? "with no code"}${stderr ? `: ${stderr}` : ""}`;
182
+ const stderr = collapseWhitespace(result.stderr).slice(0, MAX_STDERR_CHARS);
183
+ return `container decoder exited ${result.exitCode ?? "with no code"}${stderr ? `: ${stderr}` : ""}${cut}`;
169
184
  }
185
+ if (result.stdoutTruncated)
186
+ return CUT_OUTPUT_REASON;
170
187
  return "container decoder reported nothing for this member";
171
188
  }
@@ -30,10 +30,10 @@ export declare const KNOWN_EXTENSIONS: ReadonlySet<string>;
30
30
  export declare function extensionChain(fileName: string): string[];
31
31
  /** The extension chain with any compression wrappers stripped from the tail. */
32
32
  export declare function innerExtensions(extensions: readonly string[]): string[];
33
- export interface DetectedFormat {
33
+ export type DetectedFormat = {
34
34
  readonly format: string;
35
35
  readonly wrapper?: string;
36
- }
36
+ };
37
37
  /**
38
38
  * Identify a file's format from a bounded prefix of its bytes, falling back to the
39
39
  * extension chain — which is all a wrapped file can offer the host, since reading