@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/agent/executor.js
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import { TaskExecutionError } from './errors';
|
|
2
|
-
import { invokeWorkflow } from './workflow-adapter';
|
|
3
|
-
/**
|
|
4
|
-
* Executes tasks by invoking appropriate workflows
|
|
5
|
-
*
|
|
6
|
-
* Features:
|
|
7
|
-
* - Timeout protection with AbortController
|
|
8
|
-
* - Proper workflow cancellation on timeout
|
|
9
|
-
* - Manual task cancellation support
|
|
10
|
-
*/
|
|
11
|
-
export class TaskExecutor {
|
|
12
|
-
#abortControllers = new Map();
|
|
13
|
-
#taskTimeouts = new Map();
|
|
14
|
-
#context;
|
|
15
|
-
#logger;
|
|
16
|
-
#defaultTimeoutMs;
|
|
17
|
-
constructor(context, logger, defaultTimeoutMs = 60 * 60 * 1000) {
|
|
18
|
-
this.#context = context;
|
|
19
|
-
this.#logger = logger;
|
|
20
|
-
this.#defaultTimeoutMs = defaultTimeoutMs;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Execute a task with timeout protection
|
|
24
|
-
*
|
|
25
|
-
* Uses AbortController to properly cancel the workflow if timeout occurs
|
|
26
|
-
*/
|
|
27
|
-
async execute(task, _state, timeoutMs) {
|
|
28
|
-
this.#logger.info(`[Executor] Executing task ${task.id}: ${task.title}`);
|
|
29
|
-
// Use provided timeout or default
|
|
30
|
-
const effectiveTimeout = timeoutMs ?? this.#defaultTimeoutMs;
|
|
31
|
-
try {
|
|
32
|
-
// Execute with timeout and cancellation support
|
|
33
|
-
const result = await this.executeTaskInternal(task, effectiveTimeout);
|
|
34
|
-
this.#logger.info(`[Executor] Task ${task.id} completed`);
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
// Enhanced error logging with context
|
|
39
|
-
if (error instanceof TaskExecutionError) {
|
|
40
|
-
this.#logger.error(`\n${error.getFormattedMessage()}`);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
this.#logger.error(`[Executor] Task ${task.id} failed`, error);
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
success: false,
|
|
47
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Execute task with timeout wrapper and proper cancellation
|
|
53
|
-
*
|
|
54
|
-
* This implementation uses AbortController to properly cancel the workflow
|
|
55
|
-
* when a timeout occurs or manual cancellation is requested.
|
|
56
|
-
*/
|
|
57
|
-
async executeTaskInternal(task, timeoutMs) {
|
|
58
|
-
// Create AbortController for this task
|
|
59
|
-
const abortController = new AbortController();
|
|
60
|
-
this.#abortControllers.set(task.id, abortController);
|
|
61
|
-
// Set up timeout
|
|
62
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
63
|
-
const timeoutId = setTimeout(() => {
|
|
64
|
-
// Abort the workflow before rejecting
|
|
65
|
-
const reason = `Task timed out after ${timeoutMs}ms`;
|
|
66
|
-
abortController.abort(reason);
|
|
67
|
-
reject(new TaskExecutionError(task.id, reason));
|
|
68
|
-
}, timeoutMs);
|
|
69
|
-
this.#taskTimeouts.set(task.id, timeoutId);
|
|
70
|
-
});
|
|
71
|
-
try {
|
|
72
|
-
// Race between workflow execution and timeout
|
|
73
|
-
// The AbortSignal is passed through the workflow chain:
|
|
74
|
-
// 1. TaskExecutor.invokeWorkflow() receives the signal
|
|
75
|
-
// 2. WorkflowAdapter.invokeWorkflow() checks signal.aborted
|
|
76
|
-
// 3. Context is wrapped with checkAbort() function
|
|
77
|
-
// 4. Workflows can call context.checkAbort() periodically
|
|
78
|
-
//
|
|
79
|
-
// This ensures that when timeout occurs, the workflow will be
|
|
80
|
-
// properly cancelled at the next checkpoint, not just abandoned.
|
|
81
|
-
const workflowPromise = this.invokeWorkflow(task, abortController.signal);
|
|
82
|
-
// Prevent unhandled rejection if timeout wins the race
|
|
83
|
-
// The workflow may continue running and reject after timeout,
|
|
84
|
-
// but we don't care about that rejection since we already timed out
|
|
85
|
-
workflowPromise.catch(() => {
|
|
86
|
-
// Suppress unhandled rejection warning
|
|
87
|
-
// The actual error (timeout) is already being thrown
|
|
88
|
-
});
|
|
89
|
-
const result = await Promise.race([workflowPromise, timeoutPromise]);
|
|
90
|
-
return result;
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
// If error is due to abort, rethrow with abort reason
|
|
94
|
-
if (abortController.signal.aborted) {
|
|
95
|
-
const abortReason = abortController.signal.reason ? String(abortController.signal.reason) : 'Task was cancelled';
|
|
96
|
-
throw new TaskExecutionError(task.id, abortReason, error instanceof Error ? error : undefined);
|
|
97
|
-
}
|
|
98
|
-
throw error;
|
|
99
|
-
}
|
|
100
|
-
finally {
|
|
101
|
-
// Cleanup timeout
|
|
102
|
-
const timeoutId = this.#taskTimeouts.get(task.id);
|
|
103
|
-
if (timeoutId) {
|
|
104
|
-
clearTimeout(timeoutId);
|
|
105
|
-
this.#taskTimeouts.delete(task.id);
|
|
106
|
-
}
|
|
107
|
-
// Remove from active controllers
|
|
108
|
-
// Note: We do NOT abort the controller here because:
|
|
109
|
-
// 1. If task succeeded, aborting would trigger abort event listeners incorrectly
|
|
110
|
-
// 2. If task timed out, timeout handler already aborted it
|
|
111
|
-
// 3. If task was cancelled manually, cancel() method already aborted it
|
|
112
|
-
// 4. The AbortController will be garbage collected when removed from map
|
|
113
|
-
this.#abortControllers.delete(task.id);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Invoke workflow for task with AbortSignal
|
|
118
|
-
*
|
|
119
|
-
* The AbortSignal is passed to the workflow adapter, which propagates
|
|
120
|
-
* it through the workflow execution chain for proper cancellation support.
|
|
121
|
-
*/
|
|
122
|
-
async invokeWorkflow(task, signal) {
|
|
123
|
-
try {
|
|
124
|
-
// Check if already aborted before starting
|
|
125
|
-
if (signal.aborted) {
|
|
126
|
-
const abortReason = signal.reason ? String(signal.reason) : 'Task was cancelled before execution';
|
|
127
|
-
throw new TaskExecutionError(task.id, abortReason);
|
|
128
|
-
}
|
|
129
|
-
// Use workflow adapter to invoke appropriate workflow with abort signal
|
|
130
|
-
const result = await invokeWorkflow(task.workflow, task.workflowInput, this.#context, signal);
|
|
131
|
-
return result;
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
// Check if error is due to abort
|
|
135
|
-
if (signal.aborted) {
|
|
136
|
-
// If error is already a TaskExecutionError, rethrow it directly
|
|
137
|
-
if (error instanceof TaskExecutionError) {
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
// Otherwise wrap it, prioritizing signal.reason over error.message
|
|
141
|
-
// signal.reason contains the actual cancellation reason (e.g., 'Task cancelled manually')
|
|
142
|
-
// while error might be a generic 'AbortError'
|
|
143
|
-
const abortReason = signal.reason ? String(signal.reason) : error instanceof Error ? error.message : 'Task was cancelled';
|
|
144
|
-
throw new TaskExecutionError(task.id, abortReason, error instanceof Error ? error : undefined);
|
|
145
|
-
}
|
|
146
|
-
// If error is already a TaskExecutionError, rethrow it directly
|
|
147
|
-
if (error instanceof TaskExecutionError) {
|
|
148
|
-
throw error;
|
|
149
|
-
}
|
|
150
|
-
throw new TaskExecutionError(task.id, error instanceof Error ? error.message : String(error), error instanceof Error ? error : undefined);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Cancel running task
|
|
155
|
-
*
|
|
156
|
-
* Aborts the task's workflow and clears its timeout
|
|
157
|
-
*/
|
|
158
|
-
cancel(taskId) {
|
|
159
|
-
const abortController = this.#abortControllers.get(taskId);
|
|
160
|
-
const timeoutId = this.#taskTimeouts.get(taskId);
|
|
161
|
-
if (abortController) {
|
|
162
|
-
// Abort the workflow with a reason for better debugging
|
|
163
|
-
abortController.abort('Task cancelled manually');
|
|
164
|
-
this.#abortControllers.delete(taskId);
|
|
165
|
-
// Clear the timeout
|
|
166
|
-
if (timeoutId) {
|
|
167
|
-
clearTimeout(timeoutId);
|
|
168
|
-
this.#taskTimeouts.delete(taskId);
|
|
169
|
-
}
|
|
170
|
-
this.#logger.info(`[Executor] Task ${taskId} cancelled`);
|
|
171
|
-
return true;
|
|
172
|
-
}
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Cancel all tasks
|
|
177
|
-
*
|
|
178
|
-
* Aborts all running workflows and clears all timeouts
|
|
179
|
-
*/
|
|
180
|
-
cancelAll() {
|
|
181
|
-
this.#logger.info(`[Executor] Cancelling all tasks (${this.#abortControllers.size} running)`);
|
|
182
|
-
// Abort all controllers
|
|
183
|
-
for (const [, controller] of this.#abortControllers) {
|
|
184
|
-
controller.abort();
|
|
185
|
-
}
|
|
186
|
-
this.#abortControllers.clear();
|
|
187
|
-
// Clear all timeouts
|
|
188
|
-
for (const timeoutId of this.#taskTimeouts.values()) {
|
|
189
|
-
clearTimeout(timeoutId);
|
|
190
|
-
}
|
|
191
|
-
this.#taskTimeouts.clear();
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Check if a task is currently running
|
|
195
|
-
*/
|
|
196
|
-
isRunning(taskId) {
|
|
197
|
-
return this.#abortControllers.has(taskId);
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Get number of currently running tasks
|
|
201
|
-
*/
|
|
202
|
-
getRunningCount() {
|
|
203
|
-
return this.#abortControllers.size;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
//# sourceMappingURL=executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/agent/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, mock } from 'bun:test';
|
|
2
|
-
import { Priority } from './constants';
|
|
3
|
-
import { TaskExecutor } from './executor';
|
|
4
|
-
import { createMockContext, createMockLogger } from './test-fixtures';
|
|
5
|
-
describe('TaskExecutor', () => {
|
|
6
|
-
let executor;
|
|
7
|
-
let mockLogger;
|
|
8
|
-
let mockState;
|
|
9
|
-
const mockConfig = {
|
|
10
|
-
strategy: 'goal-directed',
|
|
11
|
-
continueOnCompletion: false,
|
|
12
|
-
maxIterations: 0,
|
|
13
|
-
timeout: 0,
|
|
14
|
-
requireApprovalFor: 'destructive',
|
|
15
|
-
pauseOnError: true,
|
|
16
|
-
workingBranch: 'main',
|
|
17
|
-
maxConcurrency: 1,
|
|
18
|
-
autoSaveInterval: 30000,
|
|
19
|
-
enableProgress: true,
|
|
20
|
-
destructiveOperations: ['delete', 'force-push', 'reset'],
|
|
21
|
-
maxAutoApprovalCost: 5,
|
|
22
|
-
autoApproveSafeTasks: true,
|
|
23
|
-
continuousImprovement: {
|
|
24
|
-
sleepTimeOnNoTasks: 60000,
|
|
25
|
-
sleepTimeBetweenTasks: 5000,
|
|
26
|
-
maxCycles: 0,
|
|
27
|
-
},
|
|
28
|
-
discovery: {
|
|
29
|
-
enabledStrategies: [],
|
|
30
|
-
cacheTime: 300000,
|
|
31
|
-
checkChanges: true,
|
|
32
|
-
},
|
|
33
|
-
approval: {
|
|
34
|
-
level: 'destructive',
|
|
35
|
-
autoApproveSafeTasks: true,
|
|
36
|
-
maxAutoApprovalCost: 5,
|
|
37
|
-
},
|
|
38
|
-
safety: {
|
|
39
|
-
enabledChecks: [],
|
|
40
|
-
blockDestructive: true,
|
|
41
|
-
maxFileSize: 10485760,
|
|
42
|
-
},
|
|
43
|
-
healthCheck: {
|
|
44
|
-
enabled: true,
|
|
45
|
-
interval: 30,
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
beforeEach(() => {
|
|
49
|
-
mockLogger = createMockLogger();
|
|
50
|
-
executor = new TaskExecutor(createMockContext(), mockLogger);
|
|
51
|
-
mockState = {
|
|
52
|
-
sessionId: 'test-session',
|
|
53
|
-
currentMode: 'idle',
|
|
54
|
-
currentGoal: undefined,
|
|
55
|
-
config: mockConfig,
|
|
56
|
-
currentTask: undefined,
|
|
57
|
-
taskQueue: [],
|
|
58
|
-
completedTasks: [],
|
|
59
|
-
failedTasks: [],
|
|
60
|
-
blockedTasks: [],
|
|
61
|
-
executionHistory: [],
|
|
62
|
-
metrics: {
|
|
63
|
-
tasksCompleted: 0,
|
|
64
|
-
tasksFailed: 0,
|
|
65
|
-
totalTasks: 0,
|
|
66
|
-
totalExecutionTime: 0,
|
|
67
|
-
averageTaskTime: 0,
|
|
68
|
-
successRate: 0,
|
|
69
|
-
git: {
|
|
70
|
-
totalCommits: 0,
|
|
71
|
-
totalFilesChanged: 0,
|
|
72
|
-
totalInsertions: 0,
|
|
73
|
-
totalDeletions: 0,
|
|
74
|
-
branchesCreated: 0,
|
|
75
|
-
},
|
|
76
|
-
tests: {
|
|
77
|
-
totalTestsRun: 0,
|
|
78
|
-
testsPassed: 0,
|
|
79
|
-
testsFailed: 0,
|
|
80
|
-
currentCoverage: 0,
|
|
81
|
-
testsAdded: 0,
|
|
82
|
-
},
|
|
83
|
-
improvements: {
|
|
84
|
-
bugsFixed: 0,
|
|
85
|
-
testsAdded: 0,
|
|
86
|
-
refactoringsCompleted: 0,
|
|
87
|
-
documentationAdded: 0,
|
|
88
|
-
qualityImprovements: 0,
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
timestamps: {
|
|
92
|
-
startTime: Date.now(),
|
|
93
|
-
lastActivity: Date.now(),
|
|
94
|
-
lastSaveTime: Date.now(),
|
|
95
|
-
lastMetricsUpdate: Date.now(),
|
|
96
|
-
modeTransitions: [],
|
|
97
|
-
},
|
|
98
|
-
session: {
|
|
99
|
-
id: 'test-session',
|
|
100
|
-
iterationCount: 0,
|
|
101
|
-
parentPid: 1,
|
|
102
|
-
pid: 1,
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
});
|
|
106
|
-
const createMockTask = (overrides) => ({
|
|
107
|
-
id: `task-${Date.now()}`,
|
|
108
|
-
title: 'Test task',
|
|
109
|
-
description: 'Test description',
|
|
110
|
-
type: 'bugfix',
|
|
111
|
-
priority: Priority.MEDIUM,
|
|
112
|
-
complexity: 'medium',
|
|
113
|
-
estimatedTime: 30,
|
|
114
|
-
status: 'pending',
|
|
115
|
-
workflow: 'code',
|
|
116
|
-
workflowInput: {},
|
|
117
|
-
dependencies: [],
|
|
118
|
-
files: [],
|
|
119
|
-
createdAt: Date.now(),
|
|
120
|
-
retryCount: 0,
|
|
121
|
-
...overrides,
|
|
122
|
-
});
|
|
123
|
-
describe('execute', () => {
|
|
124
|
-
it('should execute task successfully', async () => {
|
|
125
|
-
const task = createMockTask();
|
|
126
|
-
mock.module('./workflow-adapter', () => ({
|
|
127
|
-
invokeWorkflow: async () => ({
|
|
128
|
-
success: true,
|
|
129
|
-
data: { result: 'done' },
|
|
130
|
-
output: 'Task completed',
|
|
131
|
-
}),
|
|
132
|
-
}));
|
|
133
|
-
const result = await executor.execute(task, mockState);
|
|
134
|
-
expect(result.success).toBe(true);
|
|
135
|
-
expect(result.data).toEqual({ result: 'done' });
|
|
136
|
-
});
|
|
137
|
-
it('should handle task execution failures', async () => {
|
|
138
|
-
const task = createMockTask();
|
|
139
|
-
mock.module('./workflow-adapter', () => ({
|
|
140
|
-
invokeWorkflow: async () => ({
|
|
141
|
-
success: false,
|
|
142
|
-
error: new Error('Workflow failed'),
|
|
143
|
-
}),
|
|
144
|
-
}));
|
|
145
|
-
const result = await executor.execute(task, mockState);
|
|
146
|
-
expect(result.success).toBe(false);
|
|
147
|
-
expect(result.error).toBeInstanceOf(Error);
|
|
148
|
-
});
|
|
149
|
-
it('should handle workflow exceptions', async () => {
|
|
150
|
-
const task = createMockTask();
|
|
151
|
-
mock.module('./workflow-adapter', () => ({
|
|
152
|
-
invokeWorkflow: async () => {
|
|
153
|
-
throw new Error('Unexpected error');
|
|
154
|
-
},
|
|
155
|
-
}));
|
|
156
|
-
const result = await executor.execute(task, mockState);
|
|
157
|
-
expect(result.success).toBe(false);
|
|
158
|
-
expect(result.error?.message).toContain('Unexpected error');
|
|
159
|
-
});
|
|
160
|
-
it('should enforce task timeout', async () => {
|
|
161
|
-
// Create task that takes longer than timeout
|
|
162
|
-
const task = createMockTask();
|
|
163
|
-
// Use the mock state
|
|
164
|
-
const testState = mockState;
|
|
165
|
-
mock.module('./workflow-adapter', () => ({
|
|
166
|
-
invokeWorkflow: async () => {
|
|
167
|
-
// Sleep longer than 100ms timeout
|
|
168
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
169
|
-
return { success: true };
|
|
170
|
-
},
|
|
171
|
-
}));
|
|
172
|
-
// Execute with 100ms timeout
|
|
173
|
-
const result = await executor.execute(task, testState, 100);
|
|
174
|
-
// Should timeout
|
|
175
|
-
expect(result.success).toBe(false);
|
|
176
|
-
expect(result.error?.message).toContain('timed out');
|
|
177
|
-
}, 5000);
|
|
178
|
-
});
|
|
179
|
-
describe('cancel', () => {
|
|
180
|
-
it('should cancel running task', async () => {
|
|
181
|
-
const task = createMockTask();
|
|
182
|
-
// Start task that never completes
|
|
183
|
-
const neverResolve = new Promise(() => { });
|
|
184
|
-
mock.module('./workflow-adapter', () => ({
|
|
185
|
-
WorkflowAdapter: {
|
|
186
|
-
invokeWorkflow: async () => neverResolve,
|
|
187
|
-
},
|
|
188
|
-
}));
|
|
189
|
-
// Start execution (don't await)
|
|
190
|
-
const execution = executor.execute(task, mockState);
|
|
191
|
-
// Cancel immediately
|
|
192
|
-
const cancelled = executor.cancel(task.id);
|
|
193
|
-
expect(cancelled).toBe(true);
|
|
194
|
-
// Clean up
|
|
195
|
-
try {
|
|
196
|
-
await Promise.race([execution, new Promise((r) => setTimeout(r, 100))]);
|
|
197
|
-
}
|
|
198
|
-
catch { }
|
|
199
|
-
});
|
|
200
|
-
it('should return false for non-existent task', () => {
|
|
201
|
-
const cancelled = executor.cancel('non-existent');
|
|
202
|
-
expect(cancelled).toBe(false);
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
describe('cancelAll', () => {
|
|
206
|
-
it('should cancel all running tasks', async () => {
|
|
207
|
-
const task1 = createMockTask({ id: 'task-1' });
|
|
208
|
-
const task2 = createMockTask({ id: 'task-2' });
|
|
209
|
-
const neverResolve = new Promise(() => { });
|
|
210
|
-
mock.module('./workflow-adapter', () => ({
|
|
211
|
-
WorkflowAdapter: {
|
|
212
|
-
invokeWorkflow: async () => neverResolve,
|
|
213
|
-
},
|
|
214
|
-
}));
|
|
215
|
-
// Start executions
|
|
216
|
-
const exec1 = executor.execute(task1, mockState);
|
|
217
|
-
const exec2 = executor.execute(task2, mockState);
|
|
218
|
-
// Cancel all
|
|
219
|
-
executor.cancelAll();
|
|
220
|
-
// Clean up
|
|
221
|
-
try {
|
|
222
|
-
await Promise.race([Promise.all([exec1, exec2]), new Promise((r) => setTimeout(r, 100))]);
|
|
223
|
-
}
|
|
224
|
-
catch { }
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
//# sourceMappingURL=executor.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.test.js","sourceRoot":"","sources":["../../src/agent/executor.test.ts"],"names":[],"mappings":"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"}
|