@polka-codes/cli 0.10.23 → 0.10.24
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/index.js +1 -1
- package/package.json +3 -3
- 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
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
// generated by polka.codes
|
|
2
|
-
import { afterEach, beforeEach, describe, expect, it } from 'bun:test';
|
|
3
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { loadConfig } from '@polka-codes/cli-shared';
|
|
6
|
-
import { TempDirectoryFixture } from '../../test/utils';
|
|
7
|
-
describe('Script Generator Integration Tests', () => {
|
|
8
|
-
let fixture;
|
|
9
|
-
let testProjectDir;
|
|
10
|
-
let configPath;
|
|
11
|
-
let scriptsDir;
|
|
12
|
-
beforeEach(async () => {
|
|
13
|
-
fixture = new TempDirectoryFixture();
|
|
14
|
-
testProjectDir = await fixture.setup();
|
|
15
|
-
configPath = join(testProjectDir, '.polkacodes.yml');
|
|
16
|
-
scriptsDir = join(testProjectDir, '.polka-scripts');
|
|
17
|
-
// Create test project directory
|
|
18
|
-
mkdirSync(scriptsDir, { recursive: true });
|
|
19
|
-
// Create initial config
|
|
20
|
-
const configContent = `# PolkaCodes configuration
|
|
21
|
-
`;
|
|
22
|
-
writeFileSync(configPath, configContent);
|
|
23
|
-
});
|
|
24
|
-
afterEach(async () => {
|
|
25
|
-
await fixture.teardown();
|
|
26
|
-
});
|
|
27
|
-
describe('Script template creation', () => {
|
|
28
|
-
it('should create a valid script template', () => {
|
|
29
|
-
const scriptName = 'test-script';
|
|
30
|
-
const scriptPath = join(scriptsDir, `${scriptName}.ts`);
|
|
31
|
-
// Create script template
|
|
32
|
-
const template = `// Generated by polka.codes
|
|
33
|
-
import { code, commit } from '@polka-codes/cli'
|
|
34
|
-
|
|
35
|
-
export async function main(args: string[]) {
|
|
36
|
-
console.log('Running script: ${scriptName}')
|
|
37
|
-
console.log('Arguments:', args)
|
|
38
|
-
|
|
39
|
-
// Your automation here
|
|
40
|
-
// await code({ task: 'Add feature', interactive: false })
|
|
41
|
-
// await commit({ all: true, context: 'Feature complete' })
|
|
42
|
-
|
|
43
|
-
console.log('Script completed successfully')
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (import.meta.main) {
|
|
47
|
-
main(process.argv.slice(2))
|
|
48
|
-
}
|
|
49
|
-
`;
|
|
50
|
-
writeFileSync(scriptPath, template);
|
|
51
|
-
expect(existsSync(scriptPath)).toBe(true);
|
|
52
|
-
const content = readFileSync(scriptPath, 'utf-8');
|
|
53
|
-
expect(content).toContain('export async function main');
|
|
54
|
-
expect(content).toContain(scriptName);
|
|
55
|
-
expect(content).toContain("import { code, commit } from '@polka-codes/cli'");
|
|
56
|
-
});
|
|
57
|
-
it('should create script with proper structure', () => {
|
|
58
|
-
const scriptName = 'structured-script';
|
|
59
|
-
const scriptPath = join(scriptsDir, `${scriptName}.ts`);
|
|
60
|
-
const template = `// Generated by polka.codes
|
|
61
|
-
export async function main(args: string[]) {
|
|
62
|
-
return { success: true }
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (import.meta.main) {
|
|
66
|
-
main(process.argv.slice(2))
|
|
67
|
-
}
|
|
68
|
-
`;
|
|
69
|
-
writeFileSync(scriptPath, template);
|
|
70
|
-
const content = readFileSync(scriptPath, 'utf-8');
|
|
71
|
-
expect(content).toContain('// Generated by polka.codes');
|
|
72
|
-
expect(content).toContain('export async function main');
|
|
73
|
-
expect(content).toContain('if (import.meta.main)');
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
describe('Script naming validation', () => {
|
|
77
|
-
it('should reject script names with slashes', () => {
|
|
78
|
-
const invalidNames = ['invalid/name', 'invalid\\name', 'path/to/script', 'path\\to\\script'];
|
|
79
|
-
for (const name of invalidNames) {
|
|
80
|
-
expect(() => {
|
|
81
|
-
// Simulate validation
|
|
82
|
-
if (name.includes('/') || name.includes('\\')) {
|
|
83
|
-
throw new Error('Script name cannot contain slashes');
|
|
84
|
-
}
|
|
85
|
-
}).toThrow('cannot contain slashes');
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
it('should accept valid script names', () => {
|
|
89
|
-
const validNames = ['deploy', 'build-and-deploy', 'test123', 'my_script', 'CamelCase'];
|
|
90
|
-
for (const name of validNames) {
|
|
91
|
-
expect(() => {
|
|
92
|
-
// Simulate validation
|
|
93
|
-
if (name.includes('/') || name.includes('\\')) {
|
|
94
|
-
throw new Error('Invalid name');
|
|
95
|
-
}
|
|
96
|
-
}).not.toThrow();
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
describe('Config update behavior', () => {
|
|
101
|
-
it('should add scripts section if it does not exist', () => {
|
|
102
|
-
// Start with config without scripts section
|
|
103
|
-
writeFileSync(configPath, '# Empty config\n');
|
|
104
|
-
// Simulate adding a script to config
|
|
105
|
-
const currentContent = readFileSync(configPath, 'utf-8');
|
|
106
|
-
const updatedContent = `${currentContent}
|
|
107
|
-
scripts:
|
|
108
|
-
new-script: .polka-scripts/new-script.ts
|
|
109
|
-
`;
|
|
110
|
-
writeFileSync(configPath, updatedContent);
|
|
111
|
-
const configContent = readFileSync(configPath, 'utf-8');
|
|
112
|
-
expect(configContent).toContain('scripts:');
|
|
113
|
-
expect(configContent).toContain('new-script');
|
|
114
|
-
});
|
|
115
|
-
it('should append to existing scripts section', () => {
|
|
116
|
-
// Start with existing scripts
|
|
117
|
-
const initialConfig = `scripts:
|
|
118
|
-
existing-script: .polka-scripts/existing.ts
|
|
119
|
-
`;
|
|
120
|
-
writeFileSync(configPath, initialConfig);
|
|
121
|
-
// Simulate adding another script
|
|
122
|
-
const currentContent = readFileSync(configPath, 'utf-8');
|
|
123
|
-
const updatedContent = `${currentContent}
|
|
124
|
-
new-script: .polka-scripts/new.ts
|
|
125
|
-
`;
|
|
126
|
-
writeFileSync(configPath, updatedContent);
|
|
127
|
-
const configContent = readFileSync(configPath, 'utf-8');
|
|
128
|
-
expect(configContent).toContain('existing-script');
|
|
129
|
-
expect(configContent).toContain('new-script');
|
|
130
|
-
});
|
|
131
|
-
it('should preserve existing config structure', () => {
|
|
132
|
-
const initialConfig = `# Project configuration
|
|
133
|
-
defaultProvider: openai
|
|
134
|
-
defaultModel: gpt-4
|
|
135
|
-
|
|
136
|
-
maxMessageCount: 50
|
|
137
|
-
`;
|
|
138
|
-
writeFileSync(configPath, initialConfig);
|
|
139
|
-
// Simulate adding scripts
|
|
140
|
-
const currentContent = readFileSync(configPath, 'utf-8');
|
|
141
|
-
const updatedContent = `${currentContent}
|
|
142
|
-
scripts:
|
|
143
|
-
new-script: .polka-scripts/new.ts
|
|
144
|
-
`;
|
|
145
|
-
writeFileSync(configPath, updatedContent);
|
|
146
|
-
const configContent = readFileSync(configPath, 'utf-8');
|
|
147
|
-
expect(configContent).toContain('defaultProvider:');
|
|
148
|
-
expect(configContent).toContain('defaultModel:');
|
|
149
|
-
expect(configContent).toContain('maxMessageCount:');
|
|
150
|
-
expect(configContent).toContain('scripts:');
|
|
151
|
-
expect(configContent).toContain('new-script');
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
describe('Script execution via runner', () => {
|
|
155
|
-
it('should create executable script that can be run', async () => {
|
|
156
|
-
const scriptName = 'runnable-script';
|
|
157
|
-
const scriptPath = join(scriptsDir, `${scriptName}.ts`);
|
|
158
|
-
const template = `// Generated by polka.codes
|
|
159
|
-
export async function main(args: string[]) {
|
|
160
|
-
console.log('Running script: ${scriptName}')
|
|
161
|
-
return { success: true, args }
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (import.meta.main) {
|
|
165
|
-
main(process.argv.slice(2))
|
|
166
|
-
}
|
|
167
|
-
`;
|
|
168
|
-
writeFileSync(scriptPath, template);
|
|
169
|
-
// Verify script file exists
|
|
170
|
-
expect(existsSync(scriptPath)).toBe(true);
|
|
171
|
-
// Verify script can be imported (simulating execution)
|
|
172
|
-
const absolutePath = join(scriptsDir, `${scriptName}.ts`);
|
|
173
|
-
delete require.cache[absolutePath];
|
|
174
|
-
const scriptModule = await import(absolutePath);
|
|
175
|
-
expect(typeof scriptModule.main).toBe('function');
|
|
176
|
-
const result = await scriptModule.main(['--test']);
|
|
177
|
-
expect(result.success).toBe(true);
|
|
178
|
-
expect(result.args).toEqual(['--test']);
|
|
179
|
-
});
|
|
180
|
-
it('should create script that accepts arguments', async () => {
|
|
181
|
-
const scriptName = 'args-script';
|
|
182
|
-
const scriptPath = join(scriptsDir, `${scriptName}.ts`);
|
|
183
|
-
const template = `// Generated by polka.codes
|
|
184
|
-
export async function main(args: string[]) {
|
|
185
|
-
return {
|
|
186
|
-
scriptName: '${scriptName}',
|
|
187
|
-
arguments: args,
|
|
188
|
-
count: args.length
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (import.meta.main) {
|
|
193
|
-
main(process.argv.slice(2))
|
|
194
|
-
}
|
|
195
|
-
`;
|
|
196
|
-
writeFileSync(scriptPath, template);
|
|
197
|
-
// Test with arguments
|
|
198
|
-
const absolutePath = join(scriptsDir, `${scriptName}.ts`);
|
|
199
|
-
delete require.cache[absolutePath];
|
|
200
|
-
const scriptModule = await import(absolutePath);
|
|
201
|
-
const testArgs = ['--arg1', '--arg2', 'test-value'];
|
|
202
|
-
const result = await scriptModule.main(testArgs);
|
|
203
|
-
expect(result.scriptName).toBe(scriptName);
|
|
204
|
-
expect(result.arguments).toEqual(testArgs);
|
|
205
|
-
expect(result.count).toBe(3);
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
describe('Multiple script creation', () => {
|
|
209
|
-
it('should handle multiple scripts in directory', () => {
|
|
210
|
-
const scriptNames = ['script1', 'script2', 'script3'];
|
|
211
|
-
for (const name of scriptNames) {
|
|
212
|
-
const scriptPath = join(scriptsDir, `${name}.ts`);
|
|
213
|
-
const template = `export async function main(args: string[]) {
|
|
214
|
-
return { name: '${name}' }
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
if (import.meta.main) {
|
|
218
|
-
main(process.argv.slice(2))
|
|
219
|
-
}
|
|
220
|
-
`;
|
|
221
|
-
writeFileSync(scriptPath, template);
|
|
222
|
-
}
|
|
223
|
-
// Verify all scripts were created
|
|
224
|
-
for (const name of scriptNames) {
|
|
225
|
-
const scriptPath = join(scriptsDir, `${name}.ts`);
|
|
226
|
-
expect(existsSync(scriptPath)).toBe(true);
|
|
227
|
-
}
|
|
228
|
-
// Verify config can be updated with all scripts
|
|
229
|
-
const currentContent = readFileSync(configPath, 'utf-8');
|
|
230
|
-
const scriptsSection = scriptNames.map((name) => ` ${name}: .polka-scripts/${name}.ts`).join('\n');
|
|
231
|
-
const updatedContent = `${currentContent}
|
|
232
|
-
scripts:
|
|
233
|
-
${scriptsSection}
|
|
234
|
-
`;
|
|
235
|
-
writeFileSync(configPath, updatedContent);
|
|
236
|
-
const configContent = readFileSync(configPath, 'utf-8');
|
|
237
|
-
for (const name of scriptNames) {
|
|
238
|
-
expect(configContent).toContain(name);
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
describe('Config loading after script creation', () => {
|
|
243
|
-
it('should load config with newly created scripts', async () => {
|
|
244
|
-
// Create script files
|
|
245
|
-
writeFileSync(join(scriptsDir, 'deploy.ts'), `export async function main(args: string[]) {
|
|
246
|
-
return { deployed: true }
|
|
247
|
-
}`);
|
|
248
|
-
writeFileSync(join(scriptsDir, 'build.ts'), `export async function main(args: string[]) {
|
|
249
|
-
return { built: true }
|
|
250
|
-
}`);
|
|
251
|
-
// Update config
|
|
252
|
-
const configContent = `
|
|
253
|
-
scripts:
|
|
254
|
-
deploy:
|
|
255
|
-
script: .polka-scripts/deploy.ts
|
|
256
|
-
description: Deploy to production
|
|
257
|
-
build:
|
|
258
|
-
script: .polka-scripts/build.ts
|
|
259
|
-
description: Build project
|
|
260
|
-
`;
|
|
261
|
-
writeFileSync(configPath, configContent);
|
|
262
|
-
// Load and verify config
|
|
263
|
-
const config = await loadConfig([], testProjectDir);
|
|
264
|
-
expect(config).toBeDefined();
|
|
265
|
-
expect(config?.scripts).toBeDefined();
|
|
266
|
-
expect(config?.scripts?.deploy).toBeDefined();
|
|
267
|
-
expect(config?.scripts?.build).toBeDefined();
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
|
-
//# sourceMappingURL=script-generator.integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"script-generator.integration.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/script-generator.integration.test.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/agent.js
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { exec } from 'node:child_process';
|
|
2
|
-
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import * as fs from 'node:fs/promises';
|
|
4
|
-
import * as path from 'node:path';
|
|
5
|
-
import { promisify } from 'node:util';
|
|
6
|
-
import { createErrorResponse, createSuccessResponse } from '@polka-codes/core';
|
|
7
|
-
import { Command } from 'commander';
|
|
8
|
-
import { loadConfig } from '../agent/config';
|
|
9
|
-
import { AutonomousAgent } from '../agent/orchestrator';
|
|
10
|
-
import { createLogger } from '../logger';
|
|
11
|
-
import { quoteForShell } from '../utils/shell';
|
|
12
|
-
/**
|
|
13
|
-
* Validates that a command string contains only safe characters
|
|
14
|
-
* (alphanumeric, hyphen, underscore, slash, dot, and colon)
|
|
15
|
-
* This prevents shell injection via malicious command strings
|
|
16
|
-
*/
|
|
17
|
-
function validateCommandName(command) {
|
|
18
|
-
// Allow alphanumeric, hyphen, underscore, forward slash, dot, and colon
|
|
19
|
-
// This covers common cases like: git, npm, bun, node, ./script.sh, /usr/bin/command
|
|
20
|
-
const safeCommandPattern = /^[a-zA-Z0-9_\-./:]+$/;
|
|
21
|
-
if (!safeCommandPattern.test(command)) {
|
|
22
|
-
throw new Error(`Invalid command: '${command}' contains unsafe characters. ` +
|
|
23
|
-
`Commands must not contain spaces. If you need to pass arguments, use the 'args' array parameter instead. ` +
|
|
24
|
-
`Only alphanumeric, hyphen, underscore, slash, dot, and colon are allowed in the command field.`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Autonomous agent command
|
|
29
|
-
*
|
|
30
|
-
* Usage:
|
|
31
|
-
* bun run agent "Add user authentication" # Goal-directed mode
|
|
32
|
-
* bun run agent --continuous # Continuous improvement mode
|
|
33
|
-
* bun run agent --preset conservative "Fix tests" # Use preset configuration
|
|
34
|
-
*/
|
|
35
|
-
export async function runAgent(goal, options, _command) {
|
|
36
|
-
const globalOpts = (_command.parent ?? _command).opts();
|
|
37
|
-
const verbose = typeof globalOpts.verbose === 'number' ? globalOpts.verbose : 0;
|
|
38
|
-
const logger = createLogger({ verbose });
|
|
39
|
-
logger.info('🤖 Polka Agent');
|
|
40
|
-
logger.info('='.repeat(60));
|
|
41
|
-
// Map CLI options to config format
|
|
42
|
-
// --continuous flag maps to strategy: 'continuous-improvement'
|
|
43
|
-
// --approval-level maps to requireApprovalFor in config
|
|
44
|
-
const strategy = options.continuous
|
|
45
|
-
? 'continuous-improvement'
|
|
46
|
-
: (options.strategy ?? 'goal-directed');
|
|
47
|
-
const requireApprovalFor = options.approvalLevel ?? 'destructive';
|
|
48
|
-
const configOptions = {
|
|
49
|
-
strategy,
|
|
50
|
-
approval: { level: requireApprovalFor, autoApproveSafeTasks: true, maxAutoApprovalCost: 5 },
|
|
51
|
-
};
|
|
52
|
-
// Load configuration
|
|
53
|
-
const config = await loadConfig(configOptions, options.config);
|
|
54
|
-
// Create workflow context
|
|
55
|
-
const workingDir = process.cwd();
|
|
56
|
-
const stateDir = path.join(workingDir, '.polka', 'agent-state');
|
|
57
|
-
const sessionId = `agent-${Date.now()}-${randomUUID()}`;
|
|
58
|
-
// Create minimal tools implementation for agent context
|
|
59
|
-
//
|
|
60
|
-
// CRITICAL LIMITATION: The agent currently only provides executeCommand and readFile.
|
|
61
|
-
// When the agent invokes workflows (code, fix, plan, etc.) via WorkflowAdapter, those
|
|
62
|
-
// workflows expect a full tool context (writeToFile, listFiles, searchFiles, etc.).
|
|
63
|
-
//
|
|
64
|
-
// This will cause runtime errors if workflows try to use tools beyond executeCommand
|
|
65
|
-
// and readFile. The agent context should be initialized with full tools like runWorkflow
|
|
66
|
-
// does, using the toolCall infrastructure and provider.
|
|
67
|
-
//
|
|
68
|
-
// For now, the agent is primarily used for task discovery and planning, which only
|
|
69
|
-
// requires executeCommand and readFile. Full workflow execution support requires:
|
|
70
|
-
// 1. Initializing provider (getProvider, getModel)
|
|
71
|
-
// 2. Creating UsageMeter
|
|
72
|
-
// 3. Initializing MCP manager
|
|
73
|
-
// 4. Creating Proxy-based tools delegation to toolCall
|
|
74
|
-
// 5. Passing full context to AutonomousAgent
|
|
75
|
-
//
|
|
76
|
-
// TODO: Refactor agent.ts to use runWorkflow infrastructure for full tool support
|
|
77
|
-
const asyncExec = promisify(exec);
|
|
78
|
-
// Create minimal tools implementation for agent context
|
|
79
|
-
const tools = {
|
|
80
|
-
executeCommand: async (input) => {
|
|
81
|
-
// SECURITY: Validate command name to prevent shell injection
|
|
82
|
-
validateCommandName(input.command);
|
|
83
|
-
// SECURITY: We use child_process.exec (not spawn) to enable shell features needed by git commands.
|
|
84
|
-
// This is safe because:
|
|
85
|
-
// 1. Command name is validated to contain only safe characters
|
|
86
|
-
// 2. All arguments are quoted using quoteForShell() to prevent injection
|
|
87
|
-
// 3. The agent is intended for local development where the user has full shell access anyway
|
|
88
|
-
// 4. Working directory is restricted to the project root
|
|
89
|
-
//
|
|
90
|
-
// Trade-off: Using exec with a string is riskier than spawn with an argument array, but
|
|
91
|
-
// necessary for shell operations like git which require shell expansion. The quoteForShell
|
|
92
|
-
// function is designed to handle all shell special characters safely.
|
|
93
|
-
// Build command from input with proper shell quoting
|
|
94
|
-
let fullCommand;
|
|
95
|
-
if (input.args && input.args.length > 0) {
|
|
96
|
-
// Quote each argument to handle spaces and special characters safely
|
|
97
|
-
const quotedArgs = input.args.map(quoteForShell);
|
|
98
|
-
fullCommand = `${input.command} ${quotedArgs.join(' ')}`;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
// Use full command string
|
|
102
|
-
fullCommand = input.command;
|
|
103
|
-
}
|
|
104
|
-
// Note: exec always spawns a shell, so the 'shell' parameter is ignored.
|
|
105
|
-
// This is intentional for safety - we want shell expansion for git commands.
|
|
106
|
-
// All arguments are properly quoted to prevent injection.
|
|
107
|
-
try {
|
|
108
|
-
// Increase maxBuffer to handle large git operations (10MB instead of default 1MB)
|
|
109
|
-
const { stdout, stderr } = await asyncExec(fullCommand, {
|
|
110
|
-
cwd: workingDir,
|
|
111
|
-
maxBuffer: 10 * 1024 * 1024, // 10MB
|
|
112
|
-
});
|
|
113
|
-
return createSuccessResponse(`Command executed successfully\nExit code: 0\nStdout:\n${stdout}\n${stderr ? `Stderr:\n${stderr}` : ''}`);
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
// Handle ENOBUFS errors (buffer overflow) explicitly
|
|
117
|
-
const errorCode = error && typeof error === 'object' && 'code' in error ? String(error.code) : undefined;
|
|
118
|
-
const errorErrno = error && typeof error === 'object' && 'errno' in error ? String(error.errno) : undefined;
|
|
119
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
120
|
-
if (errorErrno === 'ENOBUFS' || errorCode === 'ENOBUFS') {
|
|
121
|
-
const errorStdout = error && typeof error === 'object' && 'stdout' in error ? String(error.stdout) : '';
|
|
122
|
-
return createErrorResponse(`Command output exceeded buffer limit (10MB). The command produced too much output. Try using different arguments or redirecting output to a file. Original error: ${errorMessage}\nStdout:\n${errorStdout}`);
|
|
123
|
-
}
|
|
124
|
-
const errorStdout = error && typeof error === 'object' && 'stdout' in error ? String(error.stdout) : '';
|
|
125
|
-
const errorStderr = error && typeof error === 'object' && 'stderr' in error ? String(error.stderr) : errorMessage;
|
|
126
|
-
return createErrorResponse(`Command failed with exit code ${errorCode || '1'}\n${errorStderr ? `Stderr:\n${errorStderr}` : errorMessage}${errorStdout ? `\nStdout:\n${errorStdout}` : ''}`);
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
readFile: async ({ path: filePath }) => {
|
|
130
|
-
const fullPath = path.resolve(workingDir, filePath);
|
|
131
|
-
// Validate path is within working directory to prevent reading arbitrary files
|
|
132
|
-
// NOTE: This validation prevents basic path traversal but doesn't protect against:
|
|
133
|
-
// - Symlinks that point outside the working directory
|
|
134
|
-
// - Case-insensitive filesystems (Windows/macOS) where paths could differ in case
|
|
135
|
-
// For a local CLI tool, this level of protection is reasonable to prevent accidental reads
|
|
136
|
-
const normalizedPath = path.normalize(fullPath);
|
|
137
|
-
const normalizedWorkingDir = path.normalize(workingDir);
|
|
138
|
-
if (!normalizedPath.startsWith(normalizedWorkingDir + path.sep) && normalizedPath !== normalizedWorkingDir) {
|
|
139
|
-
return createErrorResponse(`Path "${filePath}" is outside working directory "${workingDir}"`);
|
|
140
|
-
}
|
|
141
|
-
const content = await fs.readFile(fullPath, 'utf-8');
|
|
142
|
-
return createSuccessResponse(content);
|
|
143
|
-
},
|
|
144
|
-
};
|
|
145
|
-
// Simple step function for workflow execution tracking
|
|
146
|
-
// NOTE: This is a minimal implementation that bypasses some workflow step features:
|
|
147
|
-
// - No retry logic on failures
|
|
148
|
-
// - No step timeout handling
|
|
149
|
-
// - No detailed step event logging
|
|
150
|
-
// This is acceptable for the agent command context where the autonomous agent
|
|
151
|
-
// handles its own retries and error recovery. The step function exists primarily
|
|
152
|
-
// for compatibility with the workflow system.
|
|
153
|
-
const step = async (_name, optionsOrFn, fn) => {
|
|
154
|
-
const actualFn = fn || optionsOrFn;
|
|
155
|
-
if (typeof actualFn === 'function') {
|
|
156
|
-
return await actualFn();
|
|
157
|
-
}
|
|
158
|
-
throw new Error('Invalid step function call');
|
|
159
|
-
};
|
|
160
|
-
const context = {
|
|
161
|
-
logger,
|
|
162
|
-
step,
|
|
163
|
-
workingDir,
|
|
164
|
-
stateDir,
|
|
165
|
-
sessionId,
|
|
166
|
-
tools,
|
|
167
|
-
};
|
|
168
|
-
// Create agent
|
|
169
|
-
const agent = new AutonomousAgent(config, context);
|
|
170
|
-
try {
|
|
171
|
-
// Initialize
|
|
172
|
-
await agent.initialize();
|
|
173
|
-
// Check mode
|
|
174
|
-
if (options.continuous) {
|
|
175
|
-
logger.info('🔄 Mode: Continuous Improvement');
|
|
176
|
-
await agent.runContinuous();
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
if (!goal) {
|
|
180
|
-
logger.error('❌ Error: Goal is required for goal-directed mode');
|
|
181
|
-
logger.error('Usage: bun run agent "your goal here"');
|
|
182
|
-
logger.error('');
|
|
183
|
-
logger.error('Or use --continuous for autonomous improvement mode');
|
|
184
|
-
await agent.cleanup();
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
logger.info(`📝 Goal: ${goal}`);
|
|
188
|
-
await agent.setGoal(goal);
|
|
189
|
-
await agent.run();
|
|
190
|
-
}
|
|
191
|
-
// Cleanup
|
|
192
|
-
await agent.cleanup();
|
|
193
|
-
logger.info('');
|
|
194
|
-
logger.info('✅ Agent session complete');
|
|
195
|
-
logger.info('');
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
199
|
-
logger.error('');
|
|
200
|
-
logger.error(`❌ Agent failed: ${errorMessage}`);
|
|
201
|
-
logger.error('');
|
|
202
|
-
try {
|
|
203
|
-
await agent.cleanup();
|
|
204
|
-
}
|
|
205
|
-
catch (cleanupError) {
|
|
206
|
-
logger.warn(`Warning: Error during agent cleanup: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
export const agentCommand = new Command('agent')
|
|
211
|
-
.description('Run autonomous agent (experimental)')
|
|
212
|
-
.argument('[goal]', 'Goal to achieve', '')
|
|
213
|
-
.option('--continuous', 'Run in continuous improvement mode')
|
|
214
|
-
.option('--preset <name>', 'Configuration preset', 'balanced')
|
|
215
|
-
.option('--config <path>', 'Configuration file path')
|
|
216
|
-
.option('--approval-level <level>', 'Approval level (none|destructive|commits|all)', 'destructive')
|
|
217
|
-
.action(runAgent);
|
|
218
|
-
//# sourceMappingURL=agent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/code.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
// generated by polka.codes
|
|
2
|
-
import { readFile } from 'node:fs/promises';
|
|
3
|
-
import { Command } from 'commander';
|
|
4
|
-
import { lookup } from 'mime-types';
|
|
5
|
-
import { code } from '../api';
|
|
6
|
-
import { COMMAND_CONSTANTS } from '../commands/command.constants';
|
|
7
|
-
import { parseOptions } from '../options';
|
|
8
|
-
import { getBaseWorkflowOptions } from '../utils/command';
|
|
9
|
-
import { getUserInput } from '../utils/userInput';
|
|
10
|
-
const readStdin = async (timeoutMs = COMMAND_CONSTANTS.DEFAULT_STDIN_TIMEOUT_MS) => {
|
|
11
|
-
if (process.stdin.isTTY) {
|
|
12
|
-
return '';
|
|
13
|
-
}
|
|
14
|
-
return new Promise((resolve, reject) => {
|
|
15
|
-
let input = '';
|
|
16
|
-
const cleanup = () => {
|
|
17
|
-
if (timeoutId)
|
|
18
|
-
clearTimeout(timeoutId);
|
|
19
|
-
process.stdin.removeAllListeners();
|
|
20
|
-
};
|
|
21
|
-
const timeoutId = setTimeout(() => {
|
|
22
|
-
cleanup();
|
|
23
|
-
// Don't reject, just resolve with what we have
|
|
24
|
-
resolve(input);
|
|
25
|
-
}, timeoutMs);
|
|
26
|
-
process.stdin.on('data', (chunk) => {
|
|
27
|
-
input += chunk.toString();
|
|
28
|
-
});
|
|
29
|
-
process.stdin.on('end', () => {
|
|
30
|
-
cleanup();
|
|
31
|
-
resolve(input);
|
|
32
|
-
});
|
|
33
|
-
process.stdin.on('error', (err) => {
|
|
34
|
-
cleanup();
|
|
35
|
-
reject(err);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
|
-
export async function runCode(task, _options, command) {
|
|
40
|
-
let taskInput = task;
|
|
41
|
-
const stdin = await readStdin();
|
|
42
|
-
if (stdin) {
|
|
43
|
-
taskInput = stdin;
|
|
44
|
-
}
|
|
45
|
-
const workflowOpts = getBaseWorkflowOptions(command);
|
|
46
|
-
const { file: files } = await parseOptions(command.opts(), { commandName: 'code' });
|
|
47
|
-
const fileContents = [];
|
|
48
|
-
if (files) {
|
|
49
|
-
for (const file of files) {
|
|
50
|
-
try {
|
|
51
|
-
const mimeType = lookup(file);
|
|
52
|
-
if (mimeType) {
|
|
53
|
-
const buffer = await readFile(file);
|
|
54
|
-
if (mimeType.startsWith('image/')) {
|
|
55
|
-
fileContents.push({
|
|
56
|
-
type: 'image',
|
|
57
|
-
mediaType: mimeType,
|
|
58
|
-
image: buffer.toString('base64'),
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
fileContents.push({
|
|
63
|
-
type: 'file',
|
|
64
|
-
mediaType: mimeType,
|
|
65
|
-
filename: file,
|
|
66
|
-
data: buffer.toString('base64'),
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
workflowOpts.logger.warn(`Unknown mime type for file: ${file}`);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
workflowOpts.logger.error(`Error reading file '${file}': ${error.message}`);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (!taskInput && fileContents.length === 0) {
|
|
80
|
-
taskInput = await getUserInput('What feature or task do you want to implement?');
|
|
81
|
-
if (taskInput === undefined) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (!taskInput && fileContents.length > 0) {
|
|
86
|
-
taskInput = 'Implement the changes based on the provided files.';
|
|
87
|
-
}
|
|
88
|
-
if (!taskInput) {
|
|
89
|
-
workflowOpts.logger.error('No task provided. Aborting.');
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
await code({
|
|
93
|
-
task: taskInput,
|
|
94
|
-
files: fileContents,
|
|
95
|
-
...workflowOpts,
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
export const codeCommand = new Command('code')
|
|
99
|
-
.description('Plan and implement a feature or task using architect and coder agents.')
|
|
100
|
-
.argument('[task]', 'The task to plan and implement.')
|
|
101
|
-
.action(runCode);
|
|
102
|
-
//# sourceMappingURL=code.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Constants for command-line commands
|
|
3
|
-
* Extracted to improve code readability and maintainability
|
|
4
|
-
*/
|
|
5
|
-
export const COMMAND_CONSTANTS = {
|
|
6
|
-
/** Default timeout (in milliseconds) for reading from stdin */
|
|
7
|
-
DEFAULT_STDIN_TIMEOUT_MS: 1000,
|
|
8
|
-
/** Default number of context lines to show around search matches */
|
|
9
|
-
DEFAULT_CONTEXT_LINES: 5,
|
|
10
|
-
/** Threshold for summarizing output (in characters) */
|
|
11
|
-
SUMMARY_THRESHOLD: 5000,
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=command.constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command.constants.js","sourceRoot":"","sources":["../../src/commands/command.constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,+DAA+D;IAC/D,wBAAwB,EAAE,IAAI;IAE9B,oEAAoE;IACpE,qBAAqB,EAAE,CAAC;IAExB,uDAAuD;IACvD,iBAAiB,EAAE,IAAI;CACf,CAAA"}
|