audit-tools 0.50.19 → 0.50.21

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 (53) hide show
  1. package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
  2. package/dist/audit/cli/conceptualDispatch.js +26 -1
  3. package/dist/audit/cli/conceptualDispatch.js.map +1 -1
  4. package/dist/audit/cli/confirmIntentStep.d.ts +8 -0
  5. package/dist/audit/cli/confirmIntentStep.d.ts.map +1 -1
  6. package/dist/audit/cli/confirmIntentStep.js +19 -2
  7. package/dist/audit/cli/confirmIntentStep.js.map +1 -1
  8. package/dist/audit/cli/laneValidators.d.ts.map +1 -1
  9. package/dist/audit/cli/laneValidators.js +9 -1
  10. package/dist/audit/cli/laneValidators.js.map +1 -1
  11. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  12. package/dist/audit/cli/nextStepCommand.js +31 -3
  13. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  14. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  15. package/dist/audit/cli/nextStepHelpers.js +63 -2
  16. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  17. package/dist/audit/cli/resynthesizeCommand.d.ts.map +1 -1
  18. package/dist/audit/cli/resynthesizeCommand.js +2 -0
  19. package/dist/audit/cli/resynthesizeCommand.js.map +1 -1
  20. package/dist/audit/cli/steps.d.ts +2 -2
  21. package/dist/audit/io/artifacts.d.ts +3 -0
  22. package/dist/audit/io/artifacts.d.ts.map +1 -1
  23. package/dist/audit/io/artifacts.js +1 -0
  24. package/dist/audit/io/artifacts.js.map +1 -1
  25. package/dist/audit/orchestrator/dependencyMap.d.ts +1 -0
  26. package/dist/audit/orchestrator/dependencyMap.d.ts.map +1 -1
  27. package/dist/audit/orchestrator/dependencyMap.js +3 -0
  28. package/dist/audit/orchestrator/dependencyMap.js.map +1 -1
  29. package/dist/audit/orchestrator/designReviewPrompt.d.ts +2 -1
  30. package/dist/audit/orchestrator/designReviewPrompt.d.ts.map +1 -1
  31. package/dist/audit/orchestrator/designReviewPrompt.js +5 -2
  32. package/dist/audit/orchestrator/designReviewPrompt.js.map +1 -1
  33. package/dist/audit/orchestrator/executors.d.ts.map +1 -1
  34. package/dist/audit/orchestrator/executors.js +5 -0
  35. package/dist/audit/orchestrator/executors.js.map +1 -1
  36. package/dist/audit/orchestrator/synthesisExecutors.d.ts.map +1 -1
  37. package/dist/audit/orchestrator/synthesisExecutors.js +27 -1
  38. package/dist/audit/orchestrator/synthesisExecutors.js.map +1 -1
  39. package/dist/audit/reporting/synthesis.d.ts +4 -0
  40. package/dist/audit/reporting/synthesis.d.ts.map +1 -1
  41. package/dist/audit/reporting/synthesis.js +229 -5
  42. package/dist/audit/reporting/synthesis.js.map +1 -1
  43. package/dist/audit/systemic/secondOrderAdversaryPrompt.d.ts +7 -11
  44. package/dist/audit/systemic/secondOrderAdversaryPrompt.d.ts.map +1 -1
  45. package/dist/audit/systemic/secondOrderAdversaryPrompt.js +135 -54
  46. package/dist/audit/systemic/secondOrderAdversaryPrompt.js.map +1 -1
  47. package/dist/audit/types/conceptualAdjudication.d.ts +665 -0
  48. package/dist/audit/types/conceptualAdjudication.d.ts.map +1 -0
  49. package/dist/audit/types/conceptualAdjudication.js +298 -0
  50. package/dist/audit/types/conceptualAdjudication.js.map +1 -0
  51. package/opencode.json +2 -2
  52. package/package.json +1 -1
  53. package/skills/audit-code/audit-code.prompt.md +11 -1
@@ -0,0 +1,298 @@
1
+ import { unlink } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { z } from "zod";
4
+ import { FindingSchema, isFileMissingError, laneAssetsDir, readJsonFile, readOptionalJsonFile, writeJsonFile, } from "audit-tools/shared";
5
+ const PercentageSchema = z.number().finite().min(0).max(100);
6
+ export const ConceptualRoundContributorSchema = z
7
+ .object({
8
+ contributor_id: z.string().min(1),
9
+ perspective: z.string().min(1),
10
+ lane_id: z.string().min(1),
11
+ prompt_path: z.string().min(1),
12
+ result_path: z.string().min(1),
13
+ })
14
+ .strict();
15
+ export const ConceptualReviewRoundManifestSchema = z
16
+ .object({
17
+ schema_version: z.literal(1),
18
+ mode: z.literal("deep"),
19
+ round_id: z.string().min(1),
20
+ perspectives: z.array(ConceptualRoundContributorSchema).min(1),
21
+ judge: z
22
+ .object({
23
+ contributor_id: z.string().min(1),
24
+ lane_id: z.string().min(1),
25
+ prompt_path: z.string().min(1),
26
+ result_path: z.string().min(1),
27
+ })
28
+ .strict(),
29
+ })
30
+ .strict();
31
+ export const CONCEPTUAL_REVIEW_ROUND_FILENAME = "conceptual-review-round.json";
32
+ export function conceptualReviewRoundManifestPath(artifactsDir) {
33
+ return join(laneAssetsDir(artifactsDir), CONCEPTUAL_REVIEW_ROUND_FILENAME);
34
+ }
35
+ export async function writeConceptualReviewRoundManifest(artifactsDir, manifest) {
36
+ await writeJsonFile(conceptualReviewRoundManifestPath(artifactsDir), ConceptualReviewRoundManifestSchema.parse(manifest));
37
+ }
38
+ export async function readConceptualReviewRoundManifest(artifactsDir) {
39
+ const value = await readOptionalJsonFile(conceptualReviewRoundManifestPath(artifactsDir));
40
+ return value === undefined
41
+ ? undefined
42
+ : ConceptualReviewRoundManifestSchema.parse(value);
43
+ }
44
+ export async function clearConceptualReviewRoundManifest(artifactsDir) {
45
+ try {
46
+ await unlink(conceptualReviewRoundManifestPath(artifactsDir));
47
+ }
48
+ catch (error) {
49
+ if (!isFileMissingError(error))
50
+ throw error;
51
+ }
52
+ }
53
+ export const ConceptualCandidateDispositionSchema = z
54
+ .object({
55
+ candidate_id: z.string().min(1),
56
+ contributor_id: z.string().min(1),
57
+ source_finding_id: z.string().min(1),
58
+ disposition: z.enum(["retained", "merged", "rejected"]),
59
+ target_final_finding_ids: z.array(z.string().min(1)),
60
+ modification_percent: PercentageSchema,
61
+ rationale: z.string().trim().min(1),
62
+ })
63
+ .strict();
64
+ export const ConceptualFinalFindingShareSchema = z
65
+ .object({
66
+ final_finding_id: z.string().min(1),
67
+ contributors: z
68
+ .array(z
69
+ .object({
70
+ contributor_id: z.string().min(1),
71
+ source_candidate_ids: z.array(z.string().min(1)),
72
+ contribution_percent: PercentageSchema,
73
+ rationale: z.string().trim().min(1),
74
+ })
75
+ .strict())
76
+ .min(1),
77
+ })
78
+ .strict();
79
+ export const ConceptualJudgeSubmissionSchema = z
80
+ .object({
81
+ round_id: z.string().min(1),
82
+ findings: z.array(FindingSchema),
83
+ candidate_dispositions: z.array(ConceptualCandidateDispositionSchema),
84
+ final_finding_shares: z.array(ConceptualFinalFindingShareSchema),
85
+ })
86
+ .strict();
87
+ export function conceptualCandidateId(contributorId, findingId) {
88
+ return `${contributorId}::${findingId}`;
89
+ }
90
+ function submissionFindings(value, path) {
91
+ const envelope = z
92
+ .union([
93
+ z.array(FindingSchema),
94
+ z.object({ findings: z.array(FindingSchema) }).passthrough(),
95
+ ])
96
+ .safeParse(value);
97
+ if (!envelope.success) {
98
+ throw new Error(`conceptual perspective result ${path} is not a valid findings array/envelope: ${envelope.error.message}`);
99
+ }
100
+ return Array.isArray(envelope.data)
101
+ ? envelope.data
102
+ : envelope.data.findings;
103
+ }
104
+ /**
105
+ * Read exactly the perspective result paths named by the current-round
106
+ * manifest. No directory scan is permitted: old round files may remain for
107
+ * provenance, but they are never candidates in a later adjudication.
108
+ */
109
+ export async function loadConceptualPerspectiveFindings(manifestInput) {
110
+ const manifest = ConceptualReviewRoundManifestSchema.parse(manifestInput);
111
+ const out = new Map();
112
+ for (const contributor of manifest.perspectives) {
113
+ if (out.has(contributor.contributor_id)) {
114
+ throw new Error(`duplicate contributor ${contributor.contributor_id}`);
115
+ }
116
+ const value = await readJsonFile(contributor.result_path);
117
+ out.set(contributor.contributor_id, submissionFindings(value, contributor.result_path));
118
+ }
119
+ return out;
120
+ }
121
+ function fail(message) {
122
+ throw new Error(`invalid conceptual adjudication: ${message}`);
123
+ }
124
+ /**
125
+ * Apply semantic invariants a schema alone cannot express. Percentages remain
126
+ * judge-authored estimates; tooling verifies references, completeness, and
127
+ * arithmetic rather than pretending to derive semantic credit mechanically.
128
+ */
129
+ export function buildConceptualReviewAdjudication(params) {
130
+ const manifest = ConceptualReviewRoundManifestSchema.parse(params.manifest);
131
+ const submission = ConceptualJudgeSubmissionSchema.parse(params.submission);
132
+ if (submission.round_id !== manifest.round_id) {
133
+ fail(`stale round ${submission.round_id}; expected current round ${manifest.round_id}`);
134
+ }
135
+ const perspectiveIds = new Set();
136
+ for (const contributor of manifest.perspectives) {
137
+ if (perspectiveIds.has(contributor.contributor_id)) {
138
+ fail(`duplicate contributor ${contributor.contributor_id}`);
139
+ }
140
+ perspectiveIds.add(contributor.contributor_id);
141
+ }
142
+ if (perspectiveIds.has(manifest.judge.contributor_id)) {
143
+ fail(`judge contributor duplicates perspective ${manifest.judge.contributor_id}`);
144
+ }
145
+ const expectedCandidates = new Map();
146
+ for (const contributor of manifest.perspectives) {
147
+ const findings = params.perspectiveFindings.get(contributor.contributor_id);
148
+ if (!findings) {
149
+ fail(`missing perspective findings for ${contributor.contributor_id}`);
150
+ }
151
+ const seenFindingIds = new Set();
152
+ for (const finding of findings) {
153
+ if (seenFindingIds.has(finding.id)) {
154
+ fail(`duplicate source finding ${finding.id} from contributor ${contributor.contributor_id}`);
155
+ }
156
+ seenFindingIds.add(finding.id);
157
+ const id = conceptualCandidateId(contributor.contributor_id, finding.id);
158
+ expectedCandidates.set(id, {
159
+ contributorId: contributor.contributor_id,
160
+ findingId: finding.id,
161
+ });
162
+ }
163
+ }
164
+ const finalIds = new Set(submission.findings.map((finding) => finding.id));
165
+ if (finalIds.size !== submission.findings.length) {
166
+ fail("duplicate final finding id");
167
+ }
168
+ const dispositions = new Map();
169
+ for (const disposition of submission.candidate_dispositions) {
170
+ if (dispositions.has(disposition.candidate_id)) {
171
+ fail(`duplicate candidate disposition ${disposition.candidate_id}`);
172
+ }
173
+ dispositions.set(disposition.candidate_id, disposition);
174
+ const expected = expectedCandidates.get(disposition.candidate_id);
175
+ if (!expected) {
176
+ fail(`unknown candidate ${disposition.candidate_id}`);
177
+ }
178
+ if (disposition.contributor_id !== expected.contributorId ||
179
+ disposition.source_finding_id !== expected.findingId ||
180
+ disposition.candidate_id !==
181
+ conceptualCandidateId(disposition.contributor_id, disposition.source_finding_id)) {
182
+ fail(`candidate identity mismatch ${disposition.candidate_id}`);
183
+ }
184
+ for (const finalId of disposition.target_final_finding_ids) {
185
+ if (!finalIds.has(finalId)) {
186
+ fail(`unknown final finding ${finalId}`);
187
+ }
188
+ }
189
+ if (disposition.disposition === "rejected" &&
190
+ disposition.target_final_finding_ids.length > 0) {
191
+ fail(`rejected candidate ${disposition.candidate_id} maps to a final finding`);
192
+ }
193
+ if (disposition.disposition !== "rejected" &&
194
+ disposition.target_final_finding_ids.length === 0) {
195
+ fail(`${disposition.disposition} candidate ${disposition.candidate_id} has no final finding`);
196
+ }
197
+ }
198
+ for (const expectedId of expectedCandidates.keys()) {
199
+ if (!dispositions.has(expectedId)) {
200
+ fail(`missing candidate disposition ${expectedId}`);
201
+ }
202
+ }
203
+ const shareByFinal = new Map();
204
+ const citedShareEdges = new Set();
205
+ for (const finalShare of submission.final_finding_shares) {
206
+ if (!finalIds.has(finalShare.final_finding_id)) {
207
+ fail(`unknown final finding ${finalShare.final_finding_id}`);
208
+ }
209
+ if (shareByFinal.has(finalShare.final_finding_id)) {
210
+ fail(`duplicate final finding share ${finalShare.final_finding_id}`);
211
+ }
212
+ shareByFinal.set(finalShare.final_finding_id, finalShare);
213
+ const seenContributors = new Set();
214
+ let judgeShares = 0;
215
+ let total = 0;
216
+ for (const share of finalShare.contributors) {
217
+ if (seenContributors.has(share.contributor_id)) {
218
+ fail(`duplicate contributor ${share.contributor_id} for final finding ${finalShare.final_finding_id}`);
219
+ }
220
+ seenContributors.add(share.contributor_id);
221
+ total += share.contribution_percent;
222
+ if (share.contributor_id === manifest.judge.contributor_id) {
223
+ judgeShares += 1;
224
+ if (share.source_candidate_ids.length > 0) {
225
+ fail(`judge share for ${finalShare.final_finding_id} references source candidates`);
226
+ }
227
+ continue;
228
+ }
229
+ if (!perspectiveIds.has(share.contributor_id)) {
230
+ fail(`unknown contributor ${share.contributor_id}`);
231
+ }
232
+ if (share.source_candidate_ids.length === 0) {
233
+ fail(`perspective share ${share.contributor_id} for ${finalShare.final_finding_id} has no source candidate`);
234
+ }
235
+ for (const candidateId of share.source_candidate_ids) {
236
+ const edgeId = `${candidateId}\u0000${finalShare.final_finding_id}`;
237
+ if (citedShareEdges.has(edgeId)) {
238
+ fail(`candidate ${candidateId} is cited more than once for final finding ${finalShare.final_finding_id}`);
239
+ }
240
+ citedShareEdges.add(edgeId);
241
+ const candidate = dispositions.get(candidateId);
242
+ if (!candidate)
243
+ fail(`unknown candidate ${candidateId}`);
244
+ if (candidate.contributor_id !== share.contributor_id) {
245
+ fail(`candidate ${candidateId} belongs to another contributor`);
246
+ }
247
+ if (!candidate.target_final_finding_ids.includes(finalShare.final_finding_id)) {
248
+ fail(`candidate ${candidateId} does not target final finding ${finalShare.final_finding_id}`);
249
+ }
250
+ }
251
+ }
252
+ if (judgeShares !== 1) {
253
+ fail(`final finding ${finalShare.final_finding_id} requires exactly one judge share`);
254
+ }
255
+ if (Math.abs(total - 100) > Number.EPSILON) {
256
+ fail(`contribution shares for ${finalShare.final_finding_id} must total 100 (got ${total})`);
257
+ }
258
+ }
259
+ for (const finalId of finalIds) {
260
+ if (!shareByFinal.has(finalId)) {
261
+ fail(`missing final finding share ${finalId}`);
262
+ }
263
+ }
264
+ for (const disposition of dispositions.values()) {
265
+ if (disposition.disposition === "rejected")
266
+ continue;
267
+ for (const finalId of disposition.target_final_finding_ids) {
268
+ if (!citedShareEdges.has(`${disposition.candidate_id}\u0000${finalId}`)) {
269
+ fail(`${disposition.disposition} candidate ${disposition.candidate_id} is not cited by final finding ${finalId}`);
270
+ }
271
+ }
272
+ }
273
+ return {
274
+ schema_version: 1,
275
+ generated_at: params.generatedAt,
276
+ round_id: manifest.round_id,
277
+ contributors: [
278
+ ...manifest.perspectives.map((contributor) => ({
279
+ contributor_id: contributor.contributor_id,
280
+ role: "perspective",
281
+ perspective: contributor.perspective,
282
+ lane_id: contributor.lane_id,
283
+ prompt_path: contributor.prompt_path,
284
+ result_path: contributor.result_path,
285
+ })),
286
+ {
287
+ contributor_id: manifest.judge.contributor_id,
288
+ role: "judge",
289
+ lane_id: manifest.judge.lane_id,
290
+ prompt_path: manifest.judge.prompt_path,
291
+ result_path: manifest.judge.result_path,
292
+ },
293
+ ],
294
+ candidate_dispositions: submission.candidate_dispositions,
295
+ final_finding_shares: submission.final_finding_shares,
296
+ };
297
+ }
298
+ //# sourceMappingURL=conceptualAdjudication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conceptualAdjudication.js","sourceRoot":"","sources":["../../../src/audit/types/conceptualAdjudication.ts"],"names":[],"mappings":"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"}
package/opencode.json CHANGED
@@ -8,9 +8,9 @@
8
8
  "grep": "allow",
9
9
  "edit": {
10
10
  "*": "ask",
11
- ".remediate-code/**": "allow",
12
- ".audit-tools/**": "allow",
13
11
  ".audit-code/**": "allow",
12
+ ".audit-tools/**": "allow",
13
+ ".remediate-code/**": "allow",
14
14
  ".audit-artifacts/**": "allow",
15
15
  "audit-report.md": "allow"
16
16
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-tools",
3
- "version": "0.50.19",
3
+ "version": "0.50.21",
4
4
  "private": false,
5
5
  "license": "ISC",
6
6
  "description": "Provider-neutral code auditing and remediation workflows for arbitrary repositories.",
@@ -42,7 +42,17 @@ catalog, or state files unless the current prompt directs you to them.
42
42
 
43
43
  When the prompt emits semantic review items, assign them with the host's native
44
44
  subagent facilities when available. Do not send provider, model, quota,
45
- context-window, routing, or launch configuration to audit-tools. Write the
45
+ context-window, routing, or launch configuration to audit-tools. Before treating
46
+ the run as comprehensive, perform a host-side structural-capability preflight:
47
+ confirm the host can inspect the structural graph/relationships and source
48
+ structure required by the workload. This is a host capability check, not an
49
+ audit-tools MCP/provider or lane-selection step. If capability is degraded but
50
+ you proceed, record one reserved AgentReflection with task_id exactly
51
+ `audit-capability-preflight`; use severity `high` or `critical` when material to
52
+ claimed coverage, with concrete `tool_friction`, `ambiguities`, and `suggestions`
53
+ details. A structurally incapable run must not be labelled comprehensive. Keep
54
+ the conversation-first flow and loader contract; do not add provider, routing,
55
+ model, or machine-capability fields to audit-tools. Write the
46
56
  prompt-bound result artifacts exactly where requested and let the next backend
47
57
  step validate and ingest them.
48
58