@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
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
// generated by polka.codes
|
|
2
|
-
import { describe, expect, it } from 'bun:test';
|
|
3
|
-
import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { ScriptExecutionError, ScriptRunner, ScriptTimeoutError, ScriptValidationError } from '../runner';
|
|
6
|
-
// Mock logger
|
|
7
|
-
const mockLogger = {
|
|
8
|
-
debug: () => { },
|
|
9
|
-
info: () => { },
|
|
10
|
-
warn: () => { },
|
|
11
|
-
error: () => { },
|
|
12
|
-
};
|
|
13
|
-
describe('ScriptRunner', () => {
|
|
14
|
-
const testDir = join(process.cwd(), 'test-scripts');
|
|
15
|
-
const runner = new ScriptRunner();
|
|
16
|
-
// Setup test directory
|
|
17
|
-
const setup = () => {
|
|
18
|
-
try {
|
|
19
|
-
mkdirSync(testDir, { recursive: true });
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
// Directory already exists
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
// Cleanup test directory
|
|
26
|
-
const cleanup = () => {
|
|
27
|
-
try {
|
|
28
|
-
rmSync(testDir, { recursive: true, force: true });
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// Directory doesn't exist
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
// Create a test script
|
|
35
|
-
const createTestScript = (name, content) => {
|
|
36
|
-
writeFileSync(join(testDir, name), content);
|
|
37
|
-
};
|
|
38
|
-
it('should execute a valid TypeScript script', async () => {
|
|
39
|
-
setup();
|
|
40
|
-
createTestScript('valid.ts', `
|
|
41
|
-
export async function main(args: string[], context: any) {
|
|
42
|
-
return { success: true, args, hasLogger: !!context.logger }
|
|
43
|
-
}
|
|
44
|
-
`);
|
|
45
|
-
const result = await runner.execute({
|
|
46
|
-
scriptPath: join(testDir, 'valid.ts'),
|
|
47
|
-
args: ['--test'],
|
|
48
|
-
context: {},
|
|
49
|
-
logger: mockLogger,
|
|
50
|
-
});
|
|
51
|
-
expect(result.success).toBe(true);
|
|
52
|
-
expect(result.returnValue).toEqual({ success: true, args: ['--test'], hasLogger: true });
|
|
53
|
-
cleanup();
|
|
54
|
-
});
|
|
55
|
-
it('should throw error for script without main function', async () => {
|
|
56
|
-
setup();
|
|
57
|
-
createTestScript('no-main.ts', `
|
|
58
|
-
export const helper = () => {}
|
|
59
|
-
`);
|
|
60
|
-
const result = await runner.execute({
|
|
61
|
-
scriptPath: join(testDir, 'no-main.ts'),
|
|
62
|
-
args: [],
|
|
63
|
-
context: {},
|
|
64
|
-
logger: mockLogger,
|
|
65
|
-
});
|
|
66
|
-
expect(result.success).toBe(false);
|
|
67
|
-
expect(result.error).toBeDefined();
|
|
68
|
-
expect(result.error).toBeInstanceOf(ScriptExecutionError);
|
|
69
|
-
cleanup();
|
|
70
|
-
});
|
|
71
|
-
it('should handle script execution errors', async () => {
|
|
72
|
-
setup();
|
|
73
|
-
createTestScript('error.ts', `
|
|
74
|
-
export async function main(args: string[], context: any) {
|
|
75
|
-
throw new Error('Test error')
|
|
76
|
-
}
|
|
77
|
-
`);
|
|
78
|
-
const result = await runner.execute({
|
|
79
|
-
scriptPath: join(testDir, 'error.ts'),
|
|
80
|
-
args: [],
|
|
81
|
-
context: {},
|
|
82
|
-
logger: mockLogger,
|
|
83
|
-
});
|
|
84
|
-
expect(result.success).toBe(false);
|
|
85
|
-
expect(result.error?.message).toContain('Test error');
|
|
86
|
-
cleanup();
|
|
87
|
-
});
|
|
88
|
-
it('should enforce timeout', async () => {
|
|
89
|
-
setup();
|
|
90
|
-
createTestScript('timeout.ts', `
|
|
91
|
-
export async function main(args: string[], context: any) {
|
|
92
|
-
await new Promise(resolve => setTimeout(resolve, 10000))
|
|
93
|
-
return 'done'
|
|
94
|
-
}
|
|
95
|
-
`);
|
|
96
|
-
// Timeout errors are re-thrown, so we need to catch them
|
|
97
|
-
try {
|
|
98
|
-
await runner.execute({
|
|
99
|
-
scriptPath: join(testDir, 'timeout.ts'),
|
|
100
|
-
args: [],
|
|
101
|
-
context: {},
|
|
102
|
-
logger: mockLogger,
|
|
103
|
-
timeout: 100, // 100ms timeout
|
|
104
|
-
});
|
|
105
|
-
// Should not reach here
|
|
106
|
-
expect(true).toBe(false);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
// Expected to timeout
|
|
110
|
-
expect(error).toBeInstanceOf(ScriptTimeoutError);
|
|
111
|
-
expect(error).toHaveProperty('message', expect.stringContaining('timeout'));
|
|
112
|
-
}
|
|
113
|
-
cleanup();
|
|
114
|
-
});
|
|
115
|
-
it('should validate script path before execution', async () => {
|
|
116
|
-
// Try to execute a script outside the project directory
|
|
117
|
-
// This should fail validation before attempting to execute
|
|
118
|
-
try {
|
|
119
|
-
await runner.execute({
|
|
120
|
-
scriptPath: '../etc/passwd', // Invalid path
|
|
121
|
-
args: [],
|
|
122
|
-
context: {},
|
|
123
|
-
logger: mockLogger,
|
|
124
|
-
});
|
|
125
|
-
// Should not reach here
|
|
126
|
-
expect(true).toBe(false);
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
// Expected to throw during validation
|
|
130
|
-
expect(error).toBeInstanceOf(ScriptValidationError);
|
|
131
|
-
expect(error).toHaveProperty('message', expect.stringContaining('outside project directory'));
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('ScriptRunner type guards', () => {
|
|
136
|
-
const runner = new ScriptRunner();
|
|
137
|
-
it('should identify TypeScript scripts', () => {
|
|
138
|
-
const script = { script: './test.ts', description: 'Test' };
|
|
139
|
-
expect(runner.isTypeScriptScript(script)).toBe(true);
|
|
140
|
-
});
|
|
141
|
-
it('should identify workflow scripts', () => {
|
|
142
|
-
const script = { workflow: './test.yml' };
|
|
143
|
-
expect(runner.isWorkflowScript(script)).toBe(true);
|
|
144
|
-
});
|
|
145
|
-
it('should identify shell commands', () => {
|
|
146
|
-
const script1 = 'bun test';
|
|
147
|
-
expect(runner.isShellCommand(script1)).toBe(true);
|
|
148
|
-
const script2 = { command: 'bun test', description: 'Test' };
|
|
149
|
-
expect(runner.isShellCommand(script2)).toBe(true);
|
|
150
|
-
});
|
|
151
|
-
it('should not misidentify script types', () => {
|
|
152
|
-
const script = { script: './test.ts' };
|
|
153
|
-
expect(runner.isWorkflowScript(script)).toBe(false);
|
|
154
|
-
expect(runner.isShellCommand(script)).toBe(false);
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
describe('ScriptRunner error classes', () => {
|
|
158
|
-
it('should create ScriptValidationError with correct name', () => {
|
|
159
|
-
const error = new ScriptValidationError('test message');
|
|
160
|
-
expect(error.name).toBe('ScriptValidationError');
|
|
161
|
-
expect(error.message).toBe('Script validation failed: test message');
|
|
162
|
-
});
|
|
163
|
-
it('should create ScriptTimeoutError with correct name', () => {
|
|
164
|
-
const error = new ScriptTimeoutError('test.ts', 5000);
|
|
165
|
-
expect(error.name).toBe('ScriptTimeoutError');
|
|
166
|
-
expect(error.message).toBe('Script execution timeout: test.ts exceeded 5000ms');
|
|
167
|
-
});
|
|
168
|
-
it('should create ScriptExecutionError with correct name and cause', () => {
|
|
169
|
-
const cause = new Error('original error');
|
|
170
|
-
const error = new ScriptExecutionError('test.ts', cause);
|
|
171
|
-
expect(error.name).toBe('ScriptExecutionError');
|
|
172
|
-
expect(error.message).toBe('Script execution failed: test.ts');
|
|
173
|
-
expect(error.cause).toBe(cause);
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
//# sourceMappingURL=runner.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.test.js","sourceRoot":"","sources":["../../../src/script/__tests__/runner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
// generated by polka.codes
|
|
2
|
-
import { describe, expect, it } from 'bun:test';
|
|
3
|
-
import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { scriptSchema } from '@polka-codes/core';
|
|
6
|
-
import { validateScriptPath, validateScriptPermissions } from '../runner';
|
|
7
|
-
describe('validateScriptPath', () => {
|
|
8
|
-
const testDir = join(process.cwd(), 'test-scripts');
|
|
9
|
-
// Setup test directory
|
|
10
|
-
const setup = () => {
|
|
11
|
-
try {
|
|
12
|
-
mkdirSync(testDir, { recursive: true });
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
// Directory already exists
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
// Cleanup test directory
|
|
19
|
-
const cleanup = () => {
|
|
20
|
-
try {
|
|
21
|
-
rmSync(testDir, { recursive: true, force: true });
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
// Directory doesn't exist
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
// Create a test file
|
|
28
|
-
const createTestFile = (name) => {
|
|
29
|
-
writeFileSync(join(testDir, name), 'test content');
|
|
30
|
-
};
|
|
31
|
-
it('should accept a valid TypeScript script path within project', () => {
|
|
32
|
-
setup();
|
|
33
|
-
createTestFile('valid.ts');
|
|
34
|
-
expect(() => validateScriptPath('test-scripts/valid.ts', process.cwd())).not.toThrow();
|
|
35
|
-
cleanup();
|
|
36
|
-
});
|
|
37
|
-
it('should reject YAML workflow files (ScriptRunner accepts .ts, .js, .mjs, .cjs)', () => {
|
|
38
|
-
setup();
|
|
39
|
-
createTestFile('workflow.yml');
|
|
40
|
-
expect(() => validateScriptPath('test-scripts/workflow.yml', process.cwd())).toThrow('Script validation failed: Script must be a .ts, .js, .mjs, or .cjs file: test-scripts/workflow.yml');
|
|
41
|
-
cleanup();
|
|
42
|
-
});
|
|
43
|
-
it('should reject paths outside project directory', () => {
|
|
44
|
-
expect(() => validateScriptPath('../etc/passwd', process.cwd())).toThrow("Script validation failed: Script path '../etc/passwd' is outside project directory");
|
|
45
|
-
});
|
|
46
|
-
it('should reject non-existent files', () => {
|
|
47
|
-
expect(() => validateScriptPath('does-not-exist.ts', process.cwd())).toThrow('Script validation failed: Script file not found: does-not-exist.ts');
|
|
48
|
-
});
|
|
49
|
-
it('should reject files with invalid extensions', () => {
|
|
50
|
-
setup();
|
|
51
|
-
createTestFile('invalid.py');
|
|
52
|
-
expect(() => validateScriptPath('test-scripts/invalid.py', process.cwd())).toThrow('Script validation failed: Script must be a .ts, .js, .mjs, or .cjs file: test-scripts/invalid.py');
|
|
53
|
-
cleanup();
|
|
54
|
-
});
|
|
55
|
-
it('should accept .js files', () => {
|
|
56
|
-
setup();
|
|
57
|
-
createTestFile('valid.js');
|
|
58
|
-
expect(() => validateScriptPath('test-scripts/valid.js', process.cwd())).not.toThrow();
|
|
59
|
-
cleanup();
|
|
60
|
-
});
|
|
61
|
-
it('should accept .mjs files', () => {
|
|
62
|
-
setup();
|
|
63
|
-
createTestFile('valid.mjs');
|
|
64
|
-
expect(() => validateScriptPath('test-scripts/valid.mjs', process.cwd())).not.toThrow();
|
|
65
|
-
cleanup();
|
|
66
|
-
});
|
|
67
|
-
it('should accept .cjs files', () => {
|
|
68
|
-
setup();
|
|
69
|
-
createTestFile('valid.cjs');
|
|
70
|
-
expect(() => validateScriptPath('test-scripts/valid.cjs', process.cwd())).not.toThrow();
|
|
71
|
-
cleanup();
|
|
72
|
-
});
|
|
73
|
-
it('should reject paths with directory traversal attempts', () => {
|
|
74
|
-
setup();
|
|
75
|
-
createTestFile('safe.ts');
|
|
76
|
-
expect(() => validateScriptPath('test-scripts/../../../etc/passwd', process.cwd())).toThrow();
|
|
77
|
-
cleanup();
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
describe('validateScriptPermissions', () => {
|
|
81
|
-
it('should accept string scripts (no permissions)', () => {
|
|
82
|
-
const script = 'bun run test';
|
|
83
|
-
expect(() => validateScriptPermissions(script)).not.toThrow();
|
|
84
|
-
});
|
|
85
|
-
it('should accept command scripts (no permissions)', () => {
|
|
86
|
-
const script = { command: 'bun test', description: 'Run tests' };
|
|
87
|
-
expect(() => validateScriptPermissions(script)).not.toThrow();
|
|
88
|
-
});
|
|
89
|
-
it('should accept workflow scripts (no permissions)', () => {
|
|
90
|
-
const script = { workflow: './test.yml' };
|
|
91
|
-
expect(() => validateScriptPermissions(script)).not.toThrow();
|
|
92
|
-
});
|
|
93
|
-
it('should accept valid fs permissions', () => {
|
|
94
|
-
const script = {
|
|
95
|
-
script: './test.ts',
|
|
96
|
-
permissions: { fs: 'read' },
|
|
97
|
-
};
|
|
98
|
-
expect(() => validateScriptPermissions(script)).not.toThrow();
|
|
99
|
-
});
|
|
100
|
-
it('should accept valid network permissions', () => {
|
|
101
|
-
const script = {
|
|
102
|
-
script: './test.ts',
|
|
103
|
-
permissions: { network: true },
|
|
104
|
-
};
|
|
105
|
-
expect(() => validateScriptPermissions(script)).not.toThrow();
|
|
106
|
-
});
|
|
107
|
-
it('should accept valid subprocess permissions', () => {
|
|
108
|
-
const script = {
|
|
109
|
-
script: './test.ts',
|
|
110
|
-
permissions: { subprocess: true },
|
|
111
|
-
};
|
|
112
|
-
expect(() => validateScriptPermissions(script)).not.toThrow();
|
|
113
|
-
});
|
|
114
|
-
it('should accept all permissions', () => {
|
|
115
|
-
const script = {
|
|
116
|
-
script: './test.ts',
|
|
117
|
-
permissions: { fs: 'write', network: true, subprocess: true },
|
|
118
|
-
};
|
|
119
|
-
expect(() => validateScriptPermissions(script)).not.toThrow();
|
|
120
|
-
});
|
|
121
|
-
it('should reject invalid fs permission', () => {
|
|
122
|
-
const script = {
|
|
123
|
-
script: './test.ts',
|
|
124
|
-
permissions: { fs: 'invalid' },
|
|
125
|
-
};
|
|
126
|
-
expect(() => validateScriptPermissions(script)).toThrow("Script validation failed: Invalid fs permission: invalid. Must be 'read', 'write', or 'none'");
|
|
127
|
-
});
|
|
128
|
-
it('should reject invalid network permission', () => {
|
|
129
|
-
const script = {
|
|
130
|
-
script: './test.ts',
|
|
131
|
-
permissions: { network: 'invalid' },
|
|
132
|
-
};
|
|
133
|
-
expect(() => validateScriptPermissions(script)).toThrow('Script validation failed: Invalid network permission: must be true or false');
|
|
134
|
-
});
|
|
135
|
-
it('should reject invalid subprocess permission', () => {
|
|
136
|
-
const script = {
|
|
137
|
-
script: './test.ts',
|
|
138
|
-
permissions: { subprocess: 'invalid' },
|
|
139
|
-
};
|
|
140
|
-
expect(() => validateScriptPermissions(script)).toThrow('Script validation failed: Invalid subprocess permission: must be true or false');
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
describe('scriptSchema', () => {
|
|
144
|
-
it('should validate string scripts', () => {
|
|
145
|
-
const result = scriptSchema.safeParse('bun run test');
|
|
146
|
-
expect(result.success).toBe(true);
|
|
147
|
-
});
|
|
148
|
-
it('should validate command scripts', () => {
|
|
149
|
-
const result = scriptSchema.safeParse({ command: 'bun test', description: 'Run tests' });
|
|
150
|
-
expect(result.success).toBe(true);
|
|
151
|
-
});
|
|
152
|
-
it('should validate workflow scripts', () => {
|
|
153
|
-
const result = scriptSchema.safeParse({
|
|
154
|
-
workflow: './test.yml',
|
|
155
|
-
description: 'Test workflow',
|
|
156
|
-
});
|
|
157
|
-
expect(result.success).toBe(true);
|
|
158
|
-
});
|
|
159
|
-
it('should validate TypeScript scripts', () => {
|
|
160
|
-
const result = scriptSchema.safeParse({
|
|
161
|
-
script: './test.ts',
|
|
162
|
-
description: 'Test script',
|
|
163
|
-
permissions: { fs: 'write', network: true },
|
|
164
|
-
timeout: 60000,
|
|
165
|
-
});
|
|
166
|
-
expect(result.success).toBe(true);
|
|
167
|
-
});
|
|
168
|
-
it('should reject scripts with invalid fields', () => {
|
|
169
|
-
const result = scriptSchema.safeParse({
|
|
170
|
-
script: './test.ts',
|
|
171
|
-
invalidField: 'value',
|
|
172
|
-
});
|
|
173
|
-
expect(result.success).toBe(false);
|
|
174
|
-
});
|
|
175
|
-
it('should reject empty object', () => {
|
|
176
|
-
const result = scriptSchema.safeParse({});
|
|
177
|
-
expect(result.success).toBe(false);
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
//# sourceMappingURL=validator.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.test.js","sourceRoot":"","sources":["../../../src/script/__tests__/validator.test.ts"],"names":[],"mappings":"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"}
|
package/dist/script/executor.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
// generated by polka.codes
|
|
2
|
-
import { spawnSync } from 'node:child_process';
|
|
3
|
-
import { createErrorClass } from '@polka-codes/core';
|
|
4
|
-
import { ScriptRunner, validateScriptPermissions } from './runner';
|
|
5
|
-
/**
|
|
6
|
-
* Error thrown when script execution fails
|
|
7
|
-
*/
|
|
8
|
-
export const ScriptExecutionFailedError = createErrorClass('ScriptExecutionFailedError', (args) => {
|
|
9
|
-
const [scriptName, exitCode, message] = args;
|
|
10
|
-
return message || `Script '${scriptName}' failed with exit code ${exitCode}`;
|
|
11
|
-
});
|
|
12
|
-
/**
|
|
13
|
-
* Execute a shell command using spawnSync with proper error handling.
|
|
14
|
-
*
|
|
15
|
-
* SECURITY: This function uses shell execution for complex commands.
|
|
16
|
-
* The command strings come from trusted configuration files (polka.codes.json),
|
|
17
|
-
* not from user input. This is acceptable since:
|
|
18
|
-
* 1. Commands are defined by developers in config files
|
|
19
|
-
* 2. The tool itself requires explicit permissions (--allow-read, --allow-run, etc.)
|
|
20
|
-
* 3. There's no user-supplied input that could lead to injection
|
|
21
|
-
*
|
|
22
|
-
* @param command - The command string to execute
|
|
23
|
-
* @param scriptName - Name of the script for error reporting
|
|
24
|
-
* @throws {ScriptExecutionFailedError} When command fails
|
|
25
|
-
*/
|
|
26
|
-
function executeShellCommand(command, scriptName) {
|
|
27
|
-
const result = spawnSync(command, {
|
|
28
|
-
stdio: 'inherit',
|
|
29
|
-
shell: true,
|
|
30
|
-
});
|
|
31
|
-
if (result.status !== 0) {
|
|
32
|
-
throw new ScriptExecutionFailedError(scriptName, result.status ?? 1);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Quote shell arguments to preserve spaces and special characters.
|
|
37
|
-
* Uses platform-appropriate quoting for cross-platform compatibility.
|
|
38
|
-
*
|
|
39
|
-
* On Windows (cmd.exe), arguments with spaces are wrapped in double quotes.
|
|
40
|
-
* On Unix-like systems, uses POSIX single quoting.
|
|
41
|
-
*
|
|
42
|
-
* @param args - Array of argument strings
|
|
43
|
-
* @returns Quoted arguments string
|
|
44
|
-
*/
|
|
45
|
-
function quoteArgs(args) {
|
|
46
|
-
const isWindows = process.platform === 'win32';
|
|
47
|
-
return args
|
|
48
|
-
.map((arg) => {
|
|
49
|
-
// For Windows cmd.exe
|
|
50
|
-
if (isWindows) {
|
|
51
|
-
// Double quotes are used on Windows
|
|
52
|
-
// Escape existing double quotes and backslashes
|
|
53
|
-
const escaped = arg.replace(/(\\*)"/g, '$1$1\\"').replace(/(\\*)$/, '$1$1');
|
|
54
|
-
return `"${escaped}"`;
|
|
55
|
-
}
|
|
56
|
-
// For Unix-like systems, use single quotes
|
|
57
|
-
return `'${arg.replace(/'/g, "'\\''")}'`;
|
|
58
|
-
})
|
|
59
|
-
.join(' ');
|
|
60
|
-
}
|
|
61
|
-
// String command executor
|
|
62
|
-
const executeStringCommand = async (script, name, args, _logger) => {
|
|
63
|
-
const fullCommand = args.length > 0 ? `${script} ${quoteArgs(args)}` : script;
|
|
64
|
-
executeShellCommand(fullCommand, name);
|
|
65
|
-
};
|
|
66
|
-
// Command object executor
|
|
67
|
-
const executeCommandObject = async (script, name, args, _logger) => {
|
|
68
|
-
const fullCommand = args.length > 0 ? `${script.command} ${quoteArgs(args)}` : script.command;
|
|
69
|
-
executeShellCommand(fullCommand, name);
|
|
70
|
-
};
|
|
71
|
-
// TypeScript script executor
|
|
72
|
-
const executeTypeScriptScript = async (script, name, args, logger, runner) => {
|
|
73
|
-
const scriptPath = script.script;
|
|
74
|
-
const result = await runner.execute({
|
|
75
|
-
scriptPath,
|
|
76
|
-
args,
|
|
77
|
-
context: {
|
|
78
|
-
projectRoot: process.cwd(), // Provide project root to scripts
|
|
79
|
-
// Additional context can be added here in the future
|
|
80
|
-
},
|
|
81
|
-
logger,
|
|
82
|
-
timeout: script.timeout,
|
|
83
|
-
});
|
|
84
|
-
if (!result.success) {
|
|
85
|
-
const errorMsg = result.error?.message || 'Unknown error';
|
|
86
|
-
logger.error(`Script '${name}' failed: ${errorMsg}`);
|
|
87
|
-
throw new ScriptExecutionFailedError(name, 1, errorMsg);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
/**
|
|
91
|
-
* Execute a script configuration with the provided arguments.
|
|
92
|
-
* This is a shared utility used by both the `run` and `meta` commands.
|
|
93
|
-
*
|
|
94
|
-
* @param script - The script configuration to execute
|
|
95
|
-
* @param name - The name of the script (for error messages)
|
|
96
|
-
* @param logger - Logger instance for output
|
|
97
|
-
* @param args - Arguments to pass to the script
|
|
98
|
-
* @throws {ScriptExecutionFailedError} When script execution fails
|
|
99
|
-
*/
|
|
100
|
-
export async function executeScript(script, name, logger, args = []) {
|
|
101
|
-
const runner = new ScriptRunner();
|
|
102
|
-
// Validate script permissions before execution
|
|
103
|
-
validateScriptPermissions(script, logger);
|
|
104
|
-
// Determine script type and use appropriate executor
|
|
105
|
-
let scriptType = 'string';
|
|
106
|
-
if (typeof script !== 'string') {
|
|
107
|
-
if ('script' in script)
|
|
108
|
-
scriptType = 'script';
|
|
109
|
-
else if ('command' in script)
|
|
110
|
-
scriptType = 'command';
|
|
111
|
-
else if ('workflow' in script)
|
|
112
|
-
scriptType = 'workflow';
|
|
113
|
-
else
|
|
114
|
-
scriptType = Object.keys(script)[0];
|
|
115
|
-
}
|
|
116
|
-
const executors = {
|
|
117
|
-
string: executeStringCommand,
|
|
118
|
-
command: executeCommandObject,
|
|
119
|
-
script: executeTypeScriptScript,
|
|
120
|
-
};
|
|
121
|
-
const executor = executors[scriptType];
|
|
122
|
-
if (!executor) {
|
|
123
|
-
throw new ScriptExecutionFailedError(name, 1, `workflow execution not yet implemented for '${name}'`);
|
|
124
|
-
}
|
|
125
|
-
await executor(script, name, args, logger, runner);
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/script/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/script/index.js
DELETED
package/dist/script/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/script/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAEL,oBAAoB,EAEpB,YAAY,EAEZ,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,UAAU,CAAA"}
|