@polka-codes/cli 0.10.23 → 0.10.25
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/dist/bin.cjs +143854 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9201 -9195
- package/dist/program.d.ts +3 -0
- package/dist/program.d.ts.map +1 -0
- package/package.json +6 -7
- package/cli.mjs +0 -2
- package/dist/ApiProviderConfig.js +0 -57
- package/dist/ApiProviderConfig.js.map +0 -1
- package/dist/ApiProviderConfig.test.js +0 -278
- package/dist/ApiProviderConfig.test.js.map +0 -1
- package/dist/agent/advanced-discovery.js +0 -604
- package/dist/agent/advanced-discovery.js.map +0 -1
- package/dist/agent/config.js +0 -139
- package/dist/agent/config.js.map +0 -1
- package/dist/agent/config.test.js +0 -140
- package/dist/agent/config.test.js.map +0 -1
- package/dist/agent/constants.js +0 -172
- package/dist/agent/constants.js.map +0 -1
- package/dist/agent/constants.test.js +0 -132
- package/dist/agent/constants.test.js.map +0 -1
- package/dist/agent/debug-logger.js +0 -281
- package/dist/agent/debug-logger.js.map +0 -1
- package/dist/agent/debug-logger.test.js +0 -294
- package/dist/agent/debug-logger.test.js.map +0 -1
- package/dist/agent/error-handling.js +0 -114
- package/dist/agent/error-handling.js.map +0 -1
- package/dist/agent/error-handling.test.js +0 -191
- package/dist/agent/error-handling.test.js.map +0 -1
- package/dist/agent/errors.js +0 -301
- package/dist/agent/errors.js.map +0 -1
- package/dist/agent/executor.js +0 -206
- package/dist/agent/executor.js.map +0 -1
- package/dist/agent/executor.test.js +0 -228
- package/dist/agent/executor.test.js.map +0 -1
- package/dist/agent/goal-decomposer.js +0 -281
- package/dist/agent/goal-decomposer.js.map +0 -1
- package/dist/agent/goal-decomposer.test.js +0 -225
- package/dist/agent/goal-decomposer.test.js.map +0 -1
- package/dist/agent/health-monitor.js +0 -89
- package/dist/agent/health-monitor.js.map +0 -1
- package/dist/agent/improvement-loop.js +0 -177
- package/dist/agent/improvement-loop.js.map +0 -1
- package/dist/agent/index.js +0 -38
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/metrics.js +0 -158
- package/dist/agent/metrics.js.map +0 -1
- package/dist/agent/metrics.test.js +0 -311
- package/dist/agent/metrics.test.js.map +0 -1
- package/dist/agent/orchestrator.js +0 -438
- package/dist/agent/orchestrator.js.map +0 -1
- package/dist/agent/planner.js +0 -199
- package/dist/agent/planner.js.map +0 -1
- package/dist/agent/planner.test.js +0 -135
- package/dist/agent/planner.test.js.map +0 -1
- package/dist/agent/progress.js +0 -298
- package/dist/agent/progress.js.map +0 -1
- package/dist/agent/progress.test.js +0 -255
- package/dist/agent/progress.test.js.map +0 -1
- package/dist/agent/resource-monitor.js +0 -114
- package/dist/agent/resource-monitor.js.map +0 -1
- package/dist/agent/safety/approval.js +0 -178
- package/dist/agent/safety/approval.js.map +0 -1
- package/dist/agent/safety/approval.test.js +0 -142
- package/dist/agent/safety/approval.test.js.map +0 -1
- package/dist/agent/safety/checks.js +0 -152
- package/dist/agent/safety/checks.js.map +0 -1
- package/dist/agent/safety/checks.test.js +0 -89
- package/dist/agent/safety/checks.test.js.map +0 -1
- package/dist/agent/safety/interrupt.js +0 -92
- package/dist/agent/safety/interrupt.js.map +0 -1
- package/dist/agent/safety/interrupt.test.js +0 -53
- package/dist/agent/safety/interrupt.test.js.map +0 -1
- package/dist/agent/session.js +0 -117
- package/dist/agent/session.js.map +0 -1
- package/dist/agent/session.test.js +0 -213
- package/dist/agent/session.test.js.map +0 -1
- package/dist/agent/state-manager.js +0 -287
- package/dist/agent/state-manager.js.map +0 -1
- package/dist/agent/task-discovery.js +0 -433
- package/dist/agent/task-discovery.js.map +0 -1
- package/dist/agent/task-discovery.test.js +0 -40
- package/dist/agent/task-discovery.test.js.map +0 -1
- package/dist/agent/task-history.js +0 -128
- package/dist/agent/task-history.js.map +0 -1
- package/dist/agent/task-prioritizer.js +0 -286
- package/dist/agent/task-prioritizer.js.map +0 -1
- package/dist/agent/test-fixtures.js +0 -112
- package/dist/agent/test-fixtures.js.map +0 -1
- package/dist/agent/types.js +0 -15
- package/dist/agent/types.js.map +0 -1
- package/dist/agent/workflow-adapter.js +0 -219
- package/dist/agent/workflow-adapter.js.map +0 -1
- package/dist/agent/workflow-adapter.test.js +0 -11
- package/dist/agent/workflow-adapter.test.js.map +0 -1
- package/dist/agent/working-dir-discovery.js +0 -54
- package/dist/agent/working-dir-discovery.js.map +0 -1
- package/dist/agent/working-space.js +0 -484
- package/dist/agent/working-space.js.map +0 -1
- package/dist/agent/working-space.test.js +0 -436
- package/dist/agent/working-space.test.js.map +0 -1
- package/dist/api.js +0 -279
- package/dist/api.js.map +0 -1
- package/dist/builtin-commands.js +0 -20
- package/dist/builtin-commands.js.map +0 -1
- package/dist/commandSummarizer.js +0 -96
- package/dist/commandSummarizer.js.map +0 -1
- package/dist/commands/__tests__/command-detection.integration.test.js +0 -238
- package/dist/commands/__tests__/command-detection.integration.test.js.map +0 -1
- package/dist/commands/__tests__/script-generator.integration.test.js +0 -271
- package/dist/commands/__tests__/script-generator.integration.test.js.map +0 -1
- package/dist/commands/agent.js +0 -218
- package/dist/commands/agent.js.map +0 -1
- package/dist/commands/code.js +0 -102
- package/dist/commands/code.js.map +0 -1
- package/dist/commands/command.constants.js +0 -13
- package/dist/commands/command.constants.js.map +0 -1
- package/dist/commands/commit.js +0 -17
- package/dist/commands/commit.js.map +0 -1
- package/dist/commands/fix.js +0 -17
- package/dist/commands/fix.js.map +0 -1
- package/dist/commands/init.js +0 -501
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp-server.js +0 -122
- package/dist/commands/mcp-server.js.map +0 -1
- package/dist/commands/memory.js +0 -410
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/memory.test.js +0 -453
- package/dist/commands/memory.test.js.map +0 -1
- package/dist/commands/meta.js +0 -142
- package/dist/commands/meta.js.map +0 -1
- package/dist/commands/plan.js +0 -39
- package/dist/commands/plan.js.map +0 -1
- package/dist/commands/pr.js +0 -14
- package/dist/commands/pr.js.map +0 -1
- package/dist/commands/review-json.test.js +0 -33
- package/dist/commands/review-json.test.js.map +0 -1
- package/dist/commands/review.js +0 -137
- package/dist/commands/review.js.map +0 -1
- package/dist/commands/review.usage.test.js +0 -41
- package/dist/commands/review.usage.test.js.map +0 -1
- package/dist/commands/run.js +0 -107
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/skills.js +0 -175
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/task.js +0 -34
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/workflow.js +0 -117
- package/dist/commands/workflow.js.map +0 -1
- package/dist/configPrompt.js +0 -39
- package/dist/configPrompt.js.map +0 -1
- package/dist/env.js +0 -22
- package/dist/env.js.map +0 -1
- package/dist/errors.js +0 -132
- package/dist/errors.js.map +0 -1
- package/dist/errors.test.js +0 -21
- package/dist/errors.test.js.map +0 -1
- package/dist/file-attachments.js +0 -77
- package/dist/file-attachments.js.map +0 -1
- package/dist/file-attachments.test.js +0 -214
- package/dist/file-attachments.test.js.map +0 -1
- package/dist/getModel.js +0 -229
- package/dist/getModel.js.map +0 -1
- package/dist/getModel.test.js +0 -67
- package/dist/getModel.test.js.map +0 -1
- package/dist/getProviderOptions.js +0 -58
- package/dist/getProviderOptions.js.map +0 -1
- package/dist/git-operations.js +0 -363
- package/dist/git-operations.js.map +0 -1
- package/dist/git-operations.test.js +0 -81
- package/dist/git-operations.test.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.js +0 -41
- package/dist/logger.js.map +0 -1
- package/dist/mcp/client.js +0 -11
- package/dist/mcp/client.js.map +0 -1
- package/dist/mcp/error-scenarios.test.js +0 -206
- package/dist/mcp/error-scenarios.test.js.map +0 -1
- package/dist/mcp/errors.js +0 -63
- package/dist/mcp/errors.js.map +0 -1
- package/dist/mcp/index.js +0 -9
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/manager.js +0 -231
- package/dist/mcp/manager.js.map +0 -1
- package/dist/mcp/manager.test.js +0 -40
- package/dist/mcp/manager.test.js.map +0 -1
- package/dist/mcp/sdk-client.js +0 -166
- package/dist/mcp/sdk-client.js.map +0 -1
- package/dist/mcp/shared-types.js +0 -3
- package/dist/mcp/shared-types.js.map +0 -1
- package/dist/mcp/tools-integration.test.js +0 -198
- package/dist/mcp/tools-integration.test.js.map +0 -1
- package/dist/mcp/tools.js +0 -60
- package/dist/mcp/tools.js.map +0 -1
- package/dist/mcp/transport.js +0 -257
- package/dist/mcp/transport.js.map +0 -1
- package/dist/mcp/types.js +0 -3
- package/dist/mcp/types.js.map +0 -1
- package/dist/mcp-server/index.js +0 -5
- package/dist/mcp-server/index.js.map +0 -1
- package/dist/mcp-server/plan-formatting.test.js +0 -74
- package/dist/mcp-server/plan-formatting.test.js.map +0 -1
- package/dist/mcp-server/sdk-server.js +0 -102
- package/dist/mcp-server/sdk-server.js.map +0 -1
- package/dist/mcp-server/sdk-server.test.js +0 -363
- package/dist/mcp-server/sdk-server.test.js.map +0 -1
- package/dist/mcp-server/tools.js +0 -785
- package/dist/mcp-server/tools.js.map +0 -1
- package/dist/mcp-server/types.js +0 -3
- package/dist/mcp-server/types.js.map +0 -1
- package/dist/options.js +0 -85
- package/dist/options.js.map +0 -1
- package/dist/options.test.js +0 -177
- package/dist/options.test.js.map +0 -1
- package/dist/prices.js +0 -61
- package/dist/prices.js.map +0 -1
- package/dist/prices.test.js +0 -148
- package/dist/prices.test.js.map +0 -1
- package/dist/runWorkflow.js +0 -313
- package/dist/runWorkflow.js.map +0 -1
- package/dist/script/__tests__/execution.integration.test.js +0 -274
- package/dist/script/__tests__/execution.integration.test.js.map +0 -1
- package/dist/script/__tests__/runner.test.js +0 -176
- package/dist/script/__tests__/runner.test.js.map +0 -1
- package/dist/script/__tests__/validator.test.js +0 -180
- package/dist/script/__tests__/validator.test.js.map +0 -1
- package/dist/script/executor.js +0 -127
- package/dist/script/executor.js.map +0 -1
- package/dist/script/index.js +0 -4
- package/dist/script/index.js.map +0 -1
- package/dist/script/runner.js +0 -258
- package/dist/script/runner.js.map +0 -1
- package/dist/skillIntegration.js +0 -46
- package/dist/skillIntegration.js.map +0 -1
- package/dist/skillIntegration.test.js +0 -128
- package/dist/skillIntegration.test.js.map +0 -1
- package/dist/test/utils.js +0 -200
- package/dist/test/utils.js.map +0 -1
- package/dist/test/workflow-fixtures.js +0 -120
- package/dist/test/workflow-fixtures.js.map +0 -1
- package/dist/tool-implementations.js +0 -521
- package/dist/tool-implementations.js.map +0 -1
- package/dist/tool-implementations.skill-tools.test.js +0 -106
- package/dist/tool-implementations.skill-tools.test.js.map +0 -1
- package/dist/tools/getTodoItem.js +0 -33
- package/dist/tools/getTodoItem.js.map +0 -1
- package/dist/tools/gitDiff.js +0 -108
- package/dist/tools/gitDiff.js.map +0 -1
- package/dist/tools/index.js +0 -8
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/listMemoryTopics.js +0 -24
- package/dist/tools/listMemoryTopics.js.map +0 -1
- package/dist/tools/listTodoItems.js +0 -35
- package/dist/tools/listTodoItems.js.map +0 -1
- package/dist/tools/listTodoItems.test.js +0 -89
- package/dist/tools/listTodoItems.test.js.map +0 -1
- package/dist/tools/readMemory.js +0 -33
- package/dist/tools/readMemory.js.map +0 -1
- package/dist/tools/updateMemory.js +0 -62
- package/dist/tools/updateMemory.js.map +0 -1
- package/dist/tools/updateMemory.test.js +0 -109
- package/dist/tools/updateMemory.test.js.map +0 -1
- package/dist/tools/updateTodoItem.js +0 -31
- package/dist/tools/updateTodoItem.js.map +0 -1
- package/dist/tools/utils/diffLineNumbers.js +0 -178
- package/dist/tools/utils/diffLineNumbers.js.map +0 -1
- package/dist/utils/cacheControl.js +0 -59
- package/dist/utils/cacheControl.js.map +0 -1
- package/dist/utils/cacheControl.test.js +0 -128
- package/dist/utils/cacheControl.test.js.map +0 -1
- package/dist/utils/command.js +0 -50
- package/dist/utils/command.js.map +0 -1
- package/dist/utils/shell.js +0 -56
- package/dist/utils/shell.js.map +0 -1
- package/dist/utils/userInput.js +0 -47
- package/dist/utils/userInput.js.map +0 -1
- package/dist/workflow-tools.js +0 -21
- package/dist/workflow-tools.js.map +0 -1
- package/dist/workflows/agent-builder.js +0 -90
- package/dist/workflows/agent-builder.js.map +0 -1
- package/dist/workflows/agent-builder.test.js +0 -115
- package/dist/workflows/agent-builder.test.js.map +0 -1
- package/dist/workflows/code.workflow.js +0 -145
- package/dist/workflows/code.workflow.js.map +0 -1
- package/dist/workflows/commit.workflow.js +0 -111
- package/dist/workflows/commit.workflow.js.map +0 -1
- package/dist/workflows/commit.workflow.test.js +0 -141
- package/dist/workflows/commit.workflow.test.js.map +0 -1
- package/dist/workflows/fix.workflow.js +0 -172
- package/dist/workflows/fix.workflow.js.map +0 -1
- package/dist/workflows/fix.workflow.test.js +0 -137
- package/dist/workflows/fix.workflow.test.js.map +0 -1
- package/dist/workflows/git-file-tools.js +0 -408
- package/dist/workflows/git-file-tools.js.map +0 -1
- package/dist/workflows/index.js +0 -12
- package/dist/workflows/index.js.map +0 -1
- package/dist/workflows/init-interactive.workflow.js +0 -198
- package/dist/workflows/init-interactive.workflow.js.map +0 -1
- package/dist/workflows/init.workflow.js +0 -41
- package/dist/workflows/init.workflow.js.map +0 -1
- package/dist/workflows/meta.workflow.js +0 -107
- package/dist/workflows/meta.workflow.js.map +0 -1
- package/dist/workflows/plan.workflow.js +0 -275
- package/dist/workflows/plan.workflow.js.map +0 -1
- package/dist/workflows/plan.workflow.test.js +0 -419
- package/dist/workflows/plan.workflow.test.js.map +0 -1
- package/dist/workflows/pr.workflow.js +0 -54
- package/dist/workflows/pr.workflow.js.map +0 -1
- package/dist/workflows/pr.workflow.test.js +0 -98
- package/dist/workflows/pr.workflow.test.js.map +0 -1
- package/dist/workflows/prompts/coder.js +0 -85
- package/dist/workflows/prompts/coder.js.map +0 -1
- package/dist/workflows/prompts/commit.js +0 -16
- package/dist/workflows/prompts/commit.js.map +0 -1
- package/dist/workflows/prompts/fix.js +0 -44
- package/dist/workflows/prompts/fix.js.map +0 -1
- package/dist/workflows/prompts/index.js +0 -10
- package/dist/workflows/prompts/index.js.map +0 -1
- package/dist/workflows/prompts/init.js +0 -48
- package/dist/workflows/prompts/init.js.map +0 -1
- package/dist/workflows/prompts/meta.js +0 -17
- package/dist/workflows/prompts/meta.js.map +0 -1
- package/dist/workflows/prompts/plan.js +0 -212
- package/dist/workflows/prompts/plan.js.map +0 -1
- package/dist/workflows/prompts/pr.js +0 -15
- package/dist/workflows/prompts/pr.js.map +0 -1
- package/dist/workflows/prompts/review.js +0 -145
- package/dist/workflows/prompts/review.js.map +0 -1
- package/dist/workflows/prompts/shared.js +0 -93
- package/dist/workflows/prompts/shared.js.map +0 -1
- package/dist/workflows/review.workflow.js +0 -357
- package/dist/workflows/review.workflow.js.map +0 -1
- package/dist/workflows/task.workflow.js +0 -47
- package/dist/workflows/task.workflow.js.map +0 -1
- package/dist/workflows/testing/helper.js +0 -41
- package/dist/workflows/testing/helper.js.map +0 -1
- package/dist/workflows/workflow.utils.js +0 -351
- package/dist/workflows/workflow.utils.js.map +0 -1
- package/dist/workflows/workflow.utils.test.js +0 -45
- package/dist/workflows/workflow.utils.test.js.map +0 -1
package/dist/mcp/transport.js
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
// generated by polka.codes
|
|
2
|
-
import { spawn } from 'node:child_process';
|
|
3
|
-
import { EventEmitter } from 'node:events';
|
|
4
|
-
import { StringDecoder } from 'node:string_decoder';
|
|
5
|
-
/**
|
|
6
|
-
* Transport layer for communicating with MCP servers
|
|
7
|
-
*/
|
|
8
|
-
export class StdioTransport extends EventEmitter {
|
|
9
|
-
config;
|
|
10
|
-
process = null;
|
|
11
|
-
messageId = 0;
|
|
12
|
-
pendingRequests = new Map();
|
|
13
|
-
buffer = '';
|
|
14
|
-
decoder = new StringDecoder('utf8'); // Properly handle multi-byte characters across chunk boundaries
|
|
15
|
-
// Store event handler references for cleanup
|
|
16
|
-
stdoutDataHandler = null;
|
|
17
|
-
exitHandler = null;
|
|
18
|
-
errorHandler = null;
|
|
19
|
-
constructor(config) {
|
|
20
|
-
super();
|
|
21
|
-
this.config = config;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Start the MCP server process
|
|
25
|
-
*/
|
|
26
|
-
async start() {
|
|
27
|
-
return new Promise((resolve, reject) => {
|
|
28
|
-
try {
|
|
29
|
-
this.process = spawn(this.config.command, this.config.args || [], {
|
|
30
|
-
env: { ...process.env, ...this.config.env },
|
|
31
|
-
stdio: ['pipe', 'pipe', 'inherit'],
|
|
32
|
-
});
|
|
33
|
-
const proc = this.process;
|
|
34
|
-
if (!proc.stdout) {
|
|
35
|
-
reject(new Error('Failed to create stdout for MCP process'));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (!proc.stdin) {
|
|
39
|
-
reject(new Error('Failed to create stdin for MCP process'));
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
// Store handler references for cleanup
|
|
43
|
-
this.stdoutDataHandler = (data) => {
|
|
44
|
-
this.handleData(this.decoder.write(data));
|
|
45
|
-
};
|
|
46
|
-
this.exitHandler = (code, signal) => {
|
|
47
|
-
this.emit('close', { code, signal });
|
|
48
|
-
// Reject all pending requests
|
|
49
|
-
for (const [id, { reject }] of this.pendingRequests) {
|
|
50
|
-
reject(new Error(`MCP process exited with code ${code} and signal ${signal}`));
|
|
51
|
-
this.pendingRequests.delete(id);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
this.errorHandler = (error) => {
|
|
55
|
-
this.emit('error', error);
|
|
56
|
-
reject(error);
|
|
57
|
-
};
|
|
58
|
-
// Handle stdout from MCP server
|
|
59
|
-
proc.stdout.on('data', this.stdoutDataHandler);
|
|
60
|
-
// Handle process exit
|
|
61
|
-
proc.on('exit', this.exitHandler);
|
|
62
|
-
// Handle process errors
|
|
63
|
-
proc.on('error', this.errorHandler);
|
|
64
|
-
// Wait a bit for the process to start
|
|
65
|
-
setTimeout(() => resolve(), 100);
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
reject(error);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Stop the MCP server process and clean up event listeners
|
|
74
|
-
*/
|
|
75
|
-
async stop() {
|
|
76
|
-
if (this.process) {
|
|
77
|
-
// Remove event listeners to prevent memory leaks
|
|
78
|
-
if (this.stdoutDataHandler && this.process.stdout) {
|
|
79
|
-
this.process.stdout.off('data', this.stdoutDataHandler);
|
|
80
|
-
}
|
|
81
|
-
if (this.exitHandler) {
|
|
82
|
-
this.process.off('exit', this.exitHandler);
|
|
83
|
-
}
|
|
84
|
-
if (this.errorHandler) {
|
|
85
|
-
this.process.off('error', this.errorHandler);
|
|
86
|
-
}
|
|
87
|
-
// Clear handler references
|
|
88
|
-
this.stdoutDataHandler = null;
|
|
89
|
-
this.exitHandler = null;
|
|
90
|
-
this.errorHandler = null;
|
|
91
|
-
// Kill the process
|
|
92
|
-
this.process.kill('SIGTERM');
|
|
93
|
-
this.process = null;
|
|
94
|
-
}
|
|
95
|
-
// Clear all pending requests
|
|
96
|
-
for (const [id, { reject }] of this.pendingRequests) {
|
|
97
|
-
reject(new Error('MCP transport stopped'));
|
|
98
|
-
this.pendingRequests.delete(id);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Send a JSON-RPC request and wait for response
|
|
103
|
-
*/
|
|
104
|
-
async sendRequest(method, params) {
|
|
105
|
-
return new Promise((resolve, reject) => {
|
|
106
|
-
const id = ++this.messageId;
|
|
107
|
-
// Store the promise callbacks
|
|
108
|
-
this.pendingRequests.set(id, { resolve, reject });
|
|
109
|
-
// Send the request
|
|
110
|
-
const message = {
|
|
111
|
-
jsonrpc: '2.0',
|
|
112
|
-
id,
|
|
113
|
-
method,
|
|
114
|
-
params,
|
|
115
|
-
};
|
|
116
|
-
this.sendMessage(message);
|
|
117
|
-
// Set timeout (default 30 seconds) - store timeout ID for cleanup
|
|
118
|
-
const timeoutId = setTimeout(() => {
|
|
119
|
-
if (this.pendingRequests.has(id)) {
|
|
120
|
-
this.pendingRequests.delete(id);
|
|
121
|
-
reject(new Error(`Request timeout: ${method}`));
|
|
122
|
-
}
|
|
123
|
-
}, 30000);
|
|
124
|
-
// Clear timeout when request completes (store timeout with pending request)
|
|
125
|
-
const pending = this.pendingRequests.get(id);
|
|
126
|
-
if (pending) {
|
|
127
|
-
// Augment the pending request with timeout cleanup
|
|
128
|
-
this.pendingRequests.set(id, {
|
|
129
|
-
resolve: (value) => {
|
|
130
|
-
clearTimeout(timeoutId);
|
|
131
|
-
resolve(value);
|
|
132
|
-
},
|
|
133
|
-
reject: (error) => {
|
|
134
|
-
clearTimeout(timeoutId);
|
|
135
|
-
reject(error);
|
|
136
|
-
},
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Send a JSON-RPC notification (no response expected)
|
|
143
|
-
*/
|
|
144
|
-
sendNotification(method, params) {
|
|
145
|
-
const message = {
|
|
146
|
-
jsonrpc: '2.0',
|
|
147
|
-
method,
|
|
148
|
-
params,
|
|
149
|
-
};
|
|
150
|
-
this.sendMessage(message);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Send a raw message to the MCP server
|
|
154
|
-
*/
|
|
155
|
-
sendMessage(message) {
|
|
156
|
-
if (!this.process?.stdin) {
|
|
157
|
-
throw new Error('MCP process not running or stdin not available');
|
|
158
|
-
}
|
|
159
|
-
const json = JSON.stringify(message);
|
|
160
|
-
this.process.stdin.write(`${json}\n`);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Handle incoming data from the MCP server
|
|
164
|
-
* Supports both Content-Length header framing and newline-delimited messages
|
|
165
|
-
*/
|
|
166
|
-
handleData(data) {
|
|
167
|
-
// Prevent memory exhaustion from malicious or malfunctioning servers
|
|
168
|
-
const MAX_BUFFER_SIZE = 10 * 1024 * 1024; // 10MB
|
|
169
|
-
if (this.buffer.length + data.length > MAX_BUFFER_SIZE) {
|
|
170
|
-
throw new Error(`Buffer exceeded maximum size of ${MAX_BUFFER_SIZE} bytes. Possible malicious server or malformed data.`);
|
|
171
|
-
}
|
|
172
|
-
this.buffer += data;
|
|
173
|
-
// Try to parse messages using Content-Length framing first
|
|
174
|
-
while (this.buffer.length > 0) {
|
|
175
|
-
// Check for Content-Length header format (not anchored to start for robustness)
|
|
176
|
-
const contentLengthMatch = this.buffer.match(/Content-Length:\s*(\d+)\r?\n\r?\n/i);
|
|
177
|
-
if (contentLengthMatch) {
|
|
178
|
-
const contentLength = Number.parseInt(contentLengthMatch[1], 10);
|
|
179
|
-
const matchStart = contentLengthMatch.index ?? 0;
|
|
180
|
-
const headerEnd = matchStart + contentLengthMatch[0].length;
|
|
181
|
-
const totalLength = headerEnd + contentLength;
|
|
182
|
-
// If we have enough data, extract the message
|
|
183
|
-
if (this.buffer.length >= totalLength) {
|
|
184
|
-
// Skip any data before the header
|
|
185
|
-
if (matchStart > 0) {
|
|
186
|
-
this.buffer = this.buffer.slice(matchStart);
|
|
187
|
-
}
|
|
188
|
-
const messageData = this.buffer.slice(contentLengthMatch[0].length, contentLengthMatch[0].length + contentLength);
|
|
189
|
-
this.buffer = this.buffer.slice(totalLength - matchStart);
|
|
190
|
-
try {
|
|
191
|
-
const message = JSON.parse(messageData);
|
|
192
|
-
this.processMessage(message);
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
// Log parse errors instead of emitting to avoid unhandled error events
|
|
196
|
-
console.warn(`[MCP Transport] Failed to parse message: ${messageData.slice(0, 100)}...`);
|
|
197
|
-
console.debug(`[MCP Transport] Parse error:`, error);
|
|
198
|
-
}
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
// Need more data
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
// Fall back to newline-delimited parsing (for compatibility)
|
|
207
|
-
const newlineIndex = this.buffer.indexOf('\n');
|
|
208
|
-
if (newlineIndex !== -1) {
|
|
209
|
-
const line = this.buffer.slice(0, newlineIndex);
|
|
210
|
-
this.buffer = this.buffer.slice(newlineIndex + 1);
|
|
211
|
-
if (!line.trim())
|
|
212
|
-
continue;
|
|
213
|
-
try {
|
|
214
|
-
const message = JSON.parse(line);
|
|
215
|
-
this.processMessage(message);
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
// Log parse errors instead of emitting to avoid unhandled error events
|
|
219
|
-
console.warn(`[MCP Transport] Failed to parse message: ${line.slice(0, 100)}...`);
|
|
220
|
-
console.debug(`[MCP Transport] Parse error:`, error);
|
|
221
|
-
}
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
// No complete message found
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Process a parsed JSON-RPC message
|
|
230
|
-
*/
|
|
231
|
-
processMessage(message) {
|
|
232
|
-
// Handle response to a request
|
|
233
|
-
if (message.id !== undefined) {
|
|
234
|
-
const pending = this.pendingRequests.get(message.id);
|
|
235
|
-
if (pending) {
|
|
236
|
-
this.pendingRequests.delete(message.id);
|
|
237
|
-
if (message.error) {
|
|
238
|
-
pending.reject(new Error(`${message.error.message} (${message.error.code})`));
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
pending.resolve(message.result);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
// Handle notification
|
|
247
|
-
this.emit('notification', message);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Check if the process is running
|
|
252
|
-
*/
|
|
253
|
-
isRunning() {
|
|
254
|
-
return this.process !== null && this.process.exitCode === null;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
//# sourceMappingURL=transport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/mcp/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/types.js
DELETED
package/dist/mcp/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA,2BAA2B"}
|
package/dist/mcp-server/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp-server/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// Test for plan tool formatting (MCP server)
|
|
2
|
-
// generated by polka.codes
|
|
3
|
-
import { describe, expect, test } from 'bun:test';
|
|
4
|
-
describe('MCP Plan Tool Formatting', () => {
|
|
5
|
-
test('should format plan result with file paths only', () => {
|
|
6
|
-
// Simulate the result from planWorkflow
|
|
7
|
-
const mockPlanResult = {
|
|
8
|
-
plan: 'Implement feature X\n1. Step 1\n2. Step 2',
|
|
9
|
-
files: [
|
|
10
|
-
{ path: 'src/feature.ts', content: 'very long content...' },
|
|
11
|
-
{ path: 'src/test.ts', content: 'more content...' },
|
|
12
|
-
{ path: 'src/types.ts', content: 'even more content...' },
|
|
13
|
-
],
|
|
14
|
-
};
|
|
15
|
-
// Simulate the MCP formatting logic
|
|
16
|
-
let output = '';
|
|
17
|
-
if (mockPlanResult.plan) {
|
|
18
|
-
output += mockPlanResult.plan;
|
|
19
|
-
}
|
|
20
|
-
if (mockPlanResult.files && mockPlanResult.files.length > 0) {
|
|
21
|
-
output += '\n\nFiles to modify:\n';
|
|
22
|
-
// Extract only the file paths, not the content
|
|
23
|
-
output += mockPlanResult.files.map((f) => ` - ${f.path}`).join('\n');
|
|
24
|
-
}
|
|
25
|
-
const expected = `Implement feature X
|
|
26
|
-
1. Step 1
|
|
27
|
-
2. Step 2
|
|
28
|
-
|
|
29
|
-
Files to modify:
|
|
30
|
-
- src/feature.ts
|
|
31
|
-
- src/test.ts
|
|
32
|
-
- src/types.ts`;
|
|
33
|
-
expect(output).toBe(expected);
|
|
34
|
-
expect(output).not.toContain('content');
|
|
35
|
-
expect(output).not.toContain('very long');
|
|
36
|
-
});
|
|
37
|
-
test('should handle plan result with no files', () => {
|
|
38
|
-
const mockPlanResult = {
|
|
39
|
-
plan: 'Simple plan with no files',
|
|
40
|
-
};
|
|
41
|
-
let output = '';
|
|
42
|
-
if (mockPlanResult.plan) {
|
|
43
|
-
output += mockPlanResult.plan;
|
|
44
|
-
}
|
|
45
|
-
expect(output).toBe('Simple plan with no files');
|
|
46
|
-
});
|
|
47
|
-
test('should handle plan result with question', () => {
|
|
48
|
-
const mockPlanResult = {
|
|
49
|
-
question: {
|
|
50
|
-
question: 'Should we use library A or B?',
|
|
51
|
-
defaultAnswer: 'Library A',
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
// Simulate the MCP formatting logic for questions
|
|
55
|
-
if (mockPlanResult.question) {
|
|
56
|
-
const output = JSON.stringify({ question: mockPlanResult.question }, null, 2);
|
|
57
|
-
const parsed = JSON.parse(output);
|
|
58
|
-
expect(parsed).toHaveProperty('question');
|
|
59
|
-
expect(parsed.question.question).toBe('Should we use library A or B?');
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
test('should handle plan result with reason (no plan needed)', () => {
|
|
63
|
-
const mockPlanResult = {
|
|
64
|
-
reason: 'This is already implemented',
|
|
65
|
-
};
|
|
66
|
-
// Simulate the MCP formatting logic
|
|
67
|
-
let output = '';
|
|
68
|
-
if (mockPlanResult.reason) {
|
|
69
|
-
output = `No plan needed: ${mockPlanResult.reason}`;
|
|
70
|
-
}
|
|
71
|
-
expect(output).toBe('No plan needed: This is already implemented');
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
//# sourceMappingURL=plan-formatting.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan-formatting.test.js","sourceRoot":"","sources":["../../src/mcp-server/plan-formatting.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
// generated by polka.codes
|
|
2
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
-
/**
|
|
5
|
-
* Create an MCP server using the official SDK
|
|
6
|
-
*
|
|
7
|
-
* @param tools - Array of tools to register
|
|
8
|
-
* @param logger - Optional logger instance
|
|
9
|
-
* @param defaultProvider - Optional default provider configuration
|
|
10
|
-
* @returns Configured MCP server instance
|
|
11
|
-
*/
|
|
12
|
-
export function createPolkaCodesMcpServer(tools, logger, defaultProvider) {
|
|
13
|
-
// Create server instance with SDK
|
|
14
|
-
const server = new McpServer({
|
|
15
|
-
name: 'polka-codes',
|
|
16
|
-
version: '1.0.0',
|
|
17
|
-
}, {
|
|
18
|
-
capabilities: {
|
|
19
|
-
tools: {},
|
|
20
|
-
resources: {},
|
|
21
|
-
prompts: {},
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
// Create context for tool handlers
|
|
25
|
-
// Use a safe default logger that writes to stderr (not stdout which is used for MCP protocol)
|
|
26
|
-
const defaultLogger = {
|
|
27
|
-
debug: () => { },
|
|
28
|
-
info: (message) => console.error(message),
|
|
29
|
-
warn: (message) => console.error(message),
|
|
30
|
-
error: (message) => console.error(message),
|
|
31
|
-
};
|
|
32
|
-
const context = {
|
|
33
|
-
logger: defaultLogger,
|
|
34
|
-
defaultProvider,
|
|
35
|
-
};
|
|
36
|
-
if (logger) {
|
|
37
|
-
context.logger = logger;
|
|
38
|
-
}
|
|
39
|
-
// Register polka-codes tools
|
|
40
|
-
for (const tool of tools) {
|
|
41
|
-
try {
|
|
42
|
-
server.registerTool(tool.name, {
|
|
43
|
-
description: tool.description,
|
|
44
|
-
inputSchema: tool.inputSchema,
|
|
45
|
-
}, async (args) => {
|
|
46
|
-
try {
|
|
47
|
-
// Call polka-codes tool handler with context
|
|
48
|
-
const result = await tool.handler(args, context);
|
|
49
|
-
// Return result in MCP format
|
|
50
|
-
return {
|
|
51
|
-
content: [
|
|
52
|
-
{
|
|
53
|
-
type: 'text',
|
|
54
|
-
text: typeof result === 'string' ? result : (JSON.stringify(result, null, 2) ?? ''),
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
// Log detailed error locally
|
|
61
|
-
if (logger) {
|
|
62
|
-
logger.error(`Tool '${tool.name}' execution failed: ${error instanceof Error ? error.stack : String(error)}`);
|
|
63
|
-
}
|
|
64
|
-
// Return tool error result (not JSON-RPC error)
|
|
65
|
-
return {
|
|
66
|
-
content: [
|
|
67
|
-
{
|
|
68
|
-
type: 'text',
|
|
69
|
-
text: error instanceof Error ? error.message : String(error),
|
|
70
|
-
},
|
|
71
|
-
],
|
|
72
|
-
isError: true,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
if (logger) {
|
|
77
|
-
logger.debug(`Registered MCP tool: ${tool.name}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
if (logger) {
|
|
82
|
-
logger.error(`Failed to register tool '${tool.name}': ${error instanceof Error ? error.message : String(error)}`);
|
|
83
|
-
}
|
|
84
|
-
throw error;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return server;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Start the MCP server on stdio transport
|
|
91
|
-
*
|
|
92
|
-
* @param server - MCP server instance
|
|
93
|
-
* @param logger - Optional logger instance
|
|
94
|
-
*/
|
|
95
|
-
export async function startStdioServer(server, logger) {
|
|
96
|
-
const transport = new StdioServerTransport();
|
|
97
|
-
await server.connect(transport);
|
|
98
|
-
if (logger) {
|
|
99
|
-
logger.info('MCP server running on stdio using official SDK');
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=sdk-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-server.js","sourceRoot":"","sources":["../../src/mcp-server/sdk-server.ts"],"names":[],"mappings":"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"}
|