@aicqtools/provenance 1.0.0-alpha.9 → 1.0.0-beta.2
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.
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/reporter/article-50-html.d.ts.map +1 -1
- package/dist/reporter/article-50-html.js +93 -1
- package/dist/reporter/article-50-html.js.map +1 -1
- package/dist/reporter/article-50.d.ts +13 -1
- package/dist/reporter/article-50.d.ts.map +1 -1
- package/dist/reporter/article-50.js +22 -2
- package/dist/reporter/article-50.js.map +1 -1
- package/dist/reporter/index.d.ts +2 -2
- package/dist/reporter/index.d.ts.map +1 -1
- package/dist/reporter/index.js +1 -1
- package/dist/reporter/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export type { AiTool, AiSession, AiPromptRecord, CodeAttribution, ProvenanceReco
|
|
|
2
2
|
export { emitAiBom } from './ai-bom/index.js';
|
|
3
3
|
export { capture, getStagedFiles, getStagedHunks, getCurrentCommitSha, readActiveSessions, findClosestSession, writeProvenanceRecord, buildRecord, } from './git-hook/index.js';
|
|
4
4
|
export type { CaptureContext, CaptureResult, StagedHunk, } from './git-hook/index.js';
|
|
5
|
-
export { buildArticle50Report, renderArticle50Html, renderArticle50Pdf, } from './reporter/index.js';
|
|
6
|
-
export type { Article50Report, RenderHtmlOptions, RenderPdfOptions, } from './reporter/index.js';
|
|
5
|
+
export { buildArticle50Report, summarizeGuardrail, renderArticle50Html, renderArticle50Pdf, } from './reporter/index.js';
|
|
6
|
+
export type { Article50Report, BuildArticle50Options, GuardrailSummary, RenderHtmlOptions, RenderPdfOptions, } from './reporter/index.js';
|
|
7
7
|
export { ManualSessionReader, ClaudeCodeSessionReader, CursorSessionReader, CompositeSessionReader, createReader, encodeClaudeProjectId, getCursorWorkspaceStorageDir, } from './session-readers/index.js';
|
|
8
8
|
export type { SessionReader, SessionReaderResult, ClaudeCodeReaderOptions, CursorReaderOptions, ReaderName, } from './session-readers/index.js';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,SAAS,EACT,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,GACX,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,SAAS,EACT,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,GACX,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { emitAiBom } from './ai-bom/index.js';
|
|
2
2
|
export { capture, getStagedFiles, getStagedHunks, getCurrentCommitSha, readActiveSessions, findClosestSession, writeProvenanceRecord, buildRecord, } from './git-hook/index.js';
|
|
3
|
-
export { buildArticle50Report, renderArticle50Html, renderArticle50Pdf, } from './reporter/index.js';
|
|
3
|
+
export { buildArticle50Report, summarizeGuardrail, renderArticle50Html, renderArticle50Pdf, } from './reporter/index.js';
|
|
4
4
|
export { ManualSessionReader, ClaudeCodeSessionReader, CursorSessionReader, CompositeSessionReader, createReader, encodeClaudeProjectId, getCursorWorkspaceStorageDir, } from './session-readers/index.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-50-html.d.ts","sourceRoot":"","sources":["../../src/reporter/article-50-html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"article-50-html.d.ts","sourceRoot":"","sources":["../../src/reporter/article-50-html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,iBAAiB,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC/B;AA+ID,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAiHjG"}
|
|
@@ -12,6 +12,18 @@ const messages = {
|
|
|
12
12
|
attributedFiles: '출처 명시 파일',
|
|
13
13
|
none: '(없음)',
|
|
14
14
|
notAvailable: '미상',
|
|
15
|
+
guardrailSummary: '가드레일 위반 요약',
|
|
16
|
+
noViolations: '(검출된 위반 없음)',
|
|
17
|
+
totalViolations: '총 위반',
|
|
18
|
+
filesWithViolations: '위반 포함 파일',
|
|
19
|
+
severityBreakdown: '심각도 분포',
|
|
20
|
+
categoryBreakdown: '룰 카테고리 분포',
|
|
21
|
+
severityError: '오류',
|
|
22
|
+
severityWarning: '경고',
|
|
23
|
+
severityInfo: '정보',
|
|
24
|
+
severity: '심각도',
|
|
25
|
+
ruleId: '룰 ID',
|
|
26
|
+
count: '개수',
|
|
15
27
|
footer: 'aicqtools provenance · MIT License · https://github.com/aicqtools/aicqtools',
|
|
16
28
|
},
|
|
17
29
|
en: {
|
|
@@ -27,6 +39,18 @@ const messages = {
|
|
|
27
39
|
attributedFiles: 'Attributed Files',
|
|
28
40
|
none: '(none)',
|
|
29
41
|
notAvailable: 'n/a',
|
|
42
|
+
guardrailSummary: 'Guardrail violations summary',
|
|
43
|
+
noViolations: '(no violations detected)',
|
|
44
|
+
totalViolations: 'Total violations',
|
|
45
|
+
filesWithViolations: 'Files with violations',
|
|
46
|
+
severityBreakdown: 'Severity breakdown',
|
|
47
|
+
categoryBreakdown: 'Rule category breakdown',
|
|
48
|
+
severityError: 'Error',
|
|
49
|
+
severityWarning: 'Warning',
|
|
50
|
+
severityInfo: 'Info',
|
|
51
|
+
severity: 'Severity',
|
|
52
|
+
ruleId: 'Rule ID',
|
|
53
|
+
count: 'Count',
|
|
30
54
|
footer: 'aicqtools provenance · MIT License · https://github.com/aicqtools/aicqtools',
|
|
31
55
|
},
|
|
32
56
|
};
|
|
@@ -38,6 +62,70 @@ function escapeHtml(s) {
|
|
|
38
62
|
.replace(/"/g, '"')
|
|
39
63
|
.replace(/'/g, ''');
|
|
40
64
|
}
|
|
65
|
+
function renderGuardrailSection(summary, m) {
|
|
66
|
+
// No violations: keep the section but show a friendly empty state.
|
|
67
|
+
if (summary.totalViolations === 0) {
|
|
68
|
+
return `
|
|
69
|
+
<section>
|
|
70
|
+
<h2>${m.guardrailSummary}</h2>
|
|
71
|
+
<p class="empty">${m.noViolations}</p>
|
|
72
|
+
</section>
|
|
73
|
+
`;
|
|
74
|
+
}
|
|
75
|
+
const severityLabel = {
|
|
76
|
+
error: m.severityError,
|
|
77
|
+
warning: m.severityWarning,
|
|
78
|
+
info: m.severityInfo,
|
|
79
|
+
};
|
|
80
|
+
// Severity rows in fixed order: error → warning → info (stable for diff-friendly fixtures).
|
|
81
|
+
const severityRows = ['error', 'warning', 'info']
|
|
82
|
+
.map((sev) => `<tr>
|
|
83
|
+
<td>${severityLabel[sev]}</td>
|
|
84
|
+
<td class="num">${summary.severityCount[sev]}</td>
|
|
85
|
+
</tr>`)
|
|
86
|
+
.join('\n');
|
|
87
|
+
// Category rows sorted by count desc, then ruleId asc — stable & readable.
|
|
88
|
+
const categoryRows = Object.entries(summary.categoryCount)
|
|
89
|
+
.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
|
|
90
|
+
.map(([ruleId, count]) => `<tr>
|
|
91
|
+
<td><code>${escapeHtml(ruleId)}</code></td>
|
|
92
|
+
<td class="num">${count}</td>
|
|
93
|
+
</tr>`)
|
|
94
|
+
.join('\n');
|
|
95
|
+
return `
|
|
96
|
+
<section>
|
|
97
|
+
<h2>${m.guardrailSummary}</h2>
|
|
98
|
+
<dl class="meta">
|
|
99
|
+
<dt>${m.totalViolations}</dt><dd>${summary.totalViolations}</dd>
|
|
100
|
+
<dt>${m.filesWithViolations}</dt><dd>${summary.filesWithViolations}</dd>
|
|
101
|
+
</dl>
|
|
102
|
+
<h3>${m.severityBreakdown}</h3>
|
|
103
|
+
<table>
|
|
104
|
+
<thead>
|
|
105
|
+
<tr>
|
|
106
|
+
<th>${m.severity}</th>
|
|
107
|
+
<th class="num">${m.count}</th>
|
|
108
|
+
</tr>
|
|
109
|
+
</thead>
|
|
110
|
+
<tbody>
|
|
111
|
+
${severityRows}
|
|
112
|
+
</tbody>
|
|
113
|
+
</table>
|
|
114
|
+
<h3>${m.categoryBreakdown}</h3>
|
|
115
|
+
<table>
|
|
116
|
+
<thead>
|
|
117
|
+
<tr>
|
|
118
|
+
<th>${m.ruleId}</th>
|
|
119
|
+
<th class="num">${m.count}</th>
|
|
120
|
+
</tr>
|
|
121
|
+
</thead>
|
|
122
|
+
<tbody>
|
|
123
|
+
${categoryRows}
|
|
124
|
+
</tbody>
|
|
125
|
+
</table>
|
|
126
|
+
</section>
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
41
129
|
export function renderArticle50Html(report, opts = {}) {
|
|
42
130
|
const locale = opts.locale ?? 'en';
|
|
43
131
|
const m = messages[locale];
|
|
@@ -54,6 +142,9 @@ export function renderArticle50Html(report, opts = {}) {
|
|
|
54
142
|
const fileItems = report.attributedFiles.length === 0
|
|
55
143
|
? `<li class="empty">${m.none}</li>`
|
|
56
144
|
: report.attributedFiles.map((f) => `<li><code>${escapeHtml(f)}</code></li>`).join('\n');
|
|
145
|
+
const guardrailSection = report.guardrailSummary
|
|
146
|
+
? renderGuardrailSection(report.guardrailSummary, m)
|
|
147
|
+
: '';
|
|
57
148
|
return `<!DOCTYPE html>
|
|
58
149
|
<html lang="${locale}">
|
|
59
150
|
<head>
|
|
@@ -84,6 +175,7 @@ export function renderArticle50Html(report, opts = {}) {
|
|
|
84
175
|
.meta dt { color: var(--muted); }
|
|
85
176
|
.meta dd { margin: 0; font-family: ui-monospace, SFMono-Regular, Consolas, monospace; }
|
|
86
177
|
h2 { font-size: 1.25rem; margin-top: 2rem; padding-bottom: 0.25rem; border-bottom: 1px solid var(--border); }
|
|
178
|
+
h3 { font-size: 1rem; margin-top: 1.25rem; margin-bottom: 0.25rem; color: var(--muted); font-weight: 600; }
|
|
87
179
|
table { width: 100%; border-collapse: collapse; margin-top: 0.5rem; }
|
|
88
180
|
th, td { padding: 0.5rem 0.75rem; text-align: left; border-bottom: 1px solid var(--border); }
|
|
89
181
|
th { background: var(--bg-alt); font-weight: 600; }
|
|
@@ -134,7 +226,7 @@ ${systemsRows}
|
|
|
134
226
|
${fileItems}
|
|
135
227
|
</ul>
|
|
136
228
|
</section>
|
|
137
|
-
|
|
229
|
+
${guardrailSection}
|
|
138
230
|
<footer>${m.footer}</footer>
|
|
139
231
|
</body>
|
|
140
232
|
</html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-50-html.js","sourceRoot":"","sources":["../../src/reporter/article-50-html.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"article-50-html.js","sourceRoot":"","sources":["../../src/reporter/article-50-html.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CheckResult, Severity } from '@aicqtools/core';
|
|
1
2
|
import type { ProvenanceRecord } from '../types.js';
|
|
2
3
|
/**
|
|
3
4
|
* EU AI Act Article 50 compliance report (skeleton).
|
|
@@ -10,6 +11,12 @@ import type { ProvenanceRecord } from '../types.js';
|
|
|
10
11
|
*
|
|
11
12
|
* Phase 1a will produce both JSON (machine-readable) and PDF (auditor-friendly).
|
|
12
13
|
*/
|
|
14
|
+
export interface GuardrailSummary {
|
|
15
|
+
readonly severityCount: Readonly<Record<Severity, number>>;
|
|
16
|
+
readonly categoryCount: Readonly<Record<string, number>>;
|
|
17
|
+
readonly filesWithViolations: number;
|
|
18
|
+
readonly totalViolations: number;
|
|
19
|
+
}
|
|
13
20
|
export interface Article50Report {
|
|
14
21
|
readonly format: 'aicq-article50/0.1';
|
|
15
22
|
readonly generatedAt: string;
|
|
@@ -20,6 +27,11 @@ export interface Article50Report {
|
|
|
20
27
|
readonly sessionCount: number;
|
|
21
28
|
}>;
|
|
22
29
|
readonly attributedFiles: readonly string[];
|
|
30
|
+
readonly guardrailSummary?: GuardrailSummary;
|
|
31
|
+
}
|
|
32
|
+
export interface BuildArticle50Options {
|
|
33
|
+
readonly guardrail?: CheckResult;
|
|
23
34
|
}
|
|
24
|
-
export declare function
|
|
35
|
+
export declare function summarizeGuardrail(result: CheckResult): GuardrailSummary;
|
|
36
|
+
export declare function buildArticle50Report(record: ProvenanceRecord, options?: BuildArticle50Options): Article50Report;
|
|
25
37
|
//# sourceMappingURL=article-50.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-50.d.ts","sourceRoot":"","sources":["../../src/reporter/article-50.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"article-50.d.ts","sourceRoot":"","sources":["../../src/reporter/article-50.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;CAClC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAiBxE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,eAAe,CA8BjB"}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
export function
|
|
1
|
+
export function summarizeGuardrail(result) {
|
|
2
|
+
const severityCount = { error: 0, warning: 0, info: 0 };
|
|
3
|
+
const categoryCount = {};
|
|
4
|
+
const filesWithViolations = new Set();
|
|
5
|
+
for (const d of result.diagnostics) {
|
|
6
|
+
severityCount[d.severity] = (severityCount[d.severity] ?? 0) + 1;
|
|
7
|
+
categoryCount[d.ruleId] = (categoryCount[d.ruleId] ?? 0) + 1;
|
|
8
|
+
filesWithViolations.add(d.file);
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
severityCount,
|
|
12
|
+
categoryCount,
|
|
13
|
+
filesWithViolations: filesWithViolations.size,
|
|
14
|
+
totalViolations: result.diagnostics.length,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function buildArticle50Report(record, options) {
|
|
2
18
|
const systems = new Map();
|
|
3
19
|
for (const s of record.sessions) {
|
|
4
20
|
const key = `${s.tool}|${s.model}|${s.modelVersion ?? ''}`;
|
|
@@ -14,7 +30,7 @@ export function buildArticle50Report(record) {
|
|
|
14
30
|
});
|
|
15
31
|
}
|
|
16
32
|
const files = new Set(record.attributions.map((a) => a.filePath));
|
|
17
|
-
|
|
33
|
+
const base = {
|
|
18
34
|
format: 'aicq-article50/0.1',
|
|
19
35
|
generatedAt: new Date().toISOString(),
|
|
20
36
|
aiSystems: [...systems.values()].map((s) => ({
|
|
@@ -25,5 +41,9 @@ export function buildArticle50Report(record) {
|
|
|
25
41
|
})),
|
|
26
42
|
attributedFiles: [...files],
|
|
27
43
|
};
|
|
44
|
+
if (options?.guardrail) {
|
|
45
|
+
return { ...base, guardrailSummary: summarizeGuardrail(options.guardrail) };
|
|
46
|
+
}
|
|
47
|
+
return base;
|
|
28
48
|
}
|
|
29
49
|
//# sourceMappingURL=article-50.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-50.js","sourceRoot":"","sources":["../../src/reporter/article-50.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"article-50.js","sourceRoot":"","sources":["../../src/reporter/article-50.ts"],"names":[],"mappings":"AAuCA,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,MAAM,aAAa,GAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAClF,MAAM,aAAa,GAA2B,EAAE,CAAC;IACjD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7D,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,aAAa;QACb,aAAa;QACb,mBAAmB,EAAE,mBAAmB,CAAC,IAAI;QAC7C,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAwB,EACxB,OAA+B;IAE/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuF,CAAC;IAC/G,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ;YAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;;YAEhC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBACf,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI;gBACpC,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;IACP,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,GAAoB;QAC5B,MAAM,EAAE,oBAAoB;QAC5B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,YAAY,EAAE,CAAC,CAAC,KAAK;SACtB,CAAC,CAAC;QACH,eAAe,EAAE,CAAC,GAAG,KAAK,CAAC;KAC5B,CAAC;IACF,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/reporter/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { buildArticle50Report } from './article-50.js';
|
|
2
|
-
export type { Article50Report } from './article-50.js';
|
|
1
|
+
export { buildArticle50Report, summarizeGuardrail } from './article-50.js';
|
|
2
|
+
export type { Article50Report, GuardrailSummary, BuildArticle50Options } from './article-50.js';
|
|
3
3
|
export { renderArticle50Html } from './article-50-html.js';
|
|
4
4
|
export type { RenderHtmlOptions } from './article-50-html.js';
|
|
5
5
|
export { renderArticle50Pdf, loadPuppeteer } from './article-50-pdf.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/reporter/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { buildArticle50Report } from './article-50.js';
|
|
1
|
+
export { buildArticle50Report, summarizeGuardrail } from './article-50.js';
|
|
2
2
|
export { renderArticle50Html } from './article-50-html.js';
|
|
3
3
|
export { renderArticle50Pdf, loadPuppeteer } from './article-50-pdf.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aicqtools/provenance",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AI code provenance tracker — Git pre-commit capture, CycloneDX 1.6 AI-BOM emitter, EU AI Act Article 50 reporter.",
|
|
6
6
|
"keywords": [
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"better-sqlite3": "^11.7.0",
|
|
41
|
-
"@aicqtools/core": "1.0.0-
|
|
41
|
+
"@aicqtools/core": "1.0.0-beta.2"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"puppeteer": ">=22.0.0"
|