heor-agent-mcp 1.11.1 → 1.14.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 (122) hide show
  1. package/README.md +18 -2
  2. package/dist/audit/builder.d.ts +2 -1
  3. package/dist/audit/builder.d.ts.map +1 -1
  4. package/dist/audit/builder.js +4 -0
  5. package/dist/audit/builder.js.map +1 -1
  6. package/dist/audit/types.d.ts +7 -0
  7. package/dist/audit/types.d.ts.map +1 -1
  8. package/dist/formatters/disclosure.d.ts +16 -0
  9. package/dist/formatters/disclosure.d.ts.map +1 -0
  10. package/dist/formatters/disclosure.js +68 -0
  11. package/dist/formatters/disclosure.js.map +1 -0
  12. package/dist/formatters/governanceMarkdown.d.ts +11 -0
  13. package/dist/formatters/governanceMarkdown.d.ts.map +1 -0
  14. package/dist/formatters/governanceMarkdown.js +26 -0
  15. package/dist/formatters/governanceMarkdown.js.map +1 -0
  16. package/dist/formatters/markdown.d.ts +7 -2
  17. package/dist/formatters/markdown.d.ts.map +1 -1
  18. package/dist/formatters/markdown.js +10 -3
  19. package/dist/formatters/markdown.js.map +1 -1
  20. package/dist/governance/crosswalk.d.ts +19 -0
  21. package/dist/governance/crosswalk.d.ts.map +1 -0
  22. package/dist/governance/crosswalk.js +78 -0
  23. package/dist/governance/crosswalk.js.map +1 -0
  24. package/dist/governance/scoring.d.ts +24 -0
  25. package/dist/governance/scoring.d.ts.map +1 -0
  26. package/dist/governance/scoring.js +68 -0
  27. package/dist/governance/scoring.js.map +1 -0
  28. package/dist/providers/direct/embase.d.ts +1 -1
  29. package/dist/providers/direct/embase.d.ts.map +1 -1
  30. package/dist/providers/direct/embase.js +28 -15
  31. package/dist/providers/direct/embase.js.map +1 -1
  32. package/dist/providers/direct/index.d.ts.map +1 -1
  33. package/dist/providers/direct/index.js +12 -13
  34. package/dist/providers/direct/index.js.map +1 -1
  35. package/dist/providers/types.d.ts +1 -0
  36. package/dist/providers/types.d.ts.map +1 -1
  37. package/dist/server.js +137 -4
  38. package/dist/server.js.map +1 -1
  39. package/dist/tools/budgetImpactModel.d.ts +5 -0
  40. package/dist/tools/budgetImpactModel.d.ts.map +1 -1
  41. package/dist/tools/budgetImpactModel.js +11 -2
  42. package/dist/tools/budgetImpactModel.js.map +1 -1
  43. package/dist/tools/claimsQuery.d.ts +105 -0
  44. package/dist/tools/claimsQuery.d.ts.map +1 -0
  45. package/dist/tools/claimsQuery.js +842 -0
  46. package/dist/tools/claimsQuery.js.map +1 -0
  47. package/dist/tools/costEffectivenessModel.d.ts +9 -0
  48. package/dist/tools/costEffectivenessModel.d.ts.map +1 -1
  49. package/dist/tools/costEffectivenessModel.js +11 -1
  50. package/dist/tools/costEffectivenessModel.js.map +1 -1
  51. package/dist/tools/governanceSelfCheck.d.ts +322 -0
  52. package/dist/tools/governanceSelfCheck.d.ts.map +1 -0
  53. package/dist/tools/governanceSelfCheck.js +226 -0
  54. package/dist/tools/governanceSelfCheck.js.map +1 -0
  55. package/dist/tools/htaDossierPrep.d.ts +124 -0
  56. package/dist/tools/htaDossierPrep.d.ts.map +1 -1
  57. package/dist/tools/htaDossierPrep.js +86 -4
  58. package/dist/tools/htaDossierPrep.js.map +1 -1
  59. package/dist/tools/htaWorkflow.d.ts +5 -0
  60. package/dist/tools/htaWorkflow.d.ts.map +1 -1
  61. package/dist/tools/htaWorkflow.js +7 -1
  62. package/dist/tools/htaWorkflow.js.map +1 -1
  63. package/dist/tools/icfReadabilityCheck.d.ts +5 -0
  64. package/dist/tools/icfReadabilityCheck.d.ts.map +1 -1
  65. package/dist/tools/icfReadabilityCheck.js +7 -1
  66. package/dist/tools/icfReadabilityCheck.js.map +1 -1
  67. package/dist/tools/irbReview.d.ts +5 -0
  68. package/dist/tools/irbReview.d.ts.map +1 -1
  69. package/dist/tools/irbReview.js +7 -1
  70. package/dist/tools/irbReview.js.map +1 -1
  71. package/dist/tools/itcFeasibility.d.ts +5 -0
  72. package/dist/tools/itcFeasibility.d.ts.map +1 -1
  73. package/dist/tools/itcFeasibility.js +7 -1
  74. package/dist/tools/itcFeasibility.js.map +1 -1
  75. package/dist/tools/jcaPicoScope.d.ts +5 -0
  76. package/dist/tools/jcaPicoScope.d.ts.map +1 -1
  77. package/dist/tools/jcaPicoScope.js +8 -2
  78. package/dist/tools/jcaPicoScope.js.map +1 -1
  79. package/dist/tools/literatureSearch.d.ts +8 -0
  80. package/dist/tools/literatureSearch.d.ts.map +1 -1
  81. package/dist/tools/literatureSearch.js +16 -2
  82. package/dist/tools/literatureSearch.js.map +1 -1
  83. package/dist/tools/maicWorkflow.d.ts +5 -0
  84. package/dist/tools/maicWorkflow.d.ts.map +1 -1
  85. package/dist/tools/maicWorkflow.js +7 -1
  86. package/dist/tools/maicWorkflow.js.map +1 -1
  87. package/dist/tools/populationAdjustedComparison.d.ts +5 -0
  88. package/dist/tools/populationAdjustedComparison.d.ts.map +1 -1
  89. package/dist/tools/populationAdjustedComparison.js +7 -1
  90. package/dist/tools/populationAdjustedComparison.js.map +1 -1
  91. package/dist/tools/pvClassify.d.ts +5 -0
  92. package/dist/tools/pvClassify.d.ts.map +1 -1
  93. package/dist/tools/pvClassify.js +7 -1
  94. package/dist/tools/pvClassify.js.map +1 -1
  95. package/dist/tools/pvSignalWorkflow.d.ts +5 -0
  96. package/dist/tools/pvSignalWorkflow.d.ts.map +1 -1
  97. package/dist/tools/pvSignalWorkflow.js +7 -1
  98. package/dist/tools/pvSignalWorkflow.js.map +1 -1
  99. package/dist/tools/queryAgent.d.ts +88 -0
  100. package/dist/tools/queryAgent.d.ts.map +1 -0
  101. package/dist/tools/queryAgent.js +530 -0
  102. package/dist/tools/queryAgent.js.map +1 -0
  103. package/dist/tools/riskOfBias.d.ts +5 -0
  104. package/dist/tools/riskOfBias.d.ts.map +1 -1
  105. package/dist/tools/riskOfBias.js +7 -1
  106. package/dist/tools/riskOfBias.js.map +1 -1
  107. package/dist/tools/screenAbstracts.d.ts +5 -0
  108. package/dist/tools/screenAbstracts.d.ts.map +1 -1
  109. package/dist/tools/screenAbstracts.js +7 -1
  110. package/dist/tools/screenAbstracts.js.map +1 -1
  111. package/dist/tools/survivalFitting.d.ts +5 -0
  112. package/dist/tools/survivalFitting.d.ts.map +1 -1
  113. package/dist/tools/survivalFitting.js +7 -1
  114. package/dist/tools/survivalFitting.js.map +1 -1
  115. package/dist/tools/utilityValueSet.d.ts +5 -0
  116. package/dist/tools/utilityValueSet.d.ts.map +1 -1
  117. package/dist/tools/utilityValueSet.js +7 -1
  118. package/dist/tools/utilityValueSet.js.map +1 -1
  119. package/dist/tools/validateLinks.d.ts.map +1 -1
  120. package/dist/tools/validateLinks.js +50 -5
  121. package/dist/tools/validateLinks.js.map +1 -1
  122. package/package.json +5 -3
package/README.md CHANGED
@@ -126,7 +126,23 @@ The first prompt exercises `literature_search` + `validate_links` (free, no API
126
126
 
127
127
  ## What's new
128
128
 
129
- See [CHANGELOG.md](./CHANGELOG.md) for full version history. Current: **v1.10.2** (28 tools, 44 data sources).
129
+ See [CHANGELOG.md](./CHANGELOG.md) for full version history. Current: **v1.13.0** (28 tools, 44 data sources).
130
+
131
+ ### v1.13.0 — AI Transparency Disclosure (ISPOR ELEVATE-GenAI aligned)
132
+
133
+ 16 tools now accept an `ai_disclosure_level` parameter:
134
+
135
+ | Value | Behaviour |
136
+ |-------|-----------|
137
+ | `"off"` | No disclosure block appended |
138
+ | `"standard"` | Model ID · tools called · data sources · date · human-review reminder |
139
+ | `"submission"` | Standard block + ISPOR ELEVATE-GenAI full citation |
140
+
141
+ **Default by tool tier**: HTA/regulatory tools (`hta_dossier`, `hta_workflow`, `jca_pico_scope`, `pv_classify`, etc.) default to `"submission"`; analysis tools (`risk_of_bias`, `cost_effectiveness_model`, etc.) default to `"standard"`. Pass `ai_disclosure_level: "off"` to suppress.
142
+
143
+ **Environment-level default**: set `HEORAGENT_DISCLOSURE_LEVEL=off|standard|submission` to override the built-in per-tool defaults globally.
144
+
145
+ **Web UI persona defaults**: payer and HTA-reviewer personas always use `"submission"`; analyst personas default to `"standard"` and switch to `"off"` for scratch / exploratory prompts.
130
146
 
131
147
  ### v1.0.4 highlights (still in v1.6.3)
132
148
 
@@ -145,7 +161,7 @@ See [CHANGELOG.md](./CHANGELOG.md) for the full diff.
145
161
 
146
162
  ---
147
163
 
148
- ## Tools (27)
164
+ ## Tools (28)
149
165
 
150
166
  | Tool | Purpose |
151
167
  |------|---------|
@@ -1,5 +1,6 @@
1
- import type { AuditRecord, SourceAudit, ExclusionRecord } from "./types.js";
1
+ import type { AuditRecord, SourceAudit, ExclusionRecord, ToolCallTrace } from "./types.js";
2
2
  export declare function createAuditRecord(tool: string, query: Record<string, unknown>, output_format: string, methodology?: string): AuditRecord;
3
+ export declare function addToolCall(record: AuditRecord, trace: ToolCallTrace): AuditRecord;
3
4
  export declare function addSource(record: AuditRecord, source: SourceAudit): AuditRecord;
4
5
  export declare function addExclusion(record: AuditRecord, exclusion: ExclusionRecord): AuditRecord;
5
6
  export declare function addAssumption(record: AuditRecord, assumption: string): AuditRecord;
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,SAAK,GACf,WAAW,CAab;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAM/E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,GAAG,WAAW,CAKzF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAElF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAE5E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAEpF"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,SAAK,GACf,WAAW,CAcb;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,aAAa,GACnB,WAAW,CAEb;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,GAClB,WAAW,CAMb;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,eAAe,GACzB,WAAW,CAKb;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,WAAW,CAEb;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAE5E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,WAAW,CAEb"}
@@ -10,8 +10,12 @@ export function createAuditRecord(tool, query, output_format, methodology = "")
10
10
  assumptions: [],
11
11
  warnings: [],
12
12
  output_format,
13
+ tools_called: [],
13
14
  };
14
15
  }
16
+ export function addToolCall(record, trace) {
17
+ return { ...record, tools_called: [...record.tools_called, trace] };
18
+ }
15
19
  export function addSource(record, source) {
16
20
  return {
17
21
  ...record,
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAA8B,EAC9B,aAAqB,EACrB,WAAW,GAAG,EAAE;IAEhB,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,eAAe,EAAE,EAAE;QACnB,WAAW;QACX,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAmB,EAAE,MAAmB;IAChE,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;QACpD,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,SAA0B;IAC1E,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,UAAkB;IACnE,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,OAAe;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,WAAmB;IACrE,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAA8B,EAC9B,aAAqB,EACrB,WAAW,GAAG,EAAE;IAEhB,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,eAAe,EAAE,EAAE;QACnB,WAAW;QACX,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,aAAa;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAmB,EACnB,KAAoB;IAEpB,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAmB,EACnB,MAAmB;IAEnB,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;QACpD,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAmB,EACnB,SAA0B;IAE1B,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAmB,EACnB,UAAkB;IAElB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,OAAe;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,WAAmB;IAEnB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC"}
@@ -19,6 +19,12 @@ export interface SourceSelectionRow {
19
19
  used: boolean;
20
20
  reason: string;
21
21
  }
22
+ export interface ToolCallTrace {
23
+ name: string;
24
+ ms: number;
25
+ outcome: "ok" | "degraded" | "skipped" | "error";
26
+ output_size_bytes?: number;
27
+ }
22
28
  export interface AuditRecord {
23
29
  tool: string;
24
30
  /** ISO 8601 timestamp when the tool invocation began (query start time, not completion time) */
@@ -35,5 +41,6 @@ export interface AuditRecord {
35
41
  assumptions: string[];
36
42
  warnings: string[];
37
43
  output_format: string;
44
+ tools_called: ToolCallTrace[];
38
45
  }
39
46
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,0LAA0L;IAC1L,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,0LAA0L;IAC1L,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,aAAa,EAAE,CAAC;CAC/B"}
@@ -0,0 +1,16 @@
1
+ import type { AuditRecord } from "../audit/types.js";
2
+ export declare const ISPOR_TASK_FORCE_CITATION: string;
3
+ export type AiDisclosureLevel = "off" | "standard" | "submission";
4
+ export type DisclosureOpts = {
5
+ level: AiDisclosureLevel;
6
+ modelId?: string;
7
+ dateISO?: string;
8
+ };
9
+ export declare function extractDisclosureLevel(args: unknown, defaultLevel: AiDisclosureLevel): AiDisclosureLevel;
10
+ export declare const AI_DISCLOSURE_LEVEL_SCHEMA_PROPERTY: {
11
+ readonly type: "string";
12
+ readonly enum: readonly ["off", "standard", "submission"];
13
+ readonly description: string;
14
+ };
15
+ export declare function buildDisclosure(audit: AuditRecord, opts: DisclosureOpts): string;
16
+ //# sourceMappingURL=disclosure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.d.ts","sourceRoot":"","sources":["../../src/formatters/disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,yBAAyB,QAKiC,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAUF,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,iBAAiB,GAC9B,iBAAiB,CAKnB;AAED,eAAO,MAAM,mCAAmC;;;;CAQtC,CAAC;AAaX,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,cAAc,GACnB,MAAM,CAyCR"}
@@ -0,0 +1,68 @@
1
+ export const ISPOR_TASK_FORCE_CITATION = "Fleurence RL, Dawoud D, Bian J, Higashi MK, Wang X, Xu H, Chhatwal J, Ayer T; " +
2
+ "ISPOR Working Group on Generative AI. " +
3
+ "ELEVATE-GenAI: Reporting Guidelines for the Use of Large Language Models in " +
4
+ "Health Economics and Outcomes Research: An ISPOR Working Group Report. " +
5
+ "Value Health. 2025;28(11):1611–1625. doi:10.1016/j.jval.2025.06.018";
6
+ const DEFAULT_MODEL = "claude-sonnet-4-6";
7
+ const VALID_LEVELS = new Set([
8
+ "off",
9
+ "standard",
10
+ "submission",
11
+ ]);
12
+ export function extractDisclosureLevel(args, defaultLevel) {
13
+ const raw = args?.ai_disclosure_level;
14
+ return VALID_LEVELS.has(raw)
15
+ ? raw
16
+ : defaultLevel;
17
+ }
18
+ export const AI_DISCLOSURE_LEVEL_SCHEMA_PROPERTY = {
19
+ type: "string",
20
+ enum: ["off", "standard", "submission"],
21
+ description: "AI assistance disclosure level appended to the output. " +
22
+ '"off" = no disclosure (analyst scratch mode); ' +
23
+ '"standard" = default visible block (model, tools called, sources, date, human-review reminder); ' +
24
+ '"submission" = standard + ISPOR ELEVATE-GenAI citation (use for regulatory or payer submissions).',
25
+ };
26
+ function formatToolCalls(audit) {
27
+ if (audit.tools_called.length === 0)
28
+ return "this tool only";
29
+ return audit.tools_called
30
+ .map((t) => {
31
+ const ms = t.ms >= 1000 ? `${(t.ms / 1000).toFixed(1)} s` : `${t.ms} ms`;
32
+ const suffix = t.outcome !== "ok" ? ` — ${t.outcome}` : "";
33
+ return `${t.name} (${ms}${suffix})`;
34
+ })
35
+ .join(", ");
36
+ }
37
+ export function buildDisclosure(audit, opts) {
38
+ if (opts.level === "off")
39
+ return "";
40
+ const model = opts.modelId ?? DEFAULT_MODEL;
41
+ const date = opts.dateISO ?? new Date().toISOString().slice(0, 10);
42
+ const lines = [];
43
+ lines.push("---");
44
+ lines.push("### AI Assistance Disclosure (ISPOR-aligned)");
45
+ lines.push("");
46
+ lines.push("This output was generated with AI assistance and " +
47
+ "**requires human review before use in regulatory submission, " +
48
+ "payer dossier, or clinical decision-making.**");
49
+ lines.push("");
50
+ lines.push(`- **Model:** ${model} (Anthropic)`);
51
+ lines.push(`- **Generated:** ${date}`);
52
+ lines.push(`- **Tools called:** ${formatToolCalls(audit)}`);
53
+ if (audit.sources_queried.length > 0) {
54
+ const sourceParts = audit.sources_queried.map((s) => `${s.source} (n=${s.results_included} hits)`);
55
+ lines.push(`- **Sources queried:** ${sourceParts.join(", ")}`);
56
+ }
57
+ lines.push("");
58
+ lines.push("_Per ISPOR Task Force on GenAI in HEOR (2025), the user/reviewer remains responsible " +
59
+ "for verifying clinical claims, regulatory status, and any cost-effectiveness or " +
60
+ "budget-impact figures against the cited primary sources._");
61
+ if (opts.level === "submission") {
62
+ lines.push("");
63
+ lines.push("**Submission-grade detail:**");
64
+ lines.push(`- **ISPOR citation:** ${ISPOR_TASK_FORCE_CITATION}`);
65
+ }
66
+ return lines.join("\n");
67
+ }
68
+ //# sourceMappingURL=disclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../../src/formatters/disclosure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Rag, Scorecard } from "../governance/scoring.js";
2
+ export interface RenderedDimension {
3
+ key: string;
4
+ label: string;
5
+ rag: Rag;
6
+ elevate_refs: string[];
7
+ finding: string;
8
+ recommended_mitigation: string;
9
+ }
10
+ export declare function renderGovernanceScorecard(dims: RenderedDimension[], scorecard: Scorecard, verdict: string): string;
11
+ //# sourceMappingURL=governanceMarkdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governanceMarkdown.d.ts","sourceRoot":"","sources":["../../src/formatters/governanceMarkdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG/D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AASD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,iBAAiB,EAAE,EACzB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,GACd,MAAM,CAuBR"}
@@ -0,0 +1,26 @@
1
+ import { UNSCORED_DOMAINS } from "../governance/crosswalk.js";
2
+ const RAG_ICON = {
3
+ green: "🟢",
4
+ amber: "🟡",
5
+ red: "🔴",
6
+ insufficient: "⚪",
7
+ };
8
+ export function renderGovernanceScorecard(dims, scorecard, verdict) {
9
+ const lines = [];
10
+ lines.push("## GenAI-in-HTA Governance Self-Check");
11
+ lines.push("");
12
+ lines.push(`**Verdict:** ${verdict}`);
13
+ lines.push("");
14
+ lines.push(`**Scorecard:** 🟢 ${scorecard.green} · 🟡 ${scorecard.amber} · 🔴 ${scorecard.red} · ⚪ ${scorecard.insufficient} (insufficient)`);
15
+ lines.push("");
16
+ lines.push("| Dimension | Score | ELEVATE domain(s) | Finding | Recommended mitigation |");
17
+ lines.push("|---|---|---|---|---|");
18
+ for (const d of dims) {
19
+ const mit = d.recommended_mitigation || "—";
20
+ lines.push(`| ${d.label} | ${RAG_ICON[d.rag]} ${d.rag} | ${d.elevate_refs.join("; ")} | ${d.finding} | ${mit} |`);
21
+ }
22
+ lines.push("");
23
+ lines.push(`_Scope: this tool scores 6 governance dimensions. ELEVATE-GenAI also defines model-evaluation domains not scored here (${UNSCORED_DOMAINS.join(", ")}). "Insufficient" means no evidence was supplied — it is never a pass._`);
24
+ return lines.join("\n");
25
+ }
26
+ //# sourceMappingURL=governanceMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governanceMarkdown.js","sourceRoot":"","sources":["../../src/formatters/governanceMarkdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAW9D,MAAM,QAAQ,GAAwB;IACpC,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,YAAY,EAAE,GAAG;CAClB,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,IAAyB,EACzB,SAAoB,EACpB,OAAe;IAEf,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,qBAAqB,SAAS,CAAC,KAAK,SAAS,SAAS,CAAC,KAAK,SAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,CAAC,YAAY,iBAAiB,CAClI,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC3F,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,CAAC,sBAAsB,IAAI,GAAG,CAAC;QAC5C,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,GAAG,IAAI,CACtG,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,0HAA0H,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAC/N,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import type { LiteratureResult } from "../providers/types.js";
2
2
  import type { AuditRecord } from "../audit/types.js";
3
- export declare function resultsToMarkdown(results: LiteratureResult[], audit: AuditRecord): string;
4
- export declare function auditToMarkdown(audit: AuditRecord): string;
3
+ import { type DisclosureOpts } from "./disclosure.js";
4
+ export declare function resultsToMarkdown(results: LiteratureResult[], audit: AuditRecord, opts?: {
5
+ disclosure?: DisclosureOpts;
6
+ }): string;
7
+ export declare function auditToMarkdown(audit: AuditRecord, opts?: {
8
+ disclosure?: DisclosureOpts;
9
+ }): string;
5
10
  //# sourceMappingURL=markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,WAAW,GACjB,MAAM,CA4BR;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAiD1D"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,cAAc,CAAA;CAAE,GACrC,MAAM,CA4BR;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,cAAc,CAAA;CAAE,GACrC,MAAM,CAKR"}
@@ -1,4 +1,5 @@
1
- export function resultsToMarkdown(results, audit) {
1
+ import { buildDisclosure } from "./disclosure.js";
2
+ export function resultsToMarkdown(results, audit, opts) {
2
3
  const lines = [];
3
4
  lines.push(`## Literature Search Results`);
4
5
  lines.push(`*${results.length} studies included across ${audit.sources_queried.length} sources*\n`);
@@ -16,10 +17,16 @@ export function resultsToMarkdown(results, audit) {
16
17
  lines.push(`**URL:** ${r.url}\n`);
17
18
  });
18
19
  }
19
- lines.push(auditToMarkdown(audit));
20
+ lines.push(auditToMarkdown(audit, opts));
20
21
  return lines.join("\n");
21
22
  }
22
- export function auditToMarkdown(audit) {
23
+ export function auditToMarkdown(audit, opts) {
24
+ const disclosure = opts?.disclosure
25
+ ? buildDisclosure(audit, opts.disclosure)
26
+ : "";
27
+ return (disclosure ? disclosure + "\n\n" : "") + renderAuditBody(audit);
28
+ }
29
+ function renderAuditBody(audit) {
23
30
  const lines = [];
24
31
  lines.push(`---`);
25
32
  lines.push(`## Audit Report`);
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** The ten ELEVATE-GenAI reporting domains, verbatim from arXiv 2501.12394 Table 1. */
2
+ export declare const ELEVATE_VERIFIED_DOMAINS: readonly ["Model Characteristics", "Accuracy Assessment", "Comprehensiveness Assessment", "Factuality Verification", "Reproducibility Protocols and Generalizability", "Robustness Checks", "Fairness and Bias", "Deployment Context and Efficiency Metrics", "Calibration and Uncertainty", "Security and Privacy"];
3
+ /** Model-evaluation domains this governance tool deliberately does NOT score. */
4
+ export declare const UNSCORED_DOMAINS: readonly ["Robustness Checks", "Deployment Context and Efficiency Metrics", "Calibration and Uncertainty"];
5
+ export type DimensionKey = "transparency" | "citation_validation" | "human_oversight" | "phi_data_handling" | "bias_equity" | "auditability";
6
+ export interface CrosswalkEntry {
7
+ key: DimensionKey;
8
+ label: string;
9
+ elevate_refs: string[];
10
+ /** Set only when the dimension is not a 1:1 ELEVATE domain. */
11
+ derivation_note?: string;
12
+ /** "Is the safeguard in place?" phrasing used to collect the probe. */
13
+ probe_question: string;
14
+ /** Standard fix shown as recommended_mitigation when rag !== green. */
15
+ remediation: string;
16
+ }
17
+ export declare const DIMENSION_ORDER: DimensionKey[];
18
+ export declare const CROSSWALK: Record<DimensionKey, CrosswalkEntry>;
19
+ //# sourceMappingURL=crosswalk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crosswalk.d.ts","sourceRoot":"","sources":["../../src/governance/crosswalk.ts"],"names":[],"mappings":"AAEA,uFAAuF;AACvF,eAAO,MAAM,wBAAwB,sTAW3B,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,4GAInB,CAAC;AAEX,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,qBAAqB,GACrB,iBAAiB,GACjB,mBAAmB,GACnB,aAAa,GACb,cAAc,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,EAOzC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CA6D1D,CAAC"}
@@ -0,0 +1,78 @@
1
+ // heor-agent-mcp/src/governance/crosswalk.ts
2
+ /** The ten ELEVATE-GenAI reporting domains, verbatim from arXiv 2501.12394 Table 1. */
3
+ export const ELEVATE_VERIFIED_DOMAINS = [
4
+ "Model Characteristics",
5
+ "Accuracy Assessment",
6
+ "Comprehensiveness Assessment",
7
+ "Factuality Verification",
8
+ "Reproducibility Protocols and Generalizability",
9
+ "Robustness Checks",
10
+ "Fairness and Bias",
11
+ "Deployment Context and Efficiency Metrics",
12
+ "Calibration and Uncertainty",
13
+ "Security and Privacy",
14
+ ];
15
+ /** Model-evaluation domains this governance tool deliberately does NOT score. */
16
+ export const UNSCORED_DOMAINS = [
17
+ "Robustness Checks",
18
+ "Deployment Context and Efficiency Metrics",
19
+ "Calibration and Uncertainty",
20
+ ];
21
+ export const DIMENSION_ORDER = [
22
+ "transparency",
23
+ "citation_validation",
24
+ "human_oversight",
25
+ "phi_data_handling",
26
+ "bias_equity",
27
+ "auditability",
28
+ ];
29
+ export const CROSSWALK = {
30
+ transparency: {
31
+ key: "transparency",
32
+ label: "Transparency & disclosure",
33
+ elevate_refs: ["Model Characteristics"],
34
+ probe_question: "Is AI assistance disclosed in the output — model used, prompts/sources, and a human-review note?",
35
+ remediation: "Append an ISPOR ELEVATE-GenAI disclosure block (model, sources, human-review note) to every AI-assisted output.",
36
+ },
37
+ citation_validation: {
38
+ key: "citation_validation",
39
+ label: "Citation validation",
40
+ elevate_refs: [
41
+ "Factuality Verification",
42
+ "Accuracy Assessment",
43
+ "Comprehensiveness Assessment",
44
+ ],
45
+ probe_question: "Are AI-produced claims and citations verified against primary sources (e.g. automated link/source validation)?",
46
+ remediation: "Validate every AI-produced citation/URL against the primary source before use; flag and remove hallucinated references.",
47
+ },
48
+ human_oversight: {
49
+ key: "human_oversight",
50
+ label: "Human-in-the-loop oversight",
51
+ elevate_refs: ["Factuality Verification", "Accuracy Assessment"],
52
+ derivation_note: "Derived from ELEVATE Factuality Verification / Accuracy Assessment plus the HTAi Community-of-Practice human-oversight principle; ELEVATE has no standalone oversight domain.",
53
+ probe_question: "Does a named human review every AI-generated claim before it is used in a dossier or decision?",
54
+ remediation: "Require a named human reviewer to sign off on every AI-generated claim before it enters a dossier or decision.",
55
+ },
56
+ phi_data_handling: {
57
+ key: "phi_data_handling",
58
+ label: "PHI & data handling",
59
+ elevate_refs: ["Security and Privacy"],
60
+ probe_question: "Is patient-identifiable data kept out of unregulated AI systems and otherwise protected?",
61
+ remediation: "Keep patient-identifiable data out of unregulated AI tools; use BYOK / in-tenant inference and document the data flow.",
62
+ },
63
+ bias_equity: {
64
+ key: "bias_equity",
65
+ label: "Bias & equity",
66
+ elevate_refs: ["Fairness and Bias"],
67
+ probe_question: "Are subgroup/equity effects and training-data bias considered and documented?",
68
+ remediation: "Assess subgroup/equity impact and training-data representativeness; document limitations.",
69
+ },
70
+ auditability: {
71
+ key: "auditability",
72
+ label: "Auditability & reproducibility",
73
+ elevate_refs: ["Reproducibility Protocols and Generalizability"],
74
+ probe_question: "Is there a reproducible audit trail (inputs, sources, tool/model versions, timestamp)?",
75
+ remediation: "Record a reproducible audit trail (inputs, sources, tool/model versions, timestamp) for every run.",
76
+ },
77
+ };
78
+ //# sourceMappingURL=crosswalk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crosswalk.js","sourceRoot":"","sources":["../../src/governance/crosswalk.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,uFAAuF;AACvF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,uBAAuB;IACvB,qBAAqB;IACrB,8BAA8B;IAC9B,yBAAyB;IACzB,gDAAgD;IAChD,mBAAmB;IACnB,mBAAmB;IACnB,2CAA2C;IAC3C,6BAA6B;IAC7B,sBAAsB;CACd,CAAC;AAEX,iFAAiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB;IACnB,2CAA2C;IAC3C,6BAA6B;CACrB,CAAC;AAsBX,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,cAAc;IACd,qBAAqB;IACrB,iBAAiB;IACjB,mBAAmB;IACnB,aAAa;IACb,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAyC;IAC7D,YAAY,EAAE;QACZ,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,CAAC,uBAAuB,CAAC;QACvC,cAAc,EACZ,kGAAkG;QACpG,WAAW,EACT,iHAAiH;KACpH;IACD,mBAAmB,EAAE;QACnB,GAAG,EAAE,qBAAqB;QAC1B,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE;YACZ,yBAAyB;YACzB,qBAAqB;YACrB,8BAA8B;SAC/B;QACD,cAAc,EACZ,gHAAgH;QAClH,WAAW,EACT,yHAAyH;KAC5H;IACD,eAAe,EAAE;QACf,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;QAChE,eAAe,EACb,+KAA+K;QACjL,cAAc,EACZ,gGAAgG;QAClG,WAAW,EACT,gHAAgH;KACnH;IACD,iBAAiB,EAAE;QACjB,GAAG,EAAE,mBAAmB;QACxB,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE,CAAC,sBAAsB,CAAC;QACtC,cAAc,EACZ,0FAA0F;QAC5F,WAAW,EACT,wHAAwH;KAC3H;IACD,WAAW,EAAE;QACX,GAAG,EAAE,aAAa;QAClB,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,CAAC,mBAAmB,CAAC;QACnC,cAAc,EACZ,+EAA+E;QACjF,WAAW,EACT,2FAA2F;KAC9F;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,gCAAgC;QACvC,YAAY,EAAE,CAAC,gDAAgD,CAAC;QAChE,cAAc,EACZ,wFAAwF;QAC1F,WAAW,EACT,oGAAoG;KACvG;CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { AuditRecord } from "../audit/types.js";
2
+ export type Rag = "green" | "amber" | "red" | "insufficient";
3
+ export type ProbeAnswer = "yes" | "no" | "partial" | null | undefined;
4
+ export type UseCase = "regulatory_submission" | "payer_dossier" | "internal_analysis" | "exploratory";
5
+ export interface Scorecard {
6
+ green: number;
7
+ amber: number;
8
+ red: number;
9
+ insufficient: number;
10
+ }
11
+ export declare function scoreDimension(answer: ProbeAnswer): Rag;
12
+ export declare function tallyScorecard(rags: Rag[]): Scorecard;
13
+ export declare function aggregateVerdict(rags: Rag[], useCase: UseCase): string;
14
+ export interface DerivedProbes {
15
+ transparency: ProbeAnswer;
16
+ citation_validation: ProbeAnswer;
17
+ auditability: ProbeAnswer;
18
+ }
19
+ /**
20
+ * Honestly derive ONLY the dimensions a trace can evidence (1, 2, 6).
21
+ * Human-oversight, PHI, and bias cannot be proven from a trace → caller leaves them null.
22
+ */
23
+ export declare function deriveFromAudit(audit: AuditRecord): DerivedProbes;
24
+ //# sourceMappingURL=scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/governance/scoring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,cAAc,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;AACtE,MAAM,MAAM,OAAO,GACf,uBAAuB,GACvB,eAAe,GACf,mBAAmB,GACnB,aAAa,CAAC;AAElB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAWvD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,CAOrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAyBtE;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,WAAW,CAAC;IAC1B,mBAAmB,EAAE,WAAW,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAyBjE"}
@@ -0,0 +1,68 @@
1
+ export function scoreDimension(answer) {
2
+ switch (answer) {
3
+ case "yes":
4
+ return "green";
5
+ case "partial":
6
+ return "amber";
7
+ case "no":
8
+ return "red";
9
+ default:
10
+ return "insufficient";
11
+ }
12
+ }
13
+ export function tallyScorecard(rags) {
14
+ return {
15
+ green: rags.filter((r) => r === "green").length,
16
+ amber: rags.filter((r) => r === "amber").length,
17
+ red: rags.filter((r) => r === "red").length,
18
+ insufficient: rags.filter((r) => r === "insufficient").length,
19
+ };
20
+ }
21
+ export function aggregateVerdict(rags, useCase) {
22
+ const highStakes = useCase === "regulatory_submission" || useCase === "payer_dossier";
23
+ const blocking = highStakes || useCase === "internal_analysis";
24
+ const hasRed = rags.includes("red");
25
+ const hasInsufficient = rags.includes("insufficient");
26
+ const hasAmber = rags.includes("amber");
27
+ if (hasRed) {
28
+ return blocking
29
+ ? "Not submission-ready — material governance gap (Red)"
30
+ : "Governance gaps noted (advisory — exploratory use)";
31
+ }
32
+ if (hasInsufficient) {
33
+ if (highStakes)
34
+ return "Cannot certify — missing governance evidence";
35
+ if (useCase === "internal_analysis")
36
+ return "Adequate with gaps — missing evidence flagged";
37
+ return "Informational — missing evidence (advisory — exploratory use)";
38
+ }
39
+ if (hasAmber) {
40
+ return useCase === "exploratory"
41
+ ? "Minor gaps (advisory)"
42
+ : "Adequate with gaps — resolve ambers before use";
43
+ }
44
+ return "Strong governance posture";
45
+ }
46
+ /**
47
+ * Honestly derive ONLY the dimensions a trace can evidence (1, 2, 6).
48
+ * Human-oversight, PHI, and bias cannot be proven from a trace → caller leaves them null.
49
+ */
50
+ export function deriveFromAudit(audit) {
51
+ const hasCore = Boolean(audit.tool && audit.timestamp);
52
+ const transparency = hasCore
53
+ ? audit.methodology && audit.methodology.trim().length > 0
54
+ ? "yes"
55
+ : "partial"
56
+ : null;
57
+ const calledValidate = audit.tools_called.some((t) => t.name === "utils.validate_links" || t.name === "validate_links");
58
+ const hasSources = audit.sources_queried.length > 0;
59
+ const citation_validation = calledValidate && hasSources ? "yes" : hasSources ? "partial" : "no";
60
+ const auditability = audit.timestamp &&
61
+ (audit.tools_called.length > 0 || audit.sources_queried.length > 0)
62
+ ? "yes"
63
+ : audit.timestamp
64
+ ? "partial"
65
+ : null;
66
+ return { transparency, citation_validation, auditability };
67
+ }
68
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/governance/scoring.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { LiteratureResult } from "../types.js";
2
- export declare function fetchEmbase(query: string, maxResults: number): Promise<LiteratureResult[]>;
2
+ export declare function fetchEmbase(query: string, maxResults: number, injectedApiKey?: string): Promise<LiteratureResult[]>;
3
3
  //# sourceMappingURL=embase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embase.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/embase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAsBpD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsC7B"}
1
+ {"version":3,"file":"embase.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/embase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAwBpD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqD7B"}
@@ -1,36 +1,49 @@
1
- const BASE = "https://api.elsevier.com/content/search/embase";
2
- export async function fetchEmbase(query, maxResults) {
3
- const apiKey = process.env.ELSEVIER_API_KEY;
1
+ // EMBASE records are indexed in Scopus and accessed via the Scopus Search API
2
+ // with dbId=embase. The standalone /content/search/embase endpoint returns 404.
3
+ const BASE = "https://api.elsevier.com/content/search/scopus";
4
+ export async function fetchEmbase(query, maxResults, injectedApiKey) {
5
+ const apiKey = injectedApiKey ?? process.env.ELSEVIER_API_KEY;
4
6
  if (!apiKey)
5
7
  return [];
8
+ const instToken = process.env.ELSEVIER_INST_TOKEN;
9
+ const headers = {
10
+ "X-ELS-APIKey": apiKey,
11
+ Accept: "application/json",
12
+ };
13
+ if (instToken)
14
+ headers["X-ELS-Insttoken"] = instToken;
6
15
  try {
7
- const url = `${BASE}?query=${encodeURIComponent(query)}&count=${maxResults}&field=title,creator,coverDate,description,url,doi,pii,subtypeDescription`;
8
- const res = await fetch(url, {
9
- headers: {
10
- "X-ELS-APIKey": apiKey,
11
- Accept: "application/json",
12
- },
16
+ const params = new URLSearchParams({
17
+ query,
18
+ count: String(maxResults),
19
+ dbId: "embase",
20
+ field: "title,creator,publicationName,coverDate,description,doi,subtypeDescription,link",
21
+ });
22
+ const res = await fetch(`${BASE}?${params}`, {
23
+ headers,
13
24
  signal: AbortSignal.timeout(15_000),
14
25
  });
15
- if (!res.ok)
16
- return [];
26
+ if (!res.ok) {
27
+ const body = await res.text().catch(() => "");
28
+ throw new Error(`Scopus API ${res.status}: ${body.slice(0, 200)}`);
29
+ }
17
30
  const data = (await res.json());
18
31
  const entries = data["search-results"]?.entry ?? [];
19
32
  return entries
20
33
  .filter((e) => e["dc:title"])
21
34
  .map((e, i) => {
22
35
  const doi = e["prism:doi"];
23
- const pii = e["pii"];
24
- const id = doi ?? pii ?? `embase_${i}`;
36
+ const scopusLink = e.link?.find((l) => l["@ref"] === "scopus")?.["@href"];
37
+ const url = doi ? `https://doi.org/${doi}` : (scopusLink ?? "");
25
38
  return {
26
- id: `embase_${id}`,
39
+ id: `embase_${doi ?? scopusLink ?? i}`,
27
40
  source: "embase",
28
41
  title: e["dc:title"] ?? "",
29
42
  authors: e["dc:creator"] ? [e["dc:creator"]] : [],
30
43
  date: e["prism:coverDate"] ?? "",
31
44
  study_type: mapSubtype(e["subtypeDescription"]),
32
45
  abstract: e["dc:description"] ?? "",
33
- url: doi ? `https://doi.org/${doi}` : (e["prism:url"] ?? ""),
46
+ url,
34
47
  };
35
48
  });
36
49
  }