@lkangd/cc-settings-preset 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.
Files changed (124) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +304 -0
  3. package/README.zh-hans.md +304 -0
  4. package/dist/cli.d.ts +19 -0
  5. package/dist/cli.js +547 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/core/args.d.ts +5 -0
  8. package/dist/core/args.js +20 -0
  9. package/dist/core/args.js.map +1 -0
  10. package/dist/core/errors.d.ts +4 -0
  11. package/dist/core/errors.js +9 -0
  12. package/dist/core/errors.js.map +1 -0
  13. package/dist/core/json.d.ts +3 -0
  14. package/dist/core/json.js +46 -0
  15. package/dist/core/json.js.map +1 -0
  16. package/dist/core/name.d.ts +15 -0
  17. package/dist/core/name.js +58 -0
  18. package/dist/core/name.js.map +1 -0
  19. package/dist/core/paths.d.ts +26 -0
  20. package/dist/core/paths.js +79 -0
  21. package/dist/core/paths.js.map +1 -0
  22. package/dist/core/schema.d.ts +137 -0
  23. package/dist/core/schema.js +70 -0
  24. package/dist/core/schema.js.map +1 -0
  25. package/dist/core/spawn.d.ts +1 -0
  26. package/dist/core/spawn.js +32 -0
  27. package/dist/core/spawn.js.map +1 -0
  28. package/dist/core/terminal.d.ts +2 -0
  29. package/dist/core/terminal.js +5 -0
  30. package/dist/core/terminal.js.map +1 -0
  31. package/dist/flows/create-flow.d.ts +14 -0
  32. package/dist/flows/create-flow.js +13 -0
  33. package/dist/flows/create-flow.js.map +1 -0
  34. package/dist/flows/manage-flow.d.ts +9 -0
  35. package/dist/flows/manage-flow.js +8 -0
  36. package/dist/flows/manage-flow.js.map +1 -0
  37. package/dist/flows/project-launch-flow.d.ts +79 -0
  38. package/dist/flows/project-launch-flow.js +217 -0
  39. package/dist/flows/project-launch-flow.js.map +1 -0
  40. package/dist/flows/run-flow.d.ts +52 -0
  41. package/dist/flows/run-flow.js +167 -0
  42. package/dist/flows/run-flow.js.map +1 -0
  43. package/dist/flows/settings-select-flow.d.ts +21 -0
  44. package/dist/flows/settings-select-flow.js +20 -0
  45. package/dist/flows/settings-select-flow.js.map +1 -0
  46. package/dist/ink/components/global-shortcut-handler.d.ts +10 -0
  47. package/dist/ink/components/global-shortcut-handler.js +9 -0
  48. package/dist/ink/components/global-shortcut-handler.js.map +1 -0
  49. package/dist/ink/components/json-tree-view.d.ts +3 -0
  50. package/dist/ink/components/json-tree-view.js +52 -0
  51. package/dist/ink/components/json-tree-view.js.map +1 -0
  52. package/dist/ink/components/resize-context.d.ts +8 -0
  53. package/dist/ink/components/resize-context.js +10 -0
  54. package/dist/ink/components/resize-context.js.map +1 -0
  55. package/dist/ink/components/text-input-editing.d.ts +23 -0
  56. package/dist/ink/components/text-input-editing.js +42 -0
  57. package/dist/ink/components/text-input-editing.js.map +1 -0
  58. package/dist/ink/components/text-input-field.d.ts +15 -0
  59. package/dist/ink/components/text-input-field.js +127 -0
  60. package/dist/ink/components/text-input-field.js.map +1 -0
  61. package/dist/ink/components/text-input.d.ts +10 -0
  62. package/dist/ink/components/text-input.js +22 -0
  63. package/dist/ink/components/text-input.js.map +1 -0
  64. package/dist/ink/components/toggle-column.d.ts +8 -0
  65. package/dist/ink/components/toggle-column.js +30 -0
  66. package/dist/ink/components/toggle-column.js.map +1 -0
  67. package/dist/ink/components/truncate-text.d.ts +3 -0
  68. package/dist/ink/components/truncate-text.js +6 -0
  69. package/dist/ink/components/truncate-text.js.map +1 -0
  70. package/dist/ink/components/two-column-settings-view.d.ts +9 -0
  71. package/dist/ink/components/two-column-settings-view.js +16 -0
  72. package/dist/ink/components/two-column-settings-view.js.map +1 -0
  73. package/dist/ink/components/use-text-input-state.d.ts +45 -0
  74. package/dist/ink/components/use-text-input-state.js +100 -0
  75. package/dist/ink/components/use-text-input-state.js.map +1 -0
  76. package/dist/ink/components/use-text-input.d.ts +8 -0
  77. package/dist/ink/components/use-text-input.js +87 -0
  78. package/dist/ink/components/use-text-input.js.map +1 -0
  79. package/dist/ink/create-app.d.ts +11 -0
  80. package/dist/ink/create-app.js +49 -0
  81. package/dist/ink/create-app.js.map +1 -0
  82. package/dist/ink/manage-app.d.ts +25 -0
  83. package/dist/ink/manage-app.js +92 -0
  84. package/dist/ink/manage-app.js.map +1 -0
  85. package/dist/ink/project-launch-app.d.ts +22 -0
  86. package/dist/ink/project-launch-app.js +144 -0
  87. package/dist/ink/project-launch-app.js.map +1 -0
  88. package/dist/ink/project-manage-app.d.ts +28 -0
  89. package/dist/ink/project-manage-app.js +239 -0
  90. package/dist/ink/project-manage-app.js.map +1 -0
  91. package/dist/ink/settings-select-app.d.ts +9 -0
  92. package/dist/ink/settings-select-app.js +31 -0
  93. package/dist/ink/settings-select-app.js.map +1 -0
  94. package/dist/services/global-last-settings-service.d.ts +4 -0
  95. package/dist/services/global-last-settings-service.js +25 -0
  96. package/dist/services/global-last-settings-service.js.map +1 -0
  97. package/dist/services/launch-preset-service.d.ts +13 -0
  98. package/dist/services/launch-preset-service.js +186 -0
  99. package/dist/services/launch-preset-service.js.map +1 -0
  100. package/dist/services/mcp-service.d.ts +18 -0
  101. package/dist/services/mcp-service.js +106 -0
  102. package/dist/services/mcp-service.js.map +1 -0
  103. package/dist/services/plugin-service.d.ts +16 -0
  104. package/dist/services/plugin-service.js +58 -0
  105. package/dist/services/plugin-service.js.map +1 -0
  106. package/dist/services/preset-service.d.ts +13 -0
  107. package/dist/services/preset-service.js +152 -0
  108. package/dist/services/preset-service.js.map +1 -0
  109. package/dist/services/project-store-service.d.ts +6 -0
  110. package/dist/services/project-store-service.js +16 -0
  111. package/dist/services/project-store-service.js.map +1 -0
  112. package/dist/services/reveal-service.d.ts +2 -0
  113. package/dist/services/reveal-service.js +7 -0
  114. package/dist/services/reveal-service.js.map +1 -0
  115. package/dist/services/settings-finalizer-service.d.ts +2 -0
  116. package/dist/services/settings-finalizer-service.js +21 -0
  117. package/dist/services/settings-finalizer-service.js.map +1 -0
  118. package/dist/services/settings-source-service.d.ts +11 -0
  119. package/dist/services/settings-source-service.js +26 -0
  120. package/dist/services/settings-source-service.js.map +1 -0
  121. package/dist/services/skill-service.d.ts +24 -0
  122. package/dist/services/skill-service.js +193 -0
  123. package/dist/services/skill-service.js.map +1 -0
  124. package/package.json +67 -0
@@ -0,0 +1,46 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { basename, dirname, join } from 'node:path';
3
+ import { CliError } from './errors.js';
4
+ export async function pathExists(filePath) {
5
+ try {
6
+ await fs.access(filePath);
7
+ return true;
8
+ }
9
+ catch (error) {
10
+ if (error.code === 'ENOENT')
11
+ return false;
12
+ throw error;
13
+ }
14
+ }
15
+ async function ensureParentDir(filePath) {
16
+ await fs.mkdir(dirname(filePath), { recursive: true });
17
+ }
18
+ export async function readJsonFile(filePath) {
19
+ let content;
20
+ try {
21
+ content = await fs.readFile(filePath, 'utf8');
22
+ }
23
+ catch (error) {
24
+ if (error.code === 'ENOENT') {
25
+ throw new CliError(`File not found: ${filePath}`);
26
+ }
27
+ throw error;
28
+ }
29
+ try {
30
+ return JSON.parse(content);
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : String(error);
34
+ throw new CliError(`Invalid JSON in ${filePath}: ${message}`);
35
+ }
36
+ }
37
+ async function atomicWriteFile(filePath, content) {
38
+ await ensureParentDir(filePath);
39
+ const tempFilePath = join(dirname(filePath), `.${basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
40
+ await fs.writeFile(tempFilePath, content, 'utf8');
41
+ await fs.rename(tempFilePath, filePath);
42
+ }
43
+ export async function writeJsonFile(filePath, value) {
44
+ await atomicWriteFile(filePath, `${JSON.stringify(value, null, 2)}\n`);
45
+ }
46
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/core/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QACpE,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,OAAe,CAAA;IACnB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,QAAQ,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAA;QACnD,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,MAAM,IAAI,QAAQ,CAAC,mBAAmB,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,OAAe;IAC9D,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACvG,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACjD,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAc;IAClE,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;AACxE,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare function derivePresetNameFromSettingsPath(filePath: string): string;
2
+ type NormalizePresetNameOptions = {
3
+ fallbackDate?: Date;
4
+ preserveCase?: boolean;
5
+ };
6
+ export declare function normalizePresetName(input: string, options?: NormalizePresetNameOptions): string;
7
+ export declare function resolvePresetIndexKey(presets: Record<string, unknown>, nameInput: string): string | undefined;
8
+ export declare function buildSettingsFileName(name: string, options?: Pick<NormalizePresetNameOptions, 'preserveCase'>): string;
9
+ export declare function buildDerivedFileName(parentName: string, derivedName: string): string;
10
+ export declare function buildLaunchPresetFileName(name: string, options?: Pick<NormalizePresetNameOptions, 'preserveCase'>): string;
11
+ export declare function buildTempSettingsFileName(date?: Date): string;
12
+ export declare function parseSettingsFileName(fileName: string): {
13
+ name: string;
14
+ } | undefined;
15
+ export {};
@@ -0,0 +1,58 @@
1
+ import { basename } from 'node:path';
2
+ function formatTimestampForName(date = new Date()) {
3
+ const pad = (value) => String(value).padStart(2, '0');
4
+ const day = [date.getFullYear(), pad(date.getMonth() + 1), pad(date.getDate())].join('-');
5
+ const time = [pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds())].join('-');
6
+ return `${day}-${time}`;
7
+ }
8
+ export function derivePresetNameFromSettingsPath(filePath) {
9
+ const fileName = basename(filePath);
10
+ const fromSettingsSuffix = fileName.replace(/-?settings\.json$/, '');
11
+ if (fromSettingsSuffix && fromSettingsSuffix !== fileName)
12
+ return fromSettingsSuffix;
13
+ if (fileName.endsWith('.json'))
14
+ return fileName.slice(0, -'.json'.length);
15
+ return fileName;
16
+ }
17
+ export function normalizePresetName(input, options = {}) {
18
+ const { fallbackDate = new Date(), preserveCase = false } = options;
19
+ let normalized = input.trim();
20
+ if (!preserveCase) {
21
+ normalized = normalized.toLowerCase();
22
+ }
23
+ const invalidChars = preserveCase ? /[^a-zA-Z0-9.]+/g : /[^a-z0-9.]+/g;
24
+ normalized = normalized
25
+ .replace(invalidChars, '-')
26
+ .replace(/^-+|-+$/g, '')
27
+ .replace(/-{2,}/g, '-');
28
+ return normalized || formatTimestampForName(fallbackDate);
29
+ }
30
+ export function resolvePresetIndexKey(presets, nameInput) {
31
+ const lowercaseKey = normalizePresetName(nameInput);
32
+ if (presets[lowercaseKey])
33
+ return lowercaseKey;
34
+ const preserveCaseKey = normalizePresetName(nameInput, { preserveCase: true });
35
+ if (presets[preserveCaseKey])
36
+ return preserveCaseKey;
37
+ const target = preserveCaseKey.toLowerCase();
38
+ return Object.keys(presets).find(key => key.toLowerCase() === target);
39
+ }
40
+ export function buildSettingsFileName(name, options) {
41
+ return `${normalizePresetName(name, options)}-settings.json`;
42
+ }
43
+ export function buildDerivedFileName(parentName, derivedName) {
44
+ return `${normalizePresetName(parentName)}-${normalizePresetName(derivedName)}-settings.json`;
45
+ }
46
+ export function buildLaunchPresetFileName(name, options) {
47
+ return `${normalizePresetName(name, options)}-launch.json`;
48
+ }
49
+ export function buildTempSettingsFileName(date = new Date()) {
50
+ return `${formatTimestampForName(date)}-settings.json`;
51
+ }
52
+ export function parseSettingsFileName(fileName) {
53
+ if (!fileName.endsWith('-settings.json'))
54
+ return undefined;
55
+ const name = fileName.slice(0, -'-settings.json'.length);
56
+ return name ? { name } : undefined;
57
+ }
58
+ //# sourceMappingURL=name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name.js","sourceRoot":"","sources":["../../src/core/name.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export type PathContext = {
2
+ homeDir: string;
3
+ cwd: string;
4
+ };
5
+ export declare function normalizeInputPath(input: string): string;
6
+ export declare function createPathContext(input?: Partial<PathContext>): PathContext;
7
+ export declare function resolveGlobalRoot(homeDir?: string): string;
8
+ export declare function resolveIndexPath(globalRoot: string): string;
9
+ export declare function resolvePresetPath(globalRoot: string, fileName: string): string;
10
+ export declare function resolveUserClaudeSettingsPath(homeDir: string): string;
11
+ export declare function resolveProjectClaudeSettingsPath(cwd: string): string;
12
+ export declare function resolveProjectClaudeLocalSettingsPath(cwd: string): string;
13
+ export declare function resolveUserSkillsDir(homeDir: string): string;
14
+ export declare function resolveProjectSkillsDir(projectDir: string): string;
15
+ export declare function resolveProjectCommandsDir(projectDir: string): string;
16
+ export declare function resolveClaudePluginCacheDir(homeDir: string): string;
17
+ export declare function resolveProjectCcspRoot(cwd: string): string;
18
+ export declare function resolveProjectLaunchPresetDir(projectRoot: string): string;
19
+ export declare function resolveProjectLaunchPresetIndexPath(projectRoot: string): string;
20
+ export declare function resolveProjectLaunchPresetPath(projectRoot: string, fileName: string): string;
21
+ export declare function resolveProjectLastUsedPath(projectRoot: string): string;
22
+ export declare function resolveProjectTempSettingsDir(projectRoot: string): string;
23
+ export declare function resolveProjectTempSettingsPath(projectRoot: string, fileName: string): string;
24
+ export declare function resolveProjectMcpPath(projectRoot: string): string;
25
+ export declare function resolveUserClaudeJsonPath(homeDir: string): string;
26
+ export declare function resolveGlobalLastSettingsPath(globalRoot: string): string;
@@ -0,0 +1,79 @@
1
+ import { join } from 'node:path';
2
+ export function normalizeInputPath(input) {
3
+ let value = input.trim();
4
+ if ((value.startsWith("'") && value.endsWith("'")) ||
5
+ (value.startsWith('"') && value.endsWith('"'))) {
6
+ value = value.slice(1, -1).trim();
7
+ }
8
+ return value;
9
+ }
10
+ export function createPathContext(input) {
11
+ return {
12
+ homeDir: input?.homeDir ?? process.env.HOME ?? process.cwd(),
13
+ cwd: input?.cwd ?? process.cwd(),
14
+ };
15
+ }
16
+ export function resolveGlobalRoot(homeDir = process.env.HOME ?? process.cwd()) {
17
+ return join(homeDir, '.ccsp');
18
+ }
19
+ function resolveSettingsDir(globalRoot) {
20
+ return join(globalRoot, 'settings');
21
+ }
22
+ export function resolveIndexPath(globalRoot) {
23
+ return join(globalRoot, 'index.json');
24
+ }
25
+ export function resolvePresetPath(globalRoot, fileName) {
26
+ return join(resolveSettingsDir(globalRoot), fileName);
27
+ }
28
+ export function resolveUserClaudeSettingsPath(homeDir) {
29
+ return join(homeDir, '.claude', 'settings.json');
30
+ }
31
+ export function resolveProjectClaudeSettingsPath(cwd) {
32
+ return join(cwd, '.claude', 'settings.json');
33
+ }
34
+ export function resolveProjectClaudeLocalSettingsPath(cwd) {
35
+ return join(cwd, '.claude', 'settings.local.json');
36
+ }
37
+ export function resolveUserSkillsDir(homeDir) {
38
+ return join(homeDir, '.claude', 'skills');
39
+ }
40
+ export function resolveProjectSkillsDir(projectDir) {
41
+ return join(projectDir, '.claude', 'skills');
42
+ }
43
+ export function resolveProjectCommandsDir(projectDir) {
44
+ return join(projectDir, '.claude', 'commands');
45
+ }
46
+ export function resolveClaudePluginCacheDir(homeDir) {
47
+ return join(homeDir, '.claude', 'plugins', 'cache');
48
+ }
49
+ export function resolveProjectCcspRoot(cwd) {
50
+ return join(cwd, '.claude', '.ccsp');
51
+ }
52
+ export function resolveProjectLaunchPresetDir(projectRoot) {
53
+ return join(resolveProjectCcspRoot(projectRoot), 'launch-presets');
54
+ }
55
+ export function resolveProjectLaunchPresetIndexPath(projectRoot) {
56
+ return join(resolveProjectLaunchPresetDir(projectRoot), 'index.json');
57
+ }
58
+ export function resolveProjectLaunchPresetPath(projectRoot, fileName) {
59
+ return join(resolveProjectLaunchPresetDir(projectRoot), fileName);
60
+ }
61
+ export function resolveProjectLastUsedPath(projectRoot) {
62
+ return join(resolveProjectCcspRoot(projectRoot), 'last-used.json');
63
+ }
64
+ export function resolveProjectTempSettingsDir(projectRoot) {
65
+ return join(resolveProjectCcspRoot(projectRoot), 'tmp');
66
+ }
67
+ export function resolveProjectTempSettingsPath(projectRoot, fileName) {
68
+ return join(resolveProjectTempSettingsDir(projectRoot), fileName);
69
+ }
70
+ export function resolveProjectMcpPath(projectRoot) {
71
+ return join(projectRoot, '.mcp.json');
72
+ }
73
+ export function resolveUserClaudeJsonPath(homeDir) {
74
+ return join(homeDir, '.claude.json');
75
+ }
76
+ export function resolveGlobalLastSettingsPath(globalRoot) {
77
+ return join(globalRoot, '.ccsp', 'last-settings.json');
78
+ }
79
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ import { z } from 'zod';
2
+ declare const skillOverrideValueSchema: z.ZodEnum<{
3
+ on: "on";
4
+ "name-only": "name-only";
5
+ "user-invocable-only": "user-invocable-only";
6
+ off: "off";
7
+ }>;
8
+ declare const mcpPolicyEntrySchema: z.ZodUnion<readonly [z.ZodObject<{
9
+ serverName: z.ZodString;
10
+ }, z.core.$strict>, z.ZodObject<{
11
+ serverCommand: z.ZodArray<z.ZodString>;
12
+ }, z.core.$strict>, z.ZodObject<{
13
+ serverUrl: z.ZodString;
14
+ }, z.core.$strict>]>;
15
+ export declare const settingsSchema: z.ZodObject<{
16
+ enabledPlugins: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
17
+ skillOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
18
+ on: "on";
19
+ "name-only": "name-only";
20
+ "user-invocable-only": "user-invocable-only";
21
+ off: "off";
22
+ }>>>;
23
+ deniedMcpServers: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
24
+ serverName: z.ZodString;
25
+ }, z.core.$strict>, z.ZodObject<{
26
+ serverCommand: z.ZodArray<z.ZodString>;
27
+ }, z.core.$strict>, z.ZodObject<{
28
+ serverUrl: z.ZodString;
29
+ }, z.core.$strict>]>>>;
30
+ }, z.core.$loose>;
31
+ declare const launchPresetSettingsSchema: z.ZodObject<{
32
+ enabledPlugins: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
33
+ skillOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
34
+ on: "on";
35
+ "name-only": "name-only";
36
+ "user-invocable-only": "user-invocable-only";
37
+ off: "off";
38
+ }>>>;
39
+ deniedMcpServers: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
40
+ serverName: z.ZodString;
41
+ }, z.core.$strict>, z.ZodObject<{
42
+ serverCommand: z.ZodArray<z.ZodString>;
43
+ }, z.core.$strict>, z.ZodObject<{
44
+ serverUrl: z.ZodString;
45
+ }, z.core.$strict>]>>>;
46
+ }, z.core.$strip>;
47
+ declare const basePresetMetaSchema: z.ZodObject<{
48
+ type: z.ZodLiteral<"base">;
49
+ name: z.ZodString;
50
+ fileName: z.ZodString;
51
+ createdAt: z.ZodString;
52
+ updatedAt: z.ZodString;
53
+ }, z.core.$strip>;
54
+ declare const derivedPresetMetaSchema: z.ZodObject<{
55
+ type: z.ZodLiteral<"derived">;
56
+ name: z.ZodString;
57
+ parentName: z.ZodString;
58
+ fileName: z.ZodString;
59
+ createdAt: z.ZodString;
60
+ updatedAt: z.ZodString;
61
+ }, z.core.$strip>;
62
+ declare const launchPresetMetaSchema: z.ZodObject<{
63
+ name: z.ZodString;
64
+ fileName: z.ZodString;
65
+ createdAt: z.ZodString;
66
+ updatedAt: z.ZodString;
67
+ }, z.core.$strip>;
68
+ declare const lastUsedBasePresetSchema: z.ZodObject<{
69
+ presetName: z.ZodString;
70
+ updatedAt: z.ZodString;
71
+ }, z.core.$strip>;
72
+ declare const presetMetaSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
73
+ type: z.ZodLiteral<"base">;
74
+ name: z.ZodString;
75
+ fileName: z.ZodString;
76
+ createdAt: z.ZodString;
77
+ updatedAt: z.ZodString;
78
+ }, z.core.$strip>, z.ZodObject<{
79
+ type: z.ZodLiteral<"derived">;
80
+ name: z.ZodString;
81
+ parentName: z.ZodString;
82
+ fileName: z.ZodString;
83
+ createdAt: z.ZodString;
84
+ updatedAt: z.ZodString;
85
+ }, z.core.$strip>], "type">;
86
+ export declare const indexSchema: z.ZodObject<{
87
+ version: z.ZodLiteral<1>;
88
+ presets: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
89
+ type: z.ZodLiteral<"base">;
90
+ name: z.ZodString;
91
+ fileName: z.ZodString;
92
+ createdAt: z.ZodString;
93
+ updatedAt: z.ZodString;
94
+ }, z.core.$strip>, z.ZodObject<{
95
+ type: z.ZodLiteral<"derived">;
96
+ name: z.ZodString;
97
+ parentName: z.ZodString;
98
+ fileName: z.ZodString;
99
+ createdAt: z.ZodString;
100
+ updatedAt: z.ZodString;
101
+ }, z.core.$strip>], "type">>;
102
+ }, z.core.$strip>;
103
+ export declare const launchPresetIndexSchema: z.ZodObject<{
104
+ version: z.ZodLiteral<1>;
105
+ presets: z.ZodRecord<z.ZodString, z.ZodObject<{
106
+ name: z.ZodString;
107
+ fileName: z.ZodString;
108
+ createdAt: z.ZodString;
109
+ updatedAt: z.ZodString;
110
+ }, z.core.$strip>>;
111
+ }, z.core.$strip>;
112
+ export declare const lastUsedLaunchPresetSchema: z.ZodObject<{
113
+ presetName: z.ZodString;
114
+ updatedAt: z.ZodString;
115
+ }, z.core.$strip>;
116
+ export declare const lastSettingsSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
117
+ presetName: z.ZodString;
118
+ updatedAt: z.ZodString;
119
+ }, z.core.$strip>>;
120
+ export type McpPolicyEntry = z.infer<typeof mcpPolicyEntrySchema>;
121
+ export type Settings = z.infer<typeof settingsSchema>;
122
+ export type LaunchPresetSettings = z.infer<typeof launchPresetSettingsSchema>;
123
+ export type SkillOverrideValue = z.infer<typeof skillOverrideValueSchema>;
124
+ export type PresetMeta = z.infer<typeof presetMetaSchema>;
125
+ export type BasePresetMeta = z.infer<typeof basePresetMetaSchema>;
126
+ export type DerivedPresetMeta = z.infer<typeof derivedPresetMetaSchema>;
127
+ export type PresetIndex = z.infer<typeof indexSchema>;
128
+ export type LaunchPresetMeta = z.infer<typeof launchPresetMetaSchema>;
129
+ export type LaunchPresetIndex = z.infer<typeof launchPresetIndexSchema>;
130
+ export type LastUsedLaunchPreset = z.infer<typeof lastUsedLaunchPresetSchema>;
131
+ export type LastUsedBasePreset = z.infer<typeof lastUsedBasePresetSchema>;
132
+ export type LastSettings = z.infer<typeof lastSettingsSchema>;
133
+ export declare function parseSettings(value: unknown): Settings;
134
+ export declare function parseLaunchPresetSettings(value: unknown): LaunchPresetSettings;
135
+ export declare function createEmptyIndex(): PresetIndex;
136
+ export declare function createEmptyLaunchPresetIndex(): LaunchPresetIndex;
137
+ export {};
@@ -0,0 +1,70 @@
1
+ import { z } from 'zod';
2
+ const skillOverrideValueSchema = z.enum(['on', 'name-only', 'user-invocable-only', 'off']);
3
+ const mcpPolicyEntrySchema = z.union([
4
+ z.object({ serverName: z.string().min(1) }).strict(),
5
+ z.object({ serverCommand: z.array(z.string()).min(1) }).strict(),
6
+ z.object({ serverUrl: z.string().min(1) }).strict(),
7
+ ]);
8
+ export const settingsSchema = z.looseObject({
9
+ enabledPlugins: z.record(z.string(), z.boolean()).optional(),
10
+ skillOverrides: z.record(z.string(), skillOverrideValueSchema).optional(),
11
+ deniedMcpServers: z.array(mcpPolicyEntrySchema).optional(),
12
+ });
13
+ const launchPresetSettingsSchema = z.object({
14
+ enabledPlugins: z.record(z.string(), z.boolean()).optional(),
15
+ skillOverrides: z.record(z.string(), skillOverrideValueSchema).optional(),
16
+ deniedMcpServers: z.array(mcpPolicyEntrySchema).optional(),
17
+ });
18
+ const timestampSchema = z.string().refine(value => !Number.isNaN(Date.parse(value)), 'Expected ISO timestamp');
19
+ const basePresetMetaSchema = z.object({
20
+ type: z.literal('base'),
21
+ name: z.string().min(1),
22
+ fileName: z.string().min(1),
23
+ createdAt: timestampSchema,
24
+ updatedAt: timestampSchema,
25
+ });
26
+ const derivedPresetMetaSchema = z.object({
27
+ type: z.literal('derived'),
28
+ name: z.string().min(1),
29
+ parentName: z.string().min(1),
30
+ fileName: z.string().min(1),
31
+ createdAt: timestampSchema,
32
+ updatedAt: timestampSchema,
33
+ });
34
+ const launchPresetMetaSchema = z.object({
35
+ name: z.string().min(1),
36
+ fileName: z.string().min(1),
37
+ createdAt: timestampSchema,
38
+ updatedAt: timestampSchema,
39
+ });
40
+ const lastUsedBasePresetSchema = z.object({
41
+ presetName: z.string().min(1),
42
+ updatedAt: timestampSchema,
43
+ });
44
+ const presetMetaSchema = z.discriminatedUnion('type', [basePresetMetaSchema, derivedPresetMetaSchema]);
45
+ export const indexSchema = z.object({
46
+ version: z.literal(1),
47
+ presets: z.record(z.string(), presetMetaSchema),
48
+ });
49
+ export const launchPresetIndexSchema = z.object({
50
+ version: z.literal(1),
51
+ presets: z.record(z.string(), launchPresetMetaSchema),
52
+ });
53
+ export const lastUsedLaunchPresetSchema = z.object({
54
+ presetName: z.string().min(1),
55
+ updatedAt: timestampSchema,
56
+ });
57
+ export const lastSettingsSchema = z.record(z.string(), lastUsedBasePresetSchema);
58
+ export function parseSettings(value) {
59
+ return settingsSchema.parse(value);
60
+ }
61
+ export function parseLaunchPresetSettings(value) {
62
+ return launchPresetSettingsSchema.parse(value);
63
+ }
64
+ export function createEmptyIndex() {
65
+ return { version: 1, presets: {} };
66
+ }
67
+ export function createEmptyLaunchPresetIndex() {
68
+ return { version: 1, presets: {} };
69
+ }
70
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function spawnClaude(settingsPath: string, claudeArgs: string[]): Promise<number>;
@@ -0,0 +1,32 @@
1
+ import spawn from 'cross-spawn';
2
+ import { CliError } from './errors.js';
3
+ export async function spawnClaude(settingsPath, claudeArgs) {
4
+ return new Promise((resolve, reject) => {
5
+ const child = spawn('claude', ['--settings', settingsPath, ...claudeArgs], {
6
+ stdio: 'inherit',
7
+ });
8
+ child.once('error', error => {
9
+ if (error.code === 'ENOENT') {
10
+ reject(new CliError('Claude Code executable not found. Install Claude Code or check PATH.'));
11
+ return;
12
+ }
13
+ reject(error);
14
+ });
15
+ child.once('close', (exitCode, signal) => {
16
+ if (signal) {
17
+ reject(new CliError(`Command terminated by signal ${signal}`));
18
+ return;
19
+ }
20
+ if (exitCode === null) {
21
+ reject(new CliError('Command terminated without an exit code'));
22
+ return;
23
+ }
24
+ if (exitCode !== 0) {
25
+ reject(new CliError(`Command exited with code ${exitCode}`, exitCode));
26
+ return;
27
+ }
28
+ resolve(0);
29
+ });
30
+ });
31
+ }
32
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/core/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAA;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,YAAoB,EAAE,UAAoB;IAC1E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,EAAE;YACzE,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;QAEF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YAC1B,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,QAAQ,CAAC,sEAAsE,CAAC,CAAC,CAAA;gBAC5F,OAAM;YACR,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAuB,EAAE,MAA6B,EAAE,EAAE;YAC7E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,QAAQ,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAC9D,OAAM;YACR,CAAC;YAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,QAAQ,CAAC,yCAAyC,CAAC,CAAC,CAAA;gBAC/D,OAAM;YACR,CAAC;YAED,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,QAAQ,CAAC,4BAA4B,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;gBACtE,OAAM;YACR,CAAC;YAED,OAAO,CAAC,CAAC,CAAC,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const CLEAR_TERMINAL_HISTORY = "\u001B[3J\u001B[H\u001B[2J";
2
+ export declare function clearTerminalScreen(stdout?: Pick<NodeJS.WriteStream, 'write'>): void;
@@ -0,0 +1,5 @@
1
+ export const CLEAR_TERMINAL_HISTORY = '\x1b[3J\x1b[H\x1b[2J';
2
+ export function clearTerminalScreen(stdout = process.stdout) {
3
+ stdout.write(CLEAR_TERMINAL_HISTORY);
4
+ }
5
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/core/terminal.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAA;AAE5D,MAAM,UAAU,mBAAmB,CACjC,SAA4C,OAAO,CAAC,MAAM;IAE1D,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type CreateSource = {
2
+ label: string;
3
+ filePath: string;
4
+ };
5
+ export type CreateFlowState = {
6
+ sources: CreateSource[];
7
+ cursor: number;
8
+ mode: 'select-source' | 'manual-path' | 'name';
9
+ selectedPath?: string;
10
+ manualPath: string;
11
+ name: string;
12
+ };
13
+ export declare function createCreateFlowState(sources: CreateSource[]): CreateFlowState;
14
+ export declare function transitionCreateFlowToName(state: CreateFlowState, selectedPath: string): CreateFlowState;
@@ -0,0 +1,13 @@
1
+ import { derivePresetNameFromSettingsPath } from '../core/name.js';
2
+ export function createCreateFlowState(sources) {
3
+ return { sources, cursor: sources.length, mode: 'select-source', manualPath: '', name: '' };
4
+ }
5
+ export function transitionCreateFlowToName(state, selectedPath) {
6
+ return {
7
+ ...state,
8
+ mode: 'name',
9
+ selectedPath,
10
+ name: derivePresetNameFromSettingsPath(selectedPath),
11
+ };
12
+ }
13
+ //# sourceMappingURL=create-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-flow.js","sourceRoot":"","sources":["../../src/flows/create-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AAgBlE,MAAM,UAAU,qBAAqB,CAAC,OAAuB;IAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAsB,EACtB,YAAoB;IAEpB,OAAO;QACL,GAAG,KAAK;QACR,IAAI,EAAE,MAAM;QACZ,YAAY;QACZ,IAAI,EAAE,gCAAgC,CAAC,YAAY,CAAC;KACrD,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type ManageMode = 'browsing' | 'confirm-save' | 'renaming' | 'confirm-delete';
2
+ export type ManageFlowEvent = {
3
+ type: 'rename';
4
+ } | {
5
+ type: 'delete';
6
+ } | {
7
+ type: 'escape';
8
+ };
9
+ export declare function reduceManageMode(mode: ManageMode, event: ManageFlowEvent): ManageMode;
@@ -0,0 +1,8 @@
1
+ export function reduceManageMode(mode, event) {
2
+ if (event.type === 'rename')
3
+ return 'renaming';
4
+ if (event.type === 'delete')
5
+ return 'confirm-delete';
6
+ return 'browsing';
7
+ }
8
+ //# sourceMappingURL=manage-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-flow.js","sourceRoot":"","sources":["../../src/flows/manage-flow.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,KAAsB;IACvE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAA;IAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAA;IACpD,OAAO,UAAU,CAAA;AACnB,CAAC"}