@lkangd/cc-settings-preset 1.1.2 → 1.1.4
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/cli.js +5 -8
- package/dist/cli.js.map +1 -1
- package/dist/core/name.d.ts +0 -1
- package/dist/core/name.js +4 -5
- package/dist/core/name.js.map +1 -1
- package/dist/core/paths.d.ts +2 -1
- package/dist/core/paths.js +3 -3
- package/dist/core/paths.js.map +1 -1
- package/dist/core/schema.d.ts +5 -36
- package/dist/core/schema.js +2 -14
- package/dist/core/schema.js.map +1 -1
- package/dist/flows/run-flow.d.ts +4 -5
- package/dist/flows/run-flow.js +3 -8
- package/dist/flows/run-flow.js.map +1 -1
- package/dist/ink/components/project-launch-columns-view.d.ts +2 -1
- package/dist/ink/components/project-launch-columns-view.js +2 -2
- package/dist/ink/components/project-launch-columns-view.js.map +1 -1
- package/dist/ink/project-launch-app.d.ts +1 -2
- package/dist/ink/project-launch-app.js +20 -51
- package/dist/ink/project-launch-app.js.map +1 -1
- package/dist/ink/project-manage-app.js +39 -76
- package/dist/ink/project-manage-app.js.map +1 -1
- package/dist/ink/use-project-launch-browser-controller.d.ts +37 -0
- package/dist/ink/use-project-launch-browser-controller.js +119 -0
- package/dist/ink/use-project-launch-browser-controller.js.map +1 -0
- package/dist/services/preset-service.d.ts +6 -6
- package/dist/services/preset-service.js +184 -93
- package/dist/services/preset-service.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { useCallback, useRef, useState } from 'react';
|
|
2
|
+
import { annotateToggleItems, createProjectLaunchFlowState, formatProjectLaunchSortMode, getActiveProjectLaunchItem, getActiveProjectLaunchState, getPendingDisableRemovals, reduceProjectLaunchFlow, shouldBubbleProjectLaunchEscape, } from '../flows/project-launch-flow.js';
|
|
3
|
+
export function useProjectLaunchBrowserController({ presets, detected, statesByPreset, disableLockSources = [], lastUsedName, moveRightWithL = true, title, help, }) {
|
|
4
|
+
const [state, setState] = useState(() => createProjectLaunchFlowState({
|
|
5
|
+
presets,
|
|
6
|
+
detected,
|
|
7
|
+
statesByPreset,
|
|
8
|
+
disableLockSources,
|
|
9
|
+
...(lastUsedName ? { lastUsedName } : {}),
|
|
10
|
+
}));
|
|
11
|
+
// Multiple dispatches can happen before React renders; mirror state in refs so each dispatch sees the latest synchronous flow state.
|
|
12
|
+
const stateRef = useRef(state);
|
|
13
|
+
stateRef.current = state;
|
|
14
|
+
const [sortMessage, setSortMessageState] = useState(null);
|
|
15
|
+
const sortMessageRef = useRef(sortMessage);
|
|
16
|
+
sortMessageRef.current = sortMessage;
|
|
17
|
+
const detectedBaseline = state.statesByPreset.Detected ?? detected;
|
|
18
|
+
const activeItem = getActiveProjectLaunchItem(state);
|
|
19
|
+
const activeToggleState = getActiveProjectLaunchState(state);
|
|
20
|
+
const pluginItems = annotateToggleItems(state, detectedBaseline, 'plugins', state.plugins);
|
|
21
|
+
const skillItems = annotateToggleItems(state, detectedBaseline, 'skills', state.skills);
|
|
22
|
+
const mcpItems = annotateToggleItems(state, detectedBaseline, 'mcps', state.mcps);
|
|
23
|
+
const message = state.toggleMessage ?? sortMessage;
|
|
24
|
+
const columnsProps = {
|
|
25
|
+
presetItems: state.presetItems,
|
|
26
|
+
presetCursor: state.presetCursor,
|
|
27
|
+
focus: state.focus,
|
|
28
|
+
plugins: state.plugins,
|
|
29
|
+
pluginItems,
|
|
30
|
+
pluginCursor: state.pluginCursor,
|
|
31
|
+
skills: state.skills,
|
|
32
|
+
skillItems,
|
|
33
|
+
skillCursor: state.skillCursor,
|
|
34
|
+
mcps: state.mcps,
|
|
35
|
+
mcpItems,
|
|
36
|
+
mcpCursor: state.mcpCursor,
|
|
37
|
+
...(title ? { title } : {}),
|
|
38
|
+
...(help ? { help } : {}),
|
|
39
|
+
...(message ? { toggleMessage: message } : {}),
|
|
40
|
+
};
|
|
41
|
+
const updateFlowState = useCallback((updater) => {
|
|
42
|
+
const nextState = updater(stateRef.current);
|
|
43
|
+
stateRef.current = nextState;
|
|
44
|
+
setState(nextState);
|
|
45
|
+
return nextState;
|
|
46
|
+
}, []);
|
|
47
|
+
const reduceCurrentFlow = useCallback((event) => {
|
|
48
|
+
return updateFlowState(current => reduceProjectLaunchFlow(current, event));
|
|
49
|
+
}, [updateFlowState]);
|
|
50
|
+
const updateSortMessage = useCallback((nextMessage) => {
|
|
51
|
+
sortMessageRef.current = nextMessage;
|
|
52
|
+
setSortMessageState(nextMessage);
|
|
53
|
+
}, []);
|
|
54
|
+
const dispatchBrowserKey = useCallback((input, key) => {
|
|
55
|
+
if (stateRef.current.pendingEnableUnlock)
|
|
56
|
+
return { handled: true };
|
|
57
|
+
if (input !== 't' && sortMessageRef.current)
|
|
58
|
+
updateSortMessage(null);
|
|
59
|
+
if (key.leftArrow || input === 'h') {
|
|
60
|
+
reduceCurrentFlow({ type: 'focus-left' });
|
|
61
|
+
return { handled: true };
|
|
62
|
+
}
|
|
63
|
+
if (key.rightArrow || (moveRightWithL && input === 'l' && !key.ctrl && !key.meta)) {
|
|
64
|
+
reduceCurrentFlow({ type: 'focus-right' });
|
|
65
|
+
return { handled: true };
|
|
66
|
+
}
|
|
67
|
+
if (key.upArrow || input === 'k') {
|
|
68
|
+
reduceCurrentFlow({ type: 'up' });
|
|
69
|
+
return { handled: true };
|
|
70
|
+
}
|
|
71
|
+
if (key.downArrow || input === 'j') {
|
|
72
|
+
reduceCurrentFlow({ type: 'down' });
|
|
73
|
+
return { handled: true };
|
|
74
|
+
}
|
|
75
|
+
if (key.escape) {
|
|
76
|
+
if (shouldBubbleProjectLaunchEscape(stateRef.current))
|
|
77
|
+
return { handled: true, bubbledEscape: true };
|
|
78
|
+
reduceCurrentFlow({ type: 'escape' });
|
|
79
|
+
return { handled: true };
|
|
80
|
+
}
|
|
81
|
+
if (input === 't') {
|
|
82
|
+
const nextState = reduceCurrentFlow({ type: 'toggle-sort-mode' });
|
|
83
|
+
updateSortMessage(formatProjectLaunchSortMode(nextState.sortMode));
|
|
84
|
+
return { handled: true };
|
|
85
|
+
}
|
|
86
|
+
if (input === ' ') {
|
|
87
|
+
const toggledDetected = stateRef.current.focus === 'presets' && getActiveProjectLaunchItem(stateRef.current)?.type === 'detected';
|
|
88
|
+
reduceCurrentFlow({ type: 'toggle-current' });
|
|
89
|
+
return { handled: true, ...(toggledDetected ? { toggledDetected } : {}) };
|
|
90
|
+
}
|
|
91
|
+
return { handled: false };
|
|
92
|
+
}, [moveRightWithL, reduceCurrentFlow, updateSortMessage]);
|
|
93
|
+
const confirmEnableUnlock = useCallback(() => {
|
|
94
|
+
reduceCurrentFlow({ type: 'confirm-enable-unlock' });
|
|
95
|
+
}, [reduceCurrentFlow]);
|
|
96
|
+
const cancelEnableUnlock = useCallback(() => {
|
|
97
|
+
reduceCurrentFlow({ type: 'cancel-enable-unlock' });
|
|
98
|
+
}, [reduceCurrentFlow]);
|
|
99
|
+
const disableRemovalsProps = useCallback(() => {
|
|
100
|
+
const pendingDisableRemovals = getPendingDisableRemovals(stateRef.current);
|
|
101
|
+
return pendingDisableRemovals.length > 0 ? { disableRemovals: pendingDisableRemovals } : {};
|
|
102
|
+
}, []);
|
|
103
|
+
const syncPresetState = useCallback((updater) => {
|
|
104
|
+
updateFlowState(updater);
|
|
105
|
+
}, [updateFlowState]);
|
|
106
|
+
return {
|
|
107
|
+
state,
|
|
108
|
+
activeItem,
|
|
109
|
+
activeToggleState,
|
|
110
|
+
sortMessage,
|
|
111
|
+
columnsProps,
|
|
112
|
+
dispatchBrowserKey,
|
|
113
|
+
confirmEnableUnlock,
|
|
114
|
+
cancelEnableUnlock,
|
|
115
|
+
disableRemovalsProps,
|
|
116
|
+
syncPresetState,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=use-project-launch-browser-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-project-launch-browser-controller.js","sourceRoot":"","sources":["../../src/ink/use-project-launch-browser-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type BasePresetMeta, type PresetIndex, type
|
|
1
|
+
import { type BasePresetMeta, type PresetIndex, type Settings } from '../core/schema.js';
|
|
2
2
|
export declare const CLAUDE_OFFICIAL_PRESET_NAME = "*Claude Official*";
|
|
3
3
|
export type ClaudeOfficialPresetItem = {
|
|
4
4
|
name: string;
|
|
@@ -7,14 +7,14 @@ export type ClaudeOfficialPresetItem = {
|
|
|
7
7
|
temporary: true;
|
|
8
8
|
};
|
|
9
9
|
export declare function createPresetService(globalRoot: string): {
|
|
10
|
-
getPresetPath(
|
|
10
|
+
getPresetPath(nameInput: string): Promise<string>;
|
|
11
11
|
readIndex(): Promise<PresetIndex>;
|
|
12
|
-
listPresets(): Promise<
|
|
13
|
-
readPresetSettings(
|
|
12
|
+
listPresets(): Promise<BasePresetMeta[]>;
|
|
13
|
+
readPresetSettings(nameInput: string): Promise<Settings>;
|
|
14
14
|
createBasePreset(nameInput: string, settingsInput: unknown): Promise<BasePresetMeta>;
|
|
15
15
|
writeBasePreset(nameInput: string, settingsInput: unknown): Promise<BasePresetMeta>;
|
|
16
|
-
writePresetSettingsByName(nameInput: string, settingsInput: unknown): Promise<
|
|
17
|
-
renamePreset(nameInput: string, newNameInput: string): Promise<
|
|
16
|
+
writePresetSettingsByName(nameInput: string, settingsInput: unknown): Promise<BasePresetMeta>;
|
|
17
|
+
renamePreset(nameInput: string, newNameInput: string): Promise<BasePresetMeta>;
|
|
18
18
|
deletePreset(nameInput: string): Promise<void>;
|
|
19
19
|
importExistingSettingsFile(filePath: string, nameInput?: string): Promise<BasePresetMeta>;
|
|
20
20
|
buildClaudeOfficialItem(settingsPath: string): Promise<ClaudeOfficialPresetItem>;
|
|
@@ -1,146 +1,237 @@
|
|
|
1
1
|
import { promises as fs } from 'node:fs';
|
|
2
2
|
import { CliError } from '../core/errors.js';
|
|
3
3
|
import { pathExists, readJsonFile, writeJsonFile } from '../core/json.js';
|
|
4
|
-
import { buildSettingsFileName, derivePresetNameFromSettingsPath, normalizePresetName, resolvePresetIndexKey } from '../core/name.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { buildSettingsFileName, derivePresetNameFromSettingsPath, normalizePresetName, parseSettingsFileName, resolvePresetIndexKey, } from '../core/name.js';
|
|
5
|
+
import { resolvePresetMetadataPath, resolvePresetPath, resolveSettingsDir } from '../core/paths.js';
|
|
6
|
+
import { parseSettings, presetIndexSchema, } from '../core/schema.js';
|
|
7
7
|
export const CLAUDE_OFFICIAL_PRESET_NAME = '*Claude Official*';
|
|
8
|
-
function nowIso() {
|
|
9
|
-
return
|
|
8
|
+
function nowIso(date = new Date()) {
|
|
9
|
+
return date.toISOString();
|
|
10
|
+
}
|
|
11
|
+
function createEmptyMetadataState() {
|
|
12
|
+
return { version: 1, presets: {} };
|
|
13
|
+
}
|
|
14
|
+
function sanitizePresetMeta(meta) {
|
|
15
|
+
return {
|
|
16
|
+
type: 'base',
|
|
17
|
+
name: meta.name,
|
|
18
|
+
fileName: meta.fileName,
|
|
19
|
+
createdAt: meta.createdAt,
|
|
20
|
+
updatedAt: meta.updatedAt,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function buildLookup(presets) {
|
|
24
|
+
const list = [...presets].sort((a, b) => a.name.localeCompare(b.name));
|
|
25
|
+
return {
|
|
26
|
+
list,
|
|
27
|
+
byName: Object.fromEntries(list.map(preset => [preset.name, preset])),
|
|
28
|
+
};
|
|
10
29
|
}
|
|
11
30
|
export function createPresetService(globalRoot) {
|
|
12
|
-
const
|
|
31
|
+
const settingsDir = resolveSettingsDir(globalRoot);
|
|
32
|
+
const metadataPath = resolvePresetMetadataPath(globalRoot);
|
|
33
|
+
async function readStoredMetadata() {
|
|
34
|
+
if (!(await pathExists(metadataPath)))
|
|
35
|
+
return createEmptyMetadataState();
|
|
36
|
+
const raw = await readJsonFile(metadataPath);
|
|
37
|
+
const parsed = presetIndexSchema.safeParse(raw);
|
|
38
|
+
if (!parsed.success)
|
|
39
|
+
return createEmptyMetadataState();
|
|
40
|
+
const version = parsed.data.version;
|
|
41
|
+
const rawPresets = parsed.data.presets;
|
|
42
|
+
const presets = Object.fromEntries(Object.entries(rawPresets).flatMap(([key, value]) => {
|
|
43
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
44
|
+
return [];
|
|
45
|
+
const preset = value;
|
|
46
|
+
if (preset.type !== 'base')
|
|
47
|
+
return [];
|
|
48
|
+
if (typeof preset.name !== 'string' || typeof preset.fileName !== 'string')
|
|
49
|
+
return [];
|
|
50
|
+
if (typeof preset.createdAt !== 'string' || typeof preset.updatedAt !== 'string')
|
|
51
|
+
return [];
|
|
52
|
+
return [[key, sanitizePresetMeta(preset)]];
|
|
53
|
+
}));
|
|
54
|
+
return { version, presets };
|
|
55
|
+
}
|
|
56
|
+
async function writeStoredMetadata(state) {
|
|
57
|
+
await writeJsonFile(metadataPath, {
|
|
58
|
+
version: 1,
|
|
59
|
+
presets: Object.fromEntries(Object.entries(state.presets).map(([key, meta]) => [key, sanitizePresetMeta(meta)])),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async function readPresetLookup() {
|
|
63
|
+
let entries;
|
|
64
|
+
try {
|
|
65
|
+
entries = await fs.readdir(settingsDir, { withFileTypes: true, encoding: 'utf8' });
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error.code === 'ENOENT')
|
|
69
|
+
return buildLookup([]);
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
const stored = await readStoredMetadata();
|
|
73
|
+
const discovered = [];
|
|
74
|
+
let metadataChanged = false;
|
|
75
|
+
const liveNames = new Set();
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
if (!entry.isFile() && !entry.isSymbolicLink())
|
|
78
|
+
continue;
|
|
79
|
+
const parsed = parseSettingsFileName(entry.name);
|
|
80
|
+
if (!parsed)
|
|
81
|
+
continue;
|
|
82
|
+
const filePath = resolvePresetPath(globalRoot, entry.name);
|
|
83
|
+
let stats;
|
|
84
|
+
try {
|
|
85
|
+
stats = await fs.stat(filePath);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error.code === 'ENOENT')
|
|
89
|
+
continue;
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
const existing = stored.presets[parsed.name];
|
|
93
|
+
const updatedAt = nowIso(stats.mtime);
|
|
94
|
+
const meta = sanitizePresetMeta({
|
|
95
|
+
type: 'base',
|
|
96
|
+
name: parsed.name,
|
|
97
|
+
fileName: entry.name,
|
|
98
|
+
createdAt: existing?.fileName === entry.name ? existing.createdAt : updatedAt,
|
|
99
|
+
updatedAt: existing?.fileName === entry.name ? existing.updatedAt : updatedAt,
|
|
100
|
+
});
|
|
101
|
+
if (!existing || existing.fileName !== meta.fileName) {
|
|
102
|
+
stored.presets[meta.name] = meta;
|
|
103
|
+
metadataChanged = true;
|
|
104
|
+
}
|
|
105
|
+
liveNames.add(meta.name);
|
|
106
|
+
discovered.push(stored.presets[meta.name] ?? meta);
|
|
107
|
+
}
|
|
108
|
+
for (const name of Object.keys(stored.presets)) {
|
|
109
|
+
if (liveNames.has(name))
|
|
110
|
+
continue;
|
|
111
|
+
delete stored.presets[name];
|
|
112
|
+
metadataChanged = true;
|
|
113
|
+
}
|
|
114
|
+
if (metadataChanged) {
|
|
115
|
+
await writeStoredMetadata(stored);
|
|
116
|
+
}
|
|
117
|
+
return buildLookup(discovered.map(meta => stored.presets[meta.name] ?? meta));
|
|
118
|
+
}
|
|
13
119
|
async function readIndex() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
120
|
+
const lookup = await readPresetLookup();
|
|
121
|
+
return {
|
|
122
|
+
version: 1,
|
|
123
|
+
presets: lookup.byName,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function getPresetPath(fileName) {
|
|
127
|
+
return resolvePresetPath(globalRoot, fileName);
|
|
128
|
+
}
|
|
129
|
+
async function readPresetMeta(nameInput) {
|
|
130
|
+
const lookup = await readPresetLookup();
|
|
131
|
+
const name = resolvePresetIndexKey(lookup.byName, nameInput);
|
|
132
|
+
return name ? lookup.byName[name] : undefined;
|
|
17
133
|
}
|
|
18
|
-
async function
|
|
19
|
-
await
|
|
134
|
+
async function writeBasePresetMetadata(meta) {
|
|
135
|
+
const state = await readStoredMetadata();
|
|
136
|
+
state.presets[meta.name] = sanitizePresetMeta(meta);
|
|
137
|
+
await writeStoredMetadata(state);
|
|
138
|
+
return state.presets[meta.name];
|
|
20
139
|
}
|
|
21
|
-
function
|
|
22
|
-
|
|
140
|
+
async function deleteBasePresetMetadata(nameInput) {
|
|
141
|
+
const state = await readStoredMetadata();
|
|
142
|
+
const name = resolvePresetIndexKey(state.presets, nameInput);
|
|
143
|
+
if (!name)
|
|
144
|
+
return;
|
|
145
|
+
delete state.presets[name];
|
|
146
|
+
await writeStoredMetadata(state);
|
|
23
147
|
}
|
|
24
|
-
async function
|
|
25
|
-
|
|
26
|
-
const meta = index.presets[name];
|
|
27
|
-
if (!meta)
|
|
28
|
-
throw new CliError(`Preset not found: ${name}`);
|
|
29
|
-
return parseSettings(await readJsonFile(getPresetPath(meta)));
|
|
148
|
+
async function writePresetSettings(fileName, settings) {
|
|
149
|
+
await writeJsonFile(getPresetPath(fileName), parseSettings(settings));
|
|
30
150
|
}
|
|
31
|
-
async function
|
|
32
|
-
|
|
151
|
+
async function updateBasePreset(nameInput, settingsInput, notFoundMessage) {
|
|
152
|
+
const settings = parseSettings(settingsInput);
|
|
153
|
+
const existing = await readPresetMeta(nameInput);
|
|
154
|
+
if (!existing)
|
|
155
|
+
throw new CliError(notFoundMessage(nameInput));
|
|
156
|
+
await writePresetSettings(existing.fileName, settings);
|
|
157
|
+
const updated = sanitizePresetMeta({ ...existing, updatedAt: nowIso() });
|
|
158
|
+
return writeBasePresetMetadata(updated);
|
|
33
159
|
}
|
|
34
160
|
const service = {
|
|
35
|
-
async getPresetPath(
|
|
36
|
-
const
|
|
37
|
-
const meta = index.presets[name];
|
|
161
|
+
async getPresetPath(nameInput) {
|
|
162
|
+
const meta = await readPresetMeta(nameInput);
|
|
38
163
|
if (!meta)
|
|
39
|
-
throw new CliError(`Preset not found: ${
|
|
40
|
-
return getPresetPath(meta);
|
|
164
|
+
throw new CliError(`Preset not found: ${nameInput}`);
|
|
165
|
+
return getPresetPath(meta.fileName);
|
|
41
166
|
},
|
|
42
167
|
async readIndex() {
|
|
43
168
|
return readIndex();
|
|
44
169
|
},
|
|
45
170
|
async listPresets() {
|
|
46
|
-
|
|
47
|
-
return Object.values(index.presets)
|
|
48
|
-
.filter((preset) => preset.type === 'base')
|
|
49
|
-
.sort((a, b) => a.name.localeCompare(b.name));
|
|
171
|
+
return (await readPresetLookup()).list;
|
|
50
172
|
},
|
|
51
|
-
async readPresetSettings(
|
|
52
|
-
|
|
173
|
+
async readPresetSettings(nameInput) {
|
|
174
|
+
const meta = await readPresetMeta(nameInput);
|
|
175
|
+
if (!meta)
|
|
176
|
+
throw new CliError(`Preset not found: ${nameInput}`);
|
|
177
|
+
return parseSettings(await readJsonFile(getPresetPath(meta.fileName)));
|
|
53
178
|
},
|
|
54
179
|
async createBasePreset(nameInput, settingsInput) {
|
|
55
180
|
const settings = parseSettings(settingsInput);
|
|
56
181
|
const name = normalizePresetName(nameInput);
|
|
57
|
-
|
|
58
|
-
if (index.presets[name])
|
|
182
|
+
if (await readPresetMeta(name))
|
|
59
183
|
throw new CliError(`Preset already exists: ${name}`, 1, 'preset_already_exists');
|
|
60
184
|
const timestamp = nowIso();
|
|
61
|
-
const meta = {
|
|
185
|
+
const meta = await writeBasePresetMetadata({
|
|
62
186
|
type: 'base',
|
|
63
187
|
name,
|
|
64
188
|
fileName: buildSettingsFileName(name),
|
|
65
189
|
createdAt: timestamp,
|
|
66
190
|
updatedAt: timestamp,
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
await writePresetSettings(meta, settings);
|
|
70
|
-
await writeIndex(index);
|
|
191
|
+
});
|
|
192
|
+
await writePresetSettings(meta.fileName, settings);
|
|
71
193
|
return meta;
|
|
72
194
|
},
|
|
73
195
|
async writeBasePreset(nameInput, settingsInput) {
|
|
74
|
-
|
|
75
|
-
const index = await readIndex();
|
|
76
|
-
const name = resolvePresetIndexKey(index.presets, nameInput);
|
|
77
|
-
if (!name)
|
|
78
|
-
throw new CliError(`Base preset not found: ${nameInput}`);
|
|
79
|
-
const existing = index.presets[name];
|
|
80
|
-
if (!existing || existing.type !== 'base')
|
|
81
|
-
throw new CliError(`Base preset not found: ${nameInput}`);
|
|
82
|
-
const updated = { ...existing, updatedAt: nowIso() };
|
|
83
|
-
index.presets[name] = updated;
|
|
84
|
-
await writePresetSettings(updated, settings);
|
|
85
|
-
await writeIndex(index);
|
|
86
|
-
return updated;
|
|
196
|
+
return updateBasePreset(nameInput, settingsInput, name => `Base preset not found: ${name}`);
|
|
87
197
|
},
|
|
88
198
|
async writePresetSettingsByName(nameInput, settingsInput) {
|
|
89
|
-
|
|
90
|
-
const index = await readIndex();
|
|
91
|
-
const name = resolvePresetIndexKey(index.presets, nameInput);
|
|
92
|
-
if (!name)
|
|
93
|
-
throw new CliError(`Preset not found: ${nameInput}`);
|
|
94
|
-
const existing = index.presets[name];
|
|
95
|
-
if (!existing)
|
|
96
|
-
throw new CliError(`Preset not found: ${nameInput}`);
|
|
97
|
-
const updated = { ...existing, updatedAt: nowIso() };
|
|
98
|
-
index.presets[name] = updated;
|
|
99
|
-
await writePresetSettings(updated, settings);
|
|
100
|
-
await writeIndex(index);
|
|
101
|
-
return updated;
|
|
199
|
+
return updateBasePreset(nameInput, settingsInput, name => `Preset not found: ${name}`);
|
|
102
200
|
},
|
|
103
201
|
async renamePreset(nameInput, newNameInput) {
|
|
104
202
|
const requestedName = normalizePresetName(newNameInput, { preserveCase: true });
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
if (!name)
|
|
108
|
-
throw new CliError(`Preset not found: ${nameInput}`);
|
|
109
|
-
const meta = index.presets[name];
|
|
110
|
-
if (!meta)
|
|
203
|
+
const existing = await readPresetMeta(nameInput);
|
|
204
|
+
if (!existing)
|
|
111
205
|
throw new CliError(`Preset not found: ${nameInput}`);
|
|
112
|
-
if (
|
|
113
|
-
|
|
114
|
-
const newName = requestedName;
|
|
115
|
-
if (newName === name) {
|
|
116
|
-
return { ...meta, updatedAt: nowIso() };
|
|
206
|
+
if (requestedName === existing.name) {
|
|
207
|
+
return existing;
|
|
117
208
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
209
|
+
const conflicting = await readPresetMeta(requestedName);
|
|
210
|
+
if (conflicting && conflicting.name !== existing.name) {
|
|
211
|
+
throw new CliError(`Preset already exists: ${requestedName}`, 1, 'preset_already_exists');
|
|
212
|
+
}
|
|
213
|
+
const updated = sanitizePresetMeta({
|
|
214
|
+
...existing,
|
|
215
|
+
name: requestedName,
|
|
216
|
+
fileName: buildSettingsFileName(requestedName, { preserveCase: true }),
|
|
217
|
+
updatedAt: nowIso(),
|
|
218
|
+
});
|
|
219
|
+
await fs.rename(getPresetPath(existing.fileName), getPresetPath(updated.fileName));
|
|
220
|
+
await deleteBasePresetMetadata(existing.name);
|
|
221
|
+
return writeBasePresetMetadata(updated);
|
|
126
222
|
},
|
|
127
223
|
async deletePreset(nameInput) {
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
if (!name)
|
|
131
|
-
return;
|
|
132
|
-
const meta = index.presets[name];
|
|
133
|
-
if (!meta)
|
|
224
|
+
const existing = await readPresetMeta(nameInput);
|
|
225
|
+
if (!existing)
|
|
134
226
|
return;
|
|
135
227
|
try {
|
|
136
|
-
await fs.unlink(getPresetPath(
|
|
228
|
+
await fs.unlink(getPresetPath(existing.fileName));
|
|
137
229
|
}
|
|
138
230
|
catch (error) {
|
|
139
231
|
if (error.code !== 'ENOENT')
|
|
140
232
|
throw error;
|
|
141
233
|
}
|
|
142
|
-
|
|
143
|
-
await writeIndex(index);
|
|
234
|
+
await deleteBasePresetMetadata(existing.name);
|
|
144
235
|
},
|
|
145
236
|
async importExistingSettingsFile(filePath, nameInput) {
|
|
146
237
|
const settings = parseSettings(await readJsonFile(filePath));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-service.js","sourceRoot":"","sources":["../../src/services/preset-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"preset-service.js","sourceRoot":"","sources":["../../src/services/preset-service.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "1.1.
|
|
1
|
+
export declare const VERSION = "1.1.4";
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lkangd/cc-settings-preset",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "A switchable, reusable runtime settings preset selector for Claude Code",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"postbuild": "chmod +x dist/cli.js",
|
|
55
55
|
"prepack": "pnpm run build",
|
|
56
56
|
"dev": "tsx src/cli.ts",
|
|
57
|
-
"test": "vitest run",
|
|
57
|
+
"test": "vitest run --reporter=dot --silent=passed-only",
|
|
58
58
|
"check": "pnpm run typecheck && pnpm run build && pnpm run test",
|
|
59
59
|
"test:coverage": "vitest run --coverage"
|
|
60
60
|
},
|