hex-audit 0.4.4 → 0.5.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.
- package/DEMO.md +14 -12
- package/README.md +66 -61
- package/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/app-build-manifest.json +18 -11
- package/dashboard/.next/app-path-routes-manifest.json +1 -1
- package/dashboard/.next/build-manifest.json +4 -4
- package/dashboard/.next/next-server.js.nft.json +1 -1
- package/dashboard/.next/prerender-manifest.js +1 -1
- package/dashboard/.next/prerender-manifest.json +1 -1
- package/dashboard/.next/required-server-files.json +1 -1
- package/dashboard/.next/routes-manifest.json +1 -1
- package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/_not-found.html +1 -1
- package/dashboard/.next/server/app/_not-found.rsc +4 -4
- package/dashboard/.next/server/app/access/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/api/flows/route.js +1 -1
- package/dashboard/.next/server/app/api/issues/[id]/move/route.js +1 -1
- package/dashboard/.next/server/app/api/issues/[id]/route.js +1 -1
- package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/diagram.html +1 -1
- package/dashboard/.next/server/app/diagram.rsc +4 -4
- package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/flows.html +1 -1
- package/dashboard/.next/server/app/flows.rsc +4 -4
- package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/issues/page.js +12 -1
- package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/overleaf/page.js +1 -0
- package/dashboard/.next/server/app/overleaf/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/overleaf/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app-paths-manifest.json +9 -8
- package/dashboard/.next/server/chunks/431.js +1 -1
- package/dashboard/.next/server/functions-config-manifest.json +1 -1
- package/dashboard/.next/server/middleware-build-manifest.js +1 -1
- package/dashboard/.next/server/pages/404.html +1 -1
- package/dashboard/.next/server/pages/500.html +1 -1
- package/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dashboard/.next/static/chunks/app/issues/page-2bb52a36f20497fe.js +1 -0
- package/dashboard/.next/static/chunks/app/{layout-527d8aa86e483fbd.js → layout-9c3c84993dd895f6.js} +1 -1
- package/dashboard/.next/static/chunks/app/overleaf/page-bcea12a80c97b92f.js +1 -0
- package/dashboard/.next/static/chunks/{main-70c6d841ad572657.js → main-8f1e837090aef5cf.js} +1 -1
- package/dashboard/.next/static/css/9c84313d0484b74f.css +3 -0
- package/dashboard/app/api/flows/route.ts +4 -0
- package/dashboard/app/api/issues/[id]/move/route.ts +29 -58
- package/dashboard/app/api/issues/[id]/route.ts +11 -102
- package/dashboard/app/issues/IssuesBoardClient.tsx +155 -50
- package/dashboard/app/issues/page.tsx +40 -3
- package/dashboard/app/overleaf/OverleafClient.tsx +97 -0
- package/dashboard/app/overleaf/page.tsx +32 -0
- package/dashboard/components/DashboardLayout.tsx +8 -2
- package/dashboard/lib/finding-markdown.ts +110 -0
- package/dashboard/next.config.mjs +4 -0
- package/dist/analysis/external-calls.d.ts +8 -1
- package/dist/analysis/external-calls.d.ts.map +1 -1
- package/dist/analysis/external-calls.js +57 -13
- package/dist/analysis/external-calls.js.map +1 -1
- package/dist/commands/calls.d.ts.map +1 -1
- package/dist/commands/calls.js +15 -6
- package/dist/commands/calls.js.map +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +12 -3
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/init.js +19 -19
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/issue.d.ts +3 -0
- package/dist/commands/issue.d.ts.map +1 -0
- package/dist/commands/issue.js +195 -0
- package/dist/commands/issue.js.map +1 -0
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +10 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/issues.d.ts +116 -0
- package/dist/core/issues.d.ts.map +1 -0
- package/dist/core/issues.js +403 -0
- package/dist/core/issues.js.map +1 -0
- package/dist/core/schema.d.ts +24 -8
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +12 -1
- package/dist/core/schema.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/skills/generate-overleaf.md +18 -10
- package/dist/skills/ingest-aa-report.md +15 -19
- package/dist/skills/init-audit.md +13 -18
- package/dist/skills/sync-issues.md +86 -195
- package/dist/skills/validate-all-findings.md +50 -0
- package/dist/skills/validate-issue.md +20 -10
- package/dist/skills/write-finding.md +23 -28
- package/package.json +1 -1
- package/dashboard/.next/server/app/api/flows.body +0 -1
- package/dashboard/.next/server/app/api/flows.meta +0 -1
- package/dashboard/.next/static/chunks/app/issues/page-dc110d4cc0a5c398.js +0 -1
- package/dashboard/.next/static/css/7a38e5062ba6d403.css +0 -3
- /package/dashboard/.next/static/{ePObaFrrwft0BlvlllUMo → NrFPHIFHWQ5jNF62Px_X8}/_buildManifest.js +0 -0
- /package/dashboard/.next/static/{ePObaFrrwft0BlvlllUMo → NrFPHIFHWQ5jNF62Px_X8}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { logger } from '../core/logger.js';
|
|
5
|
+
import { loadConfig } from '../core/config.js';
|
|
6
|
+
import { getOutputDir } from '../core/paths.js';
|
|
7
|
+
import { reportError } from '../core/errors.js';
|
|
8
|
+
import { moveIssue, patchIssue, createIssue, markSynced, COLUMN_TO_STATUS, } from '../core/issues.js';
|
|
9
|
+
function readFileTrim(p) {
|
|
10
|
+
return fs.readFileSync(path.resolve(p), 'utf-8').trim();
|
|
11
|
+
}
|
|
12
|
+
function resolveOutputDir(opts) {
|
|
13
|
+
const projectDir = path.resolve(opts.project ?? process.cwd());
|
|
14
|
+
const config = loadConfig(projectDir);
|
|
15
|
+
return getOutputDir(config.project.project_dir, config.settings.output_dir);
|
|
16
|
+
}
|
|
17
|
+
const moveCmd = new Command('move')
|
|
18
|
+
.description('Move an issue between board columns (potential | verified | invalid | duplicate)')
|
|
19
|
+
.argument('<id>', 'Issue id (e.g. H-001)')
|
|
20
|
+
.requiredOption('--to <column>', 'Target column: potential | verified | invalid | duplicate')
|
|
21
|
+
.option('--duplicate-of <id>', 'When moving to duplicate, the canonical issue this duplicates')
|
|
22
|
+
.option('--project <dir>', 'Project directory')
|
|
23
|
+
.action((id, opts) => {
|
|
24
|
+
try {
|
|
25
|
+
const column = opts.to;
|
|
26
|
+
if (!(column in COLUMN_TO_STATUS)) {
|
|
27
|
+
logger.error(`Invalid --to: ${opts.to}. Use one of: ${Object.keys(COLUMN_TO_STATUS).join(', ')}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
const outputDir = resolveOutputDir(opts);
|
|
31
|
+
const entry = moveIssue(outputDir, id, column, opts.duplicateOf);
|
|
32
|
+
logger.success(`${id} → ${column} (status: ${entry.status})${opts.duplicateOf ? ` [dup of ${opts.duplicateOf}]` : ''}`);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
reportError(err);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
const patchCmd = new Command('patch')
|
|
40
|
+
.description('Edit fields on an issue (materializes a findings.json entry if needed)')
|
|
41
|
+
.argument('<id>', 'Issue id')
|
|
42
|
+
.option('--title <title>', 'New title')
|
|
43
|
+
.option('--severity <severity>', 'Critical | High | Medium | Low | Info')
|
|
44
|
+
.option('--resolution <resolution>', 'Fixed | Mitigated | Acknowledged | Not Fixed | Unresolved')
|
|
45
|
+
.option('--description-file <path>', 'Read the description from this file')
|
|
46
|
+
.option('--recommendation-file <path>', 'Read the recommendation from this file')
|
|
47
|
+
.option('--update-from-client <text>', 'Client update text')
|
|
48
|
+
.option('--notes <text>', 'Tracking notes')
|
|
49
|
+
.option('--project <dir>', 'Project directory')
|
|
50
|
+
.action((id, opts) => {
|
|
51
|
+
try {
|
|
52
|
+
const updates = {};
|
|
53
|
+
if (opts.title != null)
|
|
54
|
+
updates.title = opts.title;
|
|
55
|
+
if (opts.severity != null)
|
|
56
|
+
updates.severity = opts.severity;
|
|
57
|
+
if (opts.resolution != null)
|
|
58
|
+
updates.resolution = opts.resolution;
|
|
59
|
+
if (opts.updateFromClient != null)
|
|
60
|
+
updates.update_from_client = opts.updateFromClient;
|
|
61
|
+
if (opts.notes != null)
|
|
62
|
+
updates.notes = opts.notes;
|
|
63
|
+
if (opts.descriptionFile != null) {
|
|
64
|
+
updates.description = fs.readFileSync(path.resolve(opts.descriptionFile), 'utf-8').trim();
|
|
65
|
+
}
|
|
66
|
+
if (opts.recommendationFile != null) {
|
|
67
|
+
updates.recommendation = fs
|
|
68
|
+
.readFileSync(path.resolve(opts.recommendationFile), 'utf-8')
|
|
69
|
+
.trim();
|
|
70
|
+
}
|
|
71
|
+
if (Object.keys(updates).length === 0) {
|
|
72
|
+
logger.error('Nothing to patch. Pass at least one of --title/--severity/--resolution/--description-file/--recommendation-file/--update-from-client/--notes.');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
const outputDir = resolveOutputDir(opts);
|
|
76
|
+
const updated = patchIssue(outputDir, id, updates);
|
|
77
|
+
logger.success(`Patched ${id} (${Object.keys(updates).join(', ')})`);
|
|
78
|
+
logger.dim(`severity=${updated.severity} resolution=${updated.resolution ?? '(none)'}`);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
reportError(err);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
const showCmd = new Command('show')
|
|
86
|
+
.description('Print the merged finding + tracking record for an issue id')
|
|
87
|
+
.argument('<id>', 'Issue id')
|
|
88
|
+
.option('--project <dir>', 'Project directory')
|
|
89
|
+
.action((id, opts) => {
|
|
90
|
+
try {
|
|
91
|
+
const outputDir = resolveOutputDir(opts);
|
|
92
|
+
const findings = JSON.parse(fs.readFileSync(path.join(outputDir, 'findings.json'), 'utf-8'));
|
|
93
|
+
const tracking = (() => {
|
|
94
|
+
try {
|
|
95
|
+
return JSON.parse(fs.readFileSync(path.join(outputDir, 'tracking.json'), 'utf-8'));
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return { findings: [] };
|
|
99
|
+
}
|
|
100
|
+
})();
|
|
101
|
+
const finding = findings.findings.find((f) => f.id === id) ?? null;
|
|
102
|
+
const track = tracking.findings.find((t) => t.id === id) ?? null;
|
|
103
|
+
if (!finding && !track) {
|
|
104
|
+
logger.error(`No issue with id ${id} in findings.json or tracking.json`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
console.log(JSON.stringify({ id, finding, tracking: track }, null, 2));
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
reportError(err);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
const newCmd = new Command('new')
|
|
115
|
+
.description('Create a new issue with a uniform H-NNN id and print it')
|
|
116
|
+
.requiredOption('--source <source>', 'manual | conformance | auditagent | github')
|
|
117
|
+
.requiredOption('--title <title>', 'Issue title')
|
|
118
|
+
.option('--source-ref <ref>', 'Origin record id (conformance item id, auditagent id, GitHub issue number)')
|
|
119
|
+
.option('--severity <severity>', 'Critical | High | Medium | Low | Info')
|
|
120
|
+
.option('--project <dir>', 'Project directory')
|
|
121
|
+
.action((opts) => {
|
|
122
|
+
try {
|
|
123
|
+
const source = opts.source;
|
|
124
|
+
if (!['manual', 'conformance', 'auditagent', 'github'].includes(source)) {
|
|
125
|
+
logger.error(`Invalid --source: ${opts.source}`);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
const outputDir = resolveOutputDir(opts);
|
|
129
|
+
const id = createIssue(outputDir, {
|
|
130
|
+
source,
|
|
131
|
+
source_ref: opts.sourceRef ?? null,
|
|
132
|
+
title: opts.title,
|
|
133
|
+
severity: opts.severity,
|
|
134
|
+
});
|
|
135
|
+
// Print the bare id on stdout so skills can capture it.
|
|
136
|
+
console.log(id);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
reportError(err);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
const syncSetCmd = new Command('sync-set')
|
|
144
|
+
.description('Mark an issue synced to GitHub (only /sync-issues should call this)')
|
|
145
|
+
.argument('<id>', 'Local issue id (H-NNN)')
|
|
146
|
+
.requiredOption('--issue-number <n>', 'GitHub issue number')
|
|
147
|
+
.requiredOption('--issue-url <url>', 'GitHub issue URL')
|
|
148
|
+
.option('--state <state>', 'open | closed', 'open')
|
|
149
|
+
.option('--title <title>', 'Title from GitHub')
|
|
150
|
+
.option('--severity <severity>', 'Severity from GitHub')
|
|
151
|
+
.option('--resolution <resolution>', 'Status/resolution from GitHub')
|
|
152
|
+
.option('--description-file <path>', 'Description body from GitHub')
|
|
153
|
+
.option('--recommendation-file <path>', 'Recommendation body from GitHub')
|
|
154
|
+
.option('--update-from-client-file <path>', 'Client update body from GitHub')
|
|
155
|
+
.option('--project <dir>', 'Project directory')
|
|
156
|
+
.action((id, opts) => {
|
|
157
|
+
try {
|
|
158
|
+
const outputDir = resolveOutputDir(opts);
|
|
159
|
+
const github = {
|
|
160
|
+
issue_number: parseInt(opts.issueNumber, 10),
|
|
161
|
+
issue_url: opts.issueUrl,
|
|
162
|
+
state: opts.state === 'closed' ? 'closed' : 'open',
|
|
163
|
+
last_synced_at: new Date().toISOString(),
|
|
164
|
+
sync_status: 'in_sync',
|
|
165
|
+
comments: [],
|
|
166
|
+
};
|
|
167
|
+
const fields = {};
|
|
168
|
+
if (opts.title != null)
|
|
169
|
+
fields.title = opts.title;
|
|
170
|
+
if (opts.severity != null)
|
|
171
|
+
fields.severity = opts.severity;
|
|
172
|
+
if (opts.resolution != null)
|
|
173
|
+
fields.resolution = opts.resolution;
|
|
174
|
+
if (opts.descriptionFile != null)
|
|
175
|
+
fields.description = readFileTrim(opts.descriptionFile);
|
|
176
|
+
if (opts.recommendationFile != null)
|
|
177
|
+
fields.recommendation = readFileTrim(opts.recommendationFile);
|
|
178
|
+
if (opts.updateFromClientFile != null)
|
|
179
|
+
fields.update_from_client = readFileTrim(opts.updateFromClientFile);
|
|
180
|
+
markSynced(outputDir, id, github, fields);
|
|
181
|
+
logger.success(`${id} synced to GitHub issue #${github.issue_number} (locked)`);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
reportError(err);
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
export const issueCommand = new Command('issue')
|
|
189
|
+
.description('Inspect and mutate issues on the board (new / move / patch / sync-set / show)')
|
|
190
|
+
.addCommand(newCmd)
|
|
191
|
+
.addCommand(moveCmd)
|
|
192
|
+
.addCommand(patchCmd)
|
|
193
|
+
.addCommand(syncSetCmd)
|
|
194
|
+
.addCommand(showCmd);
|
|
195
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAuBD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAuBD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAkCjE"}
|
package/dist/core/config.js
CHANGED
|
@@ -61,6 +61,16 @@ export function createConfig(options) {
|
|
|
61
61
|
output_dir: options.outputDir ?? '.hex',
|
|
62
62
|
ai_model: 'claude-sonnet-4-20250514',
|
|
63
63
|
finding_template: 'default',
|
|
64
|
+
...(options.githubRepo
|
|
65
|
+
? {
|
|
66
|
+
github: {
|
|
67
|
+
repo: options.githubRepo,
|
|
68
|
+
default_labels: ['hex', 'audit'],
|
|
69
|
+
severity_label_prefix: 'severity:',
|
|
70
|
+
publish_status: ['verified'],
|
|
71
|
+
},
|
|
72
|
+
}
|
|
73
|
+
: {}),
|
|
64
74
|
},
|
|
65
75
|
};
|
|
66
76
|
const outputDir = getOutputDir(options.projectDir, config.settings.output_dir);
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI5D;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,UAAmB;IAC5C,MAAM,GAAG,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6DAA6D,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAU,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,yBAAyB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9G,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,UAAkB;IACxC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAC;KACxD,CAAC;IAEF,mDAAmD;IACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAEtD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export type BoardColumn = 'potential' | 'verified' | 'invalid' | 'duplicate';
|
|
2
|
+
export type Severity = 'Critical' | 'High' | 'Medium' | 'Low' | 'Info';
|
|
3
|
+
export type Resolution = 'Fixed' | 'Mitigated' | 'Acknowledged' | 'Not Fixed' | 'Unresolved';
|
|
4
|
+
export declare const SEVERITY_VALUES: readonly Severity[];
|
|
5
|
+
export declare const RESOLUTION_VALUES: readonly Resolution[];
|
|
6
|
+
export declare const COLUMN_TO_STATUS: Record<BoardColumn, string>;
|
|
7
|
+
/** Fields a user may edit through the board modal or `hex issue patch`. */
|
|
8
|
+
export declare const EDITABLE_FIELDS: readonly ["title", "severity", "description", "recommendation", "resolution", "update_from_client", "notes"];
|
|
9
|
+
export type EditableField = (typeof EDITABLE_FIELDS)[number];
|
|
10
|
+
interface FindingLocation {
|
|
11
|
+
file: string;
|
|
12
|
+
snippet?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Finding {
|
|
15
|
+
id: string;
|
|
16
|
+
title: string;
|
|
17
|
+
severity: Severity;
|
|
18
|
+
category: string;
|
|
19
|
+
description: string;
|
|
20
|
+
root_cause: {
|
|
21
|
+
locations: FindingLocation[];
|
|
22
|
+
};
|
|
23
|
+
poc: {
|
|
24
|
+
status: string;
|
|
25
|
+
file: string | null;
|
|
26
|
+
validation_memo: string | null;
|
|
27
|
+
};
|
|
28
|
+
recommendation: string;
|
|
29
|
+
references: {
|
|
30
|
+
external_links: string[];
|
|
31
|
+
};
|
|
32
|
+
created_at: string;
|
|
33
|
+
update_from_client?: string;
|
|
34
|
+
resolution?: Resolution;
|
|
35
|
+
github?: Record<string, unknown>;
|
|
36
|
+
source_ref?: string | null;
|
|
37
|
+
[k: string]: unknown;
|
|
38
|
+
}
|
|
39
|
+
export interface TrackingEntry {
|
|
40
|
+
id: string;
|
|
41
|
+
title: string;
|
|
42
|
+
severity: Severity;
|
|
43
|
+
source: string;
|
|
44
|
+
status: string;
|
|
45
|
+
poc_status: string;
|
|
46
|
+
poc_file: string | null;
|
|
47
|
+
duplicates: string[];
|
|
48
|
+
duplicate_of?: string | null;
|
|
49
|
+
source_ref?: string | null;
|
|
50
|
+
notes: string;
|
|
51
|
+
[k: string]: unknown;
|
|
52
|
+
}
|
|
53
|
+
export interface GithubLink {
|
|
54
|
+
issue_number: number;
|
|
55
|
+
issue_url: string;
|
|
56
|
+
state: 'open' | 'closed';
|
|
57
|
+
last_synced_at: string;
|
|
58
|
+
sync_status: string;
|
|
59
|
+
comments: unknown[];
|
|
60
|
+
}
|
|
61
|
+
export declare function isValidSeverity(v: unknown): v is Severity;
|
|
62
|
+
export declare function isValidResolution(v: unknown): v is Resolution;
|
|
63
|
+
/**
|
|
64
|
+
* Allocate the next uniform issue id (`H-001`, `H-002`, ...). Scans both
|
|
65
|
+
* findings.json and tracking.json for the highest `H-<n>` so every creator
|
|
66
|
+
* (init-audit conformance materialization, write-finding, ingest-aa-report,
|
|
67
|
+
* sync-issues pull) agrees on a single sequential namespace.
|
|
68
|
+
*/
|
|
69
|
+
export declare function allocateId(outputDir: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* Ensure a findings.json entry exists for `id`, materializing one from the
|
|
72
|
+
* source-specific record if needed. Idempotent: returns the existing entry
|
|
73
|
+
* untouched when present. Dispatches on the tracking entry's `source` +
|
|
74
|
+
* `source_ref` (not the id, which is now a uniform `H-NNN`).
|
|
75
|
+
*/
|
|
76
|
+
export declare function ensureFindingExists(outputDir: string, id: string): Finding;
|
|
77
|
+
export declare function moveIssue(outputDir: string, id: string, column: BoardColumn, duplicateOf?: string): TrackingEntry;
|
|
78
|
+
/**
|
|
79
|
+
* Patch editable fields on an issue. Materializes a findings.json entry first so
|
|
80
|
+
* description / recommendation / resolution / update_from_client always land on
|
|
81
|
+
* a real record (not just non-manual cards' tracking rows). Title / severity /
|
|
82
|
+
* notes are mirrored on the tracking entry so the board reads current values
|
|
83
|
+
* without re-reading findings.json.
|
|
84
|
+
*/
|
|
85
|
+
export declare function patchIssue(outputDir: string, id: string, updates: Record<string, unknown>): Finding;
|
|
86
|
+
export interface CreateIssueInput {
|
|
87
|
+
source: 'manual' | 'conformance' | 'auditagent' | 'github';
|
|
88
|
+
source_ref?: string | null;
|
|
89
|
+
title: string;
|
|
90
|
+
severity?: Severity;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Allocate a uniform `H-NNN` id and write a tracking entry + findings.json
|
|
94
|
+
* skeleton. Returns the new id. Conformance/manual start in the Potential
|
|
95
|
+
* column (`pending_validation`); auditagent starts `unverified`. Skills call
|
|
96
|
+
* this (via `hex issue new`) instead of hand-writing JSON.
|
|
97
|
+
*/
|
|
98
|
+
export declare function createIssue(outputDir: string, input: CreateIssueInput): string;
|
|
99
|
+
export interface SyncFields {
|
|
100
|
+
title?: string;
|
|
101
|
+
severity?: Severity;
|
|
102
|
+
description?: string;
|
|
103
|
+
recommendation?: string;
|
|
104
|
+
resolution?: Resolution | '';
|
|
105
|
+
update_from_client?: string;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Mark an issue as synced to GitHub: set status to `synced`, write the github
|
|
109
|
+
* block, and overwrite finding fields from GitHub (GitHub is the source of
|
|
110
|
+
* truth once synced). Used by /sync-issues for both push-confirm (after
|
|
111
|
+
* `gh issue create`) and pull-update (GitHub edits → local). This is the only
|
|
112
|
+
* function that produces `status: 'synced'`.
|
|
113
|
+
*/
|
|
114
|
+
export declare function markSynced(outputDir: string, id: string, github: GithubLink, fields?: SyncFields): Finding;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=issues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/core/issues.ts"],"names":[],"mappings":"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"}
|