@easytocloud/claude-personae 0.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.
package/dist/cli.js ADDED
@@ -0,0 +1,1515 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __commonJS = (cb, mod) => function __require() {
10
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+
29
+ // ../core/dist/types.js
30
+ var require_types = __commonJS({
31
+ "../core/dist/types.js"(exports2) {
32
+ "use strict";
33
+ Object.defineProperty(exports2, "__esModule", { value: true });
34
+ }
35
+ });
36
+
37
+ // ../core/dist/models.js
38
+ var require_models = __commonJS({
39
+ "../core/dist/models.js"(exports2) {
40
+ "use strict";
41
+ Object.defineProperty(exports2, "__esModule", { value: true });
42
+ exports2.MANAGED_ENV_KEYS = exports2.AWS_REGIONS = exports2.ANTHROPIC_DEFAULTS = exports2.OPUS_MODELS = exports2.SONNET_MODELS = exports2.HAIKU_MODELS = void 0;
43
+ exports2.getRegionPrefixes = getRegionPrefixes;
44
+ exports2.filterModelsByRegion = filterModelsByRegion;
45
+ exports2.HAIKU_MODELS = [
46
+ { prefix: "us", id: "us.anthropic.claude-haiku-4-5-20251001-v1:0", label: "Claude Haiku 4.5 \u2014 US Cross-Region" },
47
+ { prefix: "eu", id: "eu.anthropic.claude-haiku-4-5-20251001-v1:0", label: "Claude Haiku 4.5 \u2014 EU Cross-Region" },
48
+ { prefix: "ap", id: "ap.anthropic.claude-haiku-4-5-20251001-v1:0", label: "Claude Haiku 4.5 \u2014 AP Cross-Region" },
49
+ { prefix: "", id: "anthropic.claude-3-5-haiku-20241022-v1:0", label: "Claude Haiku 3.5 \u2014 Regional" },
50
+ { prefix: "", id: "anthropic.claude-3-haiku-20240307-v1:0", label: "Claude Haiku 3 \u2014 Regional" }
51
+ ];
52
+ exports2.SONNET_MODELS = [
53
+ { prefix: "global", id: "global.anthropic.claude-sonnet-4-6", label: "Claude Sonnet 4.6 \u2014 Global" },
54
+ { prefix: "us", id: "us.anthropic.claude-sonnet-4-6", label: "Claude Sonnet 4.6 \u2014 US Cross-Region" },
55
+ { prefix: "eu", id: "eu.anthropic.claude-sonnet-4-6", label: "Claude Sonnet 4.6 \u2014 EU Cross-Region" },
56
+ { prefix: "us", id: "us.anthropic.claude-sonnet-4-5-20250929-v1:0", label: "Claude Sonnet 4.5 \u2014 US Cross-Region" },
57
+ { prefix: "eu", id: "eu.anthropic.claude-sonnet-4-5-20250929-v1:0", label: "Claude Sonnet 4.5 \u2014 EU Cross-Region" },
58
+ { prefix: "", id: "anthropic.claude-sonnet-4-20250514-v1:0", label: "Claude Sonnet 4 \u2014 Regional" },
59
+ { prefix: "", id: "anthropic.claude-3-7-sonnet-20250219-v1:0", label: "Claude Sonnet 3.7 \u2014 Regional" }
60
+ ];
61
+ exports2.OPUS_MODELS = [
62
+ { prefix: "us", id: "us.anthropic.claude-opus-4-6-v1", label: "Claude Opus 4.6 \u2014 US Cross-Region" },
63
+ { prefix: "eu", id: "eu.anthropic.claude-opus-4-6-v1", label: "Claude Opus 4.6 \u2014 EU Cross-Region" },
64
+ { prefix: "", id: "anthropic.claude-opus-4-20250514-v1:0", label: "Claude Opus 4 \u2014 Regional" },
65
+ { prefix: "", id: "anthropic.claude-opus-4-5-20251101-v1:0", label: "Claude Opus 4.5 \u2014 Regional" }
66
+ ];
67
+ exports2.ANTHROPIC_DEFAULTS = {
68
+ sonnet: "claude-sonnet-4-6-20250514",
69
+ haiku: "claude-haiku-4-5-20251001",
70
+ opus: "claude-opus-4-6-20250514"
71
+ };
72
+ exports2.AWS_REGIONS = [
73
+ "us-east-1",
74
+ "us-east-2",
75
+ "us-west-1",
76
+ "us-west-2",
77
+ "ca-central-1",
78
+ "eu-west-1",
79
+ "eu-west-2",
80
+ "eu-west-3",
81
+ "eu-central-1",
82
+ "eu-north-1",
83
+ "ap-northeast-1",
84
+ "ap-northeast-2",
85
+ "ap-southeast-1",
86
+ "ap-southeast-2",
87
+ "ap-south-1",
88
+ "sa-east-1"
89
+ ];
90
+ function getRegionPrefixes(region) {
91
+ if (region.startsWith("us-")) {
92
+ return ["us", "global", ""];
93
+ }
94
+ if (region.startsWith("eu-")) {
95
+ return ["eu", "global", ""];
96
+ }
97
+ if (region.startsWith("ap-")) {
98
+ return ["ap", "global", ""];
99
+ }
100
+ return ["global", ""];
101
+ }
102
+ function filterModelsByRegion(models, region) {
103
+ const prefixes = getRegionPrefixes(region);
104
+ return models.filter((m) => prefixes.includes(m.prefix));
105
+ }
106
+ exports2.MANAGED_ENV_KEYS = /* @__PURE__ */ new Set([
107
+ "CLAUDE_CODE_USE_BEDROCK",
108
+ "AWS_PROFILE",
109
+ "AWS_REGION",
110
+ "AWS_CONFIG_FILE",
111
+ "ANTHROPIC_DEFAULT_SONNET_MODEL",
112
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL",
113
+ "ANTHROPIC_DEFAULT_OPUS_MODEL",
114
+ "ANTHROPIC_MODEL",
115
+ // old name — cleared on save
116
+ "ANTHROPIC_SMALL_FAST_MODEL",
117
+ // deprecated — cleared on save
118
+ "ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION",
119
+ // cleared on save
120
+ "DISABLE_PROMPT_CACHING",
121
+ "ANTHROPIC_BASE_URL",
122
+ "ANTHROPIC_API_KEY",
123
+ "ANTHROPIC_AUTH_TOKEN",
124
+ "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC",
125
+ "DISABLE_AUTOUPDATER"
126
+ ]);
127
+ }
128
+ });
129
+
130
+ // ../core/dist/profiles.js
131
+ var require_profiles = __commonJS({
132
+ "../core/dist/profiles.js"(exports2) {
133
+ "use strict";
134
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
135
+ if (k2 === void 0) k2 = k;
136
+ var desc = Object.getOwnPropertyDescriptor(m, k);
137
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
138
+ desc = { enumerable: true, get: function() {
139
+ return m[k];
140
+ } };
141
+ }
142
+ Object.defineProperty(o, k2, desc);
143
+ }) : (function(o, m, k, k2) {
144
+ if (k2 === void 0) k2 = k;
145
+ o[k2] = m[k];
146
+ }));
147
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
148
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
149
+ }) : function(o, v) {
150
+ o["default"] = v;
151
+ });
152
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
153
+ var ownKeys = function(o) {
154
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
155
+ var ar = [];
156
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
157
+ return ar;
158
+ };
159
+ return ownKeys(o);
160
+ };
161
+ return function(mod) {
162
+ if (mod && mod.__esModule) return mod;
163
+ var result = {};
164
+ if (mod != null) {
165
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
166
+ }
167
+ __setModuleDefault(result, mod);
168
+ return result;
169
+ };
170
+ })();
171
+ Object.defineProperty(exports2, "__esModule", { value: true });
172
+ exports2.DEFAULT_PRESET_ID = exports2.DEFAULT_PROVIDER_ID = void 0;
173
+ exports2.getProfileStorePath = getProfileStorePath;
174
+ exports2.generateId = generateId;
175
+ exports2.ensureDefaults = ensureDefaults2;
176
+ exports2.createEmptyStore = createEmptyStore;
177
+ exports2.readProfileStore = readProfileStore2;
178
+ exports2.findPresetByNameOrId = findPresetByNameOrId2;
179
+ exports2.writeProfileStore = writeProfileStore2;
180
+ var fs2 = __importStar(require("fs"));
181
+ var os = __importStar(require("os"));
182
+ var path2 = __importStar(require("path"));
183
+ var crypto = __importStar(require("crypto"));
184
+ var models_1 = require_models();
185
+ exports2.DEFAULT_PROVIDER_ID = "__default_anthropic__";
186
+ exports2.DEFAULT_PRESET_ID = "__default__";
187
+ function getProfileStorePath() {
188
+ return path2.join(os.homedir(), ".claude", "coder-profiles.json");
189
+ }
190
+ function generateId() {
191
+ return crypto.randomUUID();
192
+ }
193
+ function defaultProvider(existing) {
194
+ return {
195
+ id: exports2.DEFAULT_PROVIDER_ID,
196
+ name: "Anthropic",
197
+ type: "anthropic",
198
+ // Preserve user's API key if they've set one
199
+ anthropicApiKey: existing?.anthropicApiKey ?? void 0,
200
+ primaryModel: models_1.ANTHROPIC_DEFAULTS.sonnet,
201
+ smallFastModel: models_1.ANTHROPIC_DEFAULTS.haiku,
202
+ opusModel: models_1.ANTHROPIC_DEFAULTS.opus
203
+ };
204
+ }
205
+ function defaultPreset() {
206
+ return {
207
+ id: exports2.DEFAULT_PRESET_ID,
208
+ name: "Default",
209
+ providerId: exports2.DEFAULT_PROVIDER_ID,
210
+ mcpGroupIds: [],
211
+ directoryGroupIds: []
212
+ };
213
+ }
214
+ function ensureDefaults2(store) {
215
+ const existingProvider = store.providers.find((p) => p.id === exports2.DEFAULT_PROVIDER_ID);
216
+ if (existingProvider) {
217
+ existingProvider.name = "Anthropic";
218
+ existingProvider.type = "anthropic";
219
+ existingProvider.primaryModel = models_1.ANTHROPIC_DEFAULTS.sonnet;
220
+ existingProvider.smallFastModel = models_1.ANTHROPIC_DEFAULTS.haiku;
221
+ existingProvider.opusModel = models_1.ANTHROPIC_DEFAULTS.opus;
222
+ } else {
223
+ store.providers.unshift(defaultProvider());
224
+ }
225
+ const existingPreset = store.presets.find((p) => p.id === exports2.DEFAULT_PRESET_ID);
226
+ if (existingPreset) {
227
+ existingPreset.name = "Default";
228
+ existingPreset.providerId = exports2.DEFAULT_PROVIDER_ID;
229
+ } else {
230
+ store.presets.unshift(defaultPreset());
231
+ }
232
+ return store;
233
+ }
234
+ function createEmptyStore() {
235
+ return ensureDefaults2({
236
+ version: 1,
237
+ providers: [],
238
+ mcpGroups: [],
239
+ directoryGroups: [],
240
+ presets: [],
241
+ globalScope: { mode: "preset", presetId: exports2.DEFAULT_PRESET_ID },
242
+ workspaceScopes: {}
243
+ });
244
+ }
245
+ function readProfileStore2() {
246
+ const filePath = getProfileStorePath();
247
+ if (!fs2.existsSync(filePath)) {
248
+ return createEmptyStore();
249
+ }
250
+ try {
251
+ const raw = fs2.readFileSync(filePath, "utf8");
252
+ const parsed = JSON.parse(raw);
253
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
254
+ const store = parsed;
255
+ const obj = parsed;
256
+ if (obj["projectScopes"] && !store.workspaceScopes) {
257
+ store.workspaceScopes = obj["projectScopes"];
258
+ delete obj["projectScopes"];
259
+ }
260
+ if (!store.workspaceScopes) {
261
+ store.workspaceScopes = {};
262
+ }
263
+ if (store.version === 1) {
264
+ return ensureDefaults2(store);
265
+ }
266
+ }
267
+ return createEmptyStore();
268
+ } catch {
269
+ return createEmptyStore();
270
+ }
271
+ }
272
+ function findPresetByNameOrId2(store, query) {
273
+ return store.presets.find((p) => p.id === query) ?? store.presets.find((p) => p.name.toLowerCase() === query.toLowerCase());
274
+ }
275
+ function writeProfileStore2(store) {
276
+ const filePath = getProfileStorePath();
277
+ const dir = path2.dirname(filePath);
278
+ if (!fs2.existsSync(dir)) {
279
+ fs2.mkdirSync(dir, { recursive: true });
280
+ }
281
+ fs2.writeFileSync(filePath, JSON.stringify(store, null, 2) + "\n", "utf8");
282
+ }
283
+ }
284
+ });
285
+
286
+ // ../core/dist/awsConfig.js
287
+ var require_awsConfig = __commonJS({
288
+ "../core/dist/awsConfig.js"(exports2) {
289
+ "use strict";
290
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
291
+ if (k2 === void 0) k2 = k;
292
+ var desc = Object.getOwnPropertyDescriptor(m, k);
293
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
294
+ desc = { enumerable: true, get: function() {
295
+ return m[k];
296
+ } };
297
+ }
298
+ Object.defineProperty(o, k2, desc);
299
+ }) : (function(o, m, k, k2) {
300
+ if (k2 === void 0) k2 = k;
301
+ o[k2] = m[k];
302
+ }));
303
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
304
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
305
+ }) : function(o, v) {
306
+ o["default"] = v;
307
+ });
308
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
309
+ var ownKeys = function(o) {
310
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
311
+ var ar = [];
312
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
313
+ return ar;
314
+ };
315
+ return ownKeys(o);
316
+ };
317
+ return function(mod) {
318
+ if (mod && mod.__esModule) return mod;
319
+ var result = {};
320
+ if (mod != null) {
321
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
322
+ }
323
+ __setModuleDefault(result, mod);
324
+ return result;
325
+ };
326
+ })();
327
+ Object.defineProperty(exports2, "__esModule", { value: true });
328
+ exports2.getAwsConfigPath = getAwsConfigPath;
329
+ exports2.getAwsConfigInfo = getAwsConfigInfo;
330
+ exports2.readAwsProfilesFrom = readAwsProfilesFrom;
331
+ exports2.readAwsProfiles = readAwsProfiles;
332
+ var fs2 = __importStar(require("fs"));
333
+ var os = __importStar(require("os"));
334
+ var path2 = __importStar(require("path"));
335
+ function getAwsConfigPath() {
336
+ return process.env.AWS_CONFIG_FILE ?? path2.join(os.homedir(), ".aws", "config");
337
+ }
338
+ function getAwsConfigInfo() {
339
+ const rawPath = getAwsConfigPath();
340
+ const defaultPath = path2.join(os.homedir(), ".aws", "config");
341
+ const hasEnvOverride = !!process.env.AWS_CONFIG_FILE;
342
+ let isSymlink = false;
343
+ try {
344
+ isSymlink = fs2.lstatSync(defaultPath).isSymbolicLink();
345
+ } catch {
346
+ }
347
+ if (!hasEnvOverride && !isSymlink) {
348
+ return null;
349
+ }
350
+ let configPath = rawPath;
351
+ try {
352
+ configPath = fs2.realpathSync(rawPath);
353
+ } catch {
354
+ configPath = rawPath;
355
+ }
356
+ const iCloudDotAws = path2.join(os.homedir(), "Library", "Mobile Documents", "com~apple~CloudDocs", "dotFiles", "aws", "dot-aws");
357
+ if (configPath.startsWith(iCloudDotAws + "/") || configPath.startsWith(iCloudDotAws + path2.sep)) {
358
+ configPath = path2.join(os.homedir(), ".aws", configPath.slice(iCloudDotAws.length + 1));
359
+ }
360
+ const awsEnvsBase = path2.join(os.homedir(), ".aws", "aws-envs");
361
+ const awsEnvsPattern = path2.join(awsEnvsBase, path2.sep);
362
+ if (configPath.startsWith(awsEnvsPattern) || configPath.startsWith(awsEnvsBase + "/")) {
363
+ const rel = path2.relative(awsEnvsBase, configPath);
364
+ const parts = rel.split(path2.sep);
365
+ if (parts.length === 2 && parts[1] === "config") {
366
+ const envName = parts[0];
367
+ const envNames = listAwsEnvNames(awsEnvsBase);
368
+ return { configPath, isAwsEnv: true, envName, envNames };
369
+ }
370
+ }
371
+ return { configPath, isAwsEnv: false };
372
+ }
373
+ function listAwsEnvNames(awsEnvsBase) {
374
+ try {
375
+ return fs2.readdirSync(awsEnvsBase, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name).sort();
376
+ } catch {
377
+ return [];
378
+ }
379
+ }
380
+ function readAwsProfilesFrom(configPath) {
381
+ if (!fs2.existsSync(configPath)) {
382
+ return ["default"];
383
+ }
384
+ try {
385
+ const content = fs2.readFileSync(configPath, "utf8");
386
+ const profiles = [];
387
+ for (const line of content.split("\n")) {
388
+ const trimmed = line.trim();
389
+ const match = trimmed.match(/^\[(?:profile\s+)?(.+?)\]$/);
390
+ if (match) {
391
+ const name = match[1].trim();
392
+ if (name && !profiles.includes(name)) {
393
+ profiles.push(name);
394
+ }
395
+ }
396
+ }
397
+ return profiles.length > 0 ? profiles : ["default"];
398
+ } catch {
399
+ return ["default"];
400
+ }
401
+ }
402
+ function readAwsProfiles() {
403
+ return readAwsProfilesFrom(getAwsConfigPath());
404
+ }
405
+ }
406
+ });
407
+
408
+ // ../core/dist/claudeSettings.js
409
+ var require_claudeSettings = __commonJS({
410
+ "../core/dist/claudeSettings.js"(exports2) {
411
+ "use strict";
412
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
413
+ if (k2 === void 0) k2 = k;
414
+ var desc = Object.getOwnPropertyDescriptor(m, k);
415
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
416
+ desc = { enumerable: true, get: function() {
417
+ return m[k];
418
+ } };
419
+ }
420
+ Object.defineProperty(o, k2, desc);
421
+ }) : (function(o, m, k, k2) {
422
+ if (k2 === void 0) k2 = k;
423
+ o[k2] = m[k];
424
+ }));
425
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
426
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
427
+ }) : function(o, v) {
428
+ o["default"] = v;
429
+ });
430
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
431
+ var ownKeys = function(o) {
432
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
433
+ var ar = [];
434
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
435
+ return ar;
436
+ };
437
+ return ownKeys(o);
438
+ };
439
+ return function(mod) {
440
+ if (mod && mod.__esModule) return mod;
441
+ var result = {};
442
+ if (mod != null) {
443
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
444
+ }
445
+ __setModuleDefault(result, mod);
446
+ return result;
447
+ };
448
+ })();
449
+ Object.defineProperty(exports2, "__esModule", { value: true });
450
+ exports2.getClaudeSettingsPath = getClaudeSettingsPath;
451
+ exports2.getProjectSettingsPath = getProjectSettingsPath;
452
+ exports2.readClaudeSettings = readClaudeSettings;
453
+ exports2.writeClaudeSettings = writeClaudeSettings;
454
+ exports2.readProjectSettings = readProjectSettings;
455
+ exports2.writeProjectSettings = writeProjectSettings;
456
+ var fs2 = __importStar(require("fs"));
457
+ var os = __importStar(require("os"));
458
+ var path2 = __importStar(require("path"));
459
+ var SCHEMA_URL = "https://json.schemastore.org/claude-code-settings.json";
460
+ function getClaudeSettingsPath() {
461
+ return path2.join(os.homedir(), ".claude", "settings.json");
462
+ }
463
+ function getProjectSettingsPath(workspaceRoot) {
464
+ return path2.join(workspaceRoot, ".claude", "settings.json");
465
+ }
466
+ function readClaudeSettings() {
467
+ const filePath = getClaudeSettingsPath();
468
+ if (!fs2.existsSync(filePath)) {
469
+ return {};
470
+ }
471
+ try {
472
+ const raw = fs2.readFileSync(filePath, "utf8");
473
+ const parsed = JSON.parse(raw);
474
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
475
+ return parsed;
476
+ }
477
+ return {};
478
+ } catch {
479
+ return {};
480
+ }
481
+ }
482
+ function writeClaudeSettings(settings) {
483
+ const filePath = getClaudeSettingsPath();
484
+ const dir = path2.dirname(filePath);
485
+ if (!fs2.existsSync(dir)) {
486
+ fs2.mkdirSync(dir, { recursive: true });
487
+ }
488
+ const output = { $schema: SCHEMA_URL, ...settings };
489
+ fs2.writeFileSync(filePath, JSON.stringify(output, null, 2) + "\n", "utf8");
490
+ }
491
+ function readProjectSettings(workspaceRoot) {
492
+ const filePath = getProjectSettingsPath(workspaceRoot);
493
+ if (!fs2.existsSync(filePath)) {
494
+ return {};
495
+ }
496
+ try {
497
+ const raw = fs2.readFileSync(filePath, "utf8");
498
+ const parsed = JSON.parse(raw);
499
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
500
+ return parsed;
501
+ }
502
+ return {};
503
+ } catch {
504
+ return {};
505
+ }
506
+ }
507
+ function writeProjectSettings(workspaceRoot, settings) {
508
+ const filePath = getProjectSettingsPath(workspaceRoot);
509
+ const dir = path2.dirname(filePath);
510
+ if (!fs2.existsSync(dir)) {
511
+ fs2.mkdirSync(dir, { recursive: true });
512
+ }
513
+ const output = { $schema: SCHEMA_URL, ...settings };
514
+ fs2.writeFileSync(filePath, JSON.stringify(output, null, 2) + "\n", "utf8");
515
+ }
516
+ }
517
+ });
518
+
519
+ // ../core/dist/claudeJson.js
520
+ var require_claudeJson = __commonJS({
521
+ "../core/dist/claudeJson.js"(exports2) {
522
+ "use strict";
523
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
524
+ if (k2 === void 0) k2 = k;
525
+ var desc = Object.getOwnPropertyDescriptor(m, k);
526
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
527
+ desc = { enumerable: true, get: function() {
528
+ return m[k];
529
+ } };
530
+ }
531
+ Object.defineProperty(o, k2, desc);
532
+ }) : (function(o, m, k, k2) {
533
+ if (k2 === void 0) k2 = k;
534
+ o[k2] = m[k];
535
+ }));
536
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
537
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
538
+ }) : function(o, v) {
539
+ o["default"] = v;
540
+ });
541
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
542
+ var ownKeys = function(o) {
543
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
544
+ var ar = [];
545
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
546
+ return ar;
547
+ };
548
+ return ownKeys(o);
549
+ };
550
+ return function(mod) {
551
+ if (mod && mod.__esModule) return mod;
552
+ var result = {};
553
+ if (mod != null) {
554
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
555
+ }
556
+ __setModuleDefault(result, mod);
557
+ return result;
558
+ };
559
+ })();
560
+ Object.defineProperty(exports2, "__esModule", { value: true });
561
+ exports2.getClaudeJsonPath = getClaudeJsonPath;
562
+ exports2.readClaudeJson = readClaudeJson;
563
+ exports2.readUserMcpServers = readUserMcpServers;
564
+ exports2.ensureOnboardingComplete = ensureOnboardingComplete2;
565
+ exports2.writeUserMcpServers = writeUserMcpServers;
566
+ var fs2 = __importStar(require("fs"));
567
+ var os = __importStar(require("os"));
568
+ var path2 = __importStar(require("path"));
569
+ function getClaudeJsonPath() {
570
+ return path2.join(os.homedir(), ".claude.json");
571
+ }
572
+ function readClaudeJson() {
573
+ const filePath = getClaudeJsonPath();
574
+ if (!fs2.existsSync(filePath)) {
575
+ return {};
576
+ }
577
+ try {
578
+ const raw = fs2.readFileSync(filePath, "utf8");
579
+ const parsed = JSON.parse(raw);
580
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
581
+ return parsed;
582
+ }
583
+ return {};
584
+ } catch {
585
+ return {};
586
+ }
587
+ }
588
+ function readUserMcpServers() {
589
+ return readClaudeJson().mcpServers ?? {};
590
+ }
591
+ function ensureOnboardingComplete2() {
592
+ const filePath = getClaudeJsonPath();
593
+ const existing = readClaudeJson();
594
+ if (existing["hasCompletedOnboarding"]) {
595
+ return;
596
+ }
597
+ const updated = { ...existing, hasCompletedOnboarding: true };
598
+ fs2.writeFileSync(filePath, JSON.stringify(updated, null, 2) + "\n", "utf8");
599
+ }
600
+ function writeUserMcpServers(servers) {
601
+ const filePath = getClaudeJsonPath();
602
+ const existing = readClaudeJson();
603
+ const updated = { ...existing, mcpServers: servers };
604
+ fs2.writeFileSync(filePath, JSON.stringify(updated, null, 2) + "\n", "utf8");
605
+ }
606
+ }
607
+ });
608
+
609
+ // ../core/dist/mcpJson.js
610
+ var require_mcpJson = __commonJS({
611
+ "../core/dist/mcpJson.js"(exports2) {
612
+ "use strict";
613
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
614
+ if (k2 === void 0) k2 = k;
615
+ var desc = Object.getOwnPropertyDescriptor(m, k);
616
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
617
+ desc = { enumerable: true, get: function() {
618
+ return m[k];
619
+ } };
620
+ }
621
+ Object.defineProperty(o, k2, desc);
622
+ }) : (function(o, m, k, k2) {
623
+ if (k2 === void 0) k2 = k;
624
+ o[k2] = m[k];
625
+ }));
626
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
627
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
628
+ }) : function(o, v) {
629
+ o["default"] = v;
630
+ });
631
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
632
+ var ownKeys = function(o) {
633
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
634
+ var ar = [];
635
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
636
+ return ar;
637
+ };
638
+ return ownKeys(o);
639
+ };
640
+ return function(mod) {
641
+ if (mod && mod.__esModule) return mod;
642
+ var result = {};
643
+ if (mod != null) {
644
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
645
+ }
646
+ __setModuleDefault(result, mod);
647
+ return result;
648
+ };
649
+ })();
650
+ Object.defineProperty(exports2, "__esModule", { value: true });
651
+ exports2.getMcpJsonPath = getMcpJsonPath;
652
+ exports2.readProjectMcpServers = readProjectMcpServers;
653
+ exports2.writeProjectMcpServers = writeProjectMcpServers;
654
+ var fs2 = __importStar(require("fs"));
655
+ var path2 = __importStar(require("path"));
656
+ function getMcpJsonPath(workspaceRoot) {
657
+ return path2.join(workspaceRoot, ".mcp.json");
658
+ }
659
+ function readMcpJson(workspaceRoot) {
660
+ const filePath = getMcpJsonPath(workspaceRoot);
661
+ if (!fs2.existsSync(filePath)) {
662
+ return {};
663
+ }
664
+ try {
665
+ const raw = fs2.readFileSync(filePath, "utf8");
666
+ const parsed = JSON.parse(raw);
667
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
668
+ return parsed;
669
+ }
670
+ return {};
671
+ } catch {
672
+ return {};
673
+ }
674
+ }
675
+ function readProjectMcpServers(workspaceRoot) {
676
+ return readMcpJson(workspaceRoot).mcpServers ?? {};
677
+ }
678
+ function writeProjectMcpServers(workspaceRoot, servers) {
679
+ const dir = workspaceRoot;
680
+ if (!fs2.existsSync(dir)) {
681
+ return;
682
+ }
683
+ const filePath = getMcpJsonPath(workspaceRoot);
684
+ const existing = readMcpJson(workspaceRoot);
685
+ const updated = { ...existing, mcpServers: servers };
686
+ fs2.writeFileSync(filePath, JSON.stringify(updated, null, 2) + "\n", "utf8");
687
+ }
688
+ }
689
+ });
690
+
691
+ // ../core/dist/resolver.js
692
+ var require_resolver = __commonJS({
693
+ "../core/dist/resolver.js"(exports2) {
694
+ "use strict";
695
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
696
+ if (k2 === void 0) k2 = k;
697
+ var desc = Object.getOwnPropertyDescriptor(m, k);
698
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
699
+ desc = { enumerable: true, get: function() {
700
+ return m[k];
701
+ } };
702
+ }
703
+ Object.defineProperty(o, k2, desc);
704
+ }) : (function(o, m, k, k2) {
705
+ if (k2 === void 0) k2 = k;
706
+ o[k2] = m[k];
707
+ }));
708
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
709
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
710
+ }) : function(o, v) {
711
+ o["default"] = v;
712
+ });
713
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
714
+ var ownKeys = function(o) {
715
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
716
+ var ar = [];
717
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
718
+ return ar;
719
+ };
720
+ return ownKeys(o);
721
+ };
722
+ return function(mod) {
723
+ if (mod && mod.__esModule) return mod;
724
+ var result = {};
725
+ if (mod != null) {
726
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
727
+ }
728
+ __setModuleDefault(result, mod);
729
+ return result;
730
+ };
731
+ })();
732
+ Object.defineProperty(exports2, "__esModule", { value: true });
733
+ exports2.resolvePreset = resolvePreset;
734
+ exports2.applyGlobalConfig = applyGlobalConfig;
735
+ exports2.cleanProjectConfig = cleanProjectConfig;
736
+ exports2.applyProjectConfig = applyProjectConfig;
737
+ exports2.applyAllScopes = applyAllScopes2;
738
+ var fs2 = __importStar(require("fs"));
739
+ var os = __importStar(require("os"));
740
+ var path2 = __importStar(require("path"));
741
+ var models_1 = require_models();
742
+ var claudeSettings_1 = require_claudeSettings();
743
+ var claudeJson_1 = require_claudeJson();
744
+ var mcpJson_1 = require_mcpJson();
745
+ function resolvePreset(store, presetId) {
746
+ const preset = store.presets.find((p) => p.id === presetId);
747
+ if (!preset) {
748
+ return null;
749
+ }
750
+ const provider = store.providers.find((p) => p.id === preset.providerId);
751
+ const env = {};
752
+ let awsAuthRefresh;
753
+ let apiKeyHelper;
754
+ if (provider) {
755
+ env["CLAUDE_CODE_USE_BEDROCK"] = "0";
756
+ env["ANTHROPIC_BASE_URL"] = "";
757
+ switch (provider.type) {
758
+ case "bedrock": {
759
+ env["CLAUDE_CODE_USE_BEDROCK"] = "1";
760
+ if (provider.awsProfile) {
761
+ env["AWS_PROFILE"] = provider.awsProfile;
762
+ }
763
+ if (provider.awsRegion) {
764
+ if (!models_1.AWS_REGIONS.includes(provider.awsRegion)) {
765
+ throw new Error(`Invalid AWS region "${provider.awsRegion}". Must be one of: ${models_1.AWS_REGIONS.join(", ")}`);
766
+ }
767
+ env["AWS_REGION"] = provider.awsRegion;
768
+ }
769
+ if (provider.awsAuthRefresh) {
770
+ awsAuthRefresh = provider.awsAuthRefresh;
771
+ }
772
+ if (provider.awsEnv) {
773
+ env["AWS_CONFIG_FILE"] = path2.join(os.homedir(), ".aws", "aws-envs", provider.awsEnv, "config");
774
+ }
775
+ break;
776
+ }
777
+ case "anthropic":
778
+ if (provider.anthropicApiKey?.startsWith("op://")) {
779
+ apiKeyHelper = `op read '${provider.anthropicApiKey}'`;
780
+ } else if (provider.anthropicApiKey) {
781
+ env["ANTHROPIC_API_KEY"] = provider.anthropicApiKey;
782
+ }
783
+ break;
784
+ case "proxy": {
785
+ let baseUrl = provider.proxyBaseUrl || "";
786
+ baseUrl = baseUrl.replace(/\/v1\/?$/, "").replace(/\/+$/, "");
787
+ if (/openrouter\.ai/i.test(baseUrl) && !/\/api\b/i.test(baseUrl)) {
788
+ baseUrl = baseUrl + "/api";
789
+ }
790
+ if (baseUrl) {
791
+ env["ANTHROPIC_BASE_URL"] = baseUrl;
792
+ }
793
+ const cred = provider.proxyCredential ?? provider.proxyAuthToken ?? provider.proxyApiKey;
794
+ const mode = provider.proxyAuthMode ?? (provider.proxyAuthToken ? "authtoken" : "apikey");
795
+ if (cred?.startsWith("op://")) {
796
+ apiKeyHelper = `op read '${cred}'`;
797
+ } else if (cred && mode === "authtoken") {
798
+ env["ANTHROPIC_AUTH_TOKEN"] = cred;
799
+ } else if (cred && mode === "apikey") {
800
+ env["ANTHROPIC_API_KEY"] = cred;
801
+ env["ANTHROPIC_AUTH_TOKEN"] = "local";
802
+ } else {
803
+ env["ANTHROPIC_AUTH_TOKEN"] = "local";
804
+ }
805
+ break;
806
+ }
807
+ }
808
+ if (provider.type === "anthropic") {
809
+ env["ANTHROPIC_DEFAULT_SONNET_MODEL"] = "";
810
+ env["ANTHROPIC_DEFAULT_HAIKU_MODEL"] = "";
811
+ env["ANTHROPIC_DEFAULT_OPUS_MODEL"] = "";
812
+ } else {
813
+ env["ANTHROPIC_DEFAULT_SONNET_MODEL"] = provider.primaryModel || "";
814
+ env["ANTHROPIC_DEFAULT_HAIKU_MODEL"] = provider.smallFastModel || "";
815
+ env["ANTHROPIC_DEFAULT_OPUS_MODEL"] = provider.opusModel || "";
816
+ }
817
+ env["DISABLE_PROMPT_CACHING"] = provider.disablePromptCaching ? "1" : "";
818
+ const shouldDisableLoginPrompt = provider.type === "bedrock" || provider.type === "proxy" && provider.disableLoginPrompt !== false;
819
+ env["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC"] = shouldDisableLoginPrompt ? "1" : "";
820
+ env["DISABLE_AUTOUPDATER"] = shouldDisableLoginPrompt ? "1" : "";
821
+ }
822
+ const mcpServers = {};
823
+ for (const groupId of preset.mcpGroupIds) {
824
+ const group = store.mcpGroups.find((g) => g.id === groupId);
825
+ if (group) {
826
+ for (const server of group.servers) {
827
+ const config = { type: server.type };
828
+ if (server.url) {
829
+ config.url = server.url;
830
+ }
831
+ if (server.command) {
832
+ config.command = server.command;
833
+ }
834
+ if (server.args?.length) {
835
+ config.args = server.args;
836
+ }
837
+ if (server.env && Object.keys(server.env).length) {
838
+ config.env = server.env;
839
+ }
840
+ mcpServers[server.name] = config;
841
+ }
842
+ }
843
+ }
844
+ const allowedDirectories = [];
845
+ for (const groupId of preset.directoryGroupIds) {
846
+ const group = store.directoryGroups.find((g) => g.id === groupId);
847
+ if (group) {
848
+ for (const dir of group.directories) {
849
+ if (!allowedDirectories.includes(dir)) {
850
+ allowedDirectories.push(dir);
851
+ }
852
+ }
853
+ }
854
+ }
855
+ return { env, allowedDirectories, awsAuthRefresh, apiKeyHelper, mcpServers };
856
+ }
857
+ function isNoOp(key, value) {
858
+ if (value === "") {
859
+ return true;
860
+ }
861
+ if (key === "CLAUDE_CODE_USE_BEDROCK" && value === "0") {
862
+ return true;
863
+ }
864
+ return false;
865
+ }
866
+ function filterForGlobal(env) {
867
+ return Object.fromEntries(Object.entries(env).filter(([k, v]) => !isNoOp(k, v)));
868
+ }
869
+ function filterForProject(env, globalEnv) {
870
+ return Object.fromEntries(Object.entries(env).filter(([k, v]) => !isNoOp(k, v) || !isNoOp(k, globalEnv[k] ?? "")));
871
+ }
872
+ function preserveUnmanagedEnv(existing) {
873
+ const preserved = {};
874
+ for (const [key, value] of Object.entries(existing)) {
875
+ if (!models_1.MANAGED_ENV_KEYS.has(key)) {
876
+ preserved[key] = value;
877
+ }
878
+ }
879
+ return preserved;
880
+ }
881
+ function applyGlobalConfig(resolved) {
882
+ const settings = (0, claudeSettings_1.readClaudeSettings)();
883
+ const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});
884
+ const newSettings = {
885
+ ...settings,
886
+ env: { ...preservedEnv, ...filterForGlobal(resolved.env) }
887
+ };
888
+ if (resolved.allowedDirectories.length > 0) {
889
+ newSettings.allowedDirectories = resolved.allowedDirectories;
890
+ } else {
891
+ delete newSettings.allowedDirectories;
892
+ }
893
+ if (resolved.awsAuthRefresh) {
894
+ newSettings.awsAuthRefresh = resolved.awsAuthRefresh;
895
+ } else {
896
+ delete newSettings.awsAuthRefresh;
897
+ }
898
+ if (resolved.apiKeyHelper) {
899
+ newSettings.apiKeyHelper = resolved.apiKeyHelper;
900
+ } else {
901
+ delete newSettings.apiKeyHelper;
902
+ }
903
+ if (newSettings.env) {
904
+ delete newSettings.env["ANTHROPIC_MODEL"];
905
+ delete newSettings.env["ANTHROPIC_SMALL_FAST_MODEL"];
906
+ delete newSettings.env["ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION"];
907
+ }
908
+ (0, claudeSettings_1.writeClaudeSettings)(newSettings);
909
+ (0, claudeJson_1.writeUserMcpServers)(resolved.mcpServers);
910
+ }
911
+ function cleanProjectConfig(workspaceRoot) {
912
+ const settings = (0, claudeSettings_1.readProjectSettings)(workspaceRoot);
913
+ if (Object.keys(settings).length === 0) {
914
+ return;
915
+ }
916
+ if (settings.env) {
917
+ for (const key of models_1.MANAGED_ENV_KEYS) {
918
+ delete settings.env[key];
919
+ }
920
+ if (Object.keys(settings.env).length === 0) {
921
+ delete settings.env;
922
+ }
923
+ }
924
+ delete settings.allowedDirectories;
925
+ delete settings.awsAuthRefresh;
926
+ delete settings.apiKeyHelper;
927
+ const remaining = Object.keys(settings).filter((k) => k !== "$schema");
928
+ if (remaining.length > 0) {
929
+ (0, claudeSettings_1.writeProjectSettings)(workspaceRoot, settings);
930
+ } else {
931
+ const filePath = (0, claudeSettings_1.getProjectSettingsPath)(workspaceRoot);
932
+ if (fs2.existsSync(filePath)) {
933
+ fs2.unlinkSync(filePath);
934
+ }
935
+ }
936
+ }
937
+ function applyProjectConfig(resolved, workspaceRoot) {
938
+ const globalEnv = (0, claudeSettings_1.readClaudeSettings)().env ?? {};
939
+ const settings = (0, claudeSettings_1.readProjectSettings)(workspaceRoot);
940
+ const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});
941
+ const newSettings = {
942
+ ...settings,
943
+ env: { ...preservedEnv, ...filterForProject(resolved.env, globalEnv) }
944
+ };
945
+ if (resolved.allowedDirectories.length > 0) {
946
+ newSettings.allowedDirectories = resolved.allowedDirectories;
947
+ } else {
948
+ delete newSettings.allowedDirectories;
949
+ }
950
+ if (resolved.awsAuthRefresh) {
951
+ newSettings.awsAuthRefresh = resolved.awsAuthRefresh;
952
+ } else {
953
+ delete newSettings.awsAuthRefresh;
954
+ }
955
+ if (resolved.apiKeyHelper) {
956
+ newSettings.apiKeyHelper = resolved.apiKeyHelper;
957
+ } else {
958
+ delete newSettings.apiKeyHelper;
959
+ }
960
+ (0, claudeSettings_1.writeProjectSettings)(workspaceRoot, newSettings);
961
+ (0, mcpJson_1.writeProjectMcpServers)(workspaceRoot, resolved.mcpServers);
962
+ ensureVscodeignore(workspaceRoot);
963
+ }
964
+ function applyAllScopes2(store, workspaceRoot) {
965
+ if (store.globalScope.mode === "preset" && store.globalScope.presetId) {
966
+ const resolved = resolvePreset(store, store.globalScope.presetId);
967
+ if (resolved) {
968
+ applyGlobalConfig(resolved);
969
+ }
970
+ }
971
+ if (workspaceRoot) {
972
+ const wsScope = store.workspaceScopes[workspaceRoot];
973
+ if (wsScope) {
974
+ if (wsScope.mode === "preset" && wsScope.presetId) {
975
+ const resolved = resolvePreset(store, wsScope.presetId);
976
+ if (resolved) {
977
+ applyProjectConfig(resolved, workspaceRoot);
978
+ }
979
+ }
980
+ if (wsScope.mode === "inherit") {
981
+ cleanProjectConfig(workspaceRoot);
982
+ }
983
+ }
984
+ }
985
+ }
986
+ var VSCODEIGNORE_ENTRIES = [".mcp.json", ".claude/"];
987
+ function ensureVscodeignore(workspaceRoot) {
988
+ const ignorePath = path2.join(workspaceRoot, ".vscodeignore");
989
+ if (!fs2.existsSync(ignorePath)) {
990
+ return;
991
+ }
992
+ try {
993
+ let content = fs2.readFileSync(ignorePath, "utf8");
994
+ const lines = content.split("\n").map((l) => l.trim());
995
+ const missing = VSCODEIGNORE_ENTRIES.filter((e) => !lines.includes(e));
996
+ if (missing.length === 0) {
997
+ return;
998
+ }
999
+ if (!content.endsWith("\n")) {
1000
+ content += "\n";
1001
+ }
1002
+ content += missing.join("\n") + "\n";
1003
+ fs2.writeFileSync(ignorePath, content, "utf8");
1004
+ } catch {
1005
+ }
1006
+ }
1007
+ }
1008
+ });
1009
+
1010
+ // ../core/dist/transfer.js
1011
+ var require_transfer = __commonJS({
1012
+ "../core/dist/transfer.js"(exports2) {
1013
+ "use strict";
1014
+ Object.defineProperty(exports2, "__esModule", { value: true });
1015
+ exports2.PLACEHOLDER = void 0;
1016
+ exports2.scrubValue = scrubValue;
1017
+ exports2.scrubStore = scrubStore2;
1018
+ exports2.providersNeedingCredentials = providersNeedingCredentials2;
1019
+ exports2.parseIncomingStore = parseIncomingStore2;
1020
+ exports2.mergeIncomingStore = mergeIncomingStore2;
1021
+ var profiles_1 = require_profiles();
1022
+ var CREDENTIAL_PATTERNS = [
1023
+ /sk-ant-[a-zA-Z0-9_-]{20,}/g,
1024
+ /sk-or-[a-zA-Z0-9_-]{20,}/g,
1025
+ /sk-proj-[a-zA-Z0-9_-]{20,}/g,
1026
+ /sk-live-[a-zA-Z0-9_-]{20,}/g,
1027
+ /AKIA[A-Z0-9]{16}/g,
1028
+ /ghp_[a-zA-Z0-9]{36,}/g,
1029
+ /gho_[a-zA-Z0-9]{36,}/g,
1030
+ /github_pat_[a-zA-Z0-9_]{20,}/g,
1031
+ /xoxb-[a-zA-Z0-9-]+/g,
1032
+ /xoxp-[a-zA-Z0-9-]+/g
1033
+ ];
1034
+ exports2.PLACEHOLDER = "<REPLACE_ME>";
1035
+ var SAFE_VALUES = /* @__PURE__ */ new Set([
1036
+ "",
1037
+ "foobar",
1038
+ "placeholder",
1039
+ "dummy",
1040
+ "local",
1041
+ "Optional",
1042
+ "your-key-here",
1043
+ "xxx",
1044
+ void 0
1045
+ ]);
1046
+ function scrubValue(value) {
1047
+ if (!value || SAFE_VALUES.has(value)) {
1048
+ return value;
1049
+ }
1050
+ if (value.startsWith("op://")) {
1051
+ return value;
1052
+ }
1053
+ let scrubbed = value;
1054
+ for (const pattern of CREDENTIAL_PATTERNS) {
1055
+ pattern.lastIndex = 0;
1056
+ scrubbed = scrubbed.replace(pattern, exports2.PLACEHOLDER);
1057
+ }
1058
+ if (scrubbed === value && value.length >= 20 && /^[a-zA-Z0-9_-]+$/.test(value)) {
1059
+ return exports2.PLACEHOLDER;
1060
+ }
1061
+ return scrubbed;
1062
+ }
1063
+ function scrubProvider(provider) {
1064
+ return {
1065
+ ...provider,
1066
+ anthropicApiKey: scrubValue(provider.anthropicApiKey),
1067
+ proxyCredential: scrubValue(provider.proxyCredential),
1068
+ proxyApiKey: scrubValue(provider.proxyApiKey),
1069
+ proxyAuthToken: scrubValue(provider.proxyAuthToken),
1070
+ awsAuthRefresh: provider.awsAuthRefresh
1071
+ // command, not a secret
1072
+ };
1073
+ }
1074
+ function scrubStore2(store) {
1075
+ return {
1076
+ ...store,
1077
+ providers: store.providers.map(scrubProvider)
1078
+ };
1079
+ }
1080
+ function providersNeedingCredentials2(store) {
1081
+ return store.providers.filter((p) => p.anthropicApiKey === exports2.PLACEHOLDER || p.proxyCredential === exports2.PLACEHOLDER || p.proxyApiKey === exports2.PLACEHOLDER || p.proxyAuthToken === exports2.PLACEHOLDER).map((p) => p.name);
1082
+ }
1083
+ function parseIncomingStore2(raw) {
1084
+ const incoming = JSON.parse(raw);
1085
+ if (!incoming.version || !incoming.providers || !incoming.presets) {
1086
+ throw new Error("Not a valid profile store");
1087
+ }
1088
+ return incoming;
1089
+ }
1090
+ function mergeIncomingStore2(base, incoming) {
1091
+ const idMap = /* @__PURE__ */ new Map();
1092
+ for (const provider of incoming.providers) {
1093
+ const newId = (0, profiles_1.generateId)();
1094
+ idMap.set(provider.id, newId);
1095
+ base.providers.push({ ...provider, id: newId });
1096
+ }
1097
+ for (const group of incoming.mcpGroups) {
1098
+ const newId = (0, profiles_1.generateId)();
1099
+ idMap.set(group.id, newId);
1100
+ base.mcpGroups.push({ ...group, id: newId });
1101
+ }
1102
+ for (const group of incoming.directoryGroups) {
1103
+ const newId = (0, profiles_1.generateId)();
1104
+ idMap.set(group.id, newId);
1105
+ base.directoryGroups.push({ ...group, id: newId });
1106
+ }
1107
+ for (const preset of incoming.presets) {
1108
+ const newId = (0, profiles_1.generateId)();
1109
+ base.presets.push({
1110
+ ...preset,
1111
+ id: newId,
1112
+ providerId: idMap.get(preset.providerId) ?? preset.providerId,
1113
+ mcpGroupIds: preset.mcpGroupIds.map((id) => idMap.get(id) ?? id),
1114
+ directoryGroupIds: preset.directoryGroupIds.map((id) => idMap.get(id) ?? id)
1115
+ });
1116
+ }
1117
+ return base;
1118
+ }
1119
+ }
1120
+ });
1121
+
1122
+ // ../core/dist/index.js
1123
+ var require_dist = __commonJS({
1124
+ "../core/dist/index.js"(exports2) {
1125
+ "use strict";
1126
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
1127
+ if (k2 === void 0) k2 = k;
1128
+ var desc = Object.getOwnPropertyDescriptor(m, k);
1129
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
1130
+ desc = { enumerable: true, get: function() {
1131
+ return m[k];
1132
+ } };
1133
+ }
1134
+ Object.defineProperty(o, k2, desc);
1135
+ }) : (function(o, m, k, k2) {
1136
+ if (k2 === void 0) k2 = k;
1137
+ o[k2] = m[k];
1138
+ }));
1139
+ var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
1140
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
1141
+ };
1142
+ Object.defineProperty(exports2, "__esModule", { value: true });
1143
+ __exportStar(require_types(), exports2);
1144
+ __exportStar(require_models(), exports2);
1145
+ __exportStar(require_profiles(), exports2);
1146
+ __exportStar(require_awsConfig(), exports2);
1147
+ __exportStar(require_claudeSettings(), exports2);
1148
+ __exportStar(require_claudeJson(), exports2);
1149
+ __exportStar(require_mcpJson(), exports2);
1150
+ __exportStar(require_resolver(), exports2);
1151
+ __exportStar(require_transfer(), exports2);
1152
+ }
1153
+ });
1154
+
1155
+ // package.json
1156
+ var require_package = __commonJS({
1157
+ "package.json"(exports2, module2) {
1158
+ module2.exports = {
1159
+ name: "@easytocloud/claude-personae",
1160
+ version: "0.1.0",
1161
+ description: "CLI to switch Claude Code provider presets (AWS Bedrock / Anthropic / proxy) \u2014 companion to the Claude Code Personae VS Code extension. Operates on the same ~/.claude profile store.",
1162
+ license: "MIT",
1163
+ repository: {
1164
+ type: "git",
1165
+ url: "https://github.com/easytocloud/bedrock-claude-code",
1166
+ directory: "cli"
1167
+ },
1168
+ homepage: "https://github.com/easytocloud/bedrock-claude-code#readme",
1169
+ bugs: {
1170
+ url: "https://github.com/easytocloud/bedrock-claude-code/issues"
1171
+ },
1172
+ keywords: [
1173
+ "claude",
1174
+ "claude-code",
1175
+ "aws",
1176
+ "bedrock",
1177
+ "anthropic",
1178
+ "cli",
1179
+ "presets",
1180
+ "proxy"
1181
+ ],
1182
+ bin: {
1183
+ "claude-personae": "dist/cli.js",
1184
+ ccp: "dist/cli.js"
1185
+ },
1186
+ files: [
1187
+ "dist",
1188
+ "README.md"
1189
+ ],
1190
+ engines: {
1191
+ node: ">=18"
1192
+ },
1193
+ scripts: {
1194
+ build: "node esbuild.js",
1195
+ watch: "node esbuild.js --watch",
1196
+ prepublishOnly: "node esbuild.js"
1197
+ },
1198
+ devDependencies: {
1199
+ "@easytocloud/claude-personae-core": "*",
1200
+ "@types/node": "^20.0.0",
1201
+ esbuild: "^0.25.0",
1202
+ typescript: "^5.6.0"
1203
+ }
1204
+ };
1205
+ }
1206
+ });
1207
+
1208
+ // src/index.ts
1209
+ var fs = __toESM(require("fs"));
1210
+ var path = __toESM(require("path"));
1211
+ var import_util = require("util");
1212
+ var import_claude_personae_core = __toESM(require_dist());
1213
+ var VERSION = require_package().version;
1214
+ var HELP = `claude-personae (ccp) \u2014 switch Claude Code provider presets from the shell
1215
+
1216
+ Operates on the same profile store as the "Claude Code Personae" VS Code
1217
+ extension (~/.claude/coder-profiles.json). Use the extension to author
1218
+ providers/presets; use this CLI to switch and apply them.
1219
+
1220
+ USAGE
1221
+ ccp <command> [options]
1222
+
1223
+ COMMANDS
1224
+ list [presets|providers|scopes] List configured items (default: all)
1225
+ current Show the active global + workspace preset
1226
+ switch <preset> [scope] Set the active preset and apply it
1227
+ apply Re-apply the stored scopes to disk
1228
+ export Print the store as JSON (credentials scrubbed)
1229
+ import <file|-> Import a store from a file or stdin
1230
+
1231
+ SCOPE (for \`switch\`)
1232
+ --global, -g Set the global preset (default)
1233
+ --workspace, -w Set the preset for a workspace (uses CWD)
1234
+ --path <dir> Workspace directory to target (implies --workspace)
1235
+ --inherit Workspace inherits the global preset (clears overrides)
1236
+ --manual Workspace is managed manually (CLI leaves files alone)
1237
+
1238
+ OPTIONS
1239
+ --json Machine-readable JSON output (list, current)
1240
+ --out, -o <file> Write export to a file instead of stdout
1241
+ --no-scrub Export without scrubbing credentials (dangerous)
1242
+ --mode <merge|replace> Import mode (default: merge)
1243
+ --help, -h Show this help
1244
+ --version, -v Show version
1245
+
1246
+ EXAMPLES
1247
+ ccp list presets
1248
+ ccp switch bedrock-prod # set global preset
1249
+ ccp switch dev --workspace # set preset for the current project
1250
+ ccp switch --workspace --inherit # project inherits global again
1251
+ ccp apply # reprovision config files from the store
1252
+ ccp export -o presets.json
1253
+ cat presets.json | ccp import - --mode replace
1254
+ `;
1255
+ function fail(msg) {
1256
+ process.stderr.write(`error: ${msg}
1257
+ `);
1258
+ process.exit(1);
1259
+ }
1260
+ function providerName(store, providerId) {
1261
+ return store.providers.find((p) => p.id === providerId)?.name ?? "(unknown provider)";
1262
+ }
1263
+ function describeScope(store, scope) {
1264
+ if (!scope) {
1265
+ return "not set";
1266
+ }
1267
+ if (scope.mode === "manual") {
1268
+ return "manual (CLI/GUI leave files alone)";
1269
+ }
1270
+ if (scope.mode === "inherit") {
1271
+ return "inherit from global";
1272
+ }
1273
+ const preset = scope.presetId ? store.presets.find((p) => p.id === scope.presetId) : void 0;
1274
+ return preset ? `${preset.name} \u2192 ${providerName(store, preset.providerId)}` : "(preset missing)";
1275
+ }
1276
+ function resolvePresetArg(store, query) {
1277
+ if (!query) {
1278
+ fail("a preset name or id is required");
1279
+ }
1280
+ const preset = (0, import_claude_personae_core.findPresetByNameOrId)(store, query);
1281
+ if (!preset) {
1282
+ const names = store.presets.map((p) => p.name).join(", ");
1283
+ fail(`no preset matching "${query}". Available: ${names || "(none)"}`);
1284
+ }
1285
+ return preset;
1286
+ }
1287
+ function parse(argv) {
1288
+ return (0, import_util.parseArgs)({
1289
+ args: argv,
1290
+ allowPositionals: true,
1291
+ options: {
1292
+ json: { type: "boolean", default: false },
1293
+ global: { type: "boolean", short: "g", default: false },
1294
+ workspace: { type: "boolean", short: "w", default: false },
1295
+ path: { type: "string" },
1296
+ inherit: { type: "boolean", default: false },
1297
+ manual: { type: "boolean", default: false },
1298
+ mode: { type: "string" },
1299
+ out: { type: "string", short: "o" },
1300
+ "no-scrub": { type: "boolean", default: false },
1301
+ help: { type: "boolean", short: "h", default: false },
1302
+ version: { type: "boolean", short: "v", default: false }
1303
+ }
1304
+ });
1305
+ }
1306
+ function workspaceDir(values) {
1307
+ return values.path ? path.resolve(String(values.path)) : process.cwd();
1308
+ }
1309
+ function cmdList(store, what, values) {
1310
+ const which = what ?? "all";
1311
+ if (values.json) {
1312
+ const out = {};
1313
+ if (which === "all" || which === "presets") {
1314
+ out.presets = store.presets;
1315
+ }
1316
+ if (which === "all" || which === "providers") {
1317
+ out.providers = store.providers.map((p) => ({ id: p.id, name: p.name, type: p.type }));
1318
+ }
1319
+ if (which === "all" || which === "scopes") {
1320
+ out.globalScope = store.globalScope;
1321
+ out.workspaceScopes = store.workspaceScopes;
1322
+ }
1323
+ process.stdout.write(JSON.stringify(out, null, 2) + "\n");
1324
+ return;
1325
+ }
1326
+ if (which === "all" || which === "providers") {
1327
+ process.stdout.write("Providers:\n");
1328
+ for (const p of store.providers) {
1329
+ process.stdout.write(` ${p.name} [${p.type}]
1330
+ `);
1331
+ }
1332
+ process.stdout.write("\n");
1333
+ }
1334
+ if (which === "all" || which === "presets") {
1335
+ process.stdout.write("Presets:\n");
1336
+ for (const p of store.presets) {
1337
+ const bits = [`provider ${providerName(store, p.providerId)}`];
1338
+ if (p.mcpGroupIds.length) {
1339
+ bits.push(`${p.mcpGroupIds.length} MCP group(s)`);
1340
+ }
1341
+ if (p.directoryGroupIds.length) {
1342
+ bits.push(`${p.directoryGroupIds.length} dir group(s)`);
1343
+ }
1344
+ process.stdout.write(` ${p.name} \u2014 ${bits.join(" \xB7 ")}
1345
+ `);
1346
+ }
1347
+ process.stdout.write("\n");
1348
+ }
1349
+ if (which === "all" || which === "scopes") {
1350
+ process.stdout.write("Scopes:\n");
1351
+ process.stdout.write(` global: ${describeScope(store, store.globalScope)}
1352
+ `);
1353
+ for (const [ws, scope] of Object.entries(store.workspaceScopes)) {
1354
+ process.stdout.write(` ${ws}: ${describeScope(store, scope)}
1355
+ `);
1356
+ }
1357
+ }
1358
+ }
1359
+ function cmdCurrent(store, values) {
1360
+ const ws = workspaceDir(values);
1361
+ const wsScope = store.workspaceScopes[ws];
1362
+ if (values.json) {
1363
+ process.stdout.write(JSON.stringify({
1364
+ global: store.globalScope,
1365
+ workspace: { path: ws, scope: wsScope ?? null }
1366
+ }, null, 2) + "\n");
1367
+ return;
1368
+ }
1369
+ process.stdout.write(`global: ${describeScope(store, store.globalScope)}
1370
+ `);
1371
+ process.stdout.write(`workspace: ${describeScope(store, wsScope)} (${ws})
1372
+ `);
1373
+ }
1374
+ function cmdSwitch(store, presetArg, values) {
1375
+ const toWorkspace = values.workspace || values.path !== void 0 || values.inherit || values.manual;
1376
+ if (toWorkspace && !values.global) {
1377
+ const ws = workspaceDir(values);
1378
+ let scope;
1379
+ let summary;
1380
+ if (values.inherit) {
1381
+ scope = { mode: "inherit" };
1382
+ summary = "inherit from global";
1383
+ } else if (values.manual) {
1384
+ scope = { mode: "manual" };
1385
+ summary = "manual";
1386
+ } else {
1387
+ const preset2 = resolvePresetArg(store, presetArg);
1388
+ scope = { mode: "preset", presetId: preset2.id };
1389
+ summary = `${preset2.name} \u2192 ${providerName(store, preset2.providerId)}`;
1390
+ }
1391
+ store.workspaceScopes[ws] = scope;
1392
+ (0, import_claude_personae_core.writeProfileStore)(store);
1393
+ (0, import_claude_personae_core.ensureOnboardingComplete)();
1394
+ (0, import_claude_personae_core.applyAllScopes)(store, ws);
1395
+ process.stdout.write(`workspace (${ws}): ${summary}
1396
+ `);
1397
+ return;
1398
+ }
1399
+ const preset = resolvePresetArg(store, presetArg);
1400
+ store.globalScope = { mode: "preset", presetId: preset.id };
1401
+ (0, import_claude_personae_core.writeProfileStore)(store);
1402
+ (0, import_claude_personae_core.ensureOnboardingComplete)();
1403
+ (0, import_claude_personae_core.applyAllScopes)(store, void 0);
1404
+ process.stdout.write(`global: ${preset.name} \u2192 ${providerName(store, preset.providerId)}
1405
+ `);
1406
+ }
1407
+ function cmdApply(store, values) {
1408
+ const ws = workspaceDir(values);
1409
+ (0, import_claude_personae_core.ensureOnboardingComplete)();
1410
+ (0, import_claude_personae_core.applyAllScopes)(store, ws);
1411
+ process.stdout.write(`applied \u2014 global: ${describeScope(store, store.globalScope)}
1412
+ `);
1413
+ process.stdout.write(` workspace (${ws}): ${describeScope(store, store.workspaceScopes[ws])}
1414
+ `);
1415
+ }
1416
+ function cmdExport(store, values) {
1417
+ const out = values["no-scrub"] ? store : (0, import_claude_personae_core.scrubStore)(store);
1418
+ const content = JSON.stringify(out, null, 2) + "\n";
1419
+ if (values.out) {
1420
+ fs.writeFileSync(String(values.out), content, "utf8");
1421
+ process.stderr.write(`exported to ${values.out}
1422
+ `);
1423
+ } else {
1424
+ process.stdout.write(content);
1425
+ }
1426
+ if (!values["no-scrub"] && content.includes(import_claude_personae_core.PLACEHOLDER)) {
1427
+ process.stderr.write(`note: credentials were replaced with ${import_claude_personae_core.PLACEHOLDER} \u2014 recipients must fill in their own.
1428
+ `);
1429
+ }
1430
+ }
1431
+ function cmdImport(src, values) {
1432
+ if (!src) {
1433
+ fail('import requires a file path or "-" for stdin');
1434
+ }
1435
+ let raw;
1436
+ try {
1437
+ raw = src === "-" ? fs.readFileSync(0, "utf8") : fs.readFileSync(src, "utf8");
1438
+ } catch (err) {
1439
+ fail(`cannot read ${src}: ${err instanceof Error ? err.message : String(err)}`);
1440
+ }
1441
+ let incoming;
1442
+ try {
1443
+ incoming = (0, import_claude_personae_core.parseIncomingStore)(raw);
1444
+ } catch (err) {
1445
+ fail(`import failed: ${err instanceof Error ? err.message : String(err)}`);
1446
+ }
1447
+ const mode = String(values.mode ?? "merge");
1448
+ if (mode !== "merge" && mode !== "replace") {
1449
+ fail(`--mode must be "merge" or "replace"`);
1450
+ }
1451
+ if (mode === "replace") {
1452
+ const store2 = (0, import_claude_personae_core.ensureDefaults)(incoming);
1453
+ (0, import_claude_personae_core.writeProfileStore)(store2);
1454
+ process.stdout.write("presets replaced from import.\n");
1455
+ return;
1456
+ }
1457
+ const store = (0, import_claude_personae_core.mergeIncomingStore)((0, import_claude_personae_core.readProfileStore)(), incoming);
1458
+ (0, import_claude_personae_core.writeProfileStore)(store);
1459
+ process.stdout.write(
1460
+ `imported ${incoming.presets.length} preset(s), ${incoming.providers.length} provider(s), ${incoming.mcpGroups.length} MCP group(s), ${incoming.directoryGroups.length} directory group(s).
1461
+ `
1462
+ );
1463
+ const placeholders = (0, import_claude_personae_core.providersNeedingCredentials)(store);
1464
+ if (placeholders.length > 0) {
1465
+ process.stderr.write(`note: these providers have placeholder credentials to replace: ${placeholders.join(", ")}
1466
+ `);
1467
+ }
1468
+ }
1469
+ function main() {
1470
+ let parsed;
1471
+ try {
1472
+ parsed = parse(process.argv.slice(2));
1473
+ } catch (err) {
1474
+ fail(err instanceof Error ? err.message : String(err));
1475
+ }
1476
+ const { values, positionals } = parsed;
1477
+ if (values.version) {
1478
+ process.stdout.write(`${VERSION}
1479
+ `);
1480
+ return;
1481
+ }
1482
+ const command = positionals[0];
1483
+ if (!command || values.help) {
1484
+ process.stdout.write(HELP);
1485
+ return;
1486
+ }
1487
+ const store = (0, import_claude_personae_core.readProfileStore)();
1488
+ switch (command) {
1489
+ case "list":
1490
+ cmdList(store, positionals[1], values);
1491
+ break;
1492
+ case "current":
1493
+ cmdCurrent(store, values);
1494
+ break;
1495
+ case "switch":
1496
+ cmdSwitch(store, positionals[1], values);
1497
+ break;
1498
+ case "apply":
1499
+ cmdApply(store, values);
1500
+ break;
1501
+ case "export":
1502
+ cmdExport(store, values);
1503
+ break;
1504
+ case "import":
1505
+ cmdImport(positionals[1], values);
1506
+ break;
1507
+ case "help":
1508
+ process.stdout.write(HELP);
1509
+ break;
1510
+ default:
1511
+ fail(`unknown command "${command}". Run \`ccp --help\`.`);
1512
+ }
1513
+ }
1514
+ main();
1515
+ //# sourceMappingURL=cli.js.map