audit-tools 0.34.30 → 0.34.32
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/audit/cli/auditStep.d.ts +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +101 -72
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/prepareDispatchCommand.d.ts +32 -0
- package/dist/audit/cli/prepareDispatchCommand.d.ts.map +1 -1
- package/dist/audit/cli/prepareDispatchCommand.js +39 -16
- package/dist/audit/cli/prepareDispatchCommand.js.map +1 -1
- package/dist/audit/cli/quotaCommand.d.ts.map +1 -1
- package/dist/audit/cli/quotaCommand.js +8 -20
- package/dist/audit/cli/quotaCommand.js.map +1 -1
- package/dist/audit/contracts/wrapperResponse.d.ts +6 -6
- package/dist/audit/types/auditState.d.ts +6 -6
- package/dist/remediate/steps/dispatch/implementPrompt.d.ts +2 -2
- package/dist/remediate/steps/dispatch/implementPrompt.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/marshal.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/marshal.js +18 -5
- package/dist/remediate/steps/dispatch/marshal.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +7 -2
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +17 -15
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/types.d.ts +21 -0
- package/dist/remediate/steps/types.d.ts.map +1 -1
- package/dist/remediate/steps/types.js.map +1 -1
- package/dist/remediate/validation/artifacts.d.ts.map +1 -1
- package/dist/remediate/validation/artifacts.js +9 -0
- package/dist/remediate/validation/artifacts.js.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.d.ts +7 -3
- package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.js +9 -21
- package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
- package/dist/shared/engine/obligationEngine.d.ts +2 -2
- package/dist/shared/providers/openAiCompatibleProvider.d.ts.map +1 -1
- package/dist/shared/providers/openAiCompatibleProvider.js +60 -4
- package/dist/shared/providers/openAiCompatibleProvider.js.map +1 -1
- package/dist/shared/providers/proxyCatalog.d.ts +55 -10
- package/dist/shared/providers/proxyCatalog.d.ts.map +1 -1
- package/dist/shared/providers/proxyCatalog.js +82 -24
- package/dist/shared/providers/proxyCatalog.js.map +1 -1
- package/dist/shared/quota/apiPool.d.ts.map +1 -1
- package/dist/shared/quota/apiPool.js +9 -0
- package/dist/shared/quota/apiPool.js.map +1 -1
- package/dist/shared/types/sessionConfig.d.ts +11 -0
- package/dist/shared/types/sessionConfig.d.ts.map +1 -1
- package/dist/shared/types/sessionConfig.js.map +1 -1
- package/dist/shared/validation/findingGrounding.d.ts +19 -7
- package/dist/shared/validation/findingGrounding.d.ts.map +1 -1
- package/dist/shared/validation/findingGrounding.js +22 -10
- package/dist/shared/validation/findingGrounding.js.map +1 -1
- package/package.json +3 -2
- package/scripts/audit/postinstall.mjs +16 -1
- package/scripts/remediate/postinstall.mjs +17 -1
|
@@ -86,19 +86,31 @@ export function resolveBasenameToTrackedPath(basename, knownPaths) {
|
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
88
88
|
* Case-preserving corpus of the tracked working-tree paths at `root`, via
|
|
89
|
-
* `git ls-files` (forward-slashed
|
|
90
|
-
* gate's `enumerateRepoTreePaths`
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
89
|
+
* `git ls-files -z` (forward-slashed). THE one git enumeration behind both
|
|
90
|
+
* grounding corpora: the M-B3 gate's `enumerateRepoTreePaths` is a
|
|
91
|
+
* `normalizeRepoPath`-lowercased draw over this set, while the remediate
|
|
92
|
+
* consumers that resolve a basename and then read the file off disk (line
|
|
93
|
+
* counting) need the REAL on-disk case, so this one does not lowercase.
|
|
94
|
+
*
|
|
95
|
+
* `-z` is load-bearing, not a flourish: plain `ls-files` renders any path git
|
|
96
|
+
* considers unusual in C-quoted form (`core.quotePath` turns a non-ASCII byte
|
|
97
|
+
* into `\303`, and a path containing a newline is quoted too), so a newline
|
|
98
|
+
* split yielded an entry that no longer equals the real repo path — every
|
|
99
|
+
* citation naming that file silently failed to ground while the file-disposition
|
|
100
|
+
* rule, which already used `-z`, kept it in scope. NUL-delimited output is
|
|
101
|
+
* unquoted and unambiguous, so entries are taken verbatim (no trim: with no line
|
|
102
|
+
* terminator to strip, trimming could only damage a legitimately space-padded
|
|
103
|
+
* POSIX path).
|
|
104
|
+
*
|
|
105
|
+
* Degrades to an empty set when git is missing / not a repo (callers then fall
|
|
106
|
+
* back to their existing `existsSync` check — monotonic, never a regression).
|
|
107
|
+
* OS-agnostic: `shell: false`, forward-slash output.
|
|
96
108
|
*/
|
|
97
109
|
export function enumerateTrackedFilePaths(root) {
|
|
98
110
|
const known = new Set();
|
|
99
111
|
let result;
|
|
100
112
|
try {
|
|
101
|
-
result = spawnSync("git", ["ls-files"], {
|
|
113
|
+
result = spawnSync("git", ["ls-files", "-z"], {
|
|
102
114
|
cwd: root,
|
|
103
115
|
encoding: "utf8",
|
|
104
116
|
shell: false,
|
|
@@ -112,8 +124,8 @@ export function enumerateTrackedFilePaths(root) {
|
|
|
112
124
|
if (!result || result.status !== 0 || typeof result.stdout !== "string") {
|
|
113
125
|
return known;
|
|
114
126
|
}
|
|
115
|
-
for (const
|
|
116
|
-
const path =
|
|
127
|
+
for (const entry of result.stdout.split("\0")) {
|
|
128
|
+
const path = entry.replace(/\\/g, "/");
|
|
117
129
|
if (path.length > 0)
|
|
118
130
|
known.add(path);
|
|
119
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findingGrounding.js","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG7C,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAgB,EAChB,UAA+B;IAE/B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,KAAyB,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;YACvC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC,CAAC,uBAAuB;YAClE,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"findingGrounding.js","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "audit-tools",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.32",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"description": "Portable hybrid code auditing + remediation orchestrators for arbitrary repositories.",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"test": "npm run build && node scripts/shared/run-vitest-gate.mjs",
|
|
48
48
|
"test:single": "npm run build && node scripts/shared/run-vitest-gate.mjs",
|
|
49
49
|
"verify:guards": "node scripts/shared/run-vitest-gate.mjs --retry=2 --exclude \"**/audit-code-completion.test.mjs\" --exclude \"**/audit-code-wrapper.test.mjs\" --exclude \"**/audit/next-step.test.mjs\" --exclude \"**/seam-host-only-next-step.test.mjs\" --exclude \"**/*-e2e.test.*\" --exclude \"**/next-step-implement-dispatch.test.ts\" --exclude \"**/next-step-pipeline-dispatch.test.ts\"",
|
|
50
|
-
"verify:checks": "node scripts/shared/profile-run.mjs verify-checks check:control-bytes check:version-gates check:loop-core-patterns check:constitutional-doc-paths check:deadcode check:doc-manifest check:philosophy-brief check:handoff-roadmap check:memory-citations check:backlog-budget check:backlog-status check:tests build verify:hosts verify:remediate-hosts smoke:packaged-audit-code smoke:packaged-remediate-code",
|
|
50
|
+
"verify:checks": "node scripts/shared/profile-run.mjs verify-checks check:control-bytes check:version-gates check:loop-core-patterns check:constitutional-doc-paths check:deadcode check:doc-manifest check:philosophy-brief check:handoff-roadmap check:memory-citations check:backlog-budget check:backlog-status check:tests build verify:hosts verify:remediate-hosts pack:smoke smoke:packaged-audit-code smoke:packaged-remediate-code",
|
|
51
51
|
"verify:release": "npm run verify:checks && node scripts/shared/run-vitest-gate.mjs",
|
|
52
52
|
"check:control-bytes": "node scripts/check-control-bytes.mjs",
|
|
53
53
|
"check:deadcode": "knip --no-config-hints",
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"check:philosophy-brief": "node scripts/check-philosophy-brief.mjs",
|
|
56
56
|
"verify:hosts": "node scripts/audit/verify-hosts.mjs",
|
|
57
57
|
"verify:remediate-hosts": "node scripts/remediate/verify-hosts.mjs",
|
|
58
|
+
"pack:smoke": "node scripts/shared/smoke-tarball.mjs",
|
|
58
59
|
"smoke:linked-audit-code": "node scripts/audit/smoke-linked-audit-code.mjs",
|
|
59
60
|
"smoke:packaged-audit-code": "node scripts/audit/smoke-packaged-audit-code.mjs",
|
|
60
61
|
"smoke:linked-remediate-code": "node scripts/remediate/smoke-linked-remediate-code.mjs",
|
|
@@ -73,6 +73,21 @@ const OPENCODE_AUDIT_BASH_PERMISSION = {
|
|
|
73
73
|
// skipped with a warning instead of failing the whole install.
|
|
74
74
|
const sharedOpenCodePermissions = await resolveSharedOpenCodePermissions();
|
|
75
75
|
|
|
76
|
+
// A pre-hardening deploy wrote agent-scope bash['*']='allow' (the historically
|
|
77
|
+
// managed broad value). Migrate exactly that value away so the generated 'ask'
|
|
78
|
+
// seed wins on re-deploy; any other user-authored wildcard survives untouched.
|
|
79
|
+
// This mirrors the install wrapper so an upgrade that only ever runs
|
|
80
|
+
// `npm install` converges on the same hardened agent block — otherwise the
|
|
81
|
+
// postinstall is the one path that keeps a broad wildcard alive.
|
|
82
|
+
function withoutManagedBroadBashWildcard(rule) {
|
|
83
|
+
const { withoutOpenCodeWildcard, OPENCODE_MANAGED_BROAD_VALUE } = sharedOpenCodePermissions;
|
|
84
|
+
const existing = objectValue(rule);
|
|
85
|
+
if (existing['*'] !== OPENCODE_MANAGED_BROAD_VALUE) {
|
|
86
|
+
return rule;
|
|
87
|
+
}
|
|
88
|
+
return withoutOpenCodeWildcard(existing);
|
|
89
|
+
}
|
|
90
|
+
|
|
76
91
|
// Auditor agent scope (read-only agent, parity with the remediator hardening):
|
|
77
92
|
// enumerated audit-code commands stay managed allows/denies, but the bash
|
|
78
93
|
// wildcard defaults to "ask" (an existing user wildcard survives — the
|
|
@@ -96,7 +111,7 @@ function mergeOpenCodeAgentPermissionConfig(existingPermission, generatedPermiss
|
|
|
96
111
|
OPENCODE_AUDIT_EDIT_PERMISSION,
|
|
97
112
|
),
|
|
98
113
|
bash: mergeOpenCodeAgentPermissionRule(
|
|
99
|
-
existingPermission.bash,
|
|
114
|
+
withoutManagedBroadBashWildcard(existingPermission.bash),
|
|
100
115
|
generatedPermission.bash,
|
|
101
116
|
withoutOpenCodeWildcard(OPENCODE_AUDIT_BASH_PERMISSION),
|
|
102
117
|
),
|
|
@@ -73,6 +73,22 @@ const OPENCODE_REMEDIATE_BASH_PERMISSION = {
|
|
|
73
73
|
// skipped with a warning instead of failing the whole install.
|
|
74
74
|
const sharedOpenCodePermissions = await resolveSharedOpenCodePermissions();
|
|
75
75
|
|
|
76
|
+
// A pre-hardening deploy wrote agent-scope bash['*']='allow' (the historically
|
|
77
|
+
// managed broad value). Migrate exactly that value away so the generated 'ask'
|
|
78
|
+
// seed wins on re-deploy; any other user-authored wildcard survives untouched.
|
|
79
|
+
// This mirrors the install wrapper so an upgrade that only ever runs
|
|
80
|
+
// `npm install` converges on the same hardened agent block — otherwise the
|
|
81
|
+
// postinstall is the one path that keeps a broad wildcard alive.
|
|
82
|
+
function withoutManagedBroadBashWildcard(rule) {
|
|
83
|
+
const { withoutOpenCodeWildcard, OPENCODE_MANAGED_BROAD_VALUE } =
|
|
84
|
+
sharedOpenCodePermissions;
|
|
85
|
+
const existing = objectValue(rule);
|
|
86
|
+
if (existing["*"] !== OPENCODE_MANAGED_BROAD_VALUE) {
|
|
87
|
+
return rule;
|
|
88
|
+
}
|
|
89
|
+
return withoutOpenCodeWildcard(existing);
|
|
90
|
+
}
|
|
91
|
+
|
|
76
92
|
// Remediator agent scope: managed rules win for specific patterns; an
|
|
77
93
|
// existing user wildcard survives (the managed set is passed without "*").
|
|
78
94
|
function renderOpenCodeAgentPermissionConfig(existing) {
|
|
@@ -90,7 +106,7 @@ function renderOpenCodeAgentPermissionConfig(existing) {
|
|
|
90
106
|
withoutOpenCodeWildcard(OPENCODE_REMEDIATE_EDIT_PERMISSION),
|
|
91
107
|
),
|
|
92
108
|
bash: mergeOpenCodeAgentPermissionRule(
|
|
93
|
-
existingPermission.bash,
|
|
109
|
+
withoutManagedBroadBashWildcard(existingPermission.bash),
|
|
94
110
|
OPENCODE_REMEDIATE_BASH_PERMISSION,
|
|
95
111
|
withoutOpenCodeWildcard(OPENCODE_REMEDIATE_BASH_PERMISSION),
|
|
96
112
|
),
|