claudegate 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/bin/cc.js +3 -0
  4. package/bin/claudegate.js +3 -0
  5. package/dist/index.d.ts +3 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +76 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/providers/index.d.ts +2 -0
  10. package/dist/providers/index.d.ts.map +1 -0
  11. package/dist/providers/index.js +2 -0
  12. package/dist/providers/index.js.map +1 -0
  13. package/dist/providers/registry.d.ts +10 -0
  14. package/dist/providers/registry.d.ts.map +1 -0
  15. package/dist/providers/registry.js +306 -0
  16. package/dist/providers/registry.js.map +1 -0
  17. package/dist/services/config.service.d.ts +11 -0
  18. package/dist/services/config.service.d.ts.map +1 -0
  19. package/dist/services/config.service.js +33 -0
  20. package/dist/services/config.service.js.map +1 -0
  21. package/dist/services/env-builder.service.d.ts +31 -0
  22. package/dist/services/env-builder.service.d.ts.map +1 -0
  23. package/dist/services/env-builder.service.js +73 -0
  24. package/dist/services/env-builder.service.js.map +1 -0
  25. package/dist/services/launcher.service.d.ts +7 -0
  26. package/dist/services/launcher.service.d.ts.map +1 -0
  27. package/dist/services/launcher.service.js +37 -0
  28. package/dist/services/launcher.service.js.map +1 -0
  29. package/dist/services/model.service.d.ts +46 -0
  30. package/dist/services/model.service.d.ts.map +1 -0
  31. package/dist/services/model.service.js +164 -0
  32. package/dist/services/model.service.js.map +1 -0
  33. package/dist/services/profile.service.d.ts +38 -0
  34. package/dist/services/profile.service.d.ts.map +1 -0
  35. package/dist/services/profile.service.js +107 -0
  36. package/dist/services/profile.service.js.map +1 -0
  37. package/dist/types/config.d.ts +42 -0
  38. package/dist/types/config.d.ts.map +1 -0
  39. package/dist/types/config.js +32 -0
  40. package/dist/types/config.js.map +1 -0
  41. package/dist/types/index.d.ts +4 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/index.js +4 -0
  44. package/dist/types/index.js.map +1 -0
  45. package/dist/types/profile.d.ts +29 -0
  46. package/dist/types/profile.d.ts.map +1 -0
  47. package/dist/types/profile.js +2 -0
  48. package/dist/types/profile.js.map +1 -0
  49. package/dist/types/provider.d.ts +64 -0
  50. package/dist/types/provider.d.ts.map +1 -0
  51. package/dist/types/provider.js +24 -0
  52. package/dist/types/provider.js.map +1 -0
  53. package/dist/ui/add-profile.d.ts +7 -0
  54. package/dist/ui/add-profile.d.ts.map +1 -0
  55. package/dist/ui/add-profile.js +67 -0
  56. package/dist/ui/add-profile.js.map +1 -0
  57. package/dist/ui/components/banner.d.ts +5 -0
  58. package/dist/ui/components/banner.d.ts.map +1 -0
  59. package/dist/ui/components/banner.js +14 -0
  60. package/dist/ui/components/banner.js.map +1 -0
  61. package/dist/ui/components/status.d.ts +6 -0
  62. package/dist/ui/components/status.d.ts.map +1 -0
  63. package/dist/ui/components/status.js +17 -0
  64. package/dist/ui/components/status.js.map +1 -0
  65. package/dist/ui/manage-profiles.d.ts +6 -0
  66. package/dist/ui/manage-profiles.d.ts.map +1 -0
  67. package/dist/ui/manage-profiles.js +197 -0
  68. package/dist/ui/manage-profiles.js.map +1 -0
  69. package/dist/ui/model-selector.d.ts +19 -0
  70. package/dist/ui/model-selector.d.ts.map +1 -0
  71. package/dist/ui/model-selector.js +127 -0
  72. package/dist/ui/model-selector.js.map +1 -0
  73. package/dist/ui/profile-form.d.ts +10 -0
  74. package/dist/ui/profile-form.d.ts.map +1 -0
  75. package/dist/ui/profile-form.js +61 -0
  76. package/dist/ui/profile-form.js.map +1 -0
  77. package/dist/ui/profile-selector.d.ts +27 -0
  78. package/dist/ui/profile-selector.d.ts.map +1 -0
  79. package/dist/ui/profile-selector.js +129 -0
  80. package/dist/ui/profile-selector.js.map +1 -0
  81. package/dist/utils/logger.d.ts +7 -0
  82. package/dist/utils/logger.d.ts.map +1 -0
  83. package/dist/utils/logger.js +8 -0
  84. package/dist/utils/logger.js.map +1 -0
  85. package/dist/utils/paths.d.ts +10 -0
  86. package/dist/utils/paths.d.ts.map +1 -0
  87. package/dist/utils/paths.js +21 -0
  88. package/dist/utils/paths.js.map +1 -0
  89. package/package.json +109 -0
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @module Configuration Types
3
+ * @description Type definitions for application configuration.
4
+ *
5
+ * ClaudeGate stores its configuration in ~/.claudegate/config.json.
6
+ * The configuration includes:
7
+ * - Application version
8
+ * - Active profile ID
9
+ * - List of user-created profiles
10
+ * - Application settings
11
+ *
12
+ * @example
13
+ * // Configuration structure
14
+ * const config: AppConfig = {
15
+ * version: '1.0.0',
16
+ * activeProfileId: 'uuid-here',
17
+ * profiles: [...],
18
+ * settings: { timeout: 3000000 }
19
+ * };
20
+ */
21
+ /**
22
+ * Default configuration for new installations
23
+ */
24
+ export const DEFAULT_CONFIG = {
25
+ version: '1.0.0',
26
+ activeProfileId: null,
27
+ profiles: [],
28
+ settings: {
29
+ timeout: 3000000,
30
+ },
31
+ };
32
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAsBH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,OAAO,EAAE,OAAO;IAChB,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO;KACjB;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './provider.js';
2
+ export * from './profile.js';
3
+ export * from './config.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './provider.js';
2
+ export * from './profile.js';
3
+ export * from './config.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Selected model for a specific tier
3
+ */
4
+ export interface SelectedModel {
5
+ id: string;
6
+ name: string;
7
+ }
8
+ /**
9
+ * Three-tier model selection (Haiku, Sonnet, Opus)
10
+ */
11
+ export interface SelectedModels {
12
+ haiku?: SelectedModel;
13
+ sonnet?: SelectedModel;
14
+ opus?: SelectedModel;
15
+ lastFetched?: string;
16
+ }
17
+ /**
18
+ * User-created profile configuration
19
+ */
20
+ export interface Profile {
21
+ id: string;
22
+ name: string;
23
+ providerId: string;
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ envVars: Record<string, string>;
27
+ selectedModels?: SelectedModels;
28
+ }
29
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/types/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/types/profile.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @module Provider Types
3
+ * @description Type definitions for AI provider configurations.
4
+ *
5
+ * The provider system allows ClaudeGate to support multiple AI backends.
6
+ * Each provider defines:
7
+ * - Required/optional environment variables
8
+ * - Default values for configuration
9
+ * - Display metadata (name, description, color)
10
+ *
11
+ * @example
12
+ * // Provider definition structure
13
+ * const provider: ProviderDefinition = {
14
+ * id: 'my-provider',
15
+ * name: 'My Provider',
16
+ * description: 'Custom AI provider',
17
+ * color: '#FF0000',
18
+ * envVars: [
19
+ * { name: 'API_KEY', label: 'API Key', type: 'apiKey', sensitive: true, required: true }
20
+ * ]
21
+ * };
22
+ */
23
+ /**
24
+ * Specification for an environment variable required/optional for a provider
25
+ */
26
+ export interface EnvVarSpec {
27
+ name: string;
28
+ label: string;
29
+ description: string;
30
+ type: 'apiKey' | 'url' | 'string' | 'number';
31
+ sensitive: boolean;
32
+ default?: string | number;
33
+ required: boolean;
34
+ }
35
+ /**
36
+ * Configuration for dynamic model fetching
37
+ */
38
+ export interface ModelFetchConfig {
39
+ supported: boolean;
40
+ endpoint?: string;
41
+ authKeyEnvVar?: string;
42
+ }
43
+ /**
44
+ * Fallback model when API fetch fails
45
+ */
46
+ export interface FallbackModel {
47
+ id: string;
48
+ name: string;
49
+ tier: 'haiku' | 'sonnet' | 'opus';
50
+ }
51
+ /**
52
+ * Definition of a supported AI provider
53
+ */
54
+ export interface ProviderDefinition {
55
+ id: string;
56
+ name: string;
57
+ description: string;
58
+ color: string;
59
+ envVars: EnvVarSpec[];
60
+ useExistingConfig?: boolean;
61
+ modelFetching?: ModelFetchConfig;
62
+ fallbackModels?: FallbackModel[];
63
+ }
64
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IAEtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IAEjC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @module Provider Types
3
+ * @description Type definitions for AI provider configurations.
4
+ *
5
+ * The provider system allows ClaudeGate to support multiple AI backends.
6
+ * Each provider defines:
7
+ * - Required/optional environment variables
8
+ * - Default values for configuration
9
+ * - Display metadata (name, description, color)
10
+ *
11
+ * @example
12
+ * // Provider definition structure
13
+ * const provider: ProviderDefinition = {
14
+ * id: 'my-provider',
15
+ * name: 'My Provider',
16
+ * description: 'Custom AI provider',
17
+ * color: '#FF0000',
18
+ * envVars: [
19
+ * { name: 'API_KEY', label: 'API Key', type: 'apiKey', sensitive: true, required: true }
20
+ * ]
21
+ * };
22
+ */
23
+ export {};
24
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
@@ -0,0 +1,7 @@
1
+ import type { Profile } from '../types/index.js';
2
+ /**
3
+ * Flow for adding a new profile
4
+ * Returns the created profile or null if cancelled
5
+ */
6
+ export declare function addProfileFlow(): Promise<Profile | null>;
7
+ //# sourceMappingURL=add-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-profile.d.ts","sourceRoot":"","sources":["../../src/ui/add-profile.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,mBAAmB,CAAC;AAEjE;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAqE9D"}
@@ -0,0 +1,67 @@
1
+ import { select } from '@inquirer/prompts';
2
+ import chalk from 'chalk';
3
+ import { PROVIDERS, getProviderById } from '../providers/index.js';
4
+ import { createProfile, setActiveProfile } from '../services/profile.service.js';
5
+ import { hasFallbackModels } from '../services/model.service.js';
6
+ import { promptProfileName, promptEnvVars } from './profile-form.js';
7
+ import { selectModels } from './model-selector.js';
8
+ import { showSuccess } from './components/status.js';
9
+ /**
10
+ * Flow for adding a new profile
11
+ * Returns the created profile or null if cancelled
12
+ */
13
+ export async function addProfileFlow() {
14
+ console.log();
15
+ // 1. Select provider
16
+ const providerId = await select({
17
+ message: 'Select provider:',
18
+ choices: PROVIDERS.map((p) => ({
19
+ name: `${p.name}`,
20
+ value: p.id,
21
+ description: p.description,
22
+ })),
23
+ });
24
+ const provider = getProviderById(providerId);
25
+ if (!provider)
26
+ return null;
27
+ console.log();
28
+ // 2. Enter profile name
29
+ const name = await promptProfileName();
30
+ // 3. Enter env vars (if any)
31
+ let envVars = {};
32
+ if (provider.envVars.length > 0) {
33
+ console.log();
34
+ console.log(chalk.dim(` Configure ${provider.name}:`));
35
+ console.log();
36
+ envVars = await promptEnvVars(provider);
37
+ }
38
+ // 4. Model selection (if provider supports it)
39
+ let selectedModels;
40
+ const supportsModels = provider.modelFetching?.supported || hasFallbackModels(providerId);
41
+ if (supportsModels && !provider.useExistingConfig) {
42
+ // Get API key from env vars
43
+ const apiKeyEnvVar = provider.modelFetching?.authKeyEnvVar || 'ANTHROPIC_AUTH_TOKEN';
44
+ const apiKey = envVars[apiKeyEnvVar] || envVars['OPENROUTER_API_KEY'] || '';
45
+ if (apiKey) {
46
+ console.log();
47
+ console.log(chalk.cyan(' Model Selection:'));
48
+ const models = await selectModels(provider, apiKey);
49
+ if (models) {
50
+ selectedModels = {
51
+ haiku: models.haiku,
52
+ sonnet: models.sonnet,
53
+ opus: models.opus,
54
+ lastFetched: new Date().toISOString(),
55
+ };
56
+ }
57
+ }
58
+ }
59
+ // 5. Create the profile
60
+ const profile = createProfile(name, providerId, envVars, selectedModels);
61
+ // 6. Set as active
62
+ setActiveProfile(profile.id);
63
+ console.log();
64
+ showSuccess(`Profile '${name}' created and set as active!`);
65
+ return profile;
66
+ }
67
+ //# sourceMappingURL=add-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-profile.js","sourceRoot":"","sources":["../../src/ui/add-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Display the ClaudeGate banner
3
+ */
4
+ export declare function showBanner(): void;
5
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../../src/ui/components/banner.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAcjC"}
@@ -0,0 +1,14 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Display the ClaudeGate banner
4
+ */
5
+ export function showBanner() {
6
+ console.log();
7
+ console.log(chalk.cyan.bold(' ╔═══════════════════════════════════════════════════════╗'));
8
+ console.log(chalk.cyan.bold(' ║') +
9
+ chalk.white.bold(' CLAUDEGATE ') +
10
+ chalk.cyan.bold('║'));
11
+ console.log(chalk.cyan.bold(' ╚═══════════════════════════════════════════════════════╝'));
12
+ console.log();
13
+ }
14
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../../src/ui/components/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAC/E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CACvB,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAC/E,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function showSuccess(message: string): void;
2
+ export declare function showError(message: string): void;
3
+ export declare function showInfo(message: string): void;
4
+ export declare function showWarning(message: string): void;
5
+ export declare function showDivider(): void;
6
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/ui/components/status.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -0,0 +1,17 @@
1
+ import chalk from 'chalk';
2
+ export function showSuccess(message) {
3
+ console.log(chalk.green(' ✓'), message);
4
+ }
5
+ export function showError(message) {
6
+ console.log(chalk.red(' ✗'), message);
7
+ }
8
+ export function showInfo(message) {
9
+ console.log(chalk.blue(' i'), message);
10
+ }
11
+ export function showWarning(message) {
12
+ console.log(chalk.yellow(' ⚠'), message);
13
+ }
14
+ export function showDivider() {
15
+ console.log(chalk.dim(' ' + '─'.repeat(55)));
16
+ }
17
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/ui/components/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Manage profiles submenu
3
+ * Returns true if user wants to go back to main selector
4
+ */
5
+ export declare function manageProfilesFlow(): Promise<boolean>;
6
+ //# sourceMappingURL=manage-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-profiles.d.ts","sourceRoot":"","sources":["../../src/ui/manage-profiles.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiF3D"}
@@ -0,0 +1,197 @@
1
+ import { select, confirm } from '@inquirer/prompts';
2
+ import chalk from 'chalk';
3
+ import { getAllProfiles, deleteProfile, updateProfile, getActiveProfile, } from '../services/profile.service.js';
4
+ import { getProviderById } from '../providers/index.js';
5
+ import { hasFallbackModels } from '../services/model.service.js';
6
+ import { promptProfileName, promptEnvVars } from './profile-form.js';
7
+ import { selectModels } from './model-selector.js';
8
+ import { showSuccess, showError, showInfo } from './components/status.js';
9
+ /**
10
+ * Manage profiles submenu
11
+ * Returns true if user wants to go back to main selector
12
+ */
13
+ export async function manageProfilesFlow() {
14
+ const profiles = getAllProfiles();
15
+ if (profiles.length === 0) {
16
+ console.log();
17
+ showInfo('No profiles to manage. Add a profile first.');
18
+ return true;
19
+ }
20
+ console.log();
21
+ // 1. Select profile to manage
22
+ const profileId = await select({
23
+ message: 'Select profile to manage:',
24
+ choices: [
25
+ ...profiles.map((p) => {
26
+ const provider = getProviderById(p.providerId);
27
+ return {
28
+ name: `${p.name} (${provider?.name ?? p.providerId})`,
29
+ value: p.id,
30
+ };
31
+ }),
32
+ { name: chalk.dim('← Back'), value: '__back__' },
33
+ ],
34
+ });
35
+ if (profileId === '__back__')
36
+ return true;
37
+ const profile = profiles.find((p) => p.id === profileId);
38
+ if (!profile)
39
+ return true;
40
+ console.log();
41
+ // Check if provider supports model selection
42
+ const provider = getProviderById(profile.providerId);
43
+ const supportsModels = provider &&
44
+ !provider.useExistingConfig &&
45
+ (provider.modelFetching?.supported || hasFallbackModels(profile.providerId));
46
+ // 2. Select action
47
+ const choices = [
48
+ { name: 'Edit - Modify settings', value: 'edit' },
49
+ ];
50
+ if (supportsModels) {
51
+ choices.push({
52
+ name: 'Change Models - Select different models',
53
+ value: 'change-models',
54
+ });
55
+ }
56
+ choices.push({ name: 'Delete - Remove this profile', value: 'delete' }, { name: 'Test - Verify connection works', value: 'test' }, { name: chalk.dim('← Back'), value: 'back' });
57
+ const action = await select({
58
+ message: `Action for '${profile.name}':`,
59
+ choices,
60
+ });
61
+ if (action === 'back')
62
+ return true;
63
+ switch (action) {
64
+ case 'edit':
65
+ await editProfile(profile);
66
+ break;
67
+ case 'change-models':
68
+ await changeModelsFlow(profile);
69
+ break;
70
+ case 'delete':
71
+ await deleteProfileFlow(profile);
72
+ break;
73
+ case 'test':
74
+ await testProfile(profile);
75
+ break;
76
+ }
77
+ return true;
78
+ }
79
+ /**
80
+ * Edit a profile
81
+ */
82
+ async function editProfile(profile) {
83
+ const provider = getProviderById(profile.providerId);
84
+ if (!provider) {
85
+ showError('Unknown provider');
86
+ return;
87
+ }
88
+ console.log();
89
+ // Edit name
90
+ const name = await promptProfileName(profile.name);
91
+ // Edit env vars (if provider has any)
92
+ let envVars = profile.envVars;
93
+ if (provider.envVars.length > 0) {
94
+ console.log();
95
+ console.log(chalk.dim(' Leave blank to keep existing value'));
96
+ console.log();
97
+ const newVars = await promptEnvVars(provider, profile.envVars);
98
+ // Merge: new values override, but keep existing if new is empty
99
+ envVars = { ...profile.envVars };
100
+ for (const [key, value] of Object.entries(newVars)) {
101
+ if (value)
102
+ envVars[key] = value;
103
+ }
104
+ }
105
+ updateProfile(profile.id, { name, envVars });
106
+ console.log();
107
+ showSuccess(`Profile '${name}' updated!`);
108
+ }
109
+ /**
110
+ * Delete a profile with confirmation
111
+ */
112
+ async function deleteProfileFlow(profile) {
113
+ console.log();
114
+ const activeProfile = getActiveProfile();
115
+ const isActive = activeProfile?.id === profile.id;
116
+ if (isActive) {
117
+ showInfo('This is your active profile.');
118
+ }
119
+ const confirmed = await confirm({
120
+ message: `Delete profile '${profile.name}'?`,
121
+ default: false,
122
+ });
123
+ if (!confirmed) {
124
+ showInfo('Cancelled');
125
+ return;
126
+ }
127
+ deleteProfile(profile.id);
128
+ console.log();
129
+ showSuccess(`Profile '${profile.name}' deleted!`);
130
+ }
131
+ /**
132
+ * Change models for a profile
133
+ */
134
+ async function changeModelsFlow(profile) {
135
+ const provider = getProviderById(profile.providerId);
136
+ if (!provider) {
137
+ showError('Unknown provider');
138
+ return;
139
+ }
140
+ // Get API key from profile env vars
141
+ const apiKeyEnvVar = provider.modelFetching?.authKeyEnvVar || 'ANTHROPIC_AUTH_TOKEN';
142
+ const apiKey = profile.envVars[apiKeyEnvVar] || profile.envVars['OPENROUTER_API_KEY'] || '';
143
+ if (!apiKey) {
144
+ showError('No API key configured for this profile');
145
+ return;
146
+ }
147
+ console.log();
148
+ console.log(chalk.cyan(' Model Selection:'));
149
+ const models = await selectModels(provider, apiKey, profile.selectedModels);
150
+ if (models) {
151
+ const selectedModels = {
152
+ haiku: models.haiku,
153
+ sonnet: models.sonnet,
154
+ opus: models.opus,
155
+ lastFetched: new Date().toISOString(),
156
+ };
157
+ updateProfile(profile.id, { selectedModels });
158
+ console.log();
159
+ showSuccess('Models updated!');
160
+ }
161
+ }
162
+ /**
163
+ * Test a profile connection
164
+ */
165
+ async function testProfile(profile) {
166
+ const provider = getProviderById(profile.providerId);
167
+ console.log();
168
+ showInfo(`Testing profile: ${profile.name}`);
169
+ showInfo(`Provider: ${provider?.name ?? profile.providerId}`);
170
+ // Show current models if set
171
+ if (profile.selectedModels) {
172
+ console.log();
173
+ if (profile.selectedModels.haiku) {
174
+ showInfo(`Haiku model: ${profile.selectedModels.haiku.name}`);
175
+ }
176
+ if (profile.selectedModels.sonnet) {
177
+ showInfo(`Sonnet model: ${profile.selectedModels.sonnet.name}`);
178
+ }
179
+ if (profile.selectedModels.opus) {
180
+ showInfo(`Opus model: ${profile.selectedModels.opus.name}`);
181
+ }
182
+ }
183
+ console.log();
184
+ // For now, just show a success message
185
+ // In future, could actually ping the API endpoint
186
+ if (provider?.useExistingConfig) {
187
+ showSuccess('Uses your existing Claude CLI configuration');
188
+ }
189
+ else if (profile.envVars['ANTHROPIC_BASE_URL']) {
190
+ showInfo(`Endpoint: ${profile.envVars['ANTHROPIC_BASE_URL']}`);
191
+ showSuccess('Configuration looks valid');
192
+ }
193
+ else {
194
+ showSuccess('Configuration looks valid');
195
+ }
196
+ }
197
+ //# sourceMappingURL=manage-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-profiles.js","sourceRoot":"","sources":["../../src/ui/manage-profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ProviderDefinition, SelectedModels, SelectedModel } from '../types/index.js';
2
+ /**
3
+ * Result of model selection
4
+ */
5
+ export interface ModelSelection {
6
+ haiku?: SelectedModel;
7
+ sonnet?: SelectedModel;
8
+ opus?: SelectedModel;
9
+ }
10
+ /**
11
+ * Show model selection UI for all three tiers
12
+ * Each tier is optional - user can skip to use defaults
13
+ */
14
+ export declare function selectModels(provider: ProviderDefinition, apiKey: string, currentModels?: SelectedModels): Promise<ModelSelection | null>;
15
+ /**
16
+ * Quick model selection for a single tier (used in manage profiles)
17
+ */
18
+ export declare function selectSingleModel(provider: ProviderDefinition, apiKey: string, tier: 'haiku' | 'sonnet' | 'opus', currentModel?: SelectedModel): Promise<SelectedModel | undefined>;
19
+ //# sourceMappingURL=model-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../src/ui/model-selector.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG3F;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAKD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,cAAc,GAC7B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgDhC;AAgGD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,EACjC,YAAY,CAAC,EAAE,aAAa,GAC3B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAsBpC"}