codevf 1.0.0 → 1.0.1
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 +6 -1
- 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 +194 -149
- 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/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 +158 -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 +36 -0
- package/dist/mcp/tools/instant.d.ts.map +1 -0
- package/dist/mcp/tools/instant.js +100 -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 +345 -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 +227 -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 -25
- package/ARCHITECTURE.md +0 -285
- package/BUILD_SUMMARY.md +0 -340
- package/QUICKSTART.md +0 -180
|
@@ -0,0 +1,158 @@
|
|
|
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 { InstantTool } from './tools/instant.js';
|
|
14
|
+
import { ChatTool } from './tools/chat.js';
|
|
15
|
+
import { logger, LogLevel } from '../lib/utils/logger.js';
|
|
16
|
+
/**
|
|
17
|
+
* Initialize MCP Server
|
|
18
|
+
*/
|
|
19
|
+
async function main() {
|
|
20
|
+
// Set log level from environment
|
|
21
|
+
if (process.env.DEBUG) {
|
|
22
|
+
logger.setLevel(LogLevel.DEBUG);
|
|
23
|
+
}
|
|
24
|
+
// Check if configured
|
|
25
|
+
const configManager = new ConfigManager('mcp-config.json');
|
|
26
|
+
if (!configManager.exists()) {
|
|
27
|
+
console.error('Error: Not configured. Run: codevf setup');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
// Load configuration
|
|
31
|
+
let config;
|
|
32
|
+
try {
|
|
33
|
+
config = configManager.load();
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error('Error loading config:', error.message);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
// Initialize components
|
|
40
|
+
const tokenManager = new TokenManager(configManager);
|
|
41
|
+
const apiClient = new ApiClient(config.baseUrl, tokenManager);
|
|
42
|
+
const defaultProjectId = config.defaults?.projectId || '1';
|
|
43
|
+
const tasksApi = new TasksApi(apiClient, config.baseUrl, defaultProjectId);
|
|
44
|
+
const instantTool = new InstantTool(tasksApi, tokenManager, config.baseUrl);
|
|
45
|
+
const chatTool = new ChatTool(tasksApi, config.baseUrl);
|
|
46
|
+
// Create MCP server
|
|
47
|
+
const server = new Server({
|
|
48
|
+
name: 'codevf',
|
|
49
|
+
version: '0.1.0',
|
|
50
|
+
}, {
|
|
51
|
+
capabilities: {
|
|
52
|
+
tools: {},
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
// Register tools
|
|
56
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
57
|
+
return {
|
|
58
|
+
tools: [
|
|
59
|
+
{
|
|
60
|
+
name: 'codevf-instant',
|
|
61
|
+
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.',
|
|
62
|
+
inputSchema: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
message: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'Question or request for the engineer',
|
|
68
|
+
},
|
|
69
|
+
maxCredits: {
|
|
70
|
+
type: 'number',
|
|
71
|
+
description: 'Maximum credits to spend (1-10, default: 10)',
|
|
72
|
+
default: 10,
|
|
73
|
+
minimum: 1,
|
|
74
|
+
maximum: 10,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
required: ['message'],
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'codevf-chat',
|
|
82
|
+
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.',
|
|
83
|
+
inputSchema: {
|
|
84
|
+
type: 'object',
|
|
85
|
+
properties: {
|
|
86
|
+
message: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
description: 'Initial message or problem description for the engineer',
|
|
89
|
+
},
|
|
90
|
+
maxCredits: {
|
|
91
|
+
type: 'number',
|
|
92
|
+
description: 'Maximum credits to spend (4-1920, default: 240). Rate: 2 credits/minute',
|
|
93
|
+
default: 240,
|
|
94
|
+
minimum: 4,
|
|
95
|
+
maximum: 1920,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
required: ['message'],
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
// Handle tool calls
|
|
105
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
106
|
+
const { name, arguments: args } = request.params;
|
|
107
|
+
try {
|
|
108
|
+
let result;
|
|
109
|
+
switch (name) {
|
|
110
|
+
case 'codevf-instant':
|
|
111
|
+
result = await instantTool.execute(args);
|
|
112
|
+
break;
|
|
113
|
+
case 'codevf-chat':
|
|
114
|
+
result = await chatTool.execute(args);
|
|
115
|
+
break;
|
|
116
|
+
default:
|
|
117
|
+
result = {
|
|
118
|
+
content: [
|
|
119
|
+
{
|
|
120
|
+
type: 'text',
|
|
121
|
+
text: `Unknown tool: ${name}`,
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
isError: true,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
logger.error('Tool execution error', error);
|
|
131
|
+
return {
|
|
132
|
+
content: [
|
|
133
|
+
{
|
|
134
|
+
type: 'text',
|
|
135
|
+
text: `Error: ${error.message}`,
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
isError: true,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
// Start server
|
|
143
|
+
const transport = new StdioServerTransport();
|
|
144
|
+
await server.connect(transport);
|
|
145
|
+
logger.info('CodeVF MCP Server started');
|
|
146
|
+
// Handle shutdown
|
|
147
|
+
process.on('SIGINT', async () => {
|
|
148
|
+
logger.info('Shutting down...');
|
|
149
|
+
await server.close();
|
|
150
|
+
process.exit(0);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// Run server
|
|
154
|
+
main().catch((error) => {
|
|
155
|
+
console.error('Fatal error:', error);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
});
|
|
158
|
+
//# 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"}
|
|
@@ -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,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codevf-instant tool implementation
|
|
3
|
+
* Quick validation queries with single response
|
|
4
|
+
*/
|
|
5
|
+
import { TasksApi } from '../../lib/api/tasks.js';
|
|
6
|
+
import { TokenManager } from '../../lib/auth/token-manager.js';
|
|
7
|
+
export interface InstantToolArgs {
|
|
8
|
+
message: string;
|
|
9
|
+
maxCredits?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface InstantToolResult {
|
|
12
|
+
content: Array<{
|
|
13
|
+
type: string;
|
|
14
|
+
text: string;
|
|
15
|
+
}>;
|
|
16
|
+
isError?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class InstantTool {
|
|
19
|
+
private tasksApi;
|
|
20
|
+
private tokenManager;
|
|
21
|
+
private baseUrl;
|
|
22
|
+
constructor(tasksApi: TasksApi, tokenManager: TokenManager, baseUrl: string);
|
|
23
|
+
/**
|
|
24
|
+
* Handle codevf-instant tool call
|
|
25
|
+
*/
|
|
26
|
+
execute(args: InstantToolArgs): Promise<InstantToolResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Get WebSocket connection URL
|
|
29
|
+
*/
|
|
30
|
+
private getWebSocketUrl;
|
|
31
|
+
/**
|
|
32
|
+
* Format engineer response
|
|
33
|
+
*/
|
|
34
|
+
private formatResponse;
|
|
35
|
+
}
|
|
36
|
+
//# 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;AAElD,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,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;IAM3E;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyEhE;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,cAAc;CAgBvB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
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, tokenManager, baseUrl) {
|
|
9
|
+
this.tasksApi = tasksApi;
|
|
10
|
+
this.tokenManager = tokenManager;
|
|
11
|
+
this.baseUrl = baseUrl;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Handle codevf-instant tool call
|
|
15
|
+
*/
|
|
16
|
+
async execute(args) {
|
|
17
|
+
try {
|
|
18
|
+
logger.info('Executing codevf-instant', { message: args.message });
|
|
19
|
+
// Validate credits
|
|
20
|
+
const maxCredits = args.maxCredits || 10;
|
|
21
|
+
if (maxCredits < 1 || maxCredits > 10) {
|
|
22
|
+
return {
|
|
23
|
+
content: [
|
|
24
|
+
{
|
|
25
|
+
type: 'text',
|
|
26
|
+
text: 'Error: maxCredits must be between 1 and 10 for instant queries',
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
isError: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Create task
|
|
33
|
+
const task = await this.tasksApi.create({
|
|
34
|
+
message: args.message,
|
|
35
|
+
taskMode: 'realtime_answer',
|
|
36
|
+
maxCredits,
|
|
37
|
+
});
|
|
38
|
+
logger.info('Task created', { taskId: task.taskId });
|
|
39
|
+
// Show warning if low balance
|
|
40
|
+
if (task.warning) {
|
|
41
|
+
logger.warn('Credit warning', { warning: task.warning });
|
|
42
|
+
}
|
|
43
|
+
// Connect WebSocket
|
|
44
|
+
const token = await this.tokenManager.getValidToken();
|
|
45
|
+
const wsUrl = this.getWebSocketUrl(task.taskId, token);
|
|
46
|
+
const ws = new WebSocketClient(wsUrl);
|
|
47
|
+
await ws.connect();
|
|
48
|
+
logger.info('Waiting for engineer response...');
|
|
49
|
+
// Wait for response (5 min timeout)
|
|
50
|
+
const response = await ws.waitForResponse(300000);
|
|
51
|
+
// Disconnect
|
|
52
|
+
ws.disconnect();
|
|
53
|
+
// Format response
|
|
54
|
+
const formattedResponse = this.formatResponse(response, task.warning);
|
|
55
|
+
return {
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: 'text',
|
|
59
|
+
text: formattedResponse,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
logger.error('codevf-instant failed', error);
|
|
66
|
+
return {
|
|
67
|
+
content: [
|
|
68
|
+
{
|
|
69
|
+
type: 'text',
|
|
70
|
+
text: `Error: ${error.message}`,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
isError: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get WebSocket connection URL
|
|
79
|
+
*/
|
|
80
|
+
getWebSocketUrl(taskId, token) {
|
|
81
|
+
const wsProtocol = this.baseUrl.startsWith('https://') ? 'wss://' : 'ws://';
|
|
82
|
+
const host = this.baseUrl.replace(/^https?:\/\//, '');
|
|
83
|
+
return `${wsProtocol}${host}/ws?taskId=${taskId}&userType=customer&token=${token}`;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Format engineer response
|
|
87
|
+
*/
|
|
88
|
+
formatResponse(response, warning) {
|
|
89
|
+
let output = 'Engineer Response:\n\n';
|
|
90
|
+
output += response.text + '\n\n';
|
|
91
|
+
output += '---\n';
|
|
92
|
+
output += `Credits used: ${response.creditsUsed}\n`;
|
|
93
|
+
output += `Session time: ${response.duration}\n`;
|
|
94
|
+
if (warning) {
|
|
95
|
+
output += `\n⚠️ ${warning}\n`;
|
|
96
|
+
}
|
|
97
|
+
return output;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# 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"}
|