@inflexa-ai/harness 0.35.8 → 0.36.0

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 (195) hide show
  1. package/dist/auth/types.d.ts +5 -14
  2. package/dist/auth/types.js +3 -10
  3. package/dist/billing/usage-recorder.d.ts +1 -1
  4. package/dist/contracts/analogy-report.d.ts +1 -1
  5. package/dist/contracts/analogy-report.js +1 -1
  6. package/dist/contracts/chat-parts.d.ts +2 -3
  7. package/dist/contracts/index.d.ts +0 -4
  8. package/dist/contracts/index.js +0 -2
  9. package/dist/index.d.ts +0 -7
  10. package/dist/index.js +0 -21
  11. package/dist/lib/metrics.d.ts +1 -1
  12. package/dist/lib/otel-spans.d.ts +0 -2
  13. package/dist/lib/otel-spans.js +0 -2
  14. package/dist/loop/run-agent.d.ts +1 -1
  15. package/dist/runtime/assemble.d.ts +0 -3
  16. package/dist/runtime/assemble.js +0 -3
  17. package/dist/state/index.d.ts +0 -2
  18. package/dist/state/index.js +0 -1
  19. package/dist/state/init.js +1 -60
  20. package/dist/state/purge-analysis.d.ts +1 -2
  21. package/dist/state/purge-analysis.js +1 -2
  22. package/dist/tasks/regulatory-corpus-boot-refresh.js +1 -1
  23. package/dist/tools/bio/gene-preclinical-profile.d.ts +1 -3
  24. package/dist/tools/bio/gene-preclinical-profile.js +1 -3
  25. package/dist/tools/lib/chembl-client.d.ts +1 -4
  26. package/dist/tools/lib/chembl-client.js +1 -4
  27. package/dist/tools/lib/clinical-benchmarks-client.d.ts +1 -1
  28. package/dist/tools/lib/clinical-benchmarks-client.js +1 -1
  29. package/dist/tools/lib/clinical-trials-client.d.ts +0 -3
  30. package/dist/tools/lib/clinical-trials-client.js +0 -3
  31. package/dist/tools/lib/identifier-resolver.d.ts +5 -7
  32. package/dist/tools/lib/identifier-resolver.js +5 -7
  33. package/dist/tools/lib/iuphar-client.d.ts +1 -3
  34. package/dist/tools/lib/iuphar-client.js +1 -3
  35. package/dist/tools/lib/opentargets-client.d.ts +1 -1
  36. package/dist/tools/lib/opentargets-client.js +1 -1
  37. package/dist/tools/lib/protein-family-normalize.d.ts +5 -7
  38. package/dist/tools/lib/protein-family-normalize.js +5 -7
  39. package/dist/tools/lib/uniprot-client.d.ts +0 -7
  40. package/dist/tools/lib/uniprot-client.js +2 -9
  41. package/package.json +1 -1
  42. package/dist/contracts/target-assessment-row.d.ts +0 -85
  43. package/dist/contracts/target-assessment-row.js +0 -37
  44. package/dist/contracts/target-dossier.d.ts +0 -12423
  45. package/dist/contracts/target-dossier.js +0 -1282
  46. package/dist/prompts/target-assessment/briefs/executive-recommendation.d.ts +0 -1
  47. package/dist/prompts/target-assessment/briefs/executive-recommendation.js +0 -85
  48. package/dist/prompts/target-assessment/briefs/index.d.ts +0 -4
  49. package/dist/prompts/target-assessment/briefs/index.js +0 -4
  50. package/dist/prompts/target-assessment/briefs/liability-bullets.d.ts +0 -1
  51. package/dist/prompts/target-assessment/briefs/liability-bullets.js +0 -114
  52. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.d.ts +0 -1
  53. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.js +0 -37
  54. package/dist/prompts/target-assessment/briefs/translational-commentary.d.ts +0 -1
  55. package/dist/prompts/target-assessment/briefs/translational-commentary.js +0 -23
  56. package/dist/prompts/target-assessment/drugs-in-class.d.ts +0 -1
  57. package/dist/prompts/target-assessment/drugs-in-class.js +0 -29
  58. package/dist/prompts/target-assessment/investigation/adversarial-critique.d.ts +0 -1
  59. package/dist/prompts/target-assessment/investigation/adversarial-critique.js +0 -67
  60. package/dist/prompts/target-assessment/investigation/claim-reverification.d.ts +0 -1
  61. package/dist/prompts/target-assessment/investigation/claim-reverification.js +0 -49
  62. package/dist/prompts/target-assessment/investigation/index.d.ts +0 -3
  63. package/dist/prompts/target-assessment/investigation/index.js +0 -3
  64. package/dist/prompts/target-assessment/investigation/mechanism-proposal.d.ts +0 -1
  65. package/dist/prompts/target-assessment/investigation/mechanism-proposal.js +0 -49
  66. package/dist/prompts/target-assessment/modulator-triage.d.ts +0 -1
  67. package/dist/prompts/target-assessment/modulator-triage.js +0 -31
  68. package/dist/prompts/target-assessment/off-target-annotator.d.ts +0 -1
  69. package/dist/prompts/target-assessment/off-target-annotator.js +0 -28
  70. package/dist/prompts/target-assessment/tox-voice/core.d.ts +0 -1
  71. package/dist/prompts/target-assessment/tox-voice/core.js +0 -74
  72. package/dist/prompts/target-assessment/tox-voice/critique.d.ts +0 -7
  73. package/dist/prompts/target-assessment/tox-voice/critique.js +0 -109
  74. package/dist/prompts/target-assessment/tox-voice/exemplars.d.ts +0 -8
  75. package/dist/prompts/target-assessment/tox-voice/exemplars.js +0 -24
  76. package/dist/prompts/target-assessment/tox-voice/index.d.ts +0 -4
  77. package/dist/prompts/target-assessment/tox-voice/index.js +0 -4
  78. package/dist/prompts/target-assessment/tox-voice/vocabulary.d.ts +0 -18
  79. package/dist/prompts/target-assessment/tox-voice/vocabulary.js +0 -61
  80. package/dist/state/target-assessments.d.ts +0 -68
  81. package/dist/state/target-assessments.js +0 -222
  82. package/dist/workflows/execute-target-assessment.d.ts +0 -118
  83. package/dist/workflows/execute-target-assessment.js +0 -631
  84. package/dist/workflows/target-assessment/assemblers/index.d.ts +0 -5
  85. package/dist/workflows/target-assessment/assemblers/index.js +0 -4
  86. package/dist/workflows/target-assessment/assemblers/literature.d.ts +0 -281
  87. package/dist/workflows/target-assessment/assemblers/literature.js +0 -971
  88. package/dist/workflows/target-assessment/assemblers/orchestrator.d.ts +0 -118
  89. package/dist/workflows/target-assessment/assemblers/orchestrator.js +0 -945
  90. package/dist/workflows/target-assessment/assemblers/safety.d.ts +0 -374
  91. package/dist/workflows/target-assessment/assemblers/safety.js +0 -1068
  92. package/dist/workflows/target-assessment/assemblers/trials.d.ts +0 -30
  93. package/dist/workflows/target-assessment/assemblers/trials.js +0 -75
  94. package/dist/workflows/target-assessment/collectors/index.d.ts +0 -114
  95. package/dist/workflows/target-assessment/collectors/index.js +0 -538
  96. package/dist/workflows/target-assessment/coverage.d.ts +0 -97
  97. package/dist/workflows/target-assessment/coverage.js +0 -86
  98. package/dist/workflows/target-assessment/decisions/index.d.ts +0 -86
  99. package/dist/workflows/target-assessment/decisions/index.js +0 -127
  100. package/dist/workflows/target-assessment/fanout/index.d.ts +0 -32
  101. package/dist/workflows/target-assessment/fanout/index.js +0 -156
  102. package/dist/workflows/target-assessment/investigation/index.d.ts +0 -97
  103. package/dist/workflows/target-assessment/investigation/index.js +0 -419
  104. package/dist/workflows/target-assessment/lib/approval-precedents.d.ts +0 -73
  105. package/dist/workflows/target-assessment/lib/approval-precedents.js +0 -185
  106. package/dist/workflows/target-assessment/lib/citation-validator.d.ts +0 -46
  107. package/dist/workflows/target-assessment/lib/citation-validator.js +0 -316
  108. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.d.ts +0 -65
  109. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.js +0 -174
  110. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.d.ts +0 -44
  111. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.js +0 -152
  112. package/dist/workflows/target-assessment/lib/compute-derived.d.ts +0 -20
  113. package/dist/workflows/target-assessment/lib/compute-derived.js +0 -261
  114. package/dist/workflows/target-assessment/lib/compute-selectivity.d.ts +0 -15
  115. package/dist/workflows/target-assessment/lib/compute-selectivity.js +0 -18
  116. package/dist/workflows/target-assessment/lib/dedup-modulators.d.ts +0 -37
  117. package/dist/workflows/target-assessment/lib/dedup-modulators.js +0 -157
  118. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.d.ts +0 -17
  119. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.js +0 -100
  120. package/dist/workflows/target-assessment/lib/expression-constants.d.ts +0 -21
  121. package/dist/workflows/target-assessment/lib/expression-constants.js +0 -21
  122. package/dist/workflows/target-assessment/lib/family-complex-supplement.d.ts +0 -20
  123. package/dist/workflows/target-assessment/lib/family-complex-supplement.js +0 -36
  124. package/dist/workflows/target-assessment/lib/fda-label-safety.d.ts +0 -72
  125. package/dist/workflows/target-assessment/lib/fda-label-safety.js +0 -166
  126. package/dist/workflows/target-assessment/lib/heterodimer-filter.d.ts +0 -30
  127. package/dist/workflows/target-assessment/lib/heterodimer-filter.js +0 -44
  128. package/dist/workflows/target-assessment/lib/hpo-organ-map.d.ts +0 -34
  129. package/dist/workflows/target-assessment/lib/hpo-organ-map.js +0 -63
  130. package/dist/workflows/target-assessment/lib/impc-organ-map.d.ts +0 -19
  131. package/dist/workflows/target-assessment/lib/impc-organ-map.js +0 -39
  132. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.d.ts +0 -4
  133. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.js +0 -24
  134. package/dist/workflows/target-assessment/lib/llm-step.d.ts +0 -80
  135. package/dist/workflows/target-assessment/lib/llm-step.js +0 -101
  136. package/dist/workflows/target-assessment/lib/meddra-organ-map.d.ts +0 -40
  137. package/dist/workflows/target-assessment/lib/meddra-organ-map.js +0 -138
  138. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.d.ts +0 -17
  139. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.js +0 -99
  140. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.d.ts +0 -2
  141. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.js +0 -51
  142. package/dist/workflows/target-assessment/lib/regulatory-actions.d.ts +0 -25
  143. package/dist/workflows/target-assessment/lib/regulatory-actions.js +0 -176
  144. package/dist/workflows/target-assessment/lib/safety-corroboration.d.ts +0 -44
  145. package/dist/workflows/target-assessment/lib/safety-corroboration.js +0 -273
  146. package/dist/workflows/target-assessment/lib/structured-llm.d.ts +0 -61
  147. package/dist/workflows/target-assessment/lib/structured-llm.js +0 -102
  148. package/dist/workflows/target-assessment/lib/target-identity-filter.d.ts +0 -59
  149. package/dist/workflows/target-assessment/lib/target-identity-filter.js +0 -95
  150. package/dist/workflows/target-assessment/lib/therapeutic-programs.d.ts +0 -20
  151. package/dist/workflows/target-assessment/lib/therapeutic-programs.js +0 -68
  152. package/dist/workflows/target-assessment/metrics.d.ts +0 -16
  153. package/dist/workflows/target-assessment/metrics.js +0 -30
  154. package/dist/workflows/target-assessment/phase4-assemble.d.ts +0 -3182
  155. package/dist/workflows/target-assessment/phase4-assemble.js +0 -39
  156. package/dist/workflows/target-assessment/phase5-persist.d.ts +0 -59
  157. package/dist/workflows/target-assessment/phase5-persist.js +0 -349
  158. package/dist/workflows/target-assessment/progress-stream.d.ts +0 -75
  159. package/dist/workflows/target-assessment/progress-stream.js +0 -110
  160. package/dist/workflows/target-assessment/progress.d.ts +0 -39
  161. package/dist/workflows/target-assessment/progress.js +0 -77
  162. package/dist/workflows/target-assessment/schemas.d.ts +0 -970
  163. package/dist/workflows/target-assessment/schemas.js +0 -318
  164. package/dist/workflows/target-assessment/steps/collectors/pathways.d.ts +0 -15
  165. package/dist/workflows/target-assessment/steps/collectors/pathways.js +0 -58
  166. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.d.ts +0 -34
  167. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.js +0 -31
  168. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.d.ts +0 -57
  169. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.js +0 -54
  170. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.d.ts +0 -35
  171. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.js +0 -32
  172. package/dist/workflows/target-assessment/steps/fanout/index.d.ts +0 -14
  173. package/dist/workflows/target-assessment/steps/fanout/index.js +0 -10
  174. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.d.ts +0 -29
  175. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.js +0 -29
  176. package/dist/workflows/target-assessment/steps/phase2-aggregate.d.ts +0 -657
  177. package/dist/workflows/target-assessment/steps/phase2-aggregate.js +0 -34
  178. package/dist/workflows/target-assessment/steps/phase3-aggregate.d.ts +0 -806
  179. package/dist/workflows/target-assessment/steps/phase3-aggregate.js +0 -16
  180. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.d.ts +0 -28
  181. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.js +0 -27
  182. package/dist/workflows/target-assessment/sub-workflows/index.d.ts +0 -15
  183. package/dist/workflows/target-assessment/sub-workflows/index.js +0 -11
  184. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.d.ts +0 -41
  185. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.js +0 -12
  186. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.d.ts +0 -41
  187. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.js +0 -12
  188. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.d.ts +0 -37
  189. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.js +0 -12
  190. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.d.ts +0 -66
  191. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.js +0 -12
  192. package/dist/workflows/target-assessment/synthesis/index.d.ts +0 -607
  193. package/dist/workflows/target-assessment/synthesis/index.js +0 -354
  194. package/dist/workflows/target-assessment/synthesis-probes.d.ts +0 -56
  195. package/dist/workflows/target-assessment/synthesis-probes.js +0 -320
@@ -1 +0,0 @@
1
- export declare const executiveRecommendationBrief = "# Section: Executive recommendation\n\nIntegrate the Phase-4 dossier and the per-section synthesis outputs\n(liability bullets, target-organ liabilities trail, translational\ncommentary) into a disposition with cited rationale, key strengths, key\nrisks, and a coverage qualifier.\n\n## Inputs\nYou receive (1) the full Phase-4 dossier and (2) the per-section\nsynthesis outputs as JSON. Cite at least three section paths from the\ndossier in the rationale.\n\n## Approval precedents (provided)\n- FDA approval precedents for the candidate indication are supplied in the\n prompt (see the `## FDA approval precedents` block). For class-level\n disposition framing, cite at least one listed prior approval trajectory\n (approved, withdrawn, or refused) where relevant. Do not assert\n precedents absent from that block.\n\n## Output discipline\n- Disposition is one of pursue / conditional / de-prioritize /\n insufficient_evidence. Confidence is one of high / medium / low.\n- Rationale \u2265 600 chars (the existing length probe enforces this).\n- key_strengths and key_risks must each contain at least one entry\n unless the disposition is insufficient_evidence.\n- coverage_qualifier.sections_consulted must list every section\n referenced in rationale; sections_unavailable must list any section\n with coverage queried_no_data or not_loaded.\n\n## Do NOT (target-attribution discipline)\n- Do NOT cite any clinical trial, trial AE, outcome, or failed-trial\n termination reason unless that row carries\n `attribution.evidence_role: \"supports_target\"` AND\n `eligible_for_toxicology_aggregation: true`. Rows whose attribution\n is `contextual` or `excluded` may be discussed only as coverage gaps\n or background biology, never as clinical safety/efficacy evidence.\n- For every NCT you cite, name the attribution relationship\n (`direct_modulator` or `class_modulator`) and cite the row's\n `attribution.basis[]` source. Biomarker-only rows\n (`target_biomarker`, `pathway_biomarker`) support biological\n plausibility only; they do not support tractability, safety, or\n efficacy claims.\n- Do NOT cite trial AEs, efficacy, or termination reasons from\n `excluded_rows[]` as evidence of the assessment target's drug\n behaviour. Those trials are attributed elsewhere \u2014 often to a related\n receptor (e.g., CGRP-R/CALCRL for a CALCR assessment) \u2014 and tell you\n nothing about the assessment target itself.\n- Do NOT interpret a Reactome pathway containing the gene symbol as\n evidence of drug-target binding. Reactome pathways list participating\n genes, not drug interactions. Drug-binding evidence comes from\n `drug_interactions.data.rows` and\n `safety_profile.off_target_panel.data.rows` only.\n- Do NOT cite a dossier path for a fact that does not appear at that\n path. If the fact comes from the supplied approval precedents (the\n `## FDA approval precedents` block),\n add it to `external_citations[]` with id, kind, retrieved_via, and\n excerpt, and reference it inline as `[ID]`.\n- Do NOT collapse FAERS signals across modulators that share an active\n substance. The deduplicated\n `safety_profile.faers.data.per_modulator` is the source of truth for\n distinct-substance counts.\n- Do NOT surface organ-level liability claims (kidney, CNS, hepatic,\n cardiac, etc.) unless they appear in\n `safety_profile.target_organ_liabilities.data.rows`. That section is the\n probe-validated source for organ claims; any organ liability the\n probe rejected does not belong in `key_risks`.\n- Do NOT recommend a between-cofactor selectivity margin against rows in\n `safety_profile.off_target_panel.data.excluded_rows[]` that carry\n `relationship: \"obligate_cofactor\"`. These rows represent the\n assessment target paired with a different obligate accessory protein;\n the gene product is the same and a cofactor-partner selectivity\n requirement is not pharmacologically attainable. Frame any clinical\n consequence of the cofactor partner (e.g., nausea, satiety, glucose\n modulation for AMY3 on a CALCR assessment) as a context-dependent\n on-target effect tied to tissue co-expression, not as an off-target\n liability to be selected against.\n- Do NOT use the erroneous abbreviation \"IND-A\" or any \"IND\" + \"A\" variant as shorthand for IND. The FDA's term for an investigational new drug submission is \"IND\" (Investigational New Drug Application). When citing an IND-enabling regulatory expectation, write \"IND-enabling package\", \"IND filing\", or \"FDA IND submission\" \u2014 not a four-letter acronym.\n- Do NOT phrase a mechanistic claim about a brain region's involvement in a behaviour or AE without verifying that the region in your rationale matches the region in the dossier source path. The nucleus tractus solitarius is brainstem, not hypothalamus; conflating them in the recommendation undermines the rationale's credibility with toxicology reviewers.\n\n### Citation discipline\n\nWhen citing a PMID inside a `key_risks` or `liability_bullet` entry:\n1. The cited paper's stated conclusion MUST be directionally consistent with the way it is cited. If the paper concluded that an exposure *reduced* a risk, do NOT cite it as evidence FOR that risk \u2014 even if it was historically discussed alongside the risk in regulatory reviews.\n2. When unsure of a paper's directional conclusion, omit the citation and use a different evidence source from the dossier body.\n3. Every NCT cited must appear in the dossier's clinical_development.trials, failed_trials, or analytics.discovery_trials sections AND must have an intervention referencing a drug from drug_interactions. NCTs whose interventions are outside the on-target class (e.g., SGLT2 inhibitors in a GLP-1R dossier) must not be cited.";
@@ -1,85 +0,0 @@
1
- export const executiveRecommendationBrief = `# Section: Executive recommendation
2
-
3
- Integrate the Phase-4 dossier and the per-section synthesis outputs
4
- (liability bullets, target-organ liabilities trail, translational
5
- commentary) into a disposition with cited rationale, key strengths, key
6
- risks, and a coverage qualifier.
7
-
8
- ## Inputs
9
- You receive (1) the full Phase-4 dossier and (2) the per-section
10
- synthesis outputs as JSON. Cite at least three section paths from the
11
- dossier in the rationale.
12
-
13
- ## Approval precedents (provided)
14
- - FDA approval precedents for the candidate indication are supplied in the
15
- prompt (see the \`## FDA approval precedents\` block). For class-level
16
- disposition framing, cite at least one listed prior approval trajectory
17
- (approved, withdrawn, or refused) where relevant. Do not assert
18
- precedents absent from that block.
19
-
20
- ## Output discipline
21
- - Disposition is one of pursue / conditional / de-prioritize /
22
- insufficient_evidence. Confidence is one of high / medium / low.
23
- - Rationale ≥ 600 chars (the existing length probe enforces this).
24
- - key_strengths and key_risks must each contain at least one entry
25
- unless the disposition is insufficient_evidence.
26
- - coverage_qualifier.sections_consulted must list every section
27
- referenced in rationale; sections_unavailable must list any section
28
- with coverage queried_no_data or not_loaded.
29
-
30
- ## Do NOT (target-attribution discipline)
31
- - Do NOT cite any clinical trial, trial AE, outcome, or failed-trial
32
- termination reason unless that row carries
33
- \`attribution.evidence_role: "supports_target"\` AND
34
- \`eligible_for_toxicology_aggregation: true\`. Rows whose attribution
35
- is \`contextual\` or \`excluded\` may be discussed only as coverage gaps
36
- or background biology, never as clinical safety/efficacy evidence.
37
- - For every NCT you cite, name the attribution relationship
38
- (\`direct_modulator\` or \`class_modulator\`) and cite the row's
39
- \`attribution.basis[]\` source. Biomarker-only rows
40
- (\`target_biomarker\`, \`pathway_biomarker\`) support biological
41
- plausibility only; they do not support tractability, safety, or
42
- efficacy claims.
43
- - Do NOT cite trial AEs, efficacy, or termination reasons from
44
- \`excluded_rows[]\` as evidence of the assessment target's drug
45
- behaviour. Those trials are attributed elsewhere — often to a related
46
- receptor (e.g., CGRP-R/CALCRL for a CALCR assessment) — and tell you
47
- nothing about the assessment target itself.
48
- - Do NOT interpret a Reactome pathway containing the gene symbol as
49
- evidence of drug-target binding. Reactome pathways list participating
50
- genes, not drug interactions. Drug-binding evidence comes from
51
- \`drug_interactions.data.rows\` and
52
- \`safety_profile.off_target_panel.data.rows\` only.
53
- - Do NOT cite a dossier path for a fact that does not appear at that
54
- path. If the fact comes from the supplied approval precedents (the
55
- \`## FDA approval precedents\` block),
56
- add it to \`external_citations[]\` with id, kind, retrieved_via, and
57
- excerpt, and reference it inline as \`[ID]\`.
58
- - Do NOT collapse FAERS signals across modulators that share an active
59
- substance. The deduplicated
60
- \`safety_profile.faers.data.per_modulator\` is the source of truth for
61
- distinct-substance counts.
62
- - Do NOT surface organ-level liability claims (kidney, CNS, hepatic,
63
- cardiac, etc.) unless they appear in
64
- \`safety_profile.target_organ_liabilities.data.rows\`. That section is the
65
- probe-validated source for organ claims; any organ liability the
66
- probe rejected does not belong in \`key_risks\`.
67
- - Do NOT recommend a between-cofactor selectivity margin against rows in
68
- \`safety_profile.off_target_panel.data.excluded_rows[]\` that carry
69
- \`relationship: "obligate_cofactor"\`. These rows represent the
70
- assessment target paired with a different obligate accessory protein;
71
- the gene product is the same and a cofactor-partner selectivity
72
- requirement is not pharmacologically attainable. Frame any clinical
73
- consequence of the cofactor partner (e.g., nausea, satiety, glucose
74
- modulation for AMY3 on a CALCR assessment) as a context-dependent
75
- on-target effect tied to tissue co-expression, not as an off-target
76
- liability to be selected against.
77
- - Do NOT use the erroneous abbreviation "IND-A" or any "IND" + "A" variant as shorthand for IND. The FDA's term for an investigational new drug submission is "IND" (Investigational New Drug Application). When citing an IND-enabling regulatory expectation, write "IND-enabling package", "IND filing", or "FDA IND submission" — not a four-letter acronym.
78
- - Do NOT phrase a mechanistic claim about a brain region's involvement in a behaviour or AE without verifying that the region in your rationale matches the region in the dossier source path. The nucleus tractus solitarius is brainstem, not hypothalamus; conflating them in the recommendation undermines the rationale's credibility with toxicology reviewers.
79
-
80
- ### Citation discipline
81
-
82
- When citing a PMID inside a \`key_risks\` or \`liability_bullet\` entry:
83
- 1. The cited paper's stated conclusion MUST be directionally consistent with the way it is cited. If the paper concluded that an exposure *reduced* a risk, do NOT cite it as evidence FOR that risk — even if it was historically discussed alongside the risk in regulatory reviews.
84
- 2. When unsure of a paper's directional conclusion, omit the citation and use a different evidence source from the dossier body.
85
- 3. Every NCT cited must appear in the dossier's clinical_development.trials, failed_trials, or analytics.discovery_trials sections AND must have an intervention referencing a drug from drug_interactions. NCTs whose interventions are outside the on-target class (e.g., SGLT2 inhibitors in a GLP-1R dossier) must not be cited.`;
@@ -1,4 +0,0 @@
1
- export { liabilityBulletsBrief } from "./liability-bullets.js";
2
- export { targetOrganLiabilitiesBrief } from "./target-organ-liabilities.js";
3
- export { translationalCommentaryBrief } from "./translational-commentary.js";
4
- export { executiveRecommendationBrief } from "./executive-recommendation.js";
@@ -1,4 +0,0 @@
1
- export { liabilityBulletsBrief } from "./liability-bullets.js";
2
- export { targetOrganLiabilitiesBrief } from "./target-organ-liabilities.js";
3
- export { translationalCommentaryBrief } from "./translational-commentary.js";
4
- export { executiveRecommendationBrief } from "./executive-recommendation.js";
@@ -1 +0,0 @@
1
- export declare const liabilityBulletsBrief = "# Section: Liability bullets\n\nWrite evidence-cited liability bullets in toxicologist voice. Each bullet\ncovers one organ-or-axis with severity, the supporting evidence pointer,\nand a rationale that names the mechanism hypothesis.\n\n## Inputs\nYou receive the full Phase-4 dossier as JSON. Cite section paths and\ncounts (FAERS n=NN, IMPC p=...) verbatim from the dossier.\n\n## Approval precedents (provided)\n- FDA approval precedents for the target's candidate indication are\n supplied in the prompt \u2014 queried once from openFDA / Drugs@FDA (see the\n `## FDA approval precedents` block). For class precedents not present\n in the dossier, cite a listed NDA/BLA application number + label section.\n Do not assert precedents absent from that block and the dossier.\n\n## Output discipline\n- Severity is one of high / medium / low.\n- Each rationale must include either a hedge phrase, a literature\n citation, or a regulatory reference for every efficacy/safety claim.\n- Do not fabricate counts. If the dossier lacks evidence, mark it\n explicitly (\"the data do not support a conclusion\") rather than\n generating filler.\n- Trial AEs, failed-trial reasons, and outcomes may be used as\n toxicology evidence only when the row has\n `eligible_for_toxicology_aggregation: true` and\n `attribution.evidence_role: \"supports_target\"`. Rows marked\n `contextual` or `excluded` are coverage/context only; do not cite\n them as safety evidence.\n\n## Category vocabulary\nEach bullet's `category` MUST be exactly one of:\n- `fatal_post_market` \u2014 class-defining contraindication / fatal\n post-market signal (e.g., anaphylaxis-with-death on a class label).\n When `safety_profile.regulatory_actions.coverage === \"available\"`, every\n row in that array is a confirmed regulatory event (EMA referral, FDA\n safety communication, REMS, withdrawal). Emit one\n `fatal_post_market` bullet per row, naming the `agency`, `action_date`,\n and quoting the `finding` verbatim. Do NOT phrase regulatory\n actions as inferences from FAERS counts.\n- `class_liability` \u2014 formal class-precedent organ liability meeting\n the 3-drug threshold (sourced from\n `safety_profile.class_precedent.data.per_organ`).\n- `off_target_safety` \u2014 selectivity-driven liability at a related\n receptor (sourced from\n `safety_profile.off_target_panel.data.rows`).\n- `high_safety_organ_expression` \u2014 expression-driven on-target\n liability at a safety-relevant tissue (sourced from\n `off_tissue_risk.data.rows` and the\n `safety_profile.target_organ_liabilities.data.rows` probe).\n- `broad_expression` \u2014 expression spread across many tissues without a\n single-organ driver (sourced from\n `derived.liability_summary.expression_breadth`).\n- `other` \u2014 uncategorisable safety observation worth flagging; use\n only when none of the above fit.\n\n## Obligate-cofactor rows\n\n`safety_profile.off_target_panel.data.excluded_rows[]` may contain rows\nwith `relationship: \"obligate_cofactor\"`. These represent the\nassessment target heterodimerised with a different obligate accessory\nprotein (e.g., a CALCR/RAMP3 entry on a CALCR assessment is the AMY3\namylin receptor \u2014 same gene product, different RAMP partner).\n\n- Do NOT generate an `off_target_safety` liability bullet for these\n rows. Selectivity between cofactor partners of the same gene product\n is not pharmacologically attainable; the protein is the same.\n- Do NOT recommend a between-cofactor selectivity margin (e.g., \"\u2265N-fold\n over <gene>/RAMP<N>\") against an obligate-cofactor row. The\n pharmacology is context-dependent on cofactor co-expression in the\n target tissue, which is an on-target property, not a selectivity\n property.\n- If the row carries a `clinical_consequence` annotation (e.g.,\n satiety, nausea), fold that consequence into an\n `high_safety_organ_expression` or `broad_expression` bullet where\n the cofactor's tissue distribution makes the engagement clinically\n relevant. Do not invent a selectivity liability.\n\n## Mechanism-claim discipline\n\nWhen stating a mechanism for an adverse-event signal, the mechanism must operate at the same biological scale as the AE.\n\n- Do NOT cite developmental, regenerative, or homeostatic biology (e.g., satellite-cell quiescence, stem-cell niche maintenance, tissue homeostasis) as the mechanism for a clinical AE signal like arthralgia, myalgia, or fatigue. Those papers describe tissue-level processes, not AE-producing pathways. If the only mechanistic candidate in the dossier is at the tissue-homeostasis level, omit the mechanism claim and report the AE signal alone (the rationale can still cite the AE prevalence number).\n\n- Respect anatomical boundaries. The nucleus tractus solitarius (NTS) is brainstem, not hypothalamus. The nucleus accumbens is basal ganglia, not hypothalamus. The amygdala is subcortical, not hypothalamus. When binning a CNS expression signal under a region category, the region in the rationale must match the region in the dossier source path. Do not conflate \"neural circuit involving X\" with \"expressed in X\" \u2014 the latter is the only on-target claim supported by tissue expression data.\n\n- For `category: \"high_safety_organ_expression\"` bullets, the cited brain region must be one of: hypothalamus, brainstem (medulla / pons / midbrain), cerebellum, basal ganglia (caudate / putamen / nucleus accumbens / globus pallidus), thalamus, hippocampus, amygdala, or cortex (frontal / temporal / parietal / occipital / cingulate). Do not invent new region categories.\n\n### Source counters for bullet rationale\n\nEach bullet rationale MUST cite at least one numeric counter from one of:\n - safety_profile.faers.data.top_signals[].report_count (preferred when available)\n - safety_profile.faers.data.per_modulator[].report_count\n - safety_profile.class_precedent.data.per_organ[].top_aes[].report_count (use when target-level FAERS is queried_no_data)\n - safety_profile.trial_aes.data.serious[].incidence_pct / non_serious[].incidence_pct\n - safety_profile.off_target_panel.data.rows[].pchembl with the off_target_name\nA bullet that cites a numeric counter from class_precedent.per_organ.top_aes.report_count is valid;\ndo NOT delete it for \"no source\" if a class_precedent counter is present.\n\n### Tissue-expression unit discipline\n\nWhen citing tissue-expression values, ALWAYS use the unit string from `reference_biology.normal_tissue_expression.data.unit` (one of: \"tpm\",\n\"ntpm\", \"consensus_normalized\"). Do not assume \"TPM\" \u2014 Open Targets'\nhpa_consensus source emits \"consensus_normalized\" (nTPM-like).\nRender as e.g. \"217 nTPM\" or \"217 (consensus_normalized)\", never \"217 TPM\"\nunless the unit field is \"tpm\".\n\n### Citation discipline\n\nWhen citing a PMID inside a `key_risks` or `liability_bullet` entry:\n1. The cited paper's stated conclusion MUST be directionally consistent with the way it is cited. If the paper concluded that an exposure *reduced* a risk, do NOT cite it as evidence FOR that risk \u2014 even if it was historically discussed alongside the risk in regulatory reviews.\n2. When unsure of a paper's directional conclusion, omit the citation and use a different evidence source from the dossier body.\n3. Every NCT cited must appear in the dossier's clinical_development.trials, failed_trials, or analytics.discovery_trials sections AND must have an intervention referencing a drug from drug_interactions. NCTs whose interventions are outside the on-target class (e.g., SGLT2 inhibitors in a GLP-1R dossier) must not be cited.";
@@ -1,114 +0,0 @@
1
- export const liabilityBulletsBrief = `# Section: Liability bullets
2
-
3
- Write evidence-cited liability bullets in toxicologist voice. Each bullet
4
- covers one organ-or-axis with severity, the supporting evidence pointer,
5
- and a rationale that names the mechanism hypothesis.
6
-
7
- ## Inputs
8
- You receive the full Phase-4 dossier as JSON. Cite section paths and
9
- counts (FAERS n=NN, IMPC p=...) verbatim from the dossier.
10
-
11
- ## Approval precedents (provided)
12
- - FDA approval precedents for the target's candidate indication are
13
- supplied in the prompt — queried once from openFDA / Drugs@FDA (see the
14
- \`## FDA approval precedents\` block). For class precedents not present
15
- in the dossier, cite a listed NDA/BLA application number + label section.
16
- Do not assert precedents absent from that block and the dossier.
17
-
18
- ## Output discipline
19
- - Severity is one of high / medium / low.
20
- - Each rationale must include either a hedge phrase, a literature
21
- citation, or a regulatory reference for every efficacy/safety claim.
22
- - Do not fabricate counts. If the dossier lacks evidence, mark it
23
- explicitly ("the data do not support a conclusion") rather than
24
- generating filler.
25
- - Trial AEs, failed-trial reasons, and outcomes may be used as
26
- toxicology evidence only when the row has
27
- \`eligible_for_toxicology_aggregation: true\` and
28
- \`attribution.evidence_role: "supports_target"\`. Rows marked
29
- \`contextual\` or \`excluded\` are coverage/context only; do not cite
30
- them as safety evidence.
31
-
32
- ## Category vocabulary
33
- Each bullet's \`category\` MUST be exactly one of:
34
- - \`fatal_post_market\` — class-defining contraindication / fatal
35
- post-market signal (e.g., anaphylaxis-with-death on a class label).
36
- When \`safety_profile.regulatory_actions.coverage === "available"\`, every
37
- row in that array is a confirmed regulatory event (EMA referral, FDA
38
- safety communication, REMS, withdrawal). Emit one
39
- \`fatal_post_market\` bullet per row, naming the \`agency\`, \`action_date\`,
40
- and quoting the \`finding\` verbatim. Do NOT phrase regulatory
41
- actions as inferences from FAERS counts.
42
- - \`class_liability\` — formal class-precedent organ liability meeting
43
- the 3-drug threshold (sourced from
44
- \`safety_profile.class_precedent.data.per_organ\`).
45
- - \`off_target_safety\` — selectivity-driven liability at a related
46
- receptor (sourced from
47
- \`safety_profile.off_target_panel.data.rows\`).
48
- - \`high_safety_organ_expression\` — expression-driven on-target
49
- liability at a safety-relevant tissue (sourced from
50
- \`off_tissue_risk.data.rows\` and the
51
- \`safety_profile.target_organ_liabilities.data.rows\` probe).
52
- - \`broad_expression\` — expression spread across many tissues without a
53
- single-organ driver (sourced from
54
- \`derived.liability_summary.expression_breadth\`).
55
- - \`other\` — uncategorisable safety observation worth flagging; use
56
- only when none of the above fit.
57
-
58
- ## Obligate-cofactor rows
59
-
60
- \`safety_profile.off_target_panel.data.excluded_rows[]\` may contain rows
61
- with \`relationship: "obligate_cofactor"\`. These represent the
62
- assessment target heterodimerised with a different obligate accessory
63
- protein (e.g., a CALCR/RAMP3 entry on a CALCR assessment is the AMY3
64
- amylin receptor — same gene product, different RAMP partner).
65
-
66
- - Do NOT generate an \`off_target_safety\` liability bullet for these
67
- rows. Selectivity between cofactor partners of the same gene product
68
- is not pharmacologically attainable; the protein is the same.
69
- - Do NOT recommend a between-cofactor selectivity margin (e.g., "≥N-fold
70
- over <gene>/RAMP<N>") against an obligate-cofactor row. The
71
- pharmacology is context-dependent on cofactor co-expression in the
72
- target tissue, which is an on-target property, not a selectivity
73
- property.
74
- - If the row carries a \`clinical_consequence\` annotation (e.g.,
75
- satiety, nausea), fold that consequence into an
76
- \`high_safety_organ_expression\` or \`broad_expression\` bullet where
77
- the cofactor's tissue distribution makes the engagement clinically
78
- relevant. Do not invent a selectivity liability.
79
-
80
- ## Mechanism-claim discipline
81
-
82
- When stating a mechanism for an adverse-event signal, the mechanism must operate at the same biological scale as the AE.
83
-
84
- - Do NOT cite developmental, regenerative, or homeostatic biology (e.g., satellite-cell quiescence, stem-cell niche maintenance, tissue homeostasis) as the mechanism for a clinical AE signal like arthralgia, myalgia, or fatigue. Those papers describe tissue-level processes, not AE-producing pathways. If the only mechanistic candidate in the dossier is at the tissue-homeostasis level, omit the mechanism claim and report the AE signal alone (the rationale can still cite the AE prevalence number).
85
-
86
- - Respect anatomical boundaries. The nucleus tractus solitarius (NTS) is brainstem, not hypothalamus. The nucleus accumbens is basal ganglia, not hypothalamus. The amygdala is subcortical, not hypothalamus. When binning a CNS expression signal under a region category, the region in the rationale must match the region in the dossier source path. Do not conflate "neural circuit involving X" with "expressed in X" — the latter is the only on-target claim supported by tissue expression data.
87
-
88
- - For \`category: "high_safety_organ_expression"\` bullets, the cited brain region must be one of: hypothalamus, brainstem (medulla / pons / midbrain), cerebellum, basal ganglia (caudate / putamen / nucleus accumbens / globus pallidus), thalamus, hippocampus, amygdala, or cortex (frontal / temporal / parietal / occipital / cingulate). Do not invent new region categories.
89
-
90
- ### Source counters for bullet rationale
91
-
92
- Each bullet rationale MUST cite at least one numeric counter from one of:
93
- - safety_profile.faers.data.top_signals[].report_count (preferred when available)
94
- - safety_profile.faers.data.per_modulator[].report_count
95
- - safety_profile.class_precedent.data.per_organ[].top_aes[].report_count (use when target-level FAERS is queried_no_data)
96
- - safety_profile.trial_aes.data.serious[].incidence_pct / non_serious[].incidence_pct
97
- - safety_profile.off_target_panel.data.rows[].pchembl with the off_target_name
98
- A bullet that cites a numeric counter from class_precedent.per_organ.top_aes.report_count is valid;
99
- do NOT delete it for "no source" if a class_precedent counter is present.
100
-
101
- ### Tissue-expression unit discipline
102
-
103
- When citing tissue-expression values, ALWAYS use the unit string from \`reference_biology.normal_tissue_expression.data.unit\` (one of: "tpm",
104
- "ntpm", "consensus_normalized"). Do not assume "TPM" — Open Targets'
105
- hpa_consensus source emits "consensus_normalized" (nTPM-like).
106
- Render as e.g. "217 nTPM" or "217 (consensus_normalized)", never "217 TPM"
107
- unless the unit field is "tpm".
108
-
109
- ### Citation discipline
110
-
111
- When citing a PMID inside a \`key_risks\` or \`liability_bullet\` entry:
112
- 1. The cited paper's stated conclusion MUST be directionally consistent with the way it is cited. If the paper concluded that an exposure *reduced* a risk, do NOT cite it as evidence FOR that risk — even if it was historically discussed alongside the risk in regulatory reviews.
113
- 2. When unsure of a paper's directional conclusion, omit the citation and use a different evidence source from the dossier body.
114
- 3. Every NCT cited must appear in the dossier's clinical_development.trials, failed_trials, or analytics.discovery_trials sections AND must have an intervention referencing a drug from drug_interactions. NCTs whose interventions are outside the on-target class (e.g., SGLT2 inhibitors in a GLP-1R dossier) must not be cited.`;
@@ -1 +0,0 @@
1
- export declare const targetOrganLiabilitiesBrief: string;
@@ -1,37 +0,0 @@
1
- import { ORGAN_SYSTEMS } from "../../../contracts/organ-system.js";
2
- // Interpolated rather than restated, so the prompt cannot name an organ the
3
- // schema will reject.
4
- const organTokens = ORGAN_SYSTEMS.join(", ");
5
- export const targetOrganLiabilitiesBrief = `# Section: Target-organ liabilities (audit trail)
6
-
7
- For each implicated organ system, write a per-organ trail that connects
8
- genetic, expression, FAERS, and class-precedent evidence to a stated
9
- mechanism hypothesis.
10
-
11
- ## Inputs
12
- You receive the full Phase-4 dossier as JSON. Cite section paths and
13
- counts verbatim. The \`organ\` field of every row MUST be exactly one of
14
- these tokens: ${organTokens}. Anything else is rejected. Trail prose may
15
- use the reader-facing name for that organ; the \`organ\` field may not.
16
-
17
- ## Approval precedents (provided)
18
- - FDA approval precedents for the candidate indication are supplied in the
19
- prompt (see the \`## FDA approval precedents\` block). For class
20
- precedents withdrawn or labelled for the same liability, cite a listed
21
- Drugs@FDA NDA/BLA §<section>. Do not assert precedents absent from that block.
22
-
23
- ## Output discipline
24
- - Trail format is study-summary cadence: claim, evidence with counts,
25
- qualifier on human relevance.
26
- - \`severity\` is your own read of the liability for that organ — \`high\`,
27
- \`medium\`, or \`low\` — and must follow from the trail you wrote.
28
- - Cite a PMID inline (\`PMID:12345678\`) for every literature claim in the
29
- trail; a trail that cites none is recorded as having no citable support.
30
- - Mechanism hypothesis can be null if the data do not support one — say
31
- so rather than guessing.
32
- - Trial AEs, failed-trial reasons, and outcomes may be used as
33
- organ-liability evidence only when the row has
34
- \`eligible_for_toxicology_aggregation: true\` and
35
- \`attribution.evidence_role: "supports_target"\`. Rows marked
36
- \`contextual\` or \`excluded\` are coverage/context only; do not cite
37
- them as safety evidence.`;
@@ -1 +0,0 @@
1
- export declare const translationalCommentaryBrief = "# Section: Translational commentary\n\nFor each translational topic (KO phenotype, expression translation,\norgan-system match, family context), write commentary that names the\npreclinical \u2192 clinical bridge explicitly and qualifies its translatability.\n\n## Inputs\nYou receive the full Phase-4 dossier as JSON. Tissue and species names\nmust be cited literally from the dossier \u2014 no fabricated or generic\nsubstitutes (\"rodent\", \"mouse model\" without further detail).\n\n## Approval precedents (provided)\n- FDA approval precedents for the candidate indication are supplied in the\n prompt (see the `## FDA approval precedents` block). Precedents that\n translated cleanly (or did not) from the same preclinical signal are\n valuable when framing a translational claim; cite a listed NDA/BLA where\n relevant. Do not assert precedents absent from that block.\n\n## Output discipline\n- Every claim about human relevance carries a hedge or a citation.\n- Do not generate generic translational commentary; if the dossier's\n evidence does not support a translational bridge, mark the row as\n inconclusive and explain why.";
@@ -1,23 +0,0 @@
1
- export const translationalCommentaryBrief = `# Section: Translational commentary
2
-
3
- For each translational topic (KO phenotype, expression translation,
4
- organ-system match, family context), write commentary that names the
5
- preclinical → clinical bridge explicitly and qualifies its translatability.
6
-
7
- ## Inputs
8
- You receive the full Phase-4 dossier as JSON. Tissue and species names
9
- must be cited literally from the dossier — no fabricated or generic
10
- substitutes ("rodent", "mouse model" without further detail).
11
-
12
- ## Approval precedents (provided)
13
- - FDA approval precedents for the candidate indication are supplied in the
14
- prompt (see the \`## FDA approval precedents\` block). Precedents that
15
- translated cleanly (or did not) from the same preclinical signal are
16
- valuable when framing a translational claim; cite a listed NDA/BLA where
17
- relevant. Do not assert precedents absent from that block.
18
-
19
- ## Output discipline
20
- - Every claim about human relevance carries a hedge or a citation.
21
- - Do not generate generic translational commentary; if the dossier's
22
- evidence does not support a translational bridge, mark the row as
23
- inconclusive and explain why.`;
@@ -1 +0,0 @@
1
- export declare const drugsInClassPrompt = "# Drugs-in-class agent\n\nYou identify the \"drugs-in-class\" set for \u00A72.6.6 (class precedent / class liability). These are clinically advanced drugs (Phase 2+) that hit the same target as the dossier's primary target. The downstream pipeline runs per-drug FAERS rollups to detect class-level toxicities.\n\n## Inputs\n\n- The resolved target (gene symbol, ChEMBL target id).\n- The Phase-1 ChEMBL modulator set.\n\n## Decision rules\n\n1. **Include only drugs at max_phase \u2265 2.** Anything earlier in development is too noisy for class-precedent analysis.\n2. **Resolve generic name.** Use ChEMBL's `preferredName`; if absent, fall back to the molecule's most-common synonym in the input.\n3. **Deduplicate by canonical name.** Merge rows whose preferred names match case-insensitively.\n4. **Drop drugs without a generic name** \u2014 FAERS lookups are keyed on generic name and unnamed entries cannot contribute.\n5. **Cap the class at 50.** If exceeded, keep the highest-phase drugs first, then the most recently approved.\n\n## Output\n\nReturn `{ drugs: <array of drug rows>, total: <int>, truncated: <bool> }` where each row has:\n`moleculeChemblId`, `preferredName`, `maxPhase`, `firstApproval` (number|null), `moleculeType` (string|null), `sources` (array \u2014 typically `[\"chembl\"]` today; the schema permits `\"dgidb\"` and `\"drugbank\"` for forward-compatibility but those collectors are not yet wired).\n\n## Anti-patterns\n\n- Do NOT call any tools \u2014 pre-fetched cross-references are supplied.\n- Do NOT include preclinical molecules.\n- Do NOT include the dossier target itself in the \"drugs\" \u2014 the class is the modulator class, not the target.\n- Do NOT speculate about whether two molecules are \"the same\" beyond exact-name matching; canonical id is authoritative.\n";
@@ -1,29 +0,0 @@
1
- export const drugsInClassPrompt = `# Drugs-in-class agent
2
-
3
- You identify the "drugs-in-class" set for §2.6.6 (class precedent / class liability). These are clinically advanced drugs (Phase 2+) that hit the same target as the dossier's primary target. The downstream pipeline runs per-drug FAERS rollups to detect class-level toxicities.
4
-
5
- ## Inputs
6
-
7
- - The resolved target (gene symbol, ChEMBL target id).
8
- - The Phase-1 ChEMBL modulator set.
9
-
10
- ## Decision rules
11
-
12
- 1. **Include only drugs at max_phase ≥ 2.** Anything earlier in development is too noisy for class-precedent analysis.
13
- 2. **Resolve generic name.** Use ChEMBL's \`preferredName\`; if absent, fall back to the molecule's most-common synonym in the input.
14
- 3. **Deduplicate by canonical name.** Merge rows whose preferred names match case-insensitively.
15
- 4. **Drop drugs without a generic name** — FAERS lookups are keyed on generic name and unnamed entries cannot contribute.
16
- 5. **Cap the class at 50.** If exceeded, keep the highest-phase drugs first, then the most recently approved.
17
-
18
- ## Output
19
-
20
- Return \`{ drugs: <array of drug rows>, total: <int>, truncated: <bool> }\` where each row has:
21
- \`moleculeChemblId\`, \`preferredName\`, \`maxPhase\`, \`firstApproval\` (number|null), \`moleculeType\` (string|null), \`sources\` (array — typically \`["chembl"]\` today; the schema permits \`"dgidb"\` and \`"drugbank"\` for forward-compatibility but those collectors are not yet wired).
22
-
23
- ## Anti-patterns
24
-
25
- - Do NOT call any tools — pre-fetched cross-references are supplied.
26
- - Do NOT include preclinical molecules.
27
- - Do NOT include the dossier target itself in the "drugs" — the class is the modulator class, not the target.
28
- - Do NOT speculate about whether two molecules are "the same" beyond exact-name matching; canonical id is authoritative.
29
- `;
@@ -1 +0,0 @@
1
- export declare const adversarialCritiquePrompt = "You are the adversarial critic in a target-assessment claim investigation.\n\nYou are handed one organ liability claim about an assessed target, the mechanism\nproposed for it, and the evidence the assessment collected for that organ. Your\njob is to argue that the claim does NOT hold.\n\nYou are not a reviewer and you are not a second opinion. Nobody is asking you\nwhether the claim looks reasonable. Build the strongest available case against\nit, and then say how strong that case actually turned out to be.\n\n## Where a claim breaks\n\nWork through the ways a corroborated organ signal can still be wrong:\n\n- **Correlated sources.** Several sources agreeing is only evidence when they are\n independent. Curated databases routinely re-import the same primary study.\n- **Species and model.** A knockout phenotype in a mouse is not a human organ\n liability, and a whole-body knockout is not pharmacological inhibition.\n- **Confounded clinical signal.** Adverse events attributed to a drug can belong\n to the indication, the comorbidity, the co-medication, or the trial population.\n- **Expression is not consequence.** Presence in a tissue does not establish that\n modulating the target there produces harm.\n- **Wrong scale.** A mechanism drawn from developmental or homeostatic biology\n does not explain an acute clinical event.\n- **Direction.** A cited paper may conclude the opposite of the way it is used.\n- **Better explanation.** Something other than the target may account for the\n signal \u2014 an off-target, a metabolite, a class effect, a formulation.\n\n## How to work\n\nSearch the literature for records that would disconfirm the claim: contradicting\nfindings, negative results, reanalyses, populations where the effect is absent.\nUse the tools you were given. Read enough of a hit to know what it concluded\nbefore you cite it \u2014 a title is not a conclusion.\n\nIf a search returns nothing useful, that is information: it means the objection\nyou were building has no published support, and you should say that rather than\nassert it anyway.\n\n## Finishing\n\nReport your outcome by calling `record_critique` exactly once. Prose replies are\ndiscarded \u2014 a critique that is not recorded through that tool did not happen.\n\nIts `support` carries your counter-evidence:\n\n- Use `scored` only with records you actually retrieved, each carrying a real\n publication identifier, digital object identifier, or accession.\n- Use `unknown` with a one-line reason whenever you could not find such a\n record. This is a complete and expected answer, and it is always the right one\n when the alternative is a citation you are not sure of. An objection with\n unknown support is still recorded and still read.\n\n## Do NOT\n\n- Do NOT endorse the claim. If the case against it is weak, say the case is weak\n \u2014 do not convert your turn into a confirmation.\n- Do NOT invent a publication identifier, accession, or trial number, and do not\n cite one from memory that you did not retrieve in this run.\n- Do NOT report support as `scored` while noting in the objection that the\n evidence is indirect. Indirect is `unknown` with that as the reason.\n- Do NOT object on grounds you cannot state concretely. \"The evidence is limited\"\n is not an objection; \"the three contributing sources all trace to one 2011\n curation of the same cohort\" is.\n- Do NOT raise an objection about a different organ than the one you were given.\n- Do NOT assume anything about what ran before you or what will run after, and do\n not ask for more context \u2014 argue from what you were handed plus what you find.";
@@ -1,67 +0,0 @@
1
- export const adversarialCritiquePrompt = `You are the adversarial critic in a target-assessment claim investigation.
2
-
3
- You are handed one organ liability claim about an assessed target, the mechanism
4
- proposed for it, and the evidence the assessment collected for that organ. Your
5
- job is to argue that the claim does NOT hold.
6
-
7
- You are not a reviewer and you are not a second opinion. Nobody is asking you
8
- whether the claim looks reasonable. Build the strongest available case against
9
- it, and then say how strong that case actually turned out to be.
10
-
11
- ## Where a claim breaks
12
-
13
- Work through the ways a corroborated organ signal can still be wrong:
14
-
15
- - **Correlated sources.** Several sources agreeing is only evidence when they are
16
- independent. Curated databases routinely re-import the same primary study.
17
- - **Species and model.** A knockout phenotype in a mouse is not a human organ
18
- liability, and a whole-body knockout is not pharmacological inhibition.
19
- - **Confounded clinical signal.** Adverse events attributed to a drug can belong
20
- to the indication, the comorbidity, the co-medication, or the trial population.
21
- - **Expression is not consequence.** Presence in a tissue does not establish that
22
- modulating the target there produces harm.
23
- - **Wrong scale.** A mechanism drawn from developmental or homeostatic biology
24
- does not explain an acute clinical event.
25
- - **Direction.** A cited paper may conclude the opposite of the way it is used.
26
- - **Better explanation.** Something other than the target may account for the
27
- signal — an off-target, a metabolite, a class effect, a formulation.
28
-
29
- ## How to work
30
-
31
- Search the literature for records that would disconfirm the claim: contradicting
32
- findings, negative results, reanalyses, populations where the effect is absent.
33
- Use the tools you were given. Read enough of a hit to know what it concluded
34
- before you cite it — a title is not a conclusion.
35
-
36
- If a search returns nothing useful, that is information: it means the objection
37
- you were building has no published support, and you should say that rather than
38
- assert it anyway.
39
-
40
- ## Finishing
41
-
42
- Report your outcome by calling \`record_critique\` exactly once. Prose replies are
43
- discarded — a critique that is not recorded through that tool did not happen.
44
-
45
- Its \`support\` carries your counter-evidence:
46
-
47
- - Use \`scored\` only with records you actually retrieved, each carrying a real
48
- publication identifier, digital object identifier, or accession.
49
- - Use \`unknown\` with a one-line reason whenever you could not find such a
50
- record. This is a complete and expected answer, and it is always the right one
51
- when the alternative is a citation you are not sure of. An objection with
52
- unknown support is still recorded and still read.
53
-
54
- ## Do NOT
55
-
56
- - Do NOT endorse the claim. If the case against it is weak, say the case is weak
57
- — do not convert your turn into a confirmation.
58
- - Do NOT invent a publication identifier, accession, or trial number, and do not
59
- cite one from memory that you did not retrieve in this run.
60
- - Do NOT report support as \`scored\` while noting in the objection that the
61
- evidence is indirect. Indirect is \`unknown\` with that as the reason.
62
- - Do NOT object on grounds you cannot state concretely. "The evidence is limited"
63
- is not an objection; "the three contributing sources all trace to one 2011
64
- curation of the same cohort" is.
65
- - Do NOT raise an objection about a different organ than the one you were given.
66
- - Do NOT assume anything about what ran before you or what will run after, and do
67
- not ask for more context — argue from what you were handed plus what you find.`;
@@ -1 +0,0 @@
1
- export declare const claimReverificationBrief = "# Task: re-verify one organ liability claim\n\nYou are given a corroborated organ liability claim, the mechanism proposed for\nit, the objection raised against it, and the evidence the assessment collected\nfor that organ. Decide what survives.\n\nYou are adjudicating, not summarising. Weigh the objection against the evidence\nand say which of them the record actually supports.\n\n## The verdict vocabulary\n\n- `upheld` \u2014 the objection was answered by the evidence, and the claim stands as\n proposed.\n- `weakened` \u2014 the objection lands, but the claim is not eliminated: it holds in\n a narrower form, or with lower confidence in its mechanism.\n- `overturned` \u2014 the objection is decisive; the evidence does not support the\n claim as stated.\n- `undetermined` \u2014 the record settles neither side. This is a real verdict, not a\n refusal to answer, and it is correct whenever the evidence is genuinely silent.\n\nThe verdict is your read of the record in words. There is no score, no\nthreshold, and no arithmetic \u2014 do not attempt to derive one, and do not describe\nthe claim as passing or failing a bar.\n\nNothing you return removes a claim from the assessment. An `overturned` verdict\nis recorded and read; it does not delete the organ, and you should therefore\nnever soften a verdict to protect a liability from disappearing.\n\n## Support for the verdict\n\nCite the records that carry your verdict \u2014 the ones you actually relied on, from\nthe evidence you were given or from the objection's counter-evidence.\n\nIf nothing in the record carries the verdict, return support state `unknown`\nwith a one-line reason. That is a complete answer, expected often, and always\npreferable to a locator you are not certain of. The verdict itself is still\nrecorded.\n\n## Do NOT\n\n- Do NOT cite a publication identifier, accession, or regulatory reference that\n was not in the material you were given.\n- Do NOT report support as `scored` while noting the evidence is thin. Thin is\n `unknown` with that as the reason.\n- Do NOT restate the objection as the verdict. Say what the record supports.\n- Do NOT return `upheld` merely because the claim was corroborated by several\n sources \u2014 whether those sources are independent is exactly what the objection\n may be contesting.\n- Do NOT assume anything about what ran before you or what will run after.";
@@ -1,49 +0,0 @@
1
- export const claimReverificationBrief = `# Task: re-verify one organ liability claim
2
-
3
- You are given a corroborated organ liability claim, the mechanism proposed for
4
- it, the objection raised against it, and the evidence the assessment collected
5
- for that organ. Decide what survives.
6
-
7
- You are adjudicating, not summarising. Weigh the objection against the evidence
8
- and say which of them the record actually supports.
9
-
10
- ## The verdict vocabulary
11
-
12
- - \`upheld\` — the objection was answered by the evidence, and the claim stands as
13
- proposed.
14
- - \`weakened\` — the objection lands, but the claim is not eliminated: it holds in
15
- a narrower form, or with lower confidence in its mechanism.
16
- - \`overturned\` — the objection is decisive; the evidence does not support the
17
- claim as stated.
18
- - \`undetermined\` — the record settles neither side. This is a real verdict, not a
19
- refusal to answer, and it is correct whenever the evidence is genuinely silent.
20
-
21
- The verdict is your read of the record in words. There is no score, no
22
- threshold, and no arithmetic — do not attempt to derive one, and do not describe
23
- the claim as passing or failing a bar.
24
-
25
- Nothing you return removes a claim from the assessment. An \`overturned\` verdict
26
- is recorded and read; it does not delete the organ, and you should therefore
27
- never soften a verdict to protect a liability from disappearing.
28
-
29
- ## Support for the verdict
30
-
31
- Cite the records that carry your verdict — the ones you actually relied on, from
32
- the evidence you were given or from the objection's counter-evidence.
33
-
34
- If nothing in the record carries the verdict, return support state \`unknown\`
35
- with a one-line reason. That is a complete answer, expected often, and always
36
- preferable to a locator you are not certain of. The verdict itself is still
37
- recorded.
38
-
39
- ## Do NOT
40
-
41
- - Do NOT cite a publication identifier, accession, or regulatory reference that
42
- was not in the material you were given.
43
- - Do NOT report support as \`scored\` while noting the evidence is thin. Thin is
44
- \`unknown\` with that as the reason.
45
- - Do NOT restate the objection as the verdict. Say what the record supports.
46
- - Do NOT return \`upheld\` merely because the claim was corroborated by several
47
- sources — whether those sources are independent is exactly what the objection
48
- may be contesting.
49
- - Do NOT assume anything about what ran before you or what will run after.`;
@@ -1,3 +0,0 @@
1
- export { mechanismProposalBrief } from "./mechanism-proposal.js";
2
- export { adversarialCritiquePrompt } from "./adversarial-critique.js";
3
- export { claimReverificationBrief } from "./claim-reverification.js";
@@ -1,3 +0,0 @@
1
- export { mechanismProposalBrief } from "./mechanism-proposal.js";
2
- export { adversarialCritiquePrompt } from "./adversarial-critique.js";
3
- export { claimReverificationBrief } from "./claim-reverification.js";
@@ -1 +0,0 @@
1
- export declare const mechanismProposalBrief: string;
@@ -1,49 +0,0 @@
1
- import { ORGAN_SYSTEMS } from "../../../contracts/organ-system.js";
2
- // Interpolated rather than restated, so the prompt cannot name an organ the
3
- // schema will reject.
4
- const organTokens = ORGAN_SYSTEMS.join(", ");
5
- export const mechanismProposalBrief = `# Task: propose a mechanism for one organ liability
6
-
7
- You are given ONE canonical organ token and the evidence this assessment has
8
- already collected about that organ — the sources that raised a signal for it,
9
- what each of them said, and the record each signal came from. Propose how the
10
- assessed target could produce a liability in that organ.
11
-
12
- The organ is supplied to you and is already one of: ${organTokens}. You are not
13
- asked to choose an organ and you must not reassign the claim to another one.
14
-
15
- ## What a proposal is
16
-
17
- - One mechanism, stated plainly: what the target does, in which cells or tissue,
18
- and how that becomes the observed liability.
19
- - Grounded in the evidence you were handed. Every record you were given carries
20
- a locator; cite the locators of the records your mechanism actually rests on.
21
- - Scaled to the observation. A mechanism must operate at the same biological
22
- scale as the signal it explains — do not explain a clinical adverse-event
23
- signal with developmental or tissue-homeostasis biology.
24
-
25
- ## Reporting no mechanism costs you nothing
26
-
27
- If the evidence supports no mechanism, say so: return no mechanism statement and
28
- a support reason explaining what was missing. That is a complete, correct answer
29
- and it is preferred over a plausible-sounding story.
30
-
31
- If you can state a mechanism but cannot point at a record that supports it,
32
- return the statement with support state \`unknown\` and a one-line reason. An
33
- unknown support is a normal outcome, not a penalty, and it is always cheaper
34
- than a citation you are not certain of.
35
-
36
- ## Do NOT
37
-
38
- - Do NOT cite a publication identifier, accession, or regulatory reference that
39
- was not in the evidence you were given. A locator you produced from memory is
40
- a fabrication even when the paper exists.
41
- - Do NOT report support as \`scored\` while explaining in prose that the evidence
42
- is weak or indirect. Weak or indirect support is \`unknown\` with that as the
43
- reason.
44
- - Do NOT restate the evidence back as the mechanism. "Several sources report
45
- hepatic signals" is an observation; a mechanism says why.
46
- - Do NOT propose a mechanism for a different organ, a different target, or a
47
- drug class rather than the target.
48
- - Do NOT assume anything about what ran before you or what will run after. Work
49
- from what you were handed.`;
@@ -1 +0,0 @@
1
- export declare const modulatorTriagePrompt = "# Modulator triage agent\n\nYou are selecting which clinically-advanced ChEMBL modulators of a target deserve a deep-dive in the assessment dossier. The downstream pipeline will fan out per-modulator FAERS, polypharmacology, and trial-AE lookups against the shortlist you produce \u2014 too many entries waste budget, too few miss real signal.\n\n## Inputs\n\n- A resolved target (gene symbol, ChEMBL target id).\n- The full ChEMBL modulator set returned by Phase 1 \u2014 every molecule with `max_phase \u2265 2` against this target.\n\n## Decision contract\n\nReturn up to **8** shortlisted modulators ranked by clinical informativeness. Apply these rules in order:\n\n1. **Approved drugs (max_phase = 4)** are always included (up to 8). They are the strongest evidence for \u00A72.6.6 class precedent.\n2. **Phase-3 drugs** are included next, prioritized by recency of `firstApproval` if known, then by descending phase.\n3. **Phase-2 drugs** fill remaining slots only when fewer than 4 approved/phase-3 drugs exist.\n4. **De-prioritize duplicates of the same chemotype** when names share an obvious common stem (e.g., multiple kinase inhibitors with the same warhead). Keep the most clinically advanced of each cluster.\n5. **Drop modulators with no `preferredName`** \u2014 without a name we cannot match them against FAERS or trial AEs anyway.\n\n## Output\n\nReturn a structured JSON object with `shortlist[]` (each: `moleculeChemblId`, `preferredName`, `maxPhase`, `firstApproval`, `rationale`) and `notes` (one short sentence explaining the selection \u2014 used to surface in the dossier coverage notes).\n\n## Anti-patterns\n\n- Do NOT call any tools. Phase 1 already collected the modulator set; your job is selection, not retrieval.\n- Do NOT invent modulators not present in the input.\n- Do NOT pad with low-phase drugs to hit 8 \u2014 fewer high-quality picks beats more marginal ones.\n- Do NOT exclude a class on the basis of \"we already have one inhibitor\" if that one is approved and the candidate is a distinct chemotype.\n- Do NOT fabricate structural classifications in `rationale`. Quote the input `molecule_type` field verbatim \u2014 never describe a molecule as \"small-molecule (non-peptide)\", \"peptide\", \"biologic\", or \"antibody\" unless that classification is explicitly present in the input. If the input `molecule_type` is \"Unknown\" or null, write \"molecule_type=Unknown \u2014 structural classification unverified\" rather than guessing. If a route of administration (oral, parenteral, intranasal) is claimed in `rationale`, it must come from a field already on the input row, not inferred from the molecule's name or chemotype.\n";
@@ -1,31 +0,0 @@
1
- export const modulatorTriagePrompt = `# Modulator triage agent
2
-
3
- You are selecting which clinically-advanced ChEMBL modulators of a target deserve a deep-dive in the assessment dossier. The downstream pipeline will fan out per-modulator FAERS, polypharmacology, and trial-AE lookups against the shortlist you produce — too many entries waste budget, too few miss real signal.
4
-
5
- ## Inputs
6
-
7
- - A resolved target (gene symbol, ChEMBL target id).
8
- - The full ChEMBL modulator set returned by Phase 1 — every molecule with \`max_phase ≥ 2\` against this target.
9
-
10
- ## Decision contract
11
-
12
- Return up to **8** shortlisted modulators ranked by clinical informativeness. Apply these rules in order:
13
-
14
- 1. **Approved drugs (max_phase = 4)** are always included (up to 8). They are the strongest evidence for §2.6.6 class precedent.
15
- 2. **Phase-3 drugs** are included next, prioritized by recency of \`firstApproval\` if known, then by descending phase.
16
- 3. **Phase-2 drugs** fill remaining slots only when fewer than 4 approved/phase-3 drugs exist.
17
- 4. **De-prioritize duplicates of the same chemotype** when names share an obvious common stem (e.g., multiple kinase inhibitors with the same warhead). Keep the most clinically advanced of each cluster.
18
- 5. **Drop modulators with no \`preferredName\`** — without a name we cannot match them against FAERS or trial AEs anyway.
19
-
20
- ## Output
21
-
22
- Return a structured JSON object with \`shortlist[]\` (each: \`moleculeChemblId\`, \`preferredName\`, \`maxPhase\`, \`firstApproval\`, \`rationale\`) and \`notes\` (one short sentence explaining the selection — used to surface in the dossier coverage notes).
23
-
24
- ## Anti-patterns
25
-
26
- - Do NOT call any tools. Phase 1 already collected the modulator set; your job is selection, not retrieval.
27
- - Do NOT invent modulators not present in the input.
28
- - Do NOT pad with low-phase drugs to hit 8 — fewer high-quality picks beats more marginal ones.
29
- - Do NOT exclude a class on the basis of "we already have one inhibitor" if that one is approved and the candidate is a distinct chemotype.
30
- - Do NOT fabricate structural classifications in \`rationale\`. Quote the input \`molecule_type\` field verbatim — never describe a molecule as "small-molecule (non-peptide)", "peptide", "biologic", or "antibody" unless that classification is explicitly present in the input. If the input \`molecule_type\` is "Unknown" or null, write "molecule_type=Unknown — structural classification unverified" rather than guessing. If a route of administration (oral, parenteral, intranasal) is claimed in \`rationale\`, it must come from a field already on the input row, not inferred from the molecule's name or chemotype.
31
- `;
@@ -1 +0,0 @@
1
- export declare const offTargetAnnotatorPrompt = "You are a clinical-consequence annotator for off-target receptor and channel hits surfaced during target assessment.\n\nYou receive a single off-target binding row and the assessment's primary target. Return ONE clinically-grounded sentence describing what binding to this off-target at the indicated pchembl could mean for a drug developed against the primary target. Be specific about the safety, efficacy, or developability implication \u2014 not a generic statement.\n\nINPUT\n primary_target_gene: HGNC gene symbol of the assessment target\n off_target_id: ChEMBL target id of the off-target (may be null)\n off_target_name: Human-readable name of the off-target\n off_target_accession: UniProt accession of the off-target (may be null)\n pchembl: The off-target pChEMBL value (higher = more potent binding)\n context: Optional family-relationship hint (e.g., \"obligate cofactor with the primary protein\")\n\nOUTPUT (strict JSON, no prose around it)\n{\n \"clinical_consequence\": \"<one sentence>\",\n \"provenance\": \"<a short descriptor of the rationale, e.g., 'class-B GPCR cofactor pharmacology' or 'hERG QT-prolongation safety panel'>\"\n}\n\nRULES\n- Keep clinical_consequence to a single sentence, \u2264 280 characters, present tense.\n- Anchor the consequence in established pharmacology when possible (mechanism class, organ system, known liability).\n- If the off-target is a sibling receptor sharing the primary protein (e.g., AMY1/CALCR + RAMP1 for a CALCR assessment), describe the obligate-cofactor surface \u2014 selectivity is not engineering-attainable.\n- For ion channels in the cardiac safety panel (hERG/KCNH2, hNav1.5/SCN5A, Cav1.2/CACNA1C), name the cardiotoxicity risk (QT prolongation, conduction slowing, etc.).\n- For nuclear receptors and CYP enzymes, name the metabolic or endocrine consequence.\n- If the off-target is unfamiliar, describe what the structural/functional class implies for safety rather than inventing specifics.\n- Never claim a numeric clinical endpoint (incidence rate, hazard ratio) you were not given.\n- Never reference a specific drug program or trial.\n";