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.
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/bin/cc.js +3 -0
- package/bin/claudegate.js +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/registry.d.ts +10 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +306 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/services/config.service.d.ts +11 -0
- package/dist/services/config.service.d.ts.map +1 -0
- package/dist/services/config.service.js +33 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/env-builder.service.d.ts +31 -0
- package/dist/services/env-builder.service.d.ts.map +1 -0
- package/dist/services/env-builder.service.js +73 -0
- package/dist/services/env-builder.service.js.map +1 -0
- package/dist/services/launcher.service.d.ts +7 -0
- package/dist/services/launcher.service.d.ts.map +1 -0
- package/dist/services/launcher.service.js +37 -0
- package/dist/services/launcher.service.js.map +1 -0
- package/dist/services/model.service.d.ts +46 -0
- package/dist/services/model.service.d.ts.map +1 -0
- package/dist/services/model.service.js +164 -0
- package/dist/services/model.service.js.map +1 -0
- package/dist/services/profile.service.d.ts +38 -0
- package/dist/services/profile.service.d.ts.map +1 -0
- package/dist/services/profile.service.js +107 -0
- package/dist/services/profile.service.js.map +1 -0
- package/dist/types/config.d.ts +42 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +32 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/profile.d.ts +29 -0
- package/dist/types/profile.d.ts.map +1 -0
- package/dist/types/profile.js +2 -0
- package/dist/types/profile.js.map +1 -0
- package/dist/types/provider.d.ts +64 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +24 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/ui/add-profile.d.ts +7 -0
- package/dist/ui/add-profile.d.ts.map +1 -0
- package/dist/ui/add-profile.js +67 -0
- package/dist/ui/add-profile.js.map +1 -0
- package/dist/ui/components/banner.d.ts +5 -0
- package/dist/ui/components/banner.d.ts.map +1 -0
- package/dist/ui/components/banner.js +14 -0
- package/dist/ui/components/banner.js.map +1 -0
- package/dist/ui/components/status.d.ts +6 -0
- package/dist/ui/components/status.d.ts.map +1 -0
- package/dist/ui/components/status.js +17 -0
- package/dist/ui/components/status.js.map +1 -0
- package/dist/ui/manage-profiles.d.ts +6 -0
- package/dist/ui/manage-profiles.d.ts.map +1 -0
- package/dist/ui/manage-profiles.js +197 -0
- package/dist/ui/manage-profiles.js.map +1 -0
- package/dist/ui/model-selector.d.ts +19 -0
- package/dist/ui/model-selector.d.ts.map +1 -0
- package/dist/ui/model-selector.js +127 -0
- package/dist/ui/model-selector.js.map +1 -0
- package/dist/ui/profile-form.d.ts +10 -0
- package/dist/ui/profile-form.d.ts.map +1 -0
- package/dist/ui/profile-form.js +61 -0
- package/dist/ui/profile-form.js.map +1 -0
- package/dist/ui/profile-selector.d.ts +27 -0
- package/dist/ui/profile-selector.d.ts.map +1 -0
- package/dist/ui/profile-selector.js +129 -0
- package/dist/ui/profile-selector.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +8 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +21 -0
- package/dist/utils/paths.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|