@easytocloud/claude-personae 0.1.0 → 0.2.1

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/README.md CHANGED
@@ -12,7 +12,7 @@ devcontainer, or from a script.
12
12
 
13
13
  > **Authoring stays in the GUI.** Create and edit providers, presets, MCP groups and
14
14
  > directory groups in the VS Code extension. This CLI is for the *operate* verbs:
15
- > switch, apply, list, current, export, import.
15
+ > switch, apply, sync, list, current, export, import.
16
16
 
17
17
  ## Install
18
18
 
@@ -33,7 +33,8 @@ ccp <command> [options]
33
33
  | `ccp list [presets\|providers\|scopes]` | List configured items (default: all). `--json` for machine output. |
34
34
  | `ccp current` | Show the active global + workspace preset. |
35
35
  | `ccp switch <preset> [scope]` | Set the active preset and write the config files. |
36
- | `ccp apply` | Re-apply the stored scopes to disk (reprovision a machine / fresh checkout). |
36
+ | `ccp apply` | Re-apply the global + current-workspace scopes (reprovision a machine / fresh checkout). |
37
+ | `ccp sync` | Re-apply **every** known workspace assignment — propagate a changed preset everywhere. `--dry-run` previews without writing. |
37
38
  | `ccp export` | Print the store as JSON with **credentials scrubbed** (`-o <file>` to write). |
38
39
  | `ccp import <file\|->` | Import a store (`--mode merge` \| `replace`). `-` reads stdin. |
39
40
 
@@ -56,7 +57,9 @@ ccp list presets
56
57
  ccp switch bedrock-prod # set the global preset
57
58
  ccp switch dev --workspace # set a preset for the current project
58
59
  ccp switch --workspace --inherit # project goes back to inheriting global
59
- ccp apply # rewrite config files from the stored scopes
60
+ ccp apply # rewrite config files for this project
61
+ ccp sync # re-apply every workspace after editing a preset
62
+ ccp sync --dry-run # preview what sync would rewrite
60
63
  ccp export -o presets.json # share presets (keys replaced with <REPLACE_ME>)
61
64
  cat presets.json | ccp import - --mode replace
62
65
  ```
package/dist/cli.js CHANGED
@@ -730,10 +730,10 @@ var require_resolver = __commonJS({
730
730
  };
731
731
  })();
732
732
  Object.defineProperty(exports2, "__esModule", { value: true });
733
- exports2.resolvePreset = resolvePreset;
734
- exports2.applyGlobalConfig = applyGlobalConfig;
735
- exports2.cleanProjectConfig = cleanProjectConfig;
736
- exports2.applyProjectConfig = applyProjectConfig;
733
+ exports2.resolvePreset = resolvePreset2;
734
+ exports2.applyGlobalConfig = applyGlobalConfig2;
735
+ exports2.cleanProjectConfig = cleanProjectConfig2;
736
+ exports2.applyProjectConfig = applyProjectConfig2;
737
737
  exports2.applyAllScopes = applyAllScopes2;
738
738
  var fs2 = __importStar(require("fs"));
739
739
  var os = __importStar(require("os"));
@@ -742,7 +742,7 @@ var require_resolver = __commonJS({
742
742
  var claudeSettings_1 = require_claudeSettings();
743
743
  var claudeJson_1 = require_claudeJson();
744
744
  var mcpJson_1 = require_mcpJson();
745
- function resolvePreset(store, presetId) {
745
+ function resolvePreset2(store, presetId) {
746
746
  const preset = store.presets.find((p) => p.id === presetId);
747
747
  if (!preset) {
748
748
  return null;
@@ -798,9 +798,6 @@ var require_resolver = __commonJS({
798
798
  env["ANTHROPIC_AUTH_TOKEN"] = cred;
799
799
  } else if (cred && mode === "apikey") {
800
800
  env["ANTHROPIC_API_KEY"] = cred;
801
- env["ANTHROPIC_AUTH_TOKEN"] = "local";
802
- } else {
803
- env["ANTHROPIC_AUTH_TOKEN"] = "local";
804
801
  }
805
802
  break;
806
803
  }
@@ -816,8 +813,7 @@ var require_resolver = __commonJS({
816
813
  }
817
814
  env["DISABLE_PROMPT_CACHING"] = provider.disablePromptCaching ? "1" : "";
818
815
  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" : "";
816
+ env["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC"] = shouldDisableLoginPrompt ? "1" : "0";
821
817
  }
822
818
  const mcpServers = {};
823
819
  for (const groupId of preset.mcpGroupIds) {
@@ -861,6 +857,9 @@ var require_resolver = __commonJS({
861
857
  if (key === "CLAUDE_CODE_USE_BEDROCK" && value === "0") {
862
858
  return true;
863
859
  }
860
+ if (key === "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC" && value === "0") {
861
+ return true;
862
+ }
864
863
  return false;
865
864
  }
866
865
  function filterForGlobal(env) {
@@ -878,7 +877,7 @@ var require_resolver = __commonJS({
878
877
  }
879
878
  return preserved;
880
879
  }
881
- function applyGlobalConfig(resolved) {
880
+ function applyGlobalConfig2(resolved) {
882
881
  const settings = (0, claudeSettings_1.readClaudeSettings)();
883
882
  const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});
884
883
  const newSettings = {
@@ -908,7 +907,7 @@ var require_resolver = __commonJS({
908
907
  (0, claudeSettings_1.writeClaudeSettings)(newSettings);
909
908
  (0, claudeJson_1.writeUserMcpServers)(resolved.mcpServers);
910
909
  }
911
- function cleanProjectConfig(workspaceRoot) {
910
+ function cleanProjectConfig2(workspaceRoot) {
912
911
  const settings = (0, claudeSettings_1.readProjectSettings)(workspaceRoot);
913
912
  if (Object.keys(settings).length === 0) {
914
913
  return;
@@ -934,7 +933,7 @@ var require_resolver = __commonJS({
934
933
  }
935
934
  }
936
935
  }
937
- function applyProjectConfig(resolved, workspaceRoot) {
936
+ function applyProjectConfig2(resolved, workspaceRoot) {
938
937
  const globalEnv = (0, claudeSettings_1.readClaudeSettings)().env ?? {};
939
938
  const settings = (0, claudeSettings_1.readProjectSettings)(workspaceRoot);
940
939
  const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});
@@ -963,22 +962,22 @@ var require_resolver = __commonJS({
963
962
  }
964
963
  function applyAllScopes2(store, workspaceRoot) {
965
964
  if (store.globalScope.mode === "preset" && store.globalScope.presetId) {
966
- const resolved = resolvePreset(store, store.globalScope.presetId);
965
+ const resolved = resolvePreset2(store, store.globalScope.presetId);
967
966
  if (resolved) {
968
- applyGlobalConfig(resolved);
967
+ applyGlobalConfig2(resolved);
969
968
  }
970
969
  }
971
970
  if (workspaceRoot) {
972
971
  const wsScope = store.workspaceScopes[workspaceRoot];
973
972
  if (wsScope) {
974
973
  if (wsScope.mode === "preset" && wsScope.presetId) {
975
- const resolved = resolvePreset(store, wsScope.presetId);
974
+ const resolved = resolvePreset2(store, wsScope.presetId);
976
975
  if (resolved) {
977
- applyProjectConfig(resolved, workspaceRoot);
976
+ applyProjectConfig2(resolved, workspaceRoot);
978
977
  }
979
978
  }
980
979
  if (wsScope.mode === "inherit") {
981
- cleanProjectConfig(workspaceRoot);
980
+ cleanProjectConfig2(workspaceRoot);
982
981
  }
983
982
  }
984
983
  }
@@ -1157,7 +1156,7 @@ var require_package = __commonJS({
1157
1156
  "package.json"(exports2, module2) {
1158
1157
  module2.exports = {
1159
1158
  name: "@easytocloud/claude-personae",
1160
- version: "0.1.0",
1159
+ version: "0.2.1",
1161
1160
  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
1161
  license: "MIT",
1163
1162
  repository: {
@@ -1224,7 +1223,8 @@ COMMANDS
1224
1223
  list [presets|providers|scopes] List configured items (default: all)
1225
1224
  current Show the active global + workspace preset
1226
1225
  switch <preset> [scope] Set the active preset and apply it
1227
- apply Re-apply the stored scopes to disk
1226
+ apply Re-apply the global + current-workspace scopes
1227
+ sync Re-apply EVERY known workspace assignment
1228
1228
  export Print the store as JSON (credentials scrubbed)
1229
1229
  import <file|-> Import a store from a file or stdin
1230
1230
 
@@ -1240,6 +1240,7 @@ OPTIONS
1240
1240
  --out, -o <file> Write export to a file instead of stdout
1241
1241
  --no-scrub Export without scrubbing credentials (dangerous)
1242
1242
  --mode <merge|replace> Import mode (default: merge)
1243
+ --dry-run Preview only \u2014 show what \`sync\` would change, write nothing
1243
1244
  --help, -h Show this help
1244
1245
  --version, -v Show version
1245
1246
 
@@ -1248,7 +1249,9 @@ EXAMPLES
1248
1249
  ccp switch bedrock-prod # set global preset
1249
1250
  ccp switch dev --workspace # set preset for the current project
1250
1251
  ccp switch --workspace --inherit # project inherits global again
1251
- ccp apply # reprovision config files from the store
1252
+ ccp apply # reprovision the current project's config
1253
+ ccp sync # re-apply every workspace after editing a preset
1254
+ ccp sync --dry-run # preview what sync would rewrite
1252
1255
  ccp export -o presets.json
1253
1256
  cat presets.json | ccp import - --mode replace
1254
1257
  `;
@@ -1296,6 +1299,7 @@ function parse(argv) {
1296
1299
  inherit: { type: "boolean", default: false },
1297
1300
  manual: { type: "boolean", default: false },
1298
1301
  mode: { type: "string" },
1302
+ "dry-run": { type: "boolean", default: false },
1299
1303
  out: { type: "string", short: "o" },
1300
1304
  "no-scrub": { type: "boolean", default: false },
1301
1305
  help: { type: "boolean", short: "h", default: false },
@@ -1413,6 +1417,76 @@ function cmdApply(store, values) {
1413
1417
  process.stdout.write(` workspace (${ws}): ${describeScope(store, store.workspaceScopes[ws])}
1414
1418
  `);
1415
1419
  }
1420
+ function cmdSync(store, values) {
1421
+ const dryRun = Boolean(values["dry-run"]);
1422
+ if (store.globalScope.mode === "preset" && store.globalScope.presetId) {
1423
+ const resolved = (0, import_claude_personae_core.resolvePreset)(store, store.globalScope.presetId);
1424
+ if (!resolved) {
1425
+ process.stderr.write(`global: preset missing \u2014 skipped
1426
+ `);
1427
+ } else {
1428
+ if (!dryRun) {
1429
+ (0, import_claude_personae_core.ensureOnboardingComplete)();
1430
+ (0, import_claude_personae_core.applyGlobalConfig)(resolved);
1431
+ }
1432
+ process.stdout.write(`${dryRun ? "would apply" : "applied"} global: ${describeScope(store, store.globalScope)}
1433
+ `);
1434
+ }
1435
+ } else {
1436
+ process.stdout.write(`(skip) global: ${describeScope(store, store.globalScope)}
1437
+ `);
1438
+ }
1439
+ const entries = Object.entries(store.workspaceScopes);
1440
+ if (entries.length === 0) {
1441
+ process.stdout.write("no workspace assignments to sync.\n");
1442
+ return;
1443
+ }
1444
+ let applied = 0;
1445
+ let skipped = 0;
1446
+ let missing = 0;
1447
+ for (const [ws, scope] of entries) {
1448
+ const desc = describeScope(store, scope);
1449
+ if (!fs.existsSync(ws)) {
1450
+ process.stderr.write(`(missing) ${ws}: ${desc}
1451
+ `);
1452
+ missing++;
1453
+ continue;
1454
+ }
1455
+ if (scope.mode === "manual") {
1456
+ process.stdout.write(`(manual) ${ws}: left untouched
1457
+ `);
1458
+ skipped++;
1459
+ continue;
1460
+ }
1461
+ if (scope.mode === "inherit") {
1462
+ if (!dryRun) {
1463
+ (0, import_claude_personae_core.cleanProjectConfig)(ws);
1464
+ }
1465
+ process.stdout.write(`${dryRun ? "would clear" : "cleared "} ${ws}: inherit from global
1466
+ `);
1467
+ applied++;
1468
+ continue;
1469
+ }
1470
+ const resolved = scope.presetId ? (0, import_claude_personae_core.resolvePreset)(store, scope.presetId) : null;
1471
+ if (!resolved) {
1472
+ process.stderr.write(`(skip) ${ws}: preset missing
1473
+ `);
1474
+ skipped++;
1475
+ continue;
1476
+ }
1477
+ if (!dryRun) {
1478
+ (0, import_claude_personae_core.applyProjectConfig)(resolved, ws);
1479
+ }
1480
+ process.stdout.write(`${dryRun ? "would apply" : "applied "} ${ws}: ${desc}
1481
+ `);
1482
+ applied++;
1483
+ }
1484
+ const verb = dryRun ? "would sync" : "synced";
1485
+ process.stdout.write(
1486
+ `
1487
+ ${verb} ${applied} workspace(s)` + (skipped ? `, ${skipped} skipped` : "") + (missing ? `, ${missing} with missing directory` : "") + ".\n"
1488
+ );
1489
+ }
1416
1490
  function cmdExport(store, values) {
1417
1491
  const out = values["no-scrub"] ? store : (0, import_claude_personae_core.scrubStore)(store);
1418
1492
  const content = JSON.stringify(out, null, 2) + "\n";
@@ -1498,6 +1572,9 @@ function main() {
1498
1572
  case "apply":
1499
1573
  cmdApply(store, values);
1500
1574
  break;
1575
+ case "sync":
1576
+ cmdSync(store, values);
1577
+ break;
1501
1578
  case "export":
1502
1579
  cmdExport(store, values);
1503
1580
  break;
package/dist/cli.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../core/src/models.ts", "../../core/src/profiles.ts", "../../core/src/awsConfig.ts", "../../core/src/claudeSettings.ts", "../../core/src/claudeJson.ts", "../../core/src/mcpJson.ts", "../../core/src/resolver.ts", "../../core/src/transfer.ts", "../../core/src/index.ts", "../package.json", "../src/index.ts"],
4
- "sourcesContent": ["// ---------------------------------------------------------------------------\n// Known Bedrock inference profile IDs (as of Feb 2026)\n// Also used for Anthropic Direct API model selection.\n// ---------------------------------------------------------------------------\n\nexport interface ModelEntry {\n /** Region prefix: 'global' | 'us' | 'eu' | 'ap' | '' (regional \u2014 always shown) */\n prefix: string;\n /** Full model identifier */\n id: string;\n /** Human-friendly label */\n label: string;\n}\n\nexport const HAIKU_MODELS: ModelEntry[] = [\n { prefix: 'us', id: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', label: 'Claude Haiku 4.5 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-haiku-4-5-20251001-v1:0', label: 'Claude Haiku 4.5 \u2014 EU Cross-Region' },\n { prefix: 'ap', id: 'ap.anthropic.claude-haiku-4-5-20251001-v1:0', label: 'Claude Haiku 4.5 \u2014 AP Cross-Region' },\n { prefix: '', id: 'anthropic.claude-3-5-haiku-20241022-v1:0', label: 'Claude Haiku 3.5 \u2014 Regional' },\n { prefix: '', id: 'anthropic.claude-3-haiku-20240307-v1:0', label: 'Claude Haiku 3 \u2014 Regional' },\n];\n\nexport const SONNET_MODELS: ModelEntry[] = [\n { prefix: 'global', id: 'global.anthropic.claude-sonnet-4-6', label: 'Claude Sonnet 4.6 \u2014 Global' },\n { prefix: 'us', id: 'us.anthropic.claude-sonnet-4-6', label: 'Claude Sonnet 4.6 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-sonnet-4-6', label: 'Claude Sonnet 4.6 \u2014 EU Cross-Region' },\n { prefix: 'us', id: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0', label: 'Claude Sonnet 4.5 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-sonnet-4-5-20250929-v1:0', label: 'Claude Sonnet 4.5 \u2014 EU Cross-Region' },\n { prefix: '', id: 'anthropic.claude-sonnet-4-20250514-v1:0', label: 'Claude Sonnet 4 \u2014 Regional' },\n { prefix: '', id: 'anthropic.claude-3-7-sonnet-20250219-v1:0', label: 'Claude Sonnet 3.7 \u2014 Regional' },\n];\n\nexport const OPUS_MODELS: ModelEntry[] = [\n { prefix: 'us', id: 'us.anthropic.claude-opus-4-6-v1', label: 'Claude Opus 4.6 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-opus-4-6-v1', label: 'Claude Opus 4.6 \u2014 EU Cross-Region' },\n { prefix: '', id: 'anthropic.claude-opus-4-20250514-v1:0', label: 'Claude Opus 4 \u2014 Regional' },\n { prefix: '', id: 'anthropic.claude-opus-4-5-20251101-v1:0', label: 'Claude Opus 4.5 \u2014 Regional' },\n];\n\n/** Default model IDs for Anthropic Direct API (no region prefix needed) */\nexport const ANTHROPIC_DEFAULTS = {\n sonnet: 'claude-sonnet-4-6-20250514',\n haiku: 'claude-haiku-4-5-20251001',\n opus: 'claude-opus-4-6-20250514',\n};\n\nexport const AWS_REGIONS = [\n 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2',\n 'ca-central-1',\n 'eu-west-1', 'eu-west-2', 'eu-west-3', 'eu-central-1', 'eu-north-1',\n 'ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2',\n 'ap-south-1', 'sa-east-1',\n];\n\n/**\n * Returns the model-ID prefixes that should be visible for a given AWS region.\n * Regional models (prefix '') are always included.\n */\nexport function getRegionPrefixes(region: string): string[] {\n if (region.startsWith('us-')) { return ['us', 'global', '']; }\n if (region.startsWith('eu-')) { return ['eu', 'global', '']; }\n if (region.startsWith('ap-')) { return ['ap', 'global', '']; }\n return ['global', ''];\n}\n\n/** Filter a model list to only those matching the region prefixes. */\nexport function filterModelsByRegion(models: ModelEntry[], region: string): ModelEntry[] {\n const prefixes = getRegionPrefixes(region);\n return models.filter(m => prefixes.includes(m.prefix));\n}\n\n/** Environment variable keys managed by this extension. */\nexport const MANAGED_ENV_KEYS = new Set([\n 'CLAUDE_CODE_USE_BEDROCK',\n 'AWS_PROFILE',\n 'AWS_REGION',\n 'AWS_CONFIG_FILE',\n 'ANTHROPIC_DEFAULT_SONNET_MODEL',\n 'ANTHROPIC_DEFAULT_HAIKU_MODEL',\n 'ANTHROPIC_DEFAULT_OPUS_MODEL',\n 'ANTHROPIC_MODEL', // old name \u2014 cleared on save\n 'ANTHROPIC_SMALL_FAST_MODEL', // deprecated \u2014 cleared on save\n 'ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION', // cleared on save\n 'DISABLE_PROMPT_CACHING',\n 'ANTHROPIC_BASE_URL',\n 'ANTHROPIC_API_KEY',\n 'ANTHROPIC_AUTH_TOKEN',\n 'CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC',\n 'DISABLE_AUTOUPDATER',\n]);\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport { ProfileStore, ProviderProfile, Preset } from './types';\nimport { ANTHROPIC_DEFAULTS } from './models';\n\n/** Well-known IDs for the built-in Default preset and provider. */\nexport const DEFAULT_PROVIDER_ID = '__default_anthropic__';\nexport const DEFAULT_PRESET_ID = '__default__';\n\n/** Returns the path to ~/.claude/coder-profiles.json */\nexport function getProfileStorePath(): string {\n return path.join(os.homedir(), '.claude', 'coder-profiles.json');\n}\n\n/** Generates a UUID v4 identifier. */\nexport function generateId(): string {\n return crypto.randomUUID();\n}\n\n/** The built-in Anthropic provider (always present). */\nfunction defaultProvider(existing?: ProviderProfile): ProviderProfile {\n return {\n id: DEFAULT_PROVIDER_ID,\n name: 'Anthropic',\n type: 'anthropic',\n // Preserve user's API key if they've set one\n anthropicApiKey: existing?.anthropicApiKey ?? undefined,\n primaryModel: ANTHROPIC_DEFAULTS.sonnet,\n smallFastModel: ANTHROPIC_DEFAULTS.haiku,\n opusModel: ANTHROPIC_DEFAULTS.opus,\n };\n}\n\n/** The built-in Default preset (always present). */\nfunction defaultPreset(): Preset {\n return {\n id: DEFAULT_PRESET_ID,\n name: 'Default',\n providerId: DEFAULT_PROVIDER_ID,\n mcpGroupIds: [],\n directoryGroupIds: [],\n };\n}\n\n/**\n * Ensures the store always contains the built-in Default provider and preset.\n * Preserves the user's API key on the default provider if already set.\n */\nexport function ensureDefaults(store: ProfileStore): ProfileStore {\n // Ensure default provider exists (preserve API key)\n const existingProvider = store.providers.find(p => p.id === DEFAULT_PROVIDER_ID);\n if (existingProvider) {\n // Reset immutable fields but keep API key\n existingProvider.name = 'Anthropic';\n existingProvider.type = 'anthropic';\n existingProvider.primaryModel = ANTHROPIC_DEFAULTS.sonnet;\n existingProvider.smallFastModel = ANTHROPIC_DEFAULTS.haiku;\n existingProvider.opusModel = ANTHROPIC_DEFAULTS.opus;\n } else {\n store.providers.unshift(defaultProvider());\n }\n\n // Ensure default preset exists\n const existingPreset = store.presets.find(p => p.id === DEFAULT_PRESET_ID);\n if (existingPreset) {\n existingPreset.name = 'Default';\n existingPreset.providerId = DEFAULT_PROVIDER_ID;\n } else {\n store.presets.unshift(defaultPreset());\n }\n\n return store;\n}\n\n/** Returns a default empty ProfileStore with built-in defaults. */\nexport function createEmptyStore(): ProfileStore {\n return ensureDefaults({\n version: 1,\n providers: [],\n mcpGroups: [],\n directoryGroups: [],\n presets: [],\n globalScope: { mode: 'preset', presetId: DEFAULT_PRESET_ID },\n workspaceScopes: {},\n });\n}\n\n/** Reads and parses ~/.claude/coder-profiles.json. Returns empty store if missing or unreadable. */\nexport function readProfileStore(): ProfileStore {\n const filePath = getProfileStorePath();\n\n if (!fs.existsSync(filePath)) {\n return createEmptyStore();\n }\n\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n const store = parsed as ProfileStore;\n // Migrate v0.2.0 projectScopes \u2192 workspaceScopes\n const obj = parsed as Record<string, unknown>;\n if (obj['projectScopes'] && !store.workspaceScopes) {\n store.workspaceScopes = obj['projectScopes'] as Record<string, import('./types').ScopeAssignment>;\n delete obj['projectScopes'];\n }\n if (!store.workspaceScopes) {\n store.workspaceScopes = {};\n }\n if (store.version === 1) {\n return ensureDefaults(store);\n }\n }\n return createEmptyStore();\n } catch {\n return createEmptyStore();\n }\n}\n\n/** Find a preset by exact ID first, then by case-insensitive name. */\nexport function findPresetByNameOrId(store: ProfileStore, query: string): Preset | undefined {\n return (\n store.presets.find(p => p.id === query) ??\n store.presets.find(p => p.name.toLowerCase() === query.toLowerCase())\n );\n}\n\n/** Writes the profile store to ~/.claude/coder-profiles.json, creating the directory if needed. */\nexport function writeProfileStore(store: ProfileStore): void {\n const filePath = getProfileStorePath();\n const dir = path.dirname(filePath);\n\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(filePath, JSON.stringify(store, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\n\n/** Returns the path to the AWS config file, respecting $AWS_CONFIG_FILE. */\nexport function getAwsConfigPath(): string {\n return process.env.AWS_CONFIG_FILE ?? path.join(os.homedir(), '.aws', 'config');\n}\n\nexport interface AwsConfigInfo {\n /** Resolved (real) path of the config file. */\n configPath: string;\n /** True when the path matches ~/.aws/aws-envs/<name>/config */\n isAwsEnv: boolean;\n /** The env name when isAwsEnv is true, otherwise undefined. */\n envName?: string;\n /** All available env names when isAwsEnv is true. */\n envNames?: string[];\n}\n\n/**\n * Detects the AWS config file in use, resolving symlinks.\n * Returns null when config is plain/default (no $AWS_CONFIG_FILE and ~/.aws/config\n * is not a symlink) \u2014 nothing worth showing the user.\n * Otherwise returns info about the resolved path and whether aws-envs is in use.\n */\nexport function getAwsConfigInfo(): AwsConfigInfo | null {\n const rawPath = getAwsConfigPath();\n const defaultPath = path.join(os.homedir(), '.aws', 'config');\n const hasEnvOverride = !!process.env.AWS_CONFIG_FILE;\n\n // Check if the default config is a symlink\n let isSymlink = false;\n try {\n isSymlink = fs.lstatSync(defaultPath).isSymbolicLink();\n } catch { /* file may not exist */ }\n\n // Nothing interesting \u2014 hide the row entirely\n if (!hasEnvOverride && !isSymlink) { return null; }\n\n // Resolve symlink if present\n let configPath = rawPath;\n try {\n configPath = fs.realpathSync(rawPath);\n } catch {\n // File may not exist yet \u2014 use raw path\n configPath = rawPath;\n }\n\n // Normalize iCloud dotfiles path:\n // ~/Library/Mobile Documents/com~apple~CloudDocs/dotFiles/aws/dot-aws/...\n // is the iCloud-synced mirror of ~/.aws/... \u2014 treat it as such.\n const iCloudDotAws = path.join(\n os.homedir(),\n 'Library', 'Mobile Documents', 'com~apple~CloudDocs',\n 'dotFiles', 'aws', 'dot-aws'\n );\n if (configPath.startsWith(iCloudDotAws + '/') || configPath.startsWith(iCloudDotAws + path.sep)) {\n configPath = path.join(os.homedir(), '.aws', configPath.slice(iCloudDotAws.length + 1));\n }\n\n // Detect aws-envs pattern: ~/.aws/aws-envs/<name>/config\n const awsEnvsBase = path.join(os.homedir(), '.aws', 'aws-envs');\n const awsEnvsPattern = path.join(awsEnvsBase, path.sep);\n if (configPath.startsWith(awsEnvsPattern) || configPath.startsWith(awsEnvsBase + '/')) {\n const rel = path.relative(awsEnvsBase, configPath);\n const parts = rel.split(path.sep);\n if (parts.length === 2 && parts[1] === 'config') {\n const envName = parts[0];\n const envNames = listAwsEnvNames(awsEnvsBase);\n return { configPath, isAwsEnv: true, envName, envNames };\n }\n }\n\n return { configPath, isAwsEnv: false };\n}\n\n/** Lists available env names under ~/.aws/aws-envs/. */\nfunction listAwsEnvNames(awsEnvsBase: string): string[] {\n try {\n return fs.readdirSync(awsEnvsBase, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name)\n .sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Reads AWS profile names from the config file at `configPath`.\n * Supports both [default] and [profile name] section headers.\n */\nexport function readAwsProfilesFrom(configPath: string): string[] {\n if (!fs.existsSync(configPath)) {\n return ['default'];\n }\n\n try {\n const content = fs.readFileSync(configPath, 'utf8');\n const profiles: string[] = [];\n\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n // Matches [default] or [profile my-profile-name]\n const match = trimmed.match(/^\\[(?:profile\\s+)?(.+?)\\]$/);\n if (match) {\n const name = match[1].trim();\n if (name && !profiles.includes(name)) {\n profiles.push(name);\n }\n }\n }\n\n return profiles.length > 0 ? profiles : ['default'];\n } catch {\n return ['default'];\n }\n}\n\n/**\n * Reads AWS profile names from the currently active config file.\n */\nexport function readAwsProfiles(): string[] {\n return readAwsProfilesFrom(getAwsConfigPath());\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { ClaudeCodeSettings } from './types';\n\nconst SCHEMA_URL = 'https://json.schemastore.org/claude-code-settings.json';\n\n/** Returns the path to ~/.claude/settings.json */\nexport function getClaudeSettingsPath(): string {\n return path.join(os.homedir(), '.claude', 'settings.json');\n}\n\n/** Returns the path to {workspaceRoot}/.claude/settings.json */\nexport function getProjectSettingsPath(workspaceRoot: string): string {\n return path.join(workspaceRoot, '.claude', 'settings.json');\n}\n\n/** Reads and parses ~/.claude/settings.json. Returns {} if missing or unreadable. */\nexport function readClaudeSettings(): ClaudeCodeSettings {\n const filePath = getClaudeSettingsPath();\n\n if (!fs.existsSync(filePath)) {\n return {};\n }\n\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as ClaudeCodeSettings;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Writes settings to ~/.claude/settings.json, creating the directory if needed. */\nexport function writeClaudeSettings(settings: ClaudeCodeSettings): void {\n const filePath = getClaudeSettingsPath();\n const dir = path.dirname(filePath);\n\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Always include the JSON schema reference for IDE autocomplete\n const output: ClaudeCodeSettings = { $schema: SCHEMA_URL, ...settings };\n\n fs.writeFileSync(filePath, JSON.stringify(output, null, 2) + '\\n', 'utf8');\n}\n\n/** Reads and parses {workspaceRoot}/.claude/settings.json. Returns {} if missing. */\nexport function readProjectSettings(workspaceRoot: string): ClaudeCodeSettings {\n const filePath = getProjectSettingsPath(workspaceRoot);\n if (!fs.existsSync(filePath)) { return {}; }\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as ClaudeCodeSettings;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Writes settings to {workspaceRoot}/.claude/settings.json, creating the directory if needed. */\nexport function writeProjectSettings(workspaceRoot: string, settings: ClaudeCodeSettings): void {\n const filePath = getProjectSettingsPath(workspaceRoot);\n const dir = path.dirname(filePath);\n\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const output: ClaudeCodeSettings = { $schema: SCHEMA_URL, ...settings };\n fs.writeFileSync(filePath, JSON.stringify(output, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { McpServerConfig } from './types';\n\n/** Opaque shape of ~/.claude.json \u2014 we only touch the mcpServers key. */\ninterface ClaudeJson {\n mcpServers?: Record<string, McpServerConfig>;\n [key: string]: unknown;\n}\n\nexport function getClaudeJsonPath(): string {\n return path.join(os.homedir(), '.claude.json');\n}\n\nexport function readClaudeJson(): ClaudeJson {\n const filePath = getClaudeJsonPath();\n if (!fs.existsSync(filePath)) { return {}; }\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as ClaudeJson;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Reads MCP server entries from ~/.claude.json. Returns {} if missing or unreadable. */\nexport function readUserMcpServers(): Record<string, McpServerConfig> {\n return readClaudeJson().mcpServers ?? {};\n}\n\n/**\n * Ensures hasCompletedOnboarding is true in ~/.claude.json.\n * Prevents Claude Code from showing the first-run login wizard when the\n * user is relying on Bedrock or a proxy provider.\n */\nexport function ensureOnboardingComplete(): void {\n const filePath = getClaudeJsonPath();\n const existing = readClaudeJson();\n if (existing['hasCompletedOnboarding']) { return; } // already set \u2014 no write needed\n const updated = { ...existing, hasCompletedOnboarding: true };\n fs.writeFileSync(filePath, JSON.stringify(updated, null, 2) + '\\n', 'utf8');\n}\n\n/** Writes (only) the mcpServers key into ~/.claude.json, preserving all other keys. */\nexport function writeUserMcpServers(servers: Record<string, McpServerConfig>): void {\n const filePath = getClaudeJsonPath();\n const existing = readClaudeJson();\n const updated: ClaudeJson = { ...existing, mcpServers: servers };\n fs.writeFileSync(filePath, JSON.stringify(updated, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as path from 'path';\nimport { McpServerConfig } from './types';\n\ninterface McpJson {\n mcpServers?: Record<string, McpServerConfig>;\n [key: string]: unknown;\n}\n\nexport function getMcpJsonPath(workspaceRoot: string): string {\n return path.join(workspaceRoot, '.mcp.json');\n}\n\nfunction readMcpJson(workspaceRoot: string): McpJson {\n const filePath = getMcpJsonPath(workspaceRoot);\n if (!fs.existsSync(filePath)) { return {}; }\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as McpJson;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Reads MCP server entries from {workspaceRoot}/.mcp.json. Returns {} if missing. */\nexport function readProjectMcpServers(workspaceRoot: string): Record<string, McpServerConfig> {\n return readMcpJson(workspaceRoot).mcpServers ?? {};\n}\n\n/** Writes (only) the mcpServers key into {workspaceRoot}/.mcp.json, preserving other keys. */\nexport function writeProjectMcpServers(workspaceRoot: string, servers: Record<string, McpServerConfig>): void {\n const dir = workspaceRoot;\n if (!fs.existsSync(dir)) { return; }\n const filePath = getMcpJsonPath(workspaceRoot);\n const existing = readMcpJson(workspaceRoot);\n const updated: McpJson = { ...existing, mcpServers: servers };\n fs.writeFileSync(filePath, JSON.stringify(updated, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport {\n ProfileStore,\n McpServerConfig,\n ClaudeCodeSettings,\n} from './types';\nimport { MANAGED_ENV_KEYS, AWS_REGIONS } from './models';\nimport {\n readClaudeSettings,\n writeClaudeSettings,\n readProjectSettings,\n writeProjectSettings,\n getProjectSettingsPath,\n} from './claudeSettings';\nimport { writeUserMcpServers } from './claudeJson';\nimport { writeProjectMcpServers } from './mcpJson';\n\n// ---------------------------------------------------------------------------\n// Resolved configuration \u2014 the flat representation written to Claude Code files\n// ---------------------------------------------------------------------------\n\nexport interface ResolvedConfig {\n env: Record<string, string>;\n allowedDirectories: string[];\n awsAuthRefresh?: string;\n apiKeyHelper?: string;\n mcpServers: Record<string, McpServerConfig>;\n}\n\n// ---------------------------------------------------------------------------\n// Resolution: Preset \u2192 flat config\n// ---------------------------------------------------------------------------\n\n/** Resolve a preset ID into flat env vars, MCP servers, and directories. */\nexport function resolvePreset(\n store: ProfileStore,\n presetId: string\n): ResolvedConfig | null {\n const preset = store.presets.find(p => p.id === presetId);\n if (!preset) { return null; }\n\n const provider = store.providers.find(p => p.id === preset.providerId);\n const env: Record<string, string> = {};\n let awsAuthRefresh: string | undefined;\n let apiKeyHelper: string | undefined;\n\n if (provider) {\n // Reset cross-provider keys so a workspace preset using a different provider than the\n // global preset doesn't silently inherit parent values.\n // - CLAUDE_CODE_USE_BEDROCK=0 overrides a parent bedrock preset (set to 1 below if bedrock)\n // - ANTHROPIC_BASE_URL='' overrides a parent proxy URL (deleted below for global)\n // - AWS_PROFILE/AWS_REGION: NOT reset \u2014 they don't affect non-bedrock providers\n // - ANTHROPIC_API_KEY/AUTH_TOKEN: written only by the provider-specific block below\n env['CLAUDE_CODE_USE_BEDROCK'] = '0';\n env['ANTHROPIC_BASE_URL'] = '';\n\n // Provider-specific env vars\n switch (provider.type) {\n case 'bedrock': {\n env['CLAUDE_CODE_USE_BEDROCK'] = '1';\n if (provider.awsProfile) { env['AWS_PROFILE'] = provider.awsProfile; }\n if (provider.awsRegion) {\n if (!AWS_REGIONS.includes(provider.awsRegion)) {\n throw new Error(`Invalid AWS region \"${provider.awsRegion}\". Must be one of: ${AWS_REGIONS.join(', ')}`);\n }\n env['AWS_REGION'] = provider.awsRegion;\n }\n if (provider.awsAuthRefresh) { awsAuthRefresh = provider.awsAuthRefresh; }\n // Write AWS_CONFIG_FILE when the provider has a specific aws-env selected.\n // This is stored per-provider so switching envs for one provider does not\n // affect other providers.\n if (provider.awsEnv) {\n env['AWS_CONFIG_FILE'] = path.join(os.homedir(), '.aws', 'aws-envs', provider.awsEnv, 'config');\n }\n break;\n }\n case 'anthropic':\n if (provider.anthropicApiKey?.startsWith('op://')) {\n apiKeyHelper = `op read '${provider.anthropicApiKey}'`;\n } else if (provider.anthropicApiKey) {\n env['ANTHROPIC_API_KEY'] = provider.anthropicApiKey;\n }\n break;\n case 'proxy': {\n let baseUrl = provider.proxyBaseUrl || '';\n // Strip trailing /v1 (users often paste the full endpoint URL)\n baseUrl = baseUrl.replace(/\\/v1\\/?$/, '').replace(/\\/+$/, '');\n // OpenRouter requires /api in the URL path\n if (/openrouter\\.ai/i.test(baseUrl) && !/\\/api\\b/i.test(baseUrl)) {\n baseUrl = baseUrl + '/api';\n }\n if (baseUrl) { env['ANTHROPIC_BASE_URL'] = baseUrl; }\n\n // Resolve credential: new single-field model (proxyCredential + proxyAuthMode),\n // with fallback migration for stored data that uses the old separate fields.\n const cred = provider.proxyCredential\n ?? provider.proxyAuthToken // eslint-disable-line deprecation/deprecation\n ?? provider.proxyApiKey; // eslint-disable-line deprecation/deprecation\n const mode = provider.proxyAuthMode\n ?? (provider.proxyAuthToken ? 'authtoken' : 'apikey'); // eslint-disable-line deprecation/deprecation\n\n // 1Password: op:// ref \u2192 apiKeyHelper (conflicts with AUTH_TOKEN, so skip that)\n if (cred?.startsWith('op://')) {\n apiKeyHelper = `op read '${cred}'`;\n } else if (cred && mode === 'authtoken') {\n env['ANTHROPIC_AUTH_TOKEN'] = cred;\n } else if (cred && mode === 'apikey') {\n env['ANTHROPIC_API_KEY'] = cred;\n env['ANTHROPIC_AUTH_TOKEN'] = 'local'; // suppresses login prompt\n } else {\n env['ANTHROPIC_AUTH_TOKEN'] = 'local'; // keyless \u2014 suppress login prompt only\n }\n break;\n }\n }\n\n // Model env vars \u2014 for Anthropic native, clear any overrides (empty string resets\n // workspace-level to unset); for other providers, set the configured model names.\n if (provider.type === 'anthropic') {\n env['ANTHROPIC_DEFAULT_SONNET_MODEL'] = '';\n env['ANTHROPIC_DEFAULT_HAIKU_MODEL'] = '';\n env['ANTHROPIC_DEFAULT_OPUS_MODEL'] = '';\n } else {\n env['ANTHROPIC_DEFAULT_SONNET_MODEL'] = provider.primaryModel || '';\n env['ANTHROPIC_DEFAULT_HAIKU_MODEL'] = provider.smallFastModel || '';\n env['ANTHROPIC_DEFAULT_OPUS_MODEL'] = provider.opusModel || '';\n }\n env['DISABLE_PROMPT_CACHING'] = provider.disablePromptCaching ? '1' : '';\n // Bedrock always disables login/nonessential traffic (AWS auth, never needs Anthropic login).\n // Proxy defaults to disabled (most are local/non-Anthropic); explicit false overrides for\n // proxies that forward to Anthropic and need the login flow.\n const shouldDisableLoginPrompt =\n provider.type === 'bedrock' ||\n (provider.type === 'proxy' && provider.disableLoginPrompt !== false);\n env['CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC'] = shouldDisableLoginPrompt ? '1' : '';\n env['DISABLE_AUTOUPDATER'] = shouldDisableLoginPrompt ? '1' : '';\n\n }\n\n // Merge MCP servers from all selected groups\n const mcpServers: Record<string, McpServerConfig> = {};\n for (const groupId of preset.mcpGroupIds) {\n const group = store.mcpGroups.find(g => g.id === groupId);\n if (group) {\n for (const server of group.servers) {\n const config: McpServerConfig = { type: server.type };\n if (server.url) { config.url = server.url; }\n if (server.command) { config.command = server.command; }\n if (server.args?.length) { config.args = server.args; }\n if (server.env && Object.keys(server.env).length) { config.env = server.env; }\n mcpServers[server.name] = config;\n }\n }\n }\n\n // Merge directories from all selected groups\n const allowedDirectories: string[] = [];\n for (const groupId of preset.directoryGroupIds) {\n const group = store.directoryGroups.find(g => g.id === groupId);\n if (group) {\n for (const dir of group.directories) {\n if (!allowedDirectories.includes(dir)) {\n allowedDirectories.push(dir);\n }\n }\n }\n }\n\n return { env, allowedDirectories, awsAuthRefresh, apiKeyHelper, mcpServers };\n}\n\n// ---------------------------------------------------------------------------\n// Apply resolved config to Claude Code's actual files\n// ---------------------------------------------------------------------------\n\n/**\n * Returns true when key=value carries no information and need not be written.\n * - Empty string is always a no-op at global level (no parent to override).\n * - CLAUDE_CODE_USE_BEDROCK=0 is the default; writing it at global level is noise.\n */\nfunction isNoOp(key: string, value: string): boolean {\n if (value === '') { return true; }\n if (key === 'CLAUDE_CODE_USE_BEDROCK' && value === '0') { return true; }\n return false;\n}\n\n/** Strip no-op values before writing to global settings \u2014 global has no parent. */\nfunction filterForGlobal(env: Record<string, string>): Record<string, string> {\n return Object.fromEntries(Object.entries(env).filter(([k, v]) => !isNoOp(k, v)));\n}\n\n/**\n * At project level, a no-op value is worth writing only when the global env has\n * that key set to a meaningful value (i.e. we need to explicitly override it).\n * Otherwise it's noise.\n */\nfunction filterForProject(\n env: Record<string, string>,\n globalEnv: Record<string, string>\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(env).filter(([k, v]) => !isNoOp(k, v) || !isNoOp(k, globalEnv[k] ?? ''))\n );\n}\n\n// ---------------------------------------------------------------------------\n\n/**\n * Return a copy of `existing` with all MANAGED_ENV_KEYS removed,\n * so user-defined env vars are preserved when we overwrite managed ones.\n */\nfunction preserveUnmanagedEnv(existing: Record<string, string>): Record<string, string> {\n const preserved: Record<string, string> = {};\n for (const [key, value] of Object.entries(existing)) {\n if (!MANAGED_ENV_KEYS.has(key)) {\n preserved[key] = value;\n }\n }\n return preserved;\n}\n\n/**\n * Apply a resolved config to the global scope:\n * - env vars \u2192 ~/.claude/settings.json\n * - MCP servers \u2192 ~/.claude.json\n */\nexport function applyGlobalConfig(resolved: ResolvedConfig): void {\n const settings = readClaudeSettings();\n const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});\n\n const newSettings: ClaudeCodeSettings = {\n ...settings,\n env: { ...preservedEnv, ...filterForGlobal(resolved.env) },\n };\n\n // Set or clear allowedDirectories\n if (resolved.allowedDirectories.length > 0) {\n newSettings.allowedDirectories = resolved.allowedDirectories;\n } else {\n delete newSettings.allowedDirectories;\n }\n\n // Set or clear awsAuthRefresh\n if (resolved.awsAuthRefresh) {\n newSettings.awsAuthRefresh = resolved.awsAuthRefresh;\n } else {\n delete newSettings.awsAuthRefresh;\n }\n\n // Set or clear apiKeyHelper (1Password / op-read support)\n if (resolved.apiKeyHelper) {\n newSettings.apiKeyHelper = resolved.apiKeyHelper;\n } else {\n delete newSettings.apiKeyHelper;\n }\n\n // Clear deprecated env var keys\n if (newSettings.env) {\n delete newSettings.env['ANTHROPIC_MODEL'];\n delete newSettings.env['ANTHROPIC_SMALL_FAST_MODEL'];\n delete newSettings.env['ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION'];\n }\n\n writeClaudeSettings(newSettings);\n writeUserMcpServers(resolved.mcpServers);\n}\n\n/**\n * Remove managed env keys, allowedDirectories, and awsAuthRefresh from\n * {workspace}/.claude/settings.json so the project inherits from global.\n * Preserves any non-managed keys the user may have set.\n */\nexport function cleanProjectConfig(workspaceRoot: string): void {\n const settings = readProjectSettings(workspaceRoot);\n if (Object.keys(settings).length === 0) { return; } // nothing to clean\n\n // Remove managed env keys\n if (settings.env) {\n for (const key of MANAGED_ENV_KEYS) {\n delete settings.env[key];\n }\n if (Object.keys(settings.env).length === 0) {\n delete settings.env;\n }\n }\n\n // Remove fields we manage\n delete settings.allowedDirectories;\n delete settings.awsAuthRefresh;\n delete settings.apiKeyHelper;\n\n // Only write back if there's still content beyond $schema; otherwise leave file alone\n const remaining = Object.keys(settings).filter(k => k !== '$schema');\n if (remaining.length > 0) {\n writeProjectSettings(workspaceRoot, settings);\n } else {\n // File only has $schema (or nothing) \u2014 remove it to keep the project clean\n const filePath = getProjectSettingsPath(workspaceRoot);\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n}\n\n/**\n * Apply a resolved config to the project scope:\n * - env vars + directories \u2192 {workspace}/.claude/settings.json\n * - MCP servers \u2192 {workspace}/.mcp.json\n */\nexport function applyProjectConfig(\n resolved: ResolvedConfig,\n workspaceRoot: string\n): void {\n // Write env vars and directories to project-level settings\n const globalEnv = readClaudeSettings().env ?? {};\n const settings = readProjectSettings(workspaceRoot);\n const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});\n\n const newSettings: ClaudeCodeSettings = {\n ...settings,\n env: { ...preservedEnv, ...filterForProject(resolved.env, globalEnv) },\n };\n\n if (resolved.allowedDirectories.length > 0) {\n newSettings.allowedDirectories = resolved.allowedDirectories;\n } else {\n delete newSettings.allowedDirectories;\n }\n\n if (resolved.awsAuthRefresh) {\n newSettings.awsAuthRefresh = resolved.awsAuthRefresh;\n } else {\n delete newSettings.awsAuthRefresh;\n }\n\n if (resolved.apiKeyHelper) {\n newSettings.apiKeyHelper = resolved.apiKeyHelper;\n } else {\n delete newSettings.apiKeyHelper;\n }\n\n writeProjectSettings(workspaceRoot, newSettings);\n\n // Write MCP servers to .mcp.json\n writeProjectMcpServers(workspaceRoot, resolved.mcpServers);\n\n // If the workspace is a VS Code extension, ensure .mcp.json and .claude/\n // are listed in .vscodeignore so they don't end up in published VSIXs.\n ensureVscodeignore(workspaceRoot);\n}\n\n/**\n * Resolve and apply the active scope assignments from the store.\n */\nexport function applyAllScopes(\n store: ProfileStore,\n workspaceRoot: string | undefined\n): void {\n // Global scope\n if (store.globalScope.mode === 'preset' && store.globalScope.presetId) {\n const resolved = resolvePreset(store, store.globalScope.presetId);\n if (resolved) {\n applyGlobalConfig(resolved);\n }\n }\n\n // Workspace scope\n if (workspaceRoot) {\n const wsScope = store.workspaceScopes[workspaceRoot];\n if (wsScope) {\n if (wsScope.mode === 'preset' && wsScope.presetId) {\n const resolved = resolvePreset(store, wsScope.presetId);\n if (resolved) {\n applyProjectConfig(resolved, workspaceRoot);\n }\n }\n if (wsScope.mode === 'inherit') {\n cleanProjectConfig(workspaceRoot);\n }\n // 'manual' mode: user manages files themselves\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// .vscodeignore helper \u2014 prevent leaking generated config into published VSIXs\n// ---------------------------------------------------------------------------\n\nconst VSCODEIGNORE_ENTRIES = ['.mcp.json', '.claude/'];\n\nfunction ensureVscodeignore(workspaceRoot: string): void {\n const ignorePath = path.join(workspaceRoot, '.vscodeignore');\n if (!fs.existsSync(ignorePath)) { return; } // not a VS Code extension project\n try {\n let content = fs.readFileSync(ignorePath, 'utf8');\n const lines = content.split('\\n').map(l => l.trim());\n const missing = VSCODEIGNORE_ENTRIES.filter(e => !lines.includes(e));\n if (missing.length === 0) { return; }\n if (!content.endsWith('\\n')) { content += '\\n'; }\n content += missing.join('\\n') + '\\n';\n fs.writeFileSync(ignorePath, content, 'utf8');\n } catch { /* best effort \u2014 don't break save */ }\n}\n", "import { ProfileStore, ProviderProfile } from './types';\nimport { generateId } from './profiles';\n\n// ---------------------------------------------------------------------------\n// Credential scrubbing \u2014 real keys must never leave the machine on export.\n// Shared by the VS Code export command and the CLI `export` command.\n// ---------------------------------------------------------------------------\n\nconst CREDENTIAL_PATTERNS = [\n /sk-ant-[a-zA-Z0-9_-]{20,}/g,\n /sk-or-[a-zA-Z0-9_-]{20,}/g,\n /sk-proj-[a-zA-Z0-9_-]{20,}/g,\n /sk-live-[a-zA-Z0-9_-]{20,}/g,\n /AKIA[A-Z0-9]{16}/g,\n /ghp_[a-zA-Z0-9]{36,}/g,\n /gho_[a-zA-Z0-9]{36,}/g,\n /github_pat_[a-zA-Z0-9_]{20,}/g,\n /xoxb-[a-zA-Z0-9-]+/g,\n /xoxp-[a-zA-Z0-9-]+/g,\n];\n\nexport const PLACEHOLDER = '<REPLACE_ME>';\n\nconst SAFE_VALUES = new Set<string | undefined>([\n '', 'foobar', 'placeholder', 'dummy', 'local', 'Optional',\n 'your-key-here', 'xxx', undefined,\n]);\n\n/** Scrub known credential patterns from a string value. */\nexport function scrubValue(value: string | undefined): string | undefined {\n if (!value || SAFE_VALUES.has(value)) { return value; }\n // op:// references are 1Password pointers, not secrets \u2014 keep them.\n if (value.startsWith('op://')) { return value; }\n let scrubbed = value;\n for (const pattern of CREDENTIAL_PATTERNS) {\n pattern.lastIndex = 0;\n scrubbed = scrubbed.replace(pattern, PLACEHOLDER);\n }\n // If it still looks like a real key (long alphanumeric string), replace it\n if (scrubbed === value && value.length >= 20 && /^[a-zA-Z0-9_-]+$/.test(value)) {\n return PLACEHOLDER;\n }\n return scrubbed;\n}\n\n/** Deep-scrub a provider profile of all credential-like fields. */\nfunction scrubProvider(provider: ProviderProfile): ProviderProfile {\n return {\n ...provider,\n anthropicApiKey: scrubValue(provider.anthropicApiKey),\n proxyCredential: scrubValue(provider.proxyCredential),\n proxyApiKey: scrubValue(provider.proxyApiKey),\n proxyAuthToken: scrubValue(provider.proxyAuthToken),\n awsAuthRefresh: provider.awsAuthRefresh, // command, not a secret\n };\n}\n\n/** Scrub all credentials from a profile store for safe export. */\nexport function scrubStore(store: ProfileStore): ProfileStore {\n return {\n ...store,\n providers: store.providers.map(scrubProvider),\n };\n}\n\n/** Names of providers whose credentials are placeholders that need replacing. */\nexport function providersNeedingCredentials(store: ProfileStore): string[] {\n return store.providers\n .filter(p =>\n p.anthropicApiKey === PLACEHOLDER ||\n p.proxyCredential === PLACEHOLDER ||\n p.proxyApiKey === PLACEHOLDER ||\n p.proxyAuthToken === PLACEHOLDER\n )\n .map(p => p.name);\n}\n\n// ---------------------------------------------------------------------------\n// Import \u2014 parse + validate + merge. Shared by extension and CLI.\n// ---------------------------------------------------------------------------\n\n/** Parse and validate raw JSON into a ProfileStore. Throws on malformed input. */\nexport function parseIncomingStore(raw: string): ProfileStore {\n const incoming = JSON.parse(raw) as ProfileStore;\n if (!incoming.version || !incoming.providers || !incoming.presets) {\n throw new Error('Not a valid profile store');\n }\n return incoming;\n}\n\n/**\n * Merge an incoming store into a base store, re-generating all IDs to avoid\n * collisions and remapping preset \u2192 provider/group references. Mutates and\n * returns `base`.\n */\nexport function mergeIncomingStore(base: ProfileStore, incoming: ProfileStore): ProfileStore {\n const idMap = new Map<string, string>(); // old ID \u2192 new ID\n\n for (const provider of incoming.providers) {\n const newId = generateId();\n idMap.set(provider.id, newId);\n base.providers.push({ ...provider, id: newId });\n }\n\n for (const group of incoming.mcpGroups) {\n const newId = generateId();\n idMap.set(group.id, newId);\n base.mcpGroups.push({ ...group, id: newId });\n }\n\n for (const group of incoming.directoryGroups) {\n const newId = generateId();\n idMap.set(group.id, newId);\n base.directoryGroups.push({ ...group, id: newId });\n }\n\n for (const preset of incoming.presets) {\n const newId = generateId();\n base.presets.push({\n ...preset,\n id: newId,\n providerId: idMap.get(preset.providerId) ?? preset.providerId,\n mcpGroupIds: preset.mcpGroupIds.map(id => idMap.get(id) ?? id),\n directoryGroupIds: preset.directoryGroupIds.map(id => idMap.get(id) ?? id),\n });\n }\n\n return base;\n}\n", "// Public API of the Claude Code Personae engine \u2014 shared by the VS Code\n// extension and the CLI. Both bundle this source via esbuild.\nexport * from './types';\nexport * from './models';\nexport * from './profiles';\nexport * from './awsConfig';\nexport * from './claudeSettings';\nexport * from './claudeJson';\nexport * from './mcpJson';\nexport * from './resolver';\nexport * from './transfer';\n", "{\n \"name\": \"@easytocloud/claude-personae\",\n \"version\": \"0.1.0\",\n \"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.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easytocloud/bedrock-claude-code\",\n \"directory\": \"cli\"\n },\n \"homepage\": \"https://github.com/easytocloud/bedrock-claude-code#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/easytocloud/bedrock-claude-code/issues\"\n },\n \"keywords\": [\n \"claude\",\n \"claude-code\",\n \"aws\",\n \"bedrock\",\n \"anthropic\",\n \"cli\",\n \"presets\",\n \"proxy\"\n ],\n \"bin\": {\n \"claude-personae\": \"dist/cli.js\",\n \"ccp\": \"dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"build\": \"node esbuild.js\",\n \"watch\": \"node esbuild.js --watch\",\n \"prepublishOnly\": \"node esbuild.js\"\n },\n \"devDependencies\": {\n \"@easytocloud/claude-personae-core\": \"*\",\n \"@types/node\": \"^20.0.0\",\n \"esbuild\": \"^0.25.0\",\n \"typescript\": \"^5.6.0\"\n }\n}\n", "import * as fs from 'fs';\nimport * as path from 'path';\nimport { parseArgs } from 'util';\nimport {\n readProfileStore,\n writeProfileStore,\n ensureDefaults,\n applyAllScopes,\n ensureOnboardingComplete,\n findPresetByNameOrId,\n scrubStore,\n PLACEHOLDER,\n parseIncomingStore,\n mergeIncomingStore,\n providersNeedingCredentials,\n ProfileStore,\n ScopeAssignment,\n Preset,\n} from '@easytocloud/claude-personae-core';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst VERSION: string = require('../package.json').version;\n\nconst HELP = `claude-personae (ccp) \u2014 switch Claude Code provider presets from the shell\n\nOperates on the same profile store as the \"Claude Code Personae\" VS Code\nextension (~/.claude/coder-profiles.json). Use the extension to author\nproviders/presets; use this CLI to switch and apply them.\n\nUSAGE\n ccp <command> [options]\n\nCOMMANDS\n list [presets|providers|scopes] List configured items (default: all)\n current Show the active global + workspace preset\n switch <preset> [scope] Set the active preset and apply it\n apply Re-apply the stored scopes to disk\n export Print the store as JSON (credentials scrubbed)\n import <file|-> Import a store from a file or stdin\n\nSCOPE (for \\`switch\\`)\n --global, -g Set the global preset (default)\n --workspace, -w Set the preset for a workspace (uses CWD)\n --path <dir> Workspace directory to target (implies --workspace)\n --inherit Workspace inherits the global preset (clears overrides)\n --manual Workspace is managed manually (CLI leaves files alone)\n\nOPTIONS\n --json Machine-readable JSON output (list, current)\n --out, -o <file> Write export to a file instead of stdout\n --no-scrub Export without scrubbing credentials (dangerous)\n --mode <merge|replace> Import mode (default: merge)\n --help, -h Show this help\n --version, -v Show version\n\nEXAMPLES\n ccp list presets\n ccp switch bedrock-prod # set global preset\n ccp switch dev --workspace # set preset for the current project\n ccp switch --workspace --inherit # project inherits global again\n ccp apply # reprovision config files from the store\n ccp export -o presets.json\n cat presets.json | ccp import - --mode replace\n`;\n\nfunction fail(msg: string): never {\n process.stderr.write(`error: ${msg}\\n`);\n process.exit(1);\n}\n\nfunction providerName(store: ProfileStore, providerId: string): string {\n return store.providers.find(p => p.id === providerId)?.name ?? '(unknown provider)';\n}\n\nfunction describeScope(store: ProfileStore, scope: ScopeAssignment | undefined): string {\n if (!scope) { return 'not set'; }\n if (scope.mode === 'manual') { return 'manual (CLI/GUI leave files alone)'; }\n if (scope.mode === 'inherit') { return 'inherit from global'; }\n const preset = scope.presetId ? store.presets.find(p => p.id === scope.presetId) : undefined;\n return preset ? `${preset.name} \u2192 ${providerName(store, preset.providerId)}` : '(preset missing)';\n}\n\nfunction resolvePresetArg(store: ProfileStore, query: string | undefined): Preset {\n if (!query) { fail('a preset name or id is required'); }\n const preset = findPresetByNameOrId(store, query);\n if (!preset) {\n const names = store.presets.map(p => p.name).join(', ');\n fail(`no preset matching \"${query}\". Available: ${names || '(none)'}`);\n }\n return preset;\n}\n\n// ---------------------------------------------------------------------------\n\ntype Values = ReturnType<typeof parse>['values'];\n\nfunction parse(argv: string[]) {\n return parseArgs({\n args: argv,\n allowPositionals: true,\n options: {\n json: { type: 'boolean', default: false },\n global: { type: 'boolean', short: 'g', default: false },\n workspace: { type: 'boolean', short: 'w', default: false },\n path: { type: 'string' },\n inherit: { type: 'boolean', default: false },\n manual: { type: 'boolean', default: false },\n mode: { type: 'string' },\n out: { type: 'string', short: 'o' },\n 'no-scrub': { type: 'boolean', default: false },\n help: { type: 'boolean', short: 'h', default: false },\n version: { type: 'boolean', short: 'v', default: false },\n },\n });\n}\n\nfunction workspaceDir(values: Values): string {\n return values.path ? path.resolve(String(values.path)) : process.cwd();\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\nfunction cmdList(store: ProfileStore, what: string | undefined, values: Values): void {\n const which = what ?? 'all';\n if (values.json) {\n const out: Record<string, unknown> = {};\n if (which === 'all' || which === 'presets') { out.presets = store.presets; }\n if (which === 'all' || which === 'providers') { out.providers = store.providers.map(p => ({ id: p.id, name: p.name, type: p.type })); }\n if (which === 'all' || which === 'scopes') { out.globalScope = store.globalScope; out.workspaceScopes = store.workspaceScopes; }\n process.stdout.write(JSON.stringify(out, null, 2) + '\\n');\n return;\n }\n\n if (which === 'all' || which === 'providers') {\n process.stdout.write('Providers:\\n');\n for (const p of store.providers) {\n process.stdout.write(` ${p.name} [${p.type}]\\n`);\n }\n process.stdout.write('\\n');\n }\n if (which === 'all' || which === 'presets') {\n process.stdout.write('Presets:\\n');\n for (const p of store.presets) {\n const bits = [`provider ${providerName(store, p.providerId)}`];\n if (p.mcpGroupIds.length) { bits.push(`${p.mcpGroupIds.length} MCP group(s)`); }\n if (p.directoryGroupIds.length) { bits.push(`${p.directoryGroupIds.length} dir group(s)`); }\n process.stdout.write(` ${p.name} \u2014 ${bits.join(' \u00B7 ')}\\n`);\n }\n process.stdout.write('\\n');\n }\n if (which === 'all' || which === 'scopes') {\n process.stdout.write('Scopes:\\n');\n process.stdout.write(` global: ${describeScope(store, store.globalScope)}\\n`);\n for (const [ws, scope] of Object.entries(store.workspaceScopes)) {\n process.stdout.write(` ${ws}: ${describeScope(store, scope)}\\n`);\n }\n }\n}\n\nfunction cmdCurrent(store: ProfileStore, values: Values): void {\n const ws = workspaceDir(values);\n const wsScope = store.workspaceScopes[ws];\n if (values.json) {\n process.stdout.write(JSON.stringify({\n global: store.globalScope,\n workspace: { path: ws, scope: wsScope ?? null },\n }, null, 2) + '\\n');\n return;\n }\n process.stdout.write(`global: ${describeScope(store, store.globalScope)}\\n`);\n process.stdout.write(`workspace: ${describeScope(store, wsScope)} (${ws})\\n`);\n}\n\nfunction cmdSwitch(store: ProfileStore, presetArg: string | undefined, values: Values): void {\n const toWorkspace = values.workspace || values.path !== undefined || values.inherit || values.manual;\n\n if (toWorkspace && !values.global) {\n const ws = workspaceDir(values);\n let scope: ScopeAssignment;\n let summary: string;\n if (values.inherit) {\n scope = { mode: 'inherit' };\n summary = 'inherit from global';\n } else if (values.manual) {\n scope = { mode: 'manual' };\n summary = 'manual';\n } else {\n const preset = resolvePresetArg(store, presetArg);\n scope = { mode: 'preset', presetId: preset.id };\n summary = `${preset.name} \u2192 ${providerName(store, preset.providerId)}`;\n }\n store.workspaceScopes[ws] = scope;\n writeProfileStore(store);\n ensureOnboardingComplete();\n applyAllScopes(store, ws);\n process.stdout.write(`workspace (${ws}): ${summary}\\n`);\n return;\n }\n\n // Global (default)\n const preset = resolvePresetArg(store, presetArg);\n store.globalScope = { mode: 'preset', presetId: preset.id };\n writeProfileStore(store);\n ensureOnboardingComplete();\n applyAllScopes(store, undefined);\n process.stdout.write(`global: ${preset.name} \u2192 ${providerName(store, preset.providerId)}\\n`);\n}\n\nfunction cmdApply(store: ProfileStore, values: Values): void {\n const ws = workspaceDir(values);\n ensureOnboardingComplete();\n applyAllScopes(store, ws);\n process.stdout.write(`applied \u2014 global: ${describeScope(store, store.globalScope)}\\n`);\n process.stdout.write(` workspace (${ws}): ${describeScope(store, store.workspaceScopes[ws])}\\n`);\n}\n\nfunction cmdExport(store: ProfileStore, values: Values): void {\n const out = values['no-scrub'] ? store : scrubStore(store);\n const content = JSON.stringify(out, null, 2) + '\\n';\n if (values.out) {\n fs.writeFileSync(String(values.out), content, 'utf8');\n process.stderr.write(`exported to ${values.out}\\n`);\n } else {\n process.stdout.write(content);\n }\n if (!values['no-scrub'] && content.includes(PLACEHOLDER)) {\n process.stderr.write(`note: credentials were replaced with ${PLACEHOLDER} \u2014 recipients must fill in their own.\\n`);\n }\n}\n\nfunction cmdImport(src: string | undefined, values: Values): void {\n if (!src) { fail('import requires a file path or \"-\" for stdin'); }\n let raw: string;\n try {\n raw = src === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(src, 'utf8');\n } catch (err) {\n fail(`cannot read ${src}: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n let incoming: ProfileStore;\n try {\n incoming = parseIncomingStore(raw);\n } catch (err) {\n fail(`import failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const mode = String(values.mode ?? 'merge');\n if (mode !== 'merge' && mode !== 'replace') { fail(`--mode must be \"merge\" or \"replace\"`); }\n\n if (mode === 'replace') {\n const store = ensureDefaults(incoming);\n writeProfileStore(store);\n process.stdout.write('presets replaced from import.\\n');\n return;\n }\n\n const store = mergeIncomingStore(readProfileStore(), incoming);\n writeProfileStore(store);\n process.stdout.write(\n `imported ${incoming.presets.length} preset(s), ${incoming.providers.length} provider(s), ` +\n `${incoming.mcpGroups.length} MCP group(s), ${incoming.directoryGroups.length} directory group(s).\\n`\n );\n const placeholders = providersNeedingCredentials(store);\n if (placeholders.length > 0) {\n process.stderr.write(`note: these providers have placeholder credentials to replace: ${placeholders.join(', ')}\\n`);\n }\n}\n\n// ---------------------------------------------------------------------------\n\nfunction main(): void {\n let parsed: ReturnType<typeof parse>;\n try {\n parsed = parse(process.argv.slice(2));\n } catch (err) {\n fail(err instanceof Error ? err.message : String(err));\n }\n const { values, positionals } = parsed;\n\n if (values.version) { process.stdout.write(`${VERSION}\\n`); return; }\n\n const command = positionals[0];\n if (!command || values.help) { process.stdout.write(HELP); return; }\n\n const store = readProfileStore();\n\n switch (command) {\n case 'list': cmdList(store, positionals[1], values); break;\n case 'current': cmdCurrent(store, values); break;\n case 'switch': cmdSwitch(store, positionals[1], values); break;\n case 'apply': cmdApply(store, values); break;\n case 'export': cmdExport(store, values); break;\n case 'import': cmdImport(positionals[1], values); break;\n case 'help': process.stdout.write(HELP); break;\n default: fail(`unknown command \"${command}\". Run \\`ccp --help\\`.`);\n }\n}\n\nmain();\n"],
5
- "mappings": "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",
6
- "names": ["exports", "exports", "ensureDefaults", "readProfileStore", "findPresetByNameOrId", "writeProfileStore", "fs", "path", "exports", "fs", "path", "exports", "fs", "path", "exports", "ensureOnboardingComplete", "fs", "path", "exports", "fs", "path", "exports", "applyAllScopes", "fs", "path", "exports", "scrubStore", "providersNeedingCredentials", "parseIncomingStore", "mergeIncomingStore", "exports", "exports", "module", "preset", "store"]
4
+ "sourcesContent": ["// ---------------------------------------------------------------------------\n// Known Bedrock inference profile IDs (as of Feb 2026)\n// Also used for Anthropic Direct API model selection.\n// ---------------------------------------------------------------------------\n\nexport interface ModelEntry {\n /** Region prefix: 'global' | 'us' | 'eu' | 'ap' | '' (regional \u2014 always shown) */\n prefix: string;\n /** Full model identifier */\n id: string;\n /** Human-friendly label */\n label: string;\n}\n\nexport const HAIKU_MODELS: ModelEntry[] = [\n { prefix: 'us', id: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', label: 'Claude Haiku 4.5 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-haiku-4-5-20251001-v1:0', label: 'Claude Haiku 4.5 \u2014 EU Cross-Region' },\n { prefix: 'ap', id: 'ap.anthropic.claude-haiku-4-5-20251001-v1:0', label: 'Claude Haiku 4.5 \u2014 AP Cross-Region' },\n { prefix: '', id: 'anthropic.claude-3-5-haiku-20241022-v1:0', label: 'Claude Haiku 3.5 \u2014 Regional' },\n { prefix: '', id: 'anthropic.claude-3-haiku-20240307-v1:0', label: 'Claude Haiku 3 \u2014 Regional' },\n];\n\nexport const SONNET_MODELS: ModelEntry[] = [\n { prefix: 'global', id: 'global.anthropic.claude-sonnet-4-6', label: 'Claude Sonnet 4.6 \u2014 Global' },\n { prefix: 'us', id: 'us.anthropic.claude-sonnet-4-6', label: 'Claude Sonnet 4.6 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-sonnet-4-6', label: 'Claude Sonnet 4.6 \u2014 EU Cross-Region' },\n { prefix: 'us', id: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0', label: 'Claude Sonnet 4.5 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-sonnet-4-5-20250929-v1:0', label: 'Claude Sonnet 4.5 \u2014 EU Cross-Region' },\n { prefix: '', id: 'anthropic.claude-sonnet-4-20250514-v1:0', label: 'Claude Sonnet 4 \u2014 Regional' },\n { prefix: '', id: 'anthropic.claude-3-7-sonnet-20250219-v1:0', label: 'Claude Sonnet 3.7 \u2014 Regional' },\n];\n\nexport const OPUS_MODELS: ModelEntry[] = [\n { prefix: 'us', id: 'us.anthropic.claude-opus-4-6-v1', label: 'Claude Opus 4.6 \u2014 US Cross-Region' },\n { prefix: 'eu', id: 'eu.anthropic.claude-opus-4-6-v1', label: 'Claude Opus 4.6 \u2014 EU Cross-Region' },\n { prefix: '', id: 'anthropic.claude-opus-4-20250514-v1:0', label: 'Claude Opus 4 \u2014 Regional' },\n { prefix: '', id: 'anthropic.claude-opus-4-5-20251101-v1:0', label: 'Claude Opus 4.5 \u2014 Regional' },\n];\n\n/** Default model IDs for Anthropic Direct API (no region prefix needed) */\nexport const ANTHROPIC_DEFAULTS = {\n sonnet: 'claude-sonnet-4-6-20250514',\n haiku: 'claude-haiku-4-5-20251001',\n opus: 'claude-opus-4-6-20250514',\n};\n\nexport const AWS_REGIONS = [\n 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2',\n 'ca-central-1',\n 'eu-west-1', 'eu-west-2', 'eu-west-3', 'eu-central-1', 'eu-north-1',\n 'ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2',\n 'ap-south-1', 'sa-east-1',\n];\n\n/**\n * Returns the model-ID prefixes that should be visible for a given AWS region.\n * Regional models (prefix '') are always included.\n */\nexport function getRegionPrefixes(region: string): string[] {\n if (region.startsWith('us-')) { return ['us', 'global', '']; }\n if (region.startsWith('eu-')) { return ['eu', 'global', '']; }\n if (region.startsWith('ap-')) { return ['ap', 'global', '']; }\n return ['global', ''];\n}\n\n/** Filter a model list to only those matching the region prefixes. */\nexport function filterModelsByRegion(models: ModelEntry[], region: string): ModelEntry[] {\n const prefixes = getRegionPrefixes(region);\n return models.filter(m => prefixes.includes(m.prefix));\n}\n\n/** Environment variable keys managed by this extension. */\nexport const MANAGED_ENV_KEYS = new Set([\n 'CLAUDE_CODE_USE_BEDROCK',\n 'AWS_PROFILE',\n 'AWS_REGION',\n 'AWS_CONFIG_FILE',\n 'ANTHROPIC_DEFAULT_SONNET_MODEL',\n 'ANTHROPIC_DEFAULT_HAIKU_MODEL',\n 'ANTHROPIC_DEFAULT_OPUS_MODEL',\n 'ANTHROPIC_MODEL', // old name \u2014 cleared on save\n 'ANTHROPIC_SMALL_FAST_MODEL', // deprecated \u2014 cleared on save\n 'ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION', // cleared on save\n 'DISABLE_PROMPT_CACHING',\n 'ANTHROPIC_BASE_URL',\n 'ANTHROPIC_API_KEY',\n 'ANTHROPIC_AUTH_TOKEN',\n 'CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC',\n 'DISABLE_AUTOUPDATER',\n]);\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport { ProfileStore, ProviderProfile, Preset } from './types';\nimport { ANTHROPIC_DEFAULTS } from './models';\n\n/** Well-known IDs for the built-in Default preset and provider. */\nexport const DEFAULT_PROVIDER_ID = '__default_anthropic__';\nexport const DEFAULT_PRESET_ID = '__default__';\n\n/** Returns the path to ~/.claude/coder-profiles.json */\nexport function getProfileStorePath(): string {\n return path.join(os.homedir(), '.claude', 'coder-profiles.json');\n}\n\n/** Generates a UUID v4 identifier. */\nexport function generateId(): string {\n return crypto.randomUUID();\n}\n\n/** The built-in Anthropic provider (always present). */\nfunction defaultProvider(existing?: ProviderProfile): ProviderProfile {\n return {\n id: DEFAULT_PROVIDER_ID,\n name: 'Anthropic',\n type: 'anthropic',\n // Preserve user's API key if they've set one\n anthropicApiKey: existing?.anthropicApiKey ?? undefined,\n primaryModel: ANTHROPIC_DEFAULTS.sonnet,\n smallFastModel: ANTHROPIC_DEFAULTS.haiku,\n opusModel: ANTHROPIC_DEFAULTS.opus,\n };\n}\n\n/** The built-in Default preset (always present). */\nfunction defaultPreset(): Preset {\n return {\n id: DEFAULT_PRESET_ID,\n name: 'Default',\n providerId: DEFAULT_PROVIDER_ID,\n mcpGroupIds: [],\n directoryGroupIds: [],\n };\n}\n\n/**\n * Ensures the store always contains the built-in Default provider and preset.\n * Preserves the user's API key on the default provider if already set.\n */\nexport function ensureDefaults(store: ProfileStore): ProfileStore {\n // Ensure default provider exists (preserve API key)\n const existingProvider = store.providers.find(p => p.id === DEFAULT_PROVIDER_ID);\n if (existingProvider) {\n // Reset immutable fields but keep API key\n existingProvider.name = 'Anthropic';\n existingProvider.type = 'anthropic';\n existingProvider.primaryModel = ANTHROPIC_DEFAULTS.sonnet;\n existingProvider.smallFastModel = ANTHROPIC_DEFAULTS.haiku;\n existingProvider.opusModel = ANTHROPIC_DEFAULTS.opus;\n } else {\n store.providers.unshift(defaultProvider());\n }\n\n // Ensure default preset exists\n const existingPreset = store.presets.find(p => p.id === DEFAULT_PRESET_ID);\n if (existingPreset) {\n existingPreset.name = 'Default';\n existingPreset.providerId = DEFAULT_PROVIDER_ID;\n } else {\n store.presets.unshift(defaultPreset());\n }\n\n return store;\n}\n\n/** Returns a default empty ProfileStore with built-in defaults. */\nexport function createEmptyStore(): ProfileStore {\n return ensureDefaults({\n version: 1,\n providers: [],\n mcpGroups: [],\n directoryGroups: [],\n presets: [],\n globalScope: { mode: 'preset', presetId: DEFAULT_PRESET_ID },\n workspaceScopes: {},\n });\n}\n\n/** Reads and parses ~/.claude/coder-profiles.json. Returns empty store if missing or unreadable. */\nexport function readProfileStore(): ProfileStore {\n const filePath = getProfileStorePath();\n\n if (!fs.existsSync(filePath)) {\n return createEmptyStore();\n }\n\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n const store = parsed as ProfileStore;\n // Migrate v0.2.0 projectScopes \u2192 workspaceScopes\n const obj = parsed as Record<string, unknown>;\n if (obj['projectScopes'] && !store.workspaceScopes) {\n store.workspaceScopes = obj['projectScopes'] as Record<string, import('./types').ScopeAssignment>;\n delete obj['projectScopes'];\n }\n if (!store.workspaceScopes) {\n store.workspaceScopes = {};\n }\n if (store.version === 1) {\n return ensureDefaults(store);\n }\n }\n return createEmptyStore();\n } catch {\n return createEmptyStore();\n }\n}\n\n/** Find a preset by exact ID first, then by case-insensitive name. */\nexport function findPresetByNameOrId(store: ProfileStore, query: string): Preset | undefined {\n return (\n store.presets.find(p => p.id === query) ??\n store.presets.find(p => p.name.toLowerCase() === query.toLowerCase())\n );\n}\n\n/** Writes the profile store to ~/.claude/coder-profiles.json, creating the directory if needed. */\nexport function writeProfileStore(store: ProfileStore): void {\n const filePath = getProfileStorePath();\n const dir = path.dirname(filePath);\n\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(filePath, JSON.stringify(store, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\n\n/** Returns the path to the AWS config file, respecting $AWS_CONFIG_FILE. */\nexport function getAwsConfigPath(): string {\n return process.env.AWS_CONFIG_FILE ?? path.join(os.homedir(), '.aws', 'config');\n}\n\nexport interface AwsConfigInfo {\n /** Resolved (real) path of the config file. */\n configPath: string;\n /** True when the path matches ~/.aws/aws-envs/<name>/config */\n isAwsEnv: boolean;\n /** The env name when isAwsEnv is true, otherwise undefined. */\n envName?: string;\n /** All available env names when isAwsEnv is true. */\n envNames?: string[];\n}\n\n/**\n * Detects the AWS config file in use, resolving symlinks.\n * Returns null when config is plain/default (no $AWS_CONFIG_FILE and ~/.aws/config\n * is not a symlink) \u2014 nothing worth showing the user.\n * Otherwise returns info about the resolved path and whether aws-envs is in use.\n */\nexport function getAwsConfigInfo(): AwsConfigInfo | null {\n const rawPath = getAwsConfigPath();\n const defaultPath = path.join(os.homedir(), '.aws', 'config');\n const hasEnvOverride = !!process.env.AWS_CONFIG_FILE;\n\n // Check if the default config is a symlink\n let isSymlink = false;\n try {\n isSymlink = fs.lstatSync(defaultPath).isSymbolicLink();\n } catch { /* file may not exist */ }\n\n // Nothing interesting \u2014 hide the row entirely\n if (!hasEnvOverride && !isSymlink) { return null; }\n\n // Resolve symlink if present\n let configPath = rawPath;\n try {\n configPath = fs.realpathSync(rawPath);\n } catch {\n // File may not exist yet \u2014 use raw path\n configPath = rawPath;\n }\n\n // Normalize iCloud dotfiles path:\n // ~/Library/Mobile Documents/com~apple~CloudDocs/dotFiles/aws/dot-aws/...\n // is the iCloud-synced mirror of ~/.aws/... \u2014 treat it as such.\n const iCloudDotAws = path.join(\n os.homedir(),\n 'Library', 'Mobile Documents', 'com~apple~CloudDocs',\n 'dotFiles', 'aws', 'dot-aws'\n );\n if (configPath.startsWith(iCloudDotAws + '/') || configPath.startsWith(iCloudDotAws + path.sep)) {\n configPath = path.join(os.homedir(), '.aws', configPath.slice(iCloudDotAws.length + 1));\n }\n\n // Detect aws-envs pattern: ~/.aws/aws-envs/<name>/config\n const awsEnvsBase = path.join(os.homedir(), '.aws', 'aws-envs');\n const awsEnvsPattern = path.join(awsEnvsBase, path.sep);\n if (configPath.startsWith(awsEnvsPattern) || configPath.startsWith(awsEnvsBase + '/')) {\n const rel = path.relative(awsEnvsBase, configPath);\n const parts = rel.split(path.sep);\n if (parts.length === 2 && parts[1] === 'config') {\n const envName = parts[0];\n const envNames = listAwsEnvNames(awsEnvsBase);\n return { configPath, isAwsEnv: true, envName, envNames };\n }\n }\n\n return { configPath, isAwsEnv: false };\n}\n\n/** Lists available env names under ~/.aws/aws-envs/. */\nfunction listAwsEnvNames(awsEnvsBase: string): string[] {\n try {\n return fs.readdirSync(awsEnvsBase, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name)\n .sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Reads AWS profile names from the config file at `configPath`.\n * Supports both [default] and [profile name] section headers.\n */\nexport function readAwsProfilesFrom(configPath: string): string[] {\n if (!fs.existsSync(configPath)) {\n return ['default'];\n }\n\n try {\n const content = fs.readFileSync(configPath, 'utf8');\n const profiles: string[] = [];\n\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n // Matches [default] or [profile my-profile-name]\n const match = trimmed.match(/^\\[(?:profile\\s+)?(.+?)\\]$/);\n if (match) {\n const name = match[1].trim();\n if (name && !profiles.includes(name)) {\n profiles.push(name);\n }\n }\n }\n\n return profiles.length > 0 ? profiles : ['default'];\n } catch {\n return ['default'];\n }\n}\n\n/**\n * Reads AWS profile names from the currently active config file.\n */\nexport function readAwsProfiles(): string[] {\n return readAwsProfilesFrom(getAwsConfigPath());\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { ClaudeCodeSettings } from './types';\n\nconst SCHEMA_URL = 'https://json.schemastore.org/claude-code-settings.json';\n\n/** Returns the path to ~/.claude/settings.json */\nexport function getClaudeSettingsPath(): string {\n return path.join(os.homedir(), '.claude', 'settings.json');\n}\n\n/** Returns the path to {workspaceRoot}/.claude/settings.json */\nexport function getProjectSettingsPath(workspaceRoot: string): string {\n return path.join(workspaceRoot, '.claude', 'settings.json');\n}\n\n/** Reads and parses ~/.claude/settings.json. Returns {} if missing or unreadable. */\nexport function readClaudeSettings(): ClaudeCodeSettings {\n const filePath = getClaudeSettingsPath();\n\n if (!fs.existsSync(filePath)) {\n return {};\n }\n\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as ClaudeCodeSettings;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Writes settings to ~/.claude/settings.json, creating the directory if needed. */\nexport function writeClaudeSettings(settings: ClaudeCodeSettings): void {\n const filePath = getClaudeSettingsPath();\n const dir = path.dirname(filePath);\n\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Always include the JSON schema reference for IDE autocomplete\n const output: ClaudeCodeSettings = { $schema: SCHEMA_URL, ...settings };\n\n fs.writeFileSync(filePath, JSON.stringify(output, null, 2) + '\\n', 'utf8');\n}\n\n/** Reads and parses {workspaceRoot}/.claude/settings.json. Returns {} if missing. */\nexport function readProjectSettings(workspaceRoot: string): ClaudeCodeSettings {\n const filePath = getProjectSettingsPath(workspaceRoot);\n if (!fs.existsSync(filePath)) { return {}; }\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as ClaudeCodeSettings;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Writes settings to {workspaceRoot}/.claude/settings.json, creating the directory if needed. */\nexport function writeProjectSettings(workspaceRoot: string, settings: ClaudeCodeSettings): void {\n const filePath = getProjectSettingsPath(workspaceRoot);\n const dir = path.dirname(filePath);\n\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const output: ClaudeCodeSettings = { $schema: SCHEMA_URL, ...settings };\n fs.writeFileSync(filePath, JSON.stringify(output, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { McpServerConfig } from './types';\n\n/** Opaque shape of ~/.claude.json \u2014 we only touch the mcpServers key. */\ninterface ClaudeJson {\n mcpServers?: Record<string, McpServerConfig>;\n [key: string]: unknown;\n}\n\nexport function getClaudeJsonPath(): string {\n return path.join(os.homedir(), '.claude.json');\n}\n\nexport function readClaudeJson(): ClaudeJson {\n const filePath = getClaudeJsonPath();\n if (!fs.existsSync(filePath)) { return {}; }\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as ClaudeJson;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Reads MCP server entries from ~/.claude.json. Returns {} if missing or unreadable. */\nexport function readUserMcpServers(): Record<string, McpServerConfig> {\n return readClaudeJson().mcpServers ?? {};\n}\n\n/**\n * Ensures hasCompletedOnboarding is true in ~/.claude.json.\n * Prevents Claude Code from showing the first-run login wizard when the\n * user is relying on Bedrock or a proxy provider.\n */\nexport function ensureOnboardingComplete(): void {\n const filePath = getClaudeJsonPath();\n const existing = readClaudeJson();\n if (existing['hasCompletedOnboarding']) { return; } // already set \u2014 no write needed\n const updated = { ...existing, hasCompletedOnboarding: true };\n fs.writeFileSync(filePath, JSON.stringify(updated, null, 2) + '\\n', 'utf8');\n}\n\n/** Writes (only) the mcpServers key into ~/.claude.json, preserving all other keys. */\nexport function writeUserMcpServers(servers: Record<string, McpServerConfig>): void {\n const filePath = getClaudeJsonPath();\n const existing = readClaudeJson();\n const updated: ClaudeJson = { ...existing, mcpServers: servers };\n fs.writeFileSync(filePath, JSON.stringify(updated, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as path from 'path';\nimport { McpServerConfig } from './types';\n\ninterface McpJson {\n mcpServers?: Record<string, McpServerConfig>;\n [key: string]: unknown;\n}\n\nexport function getMcpJsonPath(workspaceRoot: string): string {\n return path.join(workspaceRoot, '.mcp.json');\n}\n\nfunction readMcpJson(workspaceRoot: string): McpJson {\n const filePath = getMcpJsonPath(workspaceRoot);\n if (!fs.existsSync(filePath)) { return {}; }\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as McpJson;\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/** Reads MCP server entries from {workspaceRoot}/.mcp.json. Returns {} if missing. */\nexport function readProjectMcpServers(workspaceRoot: string): Record<string, McpServerConfig> {\n return readMcpJson(workspaceRoot).mcpServers ?? {};\n}\n\n/** Writes (only) the mcpServers key into {workspaceRoot}/.mcp.json, preserving other keys. */\nexport function writeProjectMcpServers(workspaceRoot: string, servers: Record<string, McpServerConfig>): void {\n const dir = workspaceRoot;\n if (!fs.existsSync(dir)) { return; }\n const filePath = getMcpJsonPath(workspaceRoot);\n const existing = readMcpJson(workspaceRoot);\n const updated: McpJson = { ...existing, mcpServers: servers };\n fs.writeFileSync(filePath, JSON.stringify(updated, null, 2) + '\\n', 'utf8');\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport {\n ProfileStore,\n McpServerConfig,\n ClaudeCodeSettings,\n} from './types';\nimport { MANAGED_ENV_KEYS, AWS_REGIONS } from './models';\nimport {\n readClaudeSettings,\n writeClaudeSettings,\n readProjectSettings,\n writeProjectSettings,\n getProjectSettingsPath,\n} from './claudeSettings';\nimport { writeUserMcpServers } from './claudeJson';\nimport { writeProjectMcpServers } from './mcpJson';\n\n// ---------------------------------------------------------------------------\n// Resolved configuration \u2014 the flat representation written to Claude Code files\n// ---------------------------------------------------------------------------\n\nexport interface ResolvedConfig {\n env: Record<string, string>;\n allowedDirectories: string[];\n awsAuthRefresh?: string;\n apiKeyHelper?: string;\n mcpServers: Record<string, McpServerConfig>;\n}\n\n// ---------------------------------------------------------------------------\n// Resolution: Preset \u2192 flat config\n// ---------------------------------------------------------------------------\n\n/** Resolve a preset ID into flat env vars, MCP servers, and directories. */\nexport function resolvePreset(\n store: ProfileStore,\n presetId: string\n): ResolvedConfig | null {\n const preset = store.presets.find(p => p.id === presetId);\n if (!preset) { return null; }\n\n const provider = store.providers.find(p => p.id === preset.providerId);\n const env: Record<string, string> = {};\n let awsAuthRefresh: string | undefined;\n let apiKeyHelper: string | undefined;\n\n if (provider) {\n // Reset cross-provider keys so a workspace preset using a different provider than the\n // global preset doesn't silently inherit parent values.\n // - CLAUDE_CODE_USE_BEDROCK=0 overrides a parent bedrock preset (set to 1 below if bedrock)\n // - ANTHROPIC_BASE_URL='' overrides a parent proxy URL (deleted below for global)\n // - AWS_PROFILE/AWS_REGION: NOT reset \u2014 they don't affect non-bedrock providers\n // - ANTHROPIC_API_KEY/AUTH_TOKEN: written only by the provider-specific block below\n env['CLAUDE_CODE_USE_BEDROCK'] = '0';\n env['ANTHROPIC_BASE_URL'] = '';\n\n // Provider-specific env vars\n switch (provider.type) {\n case 'bedrock': {\n env['CLAUDE_CODE_USE_BEDROCK'] = '1';\n if (provider.awsProfile) { env['AWS_PROFILE'] = provider.awsProfile; }\n if (provider.awsRegion) {\n if (!AWS_REGIONS.includes(provider.awsRegion)) {\n throw new Error(`Invalid AWS region \"${provider.awsRegion}\". Must be one of: ${AWS_REGIONS.join(', ')}`);\n }\n env['AWS_REGION'] = provider.awsRegion;\n }\n if (provider.awsAuthRefresh) { awsAuthRefresh = provider.awsAuthRefresh; }\n // Write AWS_CONFIG_FILE when the provider has a specific aws-env selected.\n // This is stored per-provider so switching envs for one provider does not\n // affect other providers.\n if (provider.awsEnv) {\n env['AWS_CONFIG_FILE'] = path.join(os.homedir(), '.aws', 'aws-envs', provider.awsEnv, 'config');\n }\n break;\n }\n case 'anthropic':\n if (provider.anthropicApiKey?.startsWith('op://')) {\n apiKeyHelper = `op read '${provider.anthropicApiKey}'`;\n } else if (provider.anthropicApiKey) {\n env['ANTHROPIC_API_KEY'] = provider.anthropicApiKey;\n }\n break;\n case 'proxy': {\n let baseUrl = provider.proxyBaseUrl || '';\n // Strip trailing /v1 (users often paste the full endpoint URL)\n baseUrl = baseUrl.replace(/\\/v1\\/?$/, '').replace(/\\/+$/, '');\n // OpenRouter requires /api in the URL path\n if (/openrouter\\.ai/i.test(baseUrl) && !/\\/api\\b/i.test(baseUrl)) {\n baseUrl = baseUrl + '/api';\n }\n if (baseUrl) { env['ANTHROPIC_BASE_URL'] = baseUrl; }\n\n // Resolve credential: new single-field model (proxyCredential + proxyAuthMode),\n // with fallback migration for stored data that uses the old separate fields.\n const cred = provider.proxyCredential\n ?? provider.proxyAuthToken // eslint-disable-line deprecation/deprecation\n ?? provider.proxyApiKey; // eslint-disable-line deprecation/deprecation\n const mode = provider.proxyAuthMode\n ?? (provider.proxyAuthToken ? 'authtoken' : 'apikey'); // eslint-disable-line deprecation/deprecation\n\n // Mutual exclusivity rule: ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN must never\n // coexist in settings.json. Exactly one is written based on the user-selected mode,\n // or neither when keyless. Login-prompt suppression is handled by\n // CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC (set below), not by a synthetic token.\n if (cred?.startsWith('op://')) {\n // 1Password ref \u2192 apiKeyHelper (no API_KEY/AUTH_TOKEN written)\n apiKeyHelper = `op read '${cred}'`;\n } else if (cred && mode === 'authtoken') {\n env['ANTHROPIC_AUTH_TOKEN'] = cred;\n } else if (cred && mode === 'apikey') {\n env['ANTHROPIC_API_KEY'] = cred;\n }\n // keyless: write neither \u2014 disableLoginPrompt toggle controls prompt suppression\n break;\n }\n }\n\n // Model env vars \u2014 for Anthropic native, clear any overrides (empty string resets\n // workspace-level to unset); for other providers, set the configured model names.\n if (provider.type === 'anthropic') {\n env['ANTHROPIC_DEFAULT_SONNET_MODEL'] = '';\n env['ANTHROPIC_DEFAULT_HAIKU_MODEL'] = '';\n env['ANTHROPIC_DEFAULT_OPUS_MODEL'] = '';\n } else {\n env['ANTHROPIC_DEFAULT_SONNET_MODEL'] = provider.primaryModel || '';\n env['ANTHROPIC_DEFAULT_HAIKU_MODEL'] = provider.smallFastModel || '';\n env['ANTHROPIC_DEFAULT_OPUS_MODEL'] = provider.opusModel || '';\n }\n env['DISABLE_PROMPT_CACHING'] = provider.disablePromptCaching ? '1' : '';\n // Bedrock always disables nonessential traffic (AWS auth, never needs Anthropic login).\n // Proxy defaults to disabled (most are local/non-Anthropic); explicit false overrides for\n // proxies that forward to Anthropic and need the login flow.\n // DISABLE_AUTOUPDATER is intentionally NOT written here: auto-update is a CLI-lifecycle\n // decision that belongs to the user/machine, not a preset. Toggling presets across\n // workspaces shouldn't flip whether the CLI updates itself.\n const shouldDisableLoginPrompt =\n provider.type === 'bedrock' ||\n (provider.type === 'proxy' && provider.disableLoginPrompt !== false);\n env['CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC'] = shouldDisableLoginPrompt ? '1' : '0';\n\n }\n\n // Merge MCP servers from all selected groups\n const mcpServers: Record<string, McpServerConfig> = {};\n for (const groupId of preset.mcpGroupIds) {\n const group = store.mcpGroups.find(g => g.id === groupId);\n if (group) {\n for (const server of group.servers) {\n const config: McpServerConfig = { type: server.type };\n if (server.url) { config.url = server.url; }\n if (server.command) { config.command = server.command; }\n if (server.args?.length) { config.args = server.args; }\n if (server.env && Object.keys(server.env).length) { config.env = server.env; }\n mcpServers[server.name] = config;\n }\n }\n }\n\n // Merge directories from all selected groups\n const allowedDirectories: string[] = [];\n for (const groupId of preset.directoryGroupIds) {\n const group = store.directoryGroups.find(g => g.id === groupId);\n if (group) {\n for (const dir of group.directories) {\n if (!allowedDirectories.includes(dir)) {\n allowedDirectories.push(dir);\n }\n }\n }\n }\n\n return { env, allowedDirectories, awsAuthRefresh, apiKeyHelper, mcpServers };\n}\n\n// ---------------------------------------------------------------------------\n// Apply resolved config to Claude Code's actual files\n// ---------------------------------------------------------------------------\n\n/**\n * Returns true when key=value carries no information and need not be written.\n * - Empty string is always a no-op at global level (no parent to override).\n * - CLAUDE_CODE_USE_BEDROCK=0 is the default; writing it at global level is noise.\n */\nfunction isNoOp(key: string, value: string): boolean {\n if (value === '') { return true; }\n if (key === 'CLAUDE_CODE_USE_BEDROCK' && value === '0') { return true; }\n if (key === 'CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC' && value === '0') { return true; }\n return false;\n}\n\n/** Strip no-op values before writing to global settings \u2014 global has no parent. */\nfunction filterForGlobal(env: Record<string, string>): Record<string, string> {\n return Object.fromEntries(Object.entries(env).filter(([k, v]) => !isNoOp(k, v)));\n}\n\n/**\n * At project level, a no-op value is worth writing only when the global env has\n * that key set to a meaningful value (i.e. we need to explicitly override it).\n * Otherwise it's noise.\n */\nfunction filterForProject(\n env: Record<string, string>,\n globalEnv: Record<string, string>\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(env).filter(([k, v]) => !isNoOp(k, v) || !isNoOp(k, globalEnv[k] ?? ''))\n );\n}\n\n// ---------------------------------------------------------------------------\n\n/**\n * Return a copy of `existing` with all MANAGED_ENV_KEYS removed,\n * so user-defined env vars are preserved when we overwrite managed ones.\n */\nfunction preserveUnmanagedEnv(existing: Record<string, string>): Record<string, string> {\n const preserved: Record<string, string> = {};\n for (const [key, value] of Object.entries(existing)) {\n if (!MANAGED_ENV_KEYS.has(key)) {\n preserved[key] = value;\n }\n }\n return preserved;\n}\n\n/**\n * Apply a resolved config to the global scope:\n * - env vars \u2192 ~/.claude/settings.json\n * - MCP servers \u2192 ~/.claude.json\n */\nexport function applyGlobalConfig(resolved: ResolvedConfig): void {\n const settings = readClaudeSettings();\n const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});\n\n const newSettings: ClaudeCodeSettings = {\n ...settings,\n env: { ...preservedEnv, ...filterForGlobal(resolved.env) },\n };\n\n // Set or clear allowedDirectories\n if (resolved.allowedDirectories.length > 0) {\n newSettings.allowedDirectories = resolved.allowedDirectories;\n } else {\n delete newSettings.allowedDirectories;\n }\n\n // Set or clear awsAuthRefresh\n if (resolved.awsAuthRefresh) {\n newSettings.awsAuthRefresh = resolved.awsAuthRefresh;\n } else {\n delete newSettings.awsAuthRefresh;\n }\n\n // Set or clear apiKeyHelper (1Password / op-read support)\n if (resolved.apiKeyHelper) {\n newSettings.apiKeyHelper = resolved.apiKeyHelper;\n } else {\n delete newSettings.apiKeyHelper;\n }\n\n // Clear deprecated env var keys\n if (newSettings.env) {\n delete newSettings.env['ANTHROPIC_MODEL'];\n delete newSettings.env['ANTHROPIC_SMALL_FAST_MODEL'];\n delete newSettings.env['ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION'];\n }\n\n writeClaudeSettings(newSettings);\n writeUserMcpServers(resolved.mcpServers);\n}\n\n/**\n * Remove managed env keys, allowedDirectories, and awsAuthRefresh from\n * {workspace}/.claude/settings.json so the project inherits from global.\n * Preserves any non-managed keys the user may have set.\n */\nexport function cleanProjectConfig(workspaceRoot: string): void {\n const settings = readProjectSettings(workspaceRoot);\n if (Object.keys(settings).length === 0) { return; } // nothing to clean\n\n // Remove managed env keys\n if (settings.env) {\n for (const key of MANAGED_ENV_KEYS) {\n delete settings.env[key];\n }\n if (Object.keys(settings.env).length === 0) {\n delete settings.env;\n }\n }\n\n // Remove fields we manage\n delete settings.allowedDirectories;\n delete settings.awsAuthRefresh;\n delete settings.apiKeyHelper;\n\n // Only write back if there's still content beyond $schema; otherwise leave file alone\n const remaining = Object.keys(settings).filter(k => k !== '$schema');\n if (remaining.length > 0) {\n writeProjectSettings(workspaceRoot, settings);\n } else {\n // File only has $schema (or nothing) \u2014 remove it to keep the project clean\n const filePath = getProjectSettingsPath(workspaceRoot);\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n}\n\n/**\n * Apply a resolved config to the project scope:\n * - env vars + directories \u2192 {workspace}/.claude/settings.json\n * - MCP servers \u2192 {workspace}/.mcp.json\n */\nexport function applyProjectConfig(\n resolved: ResolvedConfig,\n workspaceRoot: string\n): void {\n // Write env vars and directories to project-level settings\n const globalEnv = readClaudeSettings().env ?? {};\n const settings = readProjectSettings(workspaceRoot);\n const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});\n\n const newSettings: ClaudeCodeSettings = {\n ...settings,\n env: { ...preservedEnv, ...filterForProject(resolved.env, globalEnv) },\n };\n\n if (resolved.allowedDirectories.length > 0) {\n newSettings.allowedDirectories = resolved.allowedDirectories;\n } else {\n delete newSettings.allowedDirectories;\n }\n\n if (resolved.awsAuthRefresh) {\n newSettings.awsAuthRefresh = resolved.awsAuthRefresh;\n } else {\n delete newSettings.awsAuthRefresh;\n }\n\n if (resolved.apiKeyHelper) {\n newSettings.apiKeyHelper = resolved.apiKeyHelper;\n } else {\n delete newSettings.apiKeyHelper;\n }\n\n writeProjectSettings(workspaceRoot, newSettings);\n\n // Write MCP servers to .mcp.json\n writeProjectMcpServers(workspaceRoot, resolved.mcpServers);\n\n // If the workspace is a VS Code extension, ensure .mcp.json and .claude/\n // are listed in .vscodeignore so they don't end up in published VSIXs.\n ensureVscodeignore(workspaceRoot);\n}\n\n/**\n * Resolve and apply the active scope assignments from the store.\n */\nexport function applyAllScopes(\n store: ProfileStore,\n workspaceRoot: string | undefined\n): void {\n // Global scope\n if (store.globalScope.mode === 'preset' && store.globalScope.presetId) {\n const resolved = resolvePreset(store, store.globalScope.presetId);\n if (resolved) {\n applyGlobalConfig(resolved);\n }\n }\n\n // Workspace scope\n if (workspaceRoot) {\n const wsScope = store.workspaceScopes[workspaceRoot];\n if (wsScope) {\n if (wsScope.mode === 'preset' && wsScope.presetId) {\n const resolved = resolvePreset(store, wsScope.presetId);\n if (resolved) {\n applyProjectConfig(resolved, workspaceRoot);\n }\n }\n if (wsScope.mode === 'inherit') {\n cleanProjectConfig(workspaceRoot);\n }\n // 'manual' mode: user manages files themselves\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// .vscodeignore helper \u2014 prevent leaking generated config into published VSIXs\n// ---------------------------------------------------------------------------\n\nconst VSCODEIGNORE_ENTRIES = ['.mcp.json', '.claude/'];\n\nfunction ensureVscodeignore(workspaceRoot: string): void {\n const ignorePath = path.join(workspaceRoot, '.vscodeignore');\n if (!fs.existsSync(ignorePath)) { return; } // not a VS Code extension project\n try {\n let content = fs.readFileSync(ignorePath, 'utf8');\n const lines = content.split('\\n').map(l => l.trim());\n const missing = VSCODEIGNORE_ENTRIES.filter(e => !lines.includes(e));\n if (missing.length === 0) { return; }\n if (!content.endsWith('\\n')) { content += '\\n'; }\n content += missing.join('\\n') + '\\n';\n fs.writeFileSync(ignorePath, content, 'utf8');\n } catch { /* best effort \u2014 don't break save */ }\n}\n", "import { ProfileStore, ProviderProfile } from './types';\nimport { generateId } from './profiles';\n\n// ---------------------------------------------------------------------------\n// Credential scrubbing \u2014 real keys must never leave the machine on export.\n// Shared by the VS Code export command and the CLI `export` command.\n// ---------------------------------------------------------------------------\n\nconst CREDENTIAL_PATTERNS = [\n /sk-ant-[a-zA-Z0-9_-]{20,}/g,\n /sk-or-[a-zA-Z0-9_-]{20,}/g,\n /sk-proj-[a-zA-Z0-9_-]{20,}/g,\n /sk-live-[a-zA-Z0-9_-]{20,}/g,\n /AKIA[A-Z0-9]{16}/g,\n /ghp_[a-zA-Z0-9]{36,}/g,\n /gho_[a-zA-Z0-9]{36,}/g,\n /github_pat_[a-zA-Z0-9_]{20,}/g,\n /xoxb-[a-zA-Z0-9-]+/g,\n /xoxp-[a-zA-Z0-9-]+/g,\n];\n\nexport const PLACEHOLDER = '<REPLACE_ME>';\n\nconst SAFE_VALUES = new Set<string | undefined>([\n '', 'foobar', 'placeholder', 'dummy', 'local', 'Optional',\n 'your-key-here', 'xxx', undefined,\n]);\n\n/** Scrub known credential patterns from a string value. */\nexport function scrubValue(value: string | undefined): string | undefined {\n if (!value || SAFE_VALUES.has(value)) { return value; }\n // op:// references are 1Password pointers, not secrets \u2014 keep them.\n if (value.startsWith('op://')) { return value; }\n let scrubbed = value;\n for (const pattern of CREDENTIAL_PATTERNS) {\n pattern.lastIndex = 0;\n scrubbed = scrubbed.replace(pattern, PLACEHOLDER);\n }\n // If it still looks like a real key (long alphanumeric string), replace it\n if (scrubbed === value && value.length >= 20 && /^[a-zA-Z0-9_-]+$/.test(value)) {\n return PLACEHOLDER;\n }\n return scrubbed;\n}\n\n/** Deep-scrub a provider profile of all credential-like fields. */\nfunction scrubProvider(provider: ProviderProfile): ProviderProfile {\n return {\n ...provider,\n anthropicApiKey: scrubValue(provider.anthropicApiKey),\n proxyCredential: scrubValue(provider.proxyCredential),\n proxyApiKey: scrubValue(provider.proxyApiKey),\n proxyAuthToken: scrubValue(provider.proxyAuthToken),\n awsAuthRefresh: provider.awsAuthRefresh, // command, not a secret\n };\n}\n\n/** Scrub all credentials from a profile store for safe export. */\nexport function scrubStore(store: ProfileStore): ProfileStore {\n return {\n ...store,\n providers: store.providers.map(scrubProvider),\n };\n}\n\n/** Names of providers whose credentials are placeholders that need replacing. */\nexport function providersNeedingCredentials(store: ProfileStore): string[] {\n return store.providers\n .filter(p =>\n p.anthropicApiKey === PLACEHOLDER ||\n p.proxyCredential === PLACEHOLDER ||\n p.proxyApiKey === PLACEHOLDER ||\n p.proxyAuthToken === PLACEHOLDER\n )\n .map(p => p.name);\n}\n\n// ---------------------------------------------------------------------------\n// Import \u2014 parse + validate + merge. Shared by extension and CLI.\n// ---------------------------------------------------------------------------\n\n/** Parse and validate raw JSON into a ProfileStore. Throws on malformed input. */\nexport function parseIncomingStore(raw: string): ProfileStore {\n const incoming = JSON.parse(raw) as ProfileStore;\n if (!incoming.version || !incoming.providers || !incoming.presets) {\n throw new Error('Not a valid profile store');\n }\n return incoming;\n}\n\n/**\n * Merge an incoming store into a base store, re-generating all IDs to avoid\n * collisions and remapping preset \u2192 provider/group references. Mutates and\n * returns `base`.\n */\nexport function mergeIncomingStore(base: ProfileStore, incoming: ProfileStore): ProfileStore {\n const idMap = new Map<string, string>(); // old ID \u2192 new ID\n\n for (const provider of incoming.providers) {\n const newId = generateId();\n idMap.set(provider.id, newId);\n base.providers.push({ ...provider, id: newId });\n }\n\n for (const group of incoming.mcpGroups) {\n const newId = generateId();\n idMap.set(group.id, newId);\n base.mcpGroups.push({ ...group, id: newId });\n }\n\n for (const group of incoming.directoryGroups) {\n const newId = generateId();\n idMap.set(group.id, newId);\n base.directoryGroups.push({ ...group, id: newId });\n }\n\n for (const preset of incoming.presets) {\n const newId = generateId();\n base.presets.push({\n ...preset,\n id: newId,\n providerId: idMap.get(preset.providerId) ?? preset.providerId,\n mcpGroupIds: preset.mcpGroupIds.map(id => idMap.get(id) ?? id),\n directoryGroupIds: preset.directoryGroupIds.map(id => idMap.get(id) ?? id),\n });\n }\n\n return base;\n}\n", "// Public API of the Claude Code Personae engine \u2014 shared by the VS Code\n// extension and the CLI. Both bundle this source via esbuild.\nexport * from './types';\nexport * from './models';\nexport * from './profiles';\nexport * from './awsConfig';\nexport * from './claudeSettings';\nexport * from './claudeJson';\nexport * from './mcpJson';\nexport * from './resolver';\nexport * from './transfer';\n", "{\n \"name\": \"@easytocloud/claude-personae\",\n \"version\": \"0.2.1\",\n \"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.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easytocloud/bedrock-claude-code\",\n \"directory\": \"cli\"\n },\n \"homepage\": \"https://github.com/easytocloud/bedrock-claude-code#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/easytocloud/bedrock-claude-code/issues\"\n },\n \"keywords\": [\n \"claude\",\n \"claude-code\",\n \"aws\",\n \"bedrock\",\n \"anthropic\",\n \"cli\",\n \"presets\",\n \"proxy\"\n ],\n \"bin\": {\n \"claude-personae\": \"dist/cli.js\",\n \"ccp\": \"dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"build\": \"node esbuild.js\",\n \"watch\": \"node esbuild.js --watch\",\n \"prepublishOnly\": \"node esbuild.js\"\n },\n \"devDependencies\": {\n \"@easytocloud/claude-personae-core\": \"*\",\n \"@types/node\": \"^20.0.0\",\n \"esbuild\": \"^0.25.0\",\n \"typescript\": \"^5.6.0\"\n }\n}\n", "import * as fs from 'fs';\nimport * as path from 'path';\nimport { parseArgs } from 'util';\nimport {\n readProfileStore,\n writeProfileStore,\n ensureDefaults,\n applyAllScopes,\n resolvePreset,\n applyGlobalConfig,\n applyProjectConfig,\n cleanProjectConfig,\n ensureOnboardingComplete,\n findPresetByNameOrId,\n scrubStore,\n PLACEHOLDER,\n parseIncomingStore,\n mergeIncomingStore,\n providersNeedingCredentials,\n ProfileStore,\n ScopeAssignment,\n Preset,\n} from '@easytocloud/claude-personae-core';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst VERSION: string = require('../package.json').version;\n\nconst HELP = `claude-personae (ccp) \u2014 switch Claude Code provider presets from the shell\n\nOperates on the same profile store as the \"Claude Code Personae\" VS Code\nextension (~/.claude/coder-profiles.json). Use the extension to author\nproviders/presets; use this CLI to switch and apply them.\n\nUSAGE\n ccp <command> [options]\n\nCOMMANDS\n list [presets|providers|scopes] List configured items (default: all)\n current Show the active global + workspace preset\n switch <preset> [scope] Set the active preset and apply it\n apply Re-apply the global + current-workspace scopes\n sync Re-apply EVERY known workspace assignment\n export Print the store as JSON (credentials scrubbed)\n import <file|-> Import a store from a file or stdin\n\nSCOPE (for \\`switch\\`)\n --global, -g Set the global preset (default)\n --workspace, -w Set the preset for a workspace (uses CWD)\n --path <dir> Workspace directory to target (implies --workspace)\n --inherit Workspace inherits the global preset (clears overrides)\n --manual Workspace is managed manually (CLI leaves files alone)\n\nOPTIONS\n --json Machine-readable JSON output (list, current)\n --out, -o <file> Write export to a file instead of stdout\n --no-scrub Export without scrubbing credentials (dangerous)\n --mode <merge|replace> Import mode (default: merge)\n --dry-run Preview only \u2014 show what \\`sync\\` would change, write nothing\n --help, -h Show this help\n --version, -v Show version\n\nEXAMPLES\n ccp list presets\n ccp switch bedrock-prod # set global preset\n ccp switch dev --workspace # set preset for the current project\n ccp switch --workspace --inherit # project inherits global again\n ccp apply # reprovision the current project's config\n ccp sync # re-apply every workspace after editing a preset\n ccp sync --dry-run # preview what sync would rewrite\n ccp export -o presets.json\n cat presets.json | ccp import - --mode replace\n`;\n\nfunction fail(msg: string): never {\n process.stderr.write(`error: ${msg}\\n`);\n process.exit(1);\n}\n\nfunction providerName(store: ProfileStore, providerId: string): string {\n return store.providers.find(p => p.id === providerId)?.name ?? '(unknown provider)';\n}\n\nfunction describeScope(store: ProfileStore, scope: ScopeAssignment | undefined): string {\n if (!scope) { return 'not set'; }\n if (scope.mode === 'manual') { return 'manual (CLI/GUI leave files alone)'; }\n if (scope.mode === 'inherit') { return 'inherit from global'; }\n const preset = scope.presetId ? store.presets.find(p => p.id === scope.presetId) : undefined;\n return preset ? `${preset.name} \u2192 ${providerName(store, preset.providerId)}` : '(preset missing)';\n}\n\nfunction resolvePresetArg(store: ProfileStore, query: string | undefined): Preset {\n if (!query) { fail('a preset name or id is required'); }\n const preset = findPresetByNameOrId(store, query);\n if (!preset) {\n const names = store.presets.map(p => p.name).join(', ');\n fail(`no preset matching \"${query}\". Available: ${names || '(none)'}`);\n }\n return preset;\n}\n\n// ---------------------------------------------------------------------------\n\ntype Values = ReturnType<typeof parse>['values'];\n\nfunction parse(argv: string[]) {\n return parseArgs({\n args: argv,\n allowPositionals: true,\n options: {\n json: { type: 'boolean', default: false },\n global: { type: 'boolean', short: 'g', default: false },\n workspace: { type: 'boolean', short: 'w', default: false },\n path: { type: 'string' },\n inherit: { type: 'boolean', default: false },\n manual: { type: 'boolean', default: false },\n mode: { type: 'string' },\n 'dry-run': { type: 'boolean', default: false },\n out: { type: 'string', short: 'o' },\n 'no-scrub': { type: 'boolean', default: false },\n help: { type: 'boolean', short: 'h', default: false },\n version: { type: 'boolean', short: 'v', default: false },\n },\n });\n}\n\nfunction workspaceDir(values: Values): string {\n return values.path ? path.resolve(String(values.path)) : process.cwd();\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\nfunction cmdList(store: ProfileStore, what: string | undefined, values: Values): void {\n const which = what ?? 'all';\n if (values.json) {\n const out: Record<string, unknown> = {};\n if (which === 'all' || which === 'presets') { out.presets = store.presets; }\n if (which === 'all' || which === 'providers') { out.providers = store.providers.map(p => ({ id: p.id, name: p.name, type: p.type })); }\n if (which === 'all' || which === 'scopes') { out.globalScope = store.globalScope; out.workspaceScopes = store.workspaceScopes; }\n process.stdout.write(JSON.stringify(out, null, 2) + '\\n');\n return;\n }\n\n if (which === 'all' || which === 'providers') {\n process.stdout.write('Providers:\\n');\n for (const p of store.providers) {\n process.stdout.write(` ${p.name} [${p.type}]\\n`);\n }\n process.stdout.write('\\n');\n }\n if (which === 'all' || which === 'presets') {\n process.stdout.write('Presets:\\n');\n for (const p of store.presets) {\n const bits = [`provider ${providerName(store, p.providerId)}`];\n if (p.mcpGroupIds.length) { bits.push(`${p.mcpGroupIds.length} MCP group(s)`); }\n if (p.directoryGroupIds.length) { bits.push(`${p.directoryGroupIds.length} dir group(s)`); }\n process.stdout.write(` ${p.name} \u2014 ${bits.join(' \u00B7 ')}\\n`);\n }\n process.stdout.write('\\n');\n }\n if (which === 'all' || which === 'scopes') {\n process.stdout.write('Scopes:\\n');\n process.stdout.write(` global: ${describeScope(store, store.globalScope)}\\n`);\n for (const [ws, scope] of Object.entries(store.workspaceScopes)) {\n process.stdout.write(` ${ws}: ${describeScope(store, scope)}\\n`);\n }\n }\n}\n\nfunction cmdCurrent(store: ProfileStore, values: Values): void {\n const ws = workspaceDir(values);\n const wsScope = store.workspaceScopes[ws];\n if (values.json) {\n process.stdout.write(JSON.stringify({\n global: store.globalScope,\n workspace: { path: ws, scope: wsScope ?? null },\n }, null, 2) + '\\n');\n return;\n }\n process.stdout.write(`global: ${describeScope(store, store.globalScope)}\\n`);\n process.stdout.write(`workspace: ${describeScope(store, wsScope)} (${ws})\\n`);\n}\n\nfunction cmdSwitch(store: ProfileStore, presetArg: string | undefined, values: Values): void {\n const toWorkspace = values.workspace || values.path !== undefined || values.inherit || values.manual;\n\n if (toWorkspace && !values.global) {\n const ws = workspaceDir(values);\n let scope: ScopeAssignment;\n let summary: string;\n if (values.inherit) {\n scope = { mode: 'inherit' };\n summary = 'inherit from global';\n } else if (values.manual) {\n scope = { mode: 'manual' };\n summary = 'manual';\n } else {\n const preset = resolvePresetArg(store, presetArg);\n scope = { mode: 'preset', presetId: preset.id };\n summary = `${preset.name} \u2192 ${providerName(store, preset.providerId)}`;\n }\n store.workspaceScopes[ws] = scope;\n writeProfileStore(store);\n ensureOnboardingComplete();\n applyAllScopes(store, ws);\n process.stdout.write(`workspace (${ws}): ${summary}\\n`);\n return;\n }\n\n // Global (default)\n const preset = resolvePresetArg(store, presetArg);\n store.globalScope = { mode: 'preset', presetId: preset.id };\n writeProfileStore(store);\n ensureOnboardingComplete();\n applyAllScopes(store, undefined);\n process.stdout.write(`global: ${preset.name} \u2192 ${providerName(store, preset.providerId)}\\n`);\n}\n\nfunction cmdApply(store: ProfileStore, values: Values): void {\n const ws = workspaceDir(values);\n ensureOnboardingComplete();\n applyAllScopes(store, ws);\n process.stdout.write(`applied \u2014 global: ${describeScope(store, store.globalScope)}\\n`);\n process.stdout.write(` workspace (${ws}): ${describeScope(store, store.workspaceScopes[ws])}\\n`);\n}\n\nfunction cmdSync(store: ProfileStore, values: Values): void {\n const dryRun = Boolean(values['dry-run']);\n\n // Global scope\n if (store.globalScope.mode === 'preset' && store.globalScope.presetId) {\n const resolved = resolvePreset(store, store.globalScope.presetId);\n if (!resolved) {\n process.stderr.write(`global: preset missing \u2014 skipped\\n`);\n } else {\n if (!dryRun) { ensureOnboardingComplete(); applyGlobalConfig(resolved); }\n process.stdout.write(`${dryRun ? 'would apply' : 'applied'} global: ${describeScope(store, store.globalScope)}\\n`);\n }\n } else {\n process.stdout.write(`(skip) global: ${describeScope(store, store.globalScope)}\\n`);\n }\n\n const entries = Object.entries(store.workspaceScopes);\n if (entries.length === 0) {\n process.stdout.write('no workspace assignments to sync.\\n');\n return;\n }\n\n let applied = 0;\n let skipped = 0;\n let missing = 0;\n\n for (const [ws, scope] of entries) {\n const desc = describeScope(store, scope);\n\n if (!fs.existsSync(ws)) {\n process.stderr.write(`(missing) ${ws}: ${desc}\\n`);\n missing++;\n continue;\n }\n if (scope.mode === 'manual') {\n process.stdout.write(`(manual) ${ws}: left untouched\\n`);\n skipped++;\n continue;\n }\n if (scope.mode === 'inherit') {\n if (!dryRun) { cleanProjectConfig(ws); }\n process.stdout.write(`${dryRun ? 'would clear' : 'cleared '} ${ws}: inherit from global\\n`);\n applied++;\n continue;\n }\n // preset\n const resolved = scope.presetId ? resolvePreset(store, scope.presetId) : null;\n if (!resolved) {\n process.stderr.write(`(skip) ${ws}: preset missing\\n`);\n skipped++;\n continue;\n }\n if (!dryRun) { applyProjectConfig(resolved, ws); }\n process.stdout.write(`${dryRun ? 'would apply' : 'applied '} ${ws}: ${desc}\\n`);\n applied++;\n }\n\n const verb = dryRun ? 'would sync' : 'synced';\n process.stdout.write(\n `\\n${verb} ${applied} workspace(s)` +\n (skipped ? `, ${skipped} skipped` : '') +\n (missing ? `, ${missing} with missing directory` : '') +\n '.\\n'\n );\n}\n\nfunction cmdExport(store: ProfileStore, values: Values): void {\n const out = values['no-scrub'] ? store : scrubStore(store);\n const content = JSON.stringify(out, null, 2) + '\\n';\n if (values.out) {\n fs.writeFileSync(String(values.out), content, 'utf8');\n process.stderr.write(`exported to ${values.out}\\n`);\n } else {\n process.stdout.write(content);\n }\n if (!values['no-scrub'] && content.includes(PLACEHOLDER)) {\n process.stderr.write(`note: credentials were replaced with ${PLACEHOLDER} \u2014 recipients must fill in their own.\\n`);\n }\n}\n\nfunction cmdImport(src: string | undefined, values: Values): void {\n if (!src) { fail('import requires a file path or \"-\" for stdin'); }\n let raw: string;\n try {\n raw = src === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(src, 'utf8');\n } catch (err) {\n fail(`cannot read ${src}: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n let incoming: ProfileStore;\n try {\n incoming = parseIncomingStore(raw);\n } catch (err) {\n fail(`import failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const mode = String(values.mode ?? 'merge');\n if (mode !== 'merge' && mode !== 'replace') { fail(`--mode must be \"merge\" or \"replace\"`); }\n\n if (mode === 'replace') {\n const store = ensureDefaults(incoming);\n writeProfileStore(store);\n process.stdout.write('presets replaced from import.\\n');\n return;\n }\n\n const store = mergeIncomingStore(readProfileStore(), incoming);\n writeProfileStore(store);\n process.stdout.write(\n `imported ${incoming.presets.length} preset(s), ${incoming.providers.length} provider(s), ` +\n `${incoming.mcpGroups.length} MCP group(s), ${incoming.directoryGroups.length} directory group(s).\\n`\n );\n const placeholders = providersNeedingCredentials(store);\n if (placeholders.length > 0) {\n process.stderr.write(`note: these providers have placeholder credentials to replace: ${placeholders.join(', ')}\\n`);\n }\n}\n\n// ---------------------------------------------------------------------------\n\nfunction main(): void {\n let parsed: ReturnType<typeof parse>;\n try {\n parsed = parse(process.argv.slice(2));\n } catch (err) {\n fail(err instanceof Error ? err.message : String(err));\n }\n const { values, positionals } = parsed;\n\n if (values.version) { process.stdout.write(`${VERSION}\\n`); return; }\n\n const command = positionals[0];\n if (!command || values.help) { process.stdout.write(HELP); return; }\n\n const store = readProfileStore();\n\n switch (command) {\n case 'list': cmdList(store, positionals[1], values); break;\n case 'current': cmdCurrent(store, values); break;\n case 'switch': cmdSwitch(store, positionals[1], values); break;\n case 'apply': cmdApply(store, values); break;\n case 'sync': cmdSync(store, values); break;\n case 'export': cmdExport(store, values); break;\n case 'import': cmdImport(positionals[1], values); break;\n case 'help': process.stdout.write(HELP); break;\n default: fail(`unknown command \"${command}\". Run \\`ccp --help\\`.`);\n }\n}\n\nmain();\n"],
5
+ "mappings": "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",
6
+ "names": ["exports", "exports", "ensureDefaults", "readProfileStore", "findPresetByNameOrId", "writeProfileStore", "fs", "path", "exports", "fs", "path", "exports", "fs", "path", "exports", "ensureOnboardingComplete", "fs", "path", "exports", "fs", "path", "exports", "resolvePreset", "applyGlobalConfig", "cleanProjectConfig", "applyProjectConfig", "applyAllScopes", "fs", "path", "exports", "scrubStore", "providersNeedingCredentials", "parseIncomingStore", "mergeIncomingStore", "exports", "exports", "module", "preset", "store"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easytocloud/claude-personae",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "CLI to switch Claude Code provider presets (AWS Bedrock / Anthropic / proxy) — companion to the Claude Code Personae VS Code extension. Operates on the same ~/.claude profile store.",
5
5
  "license": "MIT",
6
6
  "repository": {