vigthoria-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +413 -0
  2. package/dist/commands/auth.d.ts +24 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +194 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/chat.d.ts +64 -0
  7. package/dist/commands/chat.d.ts.map +1 -0
  8. package/dist/commands/chat.js +596 -0
  9. package/dist/commands/chat.js.map +1 -0
  10. package/dist/commands/config.d.ts +25 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +291 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/edit.d.ts +28 -0
  15. package/dist/commands/edit.d.ts.map +1 -0
  16. package/dist/commands/edit.js +257 -0
  17. package/dist/commands/edit.js.map +1 -0
  18. package/dist/commands/explain.d.ts +21 -0
  19. package/dist/commands/explain.d.ts.map +1 -0
  20. package/dist/commands/explain.js +98 -0
  21. package/dist/commands/explain.js.map +1 -0
  22. package/dist/commands/generate.d.ts +25 -0
  23. package/dist/commands/generate.d.ts.map +1 -0
  24. package/dist/commands/generate.js +155 -0
  25. package/dist/commands/generate.js.map +1 -0
  26. package/dist/commands/review.d.ts +24 -0
  27. package/dist/commands/review.d.ts.map +1 -0
  28. package/dist/commands/review.js +153 -0
  29. package/dist/commands/review.js.map +1 -0
  30. package/dist/index.d.ts +16 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +205 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/utils/api.d.ts +88 -0
  35. package/dist/utils/api.d.ts.map +1 -0
  36. package/dist/utils/api.js +431 -0
  37. package/dist/utils/api.js.map +1 -0
  38. package/dist/utils/config.d.ts +57 -0
  39. package/dist/utils/config.d.ts.map +1 -0
  40. package/dist/utils/config.js +167 -0
  41. package/dist/utils/config.js.map +1 -0
  42. package/dist/utils/files.d.ts +31 -0
  43. package/dist/utils/files.d.ts.map +1 -0
  44. package/dist/utils/files.js +217 -0
  45. package/dist/utils/files.js.map +1 -0
  46. package/dist/utils/logger.d.ts +23 -0
  47. package/dist/utils/logger.d.ts.map +1 -0
  48. package/dist/utils/logger.js +104 -0
  49. package/dist/utils/logger.js.map +1 -0
  50. package/dist/utils/session.d.ts +61 -0
  51. package/dist/utils/session.d.ts.map +1 -0
  52. package/dist/utils/session.js +172 -0
  53. package/dist/utils/session.js.map +1 -0
  54. package/dist/utils/tools.d.ts +145 -0
  55. package/dist/utils/tools.d.ts.map +1 -0
  56. package/dist/utils/tools.js +781 -0
  57. package/dist/utils/tools.js.map +1 -0
  58. package/install.sh +248 -0
  59. package/package.json +52 -0
  60. package/src/commands/auth.ts +225 -0
  61. package/src/commands/chat.ts +690 -0
  62. package/src/commands/config.ts +297 -0
  63. package/src/commands/edit.ts +310 -0
  64. package/src/commands/explain.ts +115 -0
  65. package/src/commands/generate.ts +177 -0
  66. package/src/commands/review.ts +186 -0
  67. package/src/index.ts +221 -0
  68. package/src/types/marked-terminal.d.ts +31 -0
  69. package/src/utils/api.ts +531 -0
  70. package/src/utils/config.ts +224 -0
  71. package/src/utils/files.ts +212 -0
  72. package/src/utils/logger.ts +125 -0
  73. package/src/utils/session.ts +167 -0
  74. package/src/utils/tools.ts +933 -0
  75. package/tsconfig.json +20 -0
@@ -0,0 +1,431 @@
1
+ "use strict";
2
+ /**
3
+ * API Client for Vigthoria Backend
4
+ * Connects to coder.vigthoria.io API endpoints
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.APIClient = void 0;
11
+ const axios_1 = __importDefault(require("axios"));
12
+ const ws_1 = __importDefault(require("ws"));
13
+ class APIClient {
14
+ client;
15
+ modelRouterClient;
16
+ config;
17
+ logger;
18
+ ws = null;
19
+ constructor(config, logger) {
20
+ this.config = config;
21
+ this.logger = logger;
22
+ // Main Vigthoria Coder API (coder.vigthoria.io)
23
+ this.client = axios_1.default.create({
24
+ baseURL: config.get('apiUrl'),
25
+ timeout: 120000,
26
+ headers: {
27
+ 'Content-Type': 'application/json',
28
+ 'User-Agent': 'Vigthoria-CLI/1.0.0',
29
+ },
30
+ });
31
+ // Model Router API for AI operations
32
+ this.modelRouterClient = axios_1.default.create({
33
+ baseURL: 'https://coder.vigthoria.io',
34
+ timeout: 120000,
35
+ headers: {
36
+ 'Content-Type': 'application/json',
37
+ 'User-Agent': 'Vigthoria-CLI/1.0.0',
38
+ },
39
+ });
40
+ // Add auth interceptor
41
+ this.client.interceptors.request.use((req) => {
42
+ const token = this.config.get('authToken');
43
+ if (token) {
44
+ req.headers.Authorization = `Bearer ${token}`;
45
+ req.headers.Cookie = `vigthoria-auth-token=${token}`;
46
+ }
47
+ return req;
48
+ });
49
+ this.modelRouterClient.interceptors.request.use((req) => {
50
+ const token = this.config.get('authToken');
51
+ if (token) {
52
+ req.headers.Authorization = `Bearer ${token}`;
53
+ req.headers.Cookie = `vigthoria-auth-token=${token}`;
54
+ }
55
+ return req;
56
+ });
57
+ // Add response interceptor for token refresh
58
+ this.client.interceptors.response.use((res) => res, async (error) => {
59
+ if (error.response?.status === 401) {
60
+ const refreshed = await this.refreshToken();
61
+ if (refreshed && error.config) {
62
+ return this.client.request(error.config);
63
+ }
64
+ }
65
+ throw error;
66
+ });
67
+ }
68
+ // Authentication - Uses Vigthoria Coder /api/login endpoint
69
+ async login(email, password) {
70
+ try {
71
+ const response = await this.client.post('/api/login', { email, password });
72
+ if (!response.data.success) {
73
+ throw new Error(response.data.error || 'Login failed');
74
+ }
75
+ const { token, user } = response.data;
76
+ this.config.setAuth({
77
+ token,
78
+ userId: user.id,
79
+ email: user.email,
80
+ });
81
+ // Set subscription from user data
82
+ this.config.setSubscription({
83
+ plan: user.subscription?.plan || 'developer',
84
+ status: 'active',
85
+ expiresAt: undefined,
86
+ });
87
+ return true;
88
+ }
89
+ catch (error) {
90
+ const axiosError = error;
91
+ const message = axiosError.response?.data?.error || error.message;
92
+ this.logger.error('Login failed:', message);
93
+ return false;
94
+ }
95
+ }
96
+ async loginWithToken(token) {
97
+ try {
98
+ // Validate token by making a request to user info endpoint
99
+ this.config.set('authToken', token);
100
+ const response = await this.client.get('/api/user/profile', {
101
+ headers: {
102
+ Authorization: `Bearer ${token}`,
103
+ Cookie: `vigthoria-auth-token=${token}`,
104
+ },
105
+ });
106
+ if (response.data && response.data.user) {
107
+ const user = response.data.user;
108
+ this.config.setAuth({
109
+ token,
110
+ userId: user.id,
111
+ email: user.email,
112
+ });
113
+ this.config.setSubscription({
114
+ plan: user.subscription?.plan || user.subscription_plan || 'developer',
115
+ status: 'active',
116
+ expiresAt: undefined,
117
+ });
118
+ return true;
119
+ }
120
+ return false;
121
+ }
122
+ catch (error) {
123
+ this.config.clearAuth();
124
+ this.logger.error('Token validation failed:', error.message);
125
+ return false;
126
+ }
127
+ }
128
+ async refreshToken() {
129
+ const refreshToken = this.config.get('refreshToken');
130
+ if (!refreshToken)
131
+ return false;
132
+ try {
133
+ const response = await this.client.post('/api/token/refresh', {
134
+ refresh_token: refreshToken
135
+ });
136
+ const { token, access_token, refresh_token } = response.data;
137
+ this.config.set('authToken', token || access_token);
138
+ if (refresh_token) {
139
+ this.config.set('refreshToken', refresh_token);
140
+ }
141
+ return true;
142
+ }
143
+ catch {
144
+ this.config.clearAuth();
145
+ return false;
146
+ }
147
+ }
148
+ async getSubscriptionStatus() {
149
+ try {
150
+ const response = await this.client.get('/api/user/subscription');
151
+ const data = response.data;
152
+ this.config.setSubscription({
153
+ plan: data.plan || data.subscription_plan || 'developer',
154
+ status: data.status || 'active',
155
+ expiresAt: data.expiresAt || data.expires_at
156
+ });
157
+ }
158
+ catch (error) {
159
+ this.logger.debug('Failed to get subscription status:', error.message);
160
+ }
161
+ }
162
+ /**
163
+ * Chat API - Supports multiple inference strategies
164
+ *
165
+ * For authenticated users: Uses Vigthoria Cloud API
166
+ * For local users: Uses local Ollama or Model Router
167
+ */
168
+ async chat(messages, model, useLocal = false) {
169
+ const resolvedModel = this.resolveModelId(model);
170
+ // If authenticated and not forcing local, use Vigthoria Cloud API
171
+ if (!useLocal && this.config.isAuthenticated()) {
172
+ try {
173
+ const response = await this.client.post('/api/ai/chat', {
174
+ messages,
175
+ model: resolvedModel,
176
+ maxTokens: this.config.get('preferences').maxTokens,
177
+ temperature: 0.7,
178
+ });
179
+ if (response.data.success !== false) {
180
+ return {
181
+ id: response.data.id || `vigthoria-${Date.now()}`,
182
+ message: response.data.response || response.data.message || response.data.content,
183
+ model: response.data.model || model,
184
+ usage: response.data.usage,
185
+ };
186
+ }
187
+ }
188
+ catch (error) {
189
+ this.logger.debug('Vigthoria Cloud API failed, trying fallbacks...');
190
+ }
191
+ }
192
+ // Strategy 1: Try local Model Router's Vigthoria chat endpoint
193
+ try {
194
+ const response = await axios_1.default.post('http://localhost:4009/api/vigthoria/chat', {
195
+ messages,
196
+ model: resolvedModel,
197
+ maxTokens: this.config.get('preferences').maxTokens,
198
+ temperature: 0.7,
199
+ stream: false,
200
+ }, { timeout: 120000 });
201
+ if (response.data.success !== false) {
202
+ return {
203
+ id: response.data.id || `router-${Date.now()}`,
204
+ message: response.data.response || response.data.message || response.data.content,
205
+ model: response.data.model || model,
206
+ usage: response.data.usage,
207
+ };
208
+ }
209
+ }
210
+ catch (error) {
211
+ this.logger.debug('Model router failed, trying Ollama directly...');
212
+ }
213
+ // Strategy 2: Try Ollama directly (for local development/testing)
214
+ try {
215
+ const ollamaModel = this.resolveToOllamaModel(model);
216
+ const prompt = this.formatMessagesForOllama(messages);
217
+ const response = await axios_1.default.post('http://localhost:11434/api/generate', {
218
+ model: ollamaModel,
219
+ prompt,
220
+ stream: false,
221
+ }, { timeout: 120000 });
222
+ return {
223
+ id: `ollama-${Date.now()}`,
224
+ message: response.data.response,
225
+ model: ollamaModel,
226
+ usage: {
227
+ prompt_tokens: response.data.prompt_eval_count || 0,
228
+ completion_tokens: response.data.eval_count || 0,
229
+ total_tokens: (response.data.prompt_eval_count || 0) + (response.data.eval_count || 0),
230
+ },
231
+ };
232
+ }
233
+ catch (error) {
234
+ this.logger.debug('Ollama failed...');
235
+ }
236
+ // Strategy 3: Try ViAgen6 AI endpoint (authenticated fallback)
237
+ if (this.config.isAuthenticated()) {
238
+ try {
239
+ const response = await this.client.post('/viagen6/api/ai/generate', {
240
+ prompt: messages.map(m => `${m.role}: ${m.content}`).join('\n'),
241
+ model: resolvedModel,
242
+ max_tokens: this.config.get('preferences').maxTokens,
243
+ });
244
+ return {
245
+ id: `viagen6-${Date.now()}`,
246
+ message: response.data.code || response.data.response || response.data.content,
247
+ model: model,
248
+ };
249
+ }
250
+ catch (fallbackError) {
251
+ // Continue to error
252
+ }
253
+ }
254
+ throw new Error('All AI backends unavailable. Please check your connection or authentication.');
255
+ }
256
+ // Map CLI model names to Ollama model names (for local fallback)
257
+ resolveToOllamaModel(model) {
258
+ const ollamaMap = {
259
+ 'fast': 'qwen3:0.6b',
260
+ 'mini': 'smollm2:135m',
261
+ 'code': 'qwen2.5-coder:7b',
262
+ 'balanced': 'phi3:mini',
263
+ 'creative': 'gemma3:latest',
264
+ 'vigthoria-fast-1.7b': 'qwen3:0.6b',
265
+ 'vigthoria-mini-0.6b': 'smollm2:135m',
266
+ 'vigthoria-v2-code-8b': 'qwen2.5-coder:7b',
267
+ 'vigthoria-balanced-4b': 'phi3:mini',
268
+ 'vigthoria-creative-9b-v4': 'gemma3:latest',
269
+ };
270
+ return ollamaMap[model] || model;
271
+ }
272
+ // Format messages for Ollama's generate API
273
+ formatMessagesForOllama(messages) {
274
+ return messages
275
+ .filter(m => m.role !== 'system' || messages.indexOf(m) === 0)
276
+ .map(m => {
277
+ if (m.role === 'system')
278
+ return `System: ${m.content}\n\n`;
279
+ if (m.role === 'user')
280
+ return `User: ${m.content}\n`;
281
+ return `Assistant: ${m.content}\n`;
282
+ })
283
+ .join('') + 'Assistant:';
284
+ }
285
+ // Streaming chat
286
+ async *chatStream(messages, model) {
287
+ const wsUrl = this.config.get('wsUrl');
288
+ const token = this.config.get('authToken');
289
+ return new Promise((resolve, reject) => {
290
+ const ws = new ws_1.default(`${wsUrl}/chat`, {
291
+ headers: { Authorization: `Bearer ${token}` },
292
+ });
293
+ ws.on('open', () => {
294
+ ws.send(JSON.stringify({
295
+ type: 'chat',
296
+ messages,
297
+ model: this.resolveModelId(model),
298
+ stream: true,
299
+ }));
300
+ });
301
+ ws.on('message', (data) => {
302
+ const chunk = JSON.parse(data.toString());
303
+ // Yield chunk - but this pattern won't work directly
304
+ // Need to use event emitter pattern instead
305
+ });
306
+ ws.on('error', (error) => {
307
+ reject(error);
308
+ });
309
+ ws.on('close', () => {
310
+ resolve(undefined);
311
+ });
312
+ });
313
+ }
314
+ // Non-streaming alternative with callback
315
+ async chatWithCallback(messages, model, onChunk, onDone, onError) {
316
+ const wsUrl = this.config.get('wsUrl');
317
+ const token = this.config.get('authToken');
318
+ return new Promise((resolve, reject) => {
319
+ const ws = new ws_1.default(`${wsUrl}/chat`, {
320
+ headers: { Authorization: `Bearer ${token}` },
321
+ });
322
+ ws.on('open', () => {
323
+ ws.send(JSON.stringify({
324
+ type: 'chat',
325
+ messages,
326
+ model: this.resolveModelId(model),
327
+ stream: true,
328
+ }));
329
+ });
330
+ ws.on('message', (data) => {
331
+ try {
332
+ const chunk = JSON.parse(data.toString());
333
+ if (chunk.type === 'content') {
334
+ onChunk(chunk.content);
335
+ }
336
+ else if (chunk.type === 'done') {
337
+ onDone();
338
+ ws.close();
339
+ resolve();
340
+ }
341
+ else if (chunk.type === 'error') {
342
+ onError(new Error(chunk.error));
343
+ ws.close();
344
+ reject(new Error(chunk.error));
345
+ }
346
+ }
347
+ catch (e) {
348
+ // Raw text chunk
349
+ onChunk(data.toString());
350
+ }
351
+ });
352
+ ws.on('error', (error) => {
353
+ onError(error);
354
+ reject(error);
355
+ });
356
+ ws.on('close', () => {
357
+ resolve();
358
+ });
359
+ });
360
+ }
361
+ // Code operations
362
+ async generateCode(prompt, language, model) {
363
+ const response = await this.client.post('/ai/generate', {
364
+ prompt,
365
+ language,
366
+ model: this.resolveModelId(model),
367
+ });
368
+ return response.data.code;
369
+ }
370
+ async explainCode(code, language) {
371
+ const response = await this.client.post('/ai/explain', {
372
+ code,
373
+ language,
374
+ });
375
+ return response.data.explanation;
376
+ }
377
+ async reviewCode(code, language) {
378
+ const response = await this.client.post('/ai/review', {
379
+ code,
380
+ language,
381
+ });
382
+ return response.data;
383
+ }
384
+ async fixCode(code, language, fixType) {
385
+ const response = await this.client.post('/ai/fix', {
386
+ code,
387
+ language,
388
+ fixType,
389
+ });
390
+ return response.data;
391
+ }
392
+ // Model resolution - maps short names to actual Vigthoria model IDs
393
+ resolveModelId(shortName) {
394
+ const modelMap = {
395
+ // Vigthoria Native Models
396
+ 'fast': 'vigthoria-fast-1.7b',
397
+ 'mini': 'vigthoria-mini-0.6b',
398
+ 'code': 'vigthoria-v2-code-8b',
399
+ 'balanced': 'vigthoria-balanced-4b',
400
+ 'creative': 'vigthoria-creative-9b-v4',
401
+ 'music': 'vigthoria-music-master-4b',
402
+ // Aliases
403
+ 'pro': 'vigthoria-balanced-4b',
404
+ 'ultra': 'vigthoria-creative-9b-v4',
405
+ // Legacy Vigthoria models
406
+ 'master': 'vigthoria_master:latest',
407
+ 'c1': 'vigthoria_c1_m:latest',
408
+ 'm1': 'vigthoria_m1_m:latest',
409
+ // External models
410
+ 'qwen-coder': 'qwen2.5-coder:7b',
411
+ 'qwen-coder-32b': 'qwen2.5-coder:32b',
412
+ 'deepseek': 'deepseek-coder-v2:latest',
413
+ 'deepseek-r1': 'deepseek-r1:8b',
414
+ 'llama3': 'llama3:8b-instruct-q4_0',
415
+ 'mixtral': 'mixtral:8x7b-instruct-v0.1-q4_K_M',
416
+ };
417
+ return modelMap[shortName] || shortName;
418
+ }
419
+ // Health check
420
+ async healthCheck() {
421
+ try {
422
+ await this.client.get('/health');
423
+ return true;
424
+ }
425
+ catch {
426
+ return false;
427
+ }
428
+ }
429
+ }
430
+ exports.APIClient = APIClient;
431
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Configuration Manager for Vigthoria CLI
3
+ */
4
+ export interface VigthoriaCLIConfig {
5
+ apiUrl: string;
6
+ wsUrl: string;
7
+ authToken: string | null;
8
+ refreshToken: string | null;
9
+ userId: string | null;
10
+ email: string | null;
11
+ subscription: {
12
+ plan: string | null;
13
+ status: string | null;
14
+ expiresAt: string | null;
15
+ };
16
+ preferences: {
17
+ defaultModel: string;
18
+ theme: 'dark' | 'light';
19
+ autoApplyFixes: boolean;
20
+ showDiffs: boolean;
21
+ contextLines: number;
22
+ maxTokens: number;
23
+ };
24
+ project: {
25
+ rootPath: string | null;
26
+ ignorePatterns: string[];
27
+ };
28
+ }
29
+ export declare class Config {
30
+ private store;
31
+ constructor();
32
+ get<K extends keyof VigthoriaCLIConfig>(key: K): VigthoriaCLIConfig[K];
33
+ set<K extends keyof VigthoriaCLIConfig>(key: K, value: VigthoriaCLIConfig[K]): void;
34
+ getAll(): VigthoriaCLIConfig;
35
+ reset(): void;
36
+ isAuthenticated(): boolean;
37
+ hasValidSubscription(): boolean;
38
+ getConfigPath(): string;
39
+ setAuth(data: {
40
+ token: string;
41
+ refreshToken?: string;
42
+ userId: string;
43
+ email: string;
44
+ }): void;
45
+ clearAuth(): void;
46
+ setSubscription(data: {
47
+ plan: string;
48
+ status: string;
49
+ expiresAt?: string;
50
+ }): void;
51
+ getAvailableModels(): {
52
+ id: string;
53
+ name: string;
54
+ description: string;
55
+ }[];
56
+ }
57
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,WAAW,EAAE;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACxB,cAAc,EAAE,OAAO,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH;AAsCD,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAA2B;;IA2CxC,GAAG,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAItE,GAAG,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI;IAInF,MAAM,IAAI,kBAAkB;IAI5B,KAAK,IAAI,IAAI;IAIb,eAAe,IAAI,OAAO;IAI1B,oBAAoB,IAAI,OAAO;IAU/B,aAAa,IAAI,MAAM;IAKvB,OAAO,CAAC,IAAI,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IASR,SAAS,IAAI,IAAI;IAYjB,eAAe,CAAC,IAAI,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI;IASR,kBAAkB,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;CAmC1E"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration Manager for Vigthoria CLI
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.Config = void 0;
10
+ const conf_1 = __importDefault(require("conf"));
11
+ const defaultConfig = {
12
+ apiUrl: 'https://coder.vigthoria.io',
13
+ wsUrl: 'wss://coder.vigthoria.io/ws',
14
+ authToken: null,
15
+ refreshToken: null,
16
+ userId: null,
17
+ email: null,
18
+ subscription: {
19
+ plan: null,
20
+ status: null,
21
+ expiresAt: null,
22
+ },
23
+ preferences: {
24
+ defaultModel: 'vigthoria-code',
25
+ theme: 'dark',
26
+ autoApplyFixes: false,
27
+ showDiffs: true,
28
+ contextLines: 3,
29
+ maxTokens: 4096,
30
+ },
31
+ project: {
32
+ rootPath: null,
33
+ ignorePatterns: [
34
+ 'node_modules',
35
+ '.git',
36
+ 'dist',
37
+ 'build',
38
+ '__pycache__',
39
+ '.venv',
40
+ 'venv',
41
+ '.env',
42
+ '*.log',
43
+ ],
44
+ },
45
+ };
46
+ class Config {
47
+ store;
48
+ constructor() {
49
+ this.store = new conf_1.default({
50
+ projectName: 'vigthoria-cli',
51
+ defaults: defaultConfig,
52
+ schema: {
53
+ apiUrl: { type: 'string' },
54
+ wsUrl: { type: 'string' },
55
+ authToken: { type: ['string', 'null'] },
56
+ refreshToken: { type: ['string', 'null'] },
57
+ userId: { type: ['string', 'null'] },
58
+ email: { type: ['string', 'null'] },
59
+ subscription: {
60
+ type: 'object',
61
+ properties: {
62
+ plan: { type: ['string', 'null'] },
63
+ status: { type: ['string', 'null'] },
64
+ expiresAt: { type: ['string', 'null'] },
65
+ },
66
+ },
67
+ preferences: {
68
+ type: 'object',
69
+ properties: {
70
+ defaultModel: { type: 'string' },
71
+ theme: { type: 'string', enum: ['dark', 'light'] },
72
+ autoApplyFixes: { type: 'boolean' },
73
+ showDiffs: { type: 'boolean' },
74
+ contextLines: { type: 'number' },
75
+ maxTokens: { type: 'number' },
76
+ },
77
+ },
78
+ project: {
79
+ type: 'object',
80
+ properties: {
81
+ rootPath: { type: ['string', 'null'] },
82
+ ignorePatterns: { type: 'array', items: { type: 'string' } },
83
+ },
84
+ },
85
+ },
86
+ });
87
+ }
88
+ get(key) {
89
+ return this.store.get(key);
90
+ }
91
+ set(key, value) {
92
+ this.store.set(key, value);
93
+ }
94
+ getAll() {
95
+ return this.store.store;
96
+ }
97
+ reset() {
98
+ this.store.clear();
99
+ }
100
+ isAuthenticated() {
101
+ return this.store.get('authToken') !== null;
102
+ }
103
+ hasValidSubscription() {
104
+ const sub = this.store.get('subscription');
105
+ if (!sub.status || sub.status !== 'active')
106
+ return false;
107
+ if (sub.expiresAt) {
108
+ const expires = new Date(sub.expiresAt);
109
+ return expires > new Date();
110
+ }
111
+ return true;
112
+ }
113
+ getConfigPath() {
114
+ return this.store.path;
115
+ }
116
+ // Auth helpers
117
+ setAuth(data) {
118
+ this.store.set('authToken', data.token);
119
+ if (data.refreshToken) {
120
+ this.store.set('refreshToken', data.refreshToken);
121
+ }
122
+ this.store.set('userId', data.userId);
123
+ this.store.set('email', data.email);
124
+ }
125
+ clearAuth() {
126
+ this.store.set('authToken', null);
127
+ this.store.set('refreshToken', null);
128
+ this.store.set('userId', null);
129
+ this.store.set('email', null);
130
+ this.store.set('subscription', {
131
+ plan: null,
132
+ status: null,
133
+ expiresAt: null,
134
+ });
135
+ }
136
+ setSubscription(data) {
137
+ this.store.set('subscription', {
138
+ plan: data.plan,
139
+ status: data.status,
140
+ expiresAt: data.expiresAt || null,
141
+ });
142
+ }
143
+ // Model selection - Native Vigthoria Models
144
+ getAvailableModels() {
145
+ const sub = this.store.get('subscription');
146
+ // All users get access to fast models
147
+ const models = [
148
+ { id: 'mini', name: 'Vigthoria Mini 0.6B', description: 'Ultra-fast, simple tasks' },
149
+ { id: 'fast', name: 'Vigthoria Fast 1.7B', description: 'Quick responses, streaming' },
150
+ ];
151
+ // Developer+ plans get balanced model
152
+ if (sub.plan && sub.plan !== 'free') {
153
+ models.push({ id: 'balanced', name: 'Vigthoria Balanced 4B', description: 'General purpose' }, { id: 'music', name: 'Vigthoria Music 4B', description: 'Music production & theory' });
154
+ }
155
+ // Pro plans get code and creative models
156
+ if (sub.plan === 'developer' || sub.plan === 'pro' || sub.plan === 'ultra' || sub.plan === 'enterprise') {
157
+ models.push({ id: 'code', name: 'Vigthoria Code v2 8B', description: 'Code specialist (training)' }, { id: 'creative', name: 'Vigthoria Creative 9B v4', description: 'Creative writing, lyrics' });
158
+ }
159
+ // External model aliases
160
+ if (sub.plan === 'pro' || sub.plan === 'ultra' || sub.plan === 'enterprise') {
161
+ models.push({ id: 'qwen-coder', name: 'Qwen 2.5 Coder 7B', description: 'External code model' }, { id: 'deepseek', name: 'DeepSeek Coder v2', description: 'External code model' });
162
+ }
163
+ return models;
164
+ }
165
+ }
166
+ exports.Config = Config;
167
+ //# sourceMappingURL=config.js.map