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.
- package/LICENSE +30 -21
- package/README.md +7 -2
- package/bin/codevf-mcp.js +11 -0
- package/dist/commands/fix.d.ts +5 -1
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +170 -13
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +72 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-tools.d.ts +17 -0
- package/dist/commands/mcp-tools.d.ts.map +1 -0
- package/dist/commands/mcp-tools.js +237 -0
- package/dist/commands/mcp-tools.js.map +1 -0
- package/dist/commands/setup.d.ts +8 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +250 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/welcome.d.ts +9 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +175 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/index.js +263 -207
- package/dist/index.js.map +1 -1
- package/dist/lib/api/client.d.ts +28 -0
- package/dist/lib/api/client.d.ts.map +1 -0
- package/dist/lib/api/client.js +66 -0
- package/dist/lib/api/client.js.map +1 -0
- package/dist/lib/api/projects.d.ts +32 -0
- package/dist/lib/api/projects.d.ts.map +1 -0
- package/dist/lib/api/projects.js +61 -0
- package/dist/lib/api/projects.js.map +1 -0
- package/dist/lib/api/tasks.d.ts +36 -0
- package/dist/lib/api/tasks.d.ts.map +1 -0
- package/dist/lib/api/tasks.js +62 -0
- package/dist/lib/api/tasks.js.map +1 -0
- package/dist/lib/api/websocket.d.ts +50 -0
- package/dist/lib/api/websocket.d.ts.map +1 -0
- package/dist/lib/api/websocket.js +153 -0
- package/dist/lib/api/websocket.js.map +1 -0
- package/dist/lib/auth/oauth-flow.d.ts +37 -0
- package/dist/lib/auth/oauth-flow.d.ts.map +1 -0
- package/dist/lib/auth/oauth-flow.js +119 -0
- package/dist/lib/auth/oauth-flow.js.map +1 -0
- package/dist/lib/auth/token-manager.d.ts +26 -0
- package/dist/lib/auth/token-manager.d.ts.map +1 -0
- package/dist/lib/auth/token-manager.js +87 -0
- package/dist/lib/auth/token-manager.js.map +1 -0
- package/dist/lib/config/manager.d.ts +50 -0
- package/dist/lib/config/manager.d.ts.map +1 -0
- package/dist/lib/config/manager.js +84 -0
- package/dist/lib/config/manager.js.map +1 -0
- package/dist/lib/utils/errors.d.ts +28 -0
- package/dist/lib/utils/errors.d.ts.map +1 -0
- package/dist/lib/utils/errors.js +44 -0
- package/dist/lib/utils/errors.js.map +1 -0
- package/dist/lib/utils/logger.d.ts +20 -0
- package/dist/lib/utils/logger.d.ts.map +1 -0
- package/dist/lib/utils/logger.js +40 -0
- package/dist/lib/utils/logger.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +160 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools/chat.d.ts +30 -0
- package/dist/mcp/tools/chat.d.ts.map +1 -0
- package/dist/mcp/tools/chat.js +82 -0
- package/dist/mcp/tools/chat.js.map +1 -0
- package/dist/mcp/tools/instant.d.ts +38 -0
- package/dist/mcp/tools/instant.d.ts.map +1 -0
- package/dist/mcp/tools/instant.js +106 -0
- package/dist/mcp/tools/instant.js.map +1 -0
- package/dist/modules/aiAgent.d.ts +75 -0
- package/dist/modules/aiAgent.d.ts.map +1 -0
- package/dist/modules/aiAgent.js +707 -0
- package/dist/modules/aiAgent.js.map +1 -0
- package/dist/modules/api.d.ts +7 -0
- package/dist/modules/api.d.ts.map +1 -1
- package/dist/modules/api.js +13 -4
- package/dist/modules/api.js.map +1 -1
- package/dist/modules/commandHandler.d.ts +40 -0
- package/dist/modules/commandHandler.d.ts.map +1 -0
- package/dist/modules/commandHandler.js +328 -0
- package/dist/modules/commandHandler.js.map +1 -0
- package/dist/modules/config.d.ts +2 -0
- package/dist/modules/config.d.ts.map +1 -1
- package/dist/modules/config.js +9 -0
- package/dist/modules/config.js.map +1 -1
- package/dist/modules/constants.d.ts +83 -0
- package/dist/modules/constants.d.ts.map +1 -0
- package/dist/modules/constants.js +75 -0
- package/dist/modules/constants.js.map +1 -0
- package/dist/modules/permissions.d.ts +14 -0
- package/dist/modules/permissions.d.ts.map +1 -1
- package/dist/modules/permissions.js +94 -0
- package/dist/modules/permissions.js.map +1 -1
- package/dist/modules/toolRegistry.d.ts +50 -0
- package/dist/modules/toolRegistry.d.ts.map +1 -0
- package/dist/modules/toolRegistry.js +114 -0
- package/dist/modules/toolRegistry.js.map +1 -0
- package/dist/modules/tunnel.d.ts +33 -0
- package/dist/modules/tunnel.d.ts.map +1 -0
- package/dist/modules/tunnel.js +79 -0
- package/dist/modules/tunnel.js.map +1 -0
- package/dist/modules/vibeHelper.d.ts +16 -0
- package/dist/modules/vibeHelper.d.ts.map +1 -0
- package/dist/modules/vibeHelper.js +38 -0
- package/dist/modules/vibeHelper.js.map +1 -0
- package/dist/modules/websocket.d.ts +9 -0
- package/dist/modules/websocket.d.ts.map +1 -1
- package/dist/modules/websocket.js +70 -0
- package/dist/modules/websocket.js.map +1 -1
- package/dist/tools/consultEngineer.d.ts +13 -0
- package/dist/tools/consultEngineer.d.ts.map +1 -0
- package/dist/tools/consultEngineer.js +161 -0
- package/dist/tools/consultEngineer.js.map +1 -0
- package/dist/tools/realtimeChat.d.ts +9 -0
- package/dist/tools/realtimeChat.d.ts.map +1 -0
- package/dist/tools/realtimeChat.js +101 -0
- package/dist/tools/realtimeChat.js.map +1 -0
- package/dist/types/index.d.ts +183 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/InteractiveApp.d.ts +13 -0
- package/dist/ui/InteractiveApp.d.ts.map +1 -0
- package/dist/ui/InteractiveApp.js +84 -0
- package/dist/ui/InteractiveApp.js.map +1 -0
- package/dist/ui/InteractivePrompt.d.ts +53 -0
- package/dist/ui/InteractivePrompt.d.ts.map +1 -0
- package/dist/ui/InteractivePrompt.js +422 -0
- package/dist/ui/InteractivePrompt.js.map +1 -0
- package/dist/ui/LiveSession.d.ts +2 -0
- package/dist/ui/LiveSession.d.ts.map +1 -1
- package/dist/ui/LiveSession.js +461 -180
- package/dist/ui/LiveSession.js.map +1 -1
- package/dist/ui/PromptInput.d.ts +14 -0
- package/dist/ui/PromptInput.d.ts.map +1 -0
- package/dist/ui/PromptInput.js +206 -0
- package/dist/ui/PromptInput.js.map +1 -0
- package/dist/ui/SessionUI.d.ts +40 -0
- package/dist/ui/SessionUI.d.ts.map +1 -0
- package/dist/ui/SessionUI.js +218 -0
- package/dist/ui/SessionUI.js.map +1 -0
- package/dist/ui/input/Command.d.ts +22 -0
- package/dist/ui/input/Command.d.ts.map +1 -0
- package/dist/ui/input/Command.js +30 -0
- package/dist/ui/input/Command.js.map +1 -0
- package/dist/ui/input/CustomInput.d.ts +15 -0
- package/dist/ui/input/CustomInput.d.ts.map +1 -0
- package/dist/ui/input/CustomInput.js +182 -0
- package/dist/ui/input/CustomInput.js.map +1 -0
- package/dist/ui/input/handlers/handleCursor.d.ts +22 -0
- package/dist/ui/input/handlers/handleCursor.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleCursor.js +53 -0
- package/dist/ui/input/handlers/handleCursor.js.map +1 -0
- package/dist/ui/input/handlers/handleEdit.d.ts +18 -0
- package/dist/ui/input/handlers/handleEdit.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleEdit.js +55 -0
- package/dist/ui/input/handlers/handleEdit.js.map +1 -0
- package/dist/ui/input/handlers/handleHistory.d.ts +18 -0
- package/dist/ui/input/handlers/handleHistory.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleHistory.js +85 -0
- package/dist/ui/input/handlers/handleHistory.js.map +1 -0
- package/dist/ui/input/handlers/handlePaste.d.ts +19 -0
- package/dist/ui/input/handlers/handlePaste.d.ts.map +1 -0
- package/dist/ui/input/handlers/handlePaste.js +49 -0
- package/dist/ui/input/handlers/handlePaste.js.map +1 -0
- package/dist/ui/input/handlers/handleSubmit.d.ts +18 -0
- package/dist/ui/input/handlers/handleSubmit.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleSubmit.js +39 -0
- package/dist/ui/input/handlers/handleSubmit.js.map +1 -0
- package/dist/ui/input/helpers.d.ts +4 -0
- package/dist/ui/input/helpers.d.ts.map +1 -0
- package/dist/ui/input/helpers.js +13 -0
- package/dist/ui/input/helpers.js.map +1 -0
- package/dist/ui/input/keyMatchers.d.ts +14 -0
- package/dist/ui/input/keyMatchers.d.ts.map +1 -0
- package/dist/ui/input/keyMatchers.js +49 -0
- package/dist/ui/input/keyMatchers.js.map +1 -0
- package/dist/ui/input/types.d.ts +33 -0
- package/dist/ui/input/types.d.ts.map +1 -0
- package/dist/ui/input/types.js +2 -0
- package/dist/ui/input/types.js.map +1 -0
- package/dist/ui/promptWithModes.d.ts +12 -0
- package/dist/ui/promptWithModes.d.ts.map +1 -0
- package/dist/ui/promptWithModes.js +24 -0
- package/dist/ui/promptWithModes.js.map +1 -0
- package/dist/ui/renderPrompt.d.ts +12 -0
- package/dist/ui/renderPrompt.d.ts.map +1 -0
- package/dist/ui/renderPrompt.js +14 -0
- package/dist/ui/renderPrompt.js.map +1 -0
- package/dist/ui/simplePrompt.d.ts +7 -0
- package/dist/ui/simplePrompt.d.ts.map +1 -0
- package/dist/ui/simplePrompt.js +38 -0
- package/dist/ui/simplePrompt.js.map +1 -0
- package/dist/ui/spinner.d.ts +7 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +13 -0
- package/dist/ui/spinner.js.map +1 -0
- package/package.json +36 -26
- package/ARCHITECTURE.md +0 -285
- package/BUILD_SUMMARY.md +0 -340
- 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":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgB5C,MAAM,OAAO,aAAa;IAIxB,YAAY,iBAAyB,aAAa;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CACnB,iDAAiD,CAClD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACzD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CAAC,0BAA2B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,MAAoB;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CAAC,0BAA2B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAA0B;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -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 @@
|
|
|
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"}
|