@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,43 @@
1
+ /**
2
+ * RunAuthorizer — the async-edge run-authorization seam.
3
+ *
4
+ * Every async edge that starts durable work (`execute_plan`, `run_ephemeral`,
5
+ * data-profile) must turn the caller's opaque auth into a durable `RunSession`
6
+ * before dispatching a workflow. That turning is the ONE place the credential
7
+ * kind matters (a live caller credential → mint a fresh run credential Cortex
8
+ * owns; an existing run credential → reuse it, caller-owned) — so it lives
9
+ * behind this seam, not in the harness tools. The managed impl owns the
10
+ * mint/reuse + revoke against the host authority; an OSS impl issues a local
11
+ * `RunSession` with no host call, no jti, no revoke. The harness's tools depend only on
12
+ * this interface and never read a credential.
13
+ *
14
+ * Mirrors the `PreviewPublisher` seam: a narrow interface in the harness, the managed
15
+ * realization injected at the composition root.
16
+ */
17
+ import type { AuthContext, Provenance, RunFrame, RunSession, Scope } from "../auth/types.js";
18
+ /** What an async edge knows when it authorizes a run: the opaque caller auth,
19
+ * the scope + provenance to stamp on the run, and the run frame to mint for. */
20
+ export interface AuthorizeRunInput {
21
+ readonly auth: AuthContext;
22
+ readonly scope: Scope;
23
+ readonly provenance: Provenance;
24
+ readonly frame: RunFrame;
25
+ }
26
+ export interface RunAuthorization {
27
+ readonly runSession: RunSession;
28
+ /**
29
+ * True when this authorizer minted the run credential and therefore owns its
30
+ * lifecycle — the run's terminal path must `revoke`. False when an existing
31
+ * run credential was reused (the caller owns it; `revoke` is a no-op).
32
+ */
33
+ readonly ownsMandate: boolean;
34
+ }
35
+ /**
36
+ * Authorize durable work at the async edge. `authorize` produces the durable
37
+ * `RunSession`; `revoke` releases a self-minted run credential on the terminal
38
+ * path (a no-op for reused or local authorizations).
39
+ */
40
+ export interface RunAuthorizer {
41
+ authorize(input: AuthorizeRunInput): Promise<RunAuthorization>;
42
+ revoke(authorization: RunAuthorization, reason: string): Promise<void>;
43
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * RunAuthorizer — the async-edge run-authorization seam.
3
+ *
4
+ * Every async edge that starts durable work (`execute_plan`, `run_ephemeral`,
5
+ * data-profile) must turn the caller's opaque auth into a durable `RunSession`
6
+ * before dispatching a workflow. That turning is the ONE place the credential
7
+ * kind matters (a live caller credential → mint a fresh run credential Cortex
8
+ * owns; an existing run credential → reuse it, caller-owned) — so it lives
9
+ * behind this seam, not in the harness tools. The managed impl owns the
10
+ * mint/reuse + revoke against the host authority; an OSS impl issues a local
11
+ * `RunSession` with no host call, no jti, no revoke. The harness's tools depend only on
12
+ * this interface and never read a credential.
13
+ *
14
+ * Mirrors the `PreviewPublisher` seam: a narrow interface in the harness, the managed
15
+ * realization injected at the composition root.
16
+ */
17
+ export {};
@@ -0,0 +1,36 @@
1
+ /**
2
+ * RunLauncher — the durability-engine launch seam.
3
+ *
4
+ * The async-edge tools (`execute_plan`, `run_ephemeral`) start durable runs but
5
+ * must not reach the durability engine directly — that engine is quarantined
6
+ * out of tools and the loop. This seam is the one capability they need: start a
7
+ * registered workflow under a caller-chosen id, either fire-and-forget or
8
+ * awaiting its result inline. `launchAndAwait` hides the engine's cancellation
9
+ * behind a discriminated outcome, so no engine error type leaks to callers.
10
+ *
11
+ * The workflow itself stays injected — it is the registered-workflow function
12
+ * reference, typed `(input) => Promise<result>`; the launcher only owns the
13
+ * start/await/cancel mechanics around it.
14
+ */
15
+ export interface LaunchOptions {
16
+ /** Caller-chosen durable workflow id (e.g. the runId). */
17
+ readonly workflowId: string;
18
+ }
19
+ export interface LaunchRunOptions {
20
+ /** Aborting cancels the in-flight run; wired internally by the launcher. */
21
+ readonly signal: AbortSignal;
22
+ }
23
+ /** Result of an awaited launch: the value on completion, or a cancelled
24
+ * sentinel that replaces the engine's cancellation error. */
25
+ export type LaunchOutcome<R> = {
26
+ readonly status: "completed";
27
+ readonly result: R;
28
+ } | {
29
+ readonly status: "cancelled";
30
+ };
31
+ export interface RunLauncher {
32
+ /** Fire-and-forget: resolves once the run is durably started. */
33
+ launch<I>(workflow: (input: I) => Promise<unknown>, opts: LaunchOptions, input: I): Promise<void>;
34
+ /** Start the run and await its result inline, wiring cancel-on-abort. */
35
+ launchAndAwait<I, R>(workflow: (input: I) => Promise<R>, opts: LaunchOptions, input: I, runOpts: LaunchRunOptions): Promise<LaunchOutcome<R>>;
36
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * RunLauncher — the durability-engine launch seam.
3
+ *
4
+ * The async-edge tools (`execute_plan`, `run_ephemeral`) start durable runs but
5
+ * must not reach the durability engine directly — that engine is quarantined
6
+ * out of tools and the loop. This seam is the one capability they need: start a
7
+ * registered workflow under a caller-chosen id, either fire-and-forget or
8
+ * awaiting its result inline. `launchAndAwait` hides the engine's cancellation
9
+ * behind a discriminated outcome, so no engine error type leaks to callers.
10
+ *
11
+ * The workflow itself stays injected — it is the registered-workflow function
12
+ * reference, typed `(input) => Promise<result>`; the launcher only owns the
13
+ * start/await/cancel mechanics around it.
14
+ */
15
+ export {};
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Run synthesizer — a single-shot agent loop driven through `runAgent`:
3
+ *
4
+ * - `submit_synthesis` — terminal: schema + semantic validation, captures
5
+ * the outcome. Re-callable on rejection.
6
+ * - `report_blocker` — terminal: the run produced nothing synthesizable.
7
+ * - `literature_reviewer` — research sub-agent exposed as a tool. The tool
8
+ * re-uses `createLiteratureReviewerTool`; the
9
+ * sub-agent loop's brief is the only context handed
10
+ * across the boundary (forSubAgent semantics).
11
+ *
12
+ * Two deliverables on a happy path: `synthesis.json` written to the run dir
13
+ * and a `data-run-synthesis` chat data part emitted via the `emit` callback
14
+ * the dep wrapper provides (the wrapper forwards events to the parent
15
+ * workflow's `"events"` stream).
16
+ *
17
+ * The dep wrapper handles failure semantics — if this function throws or
18
+ * resolves with `{ kind: "failed" }`, the wrapper emits a synthesis-progress
19
+ * `failed` part. We do not throw here for routine submitter rejections.
20
+ */
21
+ import { type RunSynthesis } from "../schemas/run-synthesis.js";
22
+ import type { StepSummary } from "../schemas/step-summary.js";
23
+ import type { ChatDataPart, EmitFn } from "../loop/types.js";
24
+ import type { ChatProvider } from "../providers/types.js";
25
+ import type { RunSession } from "../auth/types.js";
26
+ import { type Tool } from "../tools/define-tool.js";
27
+ import type { BioToolKeys } from "../tools/bio/keys.js";
28
+ type SynthesizerOutcome = {
29
+ kind: "submitted";
30
+ synthesis: RunSynthesis;
31
+ } | {
32
+ kind: "blocker";
33
+ reason: string;
34
+ };
35
+ interface OutcomeHolder {
36
+ outcome: SynthesizerOutcome | null;
37
+ }
38
+ /**
39
+ * Test-only — expose the inner-tool factory so unit tests can assert on
40
+ * validation + outcome capture without driving the whole agent loop.
41
+ */
42
+ export declare function __buildInnerToolsForTest(args: {
43
+ knownStepIds: ReadonlySet<string>;
44
+ runId: string;
45
+ }): {
46
+ submit: Tool;
47
+ blocker: Tool;
48
+ holder: OutcomeHolder;
49
+ };
50
+ export interface GenerateRunSynthesisInput {
51
+ readonly provider: ChatProvider;
52
+ readonly session: RunSession;
53
+ readonly model: string;
54
+ /** API keys for the bio/chem tools the embedded literature reviewer uses. */
55
+ readonly bioKeys: BioToolKeys;
56
+ /** Step summaries from the completed run. Non-empty. */
57
+ readonly summaries: readonly StepSummary[];
58
+ /** Plan analytical narrative for context. */
59
+ readonly planNarrative: string;
60
+ /** Run id — submitted synthesis must match. */
61
+ readonly runId: string;
62
+ /** Optional cancellation. */
63
+ readonly signal?: AbortSignal;
64
+ /** Optional UI event sink (chat data parts forwarded to the parent stream). */
65
+ readonly emit?: EmitFn;
66
+ }
67
+ export type GenerateRunSynthesisResult = {
68
+ kind: "synthesis";
69
+ synthesis: RunSynthesis;
70
+ } | {
71
+ kind: "skipped";
72
+ reason: string;
73
+ };
74
+ /**
75
+ * Drive the synthesizer agent loop to a terminal outcome — either a
76
+ * validated synthesis (`submit_synthesis`) or a blocker (`report_blocker`).
77
+ * Throws when neither terminal is reached (loop cap or external abort).
78
+ */
79
+ export declare function generateRunSynthesis(input: GenerateRunSynthesisInput): Promise<GenerateRunSynthesisResult>;
80
+ export interface LoadStepSummariesInput {
81
+ /** Absolute host root of the analysis's workspace tree. */
82
+ readonly workspaceRoot: string;
83
+ readonly runId: string;
84
+ readonly completedSteps: readonly string[];
85
+ readonly agentByStepId?: Readonly<Record<string, string>>;
86
+ }
87
+ /**
88
+ * Read each completed step's `output/summary.md`. Steps with missing or empty
89
+ * summaries are silently dropped — the caller decides what to do when the
90
+ * resulting array is empty.
91
+ */
92
+ export declare function loadStepSummariesFromDisk(args: LoadStepSummariesInput): Promise<StepSummary[]>;
93
+ export interface PersistSynthesisInput {
94
+ /** Absolute host root of the analysis's workspace tree. */
95
+ readonly workspaceRoot: string;
96
+ readonly runId: string;
97
+ readonly synthesis: RunSynthesis;
98
+ }
99
+ export declare function persistSynthesis(args: PersistSynthesisInput): Promise<string>;
100
+ export declare function formatSynthesisEmbeddingText(synthesis: RunSynthesis): string;
101
+ /**
102
+ * Build the `data-run-synthesis` chat part the parent stream emits when the
103
+ * synthesizer completes successfully. The schema mirrors the harness's contracts
104
+ * `RunSynthesisPart` interface — keep them in lockstep.
105
+ */
106
+ export declare function buildRunSynthesisPart(runId: string, synthesis: RunSynthesis): ChatDataPart;
107
+ export {};
@@ -0,0 +1,329 @@
1
+ /**
2
+ * Run synthesizer — a single-shot agent loop driven through `runAgent`:
3
+ *
4
+ * - `submit_synthesis` — terminal: schema + semantic validation, captures
5
+ * the outcome. Re-callable on rejection.
6
+ * - `report_blocker` — terminal: the run produced nothing synthesizable.
7
+ * - `literature_reviewer` — research sub-agent exposed as a tool. The tool
8
+ * re-uses `createLiteratureReviewerTool`; the
9
+ * sub-agent loop's brief is the only context handed
10
+ * across the boundary (forSubAgent semantics).
11
+ *
12
+ * Two deliverables on a happy path: `synthesis.json` written to the run dir
13
+ * and a `data-run-synthesis` chat data part emitted via the `emit` callback
14
+ * the dep wrapper provides (the wrapper forwards events to the parent
15
+ * workflow's `"events"` stream).
16
+ *
17
+ * The dep wrapper handles failure semantics — if this function throws or
18
+ * resolves with `{ kind: "failed" }`, the wrapper emits a synthesis-progress
19
+ * `failed` part. We do not throw here for routine submitter rejections.
20
+ */
21
+ import { readFile } from "node:fs/promises";
22
+ import { join } from "node:path";
23
+ import { ok } from "neverthrow";
24
+ import { z } from "zod";
25
+ import { writeFileWithinRoot } from "../lib/fs-helpers.js";
26
+ import { RunSynthesisSchema } from "../schemas/run-synthesis.js";
27
+ import { synthesisAgentPrompt } from "../prompts/synthesis-agent.js";
28
+ import { runDir } from "../workspace/paths.js";
29
+ import { runToTerminal } from "../loop/run-to-terminal.js";
30
+ import { passthroughStep } from "../loop/run-step.js";
31
+ import { defineTool } from "../tools/define-tool.js";
32
+ import { createLiteratureReviewerTool } from "../tools/research/literature-reviewer.js";
33
+ // ── Agent identity / budgets ────────────────────────────────────────
34
+ const AGENT_ID = "run-synthesizer";
35
+ /**
36
+ * Budget for the synthesizer loop: read summaries + 1–3 reviewer delegations
37
+ * + draft + 1–2 submit/fix cycles + headroom.
38
+ */
39
+ const SYNTHESIZER_MAX_ITERATIONS = 25;
40
+ // ── Validation ──────────────────────────────────────────────────────
41
+ function zodIssuesToValidationIssues(error, rootPath = "synthesis") {
42
+ return error.issues.map((i) => ({
43
+ path: [rootPath, ...i.path.map((p) => String(p))].join("."),
44
+ code: "schema",
45
+ message: i.message,
46
+ }));
47
+ }
48
+ function semanticCheck(synthesis, ctx) {
49
+ const issues = [];
50
+ if (synthesis.runId !== ctx.runId) {
51
+ issues.push({
52
+ path: "synthesis.runId",
53
+ code: "semantic",
54
+ message: `runId must be "${ctx.runId}"`,
55
+ });
56
+ }
57
+ for (const [i, f] of synthesis.findings.entries()) {
58
+ if (!ctx.knownStepIds.has(f.stepId)) {
59
+ issues.push({
60
+ path: `synthesis.findings[${i}].stepId`,
61
+ code: "semantic",
62
+ message: `stepId "${f.stepId}" is not in the input summaries`,
63
+ hint: `Known stepIds: ${Array.from(ctx.knownStepIds).join(", ")}`,
64
+ });
65
+ }
66
+ }
67
+ const findingKeys = new Set(synthesis.findings.map((f) => `${f.stepId}::${f.title}`));
68
+ for (const [ti, t] of synthesis.themes.entries()) {
69
+ for (const [fi, ref] of t.findings.entries()) {
70
+ if (!findingKeys.has(`${ref.stepId}::${ref.title}`)) {
71
+ issues.push({
72
+ path: `synthesis.themes[${ti}].findings[${fi}]`,
73
+ code: "semantic",
74
+ message: `theme reference (stepId="${ref.stepId}", title="${ref.title}") ` + `does not match any entry in findings[]`,
75
+ });
76
+ }
77
+ }
78
+ }
79
+ const citedPmids = new Set(synthesis.findings.flatMap((f) => f.references.map((r) => r.pmid)));
80
+ for (const [i, r] of synthesis.keyReferences.entries()) {
81
+ if (!citedPmids.has(r.pmid)) {
82
+ issues.push({
83
+ path: `synthesis.keyReferences[${i}].pmid`,
84
+ code: "semantic",
85
+ message: `keyReferences pmid "${r.pmid}" does not appear in any finding.references[]`,
86
+ hint: "Every keyReferences entry must already be cited by at least one finding.",
87
+ });
88
+ }
89
+ }
90
+ const pmidRe = /^\d+$/;
91
+ for (const [fi, f] of synthesis.findings.entries()) {
92
+ for (const [ri, r] of f.references.entries()) {
93
+ if (!pmidRe.test(r.pmid)) {
94
+ issues.push({
95
+ path: `synthesis.findings[${fi}].references[${ri}].pmid`,
96
+ code: "semantic",
97
+ message: `pmid "${r.pmid}" is not a valid numeric PMID`,
98
+ });
99
+ }
100
+ }
101
+ }
102
+ for (const [i, r] of synthesis.keyReferences.entries()) {
103
+ if (!pmidRe.test(r.pmid)) {
104
+ issues.push({
105
+ path: `synthesis.keyReferences[${i}].pmid`,
106
+ code: "semantic",
107
+ message: `pmid "${r.pmid}" is not a valid numeric PMID`,
108
+ });
109
+ }
110
+ }
111
+ return issues;
112
+ }
113
+ function fullyValidate(candidate, ctx) {
114
+ const parsed = RunSynthesisSchema.safeParse(candidate);
115
+ if (!parsed.success) {
116
+ return { valid: false, issues: zodIssuesToValidationIssues(parsed.error) };
117
+ }
118
+ const semanticIssues = semanticCheck(parsed.data, ctx);
119
+ if (semanticIssues.length > 0) {
120
+ return { valid: false, issues: semanticIssues };
121
+ }
122
+ return { valid: true, synthesis: parsed.data };
123
+ }
124
+ // ── Inner tools ─────────────────────────────────────────────────────
125
+ function buildSubmitTool(holder, ctx) {
126
+ return defineTool({
127
+ id: "submit_synthesis",
128
+ description: "Submit the final synthesis. Re-validates payload against the schema " +
129
+ "and semantic checks (stepId refs, theme→finding refs, keyReferences " +
130
+ "PMIDs cited, numeric PMIDs). On success returns {accepted: true} — " +
131
+ "STOP after this. On rejection returns {accepted: false, issues} — " +
132
+ "fix the specific fields at each issue path and call again, or switch " +
133
+ "to report_blocker if the synthesis cannot be made valid.",
134
+ inputSchema: z.object({ synthesis: z.unknown() }),
135
+ execute: async (input) => {
136
+ if (holder.outcome !== null) {
137
+ return ok({
138
+ accepted: false,
139
+ issues: [
140
+ {
141
+ path: "synthesis",
142
+ code: "semantic",
143
+ message: "A terminal outcome has already been recorded; submit_synthesis " + "can only be called once per invocation.",
144
+ },
145
+ ],
146
+ });
147
+ }
148
+ const result = fullyValidate(input.synthesis, ctx);
149
+ if (!result.valid) {
150
+ return ok({ accepted: false, issues: result.issues });
151
+ }
152
+ holder.outcome = { kind: "submitted", synthesis: result.synthesis };
153
+ return ok({ accepted: true });
154
+ },
155
+ });
156
+ }
157
+ function buildBlockerTool(holder) {
158
+ return defineTool({
159
+ id: "report_blocker",
160
+ description: "Terminal. Use when the run produced no synthesizable content (all " +
161
+ "summaries empty, contradictory to the point of incoherence, or no " +
162
+ "findings worth surfacing). Pass a short reason. Stop after calling.",
163
+ inputSchema: z.object({ reason: z.string().min(1) }),
164
+ execute: async (input) => {
165
+ if (holder.outcome === null) {
166
+ holder.outcome = { kind: "blocker", reason: input.reason };
167
+ }
168
+ return ok({ recorded: true });
169
+ },
170
+ });
171
+ }
172
+ /**
173
+ * Test-only — expose the inner-tool factory so unit tests can assert on
174
+ * validation + outcome capture without driving the whole agent loop.
175
+ */
176
+ export function __buildInnerToolsForTest(args) {
177
+ const holder = { outcome: null };
178
+ const ctx = {
179
+ knownStepIds: args.knownStepIds,
180
+ runId: args.runId,
181
+ };
182
+ return {
183
+ submit: buildSubmitTool(holder, ctx),
184
+ blocker: buildBlockerTool(holder),
185
+ holder,
186
+ };
187
+ }
188
+ /**
189
+ * Drive the synthesizer agent loop to a terminal outcome — either a
190
+ * validated synthesis (`submit_synthesis`) or a blocker (`report_blocker`).
191
+ * Throws when neither terminal is reached (loop cap or external abort).
192
+ */
193
+ export async function generateRunSynthesis(input) {
194
+ if (input.summaries.length === 0) {
195
+ throw new Error("Run synthesis: no step summaries to synthesize");
196
+ }
197
+ const knownStepIds = new Set(input.summaries.map((s) => s.stepId));
198
+ const holder = { outcome: null };
199
+ const innerCtx = { knownStepIds, runId: input.runId };
200
+ const reviewer = createLiteratureReviewerTool({
201
+ provider: input.provider,
202
+ model: input.model,
203
+ bioKeys: input.bioKeys,
204
+ });
205
+ const submitTool = buildSubmitTool(holder, innerCtx);
206
+ const blockerTool = buildBlockerTool(holder);
207
+ const tools = [submitTool, blockerTool, reviewer];
208
+ const agent = {
209
+ id: AGENT_ID,
210
+ systemPrompt: synthesisAgentPrompt,
211
+ model: input.model,
212
+ tools,
213
+ maxIterations: SYNTHESIZER_MAX_ITERATIONS,
214
+ };
215
+ const prompt = buildSynthesizerPrompt(input.planNarrative, input.summaries, input.runId);
216
+ const signal = input.signal ?? new AbortController().signal;
217
+ const emit = input.emit ?? (() => { });
218
+ const loopDeps = {
219
+ provider: input.provider,
220
+ signal,
221
+ emit,
222
+ runStep: passthroughStep,
223
+ };
224
+ await runToTerminal(agent, [{ role: "user", content: prompt }], input.session, loopDeps, {
225
+ resolved: () => holder.outcome !== null,
226
+ tools: [submitTool, blockerTool],
227
+ nudge: "You ended without calling a terminal tool. You MUST call " +
228
+ "submit_synthesis with the final synthesis now, or report_blocker " +
229
+ "if the run produced nothing synthesizable. Do not reply with prose.",
230
+ });
231
+ const outcome = holder.outcome;
232
+ if (outcome?.kind === "submitted") {
233
+ return { kind: "synthesis", synthesis: outcome.synthesis };
234
+ }
235
+ if (outcome?.kind === "blocker") {
236
+ return { kind: "skipped", reason: outcome.reason };
237
+ }
238
+ if (signal.aborted) {
239
+ throw new Error("Run synthesis was cancelled.");
240
+ }
241
+ throw new Error("Run synthesis completed without a terminal tool call — the synthesizer " + "did not call submit_synthesis or report_blocker.");
242
+ }
243
+ /**
244
+ * Read each completed step's `output/summary.md`. Steps with missing or empty
245
+ * summaries are silently dropped — the caller decides what to do when the
246
+ * resulting array is empty.
247
+ */
248
+ export async function loadStepSummariesFromDisk(args) {
249
+ const out = [];
250
+ for (const stepId of args.completedSteps) {
251
+ const path = join(args.workspaceRoot, "runs", args.runId, stepId, "output", "summary.md");
252
+ try {
253
+ const markdown = await readFile(path, "utf8");
254
+ if (markdown.trim().length === 0)
255
+ continue;
256
+ out.push({
257
+ stepId,
258
+ agentId: args.agentByStepId?.[stepId] ?? "scientific-executor",
259
+ markdown,
260
+ });
261
+ }
262
+ catch {
263
+ // Missing summary — skip silently. Steps that produced no summary do
264
+ // not contribute to synthesis.
265
+ }
266
+ }
267
+ return out;
268
+ }
269
+ export async function persistSynthesis(args) {
270
+ // Confine to the run directory, not the whole workspace: synthesis.json sits
271
+ // at runs/{runId}/, above any step's RW mount and never in the hard-linked
272
+ // `data/` inputs.
273
+ const runRoot = join(args.workspaceRoot, runDir(args.runId));
274
+ const path = join(runRoot, "synthesis.json");
275
+ await writeFileWithinRoot(runRoot, path, JSON.stringify(args.synthesis, null, 2));
276
+ return path;
277
+ }
278
+ // ── Embedding text ──────────────────────────────────────────────────
279
+ export function formatSynthesisEmbeddingText(synthesis) {
280
+ return [
281
+ "# Overview",
282
+ synthesis.overview,
283
+ "",
284
+ "# Conclusions",
285
+ synthesis.conclusions,
286
+ "",
287
+ "# Key Findings",
288
+ ...synthesis.findings.flatMap((f) => [
289
+ `## ${f.title} [${f.noveltyStatus}]`,
290
+ f.description,
291
+ f.literatureInterpretation,
292
+ ...(f.references.length > 0 ? f.references.map((r) => `- [PMID:${r.pmid}] ${r.citation} (${r.concordance})`) : []),
293
+ "",
294
+ ]),
295
+ "# Themes",
296
+ ...synthesis.themes.flatMap((t) => [`## ${t.name}`, t.narrative, ""]),
297
+ "# Limitations",
298
+ ...synthesis.limitations.map((l) => `- ${l}`),
299
+ "",
300
+ "# Key References",
301
+ ...synthesis.keyReferences.map((r) => `- [PMID:${r.pmid}] ${r.citation} — ${r.description}`),
302
+ ].join("\n");
303
+ }
304
+ // ── Prompt builder ──────────────────────────────────────────────────
305
+ function buildSynthesizerPrompt(planNarrative, summaries, runId) {
306
+ const summaryBlock = summaries.map((s) => `### ${s.stepId} (${s.agentId})\n\n${s.markdown}`).join("\n\n---\n\n");
307
+ return [`runId: "${runId}"`, "", "## Analytical Narrative", planNarrative, "", "## Step Summaries", summaryBlock].join("\n");
308
+ }
309
+ // ── Chat data part builders ─────────────────────────────────────────
310
+ /**
311
+ * Build the `data-run-synthesis` chat part the parent stream emits when the
312
+ * synthesizer completes successfully. The schema mirrors the harness's contracts
313
+ * `RunSynthesisPart` interface — keep them in lockstep.
314
+ */
315
+ export function buildRunSynthesisPart(runId, synthesis) {
316
+ return {
317
+ type: "data-run-synthesis",
318
+ data: {
319
+ id: `synthesis-${runId}`,
320
+ runId,
321
+ overview: synthesis.overview,
322
+ conclusions: synthesis.conclusions,
323
+ findings: synthesis.findings,
324
+ themes: synthesis.themes,
325
+ limitations: synthesis.limitations,
326
+ keyReferences: synthesis.keyReferences,
327
+ },
328
+ };
329
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Staged-input manifest contract.
3
+ *
4
+ * The harness's durable workflows assume an analysis's input tree is already populated
5
+ * under `data/inputs/` (see the data-profile-init spec) — they never download or copy input data, and
6
+ * never call a staging step. The embedder stages the tree at the async edge,
7
+ * once, BEFORE invoking the harness: the managed service downloads from object storage;
8
+ * the CLI copies/links the user's local files. The embedder hands the resulting
9
+ * manifest to the data-profile trigger, which rides it in the workflow input.
10
+ *
11
+ * This file declares only the manifest element — the data shape the harness consumes.
12
+ * The act of producing it (download / copy) lives entirely caller-side; the harness
13
+ * holds no staging seam.
14
+ */
15
+ /**
16
+ * One input file present under the analysis data dir, with its content hash.
17
+ * `fileId`/`mountName`/`key`/`fileName` are source identifiers the managed
18
+ * service derives from its object-store index and the CLI synthesizes from the
19
+ * local path — the harness treats them as opaque labels.
20
+ */
21
+ export interface StagedInput {
22
+ readonly fileId: string;
23
+ readonly mountName: string;
24
+ readonly key: string;
25
+ readonly fileName: string;
26
+ readonly hash: string;
27
+ readonly size: number;
28
+ /**
29
+ * Last-modification time in epoch milliseconds. With `size` and `fileId` it forms
30
+ * the file's drift signature — the value a consumer compares against a completed
31
+ * profile's `inputFiles` to decide whether the same bytes were profiled, since a
32
+ * `fileId` is a path identity and survives an in-place content edit unchanged.
33
+ *
34
+ * Embedder-supplied and opaque: the CLI reads it from the same `stat` that yields
35
+ * `size`; a managed service supplies its object store's last-modified epoch. The
36
+ * harness persists it verbatim and never stats a source file.
37
+ */
38
+ readonly mtimeMs: number;
39
+ /** Path relative to the data dir, e.g. "inputs/{mountName}/{key}". */
40
+ readonly relativePath: string;
41
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Staged-input manifest contract.
3
+ *
4
+ * The harness's durable workflows assume an analysis's input tree is already populated
5
+ * under `data/inputs/` (see the data-profile-init spec) — they never download or copy input data, and
6
+ * never call a staging step. The embedder stages the tree at the async edge,
7
+ * once, BEFORE invoking the harness: the managed service downloads from object storage;
8
+ * the CLI copies/links the user's local files. The embedder hands the resulting
9
+ * manifest to the data-profile trigger, which rides it in the workflow input.
10
+ *
11
+ * This file declares only the manifest element — the data shape the harness consumes.
12
+ * The act of producing it (download / copy) lives entirely caller-side; the harness
13
+ * holds no staging seam.
14
+ */
15
+ export {};
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Step-summary OTel metrics — Middleware.io routing follows the global
3
+ * meter provider (see `harness/lib/otel.ts`).
4
+ *
5
+ * cortex.summary.null_count — counter, incremented when a step-summary
6
+ * turn returns empty markdown or its provider call throws. Tagged with
7
+ * `agent_id` and a `reason` discriminator (`"empty" | "throw"`) so
8
+ * weekly review can split mode of failure.
9
+ */
10
+ export declare function incrementSummaryNullCount(agentId: string, reason: "empty" | "throw"): void;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Step-summary OTel metrics — Middleware.io routing follows the global
3
+ * meter provider (see `harness/lib/otel.ts`).
4
+ *
5
+ * cortex.summary.null_count — counter, incremented when a step-summary
6
+ * turn returns empty markdown or its provider call throws. Tagged with
7
+ * `agent_id` and a `reason` discriminator (`"empty" | "throw"`) so
8
+ * weekly review can split mode of failure.
9
+ */
10
+ import { metrics } from "@opentelemetry/api";
11
+ let counter;
12
+ function getCounter() {
13
+ if (counter === undefined) {
14
+ counter = metrics.getMeter("cortex.harness.execution").createCounter("cortex.summary.null_count", {
15
+ description: "Step-summary turns that returned empty markdown or threw.",
16
+ });
17
+ }
18
+ return counter;
19
+ }
20
+ export function incrementSummaryNullCount(agentId, reason) {
21
+ getCounter().add(1, { agent_id: agentId, reason });
22
+ }