claude-permissions-manager 1.4.78 → 1.4.79
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/README.md +6 -4
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +38 -20
- package/dist/commands/audit.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,8 +24,9 @@ cpm show # Show permissions for current project (cwd)
|
|
|
24
24
|
cpm show ~/my-project # Show detailed permissions for a specific project
|
|
25
25
|
cpm audit # Report risky permissions across all projects
|
|
26
26
|
cpm audit --min-severity high # Only report high and critical issues
|
|
27
|
-
cpm audit --fix # Auto-apply all available fixes (prompts for confirmation)
|
|
28
|
-
cpm audit --fix --yes # Auto-apply all available fixes without prompting
|
|
27
|
+
cpm audit --fix # Auto-apply all available fixes (prompts for confirmation), then re-scans
|
|
28
|
+
cpm audit --fix --yes # Auto-apply all available fixes without prompting, then re-scans
|
|
29
|
+
cpm audit --fix --yes --exit-code # Fix, re-scan, exit non-zero if issues remain
|
|
29
30
|
cpm diff <path1> <path2> # Compare two projects side by side
|
|
30
31
|
cpm copy <source> <target> # Copy project-level permissions to another project
|
|
31
32
|
cpm export # Dump all permissions as JSON (stdout)
|
|
@@ -237,13 +238,14 @@ All `--json` outputs share these conventions:
|
|
|
237
238
|
"severity": "high",
|
|
238
239
|
"message": "Bash is allowed without any specifier — all shell commands permitted",
|
|
239
240
|
"rule": "Bash",
|
|
240
|
-
"fix": "cpm reset \"Bash\" --scope project --project /path/to/project"
|
|
241
|
+
"fix": "cpm reset \"Bash\" --scope project --project /path/to/project",
|
|
242
|
+
"fixOp": { "kind": "reset", "rule": "Bash", "scope": "project" }
|
|
241
243
|
}
|
|
242
244
|
],
|
|
243
245
|
"errors": []
|
|
244
246
|
}
|
|
245
247
|
```
|
|
246
|
-
`affectedProjectCount` is the number of projects that have at least one issue. `cleanProjectCount` is projects with no issues. `minSeverity` reflects the `--min-severity` option used (default `"low"`). `fix` is the exact `cpm` command to resolve the issue (omitted when no automated fix is available).
|
|
248
|
+
`affectedProjectCount` is the number of projects that have at least one issue. `cleanProjectCount` is projects with no issues. `minSeverity` reflects the `--min-severity` option used (default `"low"`). `fix` is the exact `cpm` command to resolve the issue (omitted when no automated fix is available). `fixOp` is the structured fix operation for programmatic use (`kind: "reset"` or `kind: "mode"`; omitted when no fix is available).
|
|
247
249
|
|
|
248
250
|
`cpm diff --json` structure:
|
|
249
251
|
```json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAS,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAS,MAAM,kBAAkB,CAAC;AA+D/D,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD,GAAG,OAAO,CAAC,IAAI,CAAC,CAoKhB"}
|
package/dist/commands/audit.js
CHANGED
|
@@ -31,17 +31,12 @@ async function promptConfirm(question) {
|
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
const effectiveMinIdx = options.minSeverity !== undefined
|
|
38
|
-
? SEVERITY_RANK[options.minSeverity]
|
|
39
|
-
: SEVERITY_ORDER.length - 1;
|
|
40
|
-
const allIssues = [];
|
|
41
|
-
for (const project of result.projects) {
|
|
34
|
+
function collectIssues(projects, effectiveMinIdx) {
|
|
35
|
+
const issues = [];
|
|
36
|
+
for (const project of projects) {
|
|
42
37
|
for (const w of project.effectivePermissions.warnings) {
|
|
43
38
|
if (SEVERITY_RANK[w.severity] <= effectiveMinIdx) {
|
|
44
|
-
|
|
39
|
+
issues.push({
|
|
45
40
|
project: project.rootPath,
|
|
46
41
|
severity: w.severity,
|
|
47
42
|
message: w.message,
|
|
@@ -52,9 +47,18 @@ export async function auditCommand(options) {
|
|
|
52
47
|
}
|
|
53
48
|
}
|
|
54
49
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
return issues;
|
|
51
|
+
}
|
|
52
|
+
export async function auditCommand(options) {
|
|
53
|
+
process.stderr.write(chalk.gray("Scanning for Claude projects...\n"));
|
|
54
|
+
const result = await scan(options);
|
|
55
|
+
const effectiveMinIdx = options.minSeverity !== undefined
|
|
56
|
+
? SEVERITY_RANK[options.minSeverity]
|
|
57
|
+
: SEVERITY_ORDER.length - 1;
|
|
58
|
+
const allIssues = collectIssues(result.projects, effectiveMinIdx);
|
|
59
|
+
const exitWithCode = (issues) => {
|
|
60
|
+
if (options.exitCode && issues.length > 0) {
|
|
61
|
+
const hasCritical = issues.some((i) => i.severity === "critical");
|
|
58
62
|
process.exit(hasCritical ? 2 : 1);
|
|
59
63
|
}
|
|
60
64
|
};
|
|
@@ -62,7 +66,6 @@ export async function auditCommand(options) {
|
|
|
62
66
|
const cleanCount = result.projects.length - affectedProjects;
|
|
63
67
|
// --json output (never applies fixes)
|
|
64
68
|
if (options.json) {
|
|
65
|
-
const jsonIssues = allIssues.map(({ fixOp: _ignored, ...rest }) => rest);
|
|
66
69
|
console.log(JSON.stringify({
|
|
67
70
|
generatedAt: result.scannedAt.toISOString(),
|
|
68
71
|
scanRoot: result.scanRoot,
|
|
@@ -71,10 +74,10 @@ export async function auditCommand(options) {
|
|
|
71
74
|
cleanProjectCount: cleanCount,
|
|
72
75
|
issueCount: allIssues.length,
|
|
73
76
|
minSeverity: options.minSeverity ?? "low",
|
|
74
|
-
issues:
|
|
77
|
+
issues: allIssues,
|
|
75
78
|
errors: result.errors,
|
|
76
79
|
}, null, 2));
|
|
77
|
-
exitWithCode();
|
|
80
|
+
exitWithCode(allIssues);
|
|
78
81
|
return;
|
|
79
82
|
}
|
|
80
83
|
if (allIssues.length === 0) {
|
|
@@ -126,7 +129,7 @@ export async function auditCommand(options) {
|
|
|
126
129
|
const unfixable = allIssues.filter((i) => i.fixOp === undefined);
|
|
127
130
|
if (fixable.length === 0) {
|
|
128
131
|
console.log(chalk.yellow("\nNo auto-fixable issues found."));
|
|
129
|
-
exitWithCode();
|
|
132
|
+
exitWithCode(allIssues);
|
|
130
133
|
return;
|
|
131
134
|
}
|
|
132
135
|
// Deduplicate by (project, kind, rule/mode, scope)
|
|
@@ -150,7 +153,7 @@ export async function auditCommand(options) {
|
|
|
150
153
|
const proceed = options.yes || await confirmFn(chalk.yellow("\nApply fixes? [Y/n] "));
|
|
151
154
|
if (!proceed) {
|
|
152
155
|
console.log(chalk.gray("Aborted."));
|
|
153
|
-
exitWithCode();
|
|
156
|
+
exitWithCode(allIssues);
|
|
154
157
|
return;
|
|
155
158
|
}
|
|
156
159
|
let successCount = 0;
|
|
@@ -174,11 +177,26 @@ export async function auditCommand(options) {
|
|
|
174
177
|
else {
|
|
175
178
|
console.log(chalk.yellow(`Applied ${successCount} fix(es); ${failCount} failed.`));
|
|
176
179
|
}
|
|
177
|
-
|
|
178
|
-
|
|
180
|
+
// Re-scan to show remaining issues and drive --exit-code
|
|
181
|
+
process.stderr.write(chalk.gray("Re-scanning after fixes...\n"));
|
|
182
|
+
const afterResult = await scan(options);
|
|
183
|
+
const remaining = collectIssues(afterResult.projects, effectiveMinIdx);
|
|
184
|
+
if (remaining.length === 0) {
|
|
185
|
+
console.log(chalk.green("✓ All issues resolved."));
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const remAffected = new Set(remaining.map((i) => i.project)).size;
|
|
189
|
+
console.log(chalk.yellow(`\n${remaining.length} issue(s) still require attention in ${remAffected} project(s):`));
|
|
190
|
+
for (const issue of remaining) {
|
|
191
|
+
console.log(` ${chalk.dim(collapseHome(issue.project))}`);
|
|
192
|
+
console.log(` [${issue.severity.toUpperCase()}] ${issue.message}`);
|
|
193
|
+
if (issue.rule)
|
|
194
|
+
console.log(` Rule: ${chalk.italic(issue.rule)}`);
|
|
195
|
+
}
|
|
179
196
|
}
|
|
197
|
+
exitWithCode(remaining);
|
|
180
198
|
return;
|
|
181
199
|
}
|
|
182
|
-
exitWithCode();
|
|
200
|
+
exitWithCode(allIssues);
|
|
183
201
|
}
|
|
184
202
|
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,aAAa,GAAoC,MAAM,CAAC,WAAW,CACvE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACF,CAAC;AAErC,kGAAkG;AAClG,KAAK,UAAU,UAAU,CAAC,EAAS,EAAE,WAAmB;IACtD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|