cc-permissions 0.1.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/LICENSE +14 -0
- package/README.md +230 -0
- package/dist/analyze.d.ts +10 -0
- package/dist/analyze.d.ts.map +1 -0
- package/dist/analyze.js +213 -0
- package/dist/analyze.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +348 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +83 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +178 -0
- package/dist/output.js.map +1 -0
- package/dist/permissions.d.ts +32 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +98 -0
- package/dist/permissions.js.map +1 -0
- package/dist/templates/cache.d.ts +71 -0
- package/dist/templates/cache.d.ts.map +1 -0
- package/dist/templates/cache.js +137 -0
- package/dist/templates/cache.js.map +1 -0
- package/dist/templates/dotnet.d.ts +3 -0
- package/dist/templates/dotnet.d.ts.map +1 -0
- package/dist/templates/dotnet.js +76 -0
- package/dist/templates/dotnet.js.map +1 -0
- package/dist/templates/general.d.ts +3 -0
- package/dist/templates/general.d.ts.map +1 -0
- package/dist/templates/general.js +59 -0
- package/dist/templates/general.js.map +1 -0
- package/dist/templates/index.d.ts +32 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +54 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/loader.d.ts +19 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/loader.js +221 -0
- package/dist/templates/loader.js.map +1 -0
- package/dist/templates/python.d.ts +3 -0
- package/dist/templates/python.d.ts.map +1 -0
- package/dist/templates/python.js +110 -0
- package/dist/templates/python.js.map +1 -0
- package/dist/templates/remote.d.ts +45 -0
- package/dist/templates/remote.d.ts.map +1 -0
- package/dist/templates/remote.js +147 -0
- package/dist/templates/remote.js.map +1 -0
- package/dist/templates/web.d.ts +3 -0
- package/dist/templates/web.d.ts.map +1 -0
- package/dist/templates/web.js +101 -0
- package/dist/templates/web.js.map +1 -0
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +53 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +118 -0
- package/dist/version.js.map +1 -0
- package/package.json +54 -0
- package/templates/android.jsonc +99 -0
- package/templates/aws.jsonc +113 -0
- package/templates/azure.jsonc +103 -0
- package/templates/database.jsonc +133 -0
- package/templates/docker.jsonc +115 -0
- package/templates/dotnet.jsonc +80 -0
- package/templates/flutter.jsonc +106 -0
- package/templates/gcp.jsonc +110 -0
- package/templates/git.jsonc +52 -0
- package/templates/github.jsonc +132 -0
- package/templates/go.jsonc +75 -0
- package/templates/ios.jsonc +98 -0
- package/templates/java.jsonc +93 -0
- package/templates/kubernetes.jsonc +114 -0
- package/templates/nodejs.jsonc +105 -0
- package/templates/php.jsonc +107 -0
- package/templates/python.jsonc +114 -0
- package/templates/ruby.jsonc +99 -0
- package/templates/rust.jsonc +97 -0
- package/templates/shell.jsonc +73 -0
- package/templates/template.schema.json +102 -0
- package/templates/terraform.jsonc +96 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { parseArgs } from "node:util";
|
|
3
|
+
import { parseLevel, describeLevels } from "./permissions.js";
|
|
4
|
+
import { getTemplates, listTemplates, } from "./templates/index.js";
|
|
5
|
+
import { formatFullOutput, applyPermissions, formatApplyResult, parseScope } from "./output.js";
|
|
6
|
+
import { analyzeDirectory, formatAnalysisResult } from "./analyze.js";
|
|
7
|
+
import { formatVersionInfo, readPackageJson } from "./version.js";
|
|
8
|
+
function showHelp() {
|
|
9
|
+
console.log(`
|
|
10
|
+
cc-permissions - Generate permission configs for Claude Code
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
cc-permissions [options] Analyze current directory
|
|
14
|
+
cc-permissions <command> [options] Run a specific command
|
|
15
|
+
|
|
16
|
+
Commands:
|
|
17
|
+
analyze [path] Analyze project and recommend templates
|
|
18
|
+
template <names> Generate permissions from specific templates
|
|
19
|
+
list List available templates
|
|
20
|
+
|
|
21
|
+
Global Options:
|
|
22
|
+
-h, --help Show this help message
|
|
23
|
+
-v, --version Show version number
|
|
24
|
+
-l, --level Permission level: restrictive, standard, permissive
|
|
25
|
+
-a, --apply Apply permissions to settings file
|
|
26
|
+
-s, --scope Settings scope: project, user, local (default: project)
|
|
27
|
+
-o, --output Custom output file path (overrides --scope)
|
|
28
|
+
|
|
29
|
+
Scopes:
|
|
30
|
+
project .claude/settings.json (in target directory)
|
|
31
|
+
user, global ~/.claude/settings.json (user's home directory)
|
|
32
|
+
local .claude/settings.local.json (gitignored, for personal prefs)
|
|
33
|
+
|
|
34
|
+
Run "cc-permissions <command> --help" for command-specific options.
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
cc-permissions Analyze current directory
|
|
38
|
+
cc-permissions --apply Analyze and apply permissions
|
|
39
|
+
cc-permissions --apply -l permissive Analyze and apply with custom level
|
|
40
|
+
cc-permissions --apply --scope user Apply to user-level settings
|
|
41
|
+
cc-permissions analyze ./my-project Analyze a specific path
|
|
42
|
+
cc-permissions template nodejs,python Manually select templates
|
|
43
|
+
cc-permissions list List all templates
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
function showTemplateHelp() {
|
|
47
|
+
console.log(`
|
|
48
|
+
Usage: cc-permissions template <names> [options]
|
|
49
|
+
|
|
50
|
+
Generate permission configurations from one or more templates.
|
|
51
|
+
|
|
52
|
+
Arguments:
|
|
53
|
+
names Comma-separated template names (e.g., "nodejs" or "nodejs,python")
|
|
54
|
+
|
|
55
|
+
Options:
|
|
56
|
+
-l, --level Permission level: restrictive, standard, permissive (default: standard)
|
|
57
|
+
-f, --format Output format: json, summary, both (default: json)
|
|
58
|
+
-a, --apply Apply permissions to settings file (creates .bak backup)
|
|
59
|
+
-s, --scope Settings scope: project, user, local (default: project)
|
|
60
|
+
-o, --output Custom output file path (overrides --scope)
|
|
61
|
+
|
|
62
|
+
${describeLevels()}
|
|
63
|
+
|
|
64
|
+
Run "cc-permissions list" to see available templates.
|
|
65
|
+
|
|
66
|
+
Examples:
|
|
67
|
+
cc-permissions template shell --level restrictive
|
|
68
|
+
cc-permissions template nodejs --level standard
|
|
69
|
+
cc-permissions template nodejs,python --level permissive --format summary
|
|
70
|
+
cc-permissions template nodejs --apply
|
|
71
|
+
cc-permissions template nodejs --apply --scope user
|
|
72
|
+
`);
|
|
73
|
+
}
|
|
74
|
+
function handleTemplate(args) {
|
|
75
|
+
const { values, positionals } = parseArgs({
|
|
76
|
+
args,
|
|
77
|
+
options: {
|
|
78
|
+
level: { type: "string", short: "l", default: "standard" },
|
|
79
|
+
format: { type: "string", short: "f", default: "json" },
|
|
80
|
+
apply: { type: "boolean", short: "a" },
|
|
81
|
+
scope: { type: "string", short: "s", default: "project" },
|
|
82
|
+
output: { type: "string", short: "o" },
|
|
83
|
+
help: { type: "boolean", short: "h" },
|
|
84
|
+
},
|
|
85
|
+
allowPositionals: true,
|
|
86
|
+
});
|
|
87
|
+
if (values.help || positionals.length === 0) {
|
|
88
|
+
showTemplateHelp();
|
|
89
|
+
process.exit(0);
|
|
90
|
+
}
|
|
91
|
+
// Parse template names (comma-separated)
|
|
92
|
+
const templateNames = positionals[0].split(",").map((n) => n.trim().toLowerCase());
|
|
93
|
+
// Validate and get templates
|
|
94
|
+
const { found, notFound } = getTemplates(templateNames);
|
|
95
|
+
if (notFound.length > 0) {
|
|
96
|
+
console.error(`Unknown template(s): ${notFound.join(", ")}`);
|
|
97
|
+
console.error(`Available templates: ${listTemplates().map((t) => t.name).join(", ")}`);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
// Parse level
|
|
101
|
+
const level = parseLevel(values.level);
|
|
102
|
+
if (!level) {
|
|
103
|
+
console.error(`Invalid level: ${values.level}`);
|
|
104
|
+
console.error(`Valid levels: restrictive, standard, permissive`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
// Handle --apply flag
|
|
108
|
+
if (values.apply) {
|
|
109
|
+
// Parse scope
|
|
110
|
+
const scope = parseScope(values.scope);
|
|
111
|
+
if (!scope) {
|
|
112
|
+
console.error(`Invalid scope: ${values.scope}`);
|
|
113
|
+
console.error(`Valid scopes: project, user, global, local`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
const result = applyPermissions(found, level, {
|
|
117
|
+
scope,
|
|
118
|
+
outputPath: values.output,
|
|
119
|
+
});
|
|
120
|
+
console.log(formatApplyResult(result));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Parse format
|
|
124
|
+
const format = values.format;
|
|
125
|
+
if (!["json", "summary", "both"].includes(format)) {
|
|
126
|
+
console.error(`Invalid format: ${format}`);
|
|
127
|
+
console.error(`Valid formats: json, summary, both`);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
// Generate output
|
|
131
|
+
const output = formatFullOutput(found, level, format);
|
|
132
|
+
console.log(output);
|
|
133
|
+
}
|
|
134
|
+
function showAnalyzeHelp() {
|
|
135
|
+
console.log(`
|
|
136
|
+
Usage: cc-permissions analyze [path] [options]
|
|
137
|
+
|
|
138
|
+
Analyze a project directory and recommend templates.
|
|
139
|
+
|
|
140
|
+
Arguments:
|
|
141
|
+
path Path to analyze (default: current directory)
|
|
142
|
+
|
|
143
|
+
Options:
|
|
144
|
+
-l, --level Permission level: restrictive, standard, permissive
|
|
145
|
+
(default: auto-detected based on project complexity)
|
|
146
|
+
-a, --apply Apply permissions to settings file
|
|
147
|
+
-s, --scope Settings scope: project, user, local (default: project)
|
|
148
|
+
-o, --output Custom output file path (overrides --scope)
|
|
149
|
+
-h, --help Show this help
|
|
150
|
+
|
|
151
|
+
${describeLevels()}
|
|
152
|
+
|
|
153
|
+
Examples:
|
|
154
|
+
cc-permissions analyze
|
|
155
|
+
cc-permissions analyze ./my-project
|
|
156
|
+
cc-permissions analyze --apply
|
|
157
|
+
cc-permissions analyze --apply --scope user
|
|
158
|
+
cc-permissions analyze -l permissive --apply
|
|
159
|
+
`);
|
|
160
|
+
}
|
|
161
|
+
function handleAnalyze(args) {
|
|
162
|
+
const { values, positionals } = parseArgs({
|
|
163
|
+
args,
|
|
164
|
+
options: {
|
|
165
|
+
help: { type: "boolean", short: "h" },
|
|
166
|
+
level: { type: "string", short: "l" },
|
|
167
|
+
apply: { type: "boolean", short: "a" },
|
|
168
|
+
scope: { type: "string", short: "s", default: "project" },
|
|
169
|
+
output: { type: "string", short: "o" },
|
|
170
|
+
},
|
|
171
|
+
allowPositionals: true,
|
|
172
|
+
});
|
|
173
|
+
if (values.help) {
|
|
174
|
+
showAnalyzeHelp();
|
|
175
|
+
process.exit(0);
|
|
176
|
+
}
|
|
177
|
+
const targetPath = positionals[0] || ".";
|
|
178
|
+
const result = analyzeDirectory(targetPath);
|
|
179
|
+
// Handle --apply flag
|
|
180
|
+
if (values.apply) {
|
|
181
|
+
// Use provided level or the suggested level from analysis
|
|
182
|
+
let level = result.suggestedLevel;
|
|
183
|
+
if (values.level) {
|
|
184
|
+
const parsedLevel = parseLevel(values.level);
|
|
185
|
+
if (!parsedLevel) {
|
|
186
|
+
console.error(`Invalid level: ${values.level}`);
|
|
187
|
+
console.error(`Valid levels: restrictive, standard, permissive`);
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
level = parsedLevel;
|
|
191
|
+
}
|
|
192
|
+
// Get the templates
|
|
193
|
+
const { found, notFound } = getTemplates(result.recommendedTemplates);
|
|
194
|
+
if (notFound.length > 0) {
|
|
195
|
+
console.error(`Unknown template(s): ${notFound.join(", ")}`);
|
|
196
|
+
process.exit(1);
|
|
197
|
+
}
|
|
198
|
+
// Parse scope
|
|
199
|
+
const scope = parseScope(values.scope);
|
|
200
|
+
if (!scope) {
|
|
201
|
+
console.error(`Invalid scope: ${values.scope}`);
|
|
202
|
+
console.error(`Valid scopes: project, user, global, local`);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
// Apply the permissions
|
|
206
|
+
const applyResult = applyPermissions(found, level, {
|
|
207
|
+
scope,
|
|
208
|
+
outputPath: values.output,
|
|
209
|
+
});
|
|
210
|
+
// Show analysis summary then apply result
|
|
211
|
+
console.log(`Detected templates: ${result.recommendedTemplates.join(", ")}`);
|
|
212
|
+
console.log(`Applied level: ${level}`);
|
|
213
|
+
console.log(formatApplyResult(applyResult));
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// Standard output: show analysis result
|
|
217
|
+
console.log(formatAnalysisResult(result));
|
|
218
|
+
}
|
|
219
|
+
function showListHelp() {
|
|
220
|
+
console.log(`
|
|
221
|
+
Usage: cc-permissions list
|
|
222
|
+
|
|
223
|
+
List all available templates grouped by category.
|
|
224
|
+
|
|
225
|
+
Options:
|
|
226
|
+
-h, --help Show this help
|
|
227
|
+
|
|
228
|
+
Examples:
|
|
229
|
+
cc-permissions list
|
|
230
|
+
`);
|
|
231
|
+
}
|
|
232
|
+
function handleList(args) {
|
|
233
|
+
const { values } = parseArgs({
|
|
234
|
+
args,
|
|
235
|
+
options: {
|
|
236
|
+
help: { type: "boolean", short: "h" },
|
|
237
|
+
},
|
|
238
|
+
allowPositionals: true,
|
|
239
|
+
});
|
|
240
|
+
if (values.help) {
|
|
241
|
+
showListHelp();
|
|
242
|
+
process.exit(0);
|
|
243
|
+
}
|
|
244
|
+
const allTemplates = listTemplates();
|
|
245
|
+
// Fixed category order
|
|
246
|
+
const categoryOrder = [
|
|
247
|
+
"General",
|
|
248
|
+
"Version Control",
|
|
249
|
+
"Languages & Runtimes",
|
|
250
|
+
"Cloud Providers",
|
|
251
|
+
"Container & Infrastructure",
|
|
252
|
+
"Mobile Development",
|
|
253
|
+
"Utilities",
|
|
254
|
+
"Other",
|
|
255
|
+
];
|
|
256
|
+
// Group templates by category
|
|
257
|
+
const grouped = new Map();
|
|
258
|
+
for (const template of allTemplates) {
|
|
259
|
+
const category = template.category || "Other";
|
|
260
|
+
if (!grouped.has(category)) {
|
|
261
|
+
grouped.set(category, []);
|
|
262
|
+
}
|
|
263
|
+
grouped.get(category).push({ name: template.name, description: template.description });
|
|
264
|
+
}
|
|
265
|
+
// Sort templates within each category alphabetically
|
|
266
|
+
for (const templates of grouped.values()) {
|
|
267
|
+
templates.sort((a, b) => a.name.localeCompare(b.name));
|
|
268
|
+
}
|
|
269
|
+
console.log("Available Templates:\n");
|
|
270
|
+
// Output in fixed category order
|
|
271
|
+
for (const category of categoryOrder) {
|
|
272
|
+
const templates = grouped.get(category);
|
|
273
|
+
if (!templates || templates.length === 0)
|
|
274
|
+
continue;
|
|
275
|
+
console.log(`${category}:`);
|
|
276
|
+
for (const template of templates) {
|
|
277
|
+
console.log(` ${template.name.padEnd(12)} ${template.description}`);
|
|
278
|
+
}
|
|
279
|
+
console.log();
|
|
280
|
+
}
|
|
281
|
+
console.log(`Use "cc-permissions template <name> --level <level>" to generate permissions.`);
|
|
282
|
+
}
|
|
283
|
+
// Main CLI entry point
|
|
284
|
+
function main() {
|
|
285
|
+
const { values, positionals } = parseArgs({
|
|
286
|
+
options: {
|
|
287
|
+
help: { type: "boolean", short: "h" },
|
|
288
|
+
version: { type: "boolean", short: "v" },
|
|
289
|
+
level: { type: "string", short: "l" },
|
|
290
|
+
apply: { type: "boolean", short: "a" },
|
|
291
|
+
scope: { type: "string", short: "s" },
|
|
292
|
+
output: { type: "string", short: "o" },
|
|
293
|
+
},
|
|
294
|
+
allowPositionals: true,
|
|
295
|
+
strict: false, // Allow unknown options to pass through to subcommands
|
|
296
|
+
});
|
|
297
|
+
if (values.version) {
|
|
298
|
+
const pkg = readPackageJson();
|
|
299
|
+
console.log(formatVersionInfo(pkg.version, pkg.name));
|
|
300
|
+
process.exit(0);
|
|
301
|
+
}
|
|
302
|
+
// Check if first positional is a command
|
|
303
|
+
const command = positionals[0];
|
|
304
|
+
// Show help if -h flag with no command
|
|
305
|
+
if (values.help && !command) {
|
|
306
|
+
showHelp();
|
|
307
|
+
process.exit(0);
|
|
308
|
+
}
|
|
309
|
+
// No arguments: run analyze on current directory
|
|
310
|
+
// Pass through relevant flags
|
|
311
|
+
if (!command) {
|
|
312
|
+
const analyzeArgs = [];
|
|
313
|
+
if (values.level) {
|
|
314
|
+
analyzeArgs.push("--level", values.level);
|
|
315
|
+
}
|
|
316
|
+
if (values.apply) {
|
|
317
|
+
analyzeArgs.push("--apply");
|
|
318
|
+
}
|
|
319
|
+
if (values.scope) {
|
|
320
|
+
analyzeArgs.push("--scope", values.scope);
|
|
321
|
+
}
|
|
322
|
+
if (values.output) {
|
|
323
|
+
analyzeArgs.push("--output", values.output);
|
|
324
|
+
}
|
|
325
|
+
handleAnalyze(analyzeArgs);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
// Command was specified - route to appropriate handler
|
|
329
|
+
const subArgs = process.argv.slice(process.argv.indexOf(command) + 1);
|
|
330
|
+
switch (command) {
|
|
331
|
+
case "template":
|
|
332
|
+
handleTemplate(subArgs);
|
|
333
|
+
break;
|
|
334
|
+
case "analyze":
|
|
335
|
+
handleAnalyze(subArgs);
|
|
336
|
+
break;
|
|
337
|
+
case "list":
|
|
338
|
+
handleList(subArgs);
|
|
339
|
+
break;
|
|
340
|
+
default:
|
|
341
|
+
console.error(`Unknown command: ${command}`);
|
|
342
|
+
console.error('Run "cc-permissions --help" for usage information.');
|
|
343
|
+
process.exit(1);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// Run main
|
|
347
|
+
main();
|
|
348
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const VERSION = "0.1.0";
|
|
2
|
+
export * from "./types.js";
|
|
3
|
+
export { BANNED_PATTERNS, getPermissionsForLevel, combineTemplatePermissions, generateClaudeCodePermissions, parseLevel, describeLevels, } from "./permissions.js";
|
|
4
|
+
export { templates, getTemplate, getTemplates, listTemplateNames, listTemplates, isInitialized, resetLoader, getTemplatesDir, } from "./templates/index.js";
|
|
5
|
+
export { generateSettings, formatSettingsJson, formatPermissionsSummary, formatCommand, formatFullOutput, applyPermissions, formatApplyResult, } from "./output.js";
|
|
6
|
+
export { analyzeDirectory, formatAnalysisResult, } from "./analyze.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,UAAU,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// cc-permission-generator
|
|
2
|
+
// Main module exports
|
|
3
|
+
export const VERSION = "0.1.0";
|
|
4
|
+
// Types
|
|
5
|
+
export * from "./types.js";
|
|
6
|
+
// Core permission logic
|
|
7
|
+
export { BANNED_PATTERNS, getPermissionsForLevel, combineTemplatePermissions, generateClaudeCodePermissions, parseLevel, describeLevels, } from "./permissions.js";
|
|
8
|
+
// Templates
|
|
9
|
+
export { templates, getTemplate, getTemplates, listTemplateNames, listTemplates, isInitialized, resetLoader, getTemplatesDir, } from "./templates/index.js";
|
|
10
|
+
// Output generation
|
|
11
|
+
export { generateSettings, formatSettingsJson, formatPermissionsSummary, formatCommand, formatFullOutput, applyPermissions, formatApplyResult, } from "./output.js";
|
|
12
|
+
// Analysis
|
|
13
|
+
export { analyzeDirectory, formatAnalysisResult, } from "./analyze.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,sBAAsB;AAEtB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,wBAAwB;AACxB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,UAAU,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,YAAY;AACZ,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,WAAW;AACX,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { TemplateDefinition } from "./types.js";
|
|
2
|
+
import { PermissionLevel } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Format for Claude Code settings.json permissions section
|
|
5
|
+
*/
|
|
6
|
+
export interface ClaudeCodeSettings {
|
|
7
|
+
permissions: {
|
|
8
|
+
allow: string[];
|
|
9
|
+
deny: string[];
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generate Claude Code settings format from templates and level.
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateSettings(templates: TemplateDefinition[], level: PermissionLevel): ClaudeCodeSettings;
|
|
16
|
+
/**
|
|
17
|
+
* Format settings as JSON string for output.
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatSettingsJson(settings: ClaudeCodeSettings): string;
|
|
20
|
+
/**
|
|
21
|
+
* Format permissions as a human-readable summary.
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatPermissionsSummary(templates: TemplateDefinition[], level: PermissionLevel): string;
|
|
24
|
+
/**
|
|
25
|
+
* Generate the command to use these permissions.
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatCommand(templateNames: string[], level: PermissionLevel): string;
|
|
28
|
+
/**
|
|
29
|
+
* Full output with both JSON and summary.
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatFullOutput(templates: TemplateDefinition[], level: PermissionLevel, outputFormat?: "json" | "summary" | "both"): string;
|
|
32
|
+
/**
|
|
33
|
+
* Scope for where to apply permissions.
|
|
34
|
+
*/
|
|
35
|
+
export type ApplyScope = "project" | "user" | "global" | "local";
|
|
36
|
+
/**
|
|
37
|
+
* Resolve scope to a settings file path.
|
|
38
|
+
*
|
|
39
|
+
* @param scope - The scope (project, user/global, local)
|
|
40
|
+
* @param baseDir - Base directory for project/local scope (defaults to cwd)
|
|
41
|
+
* @returns Absolute path to the settings file
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveSettingsPath(scope: ApplyScope, baseDir?: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Parse and validate scope string.
|
|
46
|
+
* Supports prefix matching (e.g., "u" for "user", "l" for "local").
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseScope(value: string): ApplyScope | null;
|
|
49
|
+
/**
|
|
50
|
+
* Result of applying permissions to settings file.
|
|
51
|
+
*/
|
|
52
|
+
export interface ApplyResult {
|
|
53
|
+
settingsPath: string;
|
|
54
|
+
backupPath: string | null;
|
|
55
|
+
created: boolean;
|
|
56
|
+
merged: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Options for applying permissions.
|
|
60
|
+
*/
|
|
61
|
+
export interface ApplyOptions {
|
|
62
|
+
/** Base directory for relative scope paths (defaults to cwd) */
|
|
63
|
+
baseDir?: string;
|
|
64
|
+
/** Scope: project, user/global, local */
|
|
65
|
+
scope?: ApplyScope;
|
|
66
|
+
/** Custom output path (overrides scope) */
|
|
67
|
+
outputPath?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Apply permissions to a settings file, merging with existing settings.
|
|
71
|
+
* Creates a .bak backup if the file already exists.
|
|
72
|
+
*
|
|
73
|
+
* @param templates - Templates to apply
|
|
74
|
+
* @param level - Permission level
|
|
75
|
+
* @param options - Apply options (baseDir, scope, outputPath)
|
|
76
|
+
* @returns Result with paths and status
|
|
77
|
+
*/
|
|
78
|
+
export declare function applyPermissions(templates: TemplateDefinition[], level: PermissionLevel, options?: ApplyOptions): ApplyResult;
|
|
79
|
+
/**
|
|
80
|
+
* Format the apply result for display.
|
|
81
|
+
*/
|
|
82
|
+
export declare function formatApplyResult(result: ApplyResult): string;
|
|
83
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAO7C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,kBAAkB,EAAE,EAC/B,KAAK,EAAE,eAAe,GACrB,kBAAkB,CAOpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,kBAAkB,EAAE,EAC/B,KAAK,EAAE,eAAe,GACrB,MAAM,CA2BR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,EAAE,eAAe,GACrB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,kBAAkB,EAAE,EAC/B,KAAK,EAAE,eAAe,EACtB,YAAY,GAAE,MAAM,GAAG,SAAS,GAAG,MAAe,GACjD,MAAM,CAgBR;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,MAAsB,GAAG,MAAM,CAW9F;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAa3D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,kBAAkB,EAAE,EAC/B,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,YAAiB,GACzB,WAAW,CAuDb;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAa7D"}
|
package/dist/output.js
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { BANNED_PATTERNS, combineTemplatePermissions, generateClaudeCodePermissions, } from "./permissions.js";
|
|
5
|
+
/**
|
|
6
|
+
* Generate Claude Code settings format from templates and level.
|
|
7
|
+
*/
|
|
8
|
+
export function generateSettings(templates, level) {
|
|
9
|
+
const permissions = combineTemplatePermissions(templates, level);
|
|
10
|
+
const ccPermissions = generateClaudeCodePermissions(permissions);
|
|
11
|
+
return {
|
|
12
|
+
permissions: ccPermissions,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Format settings as JSON string for output.
|
|
17
|
+
*/
|
|
18
|
+
export function formatSettingsJson(settings) {
|
|
19
|
+
return JSON.stringify(settings, null, 2);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Format permissions as a human-readable summary.
|
|
23
|
+
*/
|
|
24
|
+
export function formatPermissionsSummary(templates, level) {
|
|
25
|
+
const permissions = combineTemplatePermissions(templates, level);
|
|
26
|
+
const templateNames = templates.map((t) => t.name).join(", ");
|
|
27
|
+
const lines = [
|
|
28
|
+
`Permission Summary`,
|
|
29
|
+
`==================`,
|
|
30
|
+
`Templates: ${templateNames}`,
|
|
31
|
+
`Level: ${level}`,
|
|
32
|
+
``,
|
|
33
|
+
`Allowed Commands (${permissions.length}):`,
|
|
34
|
+
];
|
|
35
|
+
// Group permissions by template for better readability
|
|
36
|
+
for (const perm of permissions) {
|
|
37
|
+
const desc = perm.description ? ` - ${perm.description}` : "";
|
|
38
|
+
lines.push(` ${perm.command}${desc}`);
|
|
39
|
+
}
|
|
40
|
+
lines.push(``);
|
|
41
|
+
lines.push(`Denied Patterns (${BANNED_PATTERNS.length}):`);
|
|
42
|
+
for (const banned of BANNED_PATTERNS) {
|
|
43
|
+
const desc = banned.description ? ` - ${banned.description}` : "";
|
|
44
|
+
lines.push(` ${banned.command}${desc}`);
|
|
45
|
+
}
|
|
46
|
+
return lines.join("\n");
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generate the command to use these permissions.
|
|
50
|
+
*/
|
|
51
|
+
export function formatCommand(templateNames, level) {
|
|
52
|
+
const templates = templateNames.join(",");
|
|
53
|
+
return `cc-permissions template ${templates} --level ${level}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Full output with both JSON and summary.
|
|
57
|
+
*/
|
|
58
|
+
export function formatFullOutput(templates, level, outputFormat = "json") {
|
|
59
|
+
if (outputFormat === "json") {
|
|
60
|
+
const settings = generateSettings(templates, level);
|
|
61
|
+
return formatSettingsJson(settings);
|
|
62
|
+
}
|
|
63
|
+
if (outputFormat === "summary") {
|
|
64
|
+
return formatPermissionsSummary(templates, level);
|
|
65
|
+
}
|
|
66
|
+
// Both
|
|
67
|
+
const settings = generateSettings(templates, level);
|
|
68
|
+
const summary = formatPermissionsSummary(templates, level);
|
|
69
|
+
const json = formatSettingsJson(settings);
|
|
70
|
+
return `${summary}\n\n---\n\nJSON Output:\n${json}`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resolve scope to a settings file path.
|
|
74
|
+
*
|
|
75
|
+
* @param scope - The scope (project, user/global, local)
|
|
76
|
+
* @param baseDir - Base directory for project/local scope (defaults to cwd)
|
|
77
|
+
* @returns Absolute path to the settings file
|
|
78
|
+
*/
|
|
79
|
+
export function resolveSettingsPath(scope, baseDir = process.cwd()) {
|
|
80
|
+
switch (scope) {
|
|
81
|
+
case "user":
|
|
82
|
+
case "global":
|
|
83
|
+
return join(homedir(), ".claude", "settings.json");
|
|
84
|
+
case "local":
|
|
85
|
+
return join(baseDir, ".claude", "settings.local.json");
|
|
86
|
+
case "project":
|
|
87
|
+
default:
|
|
88
|
+
return join(baseDir, ".claude", "settings.json");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Parse and validate scope string.
|
|
93
|
+
* Supports prefix matching (e.g., "u" for "user", "l" for "local").
|
|
94
|
+
*/
|
|
95
|
+
export function parseScope(value) {
|
|
96
|
+
const normalized = value.toLowerCase().trim();
|
|
97
|
+
const scopes = ["project", "user", "global", "local"];
|
|
98
|
+
const matches = scopes.filter((s) => s.startsWith(normalized));
|
|
99
|
+
if (matches.length === 1) {
|
|
100
|
+
return matches[0];
|
|
101
|
+
}
|
|
102
|
+
// Special case: "g" is unambiguous (only "global" starts with g)
|
|
103
|
+
// but "u" matches "user" only, "l" matches "local" only, "p" matches "project" only
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Apply permissions to a settings file, merging with existing settings.
|
|
108
|
+
* Creates a .bak backup if the file already exists.
|
|
109
|
+
*
|
|
110
|
+
* @param templates - Templates to apply
|
|
111
|
+
* @param level - Permission level
|
|
112
|
+
* @param options - Apply options (baseDir, scope, outputPath)
|
|
113
|
+
* @returns Result with paths and status
|
|
114
|
+
*/
|
|
115
|
+
export function applyPermissions(templates, level, options = {}) {
|
|
116
|
+
const { baseDir = process.cwd(), scope = "project", outputPath } = options;
|
|
117
|
+
// Determine settings path: custom path overrides scope
|
|
118
|
+
const settingsPath = outputPath || resolveSettingsPath(scope, baseDir);
|
|
119
|
+
const settingsDir = dirname(settingsPath);
|
|
120
|
+
const backupPath = settingsPath + ".bak";
|
|
121
|
+
// Generate new permissions
|
|
122
|
+
const newSettings = generateSettings(templates, level);
|
|
123
|
+
let existingSettings = {};
|
|
124
|
+
let created = true;
|
|
125
|
+
let merged = false;
|
|
126
|
+
let backupCreated = null;
|
|
127
|
+
// Ensure parent directory exists
|
|
128
|
+
if (!existsSync(settingsDir)) {
|
|
129
|
+
mkdirSync(settingsDir, { recursive: true });
|
|
130
|
+
}
|
|
131
|
+
// Read existing settings if they exist
|
|
132
|
+
if (existsSync(settingsPath)) {
|
|
133
|
+
created = false;
|
|
134
|
+
// Create backup
|
|
135
|
+
const existingContent = readFileSync(settingsPath, "utf-8");
|
|
136
|
+
writeFileSync(backupPath, existingContent, "utf-8");
|
|
137
|
+
backupCreated = backupPath;
|
|
138
|
+
// Parse existing settings
|
|
139
|
+
try {
|
|
140
|
+
existingSettings = JSON.parse(existingContent);
|
|
141
|
+
merged = true;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// If existing file is invalid JSON, we'll overwrite it
|
|
145
|
+
existingSettings = {};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Merge: new permissions replace existing, but preserve other settings
|
|
149
|
+
const mergedSettings = {
|
|
150
|
+
...existingSettings,
|
|
151
|
+
permissions: newSettings.permissions,
|
|
152
|
+
};
|
|
153
|
+
// Write merged settings
|
|
154
|
+
writeFileSync(settingsPath, JSON.stringify(mergedSettings, null, 2) + "\n", "utf-8");
|
|
155
|
+
return {
|
|
156
|
+
settingsPath,
|
|
157
|
+
backupPath: backupCreated,
|
|
158
|
+
created,
|
|
159
|
+
merged,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Format the apply result for display.
|
|
164
|
+
*/
|
|
165
|
+
export function formatApplyResult(result) {
|
|
166
|
+
const lines = [];
|
|
167
|
+
if (result.created) {
|
|
168
|
+
lines.push(`Created: ${result.settingsPath}`);
|
|
169
|
+
}
|
|
170
|
+
else if (result.merged) {
|
|
171
|
+
lines.push(`Updated: ${result.settingsPath}`);
|
|
172
|
+
if (result.backupPath) {
|
|
173
|
+
lines.push(`Backup: ${result.backupPath}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return lines.join("\n");
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|