@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,65 @@
1
+ /**
2
+ * Post-step helper — disk-walk of a step's writable artifact directory.
3
+ *
4
+ * The step's runtime input/script lineage rides on the step-scoped
5
+ * `ProvenanceCollector` the sandbox-step body threads through
6
+ * `PostStepContext` (fed per-exec during the agent loop). This module only
7
+ * owns the manifest source: walking the writable step dir and hashing each
8
+ * file from disk.
9
+ */
10
+ import { readdir, stat as fsStat } from "node:fs/promises";
11
+ import { join, relative } from "node:path";
12
+ import { inferArtifactType } from "../schemas/artifact-manifest.js";
13
+ import { computeSha256File } from "../lib/fs-helpers.js";
14
+ import { IGNORED_DIRS } from "../sandbox/ignored-dirs.js";
15
+ /**
16
+ * Walk a step's writable artifact directory and produce a fully-hashed
17
+ * `ArtifactManifestEntry[]`. Skips IGNORED_DIRS. Paths are relative to
18
+ * `writePrefix`.
19
+ */
20
+ export async function walkStepArtifacts(args) {
21
+ const { writePrefix, stepId, runId } = args;
22
+ const out = [];
23
+ async function walk(dir) {
24
+ let entries;
25
+ try {
26
+ entries = await readdir(dir, { withFileTypes: true });
27
+ }
28
+ catch (err) {
29
+ const code = err.code;
30
+ if (code === "ENOENT")
31
+ return;
32
+ throw err;
33
+ }
34
+ for (const entry of entries) {
35
+ const full = join(dir, entry.name);
36
+ if (entry.isDirectory()) {
37
+ if (IGNORED_DIRS.has(entry.name))
38
+ continue;
39
+ await walk(full);
40
+ continue;
41
+ }
42
+ if (!entry.isFile())
43
+ continue;
44
+ const relPath = relative(writePrefix, full);
45
+ let info;
46
+ try {
47
+ info = await fsStat(full);
48
+ }
49
+ catch {
50
+ continue;
51
+ }
52
+ const hash = await computeSha256File(full);
53
+ out.push({
54
+ stepId,
55
+ runId,
56
+ path: relPath,
57
+ size: info.size,
58
+ type: inferArtifactType(relPath),
59
+ hash,
60
+ });
61
+ }
62
+ }
63
+ await walk(writePrefix);
64
+ return out;
65
+ }
@@ -0,0 +1,25 @@
1
+ import type { ArtifactManifestEntry } from "../schemas/artifact-manifest.js";
2
+ import type { ProvenanceCollector } from "../provenance/collector.js";
3
+ export interface ReconcileManifestInput {
4
+ /** Absolute host root of the analysis's workspace tree. */
5
+ workspaceRoot: string;
6
+ /** Analysis (resource) ID. */
7
+ resourceId: string;
8
+ /** Run ID owning this step. */
9
+ runId: string;
10
+ /** Step ID — the writable mount segment for this step's artifacts. */
11
+ stepId: string;
12
+ /** Agent ID — used for metric tagging only. */
13
+ agentId: string;
14
+ /** Draft manifest from `buildManifestFromCollector`. */
15
+ manifest: ArtifactManifestEntry[];
16
+ /** Collector backing the manifest; mutated to reflect drops/rehashes. */
17
+ collector: ProvenanceCollector;
18
+ }
19
+ export interface ReconcileManifestResult {
20
+ /** Reconciled manifest — phantoms removed, every entry rehashed from disk. */
21
+ manifest: ArtifactManifestEntry[];
22
+ /** Number of entries dropped because their file was missing. */
23
+ droppedCount: number;
24
+ }
25
+ export declare function reconcileManifestWithDisk(input: ReconcileManifestInput): Promise<ReconcileManifestResult>;
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Reconcile a step's artifact manifest against the on-disk workspace tree.
3
+ *
4
+ * Runs after the sandbox is destroyed and before any artifact is synced to
5
+ * permanent storage. Two responsibilities:
6
+ *
7
+ * 1. Drop phantom entries — `ProvenanceCollector` records writes but not
8
+ * deletions, so an agent that writes-then-deletes (or a sandbox-side
9
+ * `rm`/`mv`) leaves entries pointing at files that no longer exist.
10
+ * Phantoms are dropped from the manifest and removed from the
11
+ * collector so the structured registration payload agrees.
12
+ *
13
+ * 2. Hash + size every surviving entry from disk. The exec frame that
14
+ * `feedExecFrame` folds in reports write paths without a content hash,
15
+ * and any hash taken at frame time would be racy with respect to what
16
+ * the file becomes by the time it's registered (long-running scripts
17
+ * flush after the frame fires; atomic-rename patterns swap content
18
+ * under a stable byte count). Hashing here makes
19
+ * `study.artifacts.hash` equal `sha256sum` of the bytes the sync target
20
+ * will receive at upload time — the equivalence `SyncConfirm` checks.
21
+ */
22
+ import { stat } from "node:fs/promises";
23
+ import path from "node:path";
24
+ import { computeSha256File, hasValidContentHash } from "../lib/fs-helpers.js";
25
+ import { artifactReconcileDropped } from "../lib/metrics.js";
26
+ export async function reconcileManifestWithDisk(input) {
27
+ const { workspaceRoot, resourceId, runId, stepId, agentId, manifest, collector } = input;
28
+ const stepRoot = path.join(workspaceRoot, "runs", runId, stepId);
29
+ const reconciled = [];
30
+ let droppedCount = 0;
31
+ for (const entry of manifest) {
32
+ const absPath = path.join(stepRoot, entry.path);
33
+ // Bounds check: an entry.path containing `..` segments resolves
34
+ // outside stepRoot (e.g. `../../etc/passwd` → `/etc/passwd`). Without
35
+ // this guard a stat outside the step's writable mount could either
36
+ // ENOENT and silently drop a real artifact, or — worse — succeed
37
+ // against a host file the step never produced.
38
+ if (!absPath.startsWith(stepRoot + path.sep) && absPath !== stepRoot) {
39
+ console.warn(`[reconcile-manifest] skipping out-of-bounds path=${entry.path} stepId=${stepId} runId=${runId}`);
40
+ continue;
41
+ }
42
+ let info;
43
+ try {
44
+ info = await stat(absPath);
45
+ }
46
+ catch (err) {
47
+ if (err.code === "ENOENT") {
48
+ console.debug(`[reconcile-manifest] dropping phantom path=${entry.path} stepId=${stepId} runId=${runId}`);
49
+ collector.removeRecord(entry.path);
50
+ droppedCount++;
51
+ artifactReconcileDropped.add(1, { agent_id: agentId, step_id: stepId });
52
+ continue;
53
+ }
54
+ throw err;
55
+ }
56
+ // Drop directories — they can slip in via tracer frames that don't
57
+ // distinguish file vs directory writes (e.g. `mkdir`). `computeSha256File`
58
+ // uses `createReadStream`, which throws `EISDIR` on directories and would
59
+ // fail the whole step's reconciliation.
60
+ if (!info.isFile()) {
61
+ console.debug(`[reconcile-manifest] dropping non-file path=${entry.path} stepId=${stepId} runId=${runId}`);
62
+ collector.removeRecord(entry.path);
63
+ droppedCount++;
64
+ artifactReconcileDropped.add(1, { agent_id: agentId, step_id: stepId });
65
+ continue;
66
+ }
67
+ // The registration payload reads output hashes from `entries` (this
68
+ // returned manifest), not from the collector — the managed registration
69
+ // adapter builds the structured payload from it. So we
70
+ // don't need to mirror the rehash back into the collector; the
71
+ // collector's outputHash for an output path goes unread after this.
72
+ const hash = await computeSha256File(absPath);
73
+ reconciled.push({ ...entry, hash, size: info.size });
74
+ }
75
+ await fillInputHashesFromDisk(collector, workspaceRoot, resourceId, runId, stepId);
76
+ return { manifest: reconciled, droppedCount };
77
+ }
78
+ /**
79
+ * Content-attest the step's inputs (see the artifact-manifest spec). The path-only provenance frame
80
+ * gives every input ref an empty hash; inputs are immutable for the step (the
81
+ * analysis tree is mounted read-only, the step writes only under its own
82
+ * `runs/{runId}/{stepId}`), so a hash from disk now equals the bytes the script
83
+ * read. Mutates the live refs in place — they are shared with the records the
84
+ * registration payload reads.
85
+ *
86
+ * `artifacts`-source reads are the step's OWN files (mutating, dropped by the
87
+ * registration translator), so they are not attested and not hashed here.
88
+ * Lineage attestation is fail-fast: an input we cannot hash (gone, or resolving
89
+ * outside the analysis tree) throws rather than registering a hashless edge.
90
+ */
91
+ async function fillInputHashesFromDisk(collector, workspaceRoot, resourceId, runId, stepId) {
92
+ const resourceRoot = path.resolve(workspaceRoot);
93
+ for (const ref of collector.getTrackedInputs()) {
94
+ if (ref.source === "artifacts")
95
+ continue;
96
+ if (hasValidContentHash(ref.hash))
97
+ continue;
98
+ // `ref.path` is the absolute container path `/{resourceId}/...`; strip the
99
+ // mount segment and map the tail onto the host workspace root. `path.join`
100
+ // normalizes any `..`, and the bound confines the read to the analysis tree.
101
+ const containerPrefix = `/${resourceId}`;
102
+ if (ref.path !== containerPrefix && !ref.path.startsWith(containerPrefix + "/")) {
103
+ throw new Error(`[reconcile-manifest] input read resolves outside the analysis tree: path=${ref.path} stepId=${stepId} runId=${runId}`);
104
+ }
105
+ const hostPath = path.join(resourceRoot, ref.path.slice(containerPrefix.length + 1));
106
+ if (hostPath !== resourceRoot && !hostPath.startsWith(resourceRoot + path.sep)) {
107
+ throw new Error(`[reconcile-manifest] input read resolves outside the analysis tree: path=${ref.path} stepId=${stepId} runId=${runId}`);
108
+ }
109
+ let info;
110
+ try {
111
+ info = await stat(hostPath);
112
+ }
113
+ catch (err) {
114
+ if (err.code === "ENOENT") {
115
+ throw new Error(`[reconcile-manifest] cannot attest input ${ref.path}: not present at reconcile (stepId=${stepId} runId=${runId})`, {
116
+ cause: err,
117
+ });
118
+ }
119
+ throw err;
120
+ }
121
+ if (!info.isFile()) {
122
+ // A directory read (e.g. `ls` / `list.files` of a mount) is tracked by
123
+ // the inotify frame but is not a content-attestable file artifact. Drop
124
+ // it from lineage rather than failing the step — mirrors the output-side
125
+ // non-file drop above. A genuinely missing FILE (ENOENT) still fails fast
126
+ // as drift; a directory is not drift.
127
+ collector.dropInput(ref);
128
+ continue;
129
+ }
130
+ ref.hash = await computeSha256File(hostPath);
131
+ }
132
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Report renderer — Node-side Nunjucks render of v{N}/report.html.j2 to v{N}/index.html.
3
+ *
4
+ * Stateless pure module: no harness imports, no env reads at import time,
5
+ * safe to run standalone in tests.
6
+ */
7
+ export interface RenderReportOptions {
8
+ versionDir: string;
9
+ templatesDir: string;
10
+ }
11
+ export interface RenderReportResult {
12
+ ok: boolean;
13
+ indexBytes: number;
14
+ error?: {
15
+ kind: "missing-template" | "syntax" | "runtime";
16
+ message: string;
17
+ line?: number;
18
+ snippet?: string;
19
+ };
20
+ }
21
+ /**
22
+ * Render `${versionDir}/report.html.j2` to `${versionDir}/index.html`.
23
+ *
24
+ * Loader resolution order: [versionDir, templatesDir]. `report.html.j2`
25
+ * lives in versionDir; `extends "base.html.j2"` and `include "components/..."`
26
+ * resolve from templatesDir. Autoescape is OFF — templates own escaping.
27
+ *
28
+ * `${templatesDir}/echarts-theme.json` is read, parsed, re-stringified, and
29
+ * passed as `echarts_theme` (a JSON string) for safe inlining inside a
30
+ * `<script>` block.
31
+ *
32
+ * Returns `{ ok: true, indexBytes }` on success. On failure, returns
33
+ * `{ ok: false, indexBytes: 0, error }` with `error.kind`:
34
+ * - "missing-template" — `report.html.j2` (or any `extends`/`include` target)
35
+ * not found by either loader. Message identifies the missing path.
36
+ * - "syntax" — Nunjucks parse error in any loaded template.
37
+ * - "runtime" — anything else thrown during render or write.
38
+ */
39
+ export declare function renderReport(opts: RenderReportOptions): Promise<RenderReportResult>;
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Report renderer — Node-side Nunjucks render of v{N}/report.html.j2 to v{N}/index.html.
3
+ *
4
+ * Stateless pure module: no harness imports, no env reads at import time,
5
+ * safe to run standalone in tests.
6
+ */
7
+ import { readFile, writeFile } from "node:fs/promises";
8
+ import { join } from "node:path";
9
+ import nunjucks from "nunjucks";
10
+ /**
11
+ * Render `${versionDir}/report.html.j2` to `${versionDir}/index.html`.
12
+ *
13
+ * Loader resolution order: [versionDir, templatesDir]. `report.html.j2`
14
+ * lives in versionDir; `extends "base.html.j2"` and `include "components/..."`
15
+ * resolve from templatesDir. Autoescape is OFF — templates own escaping.
16
+ *
17
+ * `${templatesDir}/echarts-theme.json` is read, parsed, re-stringified, and
18
+ * passed as `echarts_theme` (a JSON string) for safe inlining inside a
19
+ * `<script>` block.
20
+ *
21
+ * Returns `{ ok: true, indexBytes }` on success. On failure, returns
22
+ * `{ ok: false, indexBytes: 0, error }` with `error.kind`:
23
+ * - "missing-template" — `report.html.j2` (or any `extends`/`include` target)
24
+ * not found by either loader. Message identifies the missing path.
25
+ * - "syntax" — Nunjucks parse error in any loaded template.
26
+ * - "runtime" — anything else thrown during render or write.
27
+ */
28
+ export async function renderReport(opts) {
29
+ const { versionDir, templatesDir } = opts;
30
+ let echartsThemeJson;
31
+ try {
32
+ const raw = await readFile(join(templatesDir, "echarts-theme.json"), "utf8");
33
+ echartsThemeJson = JSON.stringify(JSON.parse(raw));
34
+ }
35
+ catch (err) {
36
+ const msg = err instanceof Error ? err.message : String(err);
37
+ const kind = isNotFound(err) ? "missing-template" : "runtime";
38
+ return {
39
+ ok: false,
40
+ indexBytes: 0,
41
+ error: { kind, message: `failed to load echarts-theme.json: ${msg}` },
42
+ };
43
+ }
44
+ const env = new nunjucks.Environment(new nunjucks.FileSystemLoader([versionDir, templatesDir], {
45
+ noCache: true,
46
+ }), { autoescape: false, throwOnUndefined: false });
47
+ let html;
48
+ try {
49
+ html = env.render("report.html.j2", { echarts_theme: echartsThemeJson });
50
+ }
51
+ catch (err) {
52
+ return { ok: false, indexBytes: 0, error: classifyNunjucksError(err) };
53
+ }
54
+ try {
55
+ const indexPath = join(versionDir, "index.html");
56
+ await writeFile(indexPath, html, "utf8");
57
+ return { ok: true, indexBytes: Buffer.byteLength(html, "utf8") };
58
+ }
59
+ catch (err) {
60
+ const msg = err instanceof Error ? err.message : String(err);
61
+ return {
62
+ ok: false,
63
+ indexBytes: 0,
64
+ error: { kind: "runtime", message: `failed to write index.html: ${msg}` },
65
+ };
66
+ }
67
+ }
68
+ function isNotFound(err) {
69
+ if (!err || typeof err !== "object")
70
+ return false;
71
+ const code = err.code;
72
+ return code === "ENOENT";
73
+ }
74
+ function classifyNunjucksError(err) {
75
+ const message = err instanceof Error ? err.message : String(err);
76
+ if (/template not found/i.test(message)) {
77
+ return { kind: "missing-template", message };
78
+ }
79
+ // Nunjucks tags parse errors with "Template render error" + "expected" /
80
+ // "unexpected" / "parseError" markers; the Template error carries lineno.
81
+ const lineno = err?.lineno;
82
+ const colno = err?.colno;
83
+ const line = typeof lineno === "number" ? lineno : undefined;
84
+ const isSyntax = /parseError|expected|unexpected token|unexpected end of/i.test(message) || /Template render error.*line \d+/i.test(message);
85
+ if (isSyntax) {
86
+ const snippet = extractSnippet(message, line, typeof colno === "number" ? colno : undefined);
87
+ return snippet ? { kind: "syntax", message, line, snippet } : line !== undefined ? { kind: "syntax", message, line } : { kind: "syntax", message };
88
+ }
89
+ return line !== undefined ? { kind: "runtime", message, line } : { kind: "runtime", message };
90
+ }
91
+ function extractSnippet(message, line, col) {
92
+ if (!line)
93
+ return undefined;
94
+ const m = message.split("\n").find((l) => l.trim().length > 0 && !/^\s*at\s/.test(l));
95
+ if (!m)
96
+ return undefined;
97
+ return col !== undefined ? `${m} (col ${col})` : m;
98
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Report runner — orchestrates an iterative report build entirely in the
3
+ * Cortex Node process. No sandbox, no Python.
4
+ *
5
+ * Lifecycle:
6
+ * 1. Resolve version (latest + 1, or baseVersion + 1)
7
+ * 2. Prepare version dir (mkdir, copy v{base}/report.html.j2, symlink ../assets)
8
+ * 3. Construct the 4 custom report tools + the in-process versionFs surface;
9
+ * all of them close over the iteration's preview-dir state and a single
10
+ * `outcome: ReportOutcome | undefined` variable (the closure-state
11
+ * closure-state capture — see design.md Decision #9, mirrors
12
+ * `harness/tools/research/generate-plan.ts`'s
13
+ * `PlannerOutcome` capture).
14
+ * 4. Build the `report-builder` AgentDefinition with that tool roster and
15
+ * drive it via `runAgent` + `passthroughStep`.
16
+ * 5. Verify the closure-captured `outcome` is `{ ok: true, ... }` (else
17
+ * classify the failure, roll back the version dir, return a structured
18
+ * failure).
19
+ * 6. Return success or a structured failure.
20
+ *
21
+ * Concurrency: per-previewId serialization via `withPreviewLock` so two
22
+ * iterations on the same preview don't race on shared assets/.
23
+ *
24
+ * Billing: the report-builder's LLM calls flow through the `ChatProvider`
25
+ * seam with `forSubAgent(session, REPORT_BUILDER_AGENT_ID)` — the provider's
26
+ * lazy `resolveBilling` fires at the call site. No ALS, no fetch-patch
27
+ * (Decision #6).
28
+ *
29
+ * Preview surface: the `preview_snapshot` and `mint_preview_url` tools mint
30
+ * a content-server URL through the injected `PreviewPublisher` seam. The
31
+ * managed publisher owns the short-lived host credential; the local default
32
+ * returns "unavailable" so the report still builds without a hosted preview.
33
+ */
34
+ import type { Pool } from "pg";
35
+ import { type RequestSession } from "../auth/types.js";
36
+ import type { EmitFn } from "../loop/types.js";
37
+ import type { ChatProvider } from "../providers/types.js";
38
+ import type { PreviewPublisher } from "../tools/report/preview-publisher.js";
39
+ import type { ChromeConfig } from "../lib/chrome.js";
40
+ export interface ReportRunnerDeps {
41
+ readonly provider: ChatProvider;
42
+ readonly pool: Pool;
43
+ /** Model id — provenance / metric label; provider owns the wire model. */
44
+ readonly model: string;
45
+ /** Root templates dir; `report-html` is joined onto it. */
46
+ readonly templatesDir: string;
47
+ /** Skills root; the report-builder gets read-only `report-html` skill tools. */
48
+ readonly skillsDir: string;
49
+ readonly chrome: ChromeConfig;
50
+ }
51
+ export interface ReportRunnerOptions {
52
+ readonly resourceId: string;
53
+ /** Absolute host root of the analysis's workspace tree (previews live inside it). */
54
+ readonly workspaceRoot: string;
55
+ readonly previews: PreviewPublisher;
56
+ /** Preview group ID. Auto-generated by the tool layer if not provided. */
57
+ readonly previewId: string;
58
+ /** Base version to iterate from. Defaults to latest. */
59
+ readonly baseVersion?: number;
60
+ /** Report format. */
61
+ readonly format: "html" | "pdf";
62
+ /** Prompt for the report-builder agent. */
63
+ readonly prompt: string;
64
+ /** Live chat session — derives the child agent's session via forSubAgent. */
65
+ readonly session: RequestSession;
66
+ /** Cancellation signal — propagates to the agent stream. */
67
+ readonly signal: AbortSignal;
68
+ /** Event sink — forwarded to the agent loop. */
69
+ readonly emit: EmitFn;
70
+ }
71
+ export type ReportRunnerResult = {
72
+ ok: true;
73
+ previewId: string;
74
+ version: number;
75
+ previewPath: string;
76
+ durationMs: number;
77
+ /** Caveats surfaced by the agent via submit_report. */
78
+ notes: readonly string[];
79
+ } | {
80
+ ok: false;
81
+ previewId: string;
82
+ version: number;
83
+ reason: string;
84
+ errorKind: "render" | "submit" | "build" | "timeout" | "internal";
85
+ durationMs: number;
86
+ };
87
+ export declare function runReportIteration(deps: ReportRunnerDeps, opts: ReportRunnerOptions): Promise<ReportRunnerResult>;
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Report runner — orchestrates an iterative report build entirely in the
3
+ * Cortex Node process. No sandbox, no Python.
4
+ *
5
+ * Lifecycle:
6
+ * 1. Resolve version (latest + 1, or baseVersion + 1)
7
+ * 2. Prepare version dir (mkdir, copy v{base}/report.html.j2, symlink ../assets)
8
+ * 3. Construct the 4 custom report tools + the in-process versionFs surface;
9
+ * all of them close over the iteration's preview-dir state and a single
10
+ * `outcome: ReportOutcome | undefined` variable (the closure-state
11
+ * closure-state capture — see design.md Decision #9, mirrors
12
+ * `harness/tools/research/generate-plan.ts`'s
13
+ * `PlannerOutcome` capture).
14
+ * 4. Build the `report-builder` AgentDefinition with that tool roster and
15
+ * drive it via `runAgent` + `passthroughStep`.
16
+ * 5. Verify the closure-captured `outcome` is `{ ok: true, ... }` (else
17
+ * classify the failure, roll back the version dir, return a structured
18
+ * failure).
19
+ * 6. Return success or a structured failure.
20
+ *
21
+ * Concurrency: per-previewId serialization via `withPreviewLock` so two
22
+ * iterations on the same preview don't race on shared assets/.
23
+ *
24
+ * Billing: the report-builder's LLM calls flow through the `ChatProvider`
25
+ * seam with `forSubAgent(session, REPORT_BUILDER_AGENT_ID)` — the provider's
26
+ * lazy `resolveBilling` fires at the call site. No ALS, no fetch-patch
27
+ * (Decision #6).
28
+ *
29
+ * Preview surface: the `preview_snapshot` and `mint_preview_url` tools mint
30
+ * a content-server URL through the injected `PreviewPublisher` seam. The
31
+ * managed publisher owns the short-lived host credential; the local default
32
+ * returns "unavailable" so the report still builds without a hosted preview.
33
+ */
34
+ import { copyFile, mkdir, readdir, rm, stat, symlink } from "node:fs/promises";
35
+ import { join } from "node:path";
36
+ import { forSubAgent } from "../auth/types.js";
37
+ import { runToTerminal } from "../loop/run-to-terminal.js";
38
+ import { passthroughStep } from "../loop/run-step.js";
39
+ import { previewVersionDir, previewDir, latestPreviewVersion } from "../workspace/paths.js";
40
+ import { withPreviewLock } from "../tools/lib/preview-lock.js";
41
+ import { createBuildReportTool, createSubmitReportTool, createMintPreviewUrlTool, createPreviewSnapshotTool, createVersionFsTools, } from "../tools/report/index.js";
42
+ import { createReportBuilderAgent, REPORT_BUILDER_AGENT_ID } from "../agents/report-builder.js";
43
+ import { createSkillTools } from "../tools/sandbox/skills.js";
44
+ /** Skill pack the report-builder prompt directs the model to read (design-system reference). */
45
+ const REPORT_BUILDER_SKILLS = ["report-html"];
46
+ const REPORT_AGENT_MAX_STEPS = 75;
47
+ export async function runReportIteration(deps, opts) {
48
+ const startTime = performance.now();
49
+ return withPreviewLock(opts.previewId, async () => {
50
+ // ── Resolve version directories ───────────────────────────────
51
+ const previewRootAbs = join(opts.workspaceRoot, previewDir(opts.previewId));
52
+ let existingVersions = [];
53
+ try {
54
+ existingVersions = (await readdir(previewRootAbs, { withFileTypes: true })).filter((d) => d.isDirectory()).map((d) => d.name);
55
+ }
56
+ catch {
57
+ /* dir doesn't exist yet */
58
+ }
59
+ const latestVer = latestPreviewVersion(existingVersions);
60
+ const baseVer = opts.baseVersion ?? latestVer;
61
+ const newVersion = Math.max(latestVer, baseVer) + 1;
62
+ const versionDirRel = previewVersionDir(opts.previewId, newVersion);
63
+ const versionDirAbs = join(opts.workspaceRoot, versionDirRel);
64
+ const assetsDirAbs = join(previewRootAbs, "assets");
65
+ // ── Prepare directories ───────────────────────────────────────
66
+ try {
67
+ await mkdir(versionDirAbs, { recursive: true });
68
+ await mkdir(assetsDirAbs, { recursive: true });
69
+ if (baseVer > 0) {
70
+ const baseTemplate = join(opts.workspaceRoot, previewVersionDir(opts.previewId, baseVer), "report.html.j2");
71
+ try {
72
+ await copyFile(baseTemplate, join(versionDirAbs, "report.html.j2"));
73
+ }
74
+ catch (err) {
75
+ const code = err.code;
76
+ if (code !== "ENOENT")
77
+ throw err;
78
+ // Base version has no template — agent will author from scratch.
79
+ }
80
+ }
81
+ // Symlink assets/ → ../assets so templates can reference assets/foo.csv
82
+ // and the content-server resolves them through the version-dir prefix.
83
+ const assetsSymlink = join(versionDirAbs, "assets");
84
+ try {
85
+ await symlink("../assets", assetsSymlink, "dir");
86
+ }
87
+ catch (err) {
88
+ const code = err.code;
89
+ if (code !== "EEXIST")
90
+ throw err;
91
+ }
92
+ }
93
+ catch (err) {
94
+ const msg = err instanceof Error ? err.message : String(err);
95
+ return failure(opts.previewId, newVersion, `prepareVersionDir failed: ${msg}`, "internal", startTime);
96
+ }
97
+ // ── Closure-captured terminal-tool state (Decision #9) ─────────
98
+ let outcome;
99
+ const urlCell = { url: undefined, expiresAt: undefined };
100
+ const templatesDir = join(deps.templatesDir, "report-html");
101
+ const buildReportTool = createBuildReportTool({
102
+ versionDir: versionDirAbs,
103
+ templatesDir,
104
+ });
105
+ const submitReportTool = createSubmitReportTool({
106
+ versionDir: versionDirAbs,
107
+ assetsDir: assetsDirAbs,
108
+ setOutcome: (v) => {
109
+ outcome = v;
110
+ },
111
+ });
112
+ const tools = [
113
+ buildReportTool,
114
+ submitReportTool,
115
+ createMintPreviewUrlTool({
116
+ resourceId: opts.resourceId,
117
+ previewId: opts.previewId,
118
+ currentVersion: newVersion,
119
+ previews: opts.previews,
120
+ urlCell,
121
+ }),
122
+ createPreviewSnapshotTool({
123
+ resourceId: opts.resourceId,
124
+ previewId: opts.previewId,
125
+ currentVersion: newVersion,
126
+ previews: opts.previews,
127
+ urlCell,
128
+ chrome: deps.chrome,
129
+ }),
130
+ ...createVersionFsTools({ versionDir: versionDirAbs }),
131
+ ...Object.values(createSkillTools({ skillsDir: deps.skillsDir, skills: [...REPORT_BUILDER_SKILLS] })),
132
+ ];
133
+ const agent = createReportBuilderAgent({ model: deps.model, tools });
134
+ // The agent's runaway-guard takes precedence over the per-iteration cap.
135
+ const cappedAgent = {
136
+ ...agent,
137
+ maxIterations: Math.min(agent.maxIterations, REPORT_AGENT_MAX_STEPS),
138
+ };
139
+ const childSession = forSubAgent(opts.session, REPORT_BUILDER_AGENT_ID);
140
+ let agentError;
141
+ try {
142
+ await runToTerminal(cappedAgent, [{ role: "user", content: opts.prompt }], childSession, {
143
+ provider: deps.provider,
144
+ signal: opts.signal,
145
+ emit: opts.emit,
146
+ runStep: passthroughStep,
147
+ }, {
148
+ resolved: () => outcome !== undefined,
149
+ tools: [buildReportTool, submitReportTool],
150
+ nudge: "You stopped without calling submit_report, so this report version " +
151
+ "was not recorded. Build the report if needed, then call " +
152
+ "submit_report now to finalize it.",
153
+ });
154
+ }
155
+ catch (err) {
156
+ agentError = err instanceof Error ? err.message : String(err);
157
+ }
158
+ // ── Phantom-success guard ──────────────────────────────────────
159
+ // submit-report claims ok but index.html doesn't exist or is empty.
160
+ let phantomSuccess = false;
161
+ if (outcome?.ok === true && !agentError) {
162
+ try {
163
+ const indexStat = await stat(join(versionDirAbs, "index.html"));
164
+ if (!indexStat.isFile() || indexStat.size === 0)
165
+ phantomSuccess = true;
166
+ }
167
+ catch {
168
+ phantomSuccess = true;
169
+ }
170
+ }
171
+ if (!outcome || agentError || phantomSuccess) {
172
+ console.warn(`[report-runner] event=report.agent.finish preview=${opts.previewId} v${newVersion} ` +
173
+ `submitted=${outcome?.ok === true} phantom=${phantomSuccess} ` +
174
+ `agentError=${agentError ?? "null"}`);
175
+ const { reason, errorKind } = classifyFailure({
176
+ phantomSuccess,
177
+ agentError,
178
+ outcome,
179
+ });
180
+ // Roll back the version dir (assets are shared — leave them alone).
181
+ try {
182
+ await rm(versionDirAbs, { recursive: true, force: true });
183
+ }
184
+ catch (err) {
185
+ console.error(`[report-runner] rollback failed for ${versionDirAbs}:`, err instanceof Error ? err.message : err);
186
+ }
187
+ return failure(opts.previewId, newVersion, reason, errorKind, startTime);
188
+ }
189
+ const durationMs = Math.round(performance.now() - startTime);
190
+ return {
191
+ ok: true,
192
+ previewId: opts.previewId,
193
+ version: newVersion,
194
+ previewPath: `v${newVersion}/index.html`,
195
+ durationMs,
196
+ notes: outcome.notes,
197
+ };
198
+ });
199
+ }
200
+ function failure(previewId, version, reason, errorKind, startTime) {
201
+ return {
202
+ ok: false,
203
+ previewId,
204
+ version,
205
+ reason,
206
+ errorKind,
207
+ durationMs: Math.round(performance.now() - startTime),
208
+ };
209
+ }
210
+ function classifyFailure(s) {
211
+ if (s.phantomSuccess) {
212
+ return {
213
+ reason: "submit_report claimed ok but index.html is missing or empty",
214
+ errorKind: "build",
215
+ };
216
+ }
217
+ if (s.agentError) {
218
+ return {
219
+ reason: s.agentError,
220
+ errorKind: /timeout/i.test(s.agentError) ? "timeout" : "submit",
221
+ };
222
+ }
223
+ return {
224
+ reason: "agent did not call submit_report — terminal outcome was never recorded",
225
+ errorKind: "submit",
226
+ };
227
+ }