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,316 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
2
+ import { dirname, join } from 'path';
3
+ import { homedir } from 'os';
4
+ import * as TOML from '@iarna/toml';
5
+ import { logger } from '../utils/logger.js';
6
+ const DEFAULT_BASE_URL = 'https://api.moonshot.ai/v1';
7
+ const DEFAULT_PROVIDER_ID = 'managed:moonshot-ai';
8
+ const DEFAULT_MODEL_ID = 'moonshot-ai/kimi-k2.5';
9
+ // Known base URLs for provider detection
10
+ const PROVIDER_BASE_URLS = {
11
+ 'https://api.moonshot.ai/v1': 'kimi',
12
+ 'https://openrouter.ai/api/v1': 'openrouter',
13
+ 'https://integrate.api.nvidia.com/v1': 'nvidia',
14
+ };
15
+ export class KimiManager {
16
+ static instance = null;
17
+ configPath;
18
+ constructor() {
19
+ this.configPath = join(homedir(), '.kimi', 'config.toml');
20
+ }
21
+ static getInstance() {
22
+ if (!KimiManager.instance) {
23
+ KimiManager.instance = new KimiManager();
24
+ }
25
+ return KimiManager.instance;
26
+ }
27
+ ensureConfigDir() {
28
+ const dir = dirname(this.configPath);
29
+ if (!existsSync(dir)) {
30
+ mkdirSync(dir, { recursive: true });
31
+ }
32
+ }
33
+ readConfigText() {
34
+ if (!existsSync(this.configPath))
35
+ return '';
36
+ return readFileSync(this.configPath, 'utf-8');
37
+ }
38
+ readConfig() {
39
+ try {
40
+ const text = this.readConfigText();
41
+ if (!text.trim())
42
+ return {};
43
+ const parsed = TOML.parse(text);
44
+ return (parsed || {});
45
+ }
46
+ catch (error) {
47
+ logger.logError('KimiManager.readConfig', error);
48
+ // If parsing fails, fail safe by not overwriting the file.
49
+ throw new Error(`Failed to parse Kimi config at ${this.configPath}`);
50
+ }
51
+ }
52
+ writeConfig(config) {
53
+ try {
54
+ this.ensureConfigDir();
55
+ const text = TOML.stringify(config);
56
+ writeFileSync(this.configPath, text, 'utf-8');
57
+ }
58
+ catch (error) {
59
+ logger.logError('KimiManager.writeConfig', error);
60
+ throw new Error(`Failed to write Kimi config at ${this.configPath}`);
61
+ }
62
+ }
63
+ ensureMcpSilent(config) {
64
+ const servers = config?.mcp?.servers;
65
+ if (!servers || typeof servers !== 'object')
66
+ return false;
67
+ let changed = false;
68
+ for (const value of Object.values(servers)) {
69
+ const server = value;
70
+ if (!server || typeof server !== 'object')
71
+ continue;
72
+ if (server.type !== 'stdio')
73
+ continue;
74
+ const cmd = (server.command || '').toString().toLowerCase();
75
+ const isNpx = cmd === 'npx'
76
+ || cmd.endsWith('npx')
77
+ || cmd.endsWith('npx.cmd')
78
+ || cmd.endsWith('npx.exe');
79
+ if (!isNpx)
80
+ continue;
81
+ const args = Array.isArray(server.args) ? server.args : [];
82
+ if (!args.includes('--silent')) {
83
+ server.args = ['--silent', ...args];
84
+ changed = true;
85
+ }
86
+ }
87
+ return changed;
88
+ }
89
+ ensureProvider(config, apiKey, options) {
90
+ config.providers = config.providers && typeof config.providers === 'object' ? config.providers : {};
91
+ const providerId = options?.providerId?.trim() || DEFAULT_PROVIDER_ID;
92
+ const baseUrl = options?.baseUrl?.trim() || DEFAULT_BASE_URL;
93
+ // Use the OpenAI-legacy provider type for all Kimi-compatible endpoints.
94
+ // This keeps requests aligned with OpenAI chat-completions and avoids
95
+ // sending unsupported parameters for third-party gateways.
96
+ const providerType = 'openai_legacy';
97
+ // Always update the provider with current values (ensures refresh works)
98
+ config.providers[providerId] = {
99
+ type: providerType,
100
+ base_url: baseUrl,
101
+ api_key: apiKey
102
+ };
103
+ }
104
+ ensureModel(config, options) {
105
+ config.models = config.models && typeof config.models === 'object' ? config.models : {};
106
+ const providerId = options?.providerId?.trim() || DEFAULT_PROVIDER_ID;
107
+ const modelId = options?.model?.trim() || DEFAULT_MODEL_ID;
108
+ const maxCtx = options?.maxContextSize || 262144;
109
+ // Always update the model with current values (ensures refresh works)
110
+ config.models[modelId] = {
111
+ provider: providerId,
112
+ model: modelId,
113
+ max_context_size: maxCtx
114
+ };
115
+ config.default_model = modelId;
116
+ }
117
+ async detectCurrentConfig() {
118
+ try {
119
+ if (!existsSync(this.configPath)) {
120
+ return { plan: null, apiKey: null };
121
+ }
122
+ const config = this.readConfig();
123
+ const providers = (config.providers && typeof config.providers === 'object' ? config.providers : {});
124
+ // Helper to detect plan from base_url
125
+ const detectPlanFromBaseUrl = (baseUrl) => {
126
+ if (!baseUrl)
127
+ return 'kimi';
128
+ const normalized = baseUrl.toLowerCase().replace(/\/+$/, '');
129
+ for (const [url, plan] of Object.entries(PROVIDER_BASE_URLS)) {
130
+ if (normalized.includes(url.toLowerCase().replace(/\/+$/, ''))) {
131
+ return plan;
132
+ }
133
+ }
134
+ return 'kimi'; // fallback
135
+ };
136
+ // Get the default model if set
137
+ const defaultModel = typeof config.default_model === 'string' ? config.default_model : undefined;
138
+ // Prefer the canonical managed provider id
139
+ const managed = providers[DEFAULT_PROVIDER_ID];
140
+ if (managed && typeof managed === 'object' && typeof managed.api_key === 'string' && managed.api_key.trim()) {
141
+ const plan = detectPlanFromBaseUrl(managed.base_url);
142
+ return { plan, apiKey: managed.api_key.trim(), model: defaultModel };
143
+ }
144
+ // Otherwise, find any provider of type 'kimi' / 'openai_legacy'
145
+ for (const value of Object.values(providers)) {
146
+ const provider = value;
147
+ if (provider && typeof provider === 'object'
148
+ && (provider.type === 'kimi' || provider.type === 'openai_legacy' || provider.type === 'openai')
149
+ && typeof provider.api_key === 'string' && provider.api_key.trim()) {
150
+ const plan = detectPlanFromBaseUrl(provider.base_url);
151
+ return { plan, apiKey: provider.api_key.trim(), model: defaultModel };
152
+ }
153
+ }
154
+ return { plan: null, apiKey: null };
155
+ }
156
+ catch (error) {
157
+ logger.logError('KimiManager.detectCurrentConfig', error);
158
+ return { plan: null, apiKey: null };
159
+ }
160
+ }
161
+ async loadConfig(plan, apiKey, options) {
162
+ if (!apiKey || !apiKey.trim()) {
163
+ throw new Error('API key cannot be empty');
164
+ }
165
+ const config = existsSync(this.configPath) ? this.readConfig() : {};
166
+ this.ensureProvider(config, apiKey.trim(), options);
167
+ this.ensureModel(config, options);
168
+ this.ensureMcpSilent(config);
169
+ // Ensure MCP client defaults exist but do not override user values
170
+ config.mcp = config.mcp && typeof config.mcp === 'object' ? config.mcp : {};
171
+ config.mcp.client = config.mcp.client && typeof config.mcp.client === 'object' ? config.mcp.client : {};
172
+ if (typeof config.mcp.client.tool_call_timeout_ms !== 'number') {
173
+ config.mcp.client.tool_call_timeout_ms = 60000;
174
+ }
175
+ this.writeConfig(config);
176
+ }
177
+ async unloadConfig() {
178
+ if (!existsSync(this.configPath))
179
+ return;
180
+ const config = this.readConfig();
181
+ if (config.providers && typeof config.providers === 'object' && config.providers[DEFAULT_PROVIDER_ID]) {
182
+ // Avoid destructive deletes; just clear the key.
183
+ const provider = config.providers[DEFAULT_PROVIDER_ID];
184
+ if (provider && typeof provider === 'object') {
185
+ provider.api_key = '';
186
+ config.providers[DEFAULT_PROVIDER_ID] = provider;
187
+ }
188
+ this.writeConfig(config);
189
+ }
190
+ }
191
+ isMCPInstalled(mcpId) {
192
+ try {
193
+ if (!existsSync(this.configPath))
194
+ return false;
195
+ const config = this.readConfig();
196
+ const servers = config?.mcp?.servers;
197
+ if (!servers || typeof servers !== 'object')
198
+ return false;
199
+ return mcpId in servers;
200
+ }
201
+ catch {
202
+ return false;
203
+ }
204
+ }
205
+ getInstalledMCPs() {
206
+ try {
207
+ if (!existsSync(this.configPath))
208
+ return [];
209
+ const config = this.readConfig();
210
+ const servers = config?.mcp?.servers;
211
+ if (!servers || typeof servers !== 'object')
212
+ return [];
213
+ return Object.keys(servers);
214
+ }
215
+ catch {
216
+ return [];
217
+ }
218
+ }
219
+ getAllMCPServers() {
220
+ try {
221
+ if (!existsSync(this.configPath))
222
+ return {};
223
+ const config = this.readConfig();
224
+ const servers = config?.mcp?.servers;
225
+ if (!servers || typeof servers !== 'object')
226
+ return {};
227
+ return servers;
228
+ }
229
+ catch {
230
+ return {};
231
+ }
232
+ }
233
+ getOtherMCPs(builtinIds) {
234
+ const servers = this.getAllMCPServers();
235
+ const other = [];
236
+ for (const [id, cfg] of Object.entries(servers)) {
237
+ if (!builtinIds.includes(id)) {
238
+ other.push({ id, config: cfg });
239
+ }
240
+ }
241
+ return other;
242
+ }
243
+ getMCPStatus(mcpServices) {
244
+ const status = new Map();
245
+ for (const mcp of mcpServices) {
246
+ status.set(mcp.id, this.isMCPInstalled(mcp.id));
247
+ }
248
+ return status;
249
+ }
250
+ async installMCP(mcp, apiKey, plan) {
251
+ if (!existsSync(this.configPath)) {
252
+ // Ensure base config exists before editing MCP servers
253
+ await this.loadConfig('kimi', apiKey);
254
+ }
255
+ const config = this.readConfig();
256
+ config.mcp = config.mcp && typeof config.mcp === 'object' ? config.mcp : {};
257
+ config.mcp.servers = config.mcp.servers && typeof config.mcp.servers === 'object' ? config.mcp.servers : {};
258
+ if (mcp.protocol === 'stdio') {
259
+ let env = {};
260
+ if (mcp.envTemplate && plan) {
261
+ env = { ...(mcp.envTemplate[plan] || {}) };
262
+ }
263
+ else if (mcp.env) {
264
+ env = { ...mcp.env };
265
+ }
266
+ if (mcp.requiresAuth && apiKey) {
267
+ env.Z_AI_API_KEY = apiKey;
268
+ }
269
+ config.mcp.servers[mcp.id] = {
270
+ type: 'stdio',
271
+ command: mcp.command || 'npx',
272
+ args: mcp.command === 'npx' && !mcp.args?.includes('--silent')
273
+ ? ['--silent', ...(mcp.args || [])]
274
+ : (mcp.args || []),
275
+ env
276
+ };
277
+ }
278
+ else if (mcp.protocol === 'sse' || mcp.protocol === 'streamable-http') {
279
+ let url = '';
280
+ if (mcp.urlTemplate && plan) {
281
+ url = mcp.urlTemplate[plan];
282
+ }
283
+ else if (mcp.url) {
284
+ url = mcp.url;
285
+ }
286
+ if (!url) {
287
+ throw new Error(`MCP ${mcp.id} missing url or urlTemplate`);
288
+ }
289
+ const headers = { ...(mcp.headers || {}) };
290
+ if (mcp.requiresAuth && apiKey) {
291
+ headers.Authorization = `Bearer ${apiKey}`;
292
+ }
293
+ config.mcp.servers[mcp.id] = {
294
+ type: mcp.protocol === 'sse' ? 'sse' : 'http',
295
+ url,
296
+ headers
297
+ };
298
+ }
299
+ else {
300
+ throw new Error(`Unsupported protocol: ${mcp.protocol}`);
301
+ }
302
+ this.writeConfig(config);
303
+ }
304
+ async uninstallMCP(mcpId) {
305
+ if (!existsSync(this.configPath))
306
+ return;
307
+ const config = this.readConfig();
308
+ if (!config?.mcp?.servers || typeof config.mcp.servers !== 'object') {
309
+ return;
310
+ }
311
+ delete config.mcp.servers[mcpId];
312
+ this.writeConfig(config);
313
+ }
314
+ }
315
+ export const kimiManager = KimiManager.getInstance();
316
+ //# sourceMappingURL=kimi-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi-manager.js","sourceRoot":"","sources":["../../src/lib/kimi-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AACtD,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAClD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD,yCAAyC;AACzC,MAAM,kBAAkB,GAA2B;IACjD,4BAA4B,EAAE,MAAM;IACpC,8BAA8B,EAAE,YAAY;IAC5C,qCAAqC,EAAE,QAAQ;CAChD,CAAC;AAIF,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,QAAQ,GAAuB,IAAI,CAAC;IACnC,UAAU,CAAS;IAE3B;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAEO,eAAe;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAc,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YACjD,2DAA2D;YAC3D,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,MAAiB;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAa,CAAC,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,MAAiB;QACvC,MAAM,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE1D,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,KAAY,CAAC;YAC5B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACpD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAS;YAEtC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK;mBACtB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;mBACnB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;mBACvB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;gBACpC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,cAAc,CAAC,MAAiB,EAAE,MAAc,EAAE,OAAyB;QACjF,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpG,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC;QACtE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC;QAE7D,yEAAyE;QACzE,sEAAsE;QACtE,2DAA2D;QAC3D,MAAM,YAAY,GAAG,eAAe,CAAC;QAErC,yEAAyE;QACzE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG;YAC7B,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,MAAiB,EAAE,OAAyB;QAC9D,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAExF,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC;QACtE,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC;QAC3D,MAAM,MAAM,GAAG,OAAO,EAAE,cAAc,IAAI,MAAM,CAAC;QAEjD,sEAAsE;QACtE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;YACvB,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,OAAO;YACd,gBAAgB,EAAE,MAAM;SACzB,CAAC;QAEF,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACtC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAwB,CAAC;YAE5H,sCAAsC;YACtC,MAAM,qBAAqB,GAAG,CAAC,OAA2B,EAAU,EAAE;gBACpE,IAAI,CAAC,OAAO;oBAAE,OAAO,MAAM,CAAC;gBAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC7D,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;wBAC/D,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,OAAO,MAAM,CAAC,CAAC,WAAW;YAC5B,CAAC,CAAC;YAEF,+BAA+B;YAC/B,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;YAEjG,2CAA2C;YAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC/C,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5G,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACrD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YACvE,CAAC;YAED,gEAAgE;YAChE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,MAAM,QAAQ,GAAG,KAAY,CAAC;gBAC9B,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;uBACvC,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;uBAC7F,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrE,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACtD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;gBACxE,CAAC;YACH,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,MAAc,EAAE,OAAyB;QACtE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE7B,mEAAmE;QACnE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtG,iDAAiD;YACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACvD,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7C,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;gBACtB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC;YACnD,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;YACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC1D,OAAO,KAAK,IAAI,OAAO,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;YACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;YACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YACvD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,YAAY,CAAC,UAAoB;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAuC,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,CAAC,WAAyB;QACpC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAe,EAAE,MAAc,EAAE,IAAY;QAC5D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,uDAAuD;YACvD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5G,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC7B,IAAI,GAAG,GAA2B,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;gBAC5B,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7C,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACnB,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACvB,CAAC;YAED,IAAI,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC;gBAC/B,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC;YAC5B,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG;gBAC3B,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,KAAK;gBAC7B,IAAI,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;oBAC5D,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBACpB,GAAG;aACJ,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YACxE,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;gBAC5B,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACnB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,6BAA6B,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,OAAO,GAA2B,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACnE,IAAI,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC;gBAC/B,OAAO,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE,CAAC;YAC7C,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG;gBAC3B,IAAI,EAAE,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;gBAC7C,GAAG;gBACH,OAAO;aACR,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { MCPService } from './tool-manager.js';
2
+ import type { ProviderOptions } from './tool-manager.js';
3
+ export declare class OpenCodeManager {
4
+ static instance: OpenCodeManager | null;
5
+ private configPath;
6
+ constructor();
7
+ static getInstance(): OpenCodeManager;
8
+ private ensureConfigDir;
9
+ private getConfig;
10
+ private saveConfig;
11
+ private getProviderName;
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 openCodeManager: OpenCodeManager;
31
+ //# sourceMappingURL=opencode-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-manager.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAQ;IAC/C,OAAO,CAAC,UAAU,CAAS;;IAO3B,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,eAAe;IAQjB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DlF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB7B,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;IA+CpG,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;IAoExE,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,eAAe,iBAAgC,CAAC"}