@inflexa-ai/harness 0.1.1

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 (823) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +58 -0
  4. package/dist/agents/conversation-agent.d.ts +105 -0
  5. package/dist/agents/conversation-agent.js +140 -0
  6. package/dist/agents/report-builder.d.ts +32 -0
  7. package/dist/agents/report-builder.js +31 -0
  8. package/dist/agents/sandbox/__fixtures__/deps.d.ts +23 -0
  9. package/dist/agents/sandbox/__fixtures__/deps.js +96 -0
  10. package/dist/agents/sandbox/bulk-transcriptomics-agent.d.ts +8 -0
  11. package/dist/agents/sandbox/bulk-transcriptomics-agent.js +22 -0
  12. package/dist/agents/sandbox/cheminformatics-agent.d.ts +9 -0
  13. package/dist/agents/sandbox/cheminformatics-agent.js +62 -0
  14. package/dist/agents/sandbox/chromatin-agent.d.ts +8 -0
  15. package/dist/agents/sandbox/chromatin-agent.js +24 -0
  16. package/dist/agents/sandbox/data-profiler.d.ts +10 -0
  17. package/dist/agents/sandbox/data-profiler.js +24 -0
  18. package/dist/agents/sandbox/dna-methylation-agent.d.ts +8 -0
  19. package/dist/agents/sandbox/dna-methylation-agent.js +24 -0
  20. package/dist/agents/sandbox/drug-repurposing-agent.d.ts +8 -0
  21. package/dist/agents/sandbox/drug-repurposing-agent.js +54 -0
  22. package/dist/agents/sandbox/enrichment-agent.d.ts +8 -0
  23. package/dist/agents/sandbox/enrichment-agent.js +24 -0
  24. package/dist/agents/sandbox/ephemeral-executor.d.ts +9 -0
  25. package/dist/agents/sandbox/ephemeral-executor.js +29 -0
  26. package/dist/agents/sandbox/genomic-variant-agent.d.ts +8 -0
  27. package/dist/agents/sandbox/genomic-variant-agent.js +27 -0
  28. package/dist/agents/sandbox/immune-profiling-agent.d.ts +8 -0
  29. package/dist/agents/sandbox/immune-profiling-agent.js +43 -0
  30. package/dist/agents/sandbox/index.d.ts +31 -0
  31. package/dist/agents/sandbox/index.js +96 -0
  32. package/dist/agents/sandbox/metabolomics-agent.d.ts +8 -0
  33. package/dist/agents/sandbox/metabolomics-agent.js +15 -0
  34. package/dist/agents/sandbox/microbiome-agent.d.ts +8 -0
  35. package/dist/agents/sandbox/microbiome-agent.js +15 -0
  36. package/dist/agents/sandbox/multi-omics-integration-agent.d.ts +8 -0
  37. package/dist/agents/sandbox/multi-omics-integration-agent.js +33 -0
  38. package/dist/agents/sandbox/multimodal-sc-agent.d.ts +8 -0
  39. package/dist/agents/sandbox/multimodal-sc-agent.js +15 -0
  40. package/dist/agents/sandbox/network-agent.d.ts +8 -0
  41. package/dist/agents/sandbox/network-agent.js +25 -0
  42. package/dist/agents/sandbox/pkpd-clinical-response-agent.d.ts +8 -0
  43. package/dist/agents/sandbox/pkpd-clinical-response-agent.js +59 -0
  44. package/dist/agents/sandbox/proteomics-agent.d.ts +8 -0
  45. package/dist/agents/sandbox/proteomics-agent.js +15 -0
  46. package/dist/agents/sandbox/scientific-executor.d.ts +9 -0
  47. package/dist/agents/sandbox/scientific-executor.js +56 -0
  48. package/dist/agents/sandbox/shared.d.ts +100 -0
  49. package/dist/agents/sandbox/shared.js +195 -0
  50. package/dist/agents/sandbox/single-cell-agent.d.ts +8 -0
  51. package/dist/agents/sandbox/single-cell-agent.js +25 -0
  52. package/dist/agents/sandbox/spatial-omics-agent.d.ts +8 -0
  53. package/dist/agents/sandbox/spatial-omics-agent.js +15 -0
  54. package/dist/agents/sandbox/statistical-modeling-agent.d.ts +8 -0
  55. package/dist/agents/sandbox/statistical-modeling-agent.js +37 -0
  56. package/dist/agents/sandbox/translational-safety-agent.d.ts +8 -0
  57. package/dist/agents/sandbox/translational-safety-agent.js +59 -0
  58. package/dist/agents/sandbox/types.d.ts +34 -0
  59. package/dist/agents/sandbox/types.js +15 -0
  60. package/dist/agents/sandbox/validate-skills.d.ts +18 -0
  61. package/dist/agents/sandbox/validate-skills.js +40 -0
  62. package/dist/agents/sandbox-catalog.d.ts +33 -0
  63. package/dist/agents/sandbox-catalog.js +44 -0
  64. package/dist/agents/system-prompt.d.ts +25 -0
  65. package/dist/agents/system-prompt.js +23 -0
  66. package/dist/app/chat-turn.d.ts +35 -0
  67. package/dist/app/chat-turn.js +64 -0
  68. package/dist/app/data-profile-policy.d.ts +36 -0
  69. package/dist/app/data-profile-policy.js +37 -0
  70. package/dist/app/message-assembly.d.ts +65 -0
  71. package/dist/app/message-assembly.js +61 -0
  72. package/dist/app/synthesize-run.d.ts +57 -0
  73. package/dist/app/synthesize-run.js +103 -0
  74. package/dist/auth/local-auth-context.d.ts +19 -0
  75. package/dist/auth/local-auth-context.js +20 -0
  76. package/dist/auth/local-run-authorizer.d.ts +10 -0
  77. package/dist/auth/local-run-authorizer.js +23 -0
  78. package/dist/auth/types.d.ts +166 -0
  79. package/dist/auth/types.js +61 -0
  80. package/dist/billing/cached-resolver.d.ts +23 -0
  81. package/dist/billing/cached-resolver.js +61 -0
  82. package/dist/billing/noop-resolver.d.ts +6 -0
  83. package/dist/billing/noop-resolver.js +7 -0
  84. package/dist/billing/noop-run-charge.d.ts +6 -0
  85. package/dist/billing/noop-run-charge.js +10 -0
  86. package/dist/billing/resolver.d.ts +64 -0
  87. package/dist/billing/resolver.js +24 -0
  88. package/dist/billing/run-charge.d.ts +24 -0
  89. package/dist/billing/run-charge.js +9 -0
  90. package/dist/config/resource-limits.d.ts +76 -0
  91. package/dist/config/resource-limits.js +116 -0
  92. package/dist/contracts/analogy-report.d.ts +120 -0
  93. package/dist/contracts/analogy-report.js +50 -0
  94. package/dist/contracts/chat-events.d.ts +61 -0
  95. package/dist/contracts/chat-events.js +13 -0
  96. package/dist/contracts/chat-parts.d.ts +308 -0
  97. package/dist/contracts/chat-parts.js +13 -0
  98. package/dist/contracts/content-url.d.ts +49 -0
  99. package/dist/contracts/content-url.js +56 -0
  100. package/dist/contracts/index.d.ts +12 -0
  101. package/dist/contracts/index.js +5 -0
  102. package/dist/contracts/message.d.ts +36 -0
  103. package/dist/contracts/message.js +9 -0
  104. package/dist/contracts/part-registry.d.ts +18 -0
  105. package/dist/contracts/part-registry.js +28 -0
  106. package/dist/contracts/schemas/chat-events.d.ts +90 -0
  107. package/dist/contracts/schemas/chat-events.js +43 -0
  108. package/dist/contracts/schemas/chat-parts.d.ts +683 -0
  109. package/dist/contracts/schemas/chat-parts.js +295 -0
  110. package/dist/contracts/schemas/index.d.ts +2 -0
  111. package/dist/contracts/schemas/index.js +2 -0
  112. package/dist/contracts/target-assessment-row.d.ts +85 -0
  113. package/dist/contracts/target-assessment-row.js +37 -0
  114. package/dist/contracts/target-dossier.d.ts +16720 -0
  115. package/dist/contracts/target-dossier.js +1339 -0
  116. package/dist/data/clinical-benchmarks.json +108 -0
  117. package/dist/data/protein-family-modality.json +101 -0
  118. package/dist/data/safety-panel-schema.d.ts +64 -0
  119. package/dist/data/safety-panel-schema.js +34 -0
  120. package/dist/data/safety-panel.json +436 -0
  121. package/dist/execution/artifact-metadata.d.ts +74 -0
  122. package/dist/execution/artifact-metadata.js +203 -0
  123. package/dist/execution/artifact-record.d.ts +19 -0
  124. package/dist/execution/artifact-record.js +7 -0
  125. package/dist/execution/artifact-registration.d.ts +36 -0
  126. package/dist/execution/artifact-registration.js +61 -0
  127. package/dist/execution/artifact-registry.d.ts +82 -0
  128. package/dist/execution/artifact-registry.js +17 -0
  129. package/dist/execution/dbos-run-launcher.d.ts +7 -0
  130. package/dist/execution/dbos-run-launcher.js +38 -0
  131. package/dist/execution/ephemeral-runner.d.ts +81 -0
  132. package/dist/execution/ephemeral-runner.js +161 -0
  133. package/dist/execution/filesystem-artifact-registry.d.ts +57 -0
  134. package/dist/execution/filesystem-artifact-registry.js +92 -0
  135. package/dist/execution/noop-artifact-registry.d.ts +11 -0
  136. package/dist/execution/noop-artifact-registry.js +17 -0
  137. package/dist/execution/post-step-pipeline.d.ts +70 -0
  138. package/dist/execution/post-step-pipeline.js +207 -0
  139. package/dist/execution/post-step.d.ts +20 -0
  140. package/dist/execution/post-step.js +65 -0
  141. package/dist/execution/reconcile-manifest.d.ts +25 -0
  142. package/dist/execution/reconcile-manifest.js +132 -0
  143. package/dist/execution/report-render.d.ts +39 -0
  144. package/dist/execution/report-render.js +98 -0
  145. package/dist/execution/report-runner.d.ts +87 -0
  146. package/dist/execution/report-runner.js +227 -0
  147. package/dist/execution/run-authorizer.d.ts +43 -0
  148. package/dist/execution/run-authorizer.js +17 -0
  149. package/dist/execution/run-launcher.d.ts +36 -0
  150. package/dist/execution/run-launcher.js +15 -0
  151. package/dist/execution/run-synthesis.d.ts +107 -0
  152. package/dist/execution/run-synthesis.js +329 -0
  153. package/dist/execution/staged-input.d.ts +41 -0
  154. package/dist/execution/staged-input.js +15 -0
  155. package/dist/execution/step-summary-metrics.d.ts +10 -0
  156. package/dist/execution/step-summary-metrics.js +22 -0
  157. package/dist/execution/step-summary.d.ts +55 -0
  158. package/dist/execution/step-summary.js +106 -0
  159. package/dist/execution/topo-sort.d.ts +33 -0
  160. package/dist/execution/topo-sort.js +99 -0
  161. package/dist/index.d.ts +112 -0
  162. package/dist/index.js +157 -0
  163. package/dist/input-sanitization.d.ts +22 -0
  164. package/dist/input-sanitization.js +64 -0
  165. package/dist/lib/async-utils.d.ts +10 -0
  166. package/dist/lib/async-utils.js +24 -0
  167. package/dist/lib/chrome.d.ts +15 -0
  168. package/dist/lib/chrome.js +95 -0
  169. package/dist/lib/db-result.d.ts +93 -0
  170. package/dist/lib/db-result.js +197 -0
  171. package/dist/lib/fs-helpers.d.ts +74 -0
  172. package/dist/lib/fs-helpers.js +119 -0
  173. package/dist/lib/fs-result.d.ts +98 -0
  174. package/dist/lib/fs-result.js +137 -0
  175. package/dist/lib/host-concurrency.d.ts +16 -0
  176. package/dist/lib/host-concurrency.js +60 -0
  177. package/dist/lib/identifiers.d.ts +8 -0
  178. package/dist/lib/identifiers.js +10 -0
  179. package/dist/lib/metrics.d.ts +7 -0
  180. package/dist/lib/metrics.js +12 -0
  181. package/dist/lib/mime-detect.d.ts +17 -0
  182. package/dist/lib/mime-detect.js +29 -0
  183. package/dist/lib/otel.d.ts +30 -0
  184. package/dist/lib/otel.js +102 -0
  185. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +35 -0
  186. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +107 -0
  187. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +46 -0
  188. package/dist/lib/regulatory-corpus/fetch-ich.js +173 -0
  189. package/dist/lib/regulatory-corpus.d.ts +88 -0
  190. package/dist/lib/regulatory-corpus.js +141 -0
  191. package/dist/lib/result.d.ts +87 -0
  192. package/dist/lib/result.js +103 -0
  193. package/dist/lib/storage.d.ts +29 -0
  194. package/dist/lib/storage.js +37 -0
  195. package/dist/lib/streamed-download.d.ts +28 -0
  196. package/dist/lib/streamed-download.js +111 -0
  197. package/dist/lib/trace-context.d.ts +11 -0
  198. package/dist/lib/trace-context.js +49 -0
  199. package/dist/loop/__fixtures__/scripted-provider.d.ts +31 -0
  200. package/dist/loop/__fixtures__/scripted-provider.js +57 -0
  201. package/dist/loop/budget-exceeded.d.ts +22 -0
  202. package/dist/loop/budget-exceeded.js +41 -0
  203. package/dist/loop/metrics.d.ts +25 -0
  204. package/dist/loop/metrics.js +46 -0
  205. package/dist/loop/run-agent.d.ts +28 -0
  206. package/dist/loop/run-agent.js +204 -0
  207. package/dist/loop/run-step.d.ts +29 -0
  208. package/dist/loop/run-step.js +34 -0
  209. package/dist/loop/run-to-terminal.d.ts +46 -0
  210. package/dist/loop/run-to-terminal.js +51 -0
  211. package/dist/loop/types.d.ts +95 -0
  212. package/dist/loop/types.js +10 -0
  213. package/dist/memory/ai-sdk-message-storage.d.ts +20 -0
  214. package/dist/memory/ai-sdk-message-storage.js +114 -0
  215. package/dist/memory/card-builders.d.ts +114 -0
  216. package/dist/memory/card-builders.js +231 -0
  217. package/dist/memory/content-to-cortex.d.ts +42 -0
  218. package/dist/memory/content-to-cortex.js +85 -0
  219. package/dist/memory/count-tokens.d.ts +18 -0
  220. package/dist/memory/count-tokens.js +64 -0
  221. package/dist/memory/derive-thread-title.d.ts +14 -0
  222. package/dist/memory/derive-thread-title.js +26 -0
  223. package/dist/memory/message-backfill.d.ts +2 -0
  224. package/dist/memory/message-backfill.js +38 -0
  225. package/dist/memory/reconstruct-cards.d.ts +23 -0
  226. package/dist/memory/reconstruct-cards.js +64 -0
  227. package/dist/memory/thread-history.d.ts +80 -0
  228. package/dist/memory/thread-history.js +187 -0
  229. package/dist/memory/thread-store.d.ts +66 -0
  230. package/dist/memory/thread-store.js +88 -0
  231. package/dist/memory/working-memory.d.ts +135 -0
  232. package/dist/memory/working-memory.js +185 -0
  233. package/dist/prompts/SOUL.d.ts +17 -0
  234. package/dist/prompts/SOUL.js +173 -0
  235. package/dist/prompts/analogical-reasoner.d.ts +1 -0
  236. package/dist/prompts/analogical-reasoner.js +170 -0
  237. package/dist/prompts/conversation.d.ts +1 -0
  238. package/dist/prompts/conversation.js +697 -0
  239. package/dist/prompts/execute-analysis/step-summary.d.ts +1 -0
  240. package/dist/prompts/execute-analysis/step-summary.js +38 -0
  241. package/dist/prompts/literature-reviewer.d.ts +1 -0
  242. package/dist/prompts/literature-reviewer.js +107 -0
  243. package/dist/prompts/planner.d.ts +2 -0
  244. package/dist/prompts/planner.js +259 -0
  245. package/dist/prompts/report-builder.d.ts +1 -0
  246. package/dist/prompts/report-builder.js +127 -0
  247. package/dist/prompts/sandbox/bulk-transcriptomics-agent.d.ts +1 -0
  248. package/dist/prompts/sandbox/bulk-transcriptomics-agent.js +78 -0
  249. package/dist/prompts/sandbox/cheminformatics-agent.d.ts +1 -0
  250. package/dist/prompts/sandbox/cheminformatics-agent.js +224 -0
  251. package/dist/prompts/sandbox/chromatin-agent.d.ts +1 -0
  252. package/dist/prompts/sandbox/chromatin-agent.js +100 -0
  253. package/dist/prompts/sandbox/data-profiler.d.ts +1 -0
  254. package/dist/prompts/sandbox/data-profiler.js +291 -0
  255. package/dist/prompts/sandbox/dna-methylation-agent.d.ts +1 -0
  256. package/dist/prompts/sandbox/dna-methylation-agent.js +96 -0
  257. package/dist/prompts/sandbox/drug-repurposing-agent.d.ts +1 -0
  258. package/dist/prompts/sandbox/drug-repurposing-agent.js +144 -0
  259. package/dist/prompts/sandbox/enrichment-agent.d.ts +1 -0
  260. package/dist/prompts/sandbox/enrichment-agent.js +89 -0
  261. package/dist/prompts/sandbox/ephemeral-executor.d.ts +1 -0
  262. package/dist/prompts/sandbox/ephemeral-executor.js +66 -0
  263. package/dist/prompts/sandbox/genomic-variant-agent.d.ts +1 -0
  264. package/dist/prompts/sandbox/genomic-variant-agent.js +83 -0
  265. package/dist/prompts/sandbox/immune-profiling-agent.d.ts +1 -0
  266. package/dist/prompts/sandbox/immune-profiling-agent.js +101 -0
  267. package/dist/prompts/sandbox/metabolomics-agent.d.ts +1 -0
  268. package/dist/prompts/sandbox/metabolomics-agent.js +89 -0
  269. package/dist/prompts/sandbox/microbiome-agent.d.ts +1 -0
  270. package/dist/prompts/sandbox/microbiome-agent.js +109 -0
  271. package/dist/prompts/sandbox/multi-omics-integration-agent.d.ts +1 -0
  272. package/dist/prompts/sandbox/multi-omics-integration-agent.js +122 -0
  273. package/dist/prompts/sandbox/multimodal-sc-agent.d.ts +1 -0
  274. package/dist/prompts/sandbox/multimodal-sc-agent.js +90 -0
  275. package/dist/prompts/sandbox/network-agent.d.ts +1 -0
  276. package/dist/prompts/sandbox/network-agent.js +95 -0
  277. package/dist/prompts/sandbox/pkpd-clinical-response-agent.d.ts +1 -0
  278. package/dist/prompts/sandbox/pkpd-clinical-response-agent.js +71 -0
  279. package/dist/prompts/sandbox/proteomics-agent.d.ts +1 -0
  280. package/dist/prompts/sandbox/proteomics-agent.js +93 -0
  281. package/dist/prompts/sandbox/scientific-executor.d.ts +1 -0
  282. package/dist/prompts/sandbox/scientific-executor.js +68 -0
  283. package/dist/prompts/sandbox/single-cell-agent.d.ts +1 -0
  284. package/dist/prompts/sandbox/single-cell-agent.js +129 -0
  285. package/dist/prompts/sandbox/spatial-omics-agent.d.ts +1 -0
  286. package/dist/prompts/sandbox/spatial-omics-agent.js +94 -0
  287. package/dist/prompts/sandbox/statistical-modeling-agent.d.ts +1 -0
  288. package/dist/prompts/sandbox/statistical-modeling-agent.js +112 -0
  289. package/dist/prompts/sandbox/translational-safety-agent.d.ts +1 -0
  290. package/dist/prompts/sandbox/translational-safety-agent.js +105 -0
  291. package/dist/prompts/sandbox-standards.d.ts +18 -0
  292. package/dist/prompts/sandbox-standards.js +358 -0
  293. package/dist/prompts/synthesis-agent.d.ts +1 -0
  294. package/dist/prompts/synthesis-agent.js +289 -0
  295. package/dist/prompts/target-assessment/briefs/executive-recommendation.d.ts +1 -0
  296. package/dist/prompts/target-assessment/briefs/executive-recommendation.js +85 -0
  297. package/dist/prompts/target-assessment/briefs/index.d.ts +4 -0
  298. package/dist/prompts/target-assessment/briefs/index.js +4 -0
  299. package/dist/prompts/target-assessment/briefs/liability-bullets.d.ts +1 -0
  300. package/dist/prompts/target-assessment/briefs/liability-bullets.js +114 -0
  301. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.d.ts +1 -0
  302. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.js +29 -0
  303. package/dist/prompts/target-assessment/briefs/translational-commentary.d.ts +1 -0
  304. package/dist/prompts/target-assessment/briefs/translational-commentary.js +23 -0
  305. package/dist/prompts/target-assessment/drugs-in-class.d.ts +1 -0
  306. package/dist/prompts/target-assessment/drugs-in-class.js +29 -0
  307. package/dist/prompts/target-assessment/modulator-triage.d.ts +1 -0
  308. package/dist/prompts/target-assessment/modulator-triage.js +31 -0
  309. package/dist/prompts/target-assessment/off-target-annotator.d.ts +1 -0
  310. package/dist/prompts/target-assessment/off-target-annotator.js +28 -0
  311. package/dist/prompts/target-assessment/tox-voice/core.d.ts +1 -0
  312. package/dist/prompts/target-assessment/tox-voice/core.js +74 -0
  313. package/dist/prompts/target-assessment/tox-voice/critique.d.ts +7 -0
  314. package/dist/prompts/target-assessment/tox-voice/critique.js +109 -0
  315. package/dist/prompts/target-assessment/tox-voice/exemplars.d.ts +8 -0
  316. package/dist/prompts/target-assessment/tox-voice/exemplars.js +24 -0
  317. package/dist/prompts/target-assessment/tox-voice/index.d.ts +4 -0
  318. package/dist/prompts/target-assessment/tox-voice/index.js +4 -0
  319. package/dist/prompts/target-assessment/tox-voice/vocabulary.d.ts +15 -0
  320. package/dist/prompts/target-assessment/tox-voice/vocabulary.js +72 -0
  321. package/dist/provenance/collector.d.ts +148 -0
  322. package/dist/provenance/collector.js +296 -0
  323. package/dist/provenance/exec-frame.d.ts +36 -0
  324. package/dist/provenance/exec-frame.js +49 -0
  325. package/dist/provenance/types.d.ts +95 -0
  326. package/dist/provenance/types.js +64 -0
  327. package/dist/providers/__fixtures__/session.d.ts +16 -0
  328. package/dist/providers/__fixtures__/session.js +20 -0
  329. package/dist/providers/ai-sdk.d.ts +47 -0
  330. package/dist/providers/ai-sdk.js +142 -0
  331. package/dist/providers/anthropic.d.ts +22 -0
  332. package/dist/providers/anthropic.js +26 -0
  333. package/dist/providers/embedding.d.ts +32 -0
  334. package/dist/providers/embedding.js +42 -0
  335. package/dist/providers/errors.d.ts +80 -0
  336. package/dist/providers/errors.js +137 -0
  337. package/dist/providers/llm-capabilities.d.ts +33 -0
  338. package/dist/providers/llm-capabilities.js +58 -0
  339. package/dist/providers/streaming-chat.d.ts +23 -0
  340. package/dist/providers/streaming-chat.js +61 -0
  341. package/dist/providers/types.d.ts +59 -0
  342. package/dist/providers/types.js +8 -0
  343. package/dist/runtime/assemble.d.ts +68 -0
  344. package/dist/runtime/assemble.js +46 -0
  345. package/dist/runtime/boot.d.ts +73 -0
  346. package/dist/runtime/boot.js +65 -0
  347. package/dist/runtime/connection-budget.d.ts +48 -0
  348. package/dist/runtime/connection-budget.js +57 -0
  349. package/dist/runtime/dbos.d.ts +94 -0
  350. package/dist/runtime/dbos.js +160 -0
  351. package/dist/runtime/lifecycle.d.ts +12 -0
  352. package/dist/runtime/lifecycle.js +19 -0
  353. package/dist/runtime/pools.d.ts +25 -0
  354. package/dist/runtime/pools.js +30 -0
  355. package/dist/runtime/shutdown.d.ts +33 -0
  356. package/dist/runtime/shutdown.js +39 -0
  357. package/dist/sandbox/await-exec.d.ts +143 -0
  358. package/dist/sandbox/await-exec.js +406 -0
  359. package/dist/sandbox/client.d.ts +82 -0
  360. package/dist/sandbox/client.js +23 -0
  361. package/dist/sandbox/create-sandbox.d.ts +105 -0
  362. package/dist/sandbox/create-sandbox.js +132 -0
  363. package/dist/sandbox/deliver-exec-event.d.ts +25 -0
  364. package/dist/sandbox/deliver-exec-event.js +29 -0
  365. package/dist/sandbox/docker-client.d.ts +75 -0
  366. package/dist/sandbox/docker-client.js +315 -0
  367. package/dist/sandbox/estimate-data-profile-resources.d.ts +5 -0
  368. package/dist/sandbox/estimate-data-profile-resources.js +73 -0
  369. package/dist/sandbox/exec-id.d.ts +12 -0
  370. package/dist/sandbox/exec-id.js +20 -0
  371. package/dist/sandbox/execution-id.d.ts +30 -0
  372. package/dist/sandbox/execution-id.js +47 -0
  373. package/dist/sandbox/hmac.d.ts +54 -0
  374. package/dist/sandbox/hmac.js +67 -0
  375. package/dist/sandbox/identity.d.ts +15 -0
  376. package/dist/sandbox/identity.js +22 -0
  377. package/dist/sandbox/ignored-dirs.d.ts +7 -0
  378. package/dist/sandbox/ignored-dirs.js +7 -0
  379. package/dist/sandbox/k8s-client.d.ts +71 -0
  380. package/dist/sandbox/k8s-client.js +488 -0
  381. package/dist/sandbox/liveness.d.ts +60 -0
  382. package/dist/sandbox/liveness.js +82 -0
  383. package/dist/sandbox/mount-plan.d.ts +77 -0
  384. package/dist/sandbox/mount-plan.js +84 -0
  385. package/dist/sandbox/notification-sweep.d.ts +42 -0
  386. package/dist/sandbox/notification-sweep.js +74 -0
  387. package/dist/sandbox/reaper.d.ts +70 -0
  388. package/dist/sandbox/reaper.js +124 -0
  389. package/dist/sandbox/sandbox-error.d.ts +105 -0
  390. package/dist/sandbox/sandbox-error.js +92 -0
  391. package/dist/sandbox/sandbox-step-translate.d.ts +35 -0
  392. package/dist/sandbox/sandbox-step-translate.js +76 -0
  393. package/dist/sandbox/submit-exec.d.ts +33 -0
  394. package/dist/sandbox/submit-exec.js +68 -0
  395. package/dist/sandbox/types.d.ts +277 -0
  396. package/dist/sandbox/types.js +147 -0
  397. package/dist/sandbox/watchdog.d.ts +71 -0
  398. package/dist/sandbox/watchdog.js +150 -0
  399. package/dist/schemas/artifact-manifest.d.ts +34 -0
  400. package/dist/schemas/artifact-manifest.js +36 -0
  401. package/dist/schemas/data-profile-schemas.d.ts +92 -0
  402. package/dist/schemas/data-profile-schemas.js +89 -0
  403. package/dist/schemas/file-metadata.d.ts +51 -0
  404. package/dist/schemas/file-metadata.js +39 -0
  405. package/dist/schemas/plan-schemas.d.ts +110 -0
  406. package/dist/schemas/plan-schemas.js +50 -0
  407. package/dist/schemas/render-step-prompt.d.ts +32 -0
  408. package/dist/schemas/render-step-prompt.js +76 -0
  409. package/dist/schemas/run-synthesis.d.ts +148 -0
  410. package/dist/schemas/run-synthesis.js +87 -0
  411. package/dist/schemas/step-summary.d.ts +18 -0
  412. package/dist/schemas/step-summary.js +20 -0
  413. package/dist/schemas/validate-plan.d.ts +39 -0
  414. package/dist/schemas/validate-plan.js +120 -0
  415. package/dist/schemas/workflow-state.d.ts +314 -0
  416. package/dist/schemas/workflow-state.js +139 -0
  417. package/dist/state/active-sandboxes.d.ts +58 -0
  418. package/dist/state/active-sandboxes.js +100 -0
  419. package/dist/state/analyses-metrics.d.ts +21 -0
  420. package/dist/state/analyses-metrics.js +59 -0
  421. package/dist/state/analyses.d.ts +58 -0
  422. package/dist/state/analyses.js +132 -0
  423. package/dist/state/artifacts.d.ts +53 -0
  424. package/dist/state/artifacts.js +175 -0
  425. package/dist/state/data-profile.d.ts +176 -0
  426. package/dist/state/data-profile.js +284 -0
  427. package/dist/state/db.d.ts +10 -0
  428. package/dist/state/db.js +9 -0
  429. package/dist/state/index.d.ts +29 -0
  430. package/dist/state/index.js +20 -0
  431. package/dist/state/init.d.ts +14 -0
  432. package/dist/state/init.js +406 -0
  433. package/dist/state/plans.d.ts +56 -0
  434. package/dist/state/plans.js +117 -0
  435. package/dist/state/runs.d.ts +69 -0
  436. package/dist/state/runs.js +206 -0
  437. package/dist/state/schema.d.ts +150 -0
  438. package/dist/state/schema.js +100 -0
  439. package/dist/state/step-executions.d.ts +77 -0
  440. package/dist/state/step-executions.js +175 -0
  441. package/dist/state/target-assessments.d.ts +68 -0
  442. package/dist/state/target-assessments.js +222 -0
  443. package/dist/state/vector-store.d.ts +53 -0
  444. package/dist/state/vector-store.js +89 -0
  445. package/dist/tasks/data-profile.d.ts +171 -0
  446. package/dist/tasks/data-profile.js +461 -0
  447. package/dist/tasks/refresh-regulatory-corpus.d.ts +59 -0
  448. package/dist/tasks/refresh-regulatory-corpus.js +146 -0
  449. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +55 -0
  450. package/dist/tasks/regulatory-corpus-boot-refresh.js +149 -0
  451. package/dist/tools/__fixtures__/tool-context.d.ts +13 -0
  452. package/dist/tools/__fixtures__/tool-context.js +18 -0
  453. package/dist/tools/bio/check-safety-panel.d.ts +35 -0
  454. package/dist/tools/bio/check-safety-panel.js +76 -0
  455. package/dist/tools/bio/find-approval-precedent.d.ts +32 -0
  456. package/dist/tools/bio/find-approval-precedent.js +72 -0
  457. package/dist/tools/bio/get-article-details.d.ts +11 -0
  458. package/dist/tools/bio/get-article-details.js +20 -0
  459. package/dist/tools/bio/get-article-full-text.d.ts +19 -0
  460. package/dist/tools/bio/get-article-full-text.js +32 -0
  461. package/dist/tools/bio/get-bioactivity.d.ts +11 -0
  462. package/dist/tools/bio/get-bioactivity.js +23 -0
  463. package/dist/tools/bio/get-drug-info.d.ts +9 -0
  464. package/dist/tools/bio/get-drug-info.js +22 -0
  465. package/dist/tools/bio/get-impc-ko-profile.d.ts +9 -0
  466. package/dist/tools/bio/get-impc-ko-profile.js +20 -0
  467. package/dist/tools/bio/get-mechanism.d.ts +8 -0
  468. package/dist/tools/bio/get-mechanism.js +18 -0
  469. package/dist/tools/bio/get-pubchem-assays.d.ts +22 -0
  470. package/dist/tools/bio/get-pubchem-assays.js +107 -0
  471. package/dist/tools/bio/get-pubchem-cross-refs.d.ts +15 -0
  472. package/dist/tools/bio/get-pubchem-cross-refs.js +68 -0
  473. package/dist/tools/bio/get-target-safety.d.ts +18 -0
  474. package/dist/tools/bio/get-target-safety.js +26 -0
  475. package/dist/tools/bio/index.d.ts +41 -0
  476. package/dist/tools/bio/index.js +48 -0
  477. package/dist/tools/bio/keys.d.ts +31 -0
  478. package/dist/tools/bio/keys.js +30 -0
  479. package/dist/tools/bio/lookup-go-term.d.ts +31 -0
  480. package/dist/tools/bio/lookup-go-term.js +116 -0
  481. package/dist/tools/bio/search-bgee-expression.d.ts +10 -0
  482. package/dist/tools/bio/search-bgee-expression.js +24 -0
  483. package/dist/tools/bio/search-clinical-trials.d.ts +12 -0
  484. package/dist/tools/bio/search-clinical-trials.js +21 -0
  485. package/dist/tools/bio/search-clinvar.d.ts +13 -0
  486. package/dist/tools/bio/search-clinvar.js +28 -0
  487. package/dist/tools/bio/search-compounds.d.ts +22 -0
  488. package/dist/tools/bio/search-compounds.js +160 -0
  489. package/dist/tools/bio/search-ctx-chemical.d.ts +50 -0
  490. package/dist/tools/bio/search-ctx-chemical.js +130 -0
  491. package/dist/tools/bio/search-ctx-exposure.d.ts +55 -0
  492. package/dist/tools/bio/search-ctx-exposure.js +176 -0
  493. package/dist/tools/bio/search-ctx-hazard.d.ts +111 -0
  494. package/dist/tools/bio/search-ctx-hazard.js +178 -0
  495. package/dist/tools/bio/search-dgidb.d.ts +43 -0
  496. package/dist/tools/bio/search-dgidb.js +199 -0
  497. package/dist/tools/bio/search-disgenet.d.ts +30 -0
  498. package/dist/tools/bio/search-disgenet.js +84 -0
  499. package/dist/tools/bio/search-drugbank.d.ts +38 -0
  500. package/dist/tools/bio/search-drugbank.js +109 -0
  501. package/dist/tools/bio/search-faers.d.ts +11 -0
  502. package/dist/tools/bio/search-faers.js +23 -0
  503. package/dist/tools/bio/search-gene.d.ts +11 -0
  504. package/dist/tools/bio/search-gene.js +19 -0
  505. package/dist/tools/bio/search-geo-datasets.d.ts +20 -0
  506. package/dist/tools/bio/search-geo-datasets.js +86 -0
  507. package/dist/tools/bio/search-gwas-catalog.d.ts +33 -0
  508. package/dist/tools/bio/search-gwas-catalog.js +172 -0
  509. package/dist/tools/bio/search-interactions.d.ts +17 -0
  510. package/dist/tools/bio/search-interactions.js +31 -0
  511. package/dist/tools/bio/search-opentargets.d.ts +11 -0
  512. package/dist/tools/bio/search-opentargets.js +25 -0
  513. package/dist/tools/bio/search-pathway.d.ts +12 -0
  514. package/dist/tools/bio/search-pathway.js +32 -0
  515. package/dist/tools/bio/search-pharmgkb.d.ts +17 -0
  516. package/dist/tools/bio/search-pharmgkb.js +46 -0
  517. package/dist/tools/bio/search-pubchem-compound.d.ts +26 -0
  518. package/dist/tools/bio/search-pubchem-compound.js +110 -0
  519. package/dist/tools/bio/search-pubmed.d.ts +17 -0
  520. package/dist/tools/bio/search-pubmed.js +31 -0
  521. package/dist/tools/bio/search-targets.d.ts +9 -0
  522. package/dist/tools/bio/search-targets.js +20 -0
  523. package/dist/tools/bio/search-toxcast.d.ts +36 -0
  524. package/dist/tools/bio/search-toxcast.js +141 -0
  525. package/dist/tools/define-tool.d.ts +80 -0
  526. package/dist/tools/define-tool.js +48 -0
  527. package/dist/tools/display/index.d.ts +4 -0
  528. package/dist/tools/display/index.js +4 -0
  529. package/dist/tools/display/show-user.d.ts +33 -0
  530. package/dist/tools/display/show-user.js +67 -0
  531. package/dist/tools/execute-plan.d.ts +64 -0
  532. package/dist/tools/execute-plan.js +208 -0
  533. package/dist/tools/iterate-report.d.ts +172 -0
  534. package/dist/tools/iterate-report.js +521 -0
  535. package/dist/tools/lib/api-utils.d.ts +80 -0
  536. package/dist/tools/lib/api-utils.js +128 -0
  537. package/dist/tools/lib/bgee-client.d.ts +36 -0
  538. package/dist/tools/lib/bgee-client.js +150 -0
  539. package/dist/tools/lib/cbioportal-client.d.ts +34 -0
  540. package/dist/tools/lib/cbioportal-client.js +159 -0
  541. package/dist/tools/lib/chembl-client.d.ts +123 -0
  542. package/dist/tools/lib/chembl-client.js +458 -0
  543. package/dist/tools/lib/chembl-config.d.ts +5 -0
  544. package/dist/tools/lib/chembl-config.js +3 -0
  545. package/dist/tools/lib/clinical-benchmarks-client.d.ts +33 -0
  546. package/dist/tools/lib/clinical-benchmarks-client.js +54 -0
  547. package/dist/tools/lib/clinical-trials-client.d.ts +216 -0
  548. package/dist/tools/lib/clinical-trials-client.js +339 -0
  549. package/dist/tools/lib/clinicaltrials-config.d.ts +4 -0
  550. package/dist/tools/lib/clinicaltrials-config.js +2 -0
  551. package/dist/tools/lib/clinvar-client.d.ts +25 -0
  552. package/dist/tools/lib/clinvar-client.js +126 -0
  553. package/dist/tools/lib/disgenet-config.d.ts +2 -0
  554. package/dist/tools/lib/disgenet-config.js +11 -0
  555. package/dist/tools/lib/drugbank-config.d.ts +2 -0
  556. package/dist/tools/lib/drugbank-config.js +12 -0
  557. package/dist/tools/lib/ema-client.d.ts +45 -0
  558. package/dist/tools/lib/ema-client.js +127 -0
  559. package/dist/tools/lib/ema-config.d.ts +7 -0
  560. package/dist/tools/lib/ema-config.js +7 -0
  561. package/dist/tools/lib/ensembl-client.d.ts +27 -0
  562. package/dist/tools/lib/ensembl-client.js +82 -0
  563. package/dist/tools/lib/gwas-catalog-config.d.ts +4 -0
  564. package/dist/tools/lib/gwas-catalog-config.js +2 -0
  565. package/dist/tools/lib/identifier-resolver.d.ts +85 -0
  566. package/dist/tools/lib/identifier-resolver.js +333 -0
  567. package/dist/tools/lib/impc-client.d.ts +44 -0
  568. package/dist/tools/lib/impc-client.js +239 -0
  569. package/dist/tools/lib/iuphar-client.d.ts +75 -0
  570. package/dist/tools/lib/iuphar-client.js +230 -0
  571. package/dist/tools/lib/iuphar-config.d.ts +5 -0
  572. package/dist/tools/lib/iuphar-config.js +3 -0
  573. package/dist/tools/lib/ncbi-utils.d.ts +58 -0
  574. package/dist/tools/lib/ncbi-utils.js +286 -0
  575. package/dist/tools/lib/openfda-client.d.ts +53 -0
  576. package/dist/tools/lib/openfda-client.js +192 -0
  577. package/dist/tools/lib/openfda-config.d.ts +2 -0
  578. package/dist/tools/lib/openfda-config.js +2 -0
  579. package/dist/tools/lib/opentargets-client.d.ts +64 -0
  580. package/dist/tools/lib/opentargets-client.js +290 -0
  581. package/dist/tools/lib/opentargets-config.d.ts +5 -0
  582. package/dist/tools/lib/opentargets-config.js +5 -0
  583. package/dist/tools/lib/path-validation.d.ts +14 -0
  584. package/dist/tools/lib/path-validation.js +26 -0
  585. package/dist/tools/lib/pathway-client.d.ts +27 -0
  586. package/dist/tools/lib/pathway-client.js +149 -0
  587. package/dist/tools/lib/pharmgkb-config.d.ts +4 -0
  588. package/dist/tools/lib/pharmgkb-config.js +2 -0
  589. package/dist/tools/lib/preview-lock.d.ts +20 -0
  590. package/dist/tools/lib/preview-lock.js +35 -0
  591. package/dist/tools/lib/protein-family-modality.d.ts +16 -0
  592. package/dist/tools/lib/protein-family-modality.js +42 -0
  593. package/dist/tools/lib/protein-family-normalize.d.ts +12 -0
  594. package/dist/tools/lib/protein-family-normalize.js +46 -0
  595. package/dist/tools/lib/pubchem-client.d.ts +40 -0
  596. package/dist/tools/lib/pubchem-client.js +128 -0
  597. package/dist/tools/lib/pubchem-config.d.ts +5 -0
  598. package/dist/tools/lib/pubchem-config.js +3 -0
  599. package/dist/tools/lib/pubmed-client.d.ts +28 -0
  600. package/dist/tools/lib/pubmed-client.js +91 -0
  601. package/dist/tools/lib/report-preflight.d.ts +39 -0
  602. package/dist/tools/lib/report-preflight.js +283 -0
  603. package/dist/tools/lib/string-client.d.ts +33 -0
  604. package/dist/tools/lib/string-client.js +93 -0
  605. package/dist/tools/lib/toxcast-config.d.ts +2 -0
  606. package/dist/tools/lib/toxcast-config.js +11 -0
  607. package/dist/tools/lib/uniprot-client.d.ts +28 -0
  608. package/dist/tools/lib/uniprot-client.js +103 -0
  609. package/dist/tools/lib/uniprot-config.d.ts +5 -0
  610. package/dist/tools/lib/uniprot-config.js +3 -0
  611. package/dist/tools/memory/index.d.ts +4 -0
  612. package/dist/tools/memory/index.js +4 -0
  613. package/dist/tools/memory/update-working-memory.d.ts +25 -0
  614. package/dist/tools/memory/update-working-memory.js +112 -0
  615. package/dist/tools/registry.d.ts +15 -0
  616. package/dist/tools/registry.js +26 -0
  617. package/dist/tools/report/build-report.d.ts +13 -0
  618. package/dist/tools/report/build-report.js +26 -0
  619. package/dist/tools/report/index.d.ts +14 -0
  620. package/dist/tools/report/index.js +14 -0
  621. package/dist/tools/report/mint-preview-url.d.ts +26 -0
  622. package/dist/tools/report/mint-preview-url.js +44 -0
  623. package/dist/tools/report/preview-publisher.d.ts +37 -0
  624. package/dist/tools/report/preview-publisher.js +25 -0
  625. package/dist/tools/report/preview-snapshot.d.ts +26 -0
  626. package/dist/tools/report/preview-snapshot.js +121 -0
  627. package/dist/tools/report/submit-report.d.ts +25 -0
  628. package/dist/tools/report/submit-report.js +126 -0
  629. package/dist/tools/report/version-fs.d.ts +15 -0
  630. package/dist/tools/report/version-fs.js +154 -0
  631. package/dist/tools/research/context7-docs.d.ts +31 -0
  632. package/dist/tools/research/context7-docs.js +61 -0
  633. package/dist/tools/research/generate-analogy-report.d.ts +60 -0
  634. package/dist/tools/research/generate-analogy-report.js +288 -0
  635. package/dist/tools/research/generate-plan.d.ts +39 -0
  636. package/dist/tools/research/generate-plan.js +393 -0
  637. package/dist/tools/research/index.d.ts +15 -0
  638. package/dist/tools/research/index.js +15 -0
  639. package/dist/tools/research/inspect-run.d.ts +54 -0
  640. package/dist/tools/research/inspect-run.js +85 -0
  641. package/dist/tools/research/literature-reviewer.d.ts +29 -0
  642. package/dist/tools/research/literature-reviewer.js +84 -0
  643. package/dist/tools/research/search-arxiv.d.ts +32 -0
  644. package/dist/tools/research/search-arxiv.js +123 -0
  645. package/dist/tools/research/search-github-repos.d.ts +32 -0
  646. package/dist/tools/research/search-github-repos.js +86 -0
  647. package/dist/tools/research/search-semantic-scholar.d.ts +33 -0
  648. package/dist/tools/research/search-semantic-scholar.js +93 -0
  649. package/dist/tools/run-ephemeral.d.ts +33 -0
  650. package/dist/tools/run-ephemeral.js +65 -0
  651. package/dist/tools/sandbox/index.d.ts +7 -0
  652. package/dist/tools/sandbox/index.js +7 -0
  653. package/dist/tools/sandbox/list-available-packages.d.ts +7 -0
  654. package/dist/tools/sandbox/list-available-packages.js +27 -0
  655. package/dist/tools/sandbox/list-available-refs.d.ts +7 -0
  656. package/dist/tools/sandbox/list-available-refs.js +147 -0
  657. package/dist/tools/sandbox/report-blocker.d.ts +23 -0
  658. package/dist/tools/sandbox/report-blocker.js +39 -0
  659. package/dist/tools/sandbox/skills.d.ts +72 -0
  660. package/dist/tools/sandbox/skills.js +144 -0
  661. package/dist/tools/workspace/edit-file.d.ts +46 -0
  662. package/dist/tools/workspace/edit-file.js +100 -0
  663. package/dist/tools/workspace/execute-command.d.ts +80 -0
  664. package/dist/tools/workspace/execute-command.js +95 -0
  665. package/dist/tools/workspace/file-stat.d.ts +24 -0
  666. package/dist/tools/workspace/file-stat.js +37 -0
  667. package/dist/tools/workspace/grep.d.ts +57 -0
  668. package/dist/tools/workspace/grep.js +154 -0
  669. package/dist/tools/workspace/index.d.ts +26 -0
  670. package/dist/tools/workspace/index.js +27 -0
  671. package/dist/tools/workspace/list-files.d.ts +24 -0
  672. package/dist/tools/workspace/list-files.js +38 -0
  673. package/dist/tools/workspace/mutator.d.ts +83 -0
  674. package/dist/tools/workspace/mutator.js +81 -0
  675. package/dist/tools/workspace/read-file.d.ts +39 -0
  676. package/dist/tools/workspace/read-file.js +93 -0
  677. package/dist/tools/workspace/result-bounds.d.ts +42 -0
  678. package/dist/tools/workspace/result-bounds.js +50 -0
  679. package/dist/tools/workspace/run-exec.d.ts +32 -0
  680. package/dist/tools/workspace/run-exec.js +34 -0
  681. package/dist/tools/workspace/show-file.d.ts +37 -0
  682. package/dist/tools/workspace/show-file.js +54 -0
  683. package/dist/tools/workspace/show-plan.d.ts +23 -0
  684. package/dist/tools/workspace/show-plan.js +44 -0
  685. package/dist/tools/workspace/workspace-search.d.ts +25 -0
  686. package/dist/tools/workspace/workspace-search.js +78 -0
  687. package/dist/tools/workspace/write-file.d.ts +16 -0
  688. package/dist/tools/workspace/write-file.js +33 -0
  689. package/dist/workflows/execute-analysis-scheduler.d.ts +94 -0
  690. package/dist/workflows/execute-analysis-scheduler.js +186 -0
  691. package/dist/workflows/execute-analysis.d.ts +271 -0
  692. package/dist/workflows/execute-analysis.js +746 -0
  693. package/dist/workflows/execute-target-assessment.d.ts +101 -0
  694. package/dist/workflows/execute-target-assessment.js +528 -0
  695. package/dist/workflows/metrics.d.ts +37 -0
  696. package/dist/workflows/metrics.js +55 -0
  697. package/dist/workflows/plan/level.d.ts +12 -0
  698. package/dist/workflows/plan/level.js +12 -0
  699. package/dist/workflows/register-workflows.d.ts +51 -0
  700. package/dist/workflows/register-workflows.js +48 -0
  701. package/dist/workflows/resume-execute-analysis.d.ts +70 -0
  702. package/dist/workflows/resume-execute-analysis.js +80 -0
  703. package/dist/workflows/sandbox-step.d.ts +243 -0
  704. package/dist/workflows/sandbox-step.js +573 -0
  705. package/dist/workflows/target-assessment/assemblers/index.d.ts +5 -0
  706. package/dist/workflows/target-assessment/assemblers/index.js +4 -0
  707. package/dist/workflows/target-assessment/assemblers/literature.d.ts +299 -0
  708. package/dist/workflows/target-assessment/assemblers/literature.js +987 -0
  709. package/dist/workflows/target-assessment/assemblers/orchestrator.d.ts +109 -0
  710. package/dist/workflows/target-assessment/assemblers/orchestrator.js +835 -0
  711. package/dist/workflows/target-assessment/assemblers/safety.d.ts +352 -0
  712. package/dist/workflows/target-assessment/assemblers/safety.js +985 -0
  713. package/dist/workflows/target-assessment/assemblers/trials.d.ts +30 -0
  714. package/dist/workflows/target-assessment/assemblers/trials.js +75 -0
  715. package/dist/workflows/target-assessment/collectors/index.d.ts +105 -0
  716. package/dist/workflows/target-assessment/collectors/index.js +468 -0
  717. package/dist/workflows/target-assessment/correction-loop.d.ts +45 -0
  718. package/dist/workflows/target-assessment/correction-loop.js +62 -0
  719. package/dist/workflows/target-assessment/coverage.d.ts +81 -0
  720. package/dist/workflows/target-assessment/coverage.js +82 -0
  721. package/dist/workflows/target-assessment/decisions/index.d.ts +86 -0
  722. package/dist/workflows/target-assessment/decisions/index.js +127 -0
  723. package/dist/workflows/target-assessment/fanout/index.d.ts +31 -0
  724. package/dist/workflows/target-assessment/fanout/index.js +155 -0
  725. package/dist/workflows/target-assessment/lib/approval-precedents.d.ts +52 -0
  726. package/dist/workflows/target-assessment/lib/approval-precedents.js +119 -0
  727. package/dist/workflows/target-assessment/lib/citation-validator.d.ts +46 -0
  728. package/dist/workflows/target-assessment/lib/citation-validator.js +316 -0
  729. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.d.ts +62 -0
  730. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.js +172 -0
  731. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.d.ts +45 -0
  732. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.js +156 -0
  733. package/dist/workflows/target-assessment/lib/compute-derived.d.ts +19 -0
  734. package/dist/workflows/target-assessment/lib/compute-derived.js +252 -0
  735. package/dist/workflows/target-assessment/lib/compute-selectivity.d.ts +15 -0
  736. package/dist/workflows/target-assessment/lib/compute-selectivity.js +18 -0
  737. package/dist/workflows/target-assessment/lib/dedup-modulators.d.ts +37 -0
  738. package/dist/workflows/target-assessment/lib/dedup-modulators.js +157 -0
  739. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.d.ts +17 -0
  740. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.js +100 -0
  741. package/dist/workflows/target-assessment/lib/expression-constants.d.ts +21 -0
  742. package/dist/workflows/target-assessment/lib/expression-constants.js +21 -0
  743. package/dist/workflows/target-assessment/lib/family-complex-supplement.d.ts +21 -0
  744. package/dist/workflows/target-assessment/lib/family-complex-supplement.js +37 -0
  745. package/dist/workflows/target-assessment/lib/heterodimer-filter.d.ts +39 -0
  746. package/dist/workflows/target-assessment/lib/heterodimer-filter.js +54 -0
  747. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.d.ts +4 -0
  748. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.js +24 -0
  749. package/dist/workflows/target-assessment/lib/llm-step.d.ts +77 -0
  750. package/dist/workflows/target-assessment/lib/llm-step.js +99 -0
  751. package/dist/workflows/target-assessment/lib/meddra-organ-map.d.ts +30 -0
  752. package/dist/workflows/target-assessment/lib/meddra-organ-map.js +126 -0
  753. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.d.ts +17 -0
  754. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.js +99 -0
  755. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.d.ts +2 -0
  756. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.js +51 -0
  757. package/dist/workflows/target-assessment/lib/regulatory-actions.d.ts +26 -0
  758. package/dist/workflows/target-assessment/lib/regulatory-actions.js +147 -0
  759. package/dist/workflows/target-assessment/lib/structured-llm.d.ts +58 -0
  760. package/dist/workflows/target-assessment/lib/structured-llm.js +101 -0
  761. package/dist/workflows/target-assessment/lib/target-identity-filter.d.ts +60 -0
  762. package/dist/workflows/target-assessment/lib/target-identity-filter.js +86 -0
  763. package/dist/workflows/target-assessment/lib/therapeutic-programs.d.ts +20 -0
  764. package/dist/workflows/target-assessment/lib/therapeutic-programs.js +68 -0
  765. package/dist/workflows/target-assessment/metrics.d.ts +21 -0
  766. package/dist/workflows/target-assessment/metrics.js +42 -0
  767. package/dist/workflows/target-assessment/phase4-assemble.d.ts +1841 -0
  768. package/dist/workflows/target-assessment/phase4-assemble.js +39 -0
  769. package/dist/workflows/target-assessment/phase5-persist.d.ts +57 -0
  770. package/dist/workflows/target-assessment/phase5-persist.js +461 -0
  771. package/dist/workflows/target-assessment/progress.d.ts +38 -0
  772. package/dist/workflows/target-assessment/progress.js +76 -0
  773. package/dist/workflows/target-assessment/schemas.d.ts +931 -0
  774. package/dist/workflows/target-assessment/schemas.js +293 -0
  775. package/dist/workflows/target-assessment/steps/collectors/pathways.d.ts +15 -0
  776. package/dist/workflows/target-assessment/steps/collectors/pathways.js +58 -0
  777. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.d.ts +34 -0
  778. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.js +31 -0
  779. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.d.ts +57 -0
  780. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.js +54 -0
  781. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.d.ts +35 -0
  782. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.js +32 -0
  783. package/dist/workflows/target-assessment/steps/fanout/index.d.ts +14 -0
  784. package/dist/workflows/target-assessment/steps/fanout/index.js +10 -0
  785. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.d.ts +28 -0
  786. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.js +27 -0
  787. package/dist/workflows/target-assessment/steps/phase0-resolve.d.ts +71 -0
  788. package/dist/workflows/target-assessment/steps/phase0-resolve.js +21 -0
  789. package/dist/workflows/target-assessment/steps/phase1-aggregate.d.ts +1018 -0
  790. package/dist/workflows/target-assessment/steps/phase1-aggregate.js +25 -0
  791. package/dist/workflows/target-assessment/steps/phase2-aggregate.d.ts +696 -0
  792. package/dist/workflows/target-assessment/steps/phase2-aggregate.js +38 -0
  793. package/dist/workflows/target-assessment/steps/phase3-aggregate.d.ts +936 -0
  794. package/dist/workflows/target-assessment/steps/phase3-aggregate.js +22 -0
  795. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.d.ts +34 -0
  796. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.js +45 -0
  797. package/dist/workflows/target-assessment/sub-workflows/index.d.ts +15 -0
  798. package/dist/workflows/target-assessment/sub-workflows/index.js +11 -0
  799. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.d.ts +41 -0
  800. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.js +12 -0
  801. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.d.ts +41 -0
  802. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.js +12 -0
  803. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.d.ts +36 -0
  804. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.js +12 -0
  805. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.d.ts +66 -0
  806. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.js +12 -0
  807. package/dist/workflows/target-assessment/synthesis/index.d.ts +560 -0
  808. package/dist/workflows/target-assessment/synthesis/index.js +351 -0
  809. package/dist/workflows/target-assessment/synthesis-probes.d.ts +56 -0
  810. package/dist/workflows/target-assessment/synthesis-probes.js +320 -0
  811. package/dist/workspace/filesystem.d.ts +117 -0
  812. package/dist/workspace/filesystem.js +304 -0
  813. package/dist/workspace/mount-strategy.d.ts +50 -0
  814. package/dist/workspace/mount-strategy.js +67 -0
  815. package/dist/workspace/paths.d.ts +185 -0
  816. package/dist/workspace/paths.js +219 -0
  817. package/dist/workspace/provenance-collector.d.ts +34 -0
  818. package/dist/workspace/provenance-collector.js +16 -0
  819. package/dist/workspace/search-config.d.ts +23 -0
  820. package/dist/workspace/search-config.js +43 -0
  821. package/dist/workspace/workspace-paths.d.ts +26 -0
  822. package/dist/workspace/workspace-paths.js +31 -0
  823. package/package.json +101 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Active-sandbox registry (CONTEXT.md) — the projection over
3
+ * `cortex_step_executions` rows with a non-null `sandbox_ref` and a running
4
+ * status. Owns the `sandbox_ref` + `exec_id` columns: written by
5
+ * `sandbox/create-sandbox.ts` on mint, cleared on teardown, enumerated by
6
+ * `sandbox/watchdog.ts` for liveness sweeps.
7
+ */
8
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
9
+ /**
10
+ * Record the live sandbox handle on a step row. Called inside the
11
+ * `createSandbox` DBOS step after the backend has confirmed the sandbox
12
+ * is up. The `callbackSecret` is deliberately not part of the persisted
13
+ * shape (see the harness-sandbox-exec spec) — it lives only in the cached step output.
14
+ */
15
+ export function setSandboxRef(pool, runId, stepId, sandboxRef, execId) {
16
+ return tryMutation("activeSandboxes.setSandboxRef", async () => {
17
+ await pool.query({
18
+ text: `UPDATE cortex_step_executions
19
+ SET sandbox_ref = $1::jsonb, exec_id = $2
20
+ WHERE run_id = $3 AND step_id = $4`,
21
+ values: [JSON.stringify(sandboxRef), execId, runId, stepId],
22
+ });
23
+ });
24
+ }
25
+ /**
26
+ * Tag the active-sandbox row with the exec currently in flight. Called from
27
+ * `run-exec.ts` right before `awaitExec` so the liveness watchdog can target
28
+ * the hung exec when the sandbox dies mid-command. Targets the same
29
+ * `(run_id, step_id)` row `setSandboxRef` writes and `queryActiveSandboxes`
30
+ * enumerates. Overwritten by the next exec; cleared on teardown.
31
+ */
32
+ export function setActiveExecId(pool, runId, stepId, execId) {
33
+ return tryMutation("activeSandboxes.setActiveExecId", async () => {
34
+ await pool.query({
35
+ text: `UPDATE cortex_step_executions
36
+ SET exec_id = $1
37
+ WHERE run_id = $2 AND step_id = $3`,
38
+ values: [execId, runId, stepId],
39
+ });
40
+ });
41
+ }
42
+ /**
43
+ * Clear the sandbox handle. Called inside the `teardown` DBOS step. Safe
44
+ * to call when no sandbox was ever recorded — the UPDATE simply targets
45
+ * zero rows.
46
+ */
47
+ export function clearSandboxRef(pool, runId, stepId) {
48
+ return tryMutation("activeSandboxes.clearSandboxRef", async () => {
49
+ await pool.query({
50
+ text: `UPDATE cortex_step_executions
51
+ SET sandbox_ref = NULL, exec_id = NULL
52
+ WHERE run_id = $1 AND step_id = $2`,
53
+ values: [runId, stepId],
54
+ });
55
+ });
56
+ }
57
+ /**
58
+ * Reconcile a step row after the reaper deletes its sandbox machine (ADR
59
+ * 0016). Always clears `sandbox_ref`/`exec_id` (drops the row from the
60
+ * active-sandbox registry, ending the watchdog churn); a row still stuck at
61
+ * `status='running'` — a cancellation that never ran its `mark-*` step — is
62
+ * also flipped to the owning workflow's terminal status so a terminal workflow
63
+ * never leaves a perpetually-"running" step behind. Returns true if a row
64
+ * matched. Safe when no row exists (Class A pure orphan): matches zero rows.
65
+ */
66
+ export function reconcileReapedSandbox(pool, sandboxId, terminalStatus) {
67
+ // `completed_at` is a TEXT column holding ISO-8601 strings (see
68
+ // `step-executions.ts`), so bind one — `now()` is `timestamptz` and the CASE
69
+ // cannot unify a timestamptz branch with the text column ("CASE types text
70
+ // and timestamp with time zone cannot be matched"), which aborted every sweep.
71
+ const completedAt = new Date().toISOString();
72
+ return tryMutation("activeSandboxes.reconcileReapedSandbox", async () => {
73
+ const result = await pool.query({
74
+ text: `UPDATE cortex_step_executions
75
+ SET sandbox_ref = NULL,
76
+ exec_id = NULL,
77
+ status = CASE WHEN status = 'running' THEN $2 ELSE status END,
78
+ completed_at = CASE WHEN status = 'running' THEN $3 ELSE completed_at END
79
+ WHERE sandbox_ref->>'sandboxId' = $1`,
80
+ values: [sandboxId, terminalStatus, completedAt],
81
+ });
82
+ return (result.rowCount ?? 0) > 0;
83
+ });
84
+ }
85
+ export function queryActiveSandboxes(pool) {
86
+ return tryQuery("activeSandboxes.queryActiveSandboxes", async () => {
87
+ const result = await pool.query({
88
+ text: `SELECT run_id, step_id, analysis_id, sandbox_ref, exec_id
89
+ FROM cortex_step_executions
90
+ WHERE status = 'running' AND sandbox_ref IS NOT NULL`,
91
+ });
92
+ return result.rows.map((r) => ({
93
+ runId: r.run_id,
94
+ stepId: r.step_id,
95
+ analysisId: r.analysis_id,
96
+ sandboxRef: r.sandbox_ref,
97
+ execId: r.exec_id ?? null,
98
+ }));
99
+ });
100
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Cross-entity aggregate reads used by `routes/analyses-metrics.ts` to build
3
+ * the per-analysis metrics view. Each query touches one table; the view is
4
+ * the batch shape callers want.
5
+ */
6
+ import { type ResultAsync } from "neverthrow";
7
+ import { type DbError } from "../lib/db-result.js";
8
+ import type { Querier } from "./db.js";
9
+ export declare function queryRunCountsByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
10
+ analysisId: string;
11
+ status: string;
12
+ count: number;
13
+ }>, DbError>;
14
+ export declare function queryThreadCountsByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
15
+ analysisId: string;
16
+ count: number;
17
+ }>, DbError>;
18
+ export declare function queryDataProfileStatusByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
19
+ analysisId: string;
20
+ status: string | null;
21
+ }>, DbError>;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Cross-entity aggregate reads used by `routes/analyses-metrics.ts` to build
3
+ * the per-analysis metrics view. Each query touches one table; the view is
4
+ * the batch shape callers want.
5
+ */
6
+ import { okAsync } from "neverthrow";
7
+ import { tryQuery } from "../lib/db-result.js";
8
+ export function queryRunCountsByAnalyses(pool, analysisIds) {
9
+ if (analysisIds.length === 0)
10
+ return okAsync([]);
11
+ return tryQuery("analysesMetrics.queryRunCountsByAnalyses", async () => {
12
+ const result = await pool.query({
13
+ text: `SELECT analysis_id, status, COUNT(*)::int AS count
14
+ FROM cortex_runs
15
+ WHERE analysis_id = ANY($1::text[])
16
+ GROUP BY analysis_id, status`,
17
+ values: [analysisIds],
18
+ });
19
+ return result.rows.map((r) => ({
20
+ analysisId: r.analysis_id,
21
+ status: r.status,
22
+ count: r.count,
23
+ }));
24
+ });
25
+ }
26
+ export function queryThreadCountsByAnalyses(pool, analysisIds) {
27
+ if (analysisIds.length === 0)
28
+ return okAsync([]);
29
+ return tryQuery("analysesMetrics.queryThreadCountsByAnalyses", async () => {
30
+ const result = await pool.query({
31
+ text: `SELECT analysis_id, COUNT(*)::int AS count
32
+ FROM cortex_analysis_threads
33
+ WHERE analysis_id = ANY($1::text[])
34
+ AND deleted_at IS NULL
35
+ GROUP BY analysis_id`,
36
+ values: [analysisIds],
37
+ });
38
+ return result.rows.map((r) => ({
39
+ analysisId: r.analysis_id,
40
+ count: r.count,
41
+ }));
42
+ });
43
+ }
44
+ export function queryDataProfileStatusByAnalyses(pool, analysisIds) {
45
+ if (analysisIds.length === 0)
46
+ return okAsync([]);
47
+ return tryQuery("analysesMetrics.queryDataProfileStatusByAnalyses", async () => {
48
+ const result = await pool.query({
49
+ text: `SELECT analysis_id, data_profile_status
50
+ FROM cortex_analysis_state
51
+ WHERE analysis_id = ANY($1::text[])`,
52
+ values: [analysisIds],
53
+ });
54
+ return result.rows.map((r) => ({
55
+ analysisId: r.analysis_id,
56
+ status: r.data_profile_status ?? null,
57
+ }));
58
+ });
59
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `cortex_analysis_state` operations — analysis lifecycle and billing context.
3
+ */
4
+ import type { ResultAsync } from "neverthrow";
5
+ import { type DbError } from "../lib/db-result.js";
6
+ import type { Querier } from "./db.js";
7
+ /**
8
+ * Upsert a cortex_analysis_state row.
9
+ *
10
+ * The seed endpoint is called repeatedly; this function handles both the
11
+ * initial INSERT and subsequent UPDATEs by writing ALL mutable fields on
12
+ * every call. Re-upserts replace `context` and `billing_context` wholesale.
13
+ *
14
+ * User identity is derived from the ambient credential's JWT `sub` claim
15
+ * at request time — not persisted in this table.
16
+ *
17
+ * INTENTIONAL: split-attribution across a single run.
18
+ * If the seed re-upserts mid-workflow (e.g., the billing context's VK rotates),
19
+ * in-flight steps that have already issued LLM calls keep the old attribution
20
+ * on those calls, while subsequent steps in the same run pick up the new
21
+ * identity on their next `billedAgent` resolution. This is by design —
22
+ * usage rows contain full per-call attribution, so spend is
23
+ * always assignable even when it crosses a rotation boundary.
24
+ */
25
+ export declare function upsertAnalysis(pool: Querier, resourceId: string, context: string | null, billingContext: Record<string, string> | null, inputFileIds?: string[]): ResultAsync<void, DbError>;
26
+ export declare function loadAnalysisStatus(pool: Querier, resourceId: string): ResultAsync<{
27
+ status: string;
28
+ context: string | null;
29
+ } | null, DbError>;
30
+ /**
31
+ * Suspend an analysis due to a 402 `budget_exceeded` error.
32
+ * Idempotent — no-op if already suspended.
33
+ *
34
+ * The only cause of suspension today is budget exhaustion; no reason is
35
+ * persisted. If a second cause arises, add a column rather than a param so
36
+ * history is queryable.
37
+ */
38
+ export declare function suspendAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
39
+ /**
40
+ * Resume a suspended analysis after the user tops up.
41
+ * Only transitions from `suspended_insufficient_funds` → `active`.
42
+ */
43
+ export declare function resumeAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
44
+ /**
45
+ * Resolve the persisted billing context for an analysis.
46
+ *
47
+ * Single DB-read chokepoint used by `requireAnalysisBilling` middleware and
48
+ * by any downstream code that needs to re-read billing identity. The driver
49
+ * read is wrapped as a `DbError`; the missing-row / null-billing /
50
+ * unparseable-JSON cases are control-flow throws (a misconfiguration, not a
51
+ * driver failure) that short-circuit the chain and surface verbatim.
52
+ *
53
+ * User identity (`HEADERS.User`) is derived from the ambient credential's
54
+ * JWT `sub` claim by `credential-middleware`, not from the DB.
55
+ */
56
+ export declare function resolveAnalysisBilling(pool: Querier, analysisId: string): ResultAsync<{
57
+ billingContext: Record<string, string>;
58
+ }, DbError>;
@@ -0,0 +1,132 @@
1
+ /**
2
+ * `cortex_analysis_state` operations — analysis lifecycle and billing context.
3
+ */
4
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
5
+ /**
6
+ * Upsert a cortex_analysis_state row.
7
+ *
8
+ * The seed endpoint is called repeatedly; this function handles both the
9
+ * initial INSERT and subsequent UPDATEs by writing ALL mutable fields on
10
+ * every call. Re-upserts replace `context` and `billing_context` wholesale.
11
+ *
12
+ * User identity is derived from the ambient credential's JWT `sub` claim
13
+ * at request time — not persisted in this table.
14
+ *
15
+ * INTENTIONAL: split-attribution across a single run.
16
+ * If the seed re-upserts mid-workflow (e.g., the billing context's VK rotates),
17
+ * in-flight steps that have already issued LLM calls keep the old attribution
18
+ * on those calls, while subsequent steps in the same run pick up the new
19
+ * identity on their next `billedAgent` resolution. This is by design —
20
+ * usage rows contain full per-call attribution, so spend is
21
+ * always assignable even when it crosses a rotation boundary.
22
+ */
23
+ export function upsertAnalysis(pool, resourceId, context, billingContext, inputFileIds) {
24
+ const now = new Date().toISOString();
25
+ return tryMutation("analyses.upsertAnalysis", async () => {
26
+ await pool.query({
27
+ text: `INSERT INTO cortex_analysis_state
28
+ (analysis_id, status, context, billing_context, data_profile_status,
29
+ seed_input_file_ids, created_at, updated_at)
30
+ VALUES ($1, 'active', $2, $3::jsonb, 'pending', $4::jsonb, $5, $6)
31
+ ON CONFLICT (analysis_id) DO UPDATE SET
32
+ context = EXCLUDED.context,
33
+ billing_context = EXCLUDED.billing_context,
34
+ seed_input_file_ids = COALESCE(EXCLUDED.seed_input_file_ids, cortex_analysis_state.seed_input_file_ids),
35
+ updated_at = EXCLUDED.updated_at`,
36
+ values: [
37
+ resourceId,
38
+ context ?? null,
39
+ billingContext === null ? null : JSON.stringify(billingContext),
40
+ inputFileIds ? JSON.stringify(inputFileIds) : null,
41
+ now,
42
+ now,
43
+ ],
44
+ });
45
+ });
46
+ }
47
+ export function loadAnalysisStatus(pool, resourceId) {
48
+ return tryQuery("analyses.loadAnalysisStatus", async () => {
49
+ const result = await pool.query({
50
+ text: "SELECT status, context FROM cortex_analysis_state WHERE analysis_id = $1",
51
+ values: [resourceId],
52
+ });
53
+ const row = result.rows[0];
54
+ if (!row)
55
+ return null;
56
+ return { status: row.status, context: row.context ?? null };
57
+ });
58
+ }
59
+ /**
60
+ * Suspend an analysis due to a 402 `budget_exceeded` error.
61
+ * Idempotent — no-op if already suspended.
62
+ *
63
+ * The only cause of suspension today is budget exhaustion; no reason is
64
+ * persisted. If a second cause arises, add a column rather than a param so
65
+ * history is queryable.
66
+ */
67
+ export function suspendAnalysis(pool, analysisId) {
68
+ return tryMutation("analyses.suspendAnalysis", async () => {
69
+ await pool.query({
70
+ text: `UPDATE cortex_analysis_state
71
+ SET status = 'suspended_insufficient_funds', updated_at = $1
72
+ WHERE analysis_id = $2 AND status != 'suspended_insufficient_funds'`,
73
+ values: [new Date().toISOString(), analysisId],
74
+ });
75
+ });
76
+ }
77
+ /**
78
+ * Resume a suspended analysis after the user tops up.
79
+ * Only transitions from `suspended_insufficient_funds` → `active`.
80
+ */
81
+ export function resumeAnalysis(pool, analysisId) {
82
+ return tryMutation("analyses.resumeAnalysis", async () => {
83
+ await pool.query({
84
+ text: `UPDATE cortex_analysis_state
85
+ SET status = 'active', updated_at = $1
86
+ WHERE analysis_id = $2 AND status = 'suspended_insufficient_funds'`,
87
+ values: [new Date().toISOString(), analysisId],
88
+ });
89
+ });
90
+ }
91
+ /**
92
+ * Resolve the persisted billing context for an analysis.
93
+ *
94
+ * Single DB-read chokepoint used by `requireAnalysisBilling` middleware and
95
+ * by any downstream code that needs to re-read billing identity. The driver
96
+ * read is wrapped as a `DbError`; the missing-row / null-billing /
97
+ * unparseable-JSON cases are control-flow throws (a misconfiguration, not a
98
+ * driver failure) that short-circuit the chain and surface verbatim.
99
+ *
100
+ * User identity (`HEADERS.User`) is derived from the ambient credential's
101
+ * JWT `sub` claim by `credential-middleware`, not from the DB.
102
+ */
103
+ export function resolveAnalysisBilling(pool, analysisId) {
104
+ return tryQuery("analyses.resolveAnalysisBilling", () => pool.query({
105
+ text: "SELECT billing_context FROM cortex_analysis_state WHERE analysis_id = $1",
106
+ values: [analysisId],
107
+ })).map((result) => {
108
+ const row = result.rows[0];
109
+ if (!row) {
110
+ throw new Error(`resolveAnalysisBilling: no cortex_analysis_state row for analysisId=${analysisId}`);
111
+ }
112
+ const rawBilling = row.billing_context;
113
+ if (rawBilling === null || rawBilling === undefined) {
114
+ throw new Error(`resolveAnalysisBilling: billing_context missing for analysisId=${analysisId}`);
115
+ }
116
+ // JSONB is parsed by `pg` into native objects. Legacy TEXT rows (if any
117
+ // slipped through) arrive as strings — parse them.
118
+ let billingContext;
119
+ if (typeof rawBilling === "string") {
120
+ try {
121
+ billingContext = JSON.parse(rawBilling);
122
+ }
123
+ catch (err) {
124
+ throw new Error(`resolveAnalysisBilling: billing_context is not valid JSON for analysisId=${analysisId}: ${err instanceof Error ? err.message : err}`, { cause: err });
125
+ }
126
+ }
127
+ else {
128
+ billingContext = rawBilling;
129
+ }
130
+ return { billingContext };
131
+ });
132
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * `cortex_artifacts` operations — artifact upsert, lookup, and file-id
3
+ * reconciliation.
4
+ */
5
+ import type { Querier } from "./db.js";
6
+ import type { ArtifactRow } from "./schema.js";
7
+ export interface RegisterArtifactInput {
8
+ resourceId: string;
9
+ path: string;
10
+ hash: string;
11
+ size: number;
12
+ role: "input" | "step_output";
13
+ sourceStep?: string | null;
14
+ sourceRun?: string | null;
15
+ fileType?: string | null;
16
+ /**
17
+ * Upstream file identity. Set for `input` rows at materialization so
18
+ * provenance lineage can attribute data inputs by `fileId`; left null for
19
+ * `step_output` rows (their `file_id` is assigned after upload-sync).
20
+ */
21
+ fileId?: string | null;
22
+ }
23
+ export declare function upsertArtifact(pool: Querier, entry: RegisterArtifactInput): Promise<void>;
24
+ /**
25
+ * Batched upsert — writes entries in multi-row `INSERT ... VALUES` statements
26
+ * of at most {@link ROWS_PER_STATEMENT} rows. Callers range from per-step
27
+ * manifests (tens of files) to a data-profile's full staged-input manifest
28
+ * (unbounded — directory inputs can reach tens of thousands of files).
29
+ * Chunks run sequentially without a wrapping transaction: the upsert is
30
+ * idempotent per row (`ON CONFLICT ... DO UPDATE`), so a failure between
31
+ * chunks is healed by the caller's retry re-upserting the same manifest.
32
+ */
33
+ export declare function upsertArtifacts(pool: Querier, entries: RegisterArtifactInput[]): Promise<void>;
34
+ /** Result type for input artifact metadata lookups. */
35
+ export interface InputArtifactMeta {
36
+ path: string;
37
+ hash: string;
38
+ size: number;
39
+ fileId: string | null;
40
+ }
41
+ /**
42
+ * Query cortex_artifacts for input-role rows matching the given paths.
43
+ * Used at the registration boundary to resolve metadata for data-source inputs.
44
+ */
45
+ export declare function queryInputArtifacts(pool: Querier, analysisId: string, paths: string[]): Promise<InputArtifactMeta[]>;
46
+ export declare function queryUnsyncedStepArtifacts(pool: Querier, resourceId: string, runId: string, stepId: string): Promise<ArtifactRow[]>;
47
+ /** Count step-output artifacts produced by a run — for the run-completed card. */
48
+ export declare function countArtifactsForRun(pool: Querier, analysisId: string, runId: string): Promise<number>;
49
+ export declare function updateArtifactId(pool: Querier, resourceId: string, path: string, artifactId: string, fileType?: string | null): Promise<void>;
50
+ export declare function updateFileIds(pool: Querier, pairs: Array<{
51
+ artifactId: string;
52
+ fileId: string;
53
+ }>): Promise<void>;
@@ -0,0 +1,175 @@
1
+ /**
2
+ * `cortex_artifacts` operations — artifact upsert, lookup, and file-id
3
+ * reconciliation.
4
+ */
5
+ export async function upsertArtifact(pool, entry) {
6
+ const now = new Date().toISOString();
7
+ await pool.query({
8
+ text: `INSERT INTO cortex_artifacts
9
+ (analysis_id, path, hash, size, role, source_step, source_run, file_type, file_id, created_at)
10
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
11
+ ON CONFLICT (analysis_id, path) DO UPDATE SET
12
+ hash = EXCLUDED.hash,
13
+ size = EXCLUDED.size,
14
+ role = EXCLUDED.role,
15
+ source_step = EXCLUDED.source_step,
16
+ source_run = EXCLUDED.source_run,
17
+ file_type = COALESCE(EXCLUDED.file_type, cortex_artifacts.file_type),
18
+ file_id = COALESCE(EXCLUDED.file_id, cortex_artifacts.file_id)`,
19
+ values: [
20
+ entry.resourceId,
21
+ entry.path,
22
+ entry.hash,
23
+ entry.size,
24
+ entry.role,
25
+ entry.sourceStep ?? null,
26
+ entry.sourceRun ?? null,
27
+ entry.fileType ?? null,
28
+ entry.fileId ?? null,
29
+ now,
30
+ ],
31
+ });
32
+ }
33
+ const COLS_PER_ROW = 10;
34
+ /**
35
+ * Rows per INSERT statement. The Postgres extended protocol carries the Bind
36
+ * message's parameter count as an Int16, so a statement is capped at 65,535
37
+ * bind parameters — beyond that the count silently wraps and the server
38
+ * rejects with 08P01 ("bind message has N parameter formats but 0
39
+ * parameters"). 1,000 rows × 10 columns stays an order of magnitude under the
40
+ * cap while keeping round-trips negligible even for huge input manifests.
41
+ */
42
+ const ROWS_PER_STATEMENT = 1_000;
43
+ /**
44
+ * Batched upsert — writes entries in multi-row `INSERT ... VALUES` statements
45
+ * of at most {@link ROWS_PER_STATEMENT} rows. Callers range from per-step
46
+ * manifests (tens of files) to a data-profile's full staged-input manifest
47
+ * (unbounded — directory inputs can reach tens of thousands of files).
48
+ * Chunks run sequentially without a wrapping transaction: the upsert is
49
+ * idempotent per row (`ON CONFLICT ... DO UPDATE`), so a failure between
50
+ * chunks is healed by the caller's retry re-upserting the same manifest.
51
+ */
52
+ export async function upsertArtifacts(pool, entries) {
53
+ const now = new Date().toISOString();
54
+ for (let start = 0; start < entries.length; start += ROWS_PER_STATEMENT) {
55
+ const chunk = entries.slice(start, start + ROWS_PER_STATEMENT);
56
+ const placeholders = chunk
57
+ .map((_, i) => {
58
+ const base = i * COLS_PER_ROW;
59
+ return (`($${base + 1}, $${base + 2}, $${base + 3}, $${base + 4}, ` +
60
+ `$${base + 5}, $${base + 6}, $${base + 7}, $${base + 8}, $${base + 9}, $${base + 10})`);
61
+ })
62
+ .join(", ");
63
+ const values = chunk.flatMap((e) => [
64
+ e.resourceId,
65
+ e.path,
66
+ e.hash,
67
+ e.size,
68
+ e.role,
69
+ e.sourceStep ?? null,
70
+ e.sourceRun ?? null,
71
+ e.fileType ?? null,
72
+ e.fileId ?? null,
73
+ now,
74
+ ]);
75
+ await pool.query({
76
+ text: `INSERT INTO cortex_artifacts
77
+ (analysis_id, path, hash, size, role, source_step, source_run, file_type, file_id, created_at)
78
+ VALUES ${placeholders}
79
+ ON CONFLICT (analysis_id, path) DO UPDATE SET
80
+ hash = EXCLUDED.hash,
81
+ size = EXCLUDED.size,
82
+ role = EXCLUDED.role,
83
+ source_step = EXCLUDED.source_step,
84
+ source_run = EXCLUDED.source_run,
85
+ file_type = COALESCE(EXCLUDED.file_type, cortex_artifacts.file_type),
86
+ file_id = COALESCE(EXCLUDED.file_id, cortex_artifacts.file_id)`,
87
+ values,
88
+ });
89
+ }
90
+ }
91
+ /**
92
+ * Query cortex_artifacts for input-role rows matching the given paths.
93
+ * Used at the registration boundary to resolve metadata for data-source inputs.
94
+ */
95
+ export async function queryInputArtifacts(pool, analysisId, paths) {
96
+ if (paths.length === 0)
97
+ return [];
98
+ const result = await pool.query({
99
+ text: `SELECT path, hash, size, file_id
100
+ FROM cortex_artifacts
101
+ WHERE analysis_id = $1 AND role = 'input' AND path = ANY($2::text[])`,
102
+ values: [analysisId, paths],
103
+ });
104
+ return result.rows.map((r) => ({
105
+ path: r.path,
106
+ hash: r.hash,
107
+ size: Number(r.size),
108
+ fileId: r.file_id ?? null,
109
+ }));
110
+ }
111
+ export async function queryUnsyncedStepArtifacts(pool, resourceId, runId, stepId) {
112
+ const result = await pool.query({
113
+ text: `SELECT analysis_id, path, artifact_id, file_id, hash, size, role,
114
+ source_step, source_run, created_at, file_type
115
+ FROM cortex_artifacts
116
+ WHERE analysis_id = $1 AND source_run = $2 AND source_step = $3
117
+ AND artifact_id IS NOT NULL AND file_id IS NULL
118
+ AND role = 'step_output'
119
+ ORDER BY created_at`,
120
+ values: [resourceId, runId, stepId],
121
+ });
122
+ return result.rows.map(mapArtifactRow);
123
+ }
124
+ /** Count step-output artifacts produced by a run — for the run-completed card. */
125
+ export async function countArtifactsForRun(pool, analysisId, runId) {
126
+ const result = await pool.query({
127
+ text: `SELECT COUNT(*)::text AS n
128
+ FROM cortex_artifacts
129
+ WHERE analysis_id = $1 AND source_run = $2 AND role = 'step_output'`,
130
+ values: [analysisId, runId],
131
+ });
132
+ return Number(result.rows[0]?.n ?? 0);
133
+ }
134
+ export async function updateArtifactId(pool, resourceId, path, artifactId, fileType) {
135
+ await pool.query({
136
+ text: `UPDATE cortex_artifacts SET artifact_id = $1,
137
+ file_type = COALESCE($4, file_type)
138
+ WHERE analysis_id = $2 AND path = $3`,
139
+ values: [artifactId, resourceId, path, fileType ?? null],
140
+ });
141
+ }
142
+ export async function updateFileIds(pool, pairs) {
143
+ if (pairs.length === 0)
144
+ return;
145
+ const values = [];
146
+ const tuples = [];
147
+ for (let i = 0; i < pairs.length; i++) {
148
+ const base = i * 2;
149
+ tuples.push(`($${base + 1}::text, $${base + 2}::text)`);
150
+ values.push(pairs[i].artifactId, pairs[i].fileId);
151
+ }
152
+ await pool.query({
153
+ text: `UPDATE cortex_artifacts AS a
154
+ SET file_id = c.file_id
155
+ FROM (VALUES ${tuples.join(", ")}) AS c(artifact_id, file_id)
156
+ WHERE a.artifact_id = c.artifact_id`,
157
+ values,
158
+ });
159
+ }
160
+ function mapArtifactRow(row) {
161
+ return {
162
+ resourceId: row.analysis_id,
163
+ path: row.path,
164
+ artifactId: row.artifact_id ?? null,
165
+ fileId: row.file_id ?? null,
166
+ hash: row.hash,
167
+ size: Number(row.size),
168
+ role: row.role,
169
+ sourceStep: row.source_step ?? null,
170
+ sourceRun: row.source_run ?? null,
171
+ createdAt: row.created_at,
172
+ unrecoverableAt: row.unrecoverable_at ?? null,
173
+ fileType: row.file_type ?? null,
174
+ };
175
+ }