claude-settings-cli 1.0.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/LICENSE +21 -0
- package/README.md +142 -0
- package/bin/ccc.mjs +2 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +55 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +135 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/io.d.ts +4 -0
- package/dist/commands/io.d.ts.map +1 -0
- package/dist/commands/io.js +69 -0
- package/dist/commands/io.js.map +1 -0
- package/dist/commands/plugin.d.ts +3 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +77 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/preset.d.ts +3 -0
- package/dist/commands/preset.d.ts.map +1 -0
- package/dist/commands/preset.js +118 -0
- package/dist/commands/preset.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +61 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/core/diff.d.ts +3 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/diff.js +45 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/paths.d.ts +12 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +34 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/reader.d.ts +13 -0
- package/dist/core/reader.d.ts.map +1 -0
- package/dist/core/reader.js +65 -0
- package/dist/core/reader.js.map +1 -0
- package/dist/core/switcher.d.ts +12 -0
- package/dist/core/switcher.d.ts.map +1 -0
- package/dist/core/switcher.js +37 -0
- package/dist/core/switcher.js.map +1 -0
- package/dist/core/writer.d.ts +11 -0
- package/dist/core/writer.d.ts.map +1 -0
- package/dist/core/writer.js +34 -0
- package/dist/core/writer.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/schema/plugins.d.ts +70 -0
- package/dist/schema/plugins.d.ts.map +1 -0
- package/dist/schema/plugins.js +15 -0
- package/dist/schema/plugins.js.map +1 -0
- package/dist/schema/project.d.ts +37 -0
- package/dist/schema/project.d.ts.map +1 -0
- package/dist/schema/project.js +16 -0
- package/dist/schema/project.js.map +1 -0
- package/dist/schema/settings.d.ts +37 -0
- package/dist/schema/settings.d.ts.map +1 -0
- package/dist/schema/settings.js +30 -0
- package/dist/schema/settings.js.map +1 -0
- package/dist/types/index.d.ts +37 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/backup.d.ts +6 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +34 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/errors.d.ts +18 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +42 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +18 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/safe-json.d.ts +3 -0
- package/dist/utils/safe-json.d.ts.map +1 -0
- package/dist/utils/safe-json.js +25 -0
- package/dist/utils/safe-json.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { ConfigReader } from '../core/reader.js';
|
|
5
|
+
import { ConfigWriter } from '../core/writer.js';
|
|
6
|
+
import { PresetSwitcher } from '../core/switcher.js';
|
|
7
|
+
import { printDiff } from '../core/diff.js';
|
|
8
|
+
import { success, spinner } from '../utils/logger.js';
|
|
9
|
+
import { handleError } from '../utils/errors.js';
|
|
10
|
+
export const presetCommand = new Command('preset')
|
|
11
|
+
.description('Manage configuration presets');
|
|
12
|
+
presetCommand
|
|
13
|
+
.command('list')
|
|
14
|
+
.description('List all available presets')
|
|
15
|
+
.action(() => {
|
|
16
|
+
const presets = ConfigReader.listPresets();
|
|
17
|
+
if (presets.length === 0) {
|
|
18
|
+
console.log(chalk.dim(' No presets found.'));
|
|
19
|
+
console.log(chalk.dim(' Create one with: ccc preset save <name>'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const active = ConfigReader.detectActivePreset();
|
|
23
|
+
console.log('');
|
|
24
|
+
for (const name of presets) {
|
|
25
|
+
const isActive = name === active;
|
|
26
|
+
const marker = isActive ? chalk.green('*') : ' ';
|
|
27
|
+
const label = isActive
|
|
28
|
+
? chalk.green(`${name} (active)`)
|
|
29
|
+
: chalk.white(name);
|
|
30
|
+
console.log(` ${marker} ${label}`);
|
|
31
|
+
}
|
|
32
|
+
console.log('');
|
|
33
|
+
});
|
|
34
|
+
presetCommand
|
|
35
|
+
.command('use <name>')
|
|
36
|
+
.description('Switch to a preset')
|
|
37
|
+
.option('--no-backup', 'Skip backup of current settings')
|
|
38
|
+
.action(async (name, opts) => {
|
|
39
|
+
try {
|
|
40
|
+
const s = spinner(`Switching to preset "${name}"...`);
|
|
41
|
+
const { previous, current } = await PresetSwitcher.switchTo(name, {
|
|
42
|
+
noBackup: !opts.backup,
|
|
43
|
+
});
|
|
44
|
+
s.succeed(`Switched to preset "${name}"`);
|
|
45
|
+
PresetSwitcher.printSwitchSummary(previous, current);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
handleError(err);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
presetCommand
|
|
52
|
+
.command('save <name>')
|
|
53
|
+
.description('Save current settings as a preset')
|
|
54
|
+
.option('--from <file>', 'Save from a specific file instead of current settings')
|
|
55
|
+
.action(async (name, opts) => {
|
|
56
|
+
try {
|
|
57
|
+
await PresetSwitcher.saveAs(name, opts.from);
|
|
58
|
+
success(`Saved current settings as preset "${name}"`);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
handleError(err);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
presetCommand
|
|
65
|
+
.command('delete <name>')
|
|
66
|
+
.description('Delete a preset')
|
|
67
|
+
.option('-y, --yes', 'Skip confirmation')
|
|
68
|
+
.action(async (name, opts) => {
|
|
69
|
+
try {
|
|
70
|
+
if (!opts.yes) {
|
|
71
|
+
const { confirm } = await inquirer.prompt([
|
|
72
|
+
{
|
|
73
|
+
type: 'confirm',
|
|
74
|
+
name: 'confirm',
|
|
75
|
+
message: `Are you sure you want to delete preset "${name}"?`,
|
|
76
|
+
default: false,
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
if (!confirm) {
|
|
80
|
+
console.log(chalk.dim('Cancelled.'));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
await ConfigWriter.deletePreset(name);
|
|
85
|
+
success(`Deleted preset "${name}"`);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
handleError(err);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
presetCommand
|
|
92
|
+
.command('rename <oldName> <newName>')
|
|
93
|
+
.description('Rename a preset')
|
|
94
|
+
.action(async (oldName, newName) => {
|
|
95
|
+
try {
|
|
96
|
+
await ConfigWriter.renamePreset(oldName, newName);
|
|
97
|
+
success(`Renamed preset "${oldName}" → "${newName}"`);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
handleError(err);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
presetCommand
|
|
104
|
+
.command('diff <name1> <name2>')
|
|
105
|
+
.description('Compare two presets')
|
|
106
|
+
.action(async (name1, name2) => {
|
|
107
|
+
try {
|
|
108
|
+
const preset1 = ConfigReader.readPreset(name1);
|
|
109
|
+
const preset2 = ConfigReader.readPreset(name2);
|
|
110
|
+
console.log('');
|
|
111
|
+
printDiff(preset1, preset2, name1, name2);
|
|
112
|
+
console.log('');
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
handleError(err);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../src/commands/preset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,cAAc,SACyB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { PROJECTS_DIR, encodeProjectDir, decodeProjectDir } from '../core/paths.js';
|
|
6
|
+
import { readJsonSafe } from '../utils/safe-json.js';
|
|
7
|
+
import { handleError } from '../utils/errors.js';
|
|
8
|
+
export const projectCommand = new Command('project')
|
|
9
|
+
.description('Manage project-level configuration');
|
|
10
|
+
projectCommand
|
|
11
|
+
.command('list')
|
|
12
|
+
.description('List all projects with configuration')
|
|
13
|
+
.action(async () => {
|
|
14
|
+
try {
|
|
15
|
+
if (!(await fs.pathExists(PROJECTS_DIR))) {
|
|
16
|
+
console.log(chalk.dim(' No projects found.'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const entries = await fs.readdir(PROJECTS_DIR);
|
|
20
|
+
const projects = entries.filter((e) => fs.pathExistsSync(path.join(PROJECTS_DIR, e)));
|
|
21
|
+
console.log('');
|
|
22
|
+
if (projects.length === 0) {
|
|
23
|
+
console.log(chalk.dim(' No projects found.'));
|
|
24
|
+
}
|
|
25
|
+
for (const encoded of projects) {
|
|
26
|
+
const dir = decodeProjectDir(encoded);
|
|
27
|
+
console.log(` ${chalk.white(dir)}`);
|
|
28
|
+
}
|
|
29
|
+
console.log('');
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
handleError(err);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
projectCommand
|
|
36
|
+
.command('show <dir>')
|
|
37
|
+
.description('Show project configuration')
|
|
38
|
+
.action(async (dir) => {
|
|
39
|
+
try {
|
|
40
|
+
const encoded = encodeProjectDir(path.resolve(dir));
|
|
41
|
+
const projectDir = path.join(PROJECTS_DIR, encoded);
|
|
42
|
+
if (!(await fs.pathExists(projectDir))) {
|
|
43
|
+
console.log(chalk.dim(` No configuration found for ${dir}`));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const files = await fs.readdir(projectDir);
|
|
47
|
+
const jsonFiles = files.filter((f) => f.endsWith('.json'));
|
|
48
|
+
console.log('');
|
|
49
|
+
for (const file of jsonFiles) {
|
|
50
|
+
const filePath = path.join(projectDir, file);
|
|
51
|
+
const data = await readJsonSafe(filePath);
|
|
52
|
+
console.log(chalk.cyan(` ${file}:`));
|
|
53
|
+
console.log(` ${JSON.stringify(data, null, 4)}`);
|
|
54
|
+
}
|
|
55
|
+
console.log('');
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
handleError(err);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function diffObjects(obj1: Record<string, unknown>, obj2: Record<string, unknown>, prefix?: string): string[];
|
|
2
|
+
export declare function printDiff(obj1: Record<string, unknown>, obj2: Record<string, unknown>, label1?: string, label2?: string): void;
|
|
3
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,SAAK,GACV,MAAM,EAAE,CAsCV;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,SAAY,EAClB,MAAM,SAAW,GAChB,IAAI,CAUN"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export function diffObjects(obj1, obj2, prefix = '') {
|
|
3
|
+
const lines = [];
|
|
4
|
+
const allKeys = new Set([
|
|
5
|
+
...Object.keys(obj1),
|
|
6
|
+
...Object.keys(obj2),
|
|
7
|
+
]);
|
|
8
|
+
for (const key of [...allKeys].sort()) {
|
|
9
|
+
const fullPath = prefix ? `${prefix}.${key}` : key;
|
|
10
|
+
const val1 = obj1[key];
|
|
11
|
+
const val2 = obj2[key];
|
|
12
|
+
if (!(key in obj1)) {
|
|
13
|
+
lines.push(chalk.green(` + ${fullPath}: ${JSON.stringify(val2)}`));
|
|
14
|
+
}
|
|
15
|
+
else if (!(key in obj2)) {
|
|
16
|
+
lines.push(chalk.red(` - ${fullPath}: ${JSON.stringify(val1)}`));
|
|
17
|
+
}
|
|
18
|
+
else if (typeof val1 === 'object' &&
|
|
19
|
+
typeof val2 === 'object' &&
|
|
20
|
+
val1 !== null &&
|
|
21
|
+
val2 !== null &&
|
|
22
|
+
!Array.isArray(val1) &&
|
|
23
|
+
!Array.isArray(val2)) {
|
|
24
|
+
lines.push(...diffObjects(val1, val2, fullPath));
|
|
25
|
+
}
|
|
26
|
+
else if (JSON.stringify(val1) !== JSON.stringify(val2)) {
|
|
27
|
+
lines.push(chalk.red(` - ${fullPath}: ${JSON.stringify(val1)}`));
|
|
28
|
+
lines.push(chalk.green(` + ${fullPath}: ${JSON.stringify(val2)}`));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return lines;
|
|
32
|
+
}
|
|
33
|
+
export function printDiff(obj1, obj2, label1 = 'current', label2 = 'target') {
|
|
34
|
+
const lines = diffObjects(obj1, obj2);
|
|
35
|
+
if (lines.length === 0) {
|
|
36
|
+
console.log(chalk.dim(' No differences found.'));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.log(chalk.dim(` Comparing ${label1} → ${label2}:\n`));
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
console.log(line);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,WAAW,CACzB,IAA6B,EAC7B,IAA6B,EAC7B,MAAM,GAAG,EAAE;IAEX,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACtB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;KACrB,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvB,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,IACL,OAAO,IAAI,KAAK,QAAQ;YACxB,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACpB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EACpB,CAAC;YACD,KAAK,CAAC,IAAI,CACR,GAAG,WAAW,CACZ,IAA+B,EAC/B,IAA+B,EAC/B,QAAQ,CACT,CACF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAA6B,EAC7B,IAA6B,EAC7B,MAAM,GAAG,SAAS,EAClB,MAAM,GAAG,QAAQ;IAEjB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,MAAM,MAAM,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const CLAUDE_DIR: string;
|
|
2
|
+
export declare const SETTINGS_FILE: string;
|
|
3
|
+
export declare const PLUGINS_DIR: string;
|
|
4
|
+
export declare const INSTALLED_PLUGINS_FILE: string;
|
|
5
|
+
export declare const BLOCKLIST_FILE: string;
|
|
6
|
+
export declare const PROJECTS_DIR: string;
|
|
7
|
+
export declare const BACKUPS_DIR: string;
|
|
8
|
+
export declare function presetPath(name: string): string;
|
|
9
|
+
export declare function scanPresetNames(): string[];
|
|
10
|
+
export declare function encodeProjectDir(dir: string): string;
|
|
11
|
+
export declare function decodeProjectDir(encoded: string): string;
|
|
12
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,QAAqC,CAAC;AAC7D,eAAO,MAAM,aAAa,QAAyC,CAAC;AACpE,eAAO,MAAM,WAAW,QAAmC,CAAC;AAC5D,eAAO,MAAM,sBAAsB,QAGlC,CAAC;AACF,eAAO,MAAM,cAAc,QAA2C,CAAC;AACvE,eAAO,MAAM,YAAY,QAAoC,CAAC;AAC9D,eAAO,MAAM,WAAW,QAAmC,CAAC;AAE5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAe1C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
export const CLAUDE_DIR = path.join(os.homedir(), '.claude');
|
|
5
|
+
export const SETTINGS_FILE = path.join(CLAUDE_DIR, 'settings.json');
|
|
6
|
+
export const PLUGINS_DIR = path.join(CLAUDE_DIR, 'plugins');
|
|
7
|
+
export const INSTALLED_PLUGINS_FILE = path.join(PLUGINS_DIR, 'installed_plugins.json');
|
|
8
|
+
export const BLOCKLIST_FILE = path.join(PLUGINS_DIR, 'blocklist.json');
|
|
9
|
+
export const PROJECTS_DIR = path.join(CLAUDE_DIR, 'projects');
|
|
10
|
+
export const BACKUPS_DIR = path.join(CLAUDE_DIR, 'backups');
|
|
11
|
+
export function presetPath(name) {
|
|
12
|
+
return path.join(CLAUDE_DIR, `settings-${name}.json`);
|
|
13
|
+
}
|
|
14
|
+
export function scanPresetNames() {
|
|
15
|
+
try {
|
|
16
|
+
const files = fs.readdirSync(CLAUDE_DIR);
|
|
17
|
+
return files
|
|
18
|
+
.filter((f) => f.startsWith('settings-') &&
|
|
19
|
+
f.endsWith('.json') &&
|
|
20
|
+
f !== 'settings.json')
|
|
21
|
+
.map((f) => f.slice('settings-'.length, -'.json'.length))
|
|
22
|
+
.sort();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function encodeProjectDir(dir) {
|
|
29
|
+
return dir.replace(/^\//, '').replace(/\//g, '-');
|
|
30
|
+
}
|
|
31
|
+
export function decodeProjectDir(encoded) {
|
|
32
|
+
return '/' + encoded.replace(/-/g, '/');
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAC7C,WAAW,EACX,wBAAwB,CACzB,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAE5D,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,IAAI,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACzC,OAAO,KAAK;aACT,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;YACzB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACnB,CAAC,KAAK,eAAe,CACxB;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aACxD,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Settings } from '../schema/settings.js';
|
|
2
|
+
import type { InstalledPlugins, Blocklist } from '../types/index.js';
|
|
3
|
+
export declare class ConfigReader {
|
|
4
|
+
static readSettings(): Settings;
|
|
5
|
+
static readSettingsAsync(): Promise<Settings>;
|
|
6
|
+
static readPreset(name: string): Settings;
|
|
7
|
+
static readPresetAsync(name: string): Promise<Settings>;
|
|
8
|
+
static listPresets(): string[];
|
|
9
|
+
static readInstalledPlugins(): InstalledPlugins | null;
|
|
10
|
+
static readBlocklist(): Blocklist;
|
|
11
|
+
static detectActivePreset(): string | null;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/core/reader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAErE,qBAAa,YAAY;IACvB,MAAM,CAAC,YAAY,IAAI,QAAQ;WAKlB,iBAAiB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAKnD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;WAK5B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK7D,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B,MAAM,CAAC,oBAAoB,IAAI,gBAAgB,GAAG,IAAI;IAStD,MAAM,CAAC,aAAa,IAAI,SAAS;IASjC,MAAM,CAAC,kBAAkB,IAAI,MAAM,GAAG,IAAI;CAqB3C"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { SETTINGS_FILE, presetPath, scanPresetNames, INSTALLED_PLUGINS_FILE, BLOCKLIST_FILE, } from './paths.js';
|
|
2
|
+
import { SettingsSchema } from '../schema/settings.js';
|
|
3
|
+
import { InstalledPluginsSchema, BlocklistSchema, } from '../schema/plugins.js';
|
|
4
|
+
import { readJsonSafe, readJsonSafeSync } from '../utils/safe-json.js';
|
|
5
|
+
export class ConfigReader {
|
|
6
|
+
static readSettings() {
|
|
7
|
+
const raw = readJsonSafeSync(SETTINGS_FILE);
|
|
8
|
+
return SettingsSchema.parse(raw);
|
|
9
|
+
}
|
|
10
|
+
static async readSettingsAsync() {
|
|
11
|
+
const raw = await readJsonSafe(SETTINGS_FILE);
|
|
12
|
+
return SettingsSchema.parse(raw);
|
|
13
|
+
}
|
|
14
|
+
static readPreset(name) {
|
|
15
|
+
const raw = readJsonSafeSync(presetPath(name));
|
|
16
|
+
return SettingsSchema.parse(raw);
|
|
17
|
+
}
|
|
18
|
+
static async readPresetAsync(name) {
|
|
19
|
+
const raw = await readJsonSafe(presetPath(name));
|
|
20
|
+
return SettingsSchema.parse(raw);
|
|
21
|
+
}
|
|
22
|
+
static listPresets() {
|
|
23
|
+
return scanPresetNames();
|
|
24
|
+
}
|
|
25
|
+
static readInstalledPlugins() {
|
|
26
|
+
try {
|
|
27
|
+
const raw = readJsonSafeSync(INSTALLED_PLUGINS_FILE);
|
|
28
|
+
return InstalledPluginsSchema.parse(raw);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
static readBlocklist() {
|
|
35
|
+
try {
|
|
36
|
+
const raw = readJsonSafeSync(BLOCKLIST_FILE);
|
|
37
|
+
return BlocklistSchema.parse(raw);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
static detectActivePreset() {
|
|
44
|
+
try {
|
|
45
|
+
const current = readJsonSafeSync(SETTINGS_FILE);
|
|
46
|
+
const presets = scanPresetNames();
|
|
47
|
+
for (const name of presets) {
|
|
48
|
+
try {
|
|
49
|
+
const preset = readJsonSafeSync(presetPath(name));
|
|
50
|
+
if (JSON.stringify(current) === JSON.stringify(preset)) {
|
|
51
|
+
return name;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/core/reader.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,UAAU,EACV,eAAe,EACf,sBAAsB,EACtB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAiB,MAAM,uBAAuB,CAAC;AACtE,OAAO,EACL,sBAAsB,EACtB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGvE,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,YAAY;QACjB,MAAM,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC5C,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB;QAC5B,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9C,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAY;QAC5B,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAY;QACvC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,oBAAoB;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;YACrD,OAAO,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAC7C,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,kBAAkB;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAA0B,aAAa,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,gBAAgB,CAC7B,UAAU,CAAC,IAAI,CAAC,CACjB,CAAC;oBACF,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvD,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Settings } from '../schema/settings.js';
|
|
2
|
+
export declare class PresetSwitcher {
|
|
3
|
+
static switchTo(name: string, options?: {
|
|
4
|
+
noBackup?: boolean;
|
|
5
|
+
}): Promise<{
|
|
6
|
+
previous: Settings;
|
|
7
|
+
current: Settings;
|
|
8
|
+
}>;
|
|
9
|
+
static saveAs(name: string, source?: string): Promise<void>;
|
|
10
|
+
static printSwitchSummary(previous: Settings, current: Settings): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=switcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switcher.d.ts","sourceRoot":"","sources":["../../src/core/switcher.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtE,qBAAa,cAAc;WACZ,QAAQ,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC;WAcxC,MAAM,CACjB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAMhB,MAAM,CAAC,kBAAkB,CACvB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,GAChB,IAAI;CAaR"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { presetPath } from './paths.js';
|
|
3
|
+
import { ConfigReader } from './reader.js';
|
|
4
|
+
import { ConfigWriter } from './writer.js';
|
|
5
|
+
import { PresetNotFoundError } from '../utils/errors.js';
|
|
6
|
+
import { SETTINGS_FILE } from './paths.js';
|
|
7
|
+
import { SettingsSchema } from '../schema/settings.js';
|
|
8
|
+
import { diffObjects } from './diff.js';
|
|
9
|
+
export class PresetSwitcher {
|
|
10
|
+
static async switchTo(name, options) {
|
|
11
|
+
const sourcePath = presetPath(name);
|
|
12
|
+
if (!(await fs.pathExists(sourcePath))) {
|
|
13
|
+
throw new PresetNotFoundError(name);
|
|
14
|
+
}
|
|
15
|
+
const previous = ConfigReader.readSettings();
|
|
16
|
+
const preset = SettingsSchema.parse(await fs.readJson(sourcePath));
|
|
17
|
+
await ConfigWriter.writeSettings(preset, options);
|
|
18
|
+
return { previous, current: preset };
|
|
19
|
+
}
|
|
20
|
+
static async saveAs(name, source) {
|
|
21
|
+
const src = source ?? SETTINGS_FILE;
|
|
22
|
+
const settings = SettingsSchema.parse(await fs.readJson(src));
|
|
23
|
+
await ConfigWriter.savePreset(name, settings);
|
|
24
|
+
}
|
|
25
|
+
static printSwitchSummary(previous, current) {
|
|
26
|
+
const lines = diffObjects(previous, current);
|
|
27
|
+
if (lines.length === 0) {
|
|
28
|
+
console.log(' No changes in configuration.');
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
for (const line of lines) {
|
|
32
|
+
console.log(line);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switcher.js","sourceRoot":"","sources":["../../src/core/switcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAiB,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,KAAK,CAAC,QAAQ,CACnB,IAAY,EACZ,OAAgC;QAEhC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAEnE,MAAM,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAElD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,IAAY,EACZ,MAAe;QAEf,MAAM,GAAG,GAAG,MAAM,IAAI,aAAa,CAAC;QACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,kBAAkB,CACvB,QAAkB,EAClB,OAAiB;QAEjB,MAAM,KAAK,GAAG,WAAW,CACvB,QAAmC,EACnC,OAAkC,CACnC,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Settings } from '../schema/settings.js';
|
|
2
|
+
export declare class ConfigWriter {
|
|
3
|
+
static atomicWrite(filePath: string, data: unknown): Promise<void>;
|
|
4
|
+
static writeSettings(settings: Settings, options?: {
|
|
5
|
+
noBackup?: boolean;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
static savePreset(name: string, settings: Settings): Promise<void>;
|
|
8
|
+
static deletePreset(name: string): Promise<void>;
|
|
9
|
+
static renamePreset(oldName: string, newName: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/core/writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,qBAAa,YAAY;WACV,WAAW,CACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC;WAMH,aAAa,CACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;WAOH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;WAI3D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIzC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAW3E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { SETTINGS_FILE, presetPath } from './paths.js';
|
|
3
|
+
import { BackupManager } from '../utils/backup.js';
|
|
4
|
+
export class ConfigWriter {
|
|
5
|
+
static async atomicWrite(filePath, data) {
|
|
6
|
+
const tmp = filePath + '.tmp.' + Date.now();
|
|
7
|
+
await fs.writeJson(tmp, data, { spaces: 2 });
|
|
8
|
+
await fs.rename(tmp, filePath);
|
|
9
|
+
}
|
|
10
|
+
static async writeSettings(settings, options) {
|
|
11
|
+
if (!options?.noBackup) {
|
|
12
|
+
await BackupManager.createBackup(SETTINGS_FILE);
|
|
13
|
+
}
|
|
14
|
+
await this.atomicWrite(SETTINGS_FILE, settings);
|
|
15
|
+
}
|
|
16
|
+
static async savePreset(name, settings) {
|
|
17
|
+
await this.atomicWrite(presetPath(name), settings);
|
|
18
|
+
}
|
|
19
|
+
static async deletePreset(name) {
|
|
20
|
+
await fs.remove(presetPath(name));
|
|
21
|
+
}
|
|
22
|
+
static async renamePreset(oldName, newName) {
|
|
23
|
+
const oldPath = presetPath(oldName);
|
|
24
|
+
const newPath = presetPath(newName);
|
|
25
|
+
if (!(await fs.pathExists(oldPath))) {
|
|
26
|
+
throw new Error(`Preset "${oldName}" not found`);
|
|
27
|
+
}
|
|
28
|
+
if (await fs.pathExists(newPath)) {
|
|
29
|
+
throw new Error(`Preset "${newName}" already exists`);
|
|
30
|
+
}
|
|
31
|
+
await fs.move(oldPath, newPath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/core/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,QAAgB,EAChB,IAAa;QAEb,MAAM,GAAG,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,QAAkB,EAClB,OAAgC;QAEhC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YACvB,MAAM,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,QAAkB;QACtD,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAY;QACpC,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,OAAe;QACxD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,kBAAkB,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { presetCommand } from './commands/preset.js';
|
|
4
|
+
import { configCommand } from './commands/config.js';
|
|
5
|
+
import { pluginCommand } from './commands/plugin.js';
|
|
6
|
+
import { projectCommand } from './commands/project.js';
|
|
7
|
+
import { ioCommand, importCommand } from './commands/io.js';
|
|
8
|
+
import { backupCommand } from './commands/backup.js';
|
|
9
|
+
import { ConfigReader } from './core/reader.js';
|
|
10
|
+
import { maskValue } from './schema/settings.js';
|
|
11
|
+
const program = new Command();
|
|
12
|
+
program
|
|
13
|
+
.name('ccc')
|
|
14
|
+
.description('Claude Code Config - manage your Claude Code configuration')
|
|
15
|
+
.version('1.0.0');
|
|
16
|
+
program.addCommand(presetCommand);
|
|
17
|
+
program.addCommand(configCommand);
|
|
18
|
+
program.addCommand(pluginCommand);
|
|
19
|
+
program.addCommand(projectCommand);
|
|
20
|
+
program.addCommand(ioCommand);
|
|
21
|
+
program.addCommand(importCommand);
|
|
22
|
+
program.addCommand(backupCommand);
|
|
23
|
+
program
|
|
24
|
+
.command('current')
|
|
25
|
+
.description('Show current active configuration summary')
|
|
26
|
+
.action(() => {
|
|
27
|
+
try {
|
|
28
|
+
const settings = ConfigReader.readSettings();
|
|
29
|
+
const active = ConfigReader.detectActivePreset();
|
|
30
|
+
console.log('');
|
|
31
|
+
if (active) {
|
|
32
|
+
console.log(chalk.green(` Active preset: ${active}`));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log(chalk.dim(' Active preset: (custom)'));
|
|
36
|
+
}
|
|
37
|
+
if (settings.env.ANTHROPIC_BASE_URL) {
|
|
38
|
+
console.log(` Base URL: ${settings.env.ANTHROPIC_BASE_URL}`);
|
|
39
|
+
}
|
|
40
|
+
const models = [
|
|
41
|
+
settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
42
|
+
settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL,
|
|
43
|
+
settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
44
|
+
].filter(Boolean);
|
|
45
|
+
if (models.length > 0) {
|
|
46
|
+
console.log(` Models: ${models.join(', ')}`);
|
|
47
|
+
}
|
|
48
|
+
if (settings.env.ANTHROPIC_AUTH_TOKEN) {
|
|
49
|
+
console.log(` Token: ${maskValue('TOKEN', settings.env.ANTHROPIC_AUTH_TOKEN)}`);
|
|
50
|
+
}
|
|
51
|
+
const pluginCount = settings.enabledPlugins
|
|
52
|
+
? Object.values(settings.enabledPlugins).filter(Boolean).length
|
|
53
|
+
: 0;
|
|
54
|
+
console.log(` Plugins: ${pluginCount} enabled`);
|
|
55
|
+
console.log('');
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
if (err instanceof Error && err.message.includes('not found')) {
|
|
59
|
+
console.log(chalk.yellow(' No settings.json found.'));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
throw err;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
program.parse();
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,EAAE,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,eAAe,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,CACjD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG;YACb,QAAQ,CAAC,GAAG,CAAC,8BAA8B;YAC3C,QAAQ,CAAC,GAAG,CAAC,4BAA4B;YACzC,QAAQ,CAAC,GAAG,CAAC,6BAA6B;SAC3C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CACT,YAAY,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc;YACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;YAC/D,CAAC,CAAC,CAAC,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,UAAU,CAAC,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|