@nanocollective/nanocoder 1.16.5 → 1.17.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/README.md +53 -19
- package/assets/nanocoder-vscode.vsix +0 -0
- package/dist/app.d.ts +6 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +54 -18
- package/dist/app.js.map +1 -1
- package/dist/cli.js +13 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/mcp.d.ts +6 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +25 -3
- package/dist/commands/mcp.js.map +1 -1
- package/dist/components/vscode-extension-prompt.d.ts +12 -0
- package/dist/components/vscode-extension-prompt.d.ts.map +1 -0
- package/dist/components/vscode-extension-prompt.js +115 -0
- package/dist/components/vscode-extension-prompt.js.map +1 -0
- package/dist/hooks/useAppInitialization.d.ts +2 -0
- package/dist/hooks/useAppInitialization.d.ts.map +1 -1
- package/dist/hooks/useAppInitialization.js +55 -1
- package/dist/hooks/useAppInitialization.js.map +1 -1
- package/dist/hooks/useModeHandlers.d.ts +2 -1
- package/dist/hooks/useModeHandlers.d.ts.map +1 -1
- package/dist/hooks/useModeHandlers.js +13 -1
- package/dist/hooks/useModeHandlers.js.map +1 -1
- package/dist/hooks/useToolHandler.d.ts.map +1 -1
- package/dist/hooks/useToolHandler.js +11 -0
- package/dist/hooks/useToolHandler.js.map +1 -1
- package/dist/hooks/useVSCodeServer.d.ts +45 -0
- package/dist/hooks/useVSCodeServer.d.ts.map +1 -0
- package/dist/hooks/useVSCodeServer.js +144 -0
- package/dist/hooks/useVSCodeServer.js.map +1 -0
- package/dist/lsp/index.d.ts +12 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +11 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +78 -0
- package/dist/lsp/lsp-client.d.ts.map +1 -0
- package/dist/lsp/lsp-client.js +378 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-client.spec.d.ts +2 -0
- package/dist/lsp/lsp-client.spec.d.ts.map +1 -0
- package/dist/lsp/lsp-client.spec.js +395 -0
- package/dist/lsp/lsp-client.spec.js.map +1 -0
- package/dist/lsp/lsp-manager.d.ts +124 -0
- package/dist/lsp/lsp-manager.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.js +313 -0
- package/dist/lsp/lsp-manager.js.map +1 -0
- package/dist/lsp/lsp-manager.spec.d.ts +2 -0
- package/dist/lsp/lsp-manager.spec.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.spec.js +388 -0
- package/dist/lsp/lsp-manager.spec.js.map +1 -0
- package/dist/lsp/protocol.d.ts +313 -0
- package/dist/lsp/protocol.d.ts.map +1 -0
- package/dist/lsp/protocol.js +70 -0
- package/dist/lsp/protocol.js.map +1 -0
- package/dist/lsp/protocol.spec.d.ts +2 -0
- package/dist/lsp/protocol.spec.d.ts.map +1 -0
- package/dist/lsp/protocol.spec.js +406 -0
- package/dist/lsp/protocol.spec.js.map +1 -0
- package/dist/lsp/server-discovery.d.ts +35 -0
- package/dist/lsp/server-discovery.d.ts.map +1 -0
- package/dist/lsp/server-discovery.js +291 -0
- package/dist/lsp/server-discovery.js.map +1 -0
- package/dist/lsp/server-discovery.spec.d.ts +2 -0
- package/dist/lsp/server-discovery.spec.d.ts.map +1 -0
- package/dist/lsp/server-discovery.spec.js +375 -0
- package/dist/lsp/server-discovery.spec.js.map +1 -0
- package/dist/mcp/mcp-client.d.ts +18 -0
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +59 -23
- package/dist/mcp/mcp-client.js.map +1 -1
- package/dist/mcp/mcp-client.spec.d.ts +2 -0
- package/dist/mcp/mcp-client.spec.d.ts.map +1 -0
- package/dist/mcp/mcp-client.spec.js +64 -0
- package/dist/mcp/mcp-client.spec.js.map +1 -0
- package/dist/mcp/transport-factory.d.ts +39 -0
- package/dist/mcp/transport-factory.d.ts.map +1 -0
- package/dist/mcp/transport-factory.js +176 -0
- package/dist/mcp/transport-factory.js.map +1 -0
- package/dist/mcp/transport-factory.spec.d.ts +2 -0
- package/dist/mcp/transport-factory.spec.d.ts.map +1 -0
- package/dist/mcp/transport-factory.spec.js +303 -0
- package/dist/mcp/transport-factory.spec.js.map +1 -0
- package/dist/tools/create-file.d.ts.map +1 -1
- package/dist/tools/create-file.js +37 -3
- package/dist/tools/create-file.js.map +1 -1
- package/dist/tools/delete-lines.d.ts.map +1 -1
- package/dist/tools/delete-lines.js +41 -1
- package/dist/tools/delete-lines.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insert-lines.d.ts.map +1 -1
- package/dist/tools/insert-lines.js +40 -1
- package/dist/tools/insert-lines.js.map +1 -1
- package/dist/tools/lsp-get-diagnostics.d.ts +3 -0
- package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -0
- package/dist/tools/lsp-get-diagnostics.js +182 -0
- package/dist/tools/lsp-get-diagnostics.js.map +1 -0
- package/dist/tools/replace-lines.d.ts.map +1 -1
- package/dist/tools/replace-lines.js +44 -1
- package/dist/tools/replace-lines.js.map +1 -1
- package/dist/tools/tool-manager.d.ts +17 -0
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +12 -0
- package/dist/tools/tool-manager.js.map +1 -1
- package/dist/types/config.d.ts +27 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/mcp.d.ts +23 -1
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/vscode/extension-installer.d.ts +24 -0
- package/dist/vscode/extension-installer.d.ts.map +1 -0
- package/dist/vscode/extension-installer.js +110 -0
- package/dist/vscode/extension-installer.js.map +1 -0
- package/dist/vscode/extension-installer.spec.d.ts +2 -0
- package/dist/vscode/extension-installer.spec.d.ts.map +1 -0
- package/dist/vscode/extension-installer.spec.js +132 -0
- package/dist/vscode/extension-installer.spec.js.map +1 -0
- package/dist/vscode/index.d.ts +14 -0
- package/dist/vscode/index.d.ts.map +1 -0
- package/dist/vscode/index.js +14 -0
- package/dist/vscode/index.js.map +1 -0
- package/dist/vscode/protocol.d.ts +101 -0
- package/dist/vscode/protocol.d.ts.map +1 -0
- package/dist/vscode/protocol.js +7 -0
- package/dist/vscode/protocol.js.map +1 -0
- package/dist/vscode/protocol.spec.d.ts +2 -0
- package/dist/vscode/protocol.spec.d.ts.map +1 -0
- package/dist/vscode/protocol.spec.js +354 -0
- package/dist/vscode/protocol.spec.js.map +1 -0
- package/dist/vscode/vscode-server.d.ts +118 -0
- package/dist/vscode/vscode-server.d.ts.map +1 -0
- package/dist/vscode/vscode-server.js +303 -0
- package/dist/vscode/vscode-server.js.map +1 -0
- package/dist/vscode/vscode-server.spec.d.ts +2 -0
- package/dist/vscode/vscode-server.spec.d.ts.map +1 -0
- package/dist/vscode/vscode-server.spec.js +487 -0
- package/dist/vscode/vscode-server.spec.js.map +1 -0
- package/dist/wizard/steps/mcp-step.d.ts.map +1 -1
- package/dist/wizard/steps/mcp-step.js +139 -72
- package/dist/wizard/steps/mcp-step.js.map +1 -1
- package/dist/wizard/steps/summary-step.d.ts.map +1 -1
- package/dist/wizard/steps/summary-step.js +58 -2
- package/dist/wizard/steps/summary-step.js.map +1 -1
- package/dist/wizard/templates/mcp-templates.d.ts +20 -2
- package/dist/wizard/templates/mcp-templates.d.ts.map +1 -1
- package/dist/wizard/templates/mcp-templates.js +351 -7
- package/dist/wizard/templates/mcp-templates.js.map +1 -1
- package/dist/wizard/templates/mcp-templates.spec.js +257 -0
- package/dist/wizard/templates/mcp-templates.spec.js.map +1 -1
- package/dist/wizard/validation-array.spec.d.ts +2 -0
- package/dist/wizard/validation-array.spec.d.ts.map +1 -0
- package/dist/wizard/validation-array.spec.js +221 -0
- package/dist/wizard/validation-array.spec.js.map +1 -0
- package/dist/wizard/validation.d.ts +26 -1
- package/dist/wizard/validation.d.ts.map +1 -1
- package/dist/wizard/validation.js +15 -2
- package/dist/wizard/validation.js.map +1 -1
- package/dist/wizard/validation.spec.js +13 -5
- package/dist/wizard/validation.spec.js.map +1 -1
- package/package.json +7 -3
- package/source/app/prompts/main-prompt.md +6 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { WebSocket } from 'ws';
|
|
3
|
+
import { VSCodeServer, getVSCodeServer, isVSCodeConnected, sendFileChangeToVSCode, } from './vscode-server.js';
|
|
4
|
+
// Use different ports for each test to avoid conflicts
|
|
5
|
+
let testPort = 52000;
|
|
6
|
+
function getNextPort() {
|
|
7
|
+
return testPort++;
|
|
8
|
+
}
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Tests for VSCodeServer class
|
|
11
|
+
// ============================================================================
|
|
12
|
+
test('VSCodeServer can be instantiated with default port', t => {
|
|
13
|
+
const server = new VSCodeServer();
|
|
14
|
+
t.truthy(server);
|
|
15
|
+
});
|
|
16
|
+
test('VSCodeServer can be instantiated with custom port', t => {
|
|
17
|
+
const server = new VSCodeServer(12345);
|
|
18
|
+
t.truthy(server);
|
|
19
|
+
});
|
|
20
|
+
test('VSCodeServer starts and stops correctly', async (t) => {
|
|
21
|
+
const port = getNextPort();
|
|
22
|
+
const server = new VSCodeServer(port);
|
|
23
|
+
const started = await server.start();
|
|
24
|
+
t.true(started);
|
|
25
|
+
await server.stop();
|
|
26
|
+
t.pass();
|
|
27
|
+
});
|
|
28
|
+
test('VSCodeServer reports no connections initially', async (t) => {
|
|
29
|
+
const port = getNextPort();
|
|
30
|
+
const server = new VSCodeServer(port);
|
|
31
|
+
await server.start();
|
|
32
|
+
t.false(server.hasConnections());
|
|
33
|
+
t.is(server.getConnectionCount(), 0);
|
|
34
|
+
await server.stop();
|
|
35
|
+
});
|
|
36
|
+
test('VSCodeServer accepts client connections', async (t) => {
|
|
37
|
+
const port = getNextPort();
|
|
38
|
+
const server = new VSCodeServer(port);
|
|
39
|
+
await server.start();
|
|
40
|
+
// Connect a client
|
|
41
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
42
|
+
await new Promise(resolve => {
|
|
43
|
+
client.on('open', () => resolve());
|
|
44
|
+
});
|
|
45
|
+
// Give the server time to register the connection
|
|
46
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
47
|
+
t.true(server.hasConnections());
|
|
48
|
+
t.is(server.getConnectionCount(), 1);
|
|
49
|
+
client.close();
|
|
50
|
+
await server.stop();
|
|
51
|
+
});
|
|
52
|
+
test('VSCodeServer sends connection acknowledgment on connect', async (t) => {
|
|
53
|
+
const port = getNextPort();
|
|
54
|
+
const server = new VSCodeServer(port);
|
|
55
|
+
await server.start();
|
|
56
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
57
|
+
const message = await new Promise(resolve => {
|
|
58
|
+
client.on('message', (data) => {
|
|
59
|
+
resolve(JSON.parse(data.toString()));
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
t.is(message.type, 'connection_ack');
|
|
63
|
+
const ack = message;
|
|
64
|
+
t.truthy(ack.protocolVersion);
|
|
65
|
+
t.truthy(ack.cliVersion);
|
|
66
|
+
client.close();
|
|
67
|
+
await server.stop();
|
|
68
|
+
});
|
|
69
|
+
test('VSCodeServer calls onConnect callback', async (t) => {
|
|
70
|
+
const port = getNextPort();
|
|
71
|
+
const server = new VSCodeServer(port);
|
|
72
|
+
let connectCalled = false;
|
|
73
|
+
server.onCallbacks({
|
|
74
|
+
onConnect: () => {
|
|
75
|
+
connectCalled = true;
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
await server.start();
|
|
79
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
80
|
+
await new Promise(resolve => {
|
|
81
|
+
client.on('open', () => resolve());
|
|
82
|
+
});
|
|
83
|
+
// Give the callback time to fire
|
|
84
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
85
|
+
t.true(connectCalled);
|
|
86
|
+
client.close();
|
|
87
|
+
await server.stop();
|
|
88
|
+
});
|
|
89
|
+
test('VSCodeServer calls onDisconnect callback', async (t) => {
|
|
90
|
+
const port = getNextPort();
|
|
91
|
+
const server = new VSCodeServer(port);
|
|
92
|
+
let disconnectCalled = false;
|
|
93
|
+
server.onCallbacks({
|
|
94
|
+
onDisconnect: () => {
|
|
95
|
+
disconnectCalled = true;
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
await server.start();
|
|
99
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
100
|
+
await new Promise(resolve => {
|
|
101
|
+
client.on('open', () => resolve());
|
|
102
|
+
});
|
|
103
|
+
client.close();
|
|
104
|
+
// Give the callback time to fire
|
|
105
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
106
|
+
t.true(disconnectCalled);
|
|
107
|
+
await server.stop();
|
|
108
|
+
});
|
|
109
|
+
test('VSCodeServer sendFileChange broadcasts to connected clients', async (t) => {
|
|
110
|
+
const port = getNextPort();
|
|
111
|
+
const server = new VSCodeServer(port);
|
|
112
|
+
await server.start();
|
|
113
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
114
|
+
// Wait for connection ack first
|
|
115
|
+
await new Promise(resolve => {
|
|
116
|
+
client.on('message', () => resolve());
|
|
117
|
+
});
|
|
118
|
+
// Set up listener for file change
|
|
119
|
+
const messagePromise = new Promise(resolve => {
|
|
120
|
+
client.on('message', (data) => {
|
|
121
|
+
const msg = JSON.parse(data.toString());
|
|
122
|
+
if (msg.type === 'file_change') {
|
|
123
|
+
resolve(msg);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
// Send file change
|
|
128
|
+
const id = server.sendFileChange('/path/to/file.ts', 'original content', 'new content', 'create_file', { path: '/path/to/file.ts' });
|
|
129
|
+
t.truthy(id);
|
|
130
|
+
const message = await messagePromise;
|
|
131
|
+
t.is(message.type, 'file_change');
|
|
132
|
+
t.is(message.id, id);
|
|
133
|
+
t.is(message.filePath, '/path/to/file.ts');
|
|
134
|
+
t.is(message.originalContent, 'original content');
|
|
135
|
+
t.is(message.newContent, 'new content');
|
|
136
|
+
t.is(message.toolName, 'create_file');
|
|
137
|
+
client.close();
|
|
138
|
+
await server.stop();
|
|
139
|
+
});
|
|
140
|
+
test('VSCodeServer tracks pending changes', async (t) => {
|
|
141
|
+
const port = getNextPort();
|
|
142
|
+
const server = new VSCodeServer(port);
|
|
143
|
+
await server.start();
|
|
144
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
145
|
+
await new Promise(resolve => {
|
|
146
|
+
client.on('open', () => resolve());
|
|
147
|
+
});
|
|
148
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
149
|
+
const id = server.sendFileChange('/path/to/file.ts', 'original', 'new', 'test_tool', {});
|
|
150
|
+
const pending = server.getPendingChange(id);
|
|
151
|
+
t.truthy(pending);
|
|
152
|
+
t.is(pending?.id, id);
|
|
153
|
+
t.is(pending?.filePath, '/path/to/file.ts');
|
|
154
|
+
t.is(pending?.originalContent, 'original');
|
|
155
|
+
t.is(pending?.newContent, 'new');
|
|
156
|
+
t.is(pending?.toolName, 'test_tool');
|
|
157
|
+
t.true((pending?.timestamp ?? 0) > 0);
|
|
158
|
+
client.close();
|
|
159
|
+
await server.stop();
|
|
160
|
+
});
|
|
161
|
+
test('VSCodeServer getAllPendingChanges returns all pending changes', async (t) => {
|
|
162
|
+
const port = getNextPort();
|
|
163
|
+
const server = new VSCodeServer(port);
|
|
164
|
+
await server.start();
|
|
165
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
166
|
+
await new Promise(resolve => {
|
|
167
|
+
client.on('open', () => resolve());
|
|
168
|
+
});
|
|
169
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
170
|
+
server.sendFileChange('/file1.ts', 'a', 'b', 'tool1', {});
|
|
171
|
+
server.sendFileChange('/file2.ts', 'c', 'd', 'tool2', {});
|
|
172
|
+
server.sendFileChange('/file3.ts', 'e', 'f', 'tool3', {});
|
|
173
|
+
const all = server.getAllPendingChanges();
|
|
174
|
+
t.is(all.length, 3);
|
|
175
|
+
client.close();
|
|
176
|
+
await server.stop();
|
|
177
|
+
});
|
|
178
|
+
test('VSCodeServer removePendingChange removes a change', async (t) => {
|
|
179
|
+
const port = getNextPort();
|
|
180
|
+
const server = new VSCodeServer(port);
|
|
181
|
+
await server.start();
|
|
182
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
183
|
+
await new Promise(resolve => {
|
|
184
|
+
client.on('open', () => resolve());
|
|
185
|
+
});
|
|
186
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
187
|
+
const id = server.sendFileChange('/file.ts', 'a', 'b', 'tool', {});
|
|
188
|
+
t.truthy(server.getPendingChange(id));
|
|
189
|
+
server.removePendingChange(id);
|
|
190
|
+
t.is(server.getPendingChange(id), undefined);
|
|
191
|
+
client.close();
|
|
192
|
+
await server.stop();
|
|
193
|
+
});
|
|
194
|
+
test('VSCodeServer sendAssistantMessage broadcasts message', async (t) => {
|
|
195
|
+
const port = getNextPort();
|
|
196
|
+
const server = new VSCodeServer(port);
|
|
197
|
+
await server.start();
|
|
198
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
199
|
+
// Wait for connection ack
|
|
200
|
+
await new Promise(resolve => {
|
|
201
|
+
client.on('message', () => resolve());
|
|
202
|
+
});
|
|
203
|
+
const messagePromise = new Promise(resolve => {
|
|
204
|
+
client.on('message', (data) => {
|
|
205
|
+
const msg = JSON.parse(data.toString());
|
|
206
|
+
if (msg.type === 'assistant_message') {
|
|
207
|
+
resolve(msg);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
server.sendAssistantMessage('Hello from assistant', false);
|
|
212
|
+
const message = await messagePromise;
|
|
213
|
+
t.is(message.type, 'assistant_message');
|
|
214
|
+
t.is(message.content, 'Hello from assistant');
|
|
215
|
+
t.false(message.isStreaming);
|
|
216
|
+
client.close();
|
|
217
|
+
await server.stop();
|
|
218
|
+
});
|
|
219
|
+
test('VSCodeServer sendAssistantMessage with streaming flag', async (t) => {
|
|
220
|
+
const port = getNextPort();
|
|
221
|
+
const server = new VSCodeServer(port);
|
|
222
|
+
await server.start();
|
|
223
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
224
|
+
await new Promise(resolve => {
|
|
225
|
+
client.on('message', () => resolve());
|
|
226
|
+
});
|
|
227
|
+
const messagePromise = new Promise(resolve => {
|
|
228
|
+
client.on('message', (data) => {
|
|
229
|
+
const msg = JSON.parse(data.toString());
|
|
230
|
+
if (msg.type === 'assistant_message') {
|
|
231
|
+
resolve(msg);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
server.sendAssistantMessage('Streaming...', true);
|
|
236
|
+
const message = await messagePromise;
|
|
237
|
+
t.true(message.isStreaming);
|
|
238
|
+
client.close();
|
|
239
|
+
await server.stop();
|
|
240
|
+
});
|
|
241
|
+
test('VSCodeServer sendStatus broadcasts status', async (t) => {
|
|
242
|
+
const port = getNextPort();
|
|
243
|
+
const server = new VSCodeServer(port);
|
|
244
|
+
await server.start();
|
|
245
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
246
|
+
await new Promise(resolve => {
|
|
247
|
+
client.on('message', () => resolve());
|
|
248
|
+
});
|
|
249
|
+
const messagePromise = new Promise(resolve => {
|
|
250
|
+
client.on('message', (data) => {
|
|
251
|
+
const msg = JSON.parse(data.toString());
|
|
252
|
+
if (msg.type === 'status') {
|
|
253
|
+
resolve(msg);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
server.sendStatus('gpt-4', 'openai');
|
|
258
|
+
const message = await messagePromise;
|
|
259
|
+
t.is(message.type, 'status');
|
|
260
|
+
t.true(message.connected);
|
|
261
|
+
t.is(message.model, 'gpt-4');
|
|
262
|
+
t.is(message.provider, 'openai');
|
|
263
|
+
t.truthy(message.workingDirectory);
|
|
264
|
+
client.close();
|
|
265
|
+
await server.stop();
|
|
266
|
+
});
|
|
267
|
+
test('VSCodeServer requestDiagnostics broadcasts request', async (t) => {
|
|
268
|
+
const port = getNextPort();
|
|
269
|
+
const server = new VSCodeServer(port);
|
|
270
|
+
await server.start();
|
|
271
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
272
|
+
await new Promise(resolve => {
|
|
273
|
+
client.on('message', () => resolve());
|
|
274
|
+
});
|
|
275
|
+
const messagePromise = new Promise(resolve => {
|
|
276
|
+
client.on('message', (data) => {
|
|
277
|
+
const msg = JSON.parse(data.toString());
|
|
278
|
+
if (msg.type === 'diagnostics_request') {
|
|
279
|
+
resolve(msg);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
server.requestDiagnostics('/path/to/file.ts');
|
|
284
|
+
const message = await messagePromise;
|
|
285
|
+
t.is(message.type, 'diagnostics_request');
|
|
286
|
+
t.is(message.filePath, '/path/to/file.ts');
|
|
287
|
+
client.close();
|
|
288
|
+
await server.stop();
|
|
289
|
+
});
|
|
290
|
+
test('VSCodeServer handles client messages - send_prompt', async (t) => {
|
|
291
|
+
const port = getNextPort();
|
|
292
|
+
const server = new VSCodeServer(port);
|
|
293
|
+
let receivedPrompt = '';
|
|
294
|
+
server.onCallbacks({
|
|
295
|
+
onPrompt: (prompt, _context) => {
|
|
296
|
+
receivedPrompt = prompt;
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
await server.start();
|
|
300
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
301
|
+
await new Promise(resolve => {
|
|
302
|
+
client.on('open', () => resolve());
|
|
303
|
+
});
|
|
304
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
305
|
+
client.send(JSON.stringify({ type: 'send_prompt', prompt: 'Help me' }));
|
|
306
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
307
|
+
t.is(receivedPrompt, 'Help me');
|
|
308
|
+
client.close();
|
|
309
|
+
await server.stop();
|
|
310
|
+
});
|
|
311
|
+
test('VSCodeServer handles client messages - apply_change', async (t) => {
|
|
312
|
+
const port = getNextPort();
|
|
313
|
+
const server = new VSCodeServer(port);
|
|
314
|
+
let appliedId = '';
|
|
315
|
+
server.onCallbacks({
|
|
316
|
+
onChangeApplied: id => {
|
|
317
|
+
appliedId = id;
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
await server.start();
|
|
321
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
322
|
+
await new Promise(resolve => {
|
|
323
|
+
client.on('open', () => resolve());
|
|
324
|
+
});
|
|
325
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
326
|
+
// First create a pending change
|
|
327
|
+
const changeId = server.sendFileChange('/file.ts', 'a', 'b', 'tool', {});
|
|
328
|
+
// Then apply it from client
|
|
329
|
+
client.send(JSON.stringify({ type: 'apply_change', id: changeId }));
|
|
330
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
331
|
+
t.is(appliedId, changeId);
|
|
332
|
+
// Pending change should be removed
|
|
333
|
+
t.is(server.getPendingChange(changeId), undefined);
|
|
334
|
+
client.close();
|
|
335
|
+
await server.stop();
|
|
336
|
+
});
|
|
337
|
+
test('VSCodeServer handles client messages - reject_change', async (t) => {
|
|
338
|
+
const port = getNextPort();
|
|
339
|
+
const server = new VSCodeServer(port);
|
|
340
|
+
let rejectedId = '';
|
|
341
|
+
server.onCallbacks({
|
|
342
|
+
onChangeRejected: id => {
|
|
343
|
+
rejectedId = id;
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
await server.start();
|
|
347
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
348
|
+
await new Promise(resolve => {
|
|
349
|
+
client.on('open', () => resolve());
|
|
350
|
+
});
|
|
351
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
352
|
+
const changeId = server.sendFileChange('/file.ts', 'a', 'b', 'tool', {});
|
|
353
|
+
client.send(JSON.stringify({ type: 'reject_change', id: changeId }));
|
|
354
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
355
|
+
t.is(rejectedId, changeId);
|
|
356
|
+
t.is(server.getPendingChange(changeId), undefined);
|
|
357
|
+
client.close();
|
|
358
|
+
await server.stop();
|
|
359
|
+
});
|
|
360
|
+
test('VSCodeServer handles client messages - context', async (t) => {
|
|
361
|
+
const port = getNextPort();
|
|
362
|
+
const server = new VSCodeServer(port);
|
|
363
|
+
let receivedContext = {};
|
|
364
|
+
server.onCallbacks({
|
|
365
|
+
onContext: context => {
|
|
366
|
+
receivedContext = context;
|
|
367
|
+
},
|
|
368
|
+
});
|
|
369
|
+
await server.start();
|
|
370
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
371
|
+
await new Promise(resolve => {
|
|
372
|
+
client.on('open', () => resolve());
|
|
373
|
+
});
|
|
374
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
375
|
+
client.send(JSON.stringify({
|
|
376
|
+
type: 'context',
|
|
377
|
+
workspaceFolder: '/home/user/project',
|
|
378
|
+
openFiles: ['/home/user/project/src/index.ts'],
|
|
379
|
+
activeFile: '/home/user/project/src/index.ts',
|
|
380
|
+
}));
|
|
381
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
382
|
+
t.is(receivedContext.workspaceFolder, '/home/user/project');
|
|
383
|
+
client.close();
|
|
384
|
+
await server.stop();
|
|
385
|
+
});
|
|
386
|
+
test('VSCodeServer handles client messages - diagnostics_response', async (t) => {
|
|
387
|
+
const port = getNextPort();
|
|
388
|
+
const server = new VSCodeServer(port);
|
|
389
|
+
let receivedDiagnostics = [];
|
|
390
|
+
server.onCallbacks({
|
|
391
|
+
onDiagnosticsResponse: diagnostics => {
|
|
392
|
+
receivedDiagnostics = diagnostics;
|
|
393
|
+
},
|
|
394
|
+
});
|
|
395
|
+
await server.start();
|
|
396
|
+
const client = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
397
|
+
await new Promise(resolve => {
|
|
398
|
+
client.on('open', () => resolve());
|
|
399
|
+
});
|
|
400
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
401
|
+
client.send(JSON.stringify({
|
|
402
|
+
type: 'diagnostics_response',
|
|
403
|
+
diagnostics: [
|
|
404
|
+
{
|
|
405
|
+
filePath: '/test.ts',
|
|
406
|
+
line: 1,
|
|
407
|
+
character: 1,
|
|
408
|
+
message: 'Error',
|
|
409
|
+
severity: 'error',
|
|
410
|
+
},
|
|
411
|
+
],
|
|
412
|
+
}));
|
|
413
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
414
|
+
t.is(receivedDiagnostics.length, 1);
|
|
415
|
+
client.close();
|
|
416
|
+
await server.stop();
|
|
417
|
+
});
|
|
418
|
+
test('VSCodeServer handles multiple clients', async (t) => {
|
|
419
|
+
const port = getNextPort();
|
|
420
|
+
const server = new VSCodeServer(port);
|
|
421
|
+
await server.start();
|
|
422
|
+
const client1 = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
423
|
+
const client2 = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
424
|
+
await Promise.all([
|
|
425
|
+
new Promise(resolve => client1.on('open', () => resolve())),
|
|
426
|
+
new Promise(resolve => client2.on('open', () => resolve())),
|
|
427
|
+
]);
|
|
428
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
429
|
+
t.is(server.getConnectionCount(), 2);
|
|
430
|
+
client1.close();
|
|
431
|
+
client2.close();
|
|
432
|
+
await server.stop();
|
|
433
|
+
});
|
|
434
|
+
test('VSCodeServer broadcasts to all clients', async (t) => {
|
|
435
|
+
const port = getNextPort();
|
|
436
|
+
const server = new VSCodeServer(port);
|
|
437
|
+
await server.start();
|
|
438
|
+
const client1 = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
439
|
+
const client2 = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
440
|
+
// Wait for both connections and their ack messages
|
|
441
|
+
await Promise.all([
|
|
442
|
+
new Promise(resolve => client1.on('message', () => resolve())),
|
|
443
|
+
new Promise(resolve => client2.on('message', () => resolve())),
|
|
444
|
+
]);
|
|
445
|
+
let client1Received = false;
|
|
446
|
+
let client2Received = false;
|
|
447
|
+
client1.on('message', (data) => {
|
|
448
|
+
const msg = JSON.parse(data.toString());
|
|
449
|
+
if (msg.type === 'status') {
|
|
450
|
+
client1Received = true;
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
client2.on('message', (data) => {
|
|
454
|
+
const msg = JSON.parse(data.toString());
|
|
455
|
+
if (msg.type === 'status') {
|
|
456
|
+
client2Received = true;
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
server.sendStatus('model', 'provider');
|
|
460
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
461
|
+
t.true(client1Received);
|
|
462
|
+
t.true(client2Received);
|
|
463
|
+
client1.close();
|
|
464
|
+
client2.close();
|
|
465
|
+
await server.stop();
|
|
466
|
+
});
|
|
467
|
+
// ============================================================================
|
|
468
|
+
// Tests for singleton functions
|
|
469
|
+
// ============================================================================
|
|
470
|
+
test('getVSCodeServer returns singleton instance', t => {
|
|
471
|
+
const server1 = getVSCodeServer();
|
|
472
|
+
const server2 = getVSCodeServer();
|
|
473
|
+
t.is(server1, server2);
|
|
474
|
+
});
|
|
475
|
+
test('isVSCodeConnected returns false when no server', t => {
|
|
476
|
+
// Note: This test may be affected by other tests that create the singleton
|
|
477
|
+
// In isolation, isVSCodeConnected should return false if server has no connections
|
|
478
|
+
const result = isVSCodeConnected();
|
|
479
|
+
t.is(typeof result, 'boolean');
|
|
480
|
+
});
|
|
481
|
+
test('sendFileChangeToVSCode returns null when no connections', t => {
|
|
482
|
+
// When there are no connections, should return null
|
|
483
|
+
const result = sendFileChangeToVSCode('/test.ts', 'original', 'new', 'test_tool', {});
|
|
484
|
+
// May return null or string depending on singleton state from other tests
|
|
485
|
+
t.true(result === null || typeof result === 'string');
|
|
486
|
+
});
|
|
487
|
+
//# sourceMappingURL=vscode-server.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode-server.spec.js","sourceRoot":"","sources":["../../source/vscode/vscode-server.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-step.d.ts","sourceRoot":"","sources":["../../../source/wizard/steps/mcp-step.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-step.d.ts","sourceRoot":"","sources":["../../../source/wizard/steps/mcp-step.tsx"],"names":[],"mappings":"AAKA,OAAO,EAGN,KAAK,eAAe,EACpB,MAAM,4BAA4B,CAAC;AAIpC,UAAU,YAAY;IACrB,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,IAAI,CAAC;IAClE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAClD;AAeD,wBAAgB,OAAO,CAAC,EACvB,UAAU,EACV,MAAM,EACN,eAAoB,GACpB,EAAE,YAAY,kDAikBd"}
|