coder-link 0.0.9

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 (88) hide show
  1. package/README.md +200 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +684 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +12 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +12 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/amp-manager.d.ts +24 -0
  11. package/dist/lib/amp-manager.d.ts.map +1 -0
  12. package/dist/lib/amp-manager.js +46 -0
  13. package/dist/lib/amp-manager.js.map +1 -0
  14. package/dist/lib/claude-code-manager.d.ts +55 -0
  15. package/dist/lib/claude-code-manager.d.ts.map +1 -0
  16. package/dist/lib/claude-code-manager.js +408 -0
  17. package/dist/lib/claude-code-manager.js.map +1 -0
  18. package/dist/lib/crush-manager.d.ts +31 -0
  19. package/dist/lib/crush-manager.d.ts.map +1 -0
  20. package/dist/lib/crush-manager.js +262 -0
  21. package/dist/lib/crush-manager.js.map +1 -0
  22. package/dist/lib/factory-droid-manager.d.ts +36 -0
  23. package/dist/lib/factory-droid-manager.d.ts.map +1 -0
  24. package/dist/lib/factory-droid-manager.js +387 -0
  25. package/dist/lib/factory-droid-manager.js.map +1 -0
  26. package/dist/lib/kimi-manager.d.ts +34 -0
  27. package/dist/lib/kimi-manager.d.ts.map +1 -0
  28. package/dist/lib/kimi-manager.js +316 -0
  29. package/dist/lib/kimi-manager.js.map +1 -0
  30. package/dist/lib/opencode-manager.d.ts +31 -0
  31. package/dist/lib/opencode-manager.d.ts.map +1 -0
  32. package/dist/lib/opencode-manager.js +315 -0
  33. package/dist/lib/opencode-manager.js.map +1 -0
  34. package/dist/lib/pi-manager.d.ts +30 -0
  35. package/dist/lib/pi-manager.d.ts.map +1 -0
  36. package/dist/lib/pi-manager.js +196 -0
  37. package/dist/lib/pi-manager.js.map +1 -0
  38. package/dist/lib/tool-manager.d.ts +51 -0
  39. package/dist/lib/tool-manager.d.ts.map +1 -0
  40. package/dist/lib/tool-manager.js +113 -0
  41. package/dist/lib/tool-manager.js.map +1 -0
  42. package/dist/locales/en_US.json +49 -0
  43. package/dist/locales/zh_CN.json +49 -0
  44. package/dist/mcp-services.d.ts +3 -0
  45. package/dist/mcp-services.d.ts.map +1 -0
  46. package/dist/mcp-services.js +26 -0
  47. package/dist/mcp-services.js.map +1 -0
  48. package/dist/menu.d.ts +2 -0
  49. package/dist/menu.d.ts.map +1 -0
  50. package/dist/menu.js +1226 -0
  51. package/dist/menu.js.map +1 -0
  52. package/dist/utils/api-test.d.ts +32 -0
  53. package/dist/utils/api-test.d.ts.map +1 -0
  54. package/dist/utils/api-test.js +163 -0
  55. package/dist/utils/api-test.js.map +1 -0
  56. package/dist/utils/brand.d.ts +39 -0
  57. package/dist/utils/brand.d.ts.map +1 -0
  58. package/dist/utils/brand.js +195 -0
  59. package/dist/utils/brand.js.map +1 -0
  60. package/dist/utils/config.d.ts +100 -0
  61. package/dist/utils/config.d.ts.map +1 -0
  62. package/dist/utils/config.js +483 -0
  63. package/dist/utils/config.js.map +1 -0
  64. package/dist/utils/exec.d.ts +5 -0
  65. package/dist/utils/exec.d.ts.map +1 -0
  66. package/dist/utils/exec.js +145 -0
  67. package/dist/utils/exec.js.map +1 -0
  68. package/dist/utils/i18n.d.ts +56 -0
  69. package/dist/utils/i18n.d.ts.map +1 -0
  70. package/dist/utils/i18n.js +42 -0
  71. package/dist/utils/i18n.js.map +1 -0
  72. package/dist/utils/keyboard.d.ts +32 -0
  73. package/dist/utils/keyboard.d.ts.map +1 -0
  74. package/dist/utils/keyboard.js +109 -0
  75. package/dist/utils/keyboard.js.map +1 -0
  76. package/dist/utils/logger.d.ts +14 -0
  77. package/dist/utils/logger.d.ts.map +1 -0
  78. package/dist/utils/logger.js +55 -0
  79. package/dist/utils/logger.js.map +1 -0
  80. package/dist/utils/output.d.ts +58 -0
  81. package/dist/utils/output.d.ts.map +1 -0
  82. package/dist/utils/output.js +93 -0
  83. package/dist/utils/output.js.map +1 -0
  84. package/dist/wizard.d.ts +2 -0
  85. package/dist/wizard.d.ts.map +1 -0
  86. package/dist/wizard.js +114 -0
  87. package/dist/wizard.js.map +1 -0
  88. package/package.json +65 -0
@@ -0,0 +1,31 @@
1
+ import { MCPService } from './tool-manager.js';
2
+ import type { ProviderOptions } from './tool-manager.js';
3
+ export declare class CrushManager {
4
+ static instance: CrushManager | null;
5
+ private configPath;
6
+ constructor();
7
+ static getInstance(): CrushManager;
8
+ private ensureConfigDir;
9
+ private getConfig;
10
+ private saveConfig;
11
+ private getBaseUrl;
12
+ loadConfig(plan: string, apiKey: string, options?: ProviderOptions): Promise<void>;
13
+ unloadConfig(): Promise<void>;
14
+ detectCurrentConfig(): Promise<{
15
+ plan: string | null;
16
+ apiKey: string | null;
17
+ model?: string;
18
+ }>;
19
+ isMCPInstalled(mcpId: string): boolean;
20
+ installMCP(mcp: MCPService, apiKey: string, plan: string): Promise<void>;
21
+ uninstallMCP(mcpId: string): Promise<void>;
22
+ getInstalledMCPs(): string[];
23
+ getMCPStatus(mcpServices: MCPService[]): Map<string, boolean>;
24
+ getOtherMCPs(builtinIds: string[]): Array<{
25
+ id: string;
26
+ config: any;
27
+ }>;
28
+ getAllMCPServers(): Record<string, any>;
29
+ }
30
+ export declare const crushManager: CrushManager;
31
+ //# sourceMappingURL=crush-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crush-manager.d.ts","sourceRoot":"","sources":["../../src/lib/crush-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAQ;IAC5C,OAAO,CAAC,UAAU,CAAS;;IAO3B,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAaZ,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,mBAAmB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BpG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAYhC,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmExE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD,gBAAgB,IAAI,MAAM,EAAE;IAY5B,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ7D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,CAAC;IAkBtE,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAQxC;AAED,eAAO,MAAM,YAAY,cAA6B,CAAC"}
@@ -0,0 +1,262 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { homedir } from 'os';
4
+ import { logger } from '../utils/logger.js';
5
+ export class CrushManager {
6
+ static instance = null;
7
+ configPath;
8
+ constructor() {
9
+ // Crush 配置文件路径: ~/.config/crush/crush.json
10
+ this.configPath = join(homedir(), '.config', 'crush', 'crush.json');
11
+ }
12
+ static getInstance() {
13
+ if (!CrushManager.instance) {
14
+ CrushManager.instance = new CrushManager();
15
+ }
16
+ return CrushManager.instance;
17
+ }
18
+ ensureConfigDir() {
19
+ const dir = dirname(this.configPath);
20
+ if (!existsSync(dir)) {
21
+ mkdirSync(dir, { recursive: true });
22
+ }
23
+ }
24
+ getConfig() {
25
+ try {
26
+ if (existsSync(this.configPath)) {
27
+ const content = readFileSync(this.configPath, 'utf-8');
28
+ return JSON.parse(content);
29
+ }
30
+ }
31
+ catch (error) {
32
+ console.warn('Failed to read Crush config:', error);
33
+ logger.logError('CrushManager.getConfig', error);
34
+ }
35
+ return {};
36
+ }
37
+ saveConfig(config) {
38
+ try {
39
+ this.ensureConfigDir();
40
+ writeFileSync(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
41
+ }
42
+ catch (error) {
43
+ throw new Error(`Failed to save Crush config: ${error}`);
44
+ }
45
+ }
46
+ getBaseUrl(plan, options) {
47
+ if (options?.baseUrl?.trim()) {
48
+ return options.baseUrl.trim();
49
+ }
50
+ // All kimi-like providers use the same default base URL
51
+ if (plan === 'kimi' || plan === 'openrouter' || plan === 'nvidia') {
52
+ return 'https://api.moonshot.ai/v1';
53
+ }
54
+ return plan === 'glm_coding_plan_global'
55
+ ? 'https://api.z.ai/api/coding/paas/v4'
56
+ : 'https://open.bigmodel.cn/api/coding/paas/v4';
57
+ }
58
+ async loadConfig(plan, apiKey, options) {
59
+ const currentConfig = this.getConfig();
60
+ const baseUrl = this.getBaseUrl(plan, options);
61
+ // Determine provider name for display
62
+ const providerDisplayName = (plan === 'kimi' || plan === 'openrouter' || plan === 'nvidia')
63
+ ? 'Kimi Provider'
64
+ : 'ZAI Provider';
65
+ const newConfig = {
66
+ ...currentConfig,
67
+ providers: {
68
+ ...(currentConfig.providers || {}),
69
+ zai: {
70
+ id: 'zai',
71
+ name: providerDisplayName,
72
+ base_url: baseUrl,
73
+ api_key: apiKey
74
+ }
75
+ }
76
+ };
77
+ this.saveConfig(newConfig);
78
+ }
79
+ async unloadConfig() {
80
+ const currentConfig = this.getConfig();
81
+ // Remove providers' zai configuration
82
+ if (currentConfig.providers) {
83
+ delete currentConfig.providers['zai'];
84
+ // If providers is empty, delete providers field
85
+ if (Object.keys(currentConfig.providers).length === 0) {
86
+ delete currentConfig.providers;
87
+ }
88
+ }
89
+ this.saveConfig(currentConfig);
90
+ }
91
+ async detectCurrentConfig() {
92
+ try {
93
+ const config = this.getConfig();
94
+ // Check providers.zai configuration
95
+ if (!config.providers || !config.providers['zai']) {
96
+ return { plan: null, apiKey: null };
97
+ }
98
+ const zaiProvider = config.providers['zai'];
99
+ const apiKey = zaiProvider.api_key || null;
100
+ const baseUrl = zaiProvider.base_url;
101
+ let plan = null;
102
+ if (baseUrl === 'https://api.z.ai/api/coding/paas/v4') {
103
+ plan = 'glm_coding_plan_global';
104
+ }
105
+ else if (baseUrl === 'https://open.bigmodel.cn/api/coding/paas/v4') {
106
+ plan = 'glm_coding_plan_china';
107
+ }
108
+ else if (baseUrl?.includes('openrouter.ai')) {
109
+ plan = 'openrouter';
110
+ }
111
+ else if (baseUrl?.includes('nvidia.com')) {
112
+ plan = 'nvidia';
113
+ }
114
+ else if (baseUrl) {
115
+ plan = 'kimi';
116
+ }
117
+ // Crush doesn't store model in provider config
118
+ return { plan, apiKey, model: undefined };
119
+ }
120
+ catch {
121
+ return { plan: null, apiKey: null };
122
+ }
123
+ }
124
+ isMCPInstalled(mcpId) {
125
+ try {
126
+ const config = this.getConfig();
127
+ if (!config.mcp) {
128
+ return false;
129
+ }
130
+ return mcpId in config.mcp;
131
+ }
132
+ catch {
133
+ return false;
134
+ }
135
+ }
136
+ async installMCP(mcp, apiKey, plan) {
137
+ try {
138
+ const config = this.getConfig();
139
+ if (!config.mcp) {
140
+ config.mcp = {};
141
+ }
142
+ let mcpConfig;
143
+ if (mcp.protocol === 'stdio') {
144
+ // Determine environment variables
145
+ let env = {};
146
+ if (mcp.envTemplate && plan) {
147
+ env = { ...(mcp.envTemplate[plan] || {}) };
148
+ }
149
+ else if (mcp.env) {
150
+ env = { ...mcp.env };
151
+ }
152
+ // Add API key if required
153
+ if (mcp.requiresAuth && apiKey) {
154
+ env.Z_AI_API_KEY = apiKey;
155
+ }
156
+ mcpConfig = {
157
+ type: 'stdio',
158
+ command: mcp.command || 'npx',
159
+ args: mcp.args || [],
160
+ env
161
+ };
162
+ }
163
+ else if (mcp.protocol === 'sse' || mcp.protocol === 'streamable-http') {
164
+ // Determine URL based on plan
165
+ let url = '';
166
+ if (mcp.urlTemplate && plan) {
167
+ url = mcp.urlTemplate[plan];
168
+ }
169
+ else if (mcp.url) {
170
+ url = mcp.url;
171
+ }
172
+ else {
173
+ throw new Error(`MCP ${mcp.id} missing url or urlTemplate`);
174
+ }
175
+ // Crush uses http type
176
+ mcpConfig = {
177
+ type: mcp.protocol === 'sse' ? 'sse' : 'http',
178
+ url: url,
179
+ headers: {
180
+ ...(mcp.headers || {})
181
+ }
182
+ };
183
+ // Add API key to headers if required
184
+ if (mcp.requiresAuth && apiKey) {
185
+ mcpConfig.headers = {
186
+ ...mcpConfig.headers,
187
+ 'Authorization': `Bearer ${apiKey}`
188
+ };
189
+ }
190
+ }
191
+ else {
192
+ throw new Error(`Unsupported protocol: ${mcp.protocol}`);
193
+ }
194
+ config.mcp[mcp.id] = mcpConfig;
195
+ this.saveConfig(config);
196
+ }
197
+ catch (error) {
198
+ throw new Error(`Failed to install MCP ${mcp.name}: ${error}`);
199
+ }
200
+ }
201
+ async uninstallMCP(mcpId) {
202
+ try {
203
+ const config = this.getConfig();
204
+ if (!config.mcp) {
205
+ return;
206
+ }
207
+ delete config.mcp[mcpId];
208
+ this.saveConfig(config);
209
+ }
210
+ catch (error) {
211
+ throw new Error(`Failed to uninstall MCP ${mcpId}: ${error}`);
212
+ }
213
+ }
214
+ getInstalledMCPs() {
215
+ try {
216
+ const config = this.getConfig();
217
+ if (!config.mcp) {
218
+ return [];
219
+ }
220
+ return Object.keys(config.mcp);
221
+ }
222
+ catch {
223
+ return [];
224
+ }
225
+ }
226
+ getMCPStatus(mcpServices) {
227
+ const status = new Map();
228
+ for (const mcp of mcpServices) {
229
+ status.set(mcp.id, this.isMCPInstalled(mcp.id));
230
+ }
231
+ return status;
232
+ }
233
+ getOtherMCPs(builtinIds) {
234
+ try {
235
+ const config = this.getConfig();
236
+ if (!config.mcp) {
237
+ return [];
238
+ }
239
+ const otherMCPs = [];
240
+ for (const [id, mcpConfig] of Object.entries(config.mcp)) {
241
+ if (!builtinIds.includes(id)) {
242
+ otherMCPs.push({ id, config: mcpConfig });
243
+ }
244
+ }
245
+ return otherMCPs;
246
+ }
247
+ catch {
248
+ return [];
249
+ }
250
+ }
251
+ getAllMCPServers() {
252
+ try {
253
+ const config = this.getConfig();
254
+ return config.mcp || {};
255
+ }
256
+ catch {
257
+ return {};
258
+ }
259
+ }
260
+ }
261
+ export const crushManager = CrushManager.getInstance();
262
+ //# sourceMappingURL=crush-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crush-manager.js","sourceRoot":"","sources":["../../src/lib/crush-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { MCPService } from './tool-manager.js';
2
+ import type { ProviderOptions } from './tool-manager.js';
3
+ export declare class FactoryDroidManager {
4
+ static instance: FactoryDroidManager | null;
5
+ private configPath;
6
+ private mcpConfigPath;
7
+ constructor();
8
+ static getInstance(): FactoryDroidManager;
9
+ private ensureConfigDir;
10
+ private getConfig;
11
+ private saveConfig;
12
+ private getMCPConfig;
13
+ private saveMCPConfig;
14
+ private getBaseUrl;
15
+ private getDisplayName;
16
+ private toCustomModelId;
17
+ loadConfig(plan: string, apiKey: string, options?: ProviderOptions): Promise<void>;
18
+ unloadConfig(): Promise<void>;
19
+ detectCurrentConfig(): Promise<{
20
+ plan: string | null;
21
+ apiKey: string | null;
22
+ model?: string;
23
+ }>;
24
+ isMCPInstalled(mcpId: string): boolean;
25
+ installMCP(mcp: MCPService, apiKey: string, plan: string): Promise<void>;
26
+ uninstallMCP(mcpId: string): Promise<void>;
27
+ getInstalledMCPs(): string[];
28
+ getMCPStatus(mcpServices: MCPService[]): Map<string, boolean>;
29
+ getOtherMCPs(builtinIds: string[]): Array<{
30
+ id: string;
31
+ config: any;
32
+ }>;
33
+ getAllMCPServers(): Record<string, any>;
34
+ }
35
+ export declare const factoryDroidManager: FactoryDroidManager;
36
+ //# sourceMappingURL=factory-droid-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-droid-manager.d.ts","sourceRoot":"","sources":["../../src/lib/factory-droid-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IACnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;;IAS9B,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,eAAe;IAOjB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAgGlF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,mBAAmB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAyCpG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAYhC,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuExE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD,gBAAgB,IAAI,MAAM,EAAE;IAY5B,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ7D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,CAAC;IAkBtE,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAQxC;AAED,eAAO,MAAM,mBAAmB,qBAAoC,CAAC"}