codevf 1.0.0 → 1.0.2

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 (203) hide show
  1. package/LICENSE +30 -21
  2. package/README.md +7 -2
  3. package/bin/codevf-mcp.js +11 -0
  4. package/dist/commands/fix.d.ts +5 -1
  5. package/dist/commands/fix.d.ts.map +1 -1
  6. package/dist/commands/fix.js +170 -13
  7. package/dist/commands/fix.js.map +1 -1
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +72 -2
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/mcp-tools.d.ts +17 -0
  12. package/dist/commands/mcp-tools.d.ts.map +1 -0
  13. package/dist/commands/mcp-tools.js +237 -0
  14. package/dist/commands/mcp-tools.js.map +1 -0
  15. package/dist/commands/setup.d.ts +8 -0
  16. package/dist/commands/setup.d.ts.map +1 -0
  17. package/dist/commands/setup.js +250 -0
  18. package/dist/commands/setup.js.map +1 -0
  19. package/dist/commands/welcome.d.ts +9 -0
  20. package/dist/commands/welcome.d.ts.map +1 -0
  21. package/dist/commands/welcome.js +175 -0
  22. package/dist/commands/welcome.js.map +1 -0
  23. package/dist/index.js +263 -207
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/api/client.d.ts +28 -0
  26. package/dist/lib/api/client.d.ts.map +1 -0
  27. package/dist/lib/api/client.js +66 -0
  28. package/dist/lib/api/client.js.map +1 -0
  29. package/dist/lib/api/projects.d.ts +32 -0
  30. package/dist/lib/api/projects.d.ts.map +1 -0
  31. package/dist/lib/api/projects.js +61 -0
  32. package/dist/lib/api/projects.js.map +1 -0
  33. package/dist/lib/api/tasks.d.ts +36 -0
  34. package/dist/lib/api/tasks.d.ts.map +1 -0
  35. package/dist/lib/api/tasks.js +62 -0
  36. package/dist/lib/api/tasks.js.map +1 -0
  37. package/dist/lib/api/websocket.d.ts +50 -0
  38. package/dist/lib/api/websocket.d.ts.map +1 -0
  39. package/dist/lib/api/websocket.js +153 -0
  40. package/dist/lib/api/websocket.js.map +1 -0
  41. package/dist/lib/auth/oauth-flow.d.ts +37 -0
  42. package/dist/lib/auth/oauth-flow.d.ts.map +1 -0
  43. package/dist/lib/auth/oauth-flow.js +119 -0
  44. package/dist/lib/auth/oauth-flow.js.map +1 -0
  45. package/dist/lib/auth/token-manager.d.ts +26 -0
  46. package/dist/lib/auth/token-manager.d.ts.map +1 -0
  47. package/dist/lib/auth/token-manager.js +87 -0
  48. package/dist/lib/auth/token-manager.js.map +1 -0
  49. package/dist/lib/config/manager.d.ts +50 -0
  50. package/dist/lib/config/manager.d.ts.map +1 -0
  51. package/dist/lib/config/manager.js +84 -0
  52. package/dist/lib/config/manager.js.map +1 -0
  53. package/dist/lib/utils/errors.d.ts +28 -0
  54. package/dist/lib/utils/errors.d.ts.map +1 -0
  55. package/dist/lib/utils/errors.js +44 -0
  56. package/dist/lib/utils/errors.js.map +1 -0
  57. package/dist/lib/utils/logger.d.ts +20 -0
  58. package/dist/lib/utils/logger.d.ts.map +1 -0
  59. package/dist/lib/utils/logger.js +40 -0
  60. package/dist/lib/utils/logger.js.map +1 -0
  61. package/dist/mcp/index.d.ts +7 -0
  62. package/dist/mcp/index.d.ts.map +1 -0
  63. package/dist/mcp/index.js +160 -0
  64. package/dist/mcp/index.js.map +1 -0
  65. package/dist/mcp/tools/chat.d.ts +30 -0
  66. package/dist/mcp/tools/chat.d.ts.map +1 -0
  67. package/dist/mcp/tools/chat.js +82 -0
  68. package/dist/mcp/tools/chat.js.map +1 -0
  69. package/dist/mcp/tools/instant.d.ts +38 -0
  70. package/dist/mcp/tools/instant.d.ts.map +1 -0
  71. package/dist/mcp/tools/instant.js +106 -0
  72. package/dist/mcp/tools/instant.js.map +1 -0
  73. package/dist/modules/aiAgent.d.ts +75 -0
  74. package/dist/modules/aiAgent.d.ts.map +1 -0
  75. package/dist/modules/aiAgent.js +707 -0
  76. package/dist/modules/aiAgent.js.map +1 -0
  77. package/dist/modules/api.d.ts +7 -0
  78. package/dist/modules/api.d.ts.map +1 -1
  79. package/dist/modules/api.js +13 -4
  80. package/dist/modules/api.js.map +1 -1
  81. package/dist/modules/commandHandler.d.ts +40 -0
  82. package/dist/modules/commandHandler.d.ts.map +1 -0
  83. package/dist/modules/commandHandler.js +328 -0
  84. package/dist/modules/commandHandler.js.map +1 -0
  85. package/dist/modules/config.d.ts +2 -0
  86. package/dist/modules/config.d.ts.map +1 -1
  87. package/dist/modules/config.js +9 -0
  88. package/dist/modules/config.js.map +1 -1
  89. package/dist/modules/constants.d.ts +83 -0
  90. package/dist/modules/constants.d.ts.map +1 -0
  91. package/dist/modules/constants.js +75 -0
  92. package/dist/modules/constants.js.map +1 -0
  93. package/dist/modules/permissions.d.ts +14 -0
  94. package/dist/modules/permissions.d.ts.map +1 -1
  95. package/dist/modules/permissions.js +94 -0
  96. package/dist/modules/permissions.js.map +1 -1
  97. package/dist/modules/toolRegistry.d.ts +50 -0
  98. package/dist/modules/toolRegistry.d.ts.map +1 -0
  99. package/dist/modules/toolRegistry.js +114 -0
  100. package/dist/modules/toolRegistry.js.map +1 -0
  101. package/dist/modules/tunnel.d.ts +33 -0
  102. package/dist/modules/tunnel.d.ts.map +1 -0
  103. package/dist/modules/tunnel.js +79 -0
  104. package/dist/modules/tunnel.js.map +1 -0
  105. package/dist/modules/vibeHelper.d.ts +16 -0
  106. package/dist/modules/vibeHelper.d.ts.map +1 -0
  107. package/dist/modules/vibeHelper.js +38 -0
  108. package/dist/modules/vibeHelper.js.map +1 -0
  109. package/dist/modules/websocket.d.ts +9 -0
  110. package/dist/modules/websocket.d.ts.map +1 -1
  111. package/dist/modules/websocket.js +70 -0
  112. package/dist/modules/websocket.js.map +1 -1
  113. package/dist/tools/consultEngineer.d.ts +13 -0
  114. package/dist/tools/consultEngineer.d.ts.map +1 -0
  115. package/dist/tools/consultEngineer.js +161 -0
  116. package/dist/tools/consultEngineer.js.map +1 -0
  117. package/dist/tools/realtimeChat.d.ts +9 -0
  118. package/dist/tools/realtimeChat.d.ts.map +1 -0
  119. package/dist/tools/realtimeChat.js +101 -0
  120. package/dist/tools/realtimeChat.js.map +1 -0
  121. package/dist/types/index.d.ts +183 -0
  122. package/dist/types/index.d.ts.map +1 -1
  123. package/dist/types/index.js.map +1 -1
  124. package/dist/ui/InteractiveApp.d.ts +13 -0
  125. package/dist/ui/InteractiveApp.d.ts.map +1 -0
  126. package/dist/ui/InteractiveApp.js +84 -0
  127. package/dist/ui/InteractiveApp.js.map +1 -0
  128. package/dist/ui/InteractivePrompt.d.ts +53 -0
  129. package/dist/ui/InteractivePrompt.d.ts.map +1 -0
  130. package/dist/ui/InteractivePrompt.js +422 -0
  131. package/dist/ui/InteractivePrompt.js.map +1 -0
  132. package/dist/ui/LiveSession.d.ts +2 -0
  133. package/dist/ui/LiveSession.d.ts.map +1 -1
  134. package/dist/ui/LiveSession.js +461 -180
  135. package/dist/ui/LiveSession.js.map +1 -1
  136. package/dist/ui/PromptInput.d.ts +14 -0
  137. package/dist/ui/PromptInput.d.ts.map +1 -0
  138. package/dist/ui/PromptInput.js +206 -0
  139. package/dist/ui/PromptInput.js.map +1 -0
  140. package/dist/ui/SessionUI.d.ts +40 -0
  141. package/dist/ui/SessionUI.d.ts.map +1 -0
  142. package/dist/ui/SessionUI.js +218 -0
  143. package/dist/ui/SessionUI.js.map +1 -0
  144. package/dist/ui/input/Command.d.ts +22 -0
  145. package/dist/ui/input/Command.d.ts.map +1 -0
  146. package/dist/ui/input/Command.js +30 -0
  147. package/dist/ui/input/Command.js.map +1 -0
  148. package/dist/ui/input/CustomInput.d.ts +15 -0
  149. package/dist/ui/input/CustomInput.d.ts.map +1 -0
  150. package/dist/ui/input/CustomInput.js +182 -0
  151. package/dist/ui/input/CustomInput.js.map +1 -0
  152. package/dist/ui/input/handlers/handleCursor.d.ts +22 -0
  153. package/dist/ui/input/handlers/handleCursor.d.ts.map +1 -0
  154. package/dist/ui/input/handlers/handleCursor.js +53 -0
  155. package/dist/ui/input/handlers/handleCursor.js.map +1 -0
  156. package/dist/ui/input/handlers/handleEdit.d.ts +18 -0
  157. package/dist/ui/input/handlers/handleEdit.d.ts.map +1 -0
  158. package/dist/ui/input/handlers/handleEdit.js +55 -0
  159. package/dist/ui/input/handlers/handleEdit.js.map +1 -0
  160. package/dist/ui/input/handlers/handleHistory.d.ts +18 -0
  161. package/dist/ui/input/handlers/handleHistory.d.ts.map +1 -0
  162. package/dist/ui/input/handlers/handleHistory.js +85 -0
  163. package/dist/ui/input/handlers/handleHistory.js.map +1 -0
  164. package/dist/ui/input/handlers/handlePaste.d.ts +19 -0
  165. package/dist/ui/input/handlers/handlePaste.d.ts.map +1 -0
  166. package/dist/ui/input/handlers/handlePaste.js +49 -0
  167. package/dist/ui/input/handlers/handlePaste.js.map +1 -0
  168. package/dist/ui/input/handlers/handleSubmit.d.ts +18 -0
  169. package/dist/ui/input/handlers/handleSubmit.d.ts.map +1 -0
  170. package/dist/ui/input/handlers/handleSubmit.js +39 -0
  171. package/dist/ui/input/handlers/handleSubmit.js.map +1 -0
  172. package/dist/ui/input/helpers.d.ts +4 -0
  173. package/dist/ui/input/helpers.d.ts.map +1 -0
  174. package/dist/ui/input/helpers.js +13 -0
  175. package/dist/ui/input/helpers.js.map +1 -0
  176. package/dist/ui/input/keyMatchers.d.ts +14 -0
  177. package/dist/ui/input/keyMatchers.d.ts.map +1 -0
  178. package/dist/ui/input/keyMatchers.js +49 -0
  179. package/dist/ui/input/keyMatchers.js.map +1 -0
  180. package/dist/ui/input/types.d.ts +33 -0
  181. package/dist/ui/input/types.d.ts.map +1 -0
  182. package/dist/ui/input/types.js +2 -0
  183. package/dist/ui/input/types.js.map +1 -0
  184. package/dist/ui/promptWithModes.d.ts +12 -0
  185. package/dist/ui/promptWithModes.d.ts.map +1 -0
  186. package/dist/ui/promptWithModes.js +24 -0
  187. package/dist/ui/promptWithModes.js.map +1 -0
  188. package/dist/ui/renderPrompt.d.ts +12 -0
  189. package/dist/ui/renderPrompt.d.ts.map +1 -0
  190. package/dist/ui/renderPrompt.js +14 -0
  191. package/dist/ui/renderPrompt.js.map +1 -0
  192. package/dist/ui/simplePrompt.d.ts +7 -0
  193. package/dist/ui/simplePrompt.d.ts.map +1 -0
  194. package/dist/ui/simplePrompt.js +38 -0
  195. package/dist/ui/simplePrompt.js.map +1 -0
  196. package/dist/ui/spinner.d.ts +7 -0
  197. package/dist/ui/spinner.d.ts.map +1 -0
  198. package/dist/ui/spinner.js +13 -0
  199. package/dist/ui/spinner.js.map +1 -0
  200. package/package.json +36 -26
  201. package/ARCHITECTURE.md +0 -285
  202. package/BUILD_SUMMARY.md +0 -340
  203. package/QUICKSTART.md +0 -180
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-flow.js","sourceRoot":"","sources":["../../../src/lib/auth/oauth-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Token management with automatic refresh
3
+ */
4
+ import { ConfigManager } from '../config/manager.js';
5
+ export declare class TokenManager {
6
+ private configManager;
7
+ private refreshThresholdMs;
8
+ constructor(configManager: ConfigManager);
9
+ /**
10
+ * Get a valid access token (auto-refreshes if needed)
11
+ */
12
+ getValidToken(): Promise<string>;
13
+ /**
14
+ * Refresh access token using refresh token
15
+ */
16
+ refresh(): Promise<void>;
17
+ /**
18
+ * Validate token format (basic check)
19
+ */
20
+ validateTokenFormat(token: string): boolean;
21
+ /**
22
+ * Check if authenticated
23
+ */
24
+ isAuthenticated(): boolean;
25
+ }
26
+ //# sourceMappingURL=token-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/token-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AAInE,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAkB;gBAEhC,aAAa,EAAE,aAAa;IAIxC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAyBtC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C9B;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAM3C;;OAEG;IACH,eAAe,IAAI,OAAO;CAQ3B"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Token management with automatic refresh
3
+ */
4
+ import { AuthenticationError } from '../utils/errors.js';
5
+ import { logger } from '../utils/logger.js';
6
+ export class TokenManager {
7
+ constructor(configManager) {
8
+ this.refreshThresholdMs = 60 * 60 * 1000; // 1 hour before expiry
9
+ this.configManager = configManager;
10
+ }
11
+ /**
12
+ * Get a valid access token (auto-refreshes if needed)
13
+ */
14
+ async getValidToken() {
15
+ const config = this.configManager.load();
16
+ if (!config.auth) {
17
+ throw new AuthenticationError('Not authenticated. Run: codevf setup');
18
+ }
19
+ // Check if token expires soon
20
+ const expiresAt = new Date(config.auth.expiresAt);
21
+ const now = new Date();
22
+ const timeUntilExpiry = expiresAt.getTime() - now.getTime();
23
+ if (timeUntilExpiry < this.refreshThresholdMs) {
24
+ logger.info('Token expiring soon, refreshing...', {
25
+ expiresAt: config.auth.expiresAt,
26
+ });
27
+ await this.refresh();
28
+ return this.configManager.load().auth.accessToken;
29
+ }
30
+ return config.auth.accessToken;
31
+ }
32
+ /**
33
+ * Refresh access token using refresh token
34
+ */
35
+ async refresh() {
36
+ const config = this.configManager.load();
37
+ if (!config.auth?.refreshToken) {
38
+ throw new AuthenticationError('No refresh token available');
39
+ }
40
+ try {
41
+ const response = await fetch(`${config.baseUrl}/api/cli/auth/refresh`, {
42
+ method: 'POST',
43
+ headers: { 'Content-Type': 'application/json' },
44
+ body: JSON.stringify({ refreshToken: config.auth.refreshToken }),
45
+ });
46
+ if (!response.ok) {
47
+ throw new Error(`Refresh failed: ${response.status}`);
48
+ }
49
+ const data = (await response.json());
50
+ if (!data.success || !data.data) {
51
+ throw new Error('Invalid refresh response');
52
+ }
53
+ this.configManager.updateAuth({
54
+ accessToken: data.data.accessToken,
55
+ refreshToken: data.data.refreshToken,
56
+ expiresAt: data.data.expiresAt,
57
+ userId: config.auth.userId,
58
+ });
59
+ logger.info('Token refreshed successfully');
60
+ }
61
+ catch (error) {
62
+ logger.error('Token refresh failed', error);
63
+ throw new AuthenticationError(`Token refresh failed. Please re-authenticate: codevf setup`);
64
+ }
65
+ }
66
+ /**
67
+ * Validate token format (basic check)
68
+ */
69
+ validateTokenFormat(token) {
70
+ // JWT format: header.payload.signature
71
+ const parts = token.split('.');
72
+ return parts.length === 3;
73
+ }
74
+ /**
75
+ * Check if authenticated
76
+ */
77
+ isAuthenticated() {
78
+ try {
79
+ const config = this.configManager.load();
80
+ return !!config.auth?.accessToken;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=token-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../../src/lib/auth/token-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Configuration file management for CodeVF
3
+ */
4
+ export interface CodeVFConfig {
5
+ baseUrl: string;
6
+ auth?: {
7
+ accessToken: string;
8
+ refreshToken: string;
9
+ expiresAt: string;
10
+ userId: string;
11
+ };
12
+ defaults?: {
13
+ maxCredits: number;
14
+ projectId?: string;
15
+ };
16
+ }
17
+ export declare class ConfigManager {
18
+ private configPath;
19
+ private configDir;
20
+ constructor(configFileName?: string);
21
+ /**
22
+ * Ensure config directory exists
23
+ */
24
+ private ensureConfigDir;
25
+ /**
26
+ * Check if config file exists
27
+ */
28
+ exists(): boolean;
29
+ /**
30
+ * Load configuration from file
31
+ */
32
+ load(): CodeVFConfig;
33
+ /**
34
+ * Save configuration to file
35
+ */
36
+ save(config: CodeVFConfig): void;
37
+ /**
38
+ * Update auth tokens in config
39
+ */
40
+ updateAuth(auth: CodeVFConfig['auth']): void;
41
+ /**
42
+ * Clear configuration file
43
+ */
44
+ clear(): void;
45
+ /**
46
+ * Get config file path
47
+ */
48
+ getPath(): string;
49
+ }
50
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/lib/config/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,cAAc,GAAE,MAAsB;IAKlD;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,YAAY;IAiBpB;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAYhC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI;IAM5C;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,OAAO,IAAI,MAAM;CAGlB"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Configuration file management for CodeVF
3
+ */
4
+ import fs from 'fs';
5
+ import path from 'path';
6
+ import os from 'os';
7
+ import { ConfigError } from '../utils/errors.js';
8
+ import { logger } from '../utils/logger.js';
9
+ export class ConfigManager {
10
+ constructor(configFileName = 'config.json') {
11
+ this.configDir = path.join(os.homedir(), '.codevf');
12
+ this.configPath = path.join(this.configDir, configFileName);
13
+ }
14
+ /**
15
+ * Ensure config directory exists
16
+ */
17
+ ensureConfigDir() {
18
+ if (!fs.existsSync(this.configDir)) {
19
+ fs.mkdirSync(this.configDir, { recursive: true, mode: 0o700 });
20
+ logger.debug('Created config directory', { path: this.configDir });
21
+ }
22
+ }
23
+ /**
24
+ * Check if config file exists
25
+ */
26
+ exists() {
27
+ return fs.existsSync(this.configPath);
28
+ }
29
+ /**
30
+ * Load configuration from file
31
+ */
32
+ load() {
33
+ if (!this.exists()) {
34
+ throw new ConfigError(`Configuration file not found. Run: codevf setup`);
35
+ }
36
+ try {
37
+ const content = fs.readFileSync(this.configPath, 'utf-8');
38
+ const config = JSON.parse(content);
39
+ logger.debug('Loaded config', { path: this.configPath });
40
+ return config;
41
+ }
42
+ catch (error) {
43
+ throw new ConfigError(`Failed to load config: ${error.message}`);
44
+ }
45
+ }
46
+ /**
47
+ * Save configuration to file
48
+ */
49
+ save(config) {
50
+ this.ensureConfigDir();
51
+ try {
52
+ const content = JSON.stringify(config, null, 2);
53
+ fs.writeFileSync(this.configPath, content, { mode: 0o600 });
54
+ logger.debug('Saved config', { path: this.configPath });
55
+ }
56
+ catch (error) {
57
+ throw new ConfigError(`Failed to save config: ${error.message}`);
58
+ }
59
+ }
60
+ /**
61
+ * Update auth tokens in config
62
+ */
63
+ updateAuth(auth) {
64
+ const config = this.load();
65
+ config.auth = auth;
66
+ this.save(config);
67
+ }
68
+ /**
69
+ * Clear configuration file
70
+ */
71
+ clear() {
72
+ if (this.exists()) {
73
+ fs.unlinkSync(this.configPath);
74
+ logger.info('Cleared config', { path: this.configPath });
75
+ }
76
+ }
77
+ /**
78
+ * Get config file path
79
+ */
80
+ getPath() {
81
+ return this.configPath;
82
+ }
83
+ }
84
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/lib/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Custom error types for CodeVF
3
+ */
4
+ export declare class CodeVFError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ export declare class AuthenticationError extends CodeVFError {
8
+ constructor(message?: string);
9
+ }
10
+ export declare class InsufficientCreditsError extends CodeVFError {
11
+ available: number;
12
+ required: number;
13
+ pricingUrl: string;
14
+ constructor(available: number, required: number, pricingUrl: string);
15
+ }
16
+ export declare class SessionError extends CodeVFError {
17
+ constructor(message?: string);
18
+ }
19
+ export declare class NetworkError extends CodeVFError {
20
+ constructor(message?: string);
21
+ }
22
+ export declare class TimeoutError extends CodeVFError {
23
+ constructor(message?: string);
24
+ }
25
+ export declare class ConfigError extends CodeVFError {
26
+ constructor(message?: string);
27
+ }
28
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,OAAO,GAAE,MAAgC;CAGtD;AAED,qBAAa,wBAAyB,SAAQ,WAAW;IAE9C,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,MAAM;gBAFlB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;CAM5B;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAC/B,OAAO,GAAE,MAAiC;CAGvD;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAC/B,OAAO,GAAE,MAAiC;CAGvD;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAC/B,OAAO,GAAE,MAA8B;CAGpD;AAED,qBAAa,WAAY,SAAQ,WAAW;gBAC9B,OAAO,GAAE,MAA8B;CAGpD"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Custom error types for CodeVF
3
+ */
4
+ export class CodeVFError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = this.constructor.name;
8
+ Error.captureStackTrace(this, this.constructor);
9
+ }
10
+ }
11
+ export class AuthenticationError extends CodeVFError {
12
+ constructor(message = 'Authentication failed') {
13
+ super(message);
14
+ }
15
+ }
16
+ export class InsufficientCreditsError extends CodeVFError {
17
+ constructor(available, required, pricingUrl) {
18
+ super(`Insufficient credits. Available: ${available}, Required: ${required}\nAdd credits: ${pricingUrl}`);
19
+ this.available = available;
20
+ this.required = required;
21
+ this.pricingUrl = pricingUrl;
22
+ }
23
+ }
24
+ export class SessionError extends CodeVFError {
25
+ constructor(message = 'Session error occurred') {
26
+ super(message);
27
+ }
28
+ }
29
+ export class NetworkError extends CodeVFError {
30
+ constructor(message = 'Network request failed') {
31
+ super(message);
32
+ }
33
+ }
34
+ export class TimeoutError extends CodeVFError {
35
+ constructor(message = 'Operation timed out') {
36
+ super(message);
37
+ }
38
+ }
39
+ export class ConfigError extends CodeVFError {
40
+ constructor(message = 'Configuration error') {
41
+ super(message);
42
+ }
43
+ }
44
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/lib/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,WAAW;IACvD,YACS,SAAiB,EACjB,QAAgB,EAChB,UAAkB;QAEzB,KAAK,CACH,oCAAoC,SAAS,eAAe,QAAQ,kBAAkB,UAAU,EAAE,CACnG,CAAC;QANK,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAQ;IAK3B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,UAAkB,wBAAwB;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,UAAkB,wBAAwB;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,UAAkB,qBAAqB;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAY,UAAkB,qBAAqB;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Simple structured logger for CodeVF
3
+ */
4
+ export declare enum LogLevel {
5
+ DEBUG = 0,
6
+ INFO = 1,
7
+ WARN = 2,
8
+ ERROR = 3
9
+ }
10
+ declare class Logger {
11
+ private level;
12
+ setLevel(level: LogLevel): void;
13
+ debug(message: string, meta?: any): void;
14
+ info(message: string, meta?: any): void;
15
+ warn(message: string, meta?: any): void;
16
+ error(message: string, error?: Error | any): void;
17
+ }
18
+ export declare const logger: Logger;
19
+ export {};
20
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAIxB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMhC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,GAAG;CAQ3C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Simple structured logger for CodeVF
3
+ */
4
+ export var LogLevel;
5
+ (function (LogLevel) {
6
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
7
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
8
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
9
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
10
+ })(LogLevel || (LogLevel = {}));
11
+ class Logger {
12
+ constructor() {
13
+ this.level = LogLevel.INFO;
14
+ }
15
+ setLevel(level) {
16
+ this.level = level;
17
+ }
18
+ debug(message, meta) {
19
+ if (this.level <= LogLevel.DEBUG) {
20
+ console.debug(`[DEBUG] ${message}`, meta ? JSON.stringify(meta) : '');
21
+ }
22
+ }
23
+ info(message, meta) {
24
+ if (this.level <= LogLevel.INFO) {
25
+ console.info(`[INFO] ${message}`, meta ? JSON.stringify(meta) : '');
26
+ }
27
+ }
28
+ warn(message, meta) {
29
+ if (this.level <= LogLevel.WARN) {
30
+ console.warn(`[WARN] ${message}`, meta ? JSON.stringify(meta) : '');
31
+ }
32
+ }
33
+ error(message, error) {
34
+ if (this.level <= LogLevel.ERROR) {
35
+ console.error(`[ERROR] ${message}`, error instanceof Error ? error.stack : JSON.stringify(error));
36
+ }
37
+ }
38
+ }
39
+ export const logger = new Logger();
40
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/lib/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,MAAM;IAAZ;QACU,UAAK,GAAa,QAAQ,CAAC,IAAI,CAAC;IAgC1C,CAAC;IA9BC,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAU;QAC/B,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAmB;QACxC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CACX,WAAW,OAAO,EAAE,EACpB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CodeVF MCP Server
4
+ * Enables Claude Code to delegate tasks to human engineers
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CodeVF MCP Server
4
+ * Enables Claude Code to delegate tasks to human engineers
5
+ */
6
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
9
+ import { ConfigManager } from '../lib/config/manager.js';
10
+ import { TokenManager } from '../lib/auth/token-manager.js';
11
+ import { ApiClient } from '../lib/api/client.js';
12
+ import { TasksApi } from '../lib/api/tasks.js';
13
+ import { ProjectsApi } from '../lib/api/projects.js';
14
+ import { InstantTool } from './tools/instant.js';
15
+ import { ChatTool } from './tools/chat.js';
16
+ import { logger, LogLevel } from '../lib/utils/logger.js';
17
+ /**
18
+ * Initialize MCP Server
19
+ */
20
+ async function main() {
21
+ // Set log level from environment
22
+ if (process.env.DEBUG) {
23
+ logger.setLevel(LogLevel.DEBUG);
24
+ }
25
+ // Check if configured
26
+ const configManager = new ConfigManager('mcp-config.json');
27
+ if (!configManager.exists()) {
28
+ console.error('Error: Not configured. Run: codevf setup');
29
+ process.exit(1);
30
+ }
31
+ // Load configuration
32
+ let config;
33
+ try {
34
+ config = configManager.load();
35
+ }
36
+ catch (error) {
37
+ console.error('Error loading config:', error.message);
38
+ process.exit(1);
39
+ }
40
+ // Initialize components
41
+ const tokenManager = new TokenManager(configManager);
42
+ const apiClient = new ApiClient(config.baseUrl, tokenManager);
43
+ const defaultProjectId = config.defaults?.projectId || '1';
44
+ const tasksApi = new TasksApi(apiClient, config.baseUrl, defaultProjectId);
45
+ const projectsApi = new ProjectsApi(apiClient);
46
+ const instantTool = new InstantTool(tasksApi, projectsApi, tokenManager, config.baseUrl);
47
+ const chatTool = new ChatTool(tasksApi, config.baseUrl);
48
+ // Create MCP server
49
+ const server = new Server({
50
+ name: 'codevf',
51
+ version: '0.1.0',
52
+ }, {
53
+ capabilities: {
54
+ tools: {},
55
+ },
56
+ });
57
+ // Register tools
58
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
59
+ return {
60
+ tools: [
61
+ {
62
+ name: 'codevf-instant',
63
+ description: 'Get quick validation from human engineer (1-10 credits). Use for: testing if fix works, identifying errors, quick questions. Returns single response from engineer.',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {
67
+ message: {
68
+ type: 'string',
69
+ description: 'Question or request for the engineer',
70
+ },
71
+ maxCredits: {
72
+ type: 'number',
73
+ description: 'Maximum credits to spend (1-10, default: 10)',
74
+ default: 10,
75
+ minimum: 1,
76
+ maximum: 10,
77
+ },
78
+ },
79
+ required: ['message'],
80
+ },
81
+ },
82
+ {
83
+ name: 'codevf-chat',
84
+ description: 'Start extended debugging session with human engineer (4-1920 credits). Use for: complex bugs, multi-step debugging, architecture questions. Returns session URL for monitoring.',
85
+ inputSchema: {
86
+ type: 'object',
87
+ properties: {
88
+ message: {
89
+ type: 'string',
90
+ description: 'Initial message or problem description for the engineer',
91
+ },
92
+ maxCredits: {
93
+ type: 'number',
94
+ description: 'Maximum credits to spend (4-1920, default: 240). Rate: 2 credits/minute',
95
+ default: 240,
96
+ minimum: 4,
97
+ maximum: 1920,
98
+ },
99
+ },
100
+ required: ['message'],
101
+ },
102
+ },
103
+ ],
104
+ };
105
+ });
106
+ // Handle tool calls
107
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
108
+ const { name, arguments: args } = request.params;
109
+ try {
110
+ let result;
111
+ switch (name) {
112
+ case 'codevf-instant':
113
+ result = await instantTool.execute(args);
114
+ break;
115
+ case 'codevf-chat':
116
+ result = await chatTool.execute(args);
117
+ break;
118
+ default:
119
+ result = {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: `Unknown tool: ${name}`,
124
+ },
125
+ ],
126
+ isError: true,
127
+ };
128
+ }
129
+ return result;
130
+ }
131
+ catch (error) {
132
+ logger.error('Tool execution error', error);
133
+ return {
134
+ content: [
135
+ {
136
+ type: 'text',
137
+ text: `Error: ${error.message}`,
138
+ },
139
+ ],
140
+ isError: true,
141
+ };
142
+ }
143
+ });
144
+ // Start server
145
+ const transport = new StdioServerTransport();
146
+ await server.connect(transport);
147
+ logger.info('CodeVF MCP Server started');
148
+ // Handle shutdown
149
+ process.on('SIGINT', async () => {
150
+ logger.info('Shutting down...');
151
+ await server.close();
152
+ process.exit(0);
153
+ });
154
+ }
155
+ // Run server
156
+ main().catch((error) => {
157
+ console.error('Fatal error:', error);
158
+ process.exit(1);
159
+ });
160
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * codevf-chat tool implementation
3
+ * Extended collaboration sessions
4
+ */
5
+ import { TasksApi } from '../../lib/api/tasks.js';
6
+ export interface ChatToolArgs {
7
+ message: string;
8
+ maxCredits?: number;
9
+ }
10
+ export interface ChatToolResult {
11
+ content: Array<{
12
+ type: string;
13
+ text: string;
14
+ }>;
15
+ isError?: boolean;
16
+ }
17
+ export declare class ChatTool {
18
+ private tasksApi;
19
+ private baseUrl;
20
+ constructor(tasksApi: TasksApi, baseUrl: string);
21
+ /**
22
+ * Handle codevf-chat tool call
23
+ */
24
+ execute(args: ChatToolArgs): Promise<ChatToolResult>;
25
+ /**
26
+ * Format chat session info
27
+ */
28
+ private formatResponse;
29
+ }
30
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/chat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;IAK/C;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAwD1D;;OAEG;IACH,OAAO,CAAC,cAAc;CAyBvB"}