@kaitranntt/ccs 4.4.0 → 5.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/README.md +14 -7
- package/VERSION +1 -1
- package/config/base-agy.settings.json +10 -0
- package/config/base-codex.settings.json +10 -0
- package/config/base-gemini.settings.json +10 -0
- package/dist/auth/auth-commands.d.ts +52 -0
- package/dist/auth/auth-commands.d.ts.map +1 -0
- package/dist/auth/auth-commands.js +479 -0
- package/dist/auth/auth-commands.js.map +1 -0
- package/dist/auth/profile-detector.d.ts +68 -0
- package/dist/auth/profile-detector.d.ts.map +1 -0
- package/dist/auth/profile-detector.js +209 -0
- package/dist/auth/profile-detector.js.map +1 -0
- package/dist/auth/profile-registry.d.ts +60 -0
- package/dist/auth/profile-registry.d.ts.map +1 -0
- package/dist/auth/profile-registry.js +188 -0
- package/dist/auth/profile-registry.js.map +1 -0
- package/dist/ccs.d.ts +10 -0
- package/dist/ccs.d.ts.map +1 -0
- package/dist/ccs.js +320 -0
- package/dist/ccs.js.map +1 -0
- package/dist/cliproxy/auth-handler.d.ts +93 -0
- package/dist/cliproxy/auth-handler.d.ts.map +1 -0
- package/dist/cliproxy/auth-handler.js +402 -0
- package/dist/cliproxy/auth-handler.js.map +1 -0
- package/dist/cliproxy/base-config-loader.d.ts +42 -0
- package/dist/cliproxy/base-config-loader.d.ts.map +1 -0
- package/dist/cliproxy/base-config-loader.js +123 -0
- package/dist/cliproxy/base-config-loader.js.map +1 -0
- package/dist/cliproxy/binary-manager.d.ts +104 -0
- package/dist/cliproxy/binary-manager.d.ts.map +1 -0
- package/dist/cliproxy/binary-manager.js +567 -0
- package/dist/cliproxy/binary-manager.js.map +1 -0
- package/dist/cliproxy/cliproxy-executor.d.ts +33 -0
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -0
- package/dist/cliproxy/cliproxy-executor.js +297 -0
- package/dist/cliproxy/cliproxy-executor.js.map +1 -0
- package/dist/cliproxy/config-generator.d.ts +89 -0
- package/dist/cliproxy/config-generator.d.ts.map +1 -0
- package/dist/cliproxy/config-generator.js +263 -0
- package/dist/cliproxy/config-generator.js.map +1 -0
- package/dist/cliproxy/index.d.ts +13 -0
- package/dist/cliproxy/index.d.ts.map +1 -0
- package/dist/cliproxy/index.js +62 -0
- package/dist/cliproxy/index.js.map +1 -0
- package/dist/cliproxy/platform-detector.d.ts +48 -0
- package/dist/cliproxy/platform-detector.d.ts.map +1 -0
- package/dist/cliproxy/platform-detector.js +118 -0
- package/dist/cliproxy/platform-detector.js.map +1 -0
- package/dist/cliproxy/types.d.ts +169 -0
- package/dist/cliproxy/types.d.ts.map +1 -0
- package/dist/cliproxy/types.js +7 -0
- package/dist/cliproxy/types.js.map +1 -0
- package/dist/commands/doctor-command.d.ts +10 -0
- package/dist/commands/doctor-command.d.ts.map +1 -0
- package/dist/commands/doctor-command.js +44 -0
- package/dist/commands/doctor-command.js.map +1 -0
- package/dist/commands/help-command.d.ts +5 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +104 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/install-command.d.ts +14 -0
- package/dist/commands/install-command.d.ts.map +1 -0
- package/dist/commands/install-command.js +39 -0
- package/dist/commands/install-command.js.map +1 -0
- package/dist/commands/shell-completion-command.d.ts +10 -0
- package/dist/commands/shell-completion-command.d.ts.map +1 -0
- package/dist/commands/shell-completion-command.js +85 -0
- package/dist/commands/shell-completion-command.js.map +1 -0
- package/dist/commands/sync-command.d.ts +10 -0
- package/dist/commands/sync-command.d.ts.map +1 -0
- package/dist/commands/sync-command.js +59 -0
- package/dist/commands/sync-command.js.map +1 -0
- package/dist/commands/update-command.d.ts +12 -0
- package/dist/commands/update-command.d.ts.map +1 -0
- package/dist/commands/update-command.js +295 -0
- package/dist/commands/update-command.js.map +1 -0
- package/dist/commands/version-command.d.ts +10 -0
- package/dist/commands/version-command.d.ts.map +1 -0
- package/dist/commands/version-command.js +100 -0
- package/dist/commands/version-command.js.map +1 -0
- package/dist/delegation/delegation-handler.d.ts +60 -0
- package/dist/delegation/delegation-handler.d.ts.map +1 -0
- package/dist/delegation/delegation-handler.js +174 -0
- package/dist/delegation/delegation-handler.js.map +1 -0
- package/dist/delegation/headless-executor.d.ts +114 -0
- package/dist/delegation/headless-executor.d.ts.map +1 -0
- package/dist/delegation/headless-executor.js +562 -0
- package/dist/delegation/headless-executor.js.map +1 -0
- package/dist/delegation/result-formatter.d.ts +108 -0
- package/dist/delegation/result-formatter.d.ts.map +1 -0
- package/dist/delegation/result-formatter.js +391 -0
- package/dist/delegation/result-formatter.js.map +1 -0
- package/dist/delegation/session-manager.d.ts +58 -0
- package/dist/delegation/session-manager.d.ts.map +1 -0
- package/dist/delegation/session-manager.js +153 -0
- package/dist/delegation/session-manager.js.map +1 -0
- package/dist/delegation/settings-parser.d.ts +31 -0
- package/dist/delegation/settings-parser.d.ts.map +1 -0
- package/dist/delegation/settings-parser.js +107 -0
- package/dist/delegation/settings-parser.js.map +1 -0
- package/dist/glmt/delta-accumulator.d.ts +210 -0
- package/dist/glmt/delta-accumulator.d.ts.map +1 -0
- package/dist/glmt/delta-accumulator.js +351 -0
- package/dist/glmt/delta-accumulator.js.map +1 -0
- package/dist/glmt/glmt-proxy.d.ts +72 -0
- package/dist/glmt/glmt-proxy.d.ts.map +1 -0
- package/dist/glmt/glmt-proxy.js +427 -0
- package/dist/glmt/glmt-proxy.js.map +1 -0
- package/dist/glmt/glmt-transformer.d.ts +265 -0
- package/dist/glmt/glmt-transformer.d.ts.map +1 -0
- package/dist/glmt/glmt-transformer.js +832 -0
- package/dist/glmt/glmt-transformer.js.map +1 -0
- package/dist/glmt/locale-enforcer.d.ts +38 -0
- package/dist/glmt/locale-enforcer.d.ts.map +1 -0
- package/dist/glmt/locale-enforcer.js +69 -0
- package/dist/glmt/locale-enforcer.js.map +1 -0
- package/dist/glmt/reasoning-enforcer.d.ts +52 -0
- package/dist/glmt/reasoning-enforcer.d.ts.map +1 -0
- package/dist/glmt/reasoning-enforcer.js +151 -0
- package/dist/glmt/reasoning-enforcer.js.map +1 -0
- package/dist/glmt/sse-parser.d.ts +47 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -0
- package/dist/glmt/sse-parser.js +93 -0
- package/dist/glmt/sse-parser.js.map +1 -0
- package/dist/management/doctor.d.ts +104 -0
- package/dist/management/doctor.d.ts.map +1 -0
- package/dist/management/doctor.js +673 -0
- package/dist/management/doctor.js.map +1 -0
- package/dist/management/instance-manager.d.ts +57 -0
- package/dist/management/instance-manager.d.ts.map +1 -0
- package/dist/management/instance-manager.js +195 -0
- package/dist/management/instance-manager.js.map +1 -0
- package/dist/management/recovery-manager.d.ts +39 -0
- package/dist/management/recovery-manager.d.ts.map +1 -0
- package/dist/management/recovery-manager.js +141 -0
- package/dist/management/recovery-manager.js.map +1 -0
- package/dist/management/shared-manager.d.ts +47 -0
- package/dist/management/shared-manager.d.ts.map +1 -0
- package/dist/management/shared-manager.js +388 -0
- package/dist/management/shared-manager.js.map +1 -0
- package/dist/types/cli.d.ts +50 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +16 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +51 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +26 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/delegation.d.ts +61 -0
- package/dist/types/delegation.d.ts.map +1 -0
- package/dist/types/delegation.js +6 -0
- package/dist/types/delegation.js.map +1 -0
- package/dist/types/glmt.d.ts +95 -0
- package/dist/types/glmt.d.ts.map +1 -0
- package/dist/types/glmt.js +7 -0
- package/dist/types/glmt.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils.d.ts +36 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +22 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/utils/claude-detector.d.ts +14 -0
- package/dist/utils/claude-detector.d.ts.map +1 -0
- package/dist/utils/claude-detector.js +112 -0
- package/dist/utils/claude-detector.js.map +1 -0
- package/dist/utils/claude-dir-installer.d.ts +46 -0
- package/dist/utils/claude-dir-installer.d.ts.map +1 -0
- package/dist/utils/claude-dir-installer.js +289 -0
- package/dist/utils/claude-dir-installer.js.map +1 -0
- package/dist/utils/claude-symlink-manager.d.ts +61 -0
- package/dist/utils/claude-symlink-manager.d.ts.map +1 -0
- package/dist/utils/claude-symlink-manager.js +291 -0
- package/dist/utils/claude-symlink-manager.js.map +1 -0
- package/dist/utils/config-manager.d.ts +32 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +143 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/delegation-validator.d.ts +39 -0
- package/dist/utils/delegation-validator.d.ts.map +1 -0
- package/dist/utils/delegation-validator.js +161 -0
- package/dist/utils/delegation-validator.js.map +1 -0
- package/dist/utils/error-codes.d.ts +36 -0
- package/dist/utils/error-codes.d.ts.map +1 -0
- package/dist/utils/error-codes.js +63 -0
- package/dist/utils/error-codes.js.map +1 -0
- package/dist/utils/error-manager.d.ts +59 -0
- package/dist/utils/error-manager.d.ts.map +1 -0
- package/dist/utils/error-manager.js +228 -0
- package/dist/utils/error-manager.js.map +1 -0
- package/dist/utils/helpers.d.ts +27 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +150 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/package-manager-detector.d.ts +14 -0
- package/dist/utils/package-manager-detector.d.ts.map +1 -0
- package/dist/utils/package-manager-detector.js +162 -0
- package/dist/utils/package-manager-detector.js.map +1 -0
- package/dist/utils/progress-indicator.d.ts +52 -0
- package/dist/utils/progress-indicator.d.ts.map +1 -0
- package/dist/utils/progress-indicator.js +102 -0
- package/dist/utils/progress-indicator.js.map +1 -0
- package/dist/utils/prompt.d.ts +29 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +116 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/shell-completion.d.ts +52 -0
- package/dist/utils/shell-completion.d.ts.map +1 -0
- package/dist/utils/shell-completion.js +231 -0
- package/dist/utils/shell-completion.js.map +1 -0
- package/dist/utils/shell-executor.d.ts +15 -0
- package/dist/utils/shell-executor.d.ts.map +1 -0
- package/dist/utils/shell-executor.js +57 -0
- package/dist/utils/shell-executor.js.map +1 -0
- package/dist/utils/update-checker.d.ts +48 -0
- package/dist/utils/update-checker.d.ts.map +1 -0
- package/dist/utils/update-checker.js +241 -0
- package/dist/utils/update-checker.js.map +1 -0
- package/lib/ccs +21 -1907
- package/lib/ccs.ps1 +26 -1800
- package/lib/error-codes.ps1 +2 -1
- package/lib/prompt.ps1 +2 -2
- package/package.json +31 -11
- package/scripts/add-shebang.js +39 -0
- package/scripts/bump-version.sh +25 -37
- package/scripts/dev-install.sh +32 -11
- package/scripts/postinstall.js +29 -29
- package/bin/auth/auth-commands.js +0 -499
- package/bin/auth/profile-detector.js +0 -204
- package/bin/auth/profile-registry.js +0 -225
- package/bin/ccs.js +0 -1034
- package/bin/delegation/README.md +0 -191
- package/bin/delegation/delegation-handler.js +0 -212
- package/bin/delegation/headless-executor.js +0 -618
- package/bin/delegation/result-formatter.js +0 -485
- package/bin/delegation/session-manager.js +0 -157
- package/bin/delegation/settings-parser.js +0 -109
- package/bin/glmt/delta-accumulator.js +0 -276
- package/bin/glmt/glmt-proxy.js +0 -495
- package/bin/glmt/glmt-transformer.js +0 -999
- package/bin/glmt/locale-enforcer.js +0 -72
- package/bin/glmt/reasoning-enforcer.js +0 -173
- package/bin/glmt/sse-parser.js +0 -96
- package/bin/management/doctor.js +0 -721
- package/bin/management/instance-manager.js +0 -202
- package/bin/management/recovery-manager.js +0 -135
- package/bin/management/shared-manager.js +0 -402
- package/bin/utils/claude-detector.js +0 -73
- package/bin/utils/claude-dir-installer.js +0 -283
- package/bin/utils/claude-symlink-manager.js +0 -289
- package/bin/utils/config-manager.js +0 -103
- package/bin/utils/delegation-validator.js +0 -154
- package/bin/utils/error-codes.js +0 -59
- package/bin/utils/error-manager.js +0 -165
- package/bin/utils/helpers.js +0 -136
- package/bin/utils/progress-indicator.js +0 -111
- package/bin/utils/prompt.js +0 -134
- package/bin/utils/shell-completion.js +0 -256
- package/bin/utils/update-checker.js +0 -243
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile Detector
|
|
3
|
+
*
|
|
4
|
+
* Determines profile type (settings-based vs account-based) for routing.
|
|
5
|
+
* Priority: settings-based profiles (glm/kimi) checked FIRST for backward compatibility.
|
|
6
|
+
*/
|
|
7
|
+
import { Settings, ProfileMetadata } from '../types';
|
|
8
|
+
export type ProfileType = 'settings' | 'account' | 'cliproxy' | 'default';
|
|
9
|
+
/** CLIProxy profile names (OAuth-based, zero config) */
|
|
10
|
+
export declare const CLIPROXY_PROFILES: readonly ["gemini", "codex", "agy"];
|
|
11
|
+
export type CLIProxyProfileName = (typeof CLIPROXY_PROFILES)[number];
|
|
12
|
+
export interface ProfileDetectionResult {
|
|
13
|
+
type: ProfileType;
|
|
14
|
+
name: string;
|
|
15
|
+
settingsPath?: string;
|
|
16
|
+
profile?: Settings | ProfileMetadata;
|
|
17
|
+
message?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AllProfiles {
|
|
20
|
+
settings: string[];
|
|
21
|
+
accounts: string[];
|
|
22
|
+
default?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ProfileNotFoundError extends Error {
|
|
25
|
+
profileName: string;
|
|
26
|
+
suggestions: string[];
|
|
27
|
+
availableProfiles: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Profile Detector Class
|
|
31
|
+
*/
|
|
32
|
+
declare class ProfileDetector {
|
|
33
|
+
private readonly configPath;
|
|
34
|
+
private readonly profilesPath;
|
|
35
|
+
constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Read settings-based config (config.json)
|
|
38
|
+
*/
|
|
39
|
+
private readConfig;
|
|
40
|
+
/**
|
|
41
|
+
* Read account-based profiles (profiles.json)
|
|
42
|
+
*/
|
|
43
|
+
private readProfiles;
|
|
44
|
+
/**
|
|
45
|
+
* Detect profile type and return routing information
|
|
46
|
+
*/
|
|
47
|
+
detectProfileType(profileName: string | null | undefined): ProfileDetectionResult;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve default profile
|
|
50
|
+
*/
|
|
51
|
+
private resolveDefaultProfile;
|
|
52
|
+
/**
|
|
53
|
+
* List available profiles (for error messages)
|
|
54
|
+
*/
|
|
55
|
+
private listAvailableProfiles;
|
|
56
|
+
/**
|
|
57
|
+
* Check if profile exists (any type)
|
|
58
|
+
*/
|
|
59
|
+
hasProfile(profileName: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Get all available profile names
|
|
62
|
+
*/
|
|
63
|
+
getAllProfiles(): AllProfiles & {
|
|
64
|
+
cliproxy: string[];
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export default ProfileDetector;
|
|
68
|
+
//# sourceMappingURL=profile-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-detector.d.ts","sourceRoot":"","sources":["../../src/auth/profile-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAU,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE1E,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,qCAAsC,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,QAAQ,GAAG,eAAe,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAqB,SAAQ,KAAK;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;;IAOtC;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,sBAAsB;IAgDjF;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IASxC;;OAEG;IACH,cAAc,IAAI,WAAW,GAAG;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;CAWvD;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Profile Detector
|
|
4
|
+
*
|
|
5
|
+
* Determines profile type (settings-based vs account-based) for routing.
|
|
6
|
+
* Priority: settings-based profiles (glm/kimi) checked FIRST for backward compatibility.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.CLIPROXY_PROFILES = void 0;
|
|
33
|
+
const fs = __importStar(require("fs"));
|
|
34
|
+
const path = __importStar(require("path"));
|
|
35
|
+
const os = __importStar(require("os"));
|
|
36
|
+
const helpers_1 = require("../utils/helpers");
|
|
37
|
+
/** CLIProxy profile names (OAuth-based, zero config) */
|
|
38
|
+
exports.CLIPROXY_PROFILES = ['gemini', 'codex', 'agy'];
|
|
39
|
+
/**
|
|
40
|
+
* Profile Detector Class
|
|
41
|
+
*/
|
|
42
|
+
class ProfileDetector {
|
|
43
|
+
constructor() {
|
|
44
|
+
this.configPath = path.join(os.homedir(), '.ccs', 'config.json');
|
|
45
|
+
this.profilesPath = path.join(os.homedir(), '.ccs', 'profiles.json');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Read settings-based config (config.json)
|
|
49
|
+
*/
|
|
50
|
+
readConfig() {
|
|
51
|
+
if (!fs.existsSync(this.configPath)) {
|
|
52
|
+
return { profiles: {} };
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const data = fs.readFileSync(this.configPath, 'utf8');
|
|
56
|
+
return JSON.parse(data);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.warn(`[!] Warning: Could not read config.json: ${error.message}`);
|
|
60
|
+
return { profiles: {} };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Read account-based profiles (profiles.json)
|
|
65
|
+
*/
|
|
66
|
+
readProfiles() {
|
|
67
|
+
if (!fs.existsSync(this.profilesPath)) {
|
|
68
|
+
return { profiles: {}, default: undefined };
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const data = fs.readFileSync(this.profilesPath, 'utf8');
|
|
72
|
+
return JSON.parse(data);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.warn(`[!] Warning: Could not read profiles.json: ${error.message}`);
|
|
76
|
+
return { profiles: {}, default: undefined };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Detect profile type and return routing information
|
|
81
|
+
*/
|
|
82
|
+
detectProfileType(profileName) {
|
|
83
|
+
// Special case: 'default' means use default profile
|
|
84
|
+
if (profileName === 'default' || profileName === null || profileName === undefined) {
|
|
85
|
+
return this.resolveDefaultProfile();
|
|
86
|
+
}
|
|
87
|
+
// Priority 0: Check CLIProxy profiles (gemini, codex, agy) - OAuth-based, zero config
|
|
88
|
+
if (exports.CLIPROXY_PROFILES.includes(profileName)) {
|
|
89
|
+
return {
|
|
90
|
+
type: 'cliproxy',
|
|
91
|
+
name: profileName,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Priority 1: Check settings-based profiles (glm, kimi) - BACKWARD COMPATIBILITY
|
|
95
|
+
const config = this.readConfig();
|
|
96
|
+
if (config.profiles && config.profiles[profileName]) {
|
|
97
|
+
return {
|
|
98
|
+
type: 'settings',
|
|
99
|
+
name: profileName,
|
|
100
|
+
settingsPath: config.profiles[profileName],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Priority 2: Check account-based profiles (work, personal)
|
|
104
|
+
const profiles = this.readProfiles();
|
|
105
|
+
if (profiles.profiles && profiles.profiles[profileName]) {
|
|
106
|
+
return {
|
|
107
|
+
type: 'account',
|
|
108
|
+
name: profileName,
|
|
109
|
+
profile: profiles.profiles[profileName],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Not found - generate suggestions
|
|
113
|
+
const allProfiles = this.getAllProfiles();
|
|
114
|
+
const allProfileNames = [...allProfiles.settings, ...allProfiles.accounts];
|
|
115
|
+
const suggestions = (0, helpers_1.findSimilarStrings)(profileName, allProfileNames);
|
|
116
|
+
const error = new Error(`Profile not found: ${profileName}`);
|
|
117
|
+
error.profileName = profileName;
|
|
118
|
+
error.suggestions = suggestions;
|
|
119
|
+
error.availableProfiles = this.listAvailableProfiles();
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Resolve default profile
|
|
124
|
+
*/
|
|
125
|
+
resolveDefaultProfile() {
|
|
126
|
+
// Check if account-based default exists
|
|
127
|
+
const profiles = this.readProfiles();
|
|
128
|
+
if (profiles.default && profiles.profiles[profiles.default]) {
|
|
129
|
+
return {
|
|
130
|
+
type: 'account',
|
|
131
|
+
name: profiles.default,
|
|
132
|
+
profile: profiles.profiles[profiles.default],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// Check if settings-based default exists
|
|
136
|
+
const config = this.readConfig();
|
|
137
|
+
if (config.profiles && config.profiles['default']) {
|
|
138
|
+
return {
|
|
139
|
+
type: 'settings',
|
|
140
|
+
name: 'default',
|
|
141
|
+
settingsPath: config.profiles['default'],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
// No default profile configured, use Claude's own defaults
|
|
145
|
+
return {
|
|
146
|
+
type: 'default',
|
|
147
|
+
name: 'default',
|
|
148
|
+
message: 'No profile configured. Using Claude CLI defaults from ~/.claude/',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* List available profiles (for error messages)
|
|
153
|
+
*/
|
|
154
|
+
listAvailableProfiles() {
|
|
155
|
+
const lines = [];
|
|
156
|
+
// CLIProxy profiles (OAuth-based, always available)
|
|
157
|
+
lines.push('CLIProxy profiles (OAuth, zero config):');
|
|
158
|
+
exports.CLIPROXY_PROFILES.forEach((name) => {
|
|
159
|
+
lines.push(` - ${name}`);
|
|
160
|
+
});
|
|
161
|
+
// Settings-based profiles
|
|
162
|
+
const config = this.readConfig();
|
|
163
|
+
const settingsProfiles = Object.keys(config.profiles || {});
|
|
164
|
+
if (settingsProfiles.length > 0) {
|
|
165
|
+
lines.push('Settings-based profiles (GLM, Kimi, etc.):');
|
|
166
|
+
settingsProfiles.forEach((name) => {
|
|
167
|
+
lines.push(` - ${name}`);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
// Account-based profiles
|
|
171
|
+
const profiles = this.readProfiles();
|
|
172
|
+
const accountProfiles = Object.keys(profiles.profiles || {});
|
|
173
|
+
if (accountProfiles.length > 0) {
|
|
174
|
+
lines.push('Account-based profiles:');
|
|
175
|
+
accountProfiles.forEach((name) => {
|
|
176
|
+
const isDefault = name === profiles.default;
|
|
177
|
+
lines.push(` - ${name}${isDefault ? ' [DEFAULT]' : ''}`);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return lines.join('\n');
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Check if profile exists (any type)
|
|
184
|
+
*/
|
|
185
|
+
hasProfile(profileName) {
|
|
186
|
+
try {
|
|
187
|
+
this.detectProfileType(profileName);
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get all available profile names
|
|
196
|
+
*/
|
|
197
|
+
getAllProfiles() {
|
|
198
|
+
const config = this.readConfig();
|
|
199
|
+
const profiles = this.readProfiles();
|
|
200
|
+
return {
|
|
201
|
+
settings: Object.keys(config.profiles || {}),
|
|
202
|
+
accounts: Object.keys(profiles.profiles || {}),
|
|
203
|
+
cliproxy: [...exports.CLIPROXY_PROFILES],
|
|
204
|
+
default: profiles.default,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.default = ProfileDetector;
|
|
209
|
+
//# sourceMappingURL=profile-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-detector.js","sourceRoot":"","sources":["../../src/auth/profile-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ProfileMetadata } from '../types';
|
|
2
|
+
interface CreateMetadata {
|
|
3
|
+
type?: string;
|
|
4
|
+
created?: string;
|
|
5
|
+
last_used?: string | null;
|
|
6
|
+
}
|
|
7
|
+
export declare class ProfileRegistry {
|
|
8
|
+
private profilesPath;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Read profiles from disk
|
|
12
|
+
*/
|
|
13
|
+
private _read;
|
|
14
|
+
/**
|
|
15
|
+
* Write profiles to disk atomically
|
|
16
|
+
*/
|
|
17
|
+
private _write;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new profile
|
|
20
|
+
*/
|
|
21
|
+
createProfile(name: string, metadata?: CreateMetadata): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get profile metadata
|
|
24
|
+
*/
|
|
25
|
+
getProfile(name: string): ProfileMetadata;
|
|
26
|
+
/**
|
|
27
|
+
* Update profile metadata
|
|
28
|
+
*/
|
|
29
|
+
updateProfile(name: string, updates: Partial<ProfileMetadata>): void;
|
|
30
|
+
/**
|
|
31
|
+
* Delete a profile
|
|
32
|
+
*/
|
|
33
|
+
deleteProfile(name: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* List all profiles
|
|
36
|
+
*/
|
|
37
|
+
listProfiles(): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Get all profiles with metadata
|
|
40
|
+
*/
|
|
41
|
+
getAllProfiles(): Record<string, ProfileMetadata>;
|
|
42
|
+
/**
|
|
43
|
+
* Get default profile name
|
|
44
|
+
*/
|
|
45
|
+
getDefaultProfile(): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Set default profile
|
|
48
|
+
*/
|
|
49
|
+
setDefaultProfile(name: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Check if profile exists
|
|
52
|
+
*/
|
|
53
|
+
hasProfile(name: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Update last used timestamp
|
|
56
|
+
*/
|
|
57
|
+
touchProfile(name: string): void;
|
|
58
|
+
}
|
|
59
|
+
export default ProfileRegistry;
|
|
60
|
+
//# sourceMappingURL=profile-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-registry.d.ts","sourceRoot":"","sources":["../../src/auth/profile-registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AA2B3C,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;;IAM7B;;OAEG;IACH,OAAO,CAAC,KAAK;IAkBb;;OAEG;IACH,OAAO,CAAC,MAAM;IAwBd;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAmB,GAAG,IAAI;IAqBhE;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAUzC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAepE;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmBjC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAKxB;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAKjD;;OAEG;IACH,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKjC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAKjC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.ProfileRegistry = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const os = __importStar(require("os"));
|
|
30
|
+
class ProfileRegistry {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.profilesPath = path.join(os.homedir(), '.ccs', 'profiles.json');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read profiles from disk
|
|
36
|
+
*/
|
|
37
|
+
_read() {
|
|
38
|
+
if (!fs.existsSync(this.profilesPath)) {
|
|
39
|
+
return {
|
|
40
|
+
version: '2.0.0',
|
|
41
|
+
profiles: {},
|
|
42
|
+
default: null,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const data = fs.readFileSync(this.profilesPath, 'utf8');
|
|
47
|
+
return JSON.parse(data);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
51
|
+
throw new Error(`Failed to read profiles: ${message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Write profiles to disk atomically
|
|
56
|
+
*/
|
|
57
|
+
_write(data) {
|
|
58
|
+
const dir = path.dirname(this.profilesPath);
|
|
59
|
+
// Ensure directory exists
|
|
60
|
+
if (!fs.existsSync(dir)) {
|
|
61
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
62
|
+
}
|
|
63
|
+
// Atomic write: temp file + rename
|
|
64
|
+
const tempPath = `${this.profilesPath}.tmp`;
|
|
65
|
+
try {
|
|
66
|
+
fs.writeFileSync(tempPath, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
67
|
+
fs.renameSync(tempPath, this.profilesPath);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
// Cleanup temp file on error
|
|
71
|
+
if (fs.existsSync(tempPath)) {
|
|
72
|
+
fs.unlinkSync(tempPath);
|
|
73
|
+
}
|
|
74
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
75
|
+
throw new Error(`Failed to write profiles: ${message}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a new profile
|
|
80
|
+
*/
|
|
81
|
+
createProfile(name, metadata = {}) {
|
|
82
|
+
const data = this._read();
|
|
83
|
+
if (data.profiles[name]) {
|
|
84
|
+
throw new Error(`Profile already exists: ${name}`);
|
|
85
|
+
}
|
|
86
|
+
// v3.0 minimal schema: only essential fields
|
|
87
|
+
data.profiles[name] = {
|
|
88
|
+
type: metadata.type || 'account',
|
|
89
|
+
created: metadata.created || new Date().toISOString(),
|
|
90
|
+
last_used: metadata.last_used || null,
|
|
91
|
+
};
|
|
92
|
+
// Note: No longer auto-set as default
|
|
93
|
+
// Users must explicitly run: ccs auth default <profile>
|
|
94
|
+
// Default always stays on implicit 'default' profile (uses ~/.claude/)
|
|
95
|
+
this._write(data);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get profile metadata
|
|
99
|
+
*/
|
|
100
|
+
getProfile(name) {
|
|
101
|
+
const data = this._read();
|
|
102
|
+
if (!data.profiles[name]) {
|
|
103
|
+
throw new Error(`Profile not found: ${name}`);
|
|
104
|
+
}
|
|
105
|
+
return data.profiles[name];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Update profile metadata
|
|
109
|
+
*/
|
|
110
|
+
updateProfile(name, updates) {
|
|
111
|
+
const data = this._read();
|
|
112
|
+
if (!data.profiles[name]) {
|
|
113
|
+
throw new Error(`Profile not found: ${name}`);
|
|
114
|
+
}
|
|
115
|
+
data.profiles[name] = {
|
|
116
|
+
...data.profiles[name],
|
|
117
|
+
...updates,
|
|
118
|
+
};
|
|
119
|
+
this._write(data);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Delete a profile
|
|
123
|
+
*/
|
|
124
|
+
deleteProfile(name) {
|
|
125
|
+
const data = this._read();
|
|
126
|
+
if (!data.profiles[name]) {
|
|
127
|
+
throw new Error(`Profile not found: ${name}`);
|
|
128
|
+
}
|
|
129
|
+
delete data.profiles[name];
|
|
130
|
+
// Clear default if it was the deleted profile
|
|
131
|
+
if (data.default === name) {
|
|
132
|
+
// Set to first remaining profile or null
|
|
133
|
+
const remaining = Object.keys(data.profiles);
|
|
134
|
+
data.default = remaining.length > 0 ? remaining[0] : null;
|
|
135
|
+
}
|
|
136
|
+
this._write(data);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* List all profiles
|
|
140
|
+
*/
|
|
141
|
+
listProfiles() {
|
|
142
|
+
const data = this._read();
|
|
143
|
+
return Object.keys(data.profiles);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get all profiles with metadata
|
|
147
|
+
*/
|
|
148
|
+
getAllProfiles() {
|
|
149
|
+
const data = this._read();
|
|
150
|
+
return data.profiles;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get default profile name
|
|
154
|
+
*/
|
|
155
|
+
getDefaultProfile() {
|
|
156
|
+
const data = this._read();
|
|
157
|
+
return data.default;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Set default profile
|
|
161
|
+
*/
|
|
162
|
+
setDefaultProfile(name) {
|
|
163
|
+
const data = this._read();
|
|
164
|
+
if (!data.profiles[name]) {
|
|
165
|
+
throw new Error(`Profile not found: ${name}`);
|
|
166
|
+
}
|
|
167
|
+
data.default = name;
|
|
168
|
+
this._write(data);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check if profile exists
|
|
172
|
+
*/
|
|
173
|
+
hasProfile(name) {
|
|
174
|
+
const data = this._read();
|
|
175
|
+
return !!data.profiles[name];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Update last used timestamp
|
|
179
|
+
*/
|
|
180
|
+
touchProfile(name) {
|
|
181
|
+
this.updateProfile(name, {
|
|
182
|
+
last_used: new Date().toISOString(),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.ProfileRegistry = ProfileRegistry;
|
|
187
|
+
exports.default = ProfileRegistry;
|
|
188
|
+
//# sourceMappingURL=profile-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-registry.js","sourceRoot":"","sources":["../../src/auth/profile-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/ccs.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CCS (Claude Code Switch) - Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Instant profile switching for Claude CLI.
|
|
6
|
+
* Supports multiple accounts, alternative models (GLM, Kimi),
|
|
7
|
+
* and cost-optimized delegation.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ccs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ccs.d.ts","sourceRoot":"","sources":["../src/ccs.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|