heron-ai 0.2.2 → 0.4.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 (85) hide show
  1. package/dist/bin/heron.js +31 -2
  2. package/dist/bin/heron.js.map +1 -1
  3. package/dist/src/analysis/analyzer.d.ts +1 -1
  4. package/dist/src/analysis/analyzer.d.ts.map +1 -1
  5. package/dist/src/analysis/analyzer.js +120 -6
  6. package/dist/src/analysis/analyzer.js.map +1 -1
  7. package/dist/src/analysis/risk-scorer.d.ts +32 -0
  8. package/dist/src/analysis/risk-scorer.d.ts.map +1 -1
  9. package/dist/src/analysis/risk-scorer.js +134 -0
  10. package/dist/src/analysis/risk-scorer.js.map +1 -1
  11. package/dist/src/commands/diff.d.ts +17 -0
  12. package/dist/src/commands/diff.d.ts.map +1 -0
  13. package/dist/src/commands/diff.js +63 -0
  14. package/dist/src/commands/diff.js.map +1 -0
  15. package/dist/src/compliance/control-mappings.d.ts +21 -0
  16. package/dist/src/compliance/control-mappings.d.ts.map +1 -0
  17. package/dist/src/compliance/control-mappings.js +182 -0
  18. package/dist/src/compliance/control-mappings.js.map +1 -0
  19. package/dist/src/compliance/frameworks.d.ts +24 -0
  20. package/dist/src/compliance/frameworks.d.ts.map +1 -0
  21. package/dist/src/compliance/frameworks.js +55 -0
  22. package/dist/src/compliance/frameworks.js.map +1 -0
  23. package/dist/src/compliance/index.d.ts +9 -0
  24. package/dist/src/compliance/index.d.ts.map +1 -0
  25. package/dist/src/compliance/index.js +8 -0
  26. package/dist/src/compliance/index.js.map +1 -0
  27. package/dist/src/compliance/mapper.d.ts +126 -0
  28. package/dist/src/compliance/mapper.d.ts.map +1 -0
  29. package/dist/src/compliance/mapper.js +443 -0
  30. package/dist/src/compliance/mapper.js.map +1 -0
  31. package/dist/src/compliance/types.d.ts +120 -0
  32. package/dist/src/compliance/types.d.ts.map +1 -0
  33. package/dist/src/compliance/types.js +99 -0
  34. package/dist/src/compliance/types.js.map +1 -0
  35. package/dist/src/diff/differ.d.ts +9 -0
  36. package/dist/src/diff/differ.d.ts.map +1 -0
  37. package/dist/src/diff/differ.js +52 -0
  38. package/dist/src/diff/differ.js.map +1 -0
  39. package/dist/src/interview/interviewer.d.ts +2 -0
  40. package/dist/src/interview/interviewer.d.ts.map +1 -1
  41. package/dist/src/interview/interviewer.js.map +1 -1
  42. package/dist/src/interview/protocol.d.ts.map +1 -1
  43. package/dist/src/interview/protocol.js +28 -5
  44. package/dist/src/interview/protocol.js.map +1 -1
  45. package/dist/src/interview/questions.d.ts.map +1 -1
  46. package/dist/src/interview/questions.js +55 -0
  47. package/dist/src/interview/questions.js.map +1 -1
  48. package/dist/src/llm/client.d.ts +26 -1
  49. package/dist/src/llm/client.d.ts.map +1 -1
  50. package/dist/src/llm/client.js +108 -15
  51. package/dist/src/llm/client.js.map +1 -1
  52. package/dist/src/llm/prompts.d.ts +27 -1
  53. package/dist/src/llm/prompts.d.ts.map +1 -1
  54. package/dist/src/llm/prompts.js +133 -1
  55. package/dist/src/llm/prompts.js.map +1 -1
  56. package/dist/src/report/generator.d.ts +1 -7
  57. package/dist/src/report/generator.d.ts.map +1 -1
  58. package/dist/src/report/generator.js +47 -236
  59. package/dist/src/report/generator.js.map +1 -1
  60. package/dist/src/report/templates.d.ts +2 -1
  61. package/dist/src/report/templates.d.ts.map +1 -1
  62. package/dist/src/report/templates.js +436 -84
  63. package/dist/src/report/templates.js.map +1 -1
  64. package/dist/src/report/types.d.ts +34 -19
  65. package/dist/src/report/types.d.ts.map +1 -1
  66. package/dist/src/report/types.js +8 -4
  67. package/dist/src/report/types.js.map +1 -1
  68. package/dist/src/server/index.d.ts +1 -1
  69. package/dist/src/server/index.d.ts.map +1 -1
  70. package/dist/src/server/index.js +212 -55
  71. package/dist/src/server/index.js.map +1 -1
  72. package/dist/src/server/sessions.d.ts +10 -0
  73. package/dist/src/server/sessions.d.ts.map +1 -1
  74. package/dist/src/server/sessions.js +73 -9
  75. package/dist/src/server/sessions.js.map +1 -1
  76. package/dist/src/util/provided.d.ts +49 -0
  77. package/dist/src/util/provided.d.ts.map +1 -0
  78. package/dist/src/util/provided.js +83 -0
  79. package/dist/src/util/provided.js.map +1 -0
  80. package/dist/src/util/systems.d.ts +15 -0
  81. package/dist/src/util/systems.d.ts.map +1 -0
  82. package/dist/src/util/systems.js +41 -0
  83. package/dist/src/util/systems.js.map +1 -0
  84. package/package.json +1 -1
  85. package/skills/heron-audit/bin/heron-update-check +13 -4
@@ -1,13 +1,22 @@
1
1
  import { analyzeTranscript } from '../analysis/analyzer.js';
2
- import { computeRiskScore } from '../analysis/risk-scorer.js';
2
+ import { computeRiskScore, applySeverityOverrides } from '../analysis/risk-scorer.js';
3
3
  import { renderMarkdownReport } from './templates.js';
4
+ import { isProvided } from '../util/provided.js';
5
+ import { mapFindingsToRiskCategories, } from '../compliance/mapper.js';
4
6
  export async function generateReport(session, llmClient, options) {
5
7
  // 1. Analyze transcript with LLM
6
- const analysis = await analyzeTranscript(llmClient, session.transcript);
8
+ const analysis = await analyzeTranscript(llmClient, session.transcript, session.id);
9
+ // 1b. AAP-43: apply deterministic severity floor to LLM-assigned risk labels
10
+ analysis.risks = applySeverityOverrides(analysis.risks, analysis.systems, analysis.makesDecisionsAboutPeople);
7
11
  // 2. Compute risk score from structured per-system data
8
12
  const riskScore = computeRiskScore(analysis.systems, analysis.risks);
9
- // 3. Compute regulatory flags
10
- const regulatoryCompliance = computeRegulatoryFlags(analysis, session.transcript);
13
+ // 3. Compute structured compliance (AAP-31: CategorizedCompliance)
14
+ const compliance = mapFindingsToRiskCategories({
15
+ systems: analysis.systems,
16
+ transcript: session.transcript,
17
+ makesDecisionsAboutPeople: analysis.makesDecisionsAboutPeople,
18
+ decisionMakingDetails: analysis.decisionMakingDetails,
19
+ });
11
20
  // 4. Build report object
12
21
  const report = {
13
22
  summary: analysis.summary,
@@ -22,10 +31,10 @@ export async function generateReport(session, llmClient, options) {
22
31
  recommendation: analysis.recommendation,
23
32
  overallRiskLevel: riskScore.overall,
24
33
  transcript: session.transcript,
25
- dataQuality: computeDataQualityFromTranscript(session.transcript),
34
+ dataQuality: computeDataQualityFromTranscript(session.transcript, analysis.systems),
26
35
  makesDecisionsAboutPeople: analysis.makesDecisionsAboutPeople,
27
36
  decisionMakingDetails: analysis.decisionMakingDetails,
28
- regulatoryCompliance,
37
+ compliance,
29
38
  metadata: {
30
39
  date: session.startedAt.toISOString().split('T')[0],
31
40
  target: options.target,
@@ -39,236 +48,12 @@ export async function generateReport(session, llmClient, options) {
39
48
  : renderMarkdownReport(report);
40
49
  return { report: formatted, reportJson: report };
41
50
  }
42
- /**
43
- * Classify the impact level of decisions about people.
44
- * High: hiring, credit, insurance, medical, legal — has legal/significant effects
45
- * Medium: scoring leads, ranking, recommending, moderating — influences but no legal effect
46
- * Unclear: agent says it decides about people, but we can't determine impact level
47
- */
48
- function classifyDecisionImpact(decidesAboutPeople, details) {
49
- if (!decidesAboutPeople)
50
- return 'none';
51
- if (!details || details === 'NOT PROVIDED' || details.trim().length < 10)
52
- return 'unclear';
53
- const text = details.toLowerCase();
54
- // High-impact: legal/significant effects on individuals
55
- const highImpact = /\b(hir(e|ing)|recruit|screen.?candidate|reject|deny|approv(e|al|ing).*(loan|credit|mortgage|claim|application)|terminat|fir(e|ing)|credit.?scor|insurance.?claim|diagnos|prescri|legal.?decision|sentenc|parole|bail|evict|expel|suspend|disqualif|ban\b|block.?user|delist)\b/i;
56
- if (highImpact.test(text))
57
- return 'high';
58
- // Medium-impact: influences outcomes but no legal/binding effect
59
- const mediumImpact = /\b(scor(e|ing)|rank|filter|recommend|prioriti[sz]|moderate|flag|qualif(y|ied)|match|sort|categori[sz]|segment|lead|prospect|outreach|target|personali[sz])\b/i;
60
- if (mediumImpact.test(text))
61
- return 'medium';
62
- return 'unclear';
63
- }
64
- /** Derive regulatory flags from analysis results and transcript signals */
65
- export function computeRegulatoryFlags(analysis, transcript) {
66
- const eu = [];
67
- const us = [];
68
- const uk = [];
69
- const allText = transcript.map(qa => qa.answer.toLowerCase()).join(' ');
70
- // ── Signal detection ────────────────────────────────────────────────────
71
- // Sensitive PII = non-public identifiers, government IDs
72
- const hasSensitivePII = /\b(ssn|passport|social.?security|date.?of.?birth|dob|bank.?account|credit.?card|driver.?licen[sc]e|tax.?id|national.?id)\b/i.test(allText);
73
- // Public PII = names, emails, job titles — still personal data under GDPR but lower risk
74
- const hasPublicPII = /\b(pii|personal|email|name|phone|address|linkedin|profile|title|company)\b/i.test(allText);
75
- const hasPII = hasSensitivePII || hasPublicPII;
76
- // Health: require medical-specific terms (not just "health" which matches too broadly)
77
- const hasMedicalTerms = /\b(medical|patient|hipaa|diagnosis|prescription|clinical|ehr|emr|phi\b|protected.?health)\b/i.test(allText);
78
- const hasHealthInContext = /\b(health)\b/i.test(allText)
79
- && !/health.?check|health.?endpoint|health.?status|health.?ping|health(y|ier)/i.test(allText)
80
- && /\b(data|record|information|system|care|provider)\b/i.test(allText);
81
- const hasHealth = hasMedicalTerms || hasHealthInContext;
82
- // Filter out interview/orchestration platforms from signal detection
83
- const businessSystems = analysis.systems.filter(s => {
84
- const id = s.systemId.toLowerCase();
85
- return !/\bheron\b/.test(id)
86
- && !/internal\s*(orchestrat|api|platform)/.test(id)
87
- && !/interview\s*(platform|endpoint|api)/.test(id)
88
- && !/audit\s*(platform|endpoint|api)/.test(id);
89
- });
90
- const decidesAboutPeople = analysis.makesDecisionsAboutPeople === true;
91
- const decisionImpact = classifyDecisionImpact(decidesAboutPeople, analysis.decisionMakingDetails);
92
- const hasWriteOps = businessSystems.some(s => s.writeOperations.length > 0);
93
- const hasExcessivePerms = businessSystems.some(s => s.scopesDelta.length > 0);
94
- const hasIrreversibleWrites = businessSystems.some(s => s.writeOperations.some(w => !w.reversible));
95
- const hasOrgBlast = businessSystems.some(s => s.blastRadius === 'org-wide' || s.blastRadius === 'cross-tenant');
96
- // Read-only agents with org blast are less risky than write agents with org blast
97
- const hasOrgBlastWithWrites = hasOrgBlast && hasWriteOps;
98
- // ── EU Flags ──────────────────────────────────────────────────────────────
99
- if (decisionImpact === 'high') {
100
- eu.push({
101
- framework: 'EU AI Act (Annex III)',
102
- severity: 'action-required',
103
- description: 'Agent makes high-impact decisions about people (hiring, credit, insurance, or similar). Classified as HIGH-RISK under EU AI Act. Requires: EU database registration, conformity assessment, human oversight, incident reporting. Deadline: August 2, 2026.',
104
- });
105
- }
106
- else if (decisionImpact === 'medium') {
107
- eu.push({
108
- framework: 'EU AI Act',
109
- severity: 'info',
110
- description: 'Agent influences outcomes for people (scoring, ranking, filtering) but does not make binding decisions with legal effects. Likely LIMITED risk under EU AI Act. Transparency obligations apply (Article 50) — users must be informed they interact with an AI system.',
111
- });
112
- }
113
- else if (decisionImpact === 'unclear') {
114
- eu.push({
115
- framework: 'EU AI Act',
116
- severity: 'clarification-needed',
117
- description: 'Agent reports making decisions about people, but the impact level is unclear. Clarify: does this agent make decisions with legal or similarly significant effects (hiring, credit, insurance)? If yes → HIGH-RISK classification. If it only scores/ranks/recommends → likely LIMITED risk.',
118
- });
119
- }
120
- else {
121
- eu.push({
122
- framework: 'EU AI Act',
123
- severity: 'info',
124
- description: 'No decision-making about people detected. Likely LIMITED or MINIMAL risk. Transparency obligations may still apply (Article 50).',
125
- });
126
- }
127
- if (hasSensitivePII) {
128
- eu.push({
129
- framework: 'GDPR',
130
- severity: 'action-required',
131
- description: 'Agent processes sensitive personal data (government IDs, financial identifiers). Ensure lawful basis (Art. 6), conduct DPIA (Art. 35), implement data minimization (Art. 25), maintain 72-hour breach notification readiness (Art. 33).',
132
- });
133
- }
134
- else if (hasPublicPII) {
135
- eu.push({
136
- framework: 'GDPR',
137
- severity: 'info',
138
- description: 'Agent processes publicly available personal data (names, titles, profiles). GDPR applies: lawful basis likely legitimate interest (Art. 6). DPIA not required for public professional profiles.',
139
- });
140
- }
141
- if (decisionImpact === 'high' && hasPII) {
142
- eu.push({
143
- framework: 'GDPR Article 22',
144
- severity: 'action-required',
145
- description: 'High-impact automated decision-making about individuals. Data subjects have the right not to be subject to solely automated decisions with legal/significant effects. Ensure: human intervention, right to contest, explanation of logic.',
146
- });
147
- }
148
- else if (decisionImpact === 'medium' && hasPII) {
149
- eu.push({
150
- framework: 'GDPR Article 22',
151
- severity: 'info',
152
- description: 'Agent influences decisions about people but without binding legal effects (scoring, ranking). Article 22 may not apply directly, but transparency and data subject rights should be maintained.',
153
- });
154
- }
155
- if (hasExcessivePerms) {
156
- eu.push({
157
- framework: 'GDPR Article 25',
158
- severity: 'warning',
159
- description: 'Agent holds more permissions than its stated purpose requires. Narrow scopes to the minimum needed — GDPR requires data protection by design and by default (data minimization principle).',
160
- });
161
- }
162
- // ── US Flags ──────────────────────────────────────────────────────────────
163
- // SOC 2 mapping
164
- us.push({
165
- framework: 'SOC 2',
166
- severity: 'info',
167
- description: `SOC 2 control mapping: Agent identity (CC1), system access (CC6.1), auth (CC6.2), permissions (CC6.3), data sensitivity (CC6.7)${hasWriteOps ? ', write operations (CC8.1)' : ''}${hasExcessivePerms ? '. Least privilege violation at CC6.3 — narrow scopes to minimum needed' : ''}.`,
168
- });
169
- if (decisionImpact === 'high') {
170
- // Colorado AI Act — only for consequential decisions in defined domains
171
- us.push({
172
- framework: 'Colorado AI Act (SB 24-205)',
173
- severity: 'action-required',
174
- description: 'Agent makes consequential decisions about people in a regulated domain. Requires: algorithmic discrimination testing, consumer disclosures, human oversight, annual compliance reviews. Effective June 30, 2026.',
175
- });
176
- // NYC LL144 — only for employment
177
- const details = (analysis.decisionMakingDetails ?? '').toLowerCase();
178
- if (/\b(hir|recruit|employ|candidate|resume|applicant)\b/.test(details)) {
179
- us.push({
180
- framework: 'NYC Local Law 144',
181
- severity: 'warning',
182
- description: 'Employment-related decisions detected. If used in NYC: annual bias audit, public disclosure of results, candidate notification before AI assessment required. Penalties: $500–$1,500/day.',
183
- });
184
- }
185
- }
186
- else if (decisionImpact === 'medium') {
187
- // Lead scoring, recommendations — Colorado doesn't apply to sales outreach
188
- // No Colorado or LL144 flag
189
- }
190
- else if (decisionImpact === 'unclear') {
191
- us.push({
192
- framework: 'Colorado AI Act (SB 24-205)',
193
- severity: 'clarification-needed',
194
- description: 'Agent makes decisions about people, but unclear if they fall into regulated domains (employment, credit, insurance, housing, education, healthcare, legal). Clarify the decision type to determine if Colorado AI Act applies.',
195
- });
196
- }
197
- if (hasSensitivePII) {
198
- us.push({
199
- framework: 'CCPA/CPRA',
200
- severity: 'warning',
201
- description: 'Agent processes sensitive personal information. If California consumers affected: ensure access/deletion rights, opt-out for profiling. ADMT provisions effective January 1, 2027.',
202
- });
203
- }
204
- if (hasHealth) {
205
- us.push({
206
- framework: 'HIPAA',
207
- severity: 'clarification-needed',
208
- description: 'Health-related data detected. HIPAA applies only if the organization is a covered entity or business associate. Clarify: is this a healthcare provider, health plan, or clearinghouse? If not, HIPAA likely does not apply, but state health privacy laws may.',
209
- });
210
- }
211
- if (hasOrgBlastWithWrites || hasIrreversibleWrites) {
212
- us.push({
213
- framework: 'SOC 2 CC7.2 / CC8.1',
214
- severity: 'warning',
215
- description: `${hasOrgBlastWithWrites ? 'Org-wide blast radius with write access. ' : ''}${hasIrreversibleWrites ? 'Irreversible write operations detected. ' : ''}SOC 2 requires anomaly monitoring and change approval workflows for high-impact operations.`,
216
- });
217
- }
218
- // ── UK Flags ──────────────────────────────────────────────────────────────
219
- if (hasSensitivePII) {
220
- uk.push({
221
- framework: 'UK GDPR / DPA 2018',
222
- severity: 'action-required',
223
- description: 'Agent processes sensitive personal data. Lawful basis required, DPIA for high-risk processing, data minimization, 72-hour breach notification to ICO.',
224
- });
225
- }
226
- else if (hasPublicPII) {
227
- uk.push({
228
- framework: 'UK GDPR / DPA 2018',
229
- severity: 'info',
230
- description: 'Agent processes publicly available personal data. UK GDPR applies: lawful basis likely legitimate interest. DPIA not required for public professional data.',
231
- });
232
- }
233
- if (decisionImpact === 'high') {
234
- uk.push({
235
- framework: 'UK GDPR Article 22 / ICO AI Toolkit',
236
- severity: 'action-required',
237
- description: 'High-impact automated decision-making about people. ICO AI Toolkit requires: accountability assessment, lawfulness/fairness/transparency review, individual rights (explanation, human review, objection).',
238
- });
239
- }
240
- else if (decisionImpact === 'medium') {
241
- uk.push({
242
- framework: 'ICO AI Risk Toolkit',
243
- severity: 'info',
244
- description: 'Agent influences outcomes for people but without binding decisions. ICO recommends documenting AI use, maintaining transparency, and respecting data subject rights.',
245
- });
246
- }
247
- else if (decisionImpact === 'unclear') {
248
- uk.push({
249
- framework: 'ICO AI Risk Toolkit',
250
- severity: 'clarification-needed',
251
- description: 'Agent reports making decisions about people but impact level is unclear. Clarify the nature of decisions to determine if full ICO AI accountability framework applies.',
252
- });
253
- }
254
- else if (hasPublicPII) {
255
- uk.push({
256
- framework: 'ICO AI Risk Toolkit',
257
- severity: 'info',
258
- description: 'ICO recommends AI risk assessment for systems processing personal data. Consider: accountability, lawfulness, data minimization, individual rights.',
259
- });
260
- }
261
- if (hasExcessivePerms) {
262
- uk.push({
263
- framework: 'UK GDPR Article 25',
264
- severity: 'warning',
265
- description: 'Agent holds more permissions than its stated purpose requires. Narrow scopes to the minimum needed — UK GDPR data protection by design principle.',
266
- });
267
- }
268
- return { eu, us, uk };
269
- }
51
+ // AAP-31: computeRegulatoryFlags (legacy jurisdictional projection) removed.
52
+ // All compliance logic lives in src/compliance/{frameworks,control-mappings,mapper}.ts.
53
+ // generator.ts calls mapFindingsToRiskCategories() directly and stores the
54
+ // result in AuditReport.compliance (StructuredCompliance / CategorizedCompliance).
270
55
  /** Compute data quality metrics from the interview transcript (CLI path) */
271
- function computeDataQualityFromTranscript(transcript) {
56
+ function computeDataQualityFromTranscript(transcript, systems) {
272
57
  const totalQuestions = transcript.length;
273
58
  const repeatedAnswers = transcript.filter(qa => qa.answer.startsWith('[REPEATED RESPONSE]')).length;
274
59
  const greetingCount = transcript.filter(qa => /^hi\b|^hello\b|ready to answer|ready for questions|^i am ready/i.test(qa.answer.trim())).length;
@@ -298,7 +83,33 @@ function computeDataQualityFromTranscript(transcript) {
298
83
  }
299
84
  const fieldScore = (fieldsProvided.length / Object.keys(fieldChecks).length) * 100;
300
85
  const repeatPenalty = (repeatedAnswers / Math.max(totalQuestions, 1)) * 50;
301
- const score = Math.max(0, Math.min(100, Math.round(fieldScore - repeatPenalty)));
86
+ // AAP-43 P1 #6: penalize NOT_PROVIDED fields in the extracted systems.
87
+ // Regex-only scoring showed 100/100 even when the Systems & Access table
88
+ // was full of "NOT PROVIDED" because keywords existed in the transcript
89
+ // but weren't captured by the LLM. 8 points per missing compliance field,
90
+ // capped at 50.
91
+ const notProvidedPenalty = systems ? computeNotProvidedPenalty(systems) : 0;
92
+ const score = Math.max(0, Math.min(100, Math.round(fieldScore - repeatPenalty - notProvidedPenalty)));
302
93
  return { score, uniqueAnswers, totalQuestions, fieldsProvided, fieldsMissing, repeatedAnswers };
303
94
  }
95
+ /**
96
+ * Count extraction gaps in SystemAssessment data and convert to a quality
97
+ * penalty. Each unprovided compliance field costs 8 points (capped at 50).
98
+ */
99
+ function computeNotProvidedPenalty(systems) {
100
+ let gaps = 0;
101
+ for (const s of systems) {
102
+ if (!isProvided(s.dataSensitivity))
103
+ gaps++;
104
+ if (!isProvided(s.frequencyAndVolume))
105
+ gaps++;
106
+ if (s.scopesRequested.length === 0 || !s.scopesRequested.some(isProvided))
107
+ gaps++;
108
+ for (const w of s.writeOperations) {
109
+ if (!isProvided(w.volumePerDay))
110
+ gaps++;
111
+ }
112
+ }
113
+ return Math.min(50, gaps * 8);
114
+ }
304
115
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/report/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/report/generator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- import type { AuditReport } from './types.js';
1
+ import type { AuditReport, StructuredCompliance } from './types.js';
2
2
  export declare function renderMarkdownReport(report: AuditReport): string;
3
+ export declare function renderStructuredCompliance(c: StructuredCompliance, report?: AuditReport): string;
3
4
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/report/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqG,MAAM,YAAY,CAAC;AAcjJ,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAiBhE"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/report/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA+D,oBAAoB,EAAkB,MAAM,YAAY,CAAC;AAuCjJ,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAiBhE;AAivBD,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAahG"}