@inflexa-ai/harness 0.35.7 → 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 (199) 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/genai-spans.d.ts +20 -0
  15. package/dist/loop/genai-spans.js +53 -0
  16. package/dist/loop/run-agent.d.ts +1 -1
  17. package/dist/loop/run-agent.js +9 -4
  18. package/dist/providers/ai-sdk.js +8 -0
  19. package/dist/runtime/assemble.d.ts +0 -3
  20. package/dist/runtime/assemble.js +0 -3
  21. package/dist/state/index.d.ts +0 -2
  22. package/dist/state/index.js +0 -1
  23. package/dist/state/init.js +1 -60
  24. package/dist/state/purge-analysis.d.ts +1 -2
  25. package/dist/state/purge-analysis.js +1 -2
  26. package/dist/tasks/regulatory-corpus-boot-refresh.js +1 -1
  27. package/dist/tools/bio/gene-preclinical-profile.d.ts +1 -3
  28. package/dist/tools/bio/gene-preclinical-profile.js +1 -3
  29. package/dist/tools/lib/chembl-client.d.ts +1 -4
  30. package/dist/tools/lib/chembl-client.js +1 -4
  31. package/dist/tools/lib/clinical-benchmarks-client.d.ts +1 -1
  32. package/dist/tools/lib/clinical-benchmarks-client.js +1 -1
  33. package/dist/tools/lib/clinical-trials-client.d.ts +0 -3
  34. package/dist/tools/lib/clinical-trials-client.js +0 -3
  35. package/dist/tools/lib/identifier-resolver.d.ts +5 -7
  36. package/dist/tools/lib/identifier-resolver.js +5 -7
  37. package/dist/tools/lib/iuphar-client.d.ts +1 -3
  38. package/dist/tools/lib/iuphar-client.js +1 -3
  39. package/dist/tools/lib/opentargets-client.d.ts +1 -1
  40. package/dist/tools/lib/opentargets-client.js +1 -1
  41. package/dist/tools/lib/protein-family-normalize.d.ts +5 -7
  42. package/dist/tools/lib/protein-family-normalize.js +5 -7
  43. package/dist/tools/lib/uniprot-client.d.ts +0 -7
  44. package/dist/tools/lib/uniprot-client.js +2 -9
  45. package/package.json +9 -8
  46. package/dist/contracts/target-assessment-row.d.ts +0 -85
  47. package/dist/contracts/target-assessment-row.js +0 -37
  48. package/dist/contracts/target-dossier.d.ts +0 -12423
  49. package/dist/contracts/target-dossier.js +0 -1282
  50. package/dist/prompts/target-assessment/briefs/executive-recommendation.d.ts +0 -1
  51. package/dist/prompts/target-assessment/briefs/executive-recommendation.js +0 -85
  52. package/dist/prompts/target-assessment/briefs/index.d.ts +0 -4
  53. package/dist/prompts/target-assessment/briefs/index.js +0 -4
  54. package/dist/prompts/target-assessment/briefs/liability-bullets.d.ts +0 -1
  55. package/dist/prompts/target-assessment/briefs/liability-bullets.js +0 -114
  56. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.d.ts +0 -1
  57. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.js +0 -37
  58. package/dist/prompts/target-assessment/briefs/translational-commentary.d.ts +0 -1
  59. package/dist/prompts/target-assessment/briefs/translational-commentary.js +0 -23
  60. package/dist/prompts/target-assessment/drugs-in-class.d.ts +0 -1
  61. package/dist/prompts/target-assessment/drugs-in-class.js +0 -29
  62. package/dist/prompts/target-assessment/investigation/adversarial-critique.d.ts +0 -1
  63. package/dist/prompts/target-assessment/investigation/adversarial-critique.js +0 -67
  64. package/dist/prompts/target-assessment/investigation/claim-reverification.d.ts +0 -1
  65. package/dist/prompts/target-assessment/investigation/claim-reverification.js +0 -49
  66. package/dist/prompts/target-assessment/investigation/index.d.ts +0 -3
  67. package/dist/prompts/target-assessment/investigation/index.js +0 -3
  68. package/dist/prompts/target-assessment/investigation/mechanism-proposal.d.ts +0 -1
  69. package/dist/prompts/target-assessment/investigation/mechanism-proposal.js +0 -49
  70. package/dist/prompts/target-assessment/modulator-triage.d.ts +0 -1
  71. package/dist/prompts/target-assessment/modulator-triage.js +0 -31
  72. package/dist/prompts/target-assessment/off-target-annotator.d.ts +0 -1
  73. package/dist/prompts/target-assessment/off-target-annotator.js +0 -28
  74. package/dist/prompts/target-assessment/tox-voice/core.d.ts +0 -1
  75. package/dist/prompts/target-assessment/tox-voice/core.js +0 -74
  76. package/dist/prompts/target-assessment/tox-voice/critique.d.ts +0 -7
  77. package/dist/prompts/target-assessment/tox-voice/critique.js +0 -109
  78. package/dist/prompts/target-assessment/tox-voice/exemplars.d.ts +0 -8
  79. package/dist/prompts/target-assessment/tox-voice/exemplars.js +0 -24
  80. package/dist/prompts/target-assessment/tox-voice/index.d.ts +0 -4
  81. package/dist/prompts/target-assessment/tox-voice/index.js +0 -4
  82. package/dist/prompts/target-assessment/tox-voice/vocabulary.d.ts +0 -18
  83. package/dist/prompts/target-assessment/tox-voice/vocabulary.js +0 -61
  84. package/dist/state/target-assessments.d.ts +0 -68
  85. package/dist/state/target-assessments.js +0 -222
  86. package/dist/workflows/execute-target-assessment.d.ts +0 -118
  87. package/dist/workflows/execute-target-assessment.js +0 -631
  88. package/dist/workflows/target-assessment/assemblers/index.d.ts +0 -5
  89. package/dist/workflows/target-assessment/assemblers/index.js +0 -4
  90. package/dist/workflows/target-assessment/assemblers/literature.d.ts +0 -281
  91. package/dist/workflows/target-assessment/assemblers/literature.js +0 -971
  92. package/dist/workflows/target-assessment/assemblers/orchestrator.d.ts +0 -118
  93. package/dist/workflows/target-assessment/assemblers/orchestrator.js +0 -945
  94. package/dist/workflows/target-assessment/assemblers/safety.d.ts +0 -374
  95. package/dist/workflows/target-assessment/assemblers/safety.js +0 -1068
  96. package/dist/workflows/target-assessment/assemblers/trials.d.ts +0 -30
  97. package/dist/workflows/target-assessment/assemblers/trials.js +0 -75
  98. package/dist/workflows/target-assessment/collectors/index.d.ts +0 -114
  99. package/dist/workflows/target-assessment/collectors/index.js +0 -538
  100. package/dist/workflows/target-assessment/coverage.d.ts +0 -97
  101. package/dist/workflows/target-assessment/coverage.js +0 -86
  102. package/dist/workflows/target-assessment/decisions/index.d.ts +0 -86
  103. package/dist/workflows/target-assessment/decisions/index.js +0 -127
  104. package/dist/workflows/target-assessment/fanout/index.d.ts +0 -32
  105. package/dist/workflows/target-assessment/fanout/index.js +0 -156
  106. package/dist/workflows/target-assessment/investigation/index.d.ts +0 -97
  107. package/dist/workflows/target-assessment/investigation/index.js +0 -419
  108. package/dist/workflows/target-assessment/lib/approval-precedents.d.ts +0 -73
  109. package/dist/workflows/target-assessment/lib/approval-precedents.js +0 -185
  110. package/dist/workflows/target-assessment/lib/citation-validator.d.ts +0 -46
  111. package/dist/workflows/target-assessment/lib/citation-validator.js +0 -316
  112. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.d.ts +0 -65
  113. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.js +0 -174
  114. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.d.ts +0 -44
  115. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.js +0 -152
  116. package/dist/workflows/target-assessment/lib/compute-derived.d.ts +0 -20
  117. package/dist/workflows/target-assessment/lib/compute-derived.js +0 -261
  118. package/dist/workflows/target-assessment/lib/compute-selectivity.d.ts +0 -15
  119. package/dist/workflows/target-assessment/lib/compute-selectivity.js +0 -18
  120. package/dist/workflows/target-assessment/lib/dedup-modulators.d.ts +0 -37
  121. package/dist/workflows/target-assessment/lib/dedup-modulators.js +0 -157
  122. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.d.ts +0 -17
  123. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.js +0 -100
  124. package/dist/workflows/target-assessment/lib/expression-constants.d.ts +0 -21
  125. package/dist/workflows/target-assessment/lib/expression-constants.js +0 -21
  126. package/dist/workflows/target-assessment/lib/family-complex-supplement.d.ts +0 -20
  127. package/dist/workflows/target-assessment/lib/family-complex-supplement.js +0 -36
  128. package/dist/workflows/target-assessment/lib/fda-label-safety.d.ts +0 -72
  129. package/dist/workflows/target-assessment/lib/fda-label-safety.js +0 -166
  130. package/dist/workflows/target-assessment/lib/heterodimer-filter.d.ts +0 -30
  131. package/dist/workflows/target-assessment/lib/heterodimer-filter.js +0 -44
  132. package/dist/workflows/target-assessment/lib/hpo-organ-map.d.ts +0 -34
  133. package/dist/workflows/target-assessment/lib/hpo-organ-map.js +0 -63
  134. package/dist/workflows/target-assessment/lib/impc-organ-map.d.ts +0 -19
  135. package/dist/workflows/target-assessment/lib/impc-organ-map.js +0 -39
  136. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.d.ts +0 -4
  137. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.js +0 -24
  138. package/dist/workflows/target-assessment/lib/llm-step.d.ts +0 -80
  139. package/dist/workflows/target-assessment/lib/llm-step.js +0 -101
  140. package/dist/workflows/target-assessment/lib/meddra-organ-map.d.ts +0 -40
  141. package/dist/workflows/target-assessment/lib/meddra-organ-map.js +0 -138
  142. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.d.ts +0 -17
  143. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.js +0 -99
  144. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.d.ts +0 -2
  145. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.js +0 -51
  146. package/dist/workflows/target-assessment/lib/regulatory-actions.d.ts +0 -25
  147. package/dist/workflows/target-assessment/lib/regulatory-actions.js +0 -176
  148. package/dist/workflows/target-assessment/lib/safety-corroboration.d.ts +0 -44
  149. package/dist/workflows/target-assessment/lib/safety-corroboration.js +0 -273
  150. package/dist/workflows/target-assessment/lib/structured-llm.d.ts +0 -61
  151. package/dist/workflows/target-assessment/lib/structured-llm.js +0 -102
  152. package/dist/workflows/target-assessment/lib/target-identity-filter.d.ts +0 -59
  153. package/dist/workflows/target-assessment/lib/target-identity-filter.js +0 -95
  154. package/dist/workflows/target-assessment/lib/therapeutic-programs.d.ts +0 -20
  155. package/dist/workflows/target-assessment/lib/therapeutic-programs.js +0 -68
  156. package/dist/workflows/target-assessment/metrics.d.ts +0 -16
  157. package/dist/workflows/target-assessment/metrics.js +0 -30
  158. package/dist/workflows/target-assessment/phase4-assemble.d.ts +0 -3182
  159. package/dist/workflows/target-assessment/phase4-assemble.js +0 -39
  160. package/dist/workflows/target-assessment/phase5-persist.d.ts +0 -59
  161. package/dist/workflows/target-assessment/phase5-persist.js +0 -349
  162. package/dist/workflows/target-assessment/progress-stream.d.ts +0 -75
  163. package/dist/workflows/target-assessment/progress-stream.js +0 -110
  164. package/dist/workflows/target-assessment/progress.d.ts +0 -39
  165. package/dist/workflows/target-assessment/progress.js +0 -77
  166. package/dist/workflows/target-assessment/schemas.d.ts +0 -970
  167. package/dist/workflows/target-assessment/schemas.js +0 -318
  168. package/dist/workflows/target-assessment/steps/collectors/pathways.d.ts +0 -15
  169. package/dist/workflows/target-assessment/steps/collectors/pathways.js +0 -58
  170. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.d.ts +0 -34
  171. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.js +0 -31
  172. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.d.ts +0 -57
  173. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.js +0 -54
  174. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.d.ts +0 -35
  175. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.js +0 -32
  176. package/dist/workflows/target-assessment/steps/fanout/index.d.ts +0 -14
  177. package/dist/workflows/target-assessment/steps/fanout/index.js +0 -10
  178. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.d.ts +0 -29
  179. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.js +0 -29
  180. package/dist/workflows/target-assessment/steps/phase2-aggregate.d.ts +0 -657
  181. package/dist/workflows/target-assessment/steps/phase2-aggregate.js +0 -34
  182. package/dist/workflows/target-assessment/steps/phase3-aggregate.d.ts +0 -806
  183. package/dist/workflows/target-assessment/steps/phase3-aggregate.js +0 -16
  184. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.d.ts +0 -28
  185. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.js +0 -27
  186. package/dist/workflows/target-assessment/sub-workflows/index.d.ts +0 -15
  187. package/dist/workflows/target-assessment/sub-workflows/index.js +0 -11
  188. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.d.ts +0 -41
  189. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.js +0 -12
  190. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.d.ts +0 -41
  191. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.js +0 -12
  192. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.d.ts +0 -37
  193. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.js +0 -12
  194. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.d.ts +0 -66
  195. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.js +0 -12
  196. package/dist/workflows/target-assessment/synthesis/index.d.ts +0 -607
  197. package/dist/workflows/target-assessment/synthesis/index.js +0 -354
  198. package/dist/workflows/target-assessment/synthesis-probes.d.ts +0 -56
  199. package/dist/workflows/target-assessment/synthesis-probes.js +0 -320
@@ -1,374 +0,0 @@
1
- /**
2
- * Phase-4 deterministic assemblers — safety sections.
3
- *
4
- * Each assembler maps Phase-1 / Phase-2 / Phase-3 outputs onto the
5
- * corresponding dossier section schema. Coverage is honored end-to-end:
6
- * when an upstream came back `queried_no_data` or the derived row set is
7
- * empty, the section is marked `queried_no_data` / `not_loaded` rather
8
- * than fabricated. Aggregate rows preserve their contributing evidence
9
- * under `evidence: [...]` arrays.
10
- */
11
- import type { ClaimSupport, EvidenceItem, RegulatoryActionRow, RegulatoryOrganSignals } from "@inflexa-ai/harness/contracts/target-dossier.js";
12
- import { type OrganSignalProjection } from "../lib/fda-label-safety.js";
13
- import { type OrganSystem } from "../../../contracts/organ-system.js";
14
- import type { Phase2Bundle } from "../steps/phase2-aggregate.js";
15
- import type { Phase3Bundle } from "../steps/phase3-aggregate.js";
16
- import type { FamilyComplexesBundle } from "../schemas.js";
17
- import { HIGH_EXPRESSION_TPM_THRESHOLD } from "../lib/expression-constants.js";
18
- export { HIGH_EXPRESSION_TPM_THRESHOLD };
19
- import type { ChemblModulator } from "../../../tools/lib/chembl-client.js";
20
- export declare const SAFETY_RELEVANT_ORGANS: Set<string>;
21
- /**
22
- * Resolve a tissue (and its atlas organ label, when present) onto the
23
- * canonical organ vocabulary. Returns null when the anatomy has no organ
24
- * system to belong to — the caller drops the row rather than filing it
25
- * under a neighbouring organ.
26
- */
27
- export declare function resolveTissueOrganSystem(tissue: string, organ?: string | null): OrganSystem | null;
28
- export declare function isSafetyRelevant(tissue: string, organ?: string | null): boolean;
29
- export declare const REPRODUCTIVE_TOX_TISSUES: Set<string>;
30
- export declare const REPRODUCTIVE_TOX_TPM_FLOOR = 20;
31
- export declare const DEFAULT_TPM_FLOOR = 100;
32
- export declare function meetsTpmFloor(tissue: string, value: number): boolean;
33
- export declare function assembleLiabilitySummary(phase2: Phase2Bundle, context: {
34
- offTargetRows: OffTargetPanelRows | null;
35
- preferredModality: string | null;
36
- }): {
37
- liability_bullets: never[];
38
- modality_recommendation: string | null;
39
- same_class_drug_count: number;
40
- inferred_therapeutic_area: string | null;
41
- no_liabilities_disclosure: string;
42
- };
43
- type FanoutResults = Phase3Bundle["fanout"];
44
- export declare function aggregateFaersAcrossModulators(fanout: FanoutResults | undefined): {
45
- total_reports: number;
46
- seriousness: {
47
- coverage: "available";
48
- total_reports: number;
49
- by_seriousness: {
50
- death: number;
51
- life_threatening: number;
52
- hospitalization: number;
53
- disabling: number;
54
- other_serious: number;
55
- congenital_anomaly: number;
56
- };
57
- fatal_report_count: number;
58
- } | {
59
- coverage: "queried_no_data";
60
- total_reports: number;
61
- by_seriousness?: undefined;
62
- fatal_report_count?: undefined;
63
- };
64
- top_signals: {
65
- meddra_term: string;
66
- organ: "hematologic" | "metabolic" | "immune" | "hepatic" | "musculoskeletal" | "cns" | "renal" | "reproductive" | "respiratory" | "cardiac" | "vascular" | "pns" | "gi" | "pancreas" | "endocrine_thyroid" | "dermatologic" | "ocular" | "oncology" | undefined;
67
- report_count: number;
68
- }[];
69
- per_modulator: {
70
- modulator: string;
71
- modulator_id: string | null;
72
- report_count: number;
73
- coverage: "available" | "queried_no_data" | "not_loaded";
74
- }[];
75
- } | null;
76
- export declare function aggregateTrialAes(fanout: FanoutResults | undefined): {
77
- serious: {
78
- term: string;
79
- incidence_pct: number;
80
- organ?: string;
81
- nct_ids: string[];
82
- }[];
83
- non_serious: {
84
- term: string;
85
- incidence_pct: number;
86
- organ?: string;
87
- nct_ids: string[];
88
- }[];
89
- non_serious_floor_pct: number;
90
- dropped_uninformative_count: number;
91
- coverage_qualifier: {
92
- trials_queried: number;
93
- trials_with_ae_data: number;
94
- serious_floor_applied: number;
95
- non_serious_floor_pct_applied: number;
96
- };
97
- } | null;
98
- /** Fold below this threshold → selectivity window is insufficient. */
99
- export declare const SELECTIVITY_FOLD_THRESHOLD = 30;
100
- export type RawOffTargetRow = {
101
- off_target_id?: string | null;
102
- off_target_name?: string | null;
103
- target_chembl_id?: string | null;
104
- target_type?: string | null;
105
- accession?: string | null;
106
- pchembl: number;
107
- selectivity: {
108
- fold: number;
109
- log_units: number;
110
- };
111
- selectivity_window_below_threshold?: boolean;
112
- evidence?: EvidenceItem[];
113
- organ_system?: OrganSystem | null;
114
- target_class?: string | undefined;
115
- is_safety_panel_target?: boolean;
116
- clinical_consequence?: string | null;
117
- metadata?: {
118
- merged_chembl_ids?: string[];
119
- };
120
- };
121
- export type CleanOffTargetRow = Omit<RawOffTargetRow, "target_chembl_id" | "target_type" | "accession" | "off_target_id" | "organ_system" | "evidence"> & {
122
- off_target_id: string | null;
123
- off_target_name: string;
124
- organ_system: OrganSystem | null;
125
- evidence: EvidenceItem[];
126
- selectivity_window_below_threshold: boolean;
127
- clinical_consequence: string | null;
128
- is_safety_panel_target: boolean;
129
- metadata: {
130
- merged_chembl_ids: string[];
131
- };
132
- };
133
- /**
134
- * Off-target row shape after relationship classification. Used by the
135
- * organ-rollup builder, evidence tally, and liability-summary signal count —
136
- * the typed members all rely on `relationship`, `organ_system`, `pchembl`,
137
- * `support`, and `is_safety_panel_target` only.
138
- */
139
- export type OffTargetPanelRows = Array<{
140
- off_target_id: string | null;
141
- off_target_name: string;
142
- pchembl: number;
143
- is_safety_panel_target: boolean;
144
- organ_system: OrganSystem | null;
145
- support: ClaimSupport;
146
- relationship: "off_target";
147
- }>;
148
- /**
149
- * Partition evidence into what a claim can stand on: an item resolves to a
150
- * record a reader can check, or it does not. A claim with nothing checkable
151
- * says so rather than presenting provenance labels as citations.
152
- */
153
- export declare function claimSupportFrom(evidence: EvidenceItem[], reasonWhenUnsupported: string): ClaimSupport;
154
- /** The evidence behind a claim, or nothing when the claim states it has none. */
155
- export declare function claimSupportEvidence(support: ClaimSupport): EvidenceItem[];
156
- /**
157
- * Turn segmented FDA label warnings into the dossier's per-organ regulatory
158
- * signal section.
159
- *
160
- * The organ-resolution filter can legitimately empty this section: a set of
161
- * labels whose every warning fragment names no canonical organ produces no
162
- * rows. That is `filtered` with the count it discarded, never an `available`
163
- * section with an empty list — the difference is whether a reader learns that
164
- * signals existed and did not survive attribution.
165
- */
166
- export declare function assembleRegulatoryOrganSignals(projection: OrganSignalProjection | null): RegulatoryOrganSignals;
167
- /**
168
- * Filter and deduplicate raw off-target rows before panel assembly.
169
- *
170
- * Removes: on-target self-rows, cell-line entries, sentinel/unresolved names.
171
- * Deduplicates: by UniProt accession when present, otherwise by normalized name;
172
- * keeps the highest-pchembl row as the winner and records merged ChEMBL ids.
173
- * Computes: `selectivity_window_below_threshold`, `clinical_consequence`,
174
- * `is_safety_panel_target` (via the existing safety-panel lookup).
175
- */
176
- export declare function filterAndDedupOffTargetRows(rows: RawOffTargetRow[], ctx: {
177
- assessmentTargetChemblId: string | null;
178
- }): CleanOffTargetRow[];
179
- /**
180
- * Off-target panel row split. Each clean off-target row is classified as:
181
- * - `on_target_self_hit`: alternate ChEMBL ID for the assessment target itself
182
- * - `intended_co_target`: every modulator that hits this target intends it
183
- * (e.g., GLP1R + GIPR for tirzepatide); not an off-target liability
184
- * - `off_target`: real off-target — selectivity computed vs primary potency
185
- */
186
- export declare function aggregateOffTargetPanel(phase2: Phase2Bundle, fanout: FanoutResults | undefined, assessmentUniprot: string, assessmentGeneSymbol?: string, familyComplexes?: FamilyComplexesBundle | null, onTargetChemblIds?: string[]): {
187
- rows: {
188
- off_target_id: string | null;
189
- off_target_name: string;
190
- pchembl: number;
191
- is_safety_panel_target: boolean;
192
- organ_system: "hematologic" | "metabolic" | "immune" | "hepatic" | "musculoskeletal" | "cns" | "renal" | "reproductive" | "respiratory" | "cardiac" | "vascular" | "pns" | "gi" | "pancreas" | "endocrine_thyroid" | "dermatologic" | "ocular" | "oncology" | null;
193
- clinical_consequence: string | null;
194
- selectivity: {
195
- vs_primary_potency: {
196
- primary_pchembl_used: number;
197
- primary_source: "chembl_target_drug_indication" | "literature_curated";
198
- fold: number;
199
- log_units: number;
200
- };
201
- } | {
202
- selectivity_unknown: true;
203
- reason: string;
204
- };
205
- selectivity_window_below_threshold: boolean;
206
- relationship: "off_target";
207
- support: {
208
- state: "scored";
209
- evidence: {
210
- source: string;
211
- pmid?: string | undefined;
212
- doi?: string | undefined;
213
- accession?: string | undefined;
214
- predicate?: string | undefined;
215
- score?: number | undefined;
216
- strength?: string | undefined;
217
- is_human?: boolean | undefined;
218
- is_clinical?: boolean | undefined;
219
- excerpt?: string | undefined;
220
- metadata?: Record<string, unknown> | undefined;
221
- regulatory_reference?: {
222
- document: string;
223
- section?: string | undefined;
224
- doc_id?: string | undefined;
225
- doc_url?: string | undefined;
226
- } | undefined;
227
- }[];
228
- } | {
229
- state: "unknown";
230
- reason: string;
231
- };
232
- target_class?: string | undefined;
233
- metadata?: {
234
- merged_chembl_ids?: string[] | undefined;
235
- } | undefined;
236
- }[];
237
- excluded_rows: {
238
- off_target_id: string | null;
239
- off_target_name: string;
240
- pchembl: number;
241
- is_safety_panel_target: boolean;
242
- organ_system: "hematologic" | "metabolic" | "immune" | "hepatic" | "musculoskeletal" | "cns" | "renal" | "reproductive" | "respiratory" | "cardiac" | "vascular" | "pns" | "gi" | "pancreas" | "endocrine_thyroid" | "dermatologic" | "ocular" | "oncology" | null;
243
- clinical_consequence: string | null;
244
- selectivity: {
245
- vs_primary_potency: {
246
- primary_pchembl_used: number;
247
- primary_source: "chembl_target_drug_indication" | "literature_curated";
248
- fold: number;
249
- log_units: number;
250
- };
251
- } | {
252
- selectivity_unknown: true;
253
- reason: string;
254
- };
255
- selectivity_window_below_threshold: boolean;
256
- relationship: "intended_co_target" | "on_target_self_hit" | "obligate_cofactor";
257
- reason: string;
258
- evidence: {
259
- source: string;
260
- pmid?: string | undefined;
261
- doi?: string | undefined;
262
- accession?: string | undefined;
263
- predicate?: string | undefined;
264
- score?: number | undefined;
265
- strength?: string | undefined;
266
- is_human?: boolean | undefined;
267
- is_clinical?: boolean | undefined;
268
- excerpt?: string | undefined;
269
- metadata?: Record<string, unknown> | undefined;
270
- regulatory_reference?: {
271
- document: string;
272
- section?: string | undefined;
273
- doc_id?: string | undefined;
274
- doc_url?: string | undefined;
275
- } | undefined;
276
- }[];
277
- target_class?: string | undefined;
278
- metadata?: {
279
- merged_chembl_ids?: string[] | undefined;
280
- } | undefined;
281
- }[];
282
- } | null;
283
- /** Minimum distinct active substances required for class-liability designation. */
284
- export declare const CLASS_MIN_DRUGS = 3;
285
- export declare const CLASS_LIABILITY_FRACTION = 0.3;
286
- export type ClassDrug = {
287
- drug_id: string;
288
- parent_chembl_id: string | null;
289
- drug_name: string;
290
- max_phase: number;
291
- };
292
- /**
293
- * Deduplicates a list of drugs by active substance (parent_chembl_id, falling
294
- * back to drug_id when parent is absent), then derives the count and suppression
295
- * reason used consistently across drugs_in_class and per_organ rollups.
296
- *
297
- * Dedup winner per group: highest max_phase; ties broken by drug_id lexicographic
298
- * order so the result is deterministic.
299
- */
300
- export declare function computeClassPrecedentCounts(drugs: ClassDrug[]): {
301
- drug_count_in_class: number;
302
- drugs_in_class: ClassDrug[];
303
- suppressed_reason: string | null;
304
- };
305
- export declare function aggregateClassPrecedent(phase2: Phase2Bundle, fanout: FanoutResults | undefined): {
306
- drugs_in_class: ClassDrug[];
307
- per_organ: {
308
- organ: "hematologic" | "metabolic" | "immune" | "hepatic" | "musculoskeletal" | "cns" | "renal" | "reproductive" | "respiratory" | "cardiac" | "vascular" | "pns" | "gi" | "pancreas" | "endocrine_thyroid" | "dermatologic" | "ocular" | "oncology";
309
- drug_count_in_class: number;
310
- drugs_with_signal: number;
311
- signal_fraction: number;
312
- is_class_liability: boolean;
313
- suppressed_reason: string | null;
314
- top_aes: {
315
- term: string;
316
- report_count: number;
317
- }[];
318
- }[];
319
- } | null;
320
- export declare function buildOrganRollup(faers: ReturnType<typeof aggregateFaersAcrossModulators>, trialAes: ReturnType<typeof aggregateTrialAes>, offTarget: OffTargetPanelRows | null, classP: ReturnType<typeof aggregateClassPrecedent>, regulatoryActions?: RegulatoryActionRow[] | null): {
321
- organ: "hematologic" | "metabolic" | "immune" | "hepatic" | "musculoskeletal" | "cns" | "renal" | "reproductive" | "respiratory" | "cardiac" | "vascular" | "pns" | "gi" | "pancreas" | "endocrine_thyroid" | "dermatologic" | "ocular" | "oncology";
322
- risk_level: "low" | "medium" | "high";
323
- signal_type_count: number;
324
- signals: {
325
- chembl_polypharm_count: number;
326
- faers_count: number;
327
- trial_ae_count: number;
328
- class_liability_present: boolean;
329
- };
330
- evidence: {
331
- source: string;
332
- pmid?: string | undefined;
333
- doi?: string | undefined;
334
- accession?: string | undefined;
335
- predicate?: string | undefined;
336
- score?: number | undefined;
337
- strength?: string | undefined;
338
- is_human?: boolean | undefined;
339
- is_clinical?: boolean | undefined;
340
- excerpt?: string | undefined;
341
- metadata?: Record<string, unknown> | undefined;
342
- regulatory_reference?: {
343
- document: string;
344
- section?: string | undefined;
345
- doc_id?: string | undefined;
346
- doc_url?: string | undefined;
347
- } | undefined;
348
- }[];
349
- }[] | null;
350
- export declare function assembleDrugInteractions(phase2: Phase2Bundle, enrichedModulators?: ChemblModulator[]): {
351
- drug_id: string;
352
- drug_name: string;
353
- best_score: number;
354
- predicates: string[];
355
- sources: string[];
356
- paper_count: number;
357
- dominant_direction: "unknown";
358
- has_human_evidence: boolean;
359
- has_clinical_evidence: boolean;
360
- evidence: {
361
- source: string;
362
- predicate: string;
363
- score: number;
364
- is_clinical: boolean;
365
- is_human: boolean;
366
- metadata: {
367
- chembl_id: string;
368
- max_phase: number;
369
- molecule_type: string | null;
370
- first_approval: number | null;
371
- triage_rationale: string | undefined;
372
- };
373
- }[];
374
- }[] | null;