@ebowwa/claude-code-config-mcp 1.0.0 → 1.1.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.
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Settings scope levels in order of precedence (highest to lowest)
3
+ */
4
+ export declare enum SettingsScope {
5
+ MANAGED = "managed",
6
+ CLI = "cli",
7
+ LOCAL = "local",
8
+ PROJECT = "project",
9
+ USER = "user"
10
+ }
11
+ /**
12
+ * Generic settings type (extends Record to allow any valid settings structure)
13
+ */
14
+ export type Settings = Record<string, unknown>;
15
+ /**
16
+ * Scope-specific settings with metadata
17
+ */
18
+ export interface ScopedSettings {
19
+ scope: SettingsScope;
20
+ settings: Settings;
21
+ path?: string;
22
+ exists?: boolean;
23
+ }
24
+ /**
25
+ * All scope settings
26
+ */
27
+ export interface AllScopedSettings {
28
+ managed: ScopedSettings;
29
+ cli: ScopedSettings;
30
+ local: ScopedSettings;
31
+ project: ScopedSettings;
32
+ user: ScopedSettings;
33
+ }
34
+ /**
35
+ * Array merge strategy
36
+ */
37
+ export declare enum ArrayMergeStrategy {
38
+ /** Override lower scope arrays entirely */
39
+ OVERRIDE = "override",
40
+ /** Concatenate arrays (higher scope first) */
41
+ CONCATENATE = "concatenate",
42
+ /** Merge arrays by unique identifier (requires id field) */
43
+ MERGE_BY_ID = "mergeById"
44
+ }
45
+ /**
46
+ * Merge options
47
+ */
48
+ export interface MergeOptions {
49
+ /** Array merge strategy (default: OVERRIDE) */
50
+ arrayStrategy?: ArrayMergeStrategy;
51
+ /** Fields that should use concatenate strategy */
52
+ concatenateFields?: string[];
53
+ /** Fields that should use mergeById strategy */
54
+ mergeByIdFields?: string[];
55
+ /** Deep merge nested objects (default: true) */
56
+ deepMerge?: boolean;
57
+ /** Whether to track which scope each value came from */
58
+ trackSources?: boolean;
59
+ }
60
+ /**
61
+ * Merged settings with source tracking
62
+ */
63
+ export interface MergedSettings extends Settings {
64
+ /** Map of setting paths to their source scope */
65
+ _sources?: Record<string, SettingsScope>;
66
+ }
67
+ /**
68
+ * Get the scope that provides a specific setting key
69
+ */
70
+ export declare function getScopeForKey(key: string, scopedSettings: AllScopedSettings): SettingsScope | null;
71
+ /**
72
+ * Settings merger class
73
+ */
74
+ export declare class SettingsMerger {
75
+ private defaultOptions;
76
+ constructor(defaultOptions?: MergeOptions);
77
+ /**
78
+ * Merge all scope settings according to precedence
79
+ * managed > CLI > local > project > user
80
+ */
81
+ merge(scopedSettings: AllScopedSettings, options?: MergeOptions): MergedSettings;
82
+ /**
83
+ * Get the scope that provides a specific setting key
84
+ */
85
+ getScope(key: string, scopedSettings: AllScopedSettings): SettingsScope | null;
86
+ /**
87
+ * Detect scope for a settings object based on its location
88
+ */
89
+ detectScope(settingsPath: string): SettingsScope | null;
90
+ /**
91
+ * Create scoped settings from raw settings
92
+ */
93
+ createScopedSettings(scope: SettingsScope, settings: Settings, path?: string, exists?: boolean): ScopedSettings;
94
+ /**
95
+ * Create empty scoped settings for all scopes
96
+ */
97
+ createEmptyScopedSettings(): AllScopedSettings;
98
+ /**
99
+ * Validate scoped settings structure
100
+ */
101
+ validateScopedSettings(scopedSettings: AllScopedSettings): boolean;
102
+ }
103
+ /**
104
+ * Default merger instance
105
+ */
106
+ export declare const defaultMerger: SettingsMerger;
107
+ /**
108
+ * Convenience function to merge settings
109
+ */
110
+ export declare function mergeSettings(scopedSettings: AllScopedSettings, options?: MergeOptions): MergedSettings;
111
+ /**
112
+ * Convenience function to get scope for a key
113
+ */
114
+ export declare function getScope(key: string, scopedSettings: AllScopedSettings): SettingsScope | null;
115
+ //# sourceMappingURL=precedence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"precedence.d.ts","sourceRoot":"","sources":["../src/precedence.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,2CAA2C;IAC3C,QAAQ,aAAa;IACrB,8CAA8C;IAC9C,WAAW,gBAAgB;IAC3B,4DAA4D;IAC5D,WAAW,cAAc;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gDAAgD;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAmID;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,iBAAiB,GAChC,aAAa,GAAG,IAAI,CAqBtB;AAwFD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAAe;gBAEzB,cAAc,CAAC,EAAE,YAAY;IASzC;;;OAGG;IACH,KAAK,CAAC,cAAc,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc;IAuChF;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,GAAG,aAAa,GAAG,IAAI;IAI9E;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAqCvD;;OAEG;IACH,oBAAoB,CAClB,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,UAAO,GACZ,cAAc;IASjB;;OAEG;IACH,yBAAyB,IAAI,iBAAiB;IAU9C;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,iBAAiB,GAAG,OAAO;CAqBnE;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,gBAAuB,CAAC;AAElD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE,YAAY,GACrB,cAAc,CAEhB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,iBAAiB,GAChC,aAAa,GAAG,IAAI,CAEtB"}
@@ -0,0 +1,354 @@
1
+ // ============================================================================
2
+ // 5-Level Settings Precedence System
3
+ // ============================================================================
4
+ // Implements the settings precedence hierarchy:
5
+ // managed > CLI > local > project > user
6
+ // ============================================================================
7
+ /**
8
+ * Settings scope levels in order of precedence (highest to lowest)
9
+ */
10
+ export var SettingsScope;
11
+ (function (SettingsScope) {
12
+ SettingsScope["MANAGED"] = "managed";
13
+ SettingsScope["CLI"] = "cli";
14
+ SettingsScope["LOCAL"] = "local";
15
+ SettingsScope["PROJECT"] = "project";
16
+ SettingsScope["USER"] = "user";
17
+ })(SettingsScope || (SettingsScope = {}));
18
+ /**
19
+ * Array merge strategy
20
+ */
21
+ export var ArrayMergeStrategy;
22
+ (function (ArrayMergeStrategy) {
23
+ /** Override lower scope arrays entirely */
24
+ ArrayMergeStrategy["OVERRIDE"] = "override";
25
+ /** Concatenate arrays (higher scope first) */
26
+ ArrayMergeStrategy["CONCATENATE"] = "concatenate";
27
+ /** Merge arrays by unique identifier (requires id field) */
28
+ ArrayMergeStrategy["MERGE_BY_ID"] = "mergeById";
29
+ })(ArrayMergeStrategy || (ArrayMergeStrategy = {}));
30
+ /**
31
+ * Deep merge two objects
32
+ */
33
+ function deepMerge(target, source, options) {
34
+ const result = { ...target };
35
+ for (const key of Object.keys(source)) {
36
+ const sourceValue = source[key];
37
+ const targetValue = result[key];
38
+ if (sourceValue === undefined) {
39
+ continue;
40
+ }
41
+ // Handle null values
42
+ if (sourceValue === null) {
43
+ result[key] = null;
44
+ continue;
45
+ }
46
+ // Handle arrays
47
+ if (Array.isArray(sourceValue)) {
48
+ if (Array.isArray(targetValue)) {
49
+ result[key] = mergeArrays(key, sourceValue, targetValue, options);
50
+ }
51
+ else {
52
+ result[key] = sourceValue;
53
+ }
54
+ continue;
55
+ }
56
+ // Handle nested objects
57
+ if (options.deepMerge !== false &&
58
+ typeof sourceValue === 'object' &&
59
+ sourceValue !== null &&
60
+ !Array.isArray(sourceValue) &&
61
+ targetValue !== null &&
62
+ typeof targetValue === 'object' &&
63
+ !Array.isArray(targetValue)) {
64
+ result[key] = deepMerge(targetValue, sourceValue, options);
65
+ continue;
66
+ }
67
+ // Primitive values - override
68
+ result[key] = sourceValue;
69
+ }
70
+ return result;
71
+ }
72
+ /**
73
+ * Merge arrays based on strategy
74
+ */
75
+ function mergeArrays(key, sourceArray, targetArray, options) {
76
+ // Check for field-specific strategies
77
+ if (options.concatenateFields?.includes(key)) {
78
+ return [...sourceArray, ...targetArray];
79
+ }
80
+ if (options.mergeByIdFields?.includes(key)) {
81
+ return mergeArraysById(sourceArray, targetArray);
82
+ }
83
+ // Use global strategy
84
+ switch (options.arrayStrategy) {
85
+ case ArrayMergeStrategy.CONCATENATE:
86
+ return [...sourceArray, ...targetArray];
87
+ case ArrayMergeStrategy.MERGE_BY_ID:
88
+ return mergeArraysById(sourceArray, targetArray);
89
+ case ArrayMergeStrategy.OVERRIDE:
90
+ default:
91
+ return sourceArray;
92
+ }
93
+ }
94
+ /**
95
+ * Merge arrays by unique ID field
96
+ */
97
+ function mergeArraysById(sourceArray, targetArray) {
98
+ const merged = new Map();
99
+ // Add target items first (lower precedence)
100
+ for (const item of targetArray) {
101
+ if (typeof item === 'object' && item !== null && 'id' in item) {
102
+ merged.set(String(item.id), item);
103
+ }
104
+ }
105
+ // Override/add source items (higher precedence)
106
+ for (const item of sourceArray) {
107
+ if (typeof item === 'object' && item !== null && 'id' in item) {
108
+ merged.set(String(item.id), item);
109
+ }
110
+ }
111
+ // Return merged array + items without IDs (from source first, then target)
112
+ const withIds = Array.from(merged.values());
113
+ const sourceWithoutIds = sourceArray.filter((item) => typeof item !== 'object' || item === null || !('id' in item));
114
+ const targetWithoutIds = targetArray.filter((item) => typeof item !== 'object' || item === null || !('id' in item));
115
+ return [...sourceWithoutIds, ...targetWithoutIds, ...withIds];
116
+ }
117
+ /**
118
+ * Get the scope that provides a specific setting key
119
+ */
120
+ export function getScopeForKey(key, scopedSettings) {
121
+ // Check scopes in precedence order (highest to lowest)
122
+ const scopes = [
123
+ SettingsScope.MANAGED,
124
+ SettingsScope.CLI,
125
+ SettingsScope.LOCAL,
126
+ SettingsScope.PROJECT,
127
+ SettingsScope.USER,
128
+ ];
129
+ // Navigate the key path (e.g., "mcpServers.server1" -> settings.mcpServers.server1)
130
+ for (const scope of scopes) {
131
+ if (scopedSettings[scope].exists && scopedSettings[scope].settings) {
132
+ const value = getNestedValue(scopedSettings[scope].settings, key);
133
+ if (value !== undefined) {
134
+ return scope;
135
+ }
136
+ }
137
+ }
138
+ return null;
139
+ }
140
+ /**
141
+ * Get nested value from object using dot notation
142
+ */
143
+ function getNestedValue(obj, path) {
144
+ const keys = path.split('.');
145
+ let current = obj;
146
+ for (const key of keys) {
147
+ if (current === null || typeof current !== 'object') {
148
+ return undefined;
149
+ }
150
+ current = current[key];
151
+ }
152
+ return current;
153
+ }
154
+ /**
155
+ * Set nested value in object using dot notation
156
+ */
157
+ function setNestedValue(obj, path, value) {
158
+ const keys = path.split('.');
159
+ const lastKey = keys.pop();
160
+ if (!lastKey) {
161
+ return;
162
+ }
163
+ let current = obj;
164
+ for (const key of keys) {
165
+ if (!(key in current) || typeof current[key] !== 'object') {
166
+ current[key] = {};
167
+ }
168
+ current = current[key];
169
+ }
170
+ current[lastKey] = value;
171
+ }
172
+ /**
173
+ * Track source scopes for settings
174
+ */
175
+ function trackSources(settings, scopedSettings, options) {
176
+ const sources = {};
177
+ if (!options.trackSources) {
178
+ return sources;
179
+ }
180
+ // Get all keys from settings (including nested)
181
+ const allKeys = getAllKeys(settings);
182
+ for (const key of allKeys) {
183
+ const scope = getScopeForKey(key, scopedSettings);
184
+ if (scope) {
185
+ sources[key] = scope;
186
+ }
187
+ }
188
+ return sources;
189
+ }
190
+ /**
191
+ * Get all keys from object (including nested keys with dot notation)
192
+ */
193
+ function getAllKeys(obj, prefix = '') {
194
+ const keys = [];
195
+ for (const [key, value] of Object.entries(obj)) {
196
+ const fullKey = prefix ? `${prefix}.${key}` : key;
197
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
198
+ keys.push(...getAllKeys(value, fullKey));
199
+ }
200
+ else {
201
+ keys.push(fullKey);
202
+ }
203
+ }
204
+ return keys;
205
+ }
206
+ /**
207
+ * Settings merger class
208
+ */
209
+ export class SettingsMerger {
210
+ defaultOptions;
211
+ constructor(defaultOptions) {
212
+ this.defaultOptions = {
213
+ arrayStrategy: ArrayMergeStrategy.OVERRIDE,
214
+ deepMerge: true,
215
+ trackSources: false,
216
+ ...defaultOptions,
217
+ };
218
+ }
219
+ /**
220
+ * Merge all scope settings according to precedence
221
+ * managed > CLI > local > project > user
222
+ */
223
+ merge(scopedSettings, options) {
224
+ const opts = { ...this.defaultOptions, ...options };
225
+ // Start with user scope (lowest precedence)
226
+ let result = scopedSettings.user.exists
227
+ ? { ...scopedSettings.user.settings }
228
+ : {};
229
+ // Apply project scope
230
+ if (scopedSettings.project.exists) {
231
+ result = deepMerge(result, scopedSettings.project.settings, opts);
232
+ }
233
+ // Apply local scope
234
+ if (scopedSettings.local.exists) {
235
+ result = deepMerge(result, scopedSettings.local.settings, opts);
236
+ }
237
+ // Apply CLI scope
238
+ if (scopedSettings.cli.exists) {
239
+ result = deepMerge(result, scopedSettings.cli.settings, opts);
240
+ }
241
+ // Apply managed scope (highest precedence)
242
+ if (scopedSettings.managed.exists) {
243
+ result = deepMerge(result, scopedSettings.managed.settings, opts);
244
+ }
245
+ // Track sources if requested
246
+ const sources = trackSources(result, scopedSettings, opts);
247
+ const merged = result;
248
+ if (Object.keys(sources).length > 0) {
249
+ merged._sources = sources;
250
+ }
251
+ return merged;
252
+ }
253
+ /**
254
+ * Get the scope that provides a specific setting key
255
+ */
256
+ getScope(key, scopedSettings) {
257
+ return getScopeForKey(key, scopedSettings);
258
+ }
259
+ /**
260
+ * Detect scope for a settings object based on its location
261
+ */
262
+ detectScope(settingsPath) {
263
+ const path = settingsPath.toLowerCase();
264
+ if (path.includes('/managed/') || path.includes('\\managed\\')) {
265
+ return SettingsScope.MANAGED;
266
+ }
267
+ // Check for local scope before CLI scope (files starting with .local.)
268
+ if (path.includes('.local.claude') || path.includes('.local.')) {
269
+ return SettingsScope.LOCAL;
270
+ }
271
+ // CLI config (claude.json or .claude.json in home directory)
272
+ // Must not be in .config or .claude directories
273
+ if ((path.includes('claude.json') || path.includes('.claude.json')) &&
274
+ !path.includes('/.config/') &&
275
+ !path.includes('\\.config\\') &&
276
+ !path.includes('/.claude/') &&
277
+ !path.includes('\\.claude\\')) {
278
+ return SettingsScope.CLI;
279
+ }
280
+ // Project scope (.claude directory)
281
+ if (path.includes('/.claude/') || path.includes('\\.claude\\')) {
282
+ return SettingsScope.PROJECT;
283
+ }
284
+ // User scope (.config directory)
285
+ if (path.includes('/.config/') ||
286
+ path.includes('\\.config\\') ||
287
+ path.includes('config.json')) {
288
+ return SettingsScope.USER;
289
+ }
290
+ return null;
291
+ }
292
+ /**
293
+ * Create scoped settings from raw settings
294
+ */
295
+ createScopedSettings(scope, settings, path, exists = true) {
296
+ return {
297
+ scope,
298
+ settings: exists ? { ...settings } : {},
299
+ path,
300
+ exists,
301
+ };
302
+ }
303
+ /**
304
+ * Create empty scoped settings for all scopes
305
+ */
306
+ createEmptyScopedSettings() {
307
+ return {
308
+ managed: this.createScopedSettings(SettingsScope.MANAGED, {}, '', false),
309
+ cli: this.createScopedSettings(SettingsScope.CLI, {}, '', false),
310
+ local: this.createScopedSettings(SettingsScope.LOCAL, {}, '', false),
311
+ project: this.createScopedSettings(SettingsScope.PROJECT, {}, '', false),
312
+ user: this.createScopedSettings(SettingsScope.USER, {}, '', false),
313
+ };
314
+ }
315
+ /**
316
+ * Validate scoped settings structure
317
+ */
318
+ validateScopedSettings(scopedSettings) {
319
+ const requiredScopes = [
320
+ 'managed',
321
+ 'cli',
322
+ 'local',
323
+ 'project',
324
+ 'user',
325
+ ];
326
+ for (const scope of requiredScopes) {
327
+ if (!scopedSettings[scope]) {
328
+ return false;
329
+ }
330
+ const scoped = scopedSettings[scope];
331
+ if (!('scope' in scoped) || !('settings' in scoped) || !('exists' in scoped)) {
332
+ return false;
333
+ }
334
+ }
335
+ return true;
336
+ }
337
+ }
338
+ /**
339
+ * Default merger instance
340
+ */
341
+ export const defaultMerger = new SettingsMerger();
342
+ /**
343
+ * Convenience function to merge settings
344
+ */
345
+ export function mergeSettings(scopedSettings, options) {
346
+ return defaultMerger.merge(scopedSettings, options);
347
+ }
348
+ /**
349
+ * Convenience function to get scope for a key
350
+ */
351
+ export function getScope(key, scopedSettings) {
352
+ return defaultMerger.getScope(key, scopedSettings);
353
+ }
354
+ //# sourceMappingURL=precedence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"precedence.js","sourceRoot":"","sources":["../src/precedence.ts"],"names":[],"mappings":"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"}