claude-ai-switcher 1.1.4
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/AGENTS.md +265 -0
- package/ARCHITECTURE.md +162 -0
- package/CLAUDE.md +267 -0
- package/LICENSE +21 -0
- package/QWEN.md +429 -0
- package/README.md +833 -0
- package/dist/clients/claude-code.d.ts +92 -0
- package/dist/clients/claude-code.d.ts.map +1 -0
- package/dist/clients/claude-code.js +312 -0
- package/dist/clients/claude-code.js.map +1 -0
- package/dist/clients/opencode.d.ts +71 -0
- package/dist/clients/opencode.d.ts.map +1 -0
- package/dist/clients/opencode.js +604 -0
- package/dist/clients/opencode.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +122 -0
- package/dist/config.js.map +1 -0
- package/dist/display.d.ts +51 -0
- package/dist/display.d.ts.map +1 -0
- package/dist/display.js +118 -0
- package/dist/display.js.map +1 -0
- package/dist/hooks/index.d.ts +60 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +223 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/token-tracker.js +280 -0
- package/dist/hooks/visual-enhancements.js +364 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1091 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +34 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +343 -0
- package/dist/models.js.map +1 -0
- package/dist/providers/alibaba.d.ts +25 -0
- package/dist/providers/alibaba.d.ts.map +1 -0
- package/dist/providers/alibaba.js +37 -0
- package/dist/providers/alibaba.js.map +1 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +19 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +44 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +156 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/glm.d.ts +25 -0
- package/dist/providers/glm.d.ts.map +1 -0
- package/dist/providers/glm.js +89 -0
- package/dist/providers/glm.js.map +1 -0
- package/dist/providers/ollama.d.ts +48 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +174 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openrouter.d.ts +24 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +36 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/verify.d.ts +24 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +262 -0
- package/dist/verify.js.map +1 -0
- package/package.json +57 -0
- package/scripts/copy-hooks.js +15 -0
- package/src/clients/claude-code.ts +340 -0
- package/src/clients/opencode.ts +618 -0
- package/src/config.ts +101 -0
- package/src/display.ts +151 -0
- package/src/hooks/index.ts +208 -0
- package/src/hooks/token-tracker.js +280 -0
- package/src/hooks/visual-enhancements.js +364 -0
- package/src/index.ts +1263 -0
- package/src/models.ts +366 -0
- package/src/providers/alibaba.ts +43 -0
- package/src/providers/anthropic.ts +23 -0
- package/src/providers/gemini.ts +136 -0
- package/src/providers/glm.ts +60 -0
- package/src/providers/ollama.ts +146 -0
- package/src/providers/openrouter.ts +42 -0
- package/src/verify.ts +258 -0
- package/tsconfig.json +19 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Manager
|
|
4
|
+
*
|
|
5
|
+
* Manages API keys and settings in ~/.claude-ai-switcher/config.json
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.readConfig = readConfig;
|
|
42
|
+
exports.writeConfig = writeConfig;
|
|
43
|
+
exports.getApiKey = getApiKey;
|
|
44
|
+
exports.setApiKey = setApiKey;
|
|
45
|
+
exports.hasApiKey = hasApiKey;
|
|
46
|
+
exports.getConfigPath = getConfigPath;
|
|
47
|
+
const fs = __importStar(require("fs-extra"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const os = __importStar(require("os"));
|
|
50
|
+
const CONFIG_DIR = path.join(os.homedir(), ".claude-ai-switcher");
|
|
51
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
52
|
+
/**
|
|
53
|
+
* Ensure config directory exists
|
|
54
|
+
*/
|
|
55
|
+
async function ensureConfigDir() {
|
|
56
|
+
await fs.ensureDir(CONFIG_DIR);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read user configuration
|
|
60
|
+
*/
|
|
61
|
+
async function readConfig() {
|
|
62
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
const content = await fs.readFile(CONFIG_FILE, "utf-8");
|
|
66
|
+
return JSON.parse(content);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Write user configuration
|
|
70
|
+
*/
|
|
71
|
+
async function writeConfig(config) {
|
|
72
|
+
await ensureConfigDir();
|
|
73
|
+
await fs.writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get API key for a provider
|
|
77
|
+
*/
|
|
78
|
+
async function getApiKey(provider) {
|
|
79
|
+
const config = await readConfig();
|
|
80
|
+
switch (provider) {
|
|
81
|
+
case "alibaba":
|
|
82
|
+
return config.alibabaApiKey;
|
|
83
|
+
case "openrouter":
|
|
84
|
+
return config.openrouterApiKey;
|
|
85
|
+
case "gemini":
|
|
86
|
+
return config.geminiApiKey;
|
|
87
|
+
default:
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Set API key for a provider
|
|
93
|
+
*/
|
|
94
|
+
async function setApiKey(provider, apiKey) {
|
|
95
|
+
const config = await readConfig();
|
|
96
|
+
switch (provider) {
|
|
97
|
+
case "alibaba":
|
|
98
|
+
config.alibabaApiKey = apiKey;
|
|
99
|
+
break;
|
|
100
|
+
case "openrouter":
|
|
101
|
+
config.openrouterApiKey = apiKey;
|
|
102
|
+
break;
|
|
103
|
+
case "gemini":
|
|
104
|
+
config.geminiApiKey = apiKey;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
await writeConfig(config);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if API key is set for a provider
|
|
111
|
+
*/
|
|
112
|
+
async function hasApiKey(provider) {
|
|
113
|
+
const apiKey = await getApiKey(provider);
|
|
114
|
+
return !!apiKey;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get config file path
|
|
118
|
+
*/
|
|
119
|
+
function getConfigPath() {
|
|
120
|
+
return CONFIG_FILE;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BH,gCAOC;AAKD,kCAGC;AAKD,8BAaC;AAKD,8BAgBC;AAKD,8BAGC;AAKD,sCAEC;AA9FD,6CAA+B;AAC/B,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAUzD;;GAEG;AACH,KAAK,UAAU,eAAe;IAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAAC,MAAkB;IAClD,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,aAAa,CAAC;QAC9B,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,gBAAgB,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,YAAY,CAAC;QAC7B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,MAAc;IAC9D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;YAC9B,MAAM;QACR,KAAK,YAAY;YACf,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC;YACjC,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;YAC7B,MAAM;IACV,CAAC;IAED,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display utilities for formatted output
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Format a table row with proper padding
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatTableRow(columns: string[], widths: number[]): string;
|
|
8
|
+
/**
|
|
9
|
+
* Display model list with descriptions and context sizes
|
|
10
|
+
*/
|
|
11
|
+
export declare function displayModels(providerName: string, models: Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
contextWindow: number;
|
|
15
|
+
capabilities: string[];
|
|
16
|
+
description: string;
|
|
17
|
+
}>, currentModel?: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Display current provider status
|
|
20
|
+
*/
|
|
21
|
+
export declare function displayCurrentStatus(provider: string, model?: string, endpoint?: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Display success message
|
|
24
|
+
*/
|
|
25
|
+
export declare function displaySuccess(message: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Display error message
|
|
28
|
+
*/
|
|
29
|
+
export declare function displayError(message: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Display warning message
|
|
32
|
+
*/
|
|
33
|
+
export declare function displayWarning(message: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Display info message
|
|
36
|
+
*/
|
|
37
|
+
export declare function displayInfo(message: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Format context window for display
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatContext(tokens: number): string;
|
|
42
|
+
/**
|
|
43
|
+
* Display provider list
|
|
44
|
+
*/
|
|
45
|
+
export declare function displayProviders(providers: Array<{
|
|
46
|
+
id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
endpoint?: string;
|
|
49
|
+
modelCount: number;
|
|
50
|
+
}>): void;
|
|
51
|
+
//# sourceMappingURL=display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,EACF,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAuCN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,GAAG,IAAI,CAWR"}
|
package/dist/display.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Display utilities for formatted output
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.formatTableRow = formatTableRow;
|
|
10
|
+
exports.displayModels = displayModels;
|
|
11
|
+
exports.displayCurrentStatus = displayCurrentStatus;
|
|
12
|
+
exports.displaySuccess = displaySuccess;
|
|
13
|
+
exports.displayError = displayError;
|
|
14
|
+
exports.displayWarning = displayWarning;
|
|
15
|
+
exports.displayInfo = displayInfo;
|
|
16
|
+
exports.formatContext = formatContext;
|
|
17
|
+
exports.displayProviders = displayProviders;
|
|
18
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
19
|
+
/**
|
|
20
|
+
* Format a table row with proper padding
|
|
21
|
+
*/
|
|
22
|
+
function formatTableRow(columns, widths) {
|
|
23
|
+
return columns
|
|
24
|
+
.map((col, i) => col.padEnd(widths[i]))
|
|
25
|
+
.join(" ");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Display model list with descriptions and context sizes
|
|
29
|
+
*/
|
|
30
|
+
function displayModels(providerName, models, currentModel) {
|
|
31
|
+
console.log(chalk_1.default.green(`\n✓ Provider: ${providerName}`));
|
|
32
|
+
console.log(chalk_1.default.dim("─".repeat(80)) + "\n");
|
|
33
|
+
// Calculate column widths
|
|
34
|
+
const modelWidth = Math.max(20, ...models.map(m => m.id.length)) + 2;
|
|
35
|
+
const contextWidth = 15;
|
|
36
|
+
// Header
|
|
37
|
+
console.log(chalk_1.default.cyan.bold(formatTableRow(["Model", "Context", "Capabilities"], [modelWidth, contextWidth, 40])));
|
|
38
|
+
console.log(chalk_1.default.dim("─".repeat(80)));
|
|
39
|
+
// Models
|
|
40
|
+
for (const model of models) {
|
|
41
|
+
const isCurrent = model.id === currentModel;
|
|
42
|
+
const modelDisplay = isCurrent
|
|
43
|
+
? chalk_1.default.green.bold(`● ${model.id}`)
|
|
44
|
+
: chalk_1.default.white(` ${model.id}`);
|
|
45
|
+
const contextDisplay = chalk_1.default.yellow(formatContext(model.contextWindow));
|
|
46
|
+
const capabilitiesDisplay = chalk_1.default.gray(model.capabilities.join(", "));
|
|
47
|
+
console.log(formatTableRow([modelDisplay, contextDisplay, capabilitiesDisplay], [modelWidth, contextWidth, 40]));
|
|
48
|
+
// Description on next line
|
|
49
|
+
console.log(chalk_1.default.dim(` ${model.description}`));
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
console.log(chalk_1.default.dim("─".repeat(80)));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Display current provider status
|
|
56
|
+
*/
|
|
57
|
+
function displayCurrentStatus(provider, model, endpoint) {
|
|
58
|
+
console.log(chalk_1.default.green("\n✓ Current Configuration:\n"));
|
|
59
|
+
console.log(` ${chalk_1.default.cyan.bold("Provider:")} ${chalk_1.default.white(provider)}`);
|
|
60
|
+
if (model) {
|
|
61
|
+
console.log(` ${chalk_1.default.cyan.bold("Model:")} ${chalk_1.default.white(model)}`);
|
|
62
|
+
}
|
|
63
|
+
if (endpoint) {
|
|
64
|
+
console.log(` ${chalk_1.default.cyan.bold("Endpoint:")} ${chalk_1.default.dim(endpoint)}`);
|
|
65
|
+
}
|
|
66
|
+
console.log();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Display success message
|
|
70
|
+
*/
|
|
71
|
+
function displaySuccess(message) {
|
|
72
|
+
console.log(chalk_1.default.green(`\n✓ ${message}\n`));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Display error message
|
|
76
|
+
*/
|
|
77
|
+
function displayError(message) {
|
|
78
|
+
console.log(chalk_1.default.red(`\n✗ Error: ${message}\n`));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Display warning message
|
|
82
|
+
*/
|
|
83
|
+
function displayWarning(message) {
|
|
84
|
+
console.log(chalk_1.default.yellow(`\n⚠ Warning: ${message}\n`));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Display info message
|
|
88
|
+
*/
|
|
89
|
+
function displayInfo(message) {
|
|
90
|
+
console.log(chalk_1.default.blue(`\nℹ ${message}\n`));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Format context window for display
|
|
94
|
+
*/
|
|
95
|
+
function formatContext(tokens) {
|
|
96
|
+
if (tokens >= 1000000) {
|
|
97
|
+
return `${(tokens / 1000000).toFixed(0)}M tokens`;
|
|
98
|
+
}
|
|
99
|
+
else if (tokens >= 1000) {
|
|
100
|
+
return `${(tokens / 1000).toFixed(0)}K tokens`;
|
|
101
|
+
}
|
|
102
|
+
return `${tokens} tokens`;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Display provider list
|
|
106
|
+
*/
|
|
107
|
+
function displayProviders(providers) {
|
|
108
|
+
console.log(chalk_1.default.green("\n✓ Available Providers:\n"));
|
|
109
|
+
for (const provider of providers) {
|
|
110
|
+
console.log(chalk_1.default.cyan.bold(` ${provider.name} (${provider.id})`));
|
|
111
|
+
console.log(chalk_1.default.dim(` Models: ${provider.modelCount}`));
|
|
112
|
+
if (provider.endpoint) {
|
|
113
|
+
console.log(chalk_1.default.dim(` Endpoint: ${provider.endpoint}`));
|
|
114
|
+
}
|
|
115
|
+
console.log();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Manager
|
|
3
|
+
*
|
|
4
|
+
* Installs and manages Claude Code hooks for:
|
|
5
|
+
* - Token tracking
|
|
6
|
+
* - Visual enhancements (context bar, model display)
|
|
7
|
+
* - Custom system prompts
|
|
8
|
+
*
|
|
9
|
+
* Hooks are installed to ~/.claude/ directory
|
|
10
|
+
*/
|
|
11
|
+
export interface HooksConfig {
|
|
12
|
+
tokenTracking: boolean;
|
|
13
|
+
visualEnhancements: boolean;
|
|
14
|
+
customPrompts: boolean;
|
|
15
|
+
lastInstalled?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if hooks are installed
|
|
19
|
+
*/
|
|
20
|
+
export declare function areHooksInstalled(): Promise<{
|
|
21
|
+
tokenTracking: boolean;
|
|
22
|
+
visualEnhancements: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Install token tracker hook
|
|
26
|
+
*/
|
|
27
|
+
export declare function installTokenTracker(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Install visual enhancements hook
|
|
30
|
+
*/
|
|
31
|
+
export declare function installVisualEnhancements(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Install all hooks
|
|
34
|
+
*/
|
|
35
|
+
export declare function installAllHooks(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Remove token tracker hook
|
|
38
|
+
*/
|
|
39
|
+
export declare function removeTokenTracker(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Remove visual enhancements hook
|
|
42
|
+
*/
|
|
43
|
+
export declare function removeVisualEnhancements(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Remove all hooks
|
|
46
|
+
*/
|
|
47
|
+
export declare function removeAllHooks(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Run token tracker display
|
|
50
|
+
*/
|
|
51
|
+
export declare function showTokenStatus(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Run visual enhancements display
|
|
54
|
+
*/
|
|
55
|
+
export declare function showVisualStatus(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Reset token usage
|
|
58
|
+
*/
|
|
59
|
+
export declare function resetTokenUsage(): Promise<void>;
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IACjD,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC,CAKD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAYzD;AAED;;GAEG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAY/D;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQxD;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ9D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpD;AA2CD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAWrD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAWtD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAYrD"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hook Manager
|
|
4
|
+
*
|
|
5
|
+
* Installs and manages Claude Code hooks for:
|
|
6
|
+
* - Token tracking
|
|
7
|
+
* - Visual enhancements (context bar, model display)
|
|
8
|
+
* - Custom system prompts
|
|
9
|
+
*
|
|
10
|
+
* Hooks are installed to ~/.claude/ directory
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.areHooksInstalled = areHooksInstalled;
|
|
47
|
+
exports.installTokenTracker = installTokenTracker;
|
|
48
|
+
exports.installVisualEnhancements = installVisualEnhancements;
|
|
49
|
+
exports.installAllHooks = installAllHooks;
|
|
50
|
+
exports.removeTokenTracker = removeTokenTracker;
|
|
51
|
+
exports.removeVisualEnhancements = removeVisualEnhancements;
|
|
52
|
+
exports.removeAllHooks = removeAllHooks;
|
|
53
|
+
exports.showTokenStatus = showTokenStatus;
|
|
54
|
+
exports.showVisualStatus = showVisualStatus;
|
|
55
|
+
exports.resetTokenUsage = resetTokenUsage;
|
|
56
|
+
const fs = __importStar(require("fs-extra"));
|
|
57
|
+
const path = __importStar(require("path"));
|
|
58
|
+
const os = __importStar(require("os"));
|
|
59
|
+
const child_process_1 = require("child_process");
|
|
60
|
+
const CLAUDE_DIR = path.join(os.homedir(), ".claude");
|
|
61
|
+
const TOKEN_TRACKER_SRC = path.join(__dirname, "..", "hooks", "token-tracker.js");
|
|
62
|
+
const VISUAL_ENHANCEMENTS_SRC = path.join(__dirname, "..", "hooks", "visual-enhancements.js");
|
|
63
|
+
const TOKEN_TRACKER_DEST = path.join(CLAUDE_DIR, "token-tracker.js");
|
|
64
|
+
const VISUAL_ENHANCEMENTS_DEST = path.join(CLAUDE_DIR, "visual-enhancements.js");
|
|
65
|
+
const HOOKS_CONFIG = path.join(CLAUDE_DIR, "hooks-config.json");
|
|
66
|
+
/**
|
|
67
|
+
* Check if hooks are installed
|
|
68
|
+
*/
|
|
69
|
+
async function areHooksInstalled() {
|
|
70
|
+
return {
|
|
71
|
+
tokenTracking: await fs.pathExists(TOKEN_TRACKER_DEST),
|
|
72
|
+
visualEnhancements: await fs.pathExists(VISUAL_ENHANCEMENTS_DEST)
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Install token tracker hook
|
|
77
|
+
*/
|
|
78
|
+
async function installTokenTracker() {
|
|
79
|
+
if (!await fs.pathExists(TOKEN_TRACKER_SRC)) {
|
|
80
|
+
throw new Error("Token tracker source not found. Please rebuild the project.");
|
|
81
|
+
}
|
|
82
|
+
await fs.ensureDir(CLAUDE_DIR);
|
|
83
|
+
await fs.copy(TOKEN_TRACKER_SRC, TOKEN_TRACKER_DEST, { overwrite: true });
|
|
84
|
+
const config = await readHooksConfig();
|
|
85
|
+
config.tokenTracking = true;
|
|
86
|
+
config.lastInstalled = new Date().toISOString();
|
|
87
|
+
await writeHooksConfig(config);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Install visual enhancements hook
|
|
91
|
+
*/
|
|
92
|
+
async function installVisualEnhancements() {
|
|
93
|
+
if (!await fs.pathExists(VISUAL_ENHANCEMENTS_SRC)) {
|
|
94
|
+
throw new Error("Visual enhancements source not found. Please rebuild the project.");
|
|
95
|
+
}
|
|
96
|
+
await fs.ensureDir(CLAUDE_DIR);
|
|
97
|
+
await fs.copy(VISUAL_ENHANCEMENTS_SRC, VISUAL_ENHANCEMENTS_DEST, { overwrite: true });
|
|
98
|
+
const config = await readHooksConfig();
|
|
99
|
+
config.visualEnhancements = true;
|
|
100
|
+
config.lastInstalled = new Date().toISOString();
|
|
101
|
+
await writeHooksConfig(config);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Install all hooks
|
|
105
|
+
*/
|
|
106
|
+
async function installAllHooks() {
|
|
107
|
+
await installTokenTracker();
|
|
108
|
+
await installVisualEnhancements();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Remove token tracker hook
|
|
112
|
+
*/
|
|
113
|
+
async function removeTokenTracker() {
|
|
114
|
+
if (await fs.pathExists(TOKEN_TRACKER_DEST)) {
|
|
115
|
+
await fs.remove(TOKEN_TRACKER_DEST);
|
|
116
|
+
}
|
|
117
|
+
const config = await readHooksConfig();
|
|
118
|
+
config.tokenTracking = false;
|
|
119
|
+
await writeHooksConfig(config);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Remove visual enhancements hook
|
|
123
|
+
*/
|
|
124
|
+
async function removeVisualEnhancements() {
|
|
125
|
+
if (await fs.pathExists(VISUAL_ENHANCEMENTS_DEST)) {
|
|
126
|
+
await fs.remove(VISUAL_ENHANCEMENTS_DEST);
|
|
127
|
+
}
|
|
128
|
+
const config = await readHooksConfig();
|
|
129
|
+
config.visualEnhancements = false;
|
|
130
|
+
await writeHooksConfig(config);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Remove all hooks
|
|
134
|
+
*/
|
|
135
|
+
async function removeAllHooks() {
|
|
136
|
+
await removeTokenTracker();
|
|
137
|
+
await removeVisualEnhancements();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Read hooks configuration
|
|
141
|
+
*/
|
|
142
|
+
async function readHooksConfig() {
|
|
143
|
+
if (!await fs.pathExists(HOOKS_CONFIG)) {
|
|
144
|
+
return {
|
|
145
|
+
tokenTracking: false,
|
|
146
|
+
visualEnhancements: false,
|
|
147
|
+
customPrompts: false
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const content = await fs.readFile(HOOKS_CONFIG, "utf-8");
|
|
152
|
+
return JSON.parse(content);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return {
|
|
156
|
+
tokenTracking: false,
|
|
157
|
+
visualEnhancements: false,
|
|
158
|
+
customPrompts: false
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Write hooks configuration
|
|
164
|
+
*/
|
|
165
|
+
async function writeHooksConfig(config) {
|
|
166
|
+
await fs.writeFile(HOOKS_CONFIG, JSON.stringify(config, null, 2), "utf-8");
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Run a hook script in a subprocess for isolation
|
|
170
|
+
*/
|
|
171
|
+
function runHookScript(scriptPath, args = []) {
|
|
172
|
+
(0, child_process_1.execFileSync)("node", [scriptPath, ...args], {
|
|
173
|
+
stdio: "inherit",
|
|
174
|
+
timeout: 10000
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Run token tracker display
|
|
179
|
+
*/
|
|
180
|
+
async function showTokenStatus() {
|
|
181
|
+
if (!await fs.pathExists(TOKEN_TRACKER_DEST)) {
|
|
182
|
+
console.log("Token tracker not installed. Run: claude-switch hooks install");
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
runHookScript(TOKEN_TRACKER_DEST);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.error("Failed to run token tracker:", error instanceof Error ? error.message : error);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Run visual enhancements display
|
|
194
|
+
*/
|
|
195
|
+
async function showVisualStatus() {
|
|
196
|
+
if (!await fs.pathExists(VISUAL_ENHANCEMENTS_DEST)) {
|
|
197
|
+
console.log("Visual enhancements not installed. Run: claude-switch hooks install");
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
runHookScript(VISUAL_ENHANCEMENTS_DEST);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
console.error("Failed to run visual enhancements:", error instanceof Error ? error.message : error);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Reset token usage
|
|
209
|
+
*/
|
|
210
|
+
async function resetTokenUsage() {
|
|
211
|
+
if (!await fs.pathExists(TOKEN_TRACKER_DEST)) {
|
|
212
|
+
console.log("Token tracker not installed. Run: claude-switch hooks install");
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
runHookScript(TOKEN_TRACKER_DEST, ["--reset"]);
|
|
217
|
+
console.log("Token usage reset complete.");
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
console.error("Failed to reset token usage:", error instanceof Error ? error.message : error);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|