@easytocloud/claude-personae 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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;
@@ -878,7 +878,7 @@ var require_resolver = __commonJS({
878
878
  }
879
879
  return preserved;
880
880
  }
881
- function applyGlobalConfig(resolved) {
881
+ function applyGlobalConfig2(resolved) {
882
882
  const settings = (0, claudeSettings_1.readClaudeSettings)();
883
883
  const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});
884
884
  const newSettings = {
@@ -908,7 +908,7 @@ var require_resolver = __commonJS({
908
908
  (0, claudeSettings_1.writeClaudeSettings)(newSettings);
909
909
  (0, claudeJson_1.writeUserMcpServers)(resolved.mcpServers);
910
910
  }
911
- function cleanProjectConfig(workspaceRoot) {
911
+ function cleanProjectConfig2(workspaceRoot) {
912
912
  const settings = (0, claudeSettings_1.readProjectSettings)(workspaceRoot);
913
913
  if (Object.keys(settings).length === 0) {
914
914
  return;
@@ -934,7 +934,7 @@ var require_resolver = __commonJS({
934
934
  }
935
935
  }
936
936
  }
937
- function applyProjectConfig(resolved, workspaceRoot) {
937
+ function applyProjectConfig2(resolved, workspaceRoot) {
938
938
  const globalEnv = (0, claudeSettings_1.readClaudeSettings)().env ?? {};
939
939
  const settings = (0, claudeSettings_1.readProjectSettings)(workspaceRoot);
940
940
  const preservedEnv = preserveUnmanagedEnv(settings.env ?? {});
@@ -963,22 +963,22 @@ var require_resolver = __commonJS({
963
963
  }
964
964
  function applyAllScopes2(store, workspaceRoot) {
965
965
  if (store.globalScope.mode === "preset" && store.globalScope.presetId) {
966
- const resolved = resolvePreset(store, store.globalScope.presetId);
966
+ const resolved = resolvePreset2(store, store.globalScope.presetId);
967
967
  if (resolved) {
968
- applyGlobalConfig(resolved);
968
+ applyGlobalConfig2(resolved);
969
969
  }
970
970
  }
971
971
  if (workspaceRoot) {
972
972
  const wsScope = store.workspaceScopes[workspaceRoot];
973
973
  if (wsScope) {
974
974
  if (wsScope.mode === "preset" && wsScope.presetId) {
975
- const resolved = resolvePreset(store, wsScope.presetId);
975
+ const resolved = resolvePreset2(store, wsScope.presetId);
976
976
  if (resolved) {
977
- applyProjectConfig(resolved, workspaceRoot);
977
+ applyProjectConfig2(resolved, workspaceRoot);
978
978
  }
979
979
  }
980
980
  if (wsScope.mode === "inherit") {
981
- cleanProjectConfig(workspaceRoot);
981
+ cleanProjectConfig2(workspaceRoot);
982
982
  }
983
983
  }
984
984
  }
@@ -1157,7 +1157,7 @@ var require_package = __commonJS({
1157
1157
  "package.json"(exports2, module2) {
1158
1158
  module2.exports = {
1159
1159
  name: "@easytocloud/claude-personae",
1160
- version: "0.1.0",
1160
+ version: "0.2.0",
1161
1161
  description: "CLI to switch Claude Code provider presets (AWS Bedrock / Anthropic / proxy) \u2014 companion to the Claude Code Personae VS Code extension. Operates on the same ~/.claude profile store.",
1162
1162
  license: "MIT",
1163
1163
  repository: {
@@ -1224,7 +1224,8 @@ COMMANDS
1224
1224
  list [presets|providers|scopes] List configured items (default: all)
1225
1225
  current Show the active global + workspace preset
1226
1226
  switch <preset> [scope] Set the active preset and apply it
1227
- apply Re-apply the stored scopes to disk
1227
+ apply Re-apply the global + current-workspace scopes
1228
+ sync Re-apply EVERY known workspace assignment
1228
1229
  export Print the store as JSON (credentials scrubbed)
1229
1230
  import <file|-> Import a store from a file or stdin
1230
1231
 
@@ -1240,6 +1241,7 @@ OPTIONS
1240
1241
  --out, -o <file> Write export to a file instead of stdout
1241
1242
  --no-scrub Export without scrubbing credentials (dangerous)
1242
1243
  --mode <merge|replace> Import mode (default: merge)
1244
+ --dry-run Preview only \u2014 show what \`sync\` would change, write nothing
1243
1245
  --help, -h Show this help
1244
1246
  --version, -v Show version
1245
1247
 
@@ -1248,7 +1250,9 @@ EXAMPLES
1248
1250
  ccp switch bedrock-prod # set global preset
1249
1251
  ccp switch dev --workspace # set preset for the current project
1250
1252
  ccp switch --workspace --inherit # project inherits global again
1251
- ccp apply # reprovision config files from the store
1253
+ ccp apply # reprovision the current project's config
1254
+ ccp sync # re-apply every workspace after editing a preset
1255
+ ccp sync --dry-run # preview what sync would rewrite
1252
1256
  ccp export -o presets.json
1253
1257
  cat presets.json | ccp import - --mode replace
1254
1258
  `;
@@ -1296,6 +1300,7 @@ function parse(argv) {
1296
1300
  inherit: { type: "boolean", default: false },
1297
1301
  manual: { type: "boolean", default: false },
1298
1302
  mode: { type: "string" },
1303
+ "dry-run": { type: "boolean", default: false },
1299
1304
  out: { type: "string", short: "o" },
1300
1305
  "no-scrub": { type: "boolean", default: false },
1301
1306
  help: { type: "boolean", short: "h", default: false },
@@ -1413,6 +1418,76 @@ function cmdApply(store, values) {
1413
1418
  process.stdout.write(` workspace (${ws}): ${describeScope(store, store.workspaceScopes[ws])}
1414
1419
  `);
1415
1420
  }
1421
+ function cmdSync(store, values) {
1422
+ const dryRun = Boolean(values["dry-run"]);
1423
+ if (store.globalScope.mode === "preset" && store.globalScope.presetId) {
1424
+ const resolved = (0, import_claude_personae_core.resolvePreset)(store, store.globalScope.presetId);
1425
+ if (!resolved) {
1426
+ process.stderr.write(`global: preset missing \u2014 skipped
1427
+ `);
1428
+ } else {
1429
+ if (!dryRun) {
1430
+ (0, import_claude_personae_core.ensureOnboardingComplete)();
1431
+ (0, import_claude_personae_core.applyGlobalConfig)(resolved);
1432
+ }
1433
+ process.stdout.write(`${dryRun ? "would apply" : "applied"} global: ${describeScope(store, store.globalScope)}
1434
+ `);
1435
+ }
1436
+ } else {
1437
+ process.stdout.write(`(skip) global: ${describeScope(store, store.globalScope)}
1438
+ `);
1439
+ }
1440
+ const entries = Object.entries(store.workspaceScopes);
1441
+ if (entries.length === 0) {
1442
+ process.stdout.write("no workspace assignments to sync.\n");
1443
+ return;
1444
+ }
1445
+ let applied = 0;
1446
+ let skipped = 0;
1447
+ let missing = 0;
1448
+ for (const [ws, scope] of entries) {
1449
+ const desc = describeScope(store, scope);
1450
+ if (!fs.existsSync(ws)) {
1451
+ process.stderr.write(`(missing) ${ws}: ${desc}
1452
+ `);
1453
+ missing++;
1454
+ continue;
1455
+ }
1456
+ if (scope.mode === "manual") {
1457
+ process.stdout.write(`(manual) ${ws}: left untouched
1458
+ `);
1459
+ skipped++;
1460
+ continue;
1461
+ }
1462
+ if (scope.mode === "inherit") {
1463
+ if (!dryRun) {
1464
+ (0, import_claude_personae_core.cleanProjectConfig)(ws);
1465
+ }
1466
+ process.stdout.write(`${dryRun ? "would clear" : "cleared "} ${ws}: inherit from global
1467
+ `);
1468
+ applied++;
1469
+ continue;
1470
+ }
1471
+ const resolved = scope.presetId ? (0, import_claude_personae_core.resolvePreset)(store, scope.presetId) : null;
1472
+ if (!resolved) {
1473
+ process.stderr.write(`(skip) ${ws}: preset missing
1474
+ `);
1475
+ skipped++;
1476
+ continue;
1477
+ }
1478
+ if (!dryRun) {
1479
+ (0, import_claude_personae_core.applyProjectConfig)(resolved, ws);
1480
+ }
1481
+ process.stdout.write(`${dryRun ? "would apply" : "applied "} ${ws}: ${desc}
1482
+ `);
1483
+ applied++;
1484
+ }
1485
+ const verb = dryRun ? "would sync" : "synced";
1486
+ process.stdout.write(
1487
+ `
1488
+ ${verb} ${applied} workspace(s)` + (skipped ? `, ${skipped} skipped` : "") + (missing ? `, ${missing} with missing directory` : "") + ".\n"
1489
+ );
1490
+ }
1416
1491
  function cmdExport(store, values) {
1417
1492
  const out = values["no-scrub"] ? store : (0, import_claude_personae_core.scrubStore)(store);
1418
1493
  const content = JSON.stringify(out, null, 2) + "\n";
@@ -1498,6 +1573,9 @@ function main() {
1498
1573
  case "apply":
1499
1574
  cmdApply(store, values);
1500
1575
  break;
1576
+ case "sync":
1577
+ cmdSync(store, values);
1578
+ break;
1501
1579
  case "export":
1502
1580
  cmdExport(store, values);
1503
1581
  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 // 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.2.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 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.0",
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": {