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,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codevf-chat tool implementation
|
|
3
|
+
* Extended collaboration sessions
|
|
4
|
+
*/
|
|
5
|
+
import { logger } from '../../lib/utils/logger.js';
|
|
6
|
+
export class ChatTool {
|
|
7
|
+
constructor(tasksApi, baseUrl) {
|
|
8
|
+
this.tasksApi = tasksApi;
|
|
9
|
+
this.baseUrl = baseUrl;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Handle codevf-chat tool call
|
|
13
|
+
*/
|
|
14
|
+
async execute(args) {
|
|
15
|
+
try {
|
|
16
|
+
logger.info('Executing codevf-chat', { message: args.message });
|
|
17
|
+
// Validate credits
|
|
18
|
+
const maxCredits = args.maxCredits || 240;
|
|
19
|
+
if (maxCredits < 4 || maxCredits > 1920) {
|
|
20
|
+
return {
|
|
21
|
+
content: [
|
|
22
|
+
{
|
|
23
|
+
type: 'text',
|
|
24
|
+
text: 'Error: maxCredits must be between 4 and 1920 for chat sessions',
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
isError: true,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Create task
|
|
31
|
+
const task = await this.tasksApi.create({
|
|
32
|
+
message: args.message,
|
|
33
|
+
taskMode: 'realtime_chat',
|
|
34
|
+
maxCredits,
|
|
35
|
+
});
|
|
36
|
+
logger.info('Chat session created', {
|
|
37
|
+
taskId: task.taskId,
|
|
38
|
+
actionId: task.actionId,
|
|
39
|
+
});
|
|
40
|
+
// Format response with session info
|
|
41
|
+
const formattedResponse = this.formatResponse(task, maxCredits);
|
|
42
|
+
return {
|
|
43
|
+
content: [
|
|
44
|
+
{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: formattedResponse,
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
logger.error('codevf-chat failed', error);
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: 'text',
|
|
57
|
+
text: `Error: ${error.message}`,
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
isError: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format chat session info
|
|
66
|
+
*/
|
|
67
|
+
formatResponse(task, maxCredits) {
|
|
68
|
+
const sessionUrl = `${this.baseUrl}/session/${task.actionId}`;
|
|
69
|
+
let output = 'Chat session started with engineer.\n\n';
|
|
70
|
+
output += `Session URL: ${sessionUrl}\n\n`;
|
|
71
|
+
output += 'Share this link with your user to monitor the conversation.\n\n';
|
|
72
|
+
output += `Max credits: ${maxCredits}\n`;
|
|
73
|
+
output += `Rate: 2 credits/minute\n`;
|
|
74
|
+
output += `Estimated duration: ${Math.floor(maxCredits / 2)} minutes\n`;
|
|
75
|
+
if (task.warning) {
|
|
76
|
+
output += `\n⚠️ ${task.warning}\n`;
|
|
77
|
+
}
|
|
78
|
+
output += `\nCredits remaining: ${task.creditsRemaining}\n`;
|
|
79
|
+
return output;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/mcp/tools/chat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAYnD,MAAM,OAAO,QAAQ;IAInB,YAAY,QAAkB,EAAE,OAAe;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAkB;QAC9B,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAEhE,mBAAmB;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;YAC1C,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,EAAE,CAAC;gBACxC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,gEAAgE;yBACvE;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,cAAc;YACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACtC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,eAAe;gBACzB,UAAU;aACX,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YAEH,oCAAoC;YACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEhE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB;qBACxB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAE1C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE;qBAC3C;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,IAIC,EACD,UAAkB;QAElB,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9D,IAAI,MAAM,GAAG,yCAAyC,CAAC;QACvD,MAAM,IAAI,gBAAgB,UAAU,MAAM,CAAC;QAC3C,MAAM,IAAI,iEAAiE,CAAC;QAC5E,MAAM,IAAI,gBAAgB,UAAU,IAAI,CAAC;QACzC,MAAM,IAAI,0BAA0B,CAAC;QACrC,MAAM,IAAI,uBAAuB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC;QAExE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,wBAAwB,IAAI,CAAC,gBAAgB,IAAI,CAAC;QAE5D,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codevf-instant tool implementation
|
|
3
|
+
* Quick validation queries with single response
|
|
4
|
+
*/
|
|
5
|
+
import { TasksApi } from '../../lib/api/tasks.js';
|
|
6
|
+
import { ProjectsApi } from '../../lib/api/projects.js';
|
|
7
|
+
import { TokenManager } from '../../lib/auth/token-manager.js';
|
|
8
|
+
export interface InstantToolArgs {
|
|
9
|
+
message: string;
|
|
10
|
+
maxCredits?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface InstantToolResult {
|
|
13
|
+
content: Array<{
|
|
14
|
+
type: string;
|
|
15
|
+
text: string;
|
|
16
|
+
}>;
|
|
17
|
+
isError?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare class InstantTool {
|
|
20
|
+
private tasksApi;
|
|
21
|
+
private projectsApi;
|
|
22
|
+
private tokenManager;
|
|
23
|
+
private baseUrl;
|
|
24
|
+
constructor(tasksApi: TasksApi, projectsApi: ProjectsApi, tokenManager: TokenManager, baseUrl: string);
|
|
25
|
+
/**
|
|
26
|
+
* Handle codevf-instant tool call
|
|
27
|
+
*/
|
|
28
|
+
execute(args: InstantToolArgs): Promise<InstantToolResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Get WebSocket connection URL
|
|
31
|
+
*/
|
|
32
|
+
private getWebSocketUrl;
|
|
33
|
+
/**
|
|
34
|
+
* Format engineer response
|
|
35
|
+
*/
|
|
36
|
+
private formatResponse;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=instant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instant.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/instant.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,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,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;IAOrG;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+EhE;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,cAAc;CAgBvB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codevf-instant tool implementation
|
|
3
|
+
* Quick validation queries with single response
|
|
4
|
+
*/
|
|
5
|
+
import { WebSocketClient } from '../../lib/api/websocket.js';
|
|
6
|
+
import { logger } from '../../lib/utils/logger.js';
|
|
7
|
+
export class InstantTool {
|
|
8
|
+
constructor(tasksApi, projectsApi, tokenManager, baseUrl) {
|
|
9
|
+
this.tasksApi = tasksApi;
|
|
10
|
+
this.projectsApi = projectsApi;
|
|
11
|
+
this.tokenManager = tokenManager;
|
|
12
|
+
this.baseUrl = baseUrl;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Handle codevf-instant tool call
|
|
16
|
+
*/
|
|
17
|
+
async execute(args) {
|
|
18
|
+
try {
|
|
19
|
+
logger.info('Executing codevf-instant', { message: args.message });
|
|
20
|
+
// Validate credits
|
|
21
|
+
const maxCredits = args.maxCredits || 10;
|
|
22
|
+
if (maxCredits < 1 || maxCredits > 10) {
|
|
23
|
+
return {
|
|
24
|
+
content: [
|
|
25
|
+
{
|
|
26
|
+
type: 'text',
|
|
27
|
+
text: 'Error: maxCredits must be between 1 and 10 for instant queries',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Get or create a project for this task
|
|
34
|
+
logger.info('Getting or creating project for instant query');
|
|
35
|
+
const project = await this.projectsApi.getOrCreateDefault();
|
|
36
|
+
logger.info('Using project', { projectId: project.id, repoUrl: project.repoUrl });
|
|
37
|
+
// Create task
|
|
38
|
+
const task = await this.tasksApi.create({
|
|
39
|
+
message: args.message,
|
|
40
|
+
taskMode: 'realtime_answer',
|
|
41
|
+
maxCredits,
|
|
42
|
+
projectId: project.id.toString(),
|
|
43
|
+
});
|
|
44
|
+
logger.info('Task created', { taskId: task.taskId });
|
|
45
|
+
// Show warning if low balance
|
|
46
|
+
if (task.warning) {
|
|
47
|
+
logger.warn('Credit warning', { warning: task.warning });
|
|
48
|
+
}
|
|
49
|
+
// Connect WebSocket
|
|
50
|
+
const token = await this.tokenManager.getValidToken();
|
|
51
|
+
const wsUrl = this.getWebSocketUrl(task.taskId, token);
|
|
52
|
+
const ws = new WebSocketClient(wsUrl);
|
|
53
|
+
await ws.connect();
|
|
54
|
+
logger.info('Waiting for engineer response...');
|
|
55
|
+
// Wait for response (5 min timeout)
|
|
56
|
+
const response = await ws.waitForResponse(300000);
|
|
57
|
+
// Disconnect
|
|
58
|
+
ws.disconnect();
|
|
59
|
+
// Format response
|
|
60
|
+
const formattedResponse = this.formatResponse(response, task.warning);
|
|
61
|
+
return {
|
|
62
|
+
content: [
|
|
63
|
+
{
|
|
64
|
+
type: 'text',
|
|
65
|
+
text: formattedResponse,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger.error('codevf-instant failed', error);
|
|
72
|
+
return {
|
|
73
|
+
content: [
|
|
74
|
+
{
|
|
75
|
+
type: 'text',
|
|
76
|
+
text: `Error: ${error.message}`,
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
isError: true,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get WebSocket connection URL
|
|
85
|
+
*/
|
|
86
|
+
getWebSocketUrl(taskId, token) {
|
|
87
|
+
const wsProtocol = this.baseUrl.startsWith('https://') ? 'wss://' : 'ws://';
|
|
88
|
+
const host = this.baseUrl.replace(/^https?:\/\//, '');
|
|
89
|
+
return `${wsProtocol}${host}/ws?taskId=${taskId}&userType=customer&token=${token}`;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Format engineer response
|
|
93
|
+
*/
|
|
94
|
+
formatResponse(response, warning) {
|
|
95
|
+
let output = 'Engineer Response:\n\n';
|
|
96
|
+
output += response.text + '\n\n';
|
|
97
|
+
output += '---\n';
|
|
98
|
+
output += `Credits used: ${response.creditsUsed}\n`;
|
|
99
|
+
output += `Session time: ${response.duration}\n`;
|
|
100
|
+
if (warning) {
|
|
101
|
+
output += `\n⚠️ ${warning}\n`;
|
|
102
|
+
}
|
|
103
|
+
return output;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=instant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instant.js","sourceRoot":"","sources":["../../../src/mcp/tools/instant.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ConfigManager } from './config.js';
|
|
2
|
+
import { AiTool } from '../types/index.js';
|
|
3
|
+
export interface AiRunResult {
|
|
4
|
+
output: string;
|
|
5
|
+
transcript: string[];
|
|
6
|
+
confidence?: 'high' | 'low' | 'failed';
|
|
7
|
+
suggestFallback?: boolean;
|
|
8
|
+
needsMoreInfo?: boolean;
|
|
9
|
+
clarificationQuestion?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Wrapper around the opencode SDK using the client-only mode.
|
|
13
|
+
* - Uses dynamic import so the CLI still works without the SDK installed.
|
|
14
|
+
* - Avoids starting a local server by using `createOpencodeClient` (caller must have a server running).
|
|
15
|
+
* - Creates a session per request, sends prompt, prints response parts, and logs transcripts locally.
|
|
16
|
+
*/
|
|
17
|
+
export declare class AiAgent {
|
|
18
|
+
private static clientCache;
|
|
19
|
+
private static baseUrlCache;
|
|
20
|
+
private static serverStarted;
|
|
21
|
+
private static serverCloser;
|
|
22
|
+
private configManager;
|
|
23
|
+
constructor(configManager?: ConfigManager);
|
|
24
|
+
run(prompt: string, opts?: {
|
|
25
|
+
timeoutMs?: number | null;
|
|
26
|
+
baseUrl?: string;
|
|
27
|
+
startServer?: boolean;
|
|
28
|
+
verbose?: boolean;
|
|
29
|
+
signal?: AbortSignal;
|
|
30
|
+
agent?: 'plan' | 'build';
|
|
31
|
+
spinner?: any;
|
|
32
|
+
}): Promise<AiRunResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Run AI with tool calling support
|
|
35
|
+
*
|
|
36
|
+
* This method wraps the standard run() method to add tool calling capabilities.
|
|
37
|
+
* It detects TOOL_CALL patterns in the AI's response, executes the requested tools,
|
|
38
|
+
* and feeds the results back to the AI in a conversation loop.
|
|
39
|
+
*/
|
|
40
|
+
runWithTools(prompt: string, tools: AiTool[], opts?: {
|
|
41
|
+
timeoutMs?: number | null;
|
|
42
|
+
baseUrl?: string;
|
|
43
|
+
startServer?: boolean;
|
|
44
|
+
verbose?: boolean;
|
|
45
|
+
signal?: AbortSignal;
|
|
46
|
+
maxToolCalls?: number;
|
|
47
|
+
agent?: 'plan' | 'build';
|
|
48
|
+
spinner?: any;
|
|
49
|
+
}): Promise<AiRunResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Execute a tool directly from the tools array
|
|
52
|
+
*/
|
|
53
|
+
private executeTool;
|
|
54
|
+
/**
|
|
55
|
+
* Build system prompt with tool definitions
|
|
56
|
+
*/
|
|
57
|
+
private buildSystemPromptWithTools;
|
|
58
|
+
/**
|
|
59
|
+
* Detect TOOL_CALL pattern in AI output
|
|
60
|
+
*/
|
|
61
|
+
private detectToolCall;
|
|
62
|
+
/**
|
|
63
|
+
* Format tool result for AI consumption
|
|
64
|
+
*/
|
|
65
|
+
private formatToolResult;
|
|
66
|
+
private executeWithClient;
|
|
67
|
+
private setupExitCleanup;
|
|
68
|
+
private invoke;
|
|
69
|
+
private analyzeResponseQuality;
|
|
70
|
+
private detectClarificationQuestion;
|
|
71
|
+
private appendTranscript;
|
|
72
|
+
private highlightOutput;
|
|
73
|
+
private withTimeout;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=aiAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiAgent.d.ts","sourceRoot":"","sources":["../../src/modules/aiAgent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAS;IACrC,OAAO,CAAC,MAAM,CAAC,YAAY,CAA6C;IAExE,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,gBAAsB;IAIzC,GAAG,CACP,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACzB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,GACA,OAAO,CAAC,WAAW,CAAC;IAmIvB;;;;;;OAMG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACzB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,GACA,OAAO,CAAC,WAAW,CAAC;IA8DvB;;OAEG;YACW,WAAW;IAoBzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA6ClC;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAkBV,iBAAiB;IAoD/B,OAAO,CAAC,gBAAgB;YAoBV,MAAM;IAyQpB,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,2BAA2B;IAuBnC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;YAsET,WAAW;CAW1B"}
|