@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,101 @@
1
+ /**
2
+ * `executeTargetAssessment` — the parent DBOS workflow.
3
+ *
4
+ * Shape (every external interaction is a `DBOS.runStep` so a crashed
5
+ * workflow replays from the cache instead of repeating side effects):
6
+ *
7
+ * Phase 0 `phase0Resolve` — only step allowed to throw
8
+ * (terminates → `target-unresolved`)
9
+ * Phase 1 14 collectors in parallel — coverage-envelope failures
10
+ * Progress `emitProgress("deciding")`
11
+ * Phase 2 2 decisions in parallel — LLM calls, attempt-numbered
12
+ * Progress `emitProgress("fanning_out")`
13
+ * Phase 3 4 fan-out blocks in parallel — per-item HTTP, withHost semaphore
14
+ * Progress `emitProgress("assembling")`
15
+ * Phase 4 `phase4Assemble` — deterministic
16
+ * Progress `emitProgress("synthesizing")`
17
+ * Phase 5a 3 per-section syntheses in parallel
18
+ * Phase 5b `dossierRecommendation` sequential
19
+ * Phase 5c `phase5Persist` (pure)
20
+ * Terminal outermost try/finally:
21
+ * - normal: setDossier → status="completed"
22
+ * - phase0 throw: markFailed → "target-unresolved"
23
+ * - schema violation: markFailed → "schema-violation"
24
+ * - other throw: markFailed → "unexpected-throw"
25
+ * - 402 self-cancel: markAssessmentSuspended → "suspended_insufficient_funds"
26
+ * - operator cancel: markFailed → "operator-cancelled"
27
+ * - soft-deleted row: no-op
28
+ *
29
+ * Workflow ID convention: `workflowID === assessmentId`. TA is one-shot
30
+ * (re-runs create new rows), so the workflowID equals the assessmentId
31
+ * directly. No `:runId` suffix.
32
+ */
33
+ import type { Pool } from "pg";
34
+ import { z } from "zod";
35
+ import type { RunSession } from "../auth/types.js";
36
+ import type { RunAuthorizer } from "../execution/run-authorizer.js";
37
+ import type { AgentChat } from "../providers/types.js";
38
+ import { TargetAssessmentInputSchema } from "./target-assessment/schemas.js";
39
+ import { type ProgressPhase } from "./target-assessment/progress.js";
40
+ export declare const ExecuteTargetAssessmentInputSchema: z.ZodObject<{
41
+ assessmentId: z.ZodString;
42
+ target: z.ZodString;
43
+ goal: z.ZodOptional<z.ZodNullable<z.ZodString>>;
44
+ organizationId: z.ZodString;
45
+ requestedBy: z.ZodString;
46
+ billingContextId: z.ZodString;
47
+ }, z.core.$strip>;
48
+ type SerializedInput = z.infer<typeof ExecuteTargetAssessmentInputSchema>;
49
+ /**
50
+ * Workflow input includes the `runSession` minted at the trigger route.
51
+ * The schema is for the serialised wire shape (input persisted by DBOS);
52
+ * the `runSession` is added at the type level so the workflow body can
53
+ * read the run-authorization credential directly.
54
+ */
55
+ export type ExecuteTargetAssessmentInput = SerializedInput & {
56
+ readonly runSession: RunSession;
57
+ /**
58
+ * True when Cortex owns the run-authorization lifecycle and therefore must
59
+ * revoke it on the terminal path. Optional because a workflow persisted
60
+ * before this field existed (recovered across the deploy that added it)
61
+ * deserializes without it; the body defaults absent → true, matching the
62
+ * prior Cortex-owned behavior.
63
+ */
64
+ readonly ownsMandate?: boolean;
65
+ };
66
+ export interface ExecuteTargetAssessmentResult {
67
+ readonly assessmentId: string;
68
+ readonly status: "completed" | "failed" | "suspended_insufficient_funds" | "deleted";
69
+ readonly bytes: number;
70
+ }
71
+ export interface ExecuteTargetAssessmentDeps {
72
+ readonly pool: Pool;
73
+ /** Run-authorization seam — the terminal path revokes through `revoke`. */
74
+ readonly runAuthorizer: RunAuthorizer;
75
+ /** NCBI E-utilities key for the ClinVar / PubMed Phase-1 collectors. */
76
+ readonly ncbiApiKey?: string;
77
+ /**
78
+ * Chat provider — billing resolution is closure-wrapped via the TA
79
+ * resolver in `harness/billing/target-assessment-resolver.ts` (see §12
80
+ * registration). The session's `scope.kind === "target-assessment"`
81
+ * carries the `billingContextId` the resolver keys on.
82
+ */
83
+ readonly chatProvider: AgentChat;
84
+ /** Billing-gateway model for decision agents — typically `env.TARGET_ASSESSMENT_DECISION_MODEL`. */
85
+ readonly decisionModel: string;
86
+ /** Billing-gateway model for synthesis agents — typically `env.TARGET_ASSESSMENT_SYNTHESIS_MODEL`. */
87
+ readonly synthesisModel: string;
88
+ }
89
+ /**
90
+ * Register the executeTargetAssessment workflow with DBOS. Caller is
91
+ * responsible for setting `workflowID = assessmentId` via
92
+ * `DBOS.startWorkflow(_, { workflowID })`.
93
+ */
94
+ export declare function registerExecuteTargetAssessment(deps: ExecuteTargetAssessmentDeps): (input: ExecuteTargetAssessmentInput) => Promise<ExecuteTargetAssessmentResult>;
95
+ /**
96
+ * Body extracted so tests can drive it without registering a workflow
97
+ * (the DBOS calls inside still rely on a workflow context being present).
98
+ */
99
+ export declare function runExecuteTargetAssessmentBody(input: ExecuteTargetAssessmentInput, deps: ExecuteTargetAssessmentDeps): Promise<ExecuteTargetAssessmentResult>;
100
+ export { TargetAssessmentInputSchema };
101
+ export type { ProgressPhase };
@@ -0,0 +1,528 @@
1
+ /**
2
+ * `executeTargetAssessment` — the parent DBOS workflow.
3
+ *
4
+ * Shape (every external interaction is a `DBOS.runStep` so a crashed
5
+ * workflow replays from the cache instead of repeating side effects):
6
+ *
7
+ * Phase 0 `phase0Resolve` — only step allowed to throw
8
+ * (terminates → `target-unresolved`)
9
+ * Phase 1 14 collectors in parallel — coverage-envelope failures
10
+ * Progress `emitProgress("deciding")`
11
+ * Phase 2 2 decisions in parallel — LLM calls, attempt-numbered
12
+ * Progress `emitProgress("fanning_out")`
13
+ * Phase 3 4 fan-out blocks in parallel — per-item HTTP, withHost semaphore
14
+ * Progress `emitProgress("assembling")`
15
+ * Phase 4 `phase4Assemble` — deterministic
16
+ * Progress `emitProgress("synthesizing")`
17
+ * Phase 5a 3 per-section syntheses in parallel
18
+ * Phase 5b `dossierRecommendation` sequential
19
+ * Phase 5c `phase5Persist` (pure)
20
+ * Terminal outermost try/finally:
21
+ * - normal: setDossier → status="completed"
22
+ * - phase0 throw: markFailed → "target-unresolved"
23
+ * - schema violation: markFailed → "schema-violation"
24
+ * - other throw: markFailed → "unexpected-throw"
25
+ * - 402 self-cancel: markAssessmentSuspended → "suspended_insufficient_funds"
26
+ * - operator cancel: markFailed → "operator-cancelled"
27
+ * - soft-deleted row: no-op
28
+ *
29
+ * Workflow ID convention: `workflowID === assessmentId`. TA is one-shot
30
+ * (re-runs create new rows), so the workflowID equals the assessmentId
31
+ * directly. No `:runId` suffix.
32
+ */
33
+ import { DBOS } from "@dbos-inc/dbos-sdk";
34
+ import { z } from "zod";
35
+ import { forSubAgent } from "../auth/types.js";
36
+ import { unwrapOrThrow } from "../lib/result.js";
37
+ import { resolveTarget } from "../tools/lib/identifier-resolver.js";
38
+ import { TargetAssessmentInputSchema } from "./target-assessment/schemas.js";
39
+ import { getAssessment, markAssessmentSuspended, markFailed, setDossier } from "../state/target-assessments.js";
40
+ import { COLLECTOR_MANIFEST } from "./target-assessment/collectors/index.js";
41
+ import { drugsInClass, modulatorTriage } from "./target-assessment/decisions/index.js";
42
+ import { aesForOneClassDrug, aesForOneTrial, faersForOneModulator, polypharmForOneModulator, } from "./target-assessment/fanout/index.js";
43
+ import { fetchApprovalPrecedents, pickIndicationForPrecedents, renderApprovalPrecedents } from "./target-assessment/lib/approval-precedents.js";
44
+ import { readBudgetExceededMarker } from "./target-assessment/lib/llm-step.js";
45
+ import { recordTerminalReason } from "./target-assessment/metrics.js";
46
+ import { phase4Assemble } from "./target-assessment/phase4-assemble.js";
47
+ import { DossierDerivedInvariantError, DossierSchemaViolationError, phase5Persist } from "./target-assessment/phase5-persist.js";
48
+ import { emitProgress } from "./target-assessment/progress.js";
49
+ import { dossierRecommendation, liabilityBullets, safetyFlagsTrail, translationalCommentary, } from "./target-assessment/synthesis/index.js";
50
+ // ── Workflow input ───────────────────────────────────────────────────
51
+ export const ExecuteTargetAssessmentInputSchema = z.object({
52
+ assessmentId: z.string(),
53
+ target: z.string(),
54
+ goal: z.string().nullable().optional(),
55
+ organizationId: z.string(),
56
+ requestedBy: z.string(),
57
+ billingContextId: z.string(),
58
+ });
59
+ // ── Helpers ──────────────────────────────────────────────────────────
60
+ /**
61
+ * Derive a sub-agent session from the durable `RunSession`. Identity, scope,
62
+ * and the opaque `auth` capability come from the parent session — no synthetic
63
+ * envelopes.
64
+ */
65
+ function buildSession(input, agentId) {
66
+ return {
67
+ ...input.runSession,
68
+ provenance: { agentId, callPath: [agentId] },
69
+ };
70
+ }
71
+ /**
72
+ * Type guard: any phase result carrying `{kind: "budget-exceeded"}` means
73
+ * the LLM step wrapper has already self-cancelled the workflow. The body
74
+ * should propagate the sentinel up the call chain so no downstream
75
+ * coverage envelope is fabricated for it.
76
+ */
77
+ function isBudgetCancel(value) {
78
+ return typeof value === "object" && value !== null && "kind" in value && value.kind === "budget-exceeded";
79
+ }
80
+ function wrapCollectorThrow(err) {
81
+ return {
82
+ coverage: "queried_no_data",
83
+ error: { message: err instanceof Error ? err.message : String(err) },
84
+ };
85
+ }
86
+ /**
87
+ * Internal sentinel thrown by the workflow body when a 402 marker has
88
+ * been observed at a phase boundary — short-circuits the remaining
89
+ * phases and lands in the outermost catch, which sets `budgetExceeded`
90
+ * for the terminal dispatch.
91
+ */
92
+ class BudgetExceededSkip extends Error {
93
+ constructor() {
94
+ super("budget exceeded — skipping remaining phases");
95
+ this.name = "BudgetExceededSkip";
96
+ }
97
+ }
98
+ // ── Workflow registration ────────────────────────────────────────────
99
+ /**
100
+ * Register the executeTargetAssessment workflow with DBOS. Caller is
101
+ * responsible for setting `workflowID = assessmentId` via
102
+ * `DBOS.startWorkflow(_, { workflowID })`.
103
+ */
104
+ export function registerExecuteTargetAssessment(deps) {
105
+ return DBOS.registerWorkflow(async (input) => {
106
+ return runExecuteTargetAssessmentBody(input, deps);
107
+ }, { name: "executeTargetAssessment" });
108
+ }
109
+ /**
110
+ * Body extracted so tests can drive it without registering a workflow
111
+ * (the DBOS calls inside still rely on a workflow context being present).
112
+ */
113
+ export async function runExecuteTargetAssessmentBody(input, deps) {
114
+ // (§6.1) Outermost try/finally — every termination path dispatches the
115
+ // matching terminal handler. Phase 0 throws are caught here; every
116
+ // other phase wraps its body in coverage envelopes and does not throw.
117
+ // Budget-exceeded (billing-gateway 402) reaches here via `budgetExceeded` set
118
+ // when any LLM step returns the sentinel. The terminal block writes
119
+ // `status = "suspended_insufficient_funds"` via DBOS.runStep BEFORE
120
+ // materialising the cancel — the trailing `DBOS.cancelWorkflow` +
121
+ // `DBOS.runStep("self-cancel-budget-exceeded")` puts the workflow into
122
+ // CANCELLED status (the only state `DBOS.resumeWorkflow` replays).
123
+ // Ownership defaults to true for inputs persisted before the field existed
124
+ // (a workflow recovered across this deploy) — those were always Cortex-owned.
125
+ const authorization = {
126
+ runSession: input.runSession,
127
+ ownsMandate: input.ownsMandate ?? true, // oss-core-managed-ok
128
+ };
129
+ let phase0Error;
130
+ let schemaViolation;
131
+ let derivedViolation;
132
+ let unexpectedError;
133
+ let budgetExceeded = false;
134
+ let dossierForPersist;
135
+ let bytesForPersist = 0;
136
+ try {
137
+ // (§5.3, §6.3) Phase 0 — target resolution. The only legitimate throw
138
+ // site. On throw, the catch below records `phase0Error` and the
139
+ // terminal block dispatches `markFailed({kind: "target-unresolved"})`.
140
+ await emitProgress(deps.pool, input.assessmentId, "resolving");
141
+ const resolved = await DBOS.runStep(async () => {
142
+ const r = await resolveTarget(input.target);
143
+ return {
144
+ assessmentId: input.assessmentId,
145
+ goal: input.goal ?? null,
146
+ ...r,
147
+ };
148
+ }, { name: "ta-phase0-resolve" }).catch((err) => {
149
+ phase0Error = err;
150
+ throw err;
151
+ });
152
+ // (§5.4) Phase 1 — 14 collectors in parallel. Each is its own DBOS
153
+ // step; coverage failures cache as `queried_no_data` and replay
154
+ // returns the cached envelope. The per-collector run functions emit
155
+ // different bundle shapes; the union is widened to `unknown` here
156
+ // and `Phase1Bundle` is reconstructed by manifest key below.
157
+ await emitProgress(deps.pool, input.assessmentId, "collecting");
158
+ const manifest = COLLECTOR_MANIFEST;
159
+ const collectorCtx = { ncbiApiKey: deps.ncbiApiKey };
160
+ const collectorPairs = await Promise.all(manifest.map((entry) => DBOS.runStep(() => entry.run(resolved, collectorCtx), {
161
+ name: `ta-collector:${entry.id}`,
162
+ })
163
+ .catch((err) => wrapCollectorThrow(err))
164
+ .then((result) => [entry.id, result])));
165
+ const collectorById = Object.fromEntries(collectorPairs);
166
+ const phase1 = {
167
+ resolved,
168
+ collectors: {
169
+ opentargets: collectorById["opentargets"],
170
+ chemblModulators: collectorById["chembl-modulators"],
171
+ ctgov: collectorById["ctgov"],
172
+ faersByTarget: collectorById["faers-by-target"],
173
+ expressionHuman: collectorById["expression-human"],
174
+ expressionMultiSpecies: collectorById["expression-multi-species"],
175
+ clinvar: collectorById["clinvar"],
176
+ cbioportal: collectorById["cbioportal"],
177
+ impc: collectorById["impc"],
178
+ pubmedIndex: collectorById["pubmed-index"],
179
+ pathways: collectorById["pathways"],
180
+ stringPpi: collectorById["string-ppi"],
181
+ familyComplexes: collectorById["family-complexes"],
182
+ therapeuticPrograms: collectorById["therapeutic-programs"],
183
+ },
184
+ };
185
+ // (§5.5, §5.11) Phase 2 — decisions. Lazy billing resolution happens
186
+ // inside the chat provider's closure (TA-aware provider in §12). The
187
+ // session carries the `billingContextId` the provider reads from.
188
+ await emitProgress(deps.pool, input.assessmentId, "deciding");
189
+ const decisionSession = buildSession(input, "ta-decisions");
190
+ const [modulatorRes, drugsRes] = await Promise.all([
191
+ modulatorTriage(phase1, {
192
+ chatProvider: deps.chatProvider,
193
+ session: forSubAgent(decisionSession, "modulator-triage"),
194
+ model: deps.decisionModel,
195
+ attempt: 0,
196
+ }),
197
+ drugsInClass(phase1, {
198
+ chatProvider: deps.chatProvider,
199
+ session: forSubAgent(decisionSession, "drugs-in-class"),
200
+ model: deps.decisionModel,
201
+ attempt: 0,
202
+ }),
203
+ ]);
204
+ if (isBudgetCancel(modulatorRes) || isBudgetCancel(drugsRes)) {
205
+ // An LLM step already sent the budget-exceeded marker. Skip the
206
+ // remaining phases and fall through to the terminal block, which
207
+ // dispatches `markAssessmentSuspended` and materialises the cancel.
208
+ budgetExceeded = true;
209
+ throw new BudgetExceededSkip();
210
+ }
211
+ const phase2 = {
212
+ phase1,
213
+ decisions: {
214
+ modulatorTriage: modulatorRes,
215
+ failedTrialClassifier: {
216
+ coverage: "not_loaded",
217
+ reason: "deterministic in Phase 4 (classifyFailureReason)",
218
+ },
219
+ offTargetCurator: {
220
+ coverage: "not_loaded",
221
+ reason: "deterministic in Phase 4 (aggregateOffTargetPanel)",
222
+ },
223
+ drugsInClass: drugsRes,
224
+ },
225
+ };
226
+ // (§5.6) Phase 3 — fan-out blocks. Each block iterates items via
227
+ // Promise.all over DBOS.runStep; `withHost` semaphores inside each
228
+ // item function cap concurrency to 4 per host.
229
+ await emitProgress(deps.pool, input.assessmentId, "fanning_out");
230
+ const triage = phase2.decisions.modulatorTriage;
231
+ const triageShortlist = triage.coverage === "available"
232
+ ? triage.data.shortlist.map((m) => ({
233
+ moleculeChemblId: m.moleculeChemblId,
234
+ preferredName: m.preferredName,
235
+ maxPhase: m.maxPhase,
236
+ firstApproval: m.firstApproval,
237
+ rationale: m.rationale ?? "",
238
+ }))
239
+ : [];
240
+ const chembl = phase1.collectors.chemblModulators;
241
+ const primaryTargetChemblId = chembl.coverage === "available" ? chembl.data.targetChemblId : null;
242
+ const polypharmItems = triageShortlist.map((m) => ({
243
+ moleculeChemblId: m.moleculeChemblId,
244
+ preferredName: m.preferredName,
245
+ primaryTargetChemblId,
246
+ }));
247
+ const ctgov = phase1.collectors.ctgov;
248
+ const trialItems = [];
249
+ if (ctgov.coverage === "available") {
250
+ const seen = new Set();
251
+ for (const t of [...ctgov.data.failed, ...ctgov.data.active]) {
252
+ if (!t.nctId || seen.has(t.nctId))
253
+ continue;
254
+ seen.add(t.nctId);
255
+ trialItems.push({ nctId: t.nctId, title: t.title });
256
+ if (trialItems.length >= 30)
257
+ break;
258
+ }
259
+ }
260
+ const dic = phase2.decisions.drugsInClass;
261
+ const classDrugItems = dic.coverage === "available"
262
+ ? dic.data.drugs.map((d) => ({
263
+ moleculeChemblId: d.moleculeChemblId,
264
+ preferredName: d.preferredName,
265
+ maxPhase: d.maxPhase,
266
+ firstApproval: d.firstApproval,
267
+ }))
268
+ : [];
269
+ async function runFanoutBlock(items, stepKindForName, keyOf, fn) {
270
+ return Promise.all(items.map((item) => DBOS.runStep(() => fn(item), {
271
+ name: `ta-fanout:${stepKindForName}:${keyOf(item)}`,
272
+ }).catch((err) => wrapCollectorThrow(err))));
273
+ }
274
+ const [perModulatorFaersResults, perTrialAesResults, perModulatorPolypharmResults, perClassDrugAesResults] = await Promise.all([
275
+ runFanoutBlock(triageShortlist, "modulator-faers", (item) => item.moleculeChemblId, faersForOneModulator),
276
+ runFanoutBlock(trialItems, "trial-aes", (item) => item.nctId, aesForOneTrial),
277
+ runFanoutBlock(polypharmItems, "modulator-polypharm", (item) => item.moleculeChemblId, polypharmForOneModulator),
278
+ runFanoutBlock(classDrugItems, "class-drug-aes", (item) => item.moleculeChemblId, aesForOneClassDrug),
279
+ ]);
280
+ const phase3 = {
281
+ phase2,
282
+ fanout: {
283
+ perModulatorFaers: { results: perModulatorFaersResults },
284
+ perTrialAes: { results: perTrialAesResults },
285
+ perModulatorPolypharm: { results: perModulatorPolypharmResults },
286
+ perClassDrugAes: { results: perClassDrugAesResults },
287
+ },
288
+ };
289
+ // (§5.7) Phase 4 — deterministic assembly. Single DBOS step.
290
+ await emitProgress(deps.pool, input.assessmentId, "assembling");
291
+ const phase4 = await DBOS.runStep(() => phase4Assemble(deps.pool, phase3), { name: "ta-phase4-assemble" });
292
+ // (§5.8-pre) Approval-precedent grounding — one deterministic openFDA
293
+ // lookup, rendered to markdown and injected into every synthesis prompt.
294
+ // A precedent-lookup failure must NOT fail the whole assessment: a fetch
295
+ // throw degrades to a "no precedents" block.
296
+ const approvalPrecedents = await DBOS.runStep(async () => {
297
+ const indication = pickIndicationForPrecedents(phase4.dossier);
298
+ let result = null;
299
+ if (indication !== null) {
300
+ try {
301
+ result = await fetchApprovalPrecedents({ indication });
302
+ }
303
+ catch (err) {
304
+ console.warn(`[ta-approval-precedents] openFDA lookup failed for "${indication}": ${err instanceof Error ? err.message : err}`);
305
+ result = null;
306
+ }
307
+ }
308
+ return renderApprovalPrecedents(indication, result);
309
+ }, { name: "ta-approval-precedents" });
310
+ // (§5.8) Phase 5 — three per-section syntheses in parallel.
311
+ await emitProgress(deps.pool, input.assessmentId, "synthesizing");
312
+ const synthesisDeps = (agentId) => ({
313
+ chatProvider: deps.chatProvider,
314
+ session: { ...buildSession(input, agentId) },
315
+ model: deps.synthesisModel,
316
+ attempt: 0,
317
+ approvalPrecedents,
318
+ });
319
+ const [bulletsRes, flagsRes, commentaryRes] = await Promise.all([
320
+ liabilityBullets(phase4, synthesisDeps("liability-bullets")),
321
+ safetyFlagsTrail(phase4, synthesisDeps("safety-flags-trail")),
322
+ translationalCommentary(phase4, synthesisDeps("translational-commentary")),
323
+ ]);
324
+ if (isBudgetCancel(bulletsRes) || isBudgetCancel(flagsRes) || isBudgetCancel(commentaryRes)) {
325
+ budgetExceeded = true;
326
+ throw new BudgetExceededSkip();
327
+ }
328
+ // (§5.9) Phase 5b — sequential dossier-recommendation step.
329
+ const recommendationRes = await dossierRecommendation({
330
+ phase4,
331
+ perSection: {
332
+ liabilityBullets: bulletsRes,
333
+ safetyFlagsTrail: flagsRes,
334
+ translationalCommentary: commentaryRes,
335
+ },
336
+ }, synthesisDeps("dossier-recommendation"));
337
+ if (isBudgetCancel(recommendationRes)) {
338
+ budgetExceeded = true;
339
+ throw new BudgetExceededSkip();
340
+ }
341
+ // (§5.10) Phase 5c — pure persist function. The DB write moves to
342
+ // the terminal handler below; this step validates the v5 dossier
343
+ // and returns the persisted-shape bundle. Schema/derived violations
344
+ // throw and the terminal handler dispatches to `markFailed`.
345
+ const persisted = await DBOS.runStep(() => phase5Persist({
346
+ assessmentId: input.assessmentId,
347
+ phase4Dossier: phase4.dossier,
348
+ phase2,
349
+ synthesis: {
350
+ bullets: bulletsRes,
351
+ flags: flagsRes,
352
+ commentary: commentaryRes,
353
+ recommendation: recommendationRes,
354
+ },
355
+ }), { name: "ta-phase5-persist" });
356
+ dossierForPersist = persisted.dossier;
357
+ bytesForPersist = persisted.bytes;
358
+ }
359
+ catch (err) {
360
+ if (err instanceof BudgetExceededSkip) {
361
+ // Already classified; the terminal block reads `budgetExceeded`.
362
+ }
363
+ else if (err instanceof DossierSchemaViolationError) {
364
+ schemaViolation = err;
365
+ }
366
+ else if (err instanceof DossierDerivedInvariantError) {
367
+ derivedViolation = err;
368
+ }
369
+ else if (phase0Error === undefined) {
370
+ unexpectedError = err;
371
+ }
372
+ // phase0Error is already set if it came from the Phase-0 catch above.
373
+ }
374
+ // (§6.1, §6.8) Terminal block. Read the row first; if soft-deleted,
375
+ // no-op (the user's delete during the run wins).
376
+ const row = await DBOS.runStep(async () => unwrapOrThrow(await getAssessment(deps.pool, input.assessmentId, input.organizationId)), {
377
+ name: "ta-terminal-read-row",
378
+ });
379
+ if (row?.status === "deleted") {
380
+ recordTerminalReason("deleted");
381
+ return {
382
+ assessmentId: input.assessmentId,
383
+ status: "deleted",
384
+ bytes: 0,
385
+ };
386
+ }
387
+ // (§6.2) Normal completion — happy path wrote `dossierForPersist`.
388
+ if (!phase0Error && !schemaViolation && !derivedViolation && !unexpectedError && !budgetExceeded && dossierForPersist) {
389
+ try {
390
+ await DBOS.runStep(async () => unwrapOrThrow(await setDossier(deps.pool, input.assessmentId, dossierForPersist)), {
391
+ name: "ta-terminal-completed",
392
+ });
393
+ await emitProgress(deps.pool, input.assessmentId, "completed");
394
+ }
395
+ catch (err) {
396
+ console.error(`[ta-terminal] setDossier failed for ${input.assessmentId}: ${err instanceof Error ? err.message : err}`);
397
+ }
398
+ await revokeRunAuthorizationSafe(deps, authorization, "target-assessment-completed");
399
+ recordTerminalReason("completed");
400
+ return {
401
+ assessmentId: input.assessmentId,
402
+ status: "completed",
403
+ bytes: bytesForPersist,
404
+ };
405
+ }
406
+ // (§6.3) Phase 0 throw — target unresolved.
407
+ if (phase0Error) {
408
+ await DBOS.runStep(async () => unwrapOrThrow(await markFailed(deps.pool, input.assessmentId, {
409
+ kind: "target-unresolved",
410
+ message: phase0Error instanceof Error ? phase0Error.message : String(phase0Error),
411
+ })), { name: "ta-terminal-failed-resolve" });
412
+ await emitProgress(deps.pool, input.assessmentId, "failed");
413
+ await revokeRunAuthorizationSafe(deps, authorization, "target-assessment-failed");
414
+ recordTerminalReason("target-unresolved");
415
+ return {
416
+ assessmentId: input.assessmentId,
417
+ status: "failed",
418
+ bytes: 0,
419
+ };
420
+ }
421
+ // (§6.4) Schema violation.
422
+ if (schemaViolation) {
423
+ await DBOS.runStep(async () => unwrapOrThrow(await markFailed(deps.pool, input.assessmentId, {
424
+ kind: "schema-invariant-violation",
425
+ message: schemaViolation.message,
426
+ details: schemaViolation.issues,
427
+ })), { name: "ta-terminal-failed-schema" });
428
+ await emitProgress(deps.pool, input.assessmentId, "failed");
429
+ await revokeRunAuthorizationSafe(deps, authorization, "target-assessment-failed");
430
+ recordTerminalReason("schema-violation");
431
+ return {
432
+ assessmentId: input.assessmentId,
433
+ status: "failed",
434
+ bytes: bytesForPersist,
435
+ };
436
+ }
437
+ // (§6.4 — derived invariant variant — same terminal class, different kind.)
438
+ if (derivedViolation) {
439
+ await DBOS.runStep(async () => unwrapOrThrow(await markFailed(deps.pool, input.assessmentId, {
440
+ kind: "derived-invariant-violation",
441
+ message: derivedViolation.message,
442
+ })), { name: "ta-terminal-failed-derived" });
443
+ await emitProgress(deps.pool, input.assessmentId, "failed");
444
+ await revokeRunAuthorizationSafe(deps, authorization, "target-assessment-failed");
445
+ recordTerminalReason("derived-invariant-violation");
446
+ return {
447
+ assessmentId: input.assessmentId,
448
+ status: "failed",
449
+ bytes: bytesForPersist,
450
+ };
451
+ }
452
+ // (§6.6) Budget exceeded — drain the marker for telemetry, flip the
453
+ // row to `suspended_insufficient_funds`, then materialise the cancel.
454
+ // The trailing `DBOS.cancelWorkflow` + `DBOS.runStep` puts the
455
+ // workflow into CANCELLED status (the only state `DBOS.resumeWorkflow`
456
+ // will replay; SUCCESS / ERROR are terminal).
457
+ if (budgetExceeded) {
458
+ await DBOS.runStep(() => readBudgetExceededMarker(), {
459
+ name: "ta-terminal-drain-marker",
460
+ }).catch(() => null);
461
+ await DBOS.runStep(async () => unwrapOrThrow(await markAssessmentSuspended(deps.pool, input.assessmentId)), { name: "ta-terminal-suspended" });
462
+ await emitProgress(deps.pool, input.assessmentId, "suspended");
463
+ await revokeRunAuthorizationSafe(deps, authorization, "target-assessment-canceled");
464
+ const workflowId = DBOS.workflowID;
465
+ if (workflowId) {
466
+ await DBOS.cancelWorkflow(workflowId);
467
+ // Force one more durable hop so the cancel materialises before the
468
+ // body returns — without this trailing runStep the workflow would
469
+ // land SUCCESS in some DBOS versions because the body completed
470
+ // without re-entering the SDK after the cancel call.
471
+ await DBOS.runStep(async () => undefined, {
472
+ name: "ta-self-cancel-budget-exceeded",
473
+ });
474
+ }
475
+ recordTerminalReason("suspended-on-402");
476
+ return {
477
+ assessmentId: input.assessmentId,
478
+ status: "suspended_insufficient_funds",
479
+ bytes: 0,
480
+ };
481
+ }
482
+ // (§6.5) Unexpected throw — bug somewhere, coverage envelope failed.
483
+ if (unexpectedError) {
484
+ await DBOS.runStep(async () => unwrapOrThrow(await markFailed(deps.pool, input.assessmentId, {
485
+ kind: "unexpected-throw",
486
+ message: unexpectedError instanceof Error ? unexpectedError.message : String(unexpectedError),
487
+ })), { name: "ta-terminal-failed-unexpected" });
488
+ await emitProgress(deps.pool, input.assessmentId, "failed");
489
+ await revokeRunAuthorizationSafe(deps, authorization, "target-assessment-failed");
490
+ recordTerminalReason("unexpected-throw");
491
+ return {
492
+ assessmentId: input.assessmentId,
493
+ status: "failed",
494
+ bytes: 0,
495
+ };
496
+ }
497
+ // Defensive: this branch is unreachable in practice (one of the
498
+ // categories above must have fired). Fall through to a generic failed
499
+ // status so a buggy refactor surfaces visibly.
500
+ await DBOS.runStep(async () => unwrapOrThrow(await markFailed(deps.pool, input.assessmentId, {
501
+ kind: "unexpected-throw",
502
+ message: "terminal block reached without classified outcome",
503
+ })), { name: "ta-terminal-failed-uncategorized" });
504
+ recordTerminalReason("unexpected-throw");
505
+ return {
506
+ assessmentId: input.assessmentId,
507
+ status: "failed",
508
+ bytes: 0,
509
+ };
510
+ }
511
+ /**
512
+ * Best-effort revoke wrapped in a durableStep for replay idempotency. This
513
+ * wrapper swallows any runStep-level error so a terminal path is never
514
+ * aborted by a transient revoke failure.
515
+ */
516
+ async function revokeRunAuthorizationSafe(deps, authorization, reason) {
517
+ try {
518
+ await DBOS.runStep(() => deps.runAuthorizer.revoke(authorization, reason), {
519
+ name: `ta-revoke-run-auth:${reason}`,
520
+ });
521
+ }
522
+ catch (err) {
523
+ console.warn(`[execute-target-assessment] revokeRunAuthorization (${reason}) failed:`, err instanceof Error ? err.message : err);
524
+ }
525
+ }
526
+ // Re-export the canonical TA input schema (consumers and the managed root
527
+ // validate against this shape on the trigger route).
528
+ export { TargetAssessmentInputSchema };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Workflow-side OTel metrics → Middleware.io.
3
+ *
4
+ * Two signals so 3-hour runs and pause-resume cascades are observable:
5
+ * - cortex.workflow.parent.cancelled_children — counter, incremented once
6
+ * per child the fail-fast or pause cascade reaps. A baseline near 0
7
+ * means runs land cleanly; a spike means siblings keep colliding with
8
+ * a single failing step.
9
+ * - cortex.workflow.stream.bytes — counter, incremented by
10
+ * the byte count of every UI part written onto the DBOS stream. The
11
+ * leading indicator for 3-hour stream growth is monotonic — a runaway
12
+ * emitter shows up as an unbounded slope.
13
+ *
14
+ * Instruments are lazy so the workflow body binds to whichever
15
+ * `MeterProvider` is globally registered at startup.
16
+ */
17
+ /**
18
+ * Record one child cancellation. The parent calls this once per
19
+ * `DBOS.cancelWorkflow(childWorkflowId)` in the cascade (fail-fast OR
20
+ * pause). `cause` distinguishes the two so dashboards can split the
21
+ * counter.
22
+ */
23
+ export declare function recordCancelledChild(args: {
24
+ readonly cause: "fail_fast" | "budget_exceeded" | "external_cancel";
25
+ }): void;
26
+ /**
27
+ * Record one UI-part write. `bytes` is the serialised JSON size of the
28
+ * part as it lands on the stream; `kind` is the part `type` for
29
+ * dashboarding. The workflow body wraps its `DBOS.writeStream` call site
30
+ * so a single emitter records once per part.
31
+ */
32
+ export declare function recordStreamWrite(args: {
33
+ readonly bytes: number;
34
+ readonly kind: string;
35
+ }): void;
36
+ /** Test hook — drop memoised instruments to rebind a fresh MeterProvider. */
37
+ export declare function __resetWorkflowMetricsForTest(): void;