@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,64 @@
1
+ /**
2
+ * Read-path reconstruction of display cards from a persisted turn.
3
+ *
4
+ * `show_plan` / `show_user` / `show_file` / `execute_plan` / `iterate_report` emit
5
+ * `data-plan` / `data-presentation` / `data-file-reference` / `data-run-card` /
6
+ * `data-report-preview` cards
7
+ * live over the chat SSE stream. On reload, `content-to-cortex` calls this
8
+ * resolver for each AI SDK tool-call part: a recognised display tool yields its card (rebuilt via the
9
+ * shared `card-builders`); anything else yields `null` and falls back to a
10
+ * generic `tool-call` chip. Keyed by the analysis `Pool` + id (plan / run) or
11
+ * the analysis's workspace root (preview, filesystem-backed) so the card can
12
+ * be re-loaded.
13
+ */
14
+ import { unwrapOrThrow } from "../lib/result.js";
15
+ import { validatePath } from "../tools/lib/path-validation.js";
16
+ import { buildFileReferenceCardData, buildPlanCardData, buildPresentationCardData, buildPreviewCardData, buildRunCardData } from "./card-builders.js";
17
+ export function createCardResolver(pool, analysisId, workspaceRoot) {
18
+ return async (block) => {
19
+ if (block.type !== "tool_use")
20
+ return null;
21
+ const input = (block.input ?? {});
22
+ // The harness tool id is `iterate_report`; legacy transcripts carry
23
+ // `iterateReport` — accept both.
24
+ if (block.name === "iterate_report" || block.name === "iterateReport") {
25
+ const report = (input.report ?? null);
26
+ const card = await buildPreviewCardData(workspaceRoot, {
27
+ previewId: typeof input.previewId === "string" ? input.previewId : undefined,
28
+ title: report && typeof report.title === "string" ? report.title : undefined,
29
+ format: input.format === "pdf" || input.format === "html" ? input.format : undefined,
30
+ });
31
+ return card ? { type: "data-report-preview", ...card } : null;
32
+ }
33
+ if (block.name === "show_user") {
34
+ // The live tool rejects a malformed/traversal echart `dataPath` and emits nothing; the
35
+ // persisted tool_use still carries it, so the reload path MUST re-validate before building
36
+ // the card — otherwise an unvalidated path is resurrected for the host to join into the
37
+ // workspace root. Invalid → no card (chip fallback), matching the live "emitted nothing".
38
+ if (typeof input.dataPath === "string" && validatePath(input.dataPath) !== null)
39
+ return null;
40
+ const card = buildPresentationCardData(input);
41
+ return card ? { type: "data-presentation", ...card } : null;
42
+ }
43
+ if (block.name === "show_file") {
44
+ const card = buildFileReferenceCardData(input);
45
+ return card ? { type: "data-file-reference", ...card } : null;
46
+ }
47
+ if (block.name === "show_plan") {
48
+ const planId = typeof input.planId === "string" ? input.planId : null;
49
+ if (!planId)
50
+ return null;
51
+ const title = typeof input.title === "string" ? input.title : undefined;
52
+ const card = unwrapOrThrow(await buildPlanCardData(pool, planId, analysisId, title));
53
+ return card ? { type: "data-plan", ...card } : null;
54
+ }
55
+ if (block.name === "execute_plan") {
56
+ const planId = typeof input.planId === "string" ? input.planId : null;
57
+ if (!planId)
58
+ return null;
59
+ const card = unwrapOrThrow(await buildRunCardData(pool, { planId, analysisId }));
60
+ return card ? { type: "data-run-card", ...card } : null;
61
+ }
62
+ return null;
63
+ };
64
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Conversation message store — the harness's owned `ThreadHistory`.
3
+ *
4
+ * Conversation-scoped store with an explicit two-method interface and
5
+ * nothing else bundled in (no semantic recall, no working memory, no title
6
+ * generation). It is also the home of context-window management — the read
7
+ * side, `loadRecent`, returns a token-bounded window.
8
+ *
9
+ * Scope (see the harness-thread-store spec): conversation threads only. A `threadId` is the
10
+ * UI-generated id of one conversation thread (a random UUID — an analysis
11
+ * has many threads); it is opaque to this module. Workflow and sandbox
12
+ * agent loops never call this; their message durability is the DBOS step
13
+ * cache. The interface vocabulary (`appendTurn` / `loadRecent`) is
14
+ * conversation-turn shaped on purpose, so reaching for it inside a
15
+ * workflow step feels immediately wrong.
16
+ *
17
+ * The window is always a valid AI SDK model-message sequence: it begins on a
18
+ * `user` message that is genuine user input — never a `tool`-role
19
+ * continuation — and never splits a tool-call/tool-result pair. The turn
20
+ * is the atomic unit; `appendTurn` writes one atomically and `loadRecent`
21
+ * rounds the budget walk to turn boundaries.
22
+ */
23
+ import type { ModelMessage } from "ai";
24
+ import { ResultAsync } from "neverthrow";
25
+ import type { Pool } from "pg";
26
+ import { type DbError } from "../lib/db-result.js";
27
+ import { type StoredMessageEnvelope } from "./ai-sdk-message-storage.js";
28
+ /** One stored message, as returned by the display read (`loadPage`). */
29
+ export interface StoredMessage {
30
+ readonly seq: number;
31
+ readonly envelope: StoredMessageEnvelope;
32
+ readonly message: ModelMessage;
33
+ }
34
+ /**
35
+ * A page of stored messages plus pagination metadata. Pagination is
36
+ * turn-based: `total` is the thread's turn count and `page`/`perPage` index
37
+ * turns, while `messages` is the flattened rows of the page's turns.
38
+ */
39
+ export interface MessagePage {
40
+ readonly messages: StoredMessage[];
41
+ readonly total: number;
42
+ readonly page: number;
43
+ readonly perPage: number;
44
+ readonly hasMore: boolean;
45
+ }
46
+ /**
47
+ * The conversation message store. Two methods, by design — no generic row
48
+ * insert (see the harness-thread-store spec). `threadId` is the conversation scope — one UI thread.
49
+ */
50
+ export interface ThreadHistory {
51
+ /**
52
+ * Append one conversation turn — every message written in a single
53
+ * transaction with a `seq` monotonically increasing per thread.
54
+ */
55
+ appendTurn(threadId: string, messages: readonly ModelMessage[]): ResultAsync<void, DbError>;
56
+ /**
57
+ * Return the most recent messages whose cumulative `tokens` fit
58
+ * `tokenBudget`, oldest-first, snapped to a valid AI SDK model-message sequence.
59
+ */
60
+ loadRecent(threadId: string, tokenBudget: number): ResultAsync<ModelMessage[], DbError>;
61
+ /**
62
+ * Return one page of a thread's messages oldest-first for UI display —
63
+ * NOT token-windowed (that is `loadRecent`'s job for the agent loop). No
64
+ * eviction. Paginated by whole turns: `page`, `perPage`, and `total` count
65
+ * turns, not rows, so a multi-row turn always reloads intact. `messages`
66
+ * holds the flattened rows of the selected turns.
67
+ */
68
+ loadPage(threadId: string, page: number, perPage: number): ResultAsync<MessagePage, DbError>;
69
+ }
70
+ /**
71
+ * Drop the memoized instruments so the next `loadRecent` rebinds to a
72
+ * freshly-registered `MeterProvider`. Test-only.
73
+ */
74
+ export declare function __resetThreadHistoryMetricsForTest(): void;
75
+ /**
76
+ * Create a `ThreadHistory` bound to a Postgres pool — a factory closure
77
+ * capturing `pool` (dependency injection per the harness-durable-runtime spec). The `messages` table is
78
+ * provisioned by the project's state-init DDL.
79
+ */
80
+ export declare function createThreadHistory(pool: Pool): ThreadHistory;
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Conversation message store — the harness's owned `ThreadHistory`.
3
+ *
4
+ * Conversation-scoped store with an explicit two-method interface and
5
+ * nothing else bundled in (no semantic recall, no working memory, no title
6
+ * generation). It is also the home of context-window management — the read
7
+ * side, `loadRecent`, returns a token-bounded window.
8
+ *
9
+ * Scope (see the harness-thread-store spec): conversation threads only. A `threadId` is the
10
+ * UI-generated id of one conversation thread (a random UUID — an analysis
11
+ * has many threads); it is opaque to this module. Workflow and sandbox
12
+ * agent loops never call this; their message durability is the DBOS step
13
+ * cache. The interface vocabulary (`appendTurn` / `loadRecent`) is
14
+ * conversation-turn shaped on purpose, so reaching for it inside a
15
+ * workflow step feels immediately wrong.
16
+ *
17
+ * The window is always a valid AI SDK model-message sequence: it begins on a
18
+ * `user` message that is genuine user input — never a `tool`-role
19
+ * continuation — and never splits a tool-call/tool-result pair. The turn
20
+ * is the atomic unit; `appendTurn` writes one atomically and `loadRecent`
21
+ * rounds the budget walk to turn boundaries.
22
+ */
23
+ import { metrics } from "@opentelemetry/api";
24
+ import { ResultAsync, ok } from "neverthrow";
25
+ import { tryMutation, tryQuery, withTransaction } from "../lib/db-result.js";
26
+ import { countTokens } from "./count-tokens.js";
27
+ import { envelopeMessage, parseStoredMessageEnvelope } from "./ai-sdk-message-storage.js";
28
+ /** A resolved `ok(undefined)` ResultAsync — the empty/seed transaction step. */
29
+ function okVoid() {
30
+ return new ResultAsync(Promise.resolve(ok(undefined)));
31
+ }
32
+ /**
33
+ * A turn starts on a `user` message. In AI SDK message terms tool results
34
+ * are `tool`-role messages, so a mid-turn tool continuation never carries
35
+ * the `user` role and cannot open a turn.
36
+ */
37
+ function isGenuineUserStart(message) {
38
+ return message.role === "user";
39
+ }
40
+ /**
41
+ * Group rows (oldest-first) into turns at genuine-user-start boundaries.
42
+ * Generic over the row shape so the token-windowed read (`loadRecent`) and
43
+ * the display read (`loadPage`) share it, each supplying its own start
44
+ * predicate.
45
+ */
46
+ function groupTurns(rows, isStart) {
47
+ const turns = [];
48
+ for (const row of rows) {
49
+ if (turns.length === 0 || isStart(row)) {
50
+ turns.push([row]);
51
+ }
52
+ else {
53
+ turns[turns.length - 1].push(row);
54
+ }
55
+ }
56
+ return turns;
57
+ }
58
+ let instruments;
59
+ function getInstruments() {
60
+ if (instruments === undefined) {
61
+ const meter = metrics.getMeter("cortex.harness.memory");
62
+ instruments = {
63
+ totalTokens: meter.createHistogram("cortex.harness.thread.total_tokens", {
64
+ description: "Total token count of a conversation thread, sampled on every loadRecent",
65
+ unit: "{token}",
66
+ }),
67
+ turnsEvicted: meter.createHistogram("cortex.harness.thread.turns_evicted", {
68
+ description: "Conversation turns dropped by loadRecent's token-budget window",
69
+ unit: "{turn}",
70
+ }),
71
+ };
72
+ }
73
+ return instruments;
74
+ }
75
+ /**
76
+ * Drop the memoized instruments so the next `loadRecent` rebinds to a
77
+ * freshly-registered `MeterProvider`. Test-only.
78
+ */
79
+ export function __resetThreadHistoryMetricsForTest() {
80
+ instruments = undefined;
81
+ }
82
+ /**
83
+ * Create a `ThreadHistory` bound to a Postgres pool — a factory closure
84
+ * capturing `pool` (dependency injection per the harness-durable-runtime spec). The `messages` table is
85
+ * provisioned by the project's state-init DDL.
86
+ */
87
+ export function createThreadHistory(pool) {
88
+ function appendTurn(threadId, messages) {
89
+ if (messages.length === 0)
90
+ return okVoid();
91
+ return withTransaction(pool, "thread-history.appendTurn", (client) =>
92
+ // Serialize concurrent appends on this thread — without the lock, two
93
+ // transactions can both read the same MAX(seq) and collide on the
94
+ // (thread_id, seq) primary key. Released automatically at COMMIT/ROLLBACK.
95
+ tryQuery("thread-history.appendTurn.lock", () => client.query("SELECT pg_advisory_xact_lock(hashtext($1))", [threadId]))
96
+ .andThen(() => tryQuery("thread-history.appendTurn.maxSeq", async () => {
97
+ const { rows } = await client.query("SELECT COALESCE(MAX(seq), -1)::text AS max_seq FROM messages WHERE thread_id = $1", [threadId]);
98
+ return Number(rows[0].max_seq) + 1;
99
+ }))
100
+ .andThen((startSeq) =>
101
+ // Insert the turn's messages in order. Each insert chains off the
102
+ // prior so the first `err` short-circuits — and `withTransaction`
103
+ // re-throws it to force ROLLBACK (a returned `err` that does not
104
+ // reach `withTransaction` would COMMIT silently).
105
+ messages.reduce((chain, message, i) => chain.andThen(() => tryMutation("thread-history.appendTurn.insert", () => client.query(`INSERT INTO messages (thread_id, seq, message_envelope, tokens)
106
+ VALUES ($1, $2, $3::jsonb, $4)
107
+ ON CONFLICT (thread_id, seq) DO UPDATE
108
+ SET message_envelope = EXCLUDED.message_envelope,
109
+ tokens = EXCLUDED.tokens`, [threadId, startSeq + i, JSON.stringify(envelopeMessage(message)), countTokens(message.content)])).map(() => undefined)), okVoid())));
110
+ }
111
+ function loadRecent(threadId, tokenBudget) {
112
+ return tryQuery("thread-history.loadRecent", async () => {
113
+ const { rows } = await pool.query(
114
+ // ORDER BY must qualify `messages.seq` — a bare `seq` would bind to the
115
+ // `seq::text AS seq` output alias (Postgres resolves an unqualified
116
+ // ORDER BY name to the output column), sorting the bigint as text:
117
+ // "10" before "2". Scrambled order splits a tool-call/tool-result pair
118
+ // across an intervening turn. The qualified name forces the bigint column.
119
+ `SELECT seq::text AS seq, message_envelope, tokens
120
+ FROM messages WHERE thread_id = $1 ORDER BY messages.seq ASC`, [threadId]);
121
+ const parsed = rows.map((row) => ({
122
+ message: parseStoredMessageEnvelope(row.message_envelope, `${threadId}/${row.seq}`).message,
123
+ tokens: row.tokens,
124
+ }));
125
+ const turns = groupTurns(parsed, (row) => isGenuineUserStart(row.message));
126
+ const turnTokens = turns.map((turn) => turn.reduce((sum, row) => sum + row.tokens, 0));
127
+ const threadTotal = turnTokens.reduce((sum, n) => sum + n, 0);
128
+ // Walk turns newest-first, accumulating token cost. The most recent turn
129
+ // is always included — even if it alone exceeds the budget, a valid
130
+ // sequence beats an under-budget one. Older turns join while they fit.
131
+ let included = 0;
132
+ let cumulative = 0;
133
+ for (let t = turns.length - 1; t >= 0; t--) {
134
+ if (included > 0 && cumulative + turnTokens[t] > tokenBudget)
135
+ break;
136
+ cumulative += turnTokens[t];
137
+ included++;
138
+ }
139
+ const turnsEvicted = turns.length - included;
140
+ const { totalTokens, turnsEvicted: turnsEvictedHist } = getInstruments();
141
+ const attributes = { eviction: turnsEvicted > 0 };
142
+ totalTokens.record(threadTotal, attributes);
143
+ turnsEvictedHist.record(turnsEvicted, attributes);
144
+ return turns
145
+ .slice(turns.length - included)
146
+ .flat()
147
+ .map((row) => row.message);
148
+ });
149
+ }
150
+ function loadPage(threadId, page, perPage) {
151
+ const safePerPage = Math.min(Math.max(perPage, 1), 200);
152
+ const safePage = Math.max(page, 0);
153
+ return tryQuery("thread-history.loadPage", async () => {
154
+ // Display pages are turn-bounded, not row-bounded. A serial-tool assistant
155
+ // turn is persisted as one row per step (plus its tool_result `user` rows),
156
+ // so a row-windowed page could split a turn — truncating the trailing
157
+ // report card/text out of the page the UI fetches. Read the thread, group
158
+ // into turns, and slice whole turns so a turn always reloads intact.
159
+ // Threads are conversation-scoped and bounded, so reading every row here
160
+ // matches `loadRecent`'s existing whole-thread read.
161
+ const { rows } = await pool.query(
162
+ // ORDER BY must qualify `messages.seq` — a bare `seq` would bind to the
163
+ // `seq::text AS seq` output alias (Postgres resolves an unqualified
164
+ // ORDER BY name to the output column), sorting the bigint as text:
165
+ // "10" before "2". The qualified name forces the bigint column.
166
+ `SELECT seq::text AS seq, message_envelope
167
+ FROM messages WHERE thread_id = $1
168
+ ORDER BY messages.seq ASC`, [threadId]);
169
+ const stored = rows.map((r) => {
170
+ const envelope = parseStoredMessageEnvelope(r.message_envelope, `${threadId}/${r.seq}`);
171
+ return { seq: Number(r.seq), envelope, message: envelope.message };
172
+ });
173
+ const turns = groupTurns(stored, (row) => isGenuineUserStart(row.message));
174
+ const total = turns.length;
175
+ const offset = safePage * safePerPage;
176
+ const pageTurns = turns.slice(offset, offset + safePerPage);
177
+ return {
178
+ messages: pageTurns.flat(),
179
+ total,
180
+ page: safePage,
181
+ perPage: safePerPage,
182
+ hasMore: offset + pageTurns.length < total,
183
+ };
184
+ });
185
+ }
186
+ return { appendTurn, loadRecent, loadPage };
187
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Conversation thread metadata store — the harness's owned `ThreadStore`.
3
+ *
4
+ * The analysis-scope, ownership, listing, and title that the harness
5
+ * `messages` table (`thread-history.ts`) deliberately lacks. One row per
6
+ * conversation thread in `cortex_analysis_threads`, keyed by the
7
+ * UI-generated `thread_id` (a random UUID — an analysis has many threads).
8
+ *
9
+ * Scope (see the harness-thread-store spec): conversation threads only. Like `thread-history.ts`,
10
+ * the vocabulary is conversation-shaped on purpose — reaching for it inside
11
+ * a workflow step feels immediately wrong.
12
+ *
13
+ * Delete is soft: `deleteThread` sets `deleted_at`; `getThread` and
14
+ * `listThreads` filter `deleted_at IS NULL`, so the row (and its messages)
15
+ * survive a delete and a tombstoned thread is indistinguishable from absent.
16
+ */
17
+ import { type ResultAsync } from "neverthrow";
18
+ import type { Pool } from "pg";
19
+ import { type DbError } from "../lib/db-result.js";
20
+ /** One conversation thread's metadata, as returned by the store. */
21
+ export interface Thread {
22
+ readonly threadId: string;
23
+ readonly analysisId: string;
24
+ readonly title: string | null;
25
+ readonly createdAt: Date;
26
+ readonly updatedAt: Date;
27
+ }
28
+ export interface CreateThreadInput {
29
+ readonly threadId: string;
30
+ readonly analysisId: string;
31
+ readonly title?: string | null;
32
+ }
33
+ export interface ListThreadsInput {
34
+ readonly analysisId: string;
35
+ readonly page?: number;
36
+ readonly perPage?: number;
37
+ }
38
+ export interface ThreadPage {
39
+ readonly threads: Thread[];
40
+ readonly total: number;
41
+ readonly page: number;
42
+ readonly perPage: number;
43
+ readonly hasMore: boolean;
44
+ }
45
+ export interface ThreadStore {
46
+ /**
47
+ * Create a thread row. Idempotent on `thread_id` — a second create for an
48
+ * existing id is a no-op that preserves the existing row (including its
49
+ * `created_at`). Returns the live row.
50
+ */
51
+ createThread(input: CreateThreadInput): ResultAsync<Thread, DbError>;
52
+ /** The live thread by id, or `null` if absent or soft-deleted. */
53
+ getThread(threadId: string): ResultAsync<Thread | null, DbError>;
54
+ /** Set only the title (and bump `updated_at`). No-op on a missing/deleted row. */
55
+ updateTitle(threadId: string, title: string): ResultAsync<Thread | null, DbError>;
56
+ /** Soft-delete: set `deleted_at`. The row and its messages remain. */
57
+ deleteThread(threadId: string): ResultAsync<void, DbError>;
58
+ /** Live threads for one analysis, newest-updated first, paginated. */
59
+ listThreads(input: ListThreadsInput): ResultAsync<ThreadPage, DbError>;
60
+ }
61
+ /**
62
+ * Create a `ThreadStore` bound to a Postgres pool — a factory closure
63
+ * capturing `pool` (dependency injection per the harness-durable-runtime spec). The
64
+ * `cortex_analysis_threads` table is provisioned by the state-init DDL.
65
+ */
66
+ export declare function createThreadStore(pool: Pool): ThreadStore;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Conversation thread metadata store — the harness's owned `ThreadStore`.
3
+ *
4
+ * The analysis-scope, ownership, listing, and title that the harness
5
+ * `messages` table (`thread-history.ts`) deliberately lacks. One row per
6
+ * conversation thread in `cortex_analysis_threads`, keyed by the
7
+ * UI-generated `thread_id` (a random UUID — an analysis has many threads).
8
+ *
9
+ * Scope (see the harness-thread-store spec): conversation threads only. Like `thread-history.ts`,
10
+ * the vocabulary is conversation-shaped on purpose — reaching for it inside
11
+ * a workflow step feels immediately wrong.
12
+ *
13
+ * Delete is soft: `deleteThread` sets `deleted_at`; `getThread` and
14
+ * `listThreads` filter `deleted_at IS NULL`, so the row (and its messages)
15
+ * survive a delete and a tombstoned thread is indistinguishable from absent.
16
+ */
17
+ import { okAsync } from "neverthrow";
18
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
19
+ function toThread(row) {
20
+ return {
21
+ threadId: row.thread_id,
22
+ analysisId: row.analysis_id,
23
+ title: row.title,
24
+ createdAt: row.created_at,
25
+ updatedAt: row.updated_at,
26
+ };
27
+ }
28
+ const DEFAULT_PER_PAGE = 100;
29
+ const MAX_PER_PAGE = 200;
30
+ /**
31
+ * Create a `ThreadStore` bound to a Postgres pool — a factory closure
32
+ * capturing `pool` (dependency injection per the harness-durable-runtime spec). The
33
+ * `cortex_analysis_threads` table is provisioned by the state-init DDL.
34
+ */
35
+ export function createThreadStore(pool) {
36
+ function createThread(input) {
37
+ return tryMutation("thread-store.createThread.insert", () => pool.query(`INSERT INTO cortex_analysis_threads (thread_id, analysis_id, title)
38
+ VALUES ($1, $2, $3)
39
+ ON CONFLICT (thread_id) DO NOTHING
40
+ RETURNING thread_id, analysis_id, title, created_at, updated_at`, [input.threadId, input.analysisId, input.title ?? null])).andThen(({ rows }) => {
41
+ if (rows[0])
42
+ return okAsync(toThread(rows[0]));
43
+ // Row already existed — ON CONFLICT DO NOTHING returns nothing. Read it
44
+ // back (it may be soft-deleted; return it regardless so the caller sees
45
+ // the existing row's identity).
46
+ return tryQuery("thread-store.createThread.readback", () => pool.query(`SELECT thread_id, analysis_id, title, created_at, updated_at
47
+ FROM cortex_analysis_threads WHERE thread_id = $1`, [input.threadId])).map(({ rows: existing }) => toThread(existing[0]));
48
+ });
49
+ }
50
+ function getThread(threadId) {
51
+ return tryQuery("thread-store.getThread", () => pool.query(`SELECT thread_id, analysis_id, title, created_at, updated_at
52
+ FROM cortex_analysis_threads
53
+ WHERE thread_id = $1 AND deleted_at IS NULL`, [threadId])).map(({ rows }) => (rows[0] ? toThread(rows[0]) : null));
54
+ }
55
+ function updateTitle(threadId, title) {
56
+ return tryMutation("thread-store.updateTitle", () => pool.query(`UPDATE cortex_analysis_threads
57
+ SET title = $2, updated_at = NOW()
58
+ WHERE thread_id = $1 AND deleted_at IS NULL
59
+ RETURNING thread_id, analysis_id, title, created_at, updated_at`, [threadId, title])).map(({ rows }) => (rows[0] ? toThread(rows[0]) : null));
60
+ }
61
+ function deleteThread(threadId) {
62
+ return tryMutation("thread-store.deleteThread", () => pool.query(`UPDATE cortex_analysis_threads
63
+ SET deleted_at = NOW()
64
+ WHERE thread_id = $1 AND deleted_at IS NULL`, [threadId])).map(() => undefined);
65
+ }
66
+ function listThreads(input) {
67
+ const perPage = Math.min(Math.max(input.perPage ?? DEFAULT_PER_PAGE, 1), MAX_PER_PAGE);
68
+ const page = Math.max(input.page ?? 0, 0);
69
+ const offset = page * perPage;
70
+ return tryQuery("thread-store.listThreads.count", () => pool.query(`SELECT COUNT(*)::text AS count
71
+ FROM cortex_analysis_threads
72
+ WHERE analysis_id = $1 AND deleted_at IS NULL`, [input.analysisId])).andThen((totalResult) => {
73
+ const total = Number(totalResult.rows[0].count);
74
+ return tryQuery("thread-store.listThreads.page", () => pool.query(`SELECT thread_id, analysis_id, title, created_at, updated_at
75
+ FROM cortex_analysis_threads
76
+ WHERE analysis_id = $1 AND deleted_at IS NULL
77
+ ORDER BY updated_at DESC, thread_id
78
+ LIMIT $2 OFFSET $3`, [input.analysisId, perPage, offset])).map(({ rows }) => ({
79
+ threads: rows.map(toThread),
80
+ total,
81
+ page,
82
+ perPage,
83
+ hasMore: offset + rows.length < total,
84
+ }));
85
+ });
86
+ }
87
+ return { createThread, getThread, updateTitle, deleteThread, listThreads };
88
+ }
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Working memory — the harness's structured, analysis-scoped interpretive
3
+ * store.
4
+ *
5
+ * Structured JSONB object the agent updates one section at a time, serialized
6
+ * to Markdown only when injected (see the harness-thread-store spec).
7
+ *
8
+ * Four sections. `goal`, `constraints`, `hypotheses` are analysis-flat;
9
+ * `findings` is run-scoped, keyed by `runId`, so a finding stays attributable
10
+ * to the run that produced it. There is deliberately no `context` section —
11
+ * analysis context lives in `cortex_analysis_state.context` and is injected
12
+ * separately by the chat route.
13
+ *
14
+ * `updateSection` is a section-addressable read-modify-write: the named
15
+ * section is replaced or amended and the other three are left byte-identical.
16
+ */
17
+ import type { ResultAsync } from "neverthrow";
18
+ import type { Pool } from "pg";
19
+ import { z } from "zod";
20
+ import { type DbError } from "../lib/db-result.js";
21
+ /** A binding rule — user-stated or agent-derived. The highest-value section. */
22
+ export declare const constraintSchema: z.ZodObject<{
23
+ id: z.ZodString;
24
+ text: z.ZodString;
25
+ origin: z.ZodEnum<{
26
+ user: "user";
27
+ agent: "agent";
28
+ }>;
29
+ }, z.core.$strip>;
30
+ export type Constraint = z.infer<typeof constraintSchema>;
31
+ /** An active hypothesis under exploration. */
32
+ export declare const hypothesisSchema: z.ZodObject<{
33
+ id: z.ZodString;
34
+ text: z.ZodString;
35
+ }, z.core.$strip>;
36
+ export type Hypothesis = z.infer<typeof hypothesisSchema>;
37
+ /** A durable conclusion, attributed to the run that produced it. */
38
+ export declare const findingSchema: z.ZodObject<{
39
+ id: z.ZodString;
40
+ text: z.ZodString;
41
+ }, z.core.$strip>;
42
+ export type Finding = z.infer<typeof findingSchema>;
43
+ /**
44
+ * The persisted `data` shape — one JSONB object per analysis. `findings` is
45
+ * keyed by `runId`; an analysis with no recorded findings has an empty map.
46
+ */
47
+ export declare const workingMemorySchema: z.ZodObject<{
48
+ goal: z.ZodString;
49
+ constraints: z.ZodArray<z.ZodObject<{
50
+ id: z.ZodString;
51
+ text: z.ZodString;
52
+ origin: z.ZodEnum<{
53
+ user: "user";
54
+ agent: "agent";
55
+ }>;
56
+ }, z.core.$strip>>;
57
+ hypotheses: z.ZodArray<z.ZodObject<{
58
+ id: z.ZodString;
59
+ text: z.ZodString;
60
+ }, z.core.$strip>>;
61
+ findings: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
62
+ id: z.ZodString;
63
+ text: z.ZodString;
64
+ }, z.core.$strip>>>;
65
+ }, z.core.$strip>;
66
+ export type WorkingMemory = z.infer<typeof workingMemorySchema>;
67
+ /** The shape `load` returns for an analysis with no working-memory row. */
68
+ export declare function emptyWorkingMemory(): WorkingMemory;
69
+ /**
70
+ * A list-section amendment: append a new entry, revise an existing one's
71
+ * text, or retire a stale one. `revise`/`retire` address an entry by the
72
+ * `id` the agent copies from the rendered working memory.
73
+ */
74
+ export type ListOp = {
75
+ readonly op: "add";
76
+ readonly text: string;
77
+ } | {
78
+ readonly op: "revise";
79
+ readonly id: string;
80
+ readonly text: string;
81
+ } | {
82
+ readonly op: "retire";
83
+ readonly id: string;
84
+ };
85
+ /** As `ListOp`, but `add` also carries the constraint's `origin`. */
86
+ export type ConstraintOp = {
87
+ readonly op: "add";
88
+ readonly text: string;
89
+ readonly origin: "user" | "agent";
90
+ } | {
91
+ readonly op: "revise";
92
+ readonly id: string;
93
+ readonly text: string;
94
+ } | {
95
+ readonly op: "retire";
96
+ readonly id: string;
97
+ };
98
+ /** The `value` argument of `updateSection`, keyed by the `section` name. */
99
+ export interface SectionValue {
100
+ readonly goal: {
101
+ readonly text: string;
102
+ };
103
+ readonly constraint: ConstraintOp;
104
+ readonly hypothesis: ListOp;
105
+ readonly finding: {
106
+ readonly runId: string;
107
+ readonly text: string;
108
+ };
109
+ }
110
+ export type Section = keyof SectionValue;
111
+ /**
112
+ * The working-memory store. Three methods — `load` reads the structured
113
+ * shape, `updateSection` amends one section, `render` serializes to the
114
+ * Markdown the chat route injects.
115
+ */
116
+ export interface WorkingMemoryStore {
117
+ /** Read the row; return the empty shape if absent (no lazy insert). */
118
+ load(analysisId: string): ResultAsync<WorkingMemory, DbError>;
119
+ /**
120
+ * Atomically read-modify-write one section. The other three sections are
121
+ * left byte-identical; the row is upserted if absent.
122
+ */
123
+ updateSection<S extends Section>(analysisId: string, section: S, value: SectionValue[S]): ResultAsync<void, DbError>;
124
+ /** Serialize working memory to a Markdown document for injection. */
125
+ render(analysisId: string): ResultAsync<string, DbError>;
126
+ }
127
+ /** Serialize working memory to the Markdown document injected each turn. */
128
+ export declare function renderWorkingMemory(wm: WorkingMemory): string;
129
+ /**
130
+ * Create a `WorkingMemoryStore` bound to a Postgres pool — a factory closure
131
+ * capturing `pool` (dependency injection per the harness-durable-runtime spec). The
132
+ * `cortex_working_memory` table is provisioned by the project's state-init
133
+ * DDL.
134
+ */
135
+ export declare function createWorkingMemory(pool: Pool): WorkingMemoryStore;