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.
Files changed (83) hide show
  1. package/AGENTS.md +265 -0
  2. package/ARCHITECTURE.md +162 -0
  3. package/CLAUDE.md +267 -0
  4. package/LICENSE +21 -0
  5. package/QWEN.md +429 -0
  6. package/README.md +833 -0
  7. package/dist/clients/claude-code.d.ts +92 -0
  8. package/dist/clients/claude-code.d.ts.map +1 -0
  9. package/dist/clients/claude-code.js +312 -0
  10. package/dist/clients/claude-code.js.map +1 -0
  11. package/dist/clients/opencode.d.ts +71 -0
  12. package/dist/clients/opencode.d.ts.map +1 -0
  13. package/dist/clients/opencode.js +604 -0
  14. package/dist/clients/opencode.js.map +1 -0
  15. package/dist/config.d.ts +37 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +122 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/display.d.ts +51 -0
  20. package/dist/display.d.ts.map +1 -0
  21. package/dist/display.js +118 -0
  22. package/dist/display.js.map +1 -0
  23. package/dist/hooks/index.d.ts +60 -0
  24. package/dist/hooks/index.d.ts.map +1 -0
  25. package/dist/hooks/index.js +223 -0
  26. package/dist/hooks/index.js.map +1 -0
  27. package/dist/hooks/token-tracker.js +280 -0
  28. package/dist/hooks/visual-enhancements.js +364 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +1091 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/models.d.ts +34 -0
  34. package/dist/models.d.ts.map +1 -0
  35. package/dist/models.js +343 -0
  36. package/dist/models.js.map +1 -0
  37. package/dist/providers/alibaba.d.ts +25 -0
  38. package/dist/providers/alibaba.d.ts.map +1 -0
  39. package/dist/providers/alibaba.js +37 -0
  40. package/dist/providers/alibaba.js.map +1 -0
  41. package/dist/providers/anthropic.d.ts +14 -0
  42. package/dist/providers/anthropic.d.ts.map +1 -0
  43. package/dist/providers/anthropic.js +19 -0
  44. package/dist/providers/anthropic.js.map +1 -0
  45. package/dist/providers/gemini.d.ts +44 -0
  46. package/dist/providers/gemini.d.ts.map +1 -0
  47. package/dist/providers/gemini.js +156 -0
  48. package/dist/providers/gemini.js.map +1 -0
  49. package/dist/providers/glm.d.ts +25 -0
  50. package/dist/providers/glm.d.ts.map +1 -0
  51. package/dist/providers/glm.js +89 -0
  52. package/dist/providers/glm.js.map +1 -0
  53. package/dist/providers/ollama.d.ts +48 -0
  54. package/dist/providers/ollama.d.ts.map +1 -0
  55. package/dist/providers/ollama.js +174 -0
  56. package/dist/providers/ollama.js.map +1 -0
  57. package/dist/providers/openrouter.d.ts +24 -0
  58. package/dist/providers/openrouter.d.ts.map +1 -0
  59. package/dist/providers/openrouter.js +36 -0
  60. package/dist/providers/openrouter.js.map +1 -0
  61. package/dist/verify.d.ts +24 -0
  62. package/dist/verify.d.ts.map +1 -0
  63. package/dist/verify.js +262 -0
  64. package/dist/verify.js.map +1 -0
  65. package/package.json +57 -0
  66. package/scripts/copy-hooks.js +15 -0
  67. package/src/clients/claude-code.ts +340 -0
  68. package/src/clients/opencode.ts +618 -0
  69. package/src/config.ts +101 -0
  70. package/src/display.ts +151 -0
  71. package/src/hooks/index.ts +208 -0
  72. package/src/hooks/token-tracker.js +280 -0
  73. package/src/hooks/visual-enhancements.js +364 -0
  74. package/src/index.ts +1263 -0
  75. package/src/models.ts +366 -0
  76. package/src/providers/alibaba.ts +43 -0
  77. package/src/providers/anthropic.ts +23 -0
  78. package/src/providers/gemini.ts +136 -0
  79. package/src/providers/glm.ts +60 -0
  80. package/src/providers/ollama.ts +146 -0
  81. package/src/providers/openrouter.ts +42 -0
  82. package/src/verify.ts +258 -0
  83. 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"}
@@ -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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"}