@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.
Files changed (335) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +3 -3
  3. package/dist/ApiProviderConfig.js +0 -57
  4. package/dist/ApiProviderConfig.js.map +0 -1
  5. package/dist/ApiProviderConfig.test.js +0 -278
  6. package/dist/ApiProviderConfig.test.js.map +0 -1
  7. package/dist/agent/advanced-discovery.js +0 -604
  8. package/dist/agent/advanced-discovery.js.map +0 -1
  9. package/dist/agent/config.js +0 -139
  10. package/dist/agent/config.js.map +0 -1
  11. package/dist/agent/config.test.js +0 -140
  12. package/dist/agent/config.test.js.map +0 -1
  13. package/dist/agent/constants.js +0 -172
  14. package/dist/agent/constants.js.map +0 -1
  15. package/dist/agent/constants.test.js +0 -132
  16. package/dist/agent/constants.test.js.map +0 -1
  17. package/dist/agent/debug-logger.js +0 -281
  18. package/dist/agent/debug-logger.js.map +0 -1
  19. package/dist/agent/debug-logger.test.js +0 -294
  20. package/dist/agent/debug-logger.test.js.map +0 -1
  21. package/dist/agent/error-handling.js +0 -114
  22. package/dist/agent/error-handling.js.map +0 -1
  23. package/dist/agent/error-handling.test.js +0 -191
  24. package/dist/agent/error-handling.test.js.map +0 -1
  25. package/dist/agent/errors.js +0 -301
  26. package/dist/agent/errors.js.map +0 -1
  27. package/dist/agent/executor.js +0 -206
  28. package/dist/agent/executor.js.map +0 -1
  29. package/dist/agent/executor.test.js +0 -228
  30. package/dist/agent/executor.test.js.map +0 -1
  31. package/dist/agent/goal-decomposer.js +0 -281
  32. package/dist/agent/goal-decomposer.js.map +0 -1
  33. package/dist/agent/goal-decomposer.test.js +0 -225
  34. package/dist/agent/goal-decomposer.test.js.map +0 -1
  35. package/dist/agent/health-monitor.js +0 -89
  36. package/dist/agent/health-monitor.js.map +0 -1
  37. package/dist/agent/improvement-loop.js +0 -177
  38. package/dist/agent/improvement-loop.js.map +0 -1
  39. package/dist/agent/index.js +0 -38
  40. package/dist/agent/index.js.map +0 -1
  41. package/dist/agent/metrics.js +0 -158
  42. package/dist/agent/metrics.js.map +0 -1
  43. package/dist/agent/metrics.test.js +0 -311
  44. package/dist/agent/metrics.test.js.map +0 -1
  45. package/dist/agent/orchestrator.js +0 -438
  46. package/dist/agent/orchestrator.js.map +0 -1
  47. package/dist/agent/planner.js +0 -199
  48. package/dist/agent/planner.js.map +0 -1
  49. package/dist/agent/planner.test.js +0 -135
  50. package/dist/agent/planner.test.js.map +0 -1
  51. package/dist/agent/progress.js +0 -298
  52. package/dist/agent/progress.js.map +0 -1
  53. package/dist/agent/progress.test.js +0 -255
  54. package/dist/agent/progress.test.js.map +0 -1
  55. package/dist/agent/resource-monitor.js +0 -114
  56. package/dist/agent/resource-monitor.js.map +0 -1
  57. package/dist/agent/safety/approval.js +0 -178
  58. package/dist/agent/safety/approval.js.map +0 -1
  59. package/dist/agent/safety/approval.test.js +0 -142
  60. package/dist/agent/safety/approval.test.js.map +0 -1
  61. package/dist/agent/safety/checks.js +0 -152
  62. package/dist/agent/safety/checks.js.map +0 -1
  63. package/dist/agent/safety/checks.test.js +0 -89
  64. package/dist/agent/safety/checks.test.js.map +0 -1
  65. package/dist/agent/safety/interrupt.js +0 -92
  66. package/dist/agent/safety/interrupt.js.map +0 -1
  67. package/dist/agent/safety/interrupt.test.js +0 -53
  68. package/dist/agent/safety/interrupt.test.js.map +0 -1
  69. package/dist/agent/session.js +0 -117
  70. package/dist/agent/session.js.map +0 -1
  71. package/dist/agent/session.test.js +0 -213
  72. package/dist/agent/session.test.js.map +0 -1
  73. package/dist/agent/state-manager.js +0 -287
  74. package/dist/agent/state-manager.js.map +0 -1
  75. package/dist/agent/task-discovery.js +0 -433
  76. package/dist/agent/task-discovery.js.map +0 -1
  77. package/dist/agent/task-discovery.test.js +0 -40
  78. package/dist/agent/task-discovery.test.js.map +0 -1
  79. package/dist/agent/task-history.js +0 -128
  80. package/dist/agent/task-history.js.map +0 -1
  81. package/dist/agent/task-prioritizer.js +0 -286
  82. package/dist/agent/task-prioritizer.js.map +0 -1
  83. package/dist/agent/test-fixtures.js +0 -112
  84. package/dist/agent/test-fixtures.js.map +0 -1
  85. package/dist/agent/types.js +0 -15
  86. package/dist/agent/types.js.map +0 -1
  87. package/dist/agent/workflow-adapter.js +0 -219
  88. package/dist/agent/workflow-adapter.js.map +0 -1
  89. package/dist/agent/workflow-adapter.test.js +0 -11
  90. package/dist/agent/workflow-adapter.test.js.map +0 -1
  91. package/dist/agent/working-dir-discovery.js +0 -54
  92. package/dist/agent/working-dir-discovery.js.map +0 -1
  93. package/dist/agent/working-space.js +0 -484
  94. package/dist/agent/working-space.js.map +0 -1
  95. package/dist/agent/working-space.test.js +0 -436
  96. package/dist/agent/working-space.test.js.map +0 -1
  97. package/dist/api.js +0 -279
  98. package/dist/api.js.map +0 -1
  99. package/dist/builtin-commands.js +0 -20
  100. package/dist/builtin-commands.js.map +0 -1
  101. package/dist/commandSummarizer.js +0 -96
  102. package/dist/commandSummarizer.js.map +0 -1
  103. package/dist/commands/__tests__/command-detection.integration.test.js +0 -238
  104. package/dist/commands/__tests__/command-detection.integration.test.js.map +0 -1
  105. package/dist/commands/__tests__/script-generator.integration.test.js +0 -271
  106. package/dist/commands/__tests__/script-generator.integration.test.js.map +0 -1
  107. package/dist/commands/agent.js +0 -218
  108. package/dist/commands/agent.js.map +0 -1
  109. package/dist/commands/code.js +0 -102
  110. package/dist/commands/code.js.map +0 -1
  111. package/dist/commands/command.constants.js +0 -13
  112. package/dist/commands/command.constants.js.map +0 -1
  113. package/dist/commands/commit.js +0 -17
  114. package/dist/commands/commit.js.map +0 -1
  115. package/dist/commands/fix.js +0 -17
  116. package/dist/commands/fix.js.map +0 -1
  117. package/dist/commands/init.js +0 -501
  118. package/dist/commands/init.js.map +0 -1
  119. package/dist/commands/mcp-server.js +0 -122
  120. package/dist/commands/mcp-server.js.map +0 -1
  121. package/dist/commands/memory.js +0 -410
  122. package/dist/commands/memory.js.map +0 -1
  123. package/dist/commands/memory.test.js +0 -453
  124. package/dist/commands/memory.test.js.map +0 -1
  125. package/dist/commands/meta.js +0 -142
  126. package/dist/commands/meta.js.map +0 -1
  127. package/dist/commands/plan.js +0 -39
  128. package/dist/commands/plan.js.map +0 -1
  129. package/dist/commands/pr.js +0 -14
  130. package/dist/commands/pr.js.map +0 -1
  131. package/dist/commands/review-json.test.js +0 -33
  132. package/dist/commands/review-json.test.js.map +0 -1
  133. package/dist/commands/review.js +0 -137
  134. package/dist/commands/review.js.map +0 -1
  135. package/dist/commands/review.usage.test.js +0 -41
  136. package/dist/commands/review.usage.test.js.map +0 -1
  137. package/dist/commands/run.js +0 -107
  138. package/dist/commands/run.js.map +0 -1
  139. package/dist/commands/skills.js +0 -175
  140. package/dist/commands/skills.js.map +0 -1
  141. package/dist/commands/task.js +0 -34
  142. package/dist/commands/task.js.map +0 -1
  143. package/dist/commands/workflow.js +0 -117
  144. package/dist/commands/workflow.js.map +0 -1
  145. package/dist/configPrompt.js +0 -39
  146. package/dist/configPrompt.js.map +0 -1
  147. package/dist/env.js +0 -22
  148. package/dist/env.js.map +0 -1
  149. package/dist/errors.js +0 -132
  150. package/dist/errors.js.map +0 -1
  151. package/dist/errors.test.js +0 -21
  152. package/dist/errors.test.js.map +0 -1
  153. package/dist/file-attachments.js +0 -77
  154. package/dist/file-attachments.js.map +0 -1
  155. package/dist/file-attachments.test.js +0 -214
  156. package/dist/file-attachments.test.js.map +0 -1
  157. package/dist/getModel.js +0 -229
  158. package/dist/getModel.js.map +0 -1
  159. package/dist/getModel.test.js +0 -67
  160. package/dist/getModel.test.js.map +0 -1
  161. package/dist/getProviderOptions.js +0 -58
  162. package/dist/getProviderOptions.js.map +0 -1
  163. package/dist/git-operations.js +0 -363
  164. package/dist/git-operations.js.map +0 -1
  165. package/dist/git-operations.test.js +0 -81
  166. package/dist/git-operations.test.js.map +0 -1
  167. package/dist/index.js.map +0 -1
  168. package/dist/logger.js +0 -41
  169. package/dist/logger.js.map +0 -1
  170. package/dist/mcp/client.js +0 -11
  171. package/dist/mcp/client.js.map +0 -1
  172. package/dist/mcp/error-scenarios.test.js +0 -206
  173. package/dist/mcp/error-scenarios.test.js.map +0 -1
  174. package/dist/mcp/errors.js +0 -63
  175. package/dist/mcp/errors.js.map +0 -1
  176. package/dist/mcp/index.js +0 -9
  177. package/dist/mcp/index.js.map +0 -1
  178. package/dist/mcp/manager.js +0 -231
  179. package/dist/mcp/manager.js.map +0 -1
  180. package/dist/mcp/manager.test.js +0 -40
  181. package/dist/mcp/manager.test.js.map +0 -1
  182. package/dist/mcp/sdk-client.js +0 -166
  183. package/dist/mcp/sdk-client.js.map +0 -1
  184. package/dist/mcp/shared-types.js +0 -3
  185. package/dist/mcp/shared-types.js.map +0 -1
  186. package/dist/mcp/tools-integration.test.js +0 -198
  187. package/dist/mcp/tools-integration.test.js.map +0 -1
  188. package/dist/mcp/tools.js +0 -60
  189. package/dist/mcp/tools.js.map +0 -1
  190. package/dist/mcp/transport.js +0 -257
  191. package/dist/mcp/transport.js.map +0 -1
  192. package/dist/mcp/types.js +0 -3
  193. package/dist/mcp/types.js.map +0 -1
  194. package/dist/mcp-server/index.js +0 -5
  195. package/dist/mcp-server/index.js.map +0 -1
  196. package/dist/mcp-server/plan-formatting.test.js +0 -74
  197. package/dist/mcp-server/plan-formatting.test.js.map +0 -1
  198. package/dist/mcp-server/sdk-server.js +0 -102
  199. package/dist/mcp-server/sdk-server.js.map +0 -1
  200. package/dist/mcp-server/sdk-server.test.js +0 -363
  201. package/dist/mcp-server/sdk-server.test.js.map +0 -1
  202. package/dist/mcp-server/tools.js +0 -785
  203. package/dist/mcp-server/tools.js.map +0 -1
  204. package/dist/mcp-server/types.js +0 -3
  205. package/dist/mcp-server/types.js.map +0 -1
  206. package/dist/options.js +0 -85
  207. package/dist/options.js.map +0 -1
  208. package/dist/options.test.js +0 -177
  209. package/dist/options.test.js.map +0 -1
  210. package/dist/prices.js +0 -61
  211. package/dist/prices.js.map +0 -1
  212. package/dist/prices.test.js +0 -148
  213. package/dist/prices.test.js.map +0 -1
  214. package/dist/runWorkflow.js +0 -313
  215. package/dist/runWorkflow.js.map +0 -1
  216. package/dist/script/__tests__/execution.integration.test.js +0 -274
  217. package/dist/script/__tests__/execution.integration.test.js.map +0 -1
  218. package/dist/script/__tests__/runner.test.js +0 -176
  219. package/dist/script/__tests__/runner.test.js.map +0 -1
  220. package/dist/script/__tests__/validator.test.js +0 -180
  221. package/dist/script/__tests__/validator.test.js.map +0 -1
  222. package/dist/script/executor.js +0 -127
  223. package/dist/script/executor.js.map +0 -1
  224. package/dist/script/index.js +0 -4
  225. package/dist/script/index.js.map +0 -1
  226. package/dist/script/runner.js +0 -258
  227. package/dist/script/runner.js.map +0 -1
  228. package/dist/skillIntegration.js +0 -46
  229. package/dist/skillIntegration.js.map +0 -1
  230. package/dist/skillIntegration.test.js +0 -128
  231. package/dist/skillIntegration.test.js.map +0 -1
  232. package/dist/test/utils.js +0 -200
  233. package/dist/test/utils.js.map +0 -1
  234. package/dist/test/workflow-fixtures.js +0 -120
  235. package/dist/test/workflow-fixtures.js.map +0 -1
  236. package/dist/tool-implementations.js +0 -521
  237. package/dist/tool-implementations.js.map +0 -1
  238. package/dist/tool-implementations.skill-tools.test.js +0 -106
  239. package/dist/tool-implementations.skill-tools.test.js.map +0 -1
  240. package/dist/tools/getTodoItem.js +0 -33
  241. package/dist/tools/getTodoItem.js.map +0 -1
  242. package/dist/tools/gitDiff.js +0 -108
  243. package/dist/tools/gitDiff.js.map +0 -1
  244. package/dist/tools/index.js +0 -8
  245. package/dist/tools/index.js.map +0 -1
  246. package/dist/tools/listMemoryTopics.js +0 -24
  247. package/dist/tools/listMemoryTopics.js.map +0 -1
  248. package/dist/tools/listTodoItems.js +0 -35
  249. package/dist/tools/listTodoItems.js.map +0 -1
  250. package/dist/tools/listTodoItems.test.js +0 -89
  251. package/dist/tools/listTodoItems.test.js.map +0 -1
  252. package/dist/tools/readMemory.js +0 -33
  253. package/dist/tools/readMemory.js.map +0 -1
  254. package/dist/tools/updateMemory.js +0 -62
  255. package/dist/tools/updateMemory.js.map +0 -1
  256. package/dist/tools/updateMemory.test.js +0 -109
  257. package/dist/tools/updateMemory.test.js.map +0 -1
  258. package/dist/tools/updateTodoItem.js +0 -31
  259. package/dist/tools/updateTodoItem.js.map +0 -1
  260. package/dist/tools/utils/diffLineNumbers.js +0 -178
  261. package/dist/tools/utils/diffLineNumbers.js.map +0 -1
  262. package/dist/utils/cacheControl.js +0 -59
  263. package/dist/utils/cacheControl.js.map +0 -1
  264. package/dist/utils/cacheControl.test.js +0 -128
  265. package/dist/utils/cacheControl.test.js.map +0 -1
  266. package/dist/utils/command.js +0 -50
  267. package/dist/utils/command.js.map +0 -1
  268. package/dist/utils/shell.js +0 -56
  269. package/dist/utils/shell.js.map +0 -1
  270. package/dist/utils/userInput.js +0 -47
  271. package/dist/utils/userInput.js.map +0 -1
  272. package/dist/workflow-tools.js +0 -21
  273. package/dist/workflow-tools.js.map +0 -1
  274. package/dist/workflows/agent-builder.js +0 -90
  275. package/dist/workflows/agent-builder.js.map +0 -1
  276. package/dist/workflows/agent-builder.test.js +0 -115
  277. package/dist/workflows/agent-builder.test.js.map +0 -1
  278. package/dist/workflows/code.workflow.js +0 -145
  279. package/dist/workflows/code.workflow.js.map +0 -1
  280. package/dist/workflows/commit.workflow.js +0 -111
  281. package/dist/workflows/commit.workflow.js.map +0 -1
  282. package/dist/workflows/commit.workflow.test.js +0 -141
  283. package/dist/workflows/commit.workflow.test.js.map +0 -1
  284. package/dist/workflows/fix.workflow.js +0 -172
  285. package/dist/workflows/fix.workflow.js.map +0 -1
  286. package/dist/workflows/fix.workflow.test.js +0 -137
  287. package/dist/workflows/fix.workflow.test.js.map +0 -1
  288. package/dist/workflows/git-file-tools.js +0 -408
  289. package/dist/workflows/git-file-tools.js.map +0 -1
  290. package/dist/workflows/index.js +0 -12
  291. package/dist/workflows/index.js.map +0 -1
  292. package/dist/workflows/init-interactive.workflow.js +0 -198
  293. package/dist/workflows/init-interactive.workflow.js.map +0 -1
  294. package/dist/workflows/init.workflow.js +0 -41
  295. package/dist/workflows/init.workflow.js.map +0 -1
  296. package/dist/workflows/meta.workflow.js +0 -107
  297. package/dist/workflows/meta.workflow.js.map +0 -1
  298. package/dist/workflows/plan.workflow.js +0 -275
  299. package/dist/workflows/plan.workflow.js.map +0 -1
  300. package/dist/workflows/plan.workflow.test.js +0 -419
  301. package/dist/workflows/plan.workflow.test.js.map +0 -1
  302. package/dist/workflows/pr.workflow.js +0 -54
  303. package/dist/workflows/pr.workflow.js.map +0 -1
  304. package/dist/workflows/pr.workflow.test.js +0 -98
  305. package/dist/workflows/pr.workflow.test.js.map +0 -1
  306. package/dist/workflows/prompts/coder.js +0 -85
  307. package/dist/workflows/prompts/coder.js.map +0 -1
  308. package/dist/workflows/prompts/commit.js +0 -16
  309. package/dist/workflows/prompts/commit.js.map +0 -1
  310. package/dist/workflows/prompts/fix.js +0 -44
  311. package/dist/workflows/prompts/fix.js.map +0 -1
  312. package/dist/workflows/prompts/index.js +0 -10
  313. package/dist/workflows/prompts/index.js.map +0 -1
  314. package/dist/workflows/prompts/init.js +0 -48
  315. package/dist/workflows/prompts/init.js.map +0 -1
  316. package/dist/workflows/prompts/meta.js +0 -17
  317. package/dist/workflows/prompts/meta.js.map +0 -1
  318. package/dist/workflows/prompts/plan.js +0 -212
  319. package/dist/workflows/prompts/plan.js.map +0 -1
  320. package/dist/workflows/prompts/pr.js +0 -15
  321. package/dist/workflows/prompts/pr.js.map +0 -1
  322. package/dist/workflows/prompts/review.js +0 -145
  323. package/dist/workflows/prompts/review.js.map +0 -1
  324. package/dist/workflows/prompts/shared.js +0 -93
  325. package/dist/workflows/prompts/shared.js.map +0 -1
  326. package/dist/workflows/review.workflow.js +0 -357
  327. package/dist/workflows/review.workflow.js.map +0 -1
  328. package/dist/workflows/task.workflow.js +0 -47
  329. package/dist/workflows/task.workflow.js.map +0 -1
  330. package/dist/workflows/testing/helper.js +0 -41
  331. package/dist/workflows/testing/helper.js.map +0 -1
  332. package/dist/workflows/workflow.utils.js +0 -351
  333. package/dist/workflows/workflow.utils.js.map +0 -1
  334. package/dist/workflows/workflow.utils.test.js +0 -45
  335. package/dist/workflows/workflow.utils.test.js.map +0 -1
@@ -1,438 +0,0 @@
1
- import * as path from 'node:path';
2
- import { ulid } from 'ulid';
3
- import { AgentStatusError, SafetyViolationError } from './errors';
4
- import { TaskExecutor } from './executor';
5
- import { GoalDecomposer } from './goal-decomposer';
6
- import { createContinuousImprovementLoop } from './improvement-loop';
7
- import { MetricsCollector } from './metrics';
8
- import { createTaskPlanner } from './planner';
9
- import { ApprovalManager } from './safety/approval';
10
- import { SafetyChecker } from './safety/checks';
11
- import { InterruptHandler } from './safety/interrupt';
12
- import { acquire, release } from './session';
13
- import { AgentStateManager } from './state-manager';
14
- import { TaskHistory } from './task-history';
15
- import { WorkingSpace } from './working-space';
16
- /**
17
- * Main autonomous agent orchestrator
18
- *
19
- * Coordinates all agent components to:
20
- * - Accept high-level goals
21
- * - Decompose into executable tasks
22
- * - Execute tasks safely with approvals
23
- * - Manage state
24
- * - Handle continuous improvement mode
25
- * - Manage working directory for plans and tasks
26
- *
27
- * Two modes:
28
- * - Goal-directed: User provides a goal to achieve
29
- * - Continuous: Auto-discovers and fixes issues
30
- *
31
- * Optional working directory mode:
32
- * - Uses a user-specified directory for plans and task documentation
33
- * - Discovers tasks from working directory
34
- * - Documents completed tasks in working directory
35
- */
36
- export class AutonomousAgent {
37
- #stateManager;
38
- #taskHistory;
39
- #logger;
40
- #metrics;
41
- #approvalManager;
42
- #safetyChecker;
43
- #interruptHandler;
44
- #goalDecomposer;
45
- #taskPlanner;
46
- #taskExecutor;
47
- #improvementLoop;
48
- #workingSpace;
49
- #initialized = false;
50
- #sessionId;
51
- #config;
52
- #context;
53
- constructor(config, context) {
54
- this.#config = config;
55
- this.#context = context;
56
- this.#sessionId = this.generateSessionId();
57
- // Determine state directory
58
- const stateDir = config.stateDir || path.join(process.cwd(), '.polka', 'agent-state');
59
- // Initialize all components with correct constructor arguments
60
- this.#stateManager = new AgentStateManager(stateDir, this.#sessionId);
61
- this.#taskHistory = new TaskHistory(stateDir);
62
- this.#logger = context.logger;
63
- this.#metrics = new MetricsCollector();
64
- this.#approvalManager = new ApprovalManager(this.#logger, config.approval.level, config.approval.autoApproveSafeTasks, config.approval.maxAutoApprovalCost, config.destructiveOperations);
65
- this.#safetyChecker = new SafetyChecker(this.#logger, context.tools);
66
- this.#interruptHandler = new InterruptHandler(this.#logger, this);
67
- this.#goalDecomposer = new GoalDecomposer(context);
68
- this.#taskPlanner = createTaskPlanner(context);
69
- this.#taskExecutor = new TaskExecutor(context, context.logger);
70
- // Initialize working space if configured
71
- if (config.workingDir) {
72
- this.#workingSpace = new WorkingSpace(config.workingDir, context.logger);
73
- }
74
- }
75
- /**
76
- * Initialize agent (acquire session, start monitors)
77
- */
78
- async initialize() {
79
- if (this.#initialized) {
80
- throw new AgentStatusError('Agent already initialized');
81
- }
82
- this.#logger.info('='.repeat(60));
83
- this.#logger.info('🤖 Polka Codes Autonomous Agent');
84
- this.#logger.info('='.repeat(60));
85
- this.#logger.info('');
86
- try {
87
- // 1. Acquire session
88
- this.#logger.info(`[Init] Acquiring session: ${this.#sessionId}`);
89
- const acquireResult = await acquire(this.#sessionId);
90
- if (!acquireResult.acquired) {
91
- throw new AgentStatusError(`Session conflict: ${this.#sessionId} - ${acquireResult.reason}`);
92
- }
93
- this.#logger.info('[Init] ✅ Session acquired');
94
- // 2. Initialize state
95
- this.#logger.info('[Init] Initializing state...');
96
- const initialState = await this.#stateManager.initialize(this.#config);
97
- this.#logger.info(`[Init] ✅ State initialized: ${initialState.currentMode}`);
98
- // 3. Initialize working space if configured
99
- if (this.#workingSpace) {
100
- this.#logger.info('[Init] Initializing working space...');
101
- await this.#workingSpace.initialize();
102
- this.#logger.info(`[Init] ✅ Working space ready: ${this.#config.workingDir}`);
103
- const stats = await this.#workingSpace.getStats();
104
- this.#logger.info(`[Init] Working space stats: ${stats.planCount} plans, ${stats.pendingTaskCount} pending tasks, ${stats.completedTaskCount} completed tasks`);
105
- }
106
- // 4. Log configuration
107
- this.#logger.info('[Init] Configuration:');
108
- this.#logger.info(` - Strategy: ${this.#config.strategy}`);
109
- this.#logger.info(` - Approval level: ${this.#config.approval.level}`);
110
- if (this.#config.workingDir) {
111
- this.#logger.info(` - Working directory: ${this.#config.workingDir}`);
112
- }
113
- this.#logger.info('');
114
- this.#initialized = true;
115
- this.#logger.info('✅ Agent initialized successfully');
116
- this.#logger.info('');
117
- }
118
- catch (error) {
119
- this.#logger.error('[Init] Initialization failed', error);
120
- // Cleanup on failure
121
- await this.cleanup();
122
- throw error;
123
- }
124
- }
125
- /**
126
- * Set goal for goal-directed mode
127
- */
128
- async setGoal(goal) {
129
- if (!this.#initialized) {
130
- throw new AgentStatusError('Agent not initialized');
131
- }
132
- const state = await this.#stateManager.getState();
133
- if (!state) {
134
- throw new AgentStatusError('State is null');
135
- }
136
- if (state.currentMode !== 'idle') {
137
- throw new AgentStatusError(`Cannot set goal while agent is ${state.currentMode}`);
138
- }
139
- this.#logger.info(`[Goal] Setting goal: ${goal}`);
140
- await this.#stateManager.updateState({
141
- currentGoal: goal,
142
- currentMode: 'planning',
143
- });
144
- this.#logger.info('[Goal] ✅ Goal set');
145
- }
146
- /**
147
- * Run agent (goal-directed mode)
148
- */
149
- async run() {
150
- if (!this.#initialized) {
151
- throw new AgentStatusError('Agent not initialized');
152
- }
153
- const state = await this.#stateManager.getState();
154
- if (!state) {
155
- throw new AgentStatusError('State is null');
156
- }
157
- if (!state.currentGoal) {
158
- throw new AgentStatusError('No goal set');
159
- }
160
- this.#logger.info('');
161
- this.#logger.info('🚀 Starting execution...');
162
- this.#logger.info('');
163
- try {
164
- // 1. Goal decomposition
165
- this.#logger.info('[Run] Phase 1: Decomposing goal...');
166
- const decomposition = await this.#goalDecomposer.decompose(state.currentGoal);
167
- this.#logger.info(`[Run] ✅ Generated ${decomposition.tasks.length} task(s)`);
168
- // Log the high-level plan
169
- if (decomposition.highLevelPlan) {
170
- this.#logger.info('[Run] High-level plan:');
171
- this.#logger.info(decomposition.highLevelPlan);
172
- }
173
- // 2. Safety check
174
- this.#logger.info('[Run] Phase 2: Checking safety...');
175
- const safetyResult = await this.#safetyChecker.checkTasks(decomposition.tasks);
176
- if (!safetyResult.safe) {
177
- const violations = safetyResult.failed.map((f) => f.message).join(', ');
178
- throw new SafetyViolationError(`Safety check failed: ${violations}`);
179
- }
180
- this.#logger.info('[Run] ✅ Safety checks passed');
181
- // 3. Create plan
182
- this.#logger.info('[Run] Phase 3: Creating execution plan...');
183
- const plan = this.#taskPlanner.createPlan(state.currentGoal, decomposition.tasks);
184
- this.#logger.info(`[Run] ✅ Plan created: ${plan.executionOrder.length} phase(s)`);
185
- this.#logger.info(`[Run] Estimated time: ${plan.estimatedTime}min`);
186
- if (plan.risks.length > 0) {
187
- this.#logger.warn(`[Run] ⚠️ Risks identified:`);
188
- for (const risk of plan.risks) {
189
- this.#logger.warn(` - ${risk}`);
190
- }
191
- }
192
- // 4. Request approval
193
- this.#logger.info('[Run] Phase 4: Requesting approval...');
194
- // Generate a unique plan ID using ULID
195
- const planId = `plan-${ulid()}`;
196
- // Create plan approval request
197
- const approvalRequest = {
198
- planId,
199
- goal: state.currentGoal,
200
- tasks: plan.tasks,
201
- estimatedTime: plan.estimatedTime,
202
- risks: plan.risks,
203
- executionOrder: plan.executionOrder,
204
- };
205
- // Request approval from user
206
- const decision = await this.#approvalManager.requestPlanApproval(approvalRequest);
207
- if (!decision.approved) {
208
- this.#logger.info(`[Run] ❌ Plan not approved: ${decision.reason || 'No reason provided'}`);
209
- await this.#stateManager.updateState({ currentMode: 'idle' });
210
- return;
211
- }
212
- this.#logger.info('[Run] ✅ Plan approved');
213
- // 5. Save plan to working space if configured
214
- if (this.#workingSpace) {
215
- this.#logger.info('[Run] Saving plan to working space...');
216
- await this.#workingSpace.savePlan(plan);
217
- }
218
- // 6. Execute plan
219
- this.#logger.info('[Run] Phase 6: Executing plan...');
220
- this.#logger.info('');
221
- await this.executePlan(plan);
222
- // 6. Complete
223
- this.#logger.info('');
224
- this.#logger.info('✅ Execution complete');
225
- this.#logger.info('');
226
- await this.#stateManager.updateState({ currentMode: 'idle' });
227
- }
228
- catch (error) {
229
- this.#logger.error('[Run] Execution failed', error);
230
- await this.#stateManager.updateState({ currentMode: 'error-recovery' });
231
- throw error;
232
- }
233
- }
234
- /**
235
- * Run in continuous improvement mode
236
- */
237
- async runContinuous() {
238
- if (!this.#initialized) {
239
- throw new AgentStatusError('Agent not initialized');
240
- }
241
- const state = await this.#stateManager.getState();
242
- if (!state) {
243
- throw new AgentStatusError('State is null');
244
- }
245
- if (state.currentMode !== 'idle') {
246
- throw new AgentStatusError(`Cannot start continuous mode while agent is ${state.currentMode}`);
247
- }
248
- this.#logger.info('');
249
- this.#logger.info('🔄 Starting continuous improvement mode...');
250
- this.#logger.info('');
251
- await this.#stateManager.updateState({
252
- currentMode: 'executing',
253
- });
254
- // Create and start continuous loop
255
- this.#improvementLoop = createContinuousImprovementLoop(this.#context, this.#stateManager, this.#sessionId);
256
- try {
257
- await this.#improvementLoop.start();
258
- }
259
- catch (error) {
260
- this.#logger.error('[Continuous] Loop failed', error);
261
- throw error;
262
- }
263
- finally {
264
- await this.#stateManager.updateState({ currentMode: 'idle' });
265
- }
266
- }
267
- /**
268
- * Stop agent
269
- */
270
- async stop() {
271
- this.#logger.info('[Stop] Stopping agent...');
272
- // Stop continuous loop if running
273
- if (this.#improvementLoop?.isRunning()) {
274
- await this.#improvementLoop.stop();
275
- }
276
- // Cancel executing tasks
277
- this.#taskExecutor.cancelAll();
278
- await this.#stateManager.updateState({ currentMode: 'idle' });
279
- this.#logger.info('[Stop] ✅ Agent stopped');
280
- }
281
- /**
282
- * Cleanup and release resources
283
- */
284
- async cleanup() {
285
- this.#logger.info('[Cleanup] Cleaning up...');
286
- try {
287
- // Release session
288
- await release(this.#sessionId);
289
- // Log metrics
290
- const metrics = this.#metrics.getMetrics();
291
- this.#logger.info('[Cleanup] Metrics:', JSON.stringify(metrics, null, 2));
292
- this.#initialized = false;
293
- this.#logger.info('[Cleanup] ✅ Cleanup complete');
294
- }
295
- catch (error) {
296
- this.#logger.error('[Cleanup] Cleanup failed', error);
297
- }
298
- }
299
- /**
300
- * Execute a plan phase by phase
301
- */
302
- async executePlan(plan) {
303
- let completedTasks = 0;
304
- let failedTasks = 0;
305
- // Add all tasks to the queue first
306
- await this.#stateManager.updateState({
307
- taskQueue: plan.tasks,
308
- });
309
- // Execute each phase
310
- for (let i = 0; i < plan.executionOrder.length; i++) {
311
- const phase = plan.executionOrder[i];
312
- this.#logger.info(`[Run] Phase ${i + 1}/${plan.executionOrder.length} (${phase.length} task(s))`);
313
- // Execute tasks in phase (could be parallel in future)
314
- for (const taskId of phase) {
315
- const task = plan.tasks.find((t) => t.id === taskId);
316
- if (!task) {
317
- this.#logger.warn(`[Run] Task not found: ${taskId}`);
318
- continue;
319
- }
320
- // Check for interrupts
321
- if (this.#interruptHandler.shouldStop()) {
322
- this.#logger.info(`[Run] ⚠️ Interrupted: ${this.#interruptHandler.getReason()}`);
323
- return;
324
- }
325
- // Execute task
326
- const success = await this.executeTask(task);
327
- if (success) {
328
- completedTasks++;
329
- }
330
- else {
331
- failedTasks++;
332
- // Stop execution on task failure to prevent cascading errors
333
- const error = new Error(`Task "${task.title}" failed, stopping execution to prevent cascading errors`);
334
- this.#logger.error('[Run]', error);
335
- throw error;
336
- }
337
- }
338
- }
339
- this.#logger.info(`[Run] Execution summary: ${completedTasks} succeeded, ${failedTasks} failed`);
340
- }
341
- /**
342
- * Execute a single task
343
- */
344
- async executeTask(task) {
345
- this.#logger.info(`[Run] → ${task.title}`);
346
- try {
347
- // Get current state
348
- const state = await this.#stateManager.getState();
349
- if (!state) {
350
- this.#logger.error('[Run]', new Error('State is null'));
351
- return false;
352
- }
353
- // Request approval if needed
354
- const needsApproval = this.#approvalManager.requiresApproval(task);
355
- if (needsApproval) {
356
- const decision = await this.#approvalManager.requestApproval(task);
357
- if (!decision.approved) {
358
- this.#logger.info(`[Run] ⏭️ Task skipped (not approved): ${decision.reason || 'No reason provided'}`);
359
- return false;
360
- }
361
- }
362
- // Execute task
363
- const taskStartTime = Date.now();
364
- const result = await this.#taskExecutor.execute(task, state);
365
- const actualTime = (Date.now() - taskStartTime) / 60000; // Convert to minutes
366
- if (result.success) {
367
- this.#logger.info(`[Run] ✅ Task completed`);
368
- // Document completed task in working space if configured
369
- if (this.#workingSpace) {
370
- // Convert result data to readable string (handle objects, strings, primitives)
371
- let resultText = result.output;
372
- if (!resultText) {
373
- if (result.data !== null && result.data !== undefined) {
374
- if (typeof result.data === 'string') {
375
- resultText = result.data;
376
- }
377
- else if (typeof result.data === 'object') {
378
- resultText = JSON.stringify(result.data, null, 2);
379
- }
380
- else {
381
- resultText = String(result.data);
382
- }
383
- }
384
- else {
385
- resultText = 'Task completed successfully';
386
- }
387
- }
388
- await this.#workingSpace.documentCompletedTask(task, resultText);
389
- }
390
- // Move task from queue to completed
391
- await this.#stateManager.moveTask(task.id, 'queue', 'completed');
392
- // Add to history
393
- await this.#taskHistory.add({
394
- taskId: task.id,
395
- taskType: task.type,
396
- success: true,
397
- duration: Date.now() - taskStartTime,
398
- estimatedTime: task.estimatedTime,
399
- actualTime,
400
- timestamp: Date.now(),
401
- });
402
- return true;
403
- }
404
- else {
405
- const errorMsg = result.error || 'Unknown error';
406
- this.#logger.error('[Run]', new Error(`Task failed: ${errorMsg}`));
407
- // Move task from queue to failed
408
- await this.#stateManager.moveTask(task.id, 'queue', 'failed');
409
- return false;
410
- }
411
- }
412
- catch (error) {
413
- this.#logger.error('[Run]', error);
414
- // Move task from queue to failed
415
- await this.#stateManager.moveTask(task.id, 'queue', 'failed');
416
- return false;
417
- }
418
- }
419
- /**
420
- * Generate unique session ID
421
- */
422
- generateSessionId() {
423
- return `agent-${ulid()}`;
424
- }
425
- /**
426
- * Get current state
427
- */
428
- async getState() {
429
- return await this.#stateManager.getState();
430
- }
431
- /**
432
- * Get metrics
433
- */
434
- getMetrics() {
435
- return this.#metrics.getMetrics();
436
- }
437
- }
438
- //# sourceMappingURL=orchestrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/agent/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1,199 +0,0 @@
1
- /**
2
- * Constants for agent planner
3
- */
4
- const PLANNER_CONSTANTS = {
5
- /** Maximum number of dependencies before a task is flagged as risky */
6
- MAX_DEPENDENCIES: 5,
7
- /** Time threshold (in minutes) for classifying a task as "long-running" */
8
- LONG_TASK_MINUTES: 120,
9
- /** File count threshold for classifying a task as "file-heavy" */
10
- FILE_HEAVY_THRESHOLD: 10,
11
- /** Priority value that indicates a high-priority task */
12
- HIGH_PRIORITY: 800,
13
- /** Priority value that indicates a critical task */
14
- CRITICAL_PRIORITY: 1000,
15
- };
16
- /**
17
- * Resolve task dependencies
18
- */
19
- function resolveDependencies(tasks, context) {
20
- const taskMap = new Map(tasks.map((t) => [t.id, t]));
21
- const resolved = tasks.map((task) => {
22
- // Dependencies can be either IDs or titles
23
- // If all dependencies are valid task IDs, use them as-is
24
- // Otherwise, convert titles to IDs
25
- const depIds = [];
26
- for (const dep of task.dependencies) {
27
- // Check if this is already a task ID (O(1) lookup)
28
- const isTaskId = taskMap.has(dep);
29
- if (isTaskId) {
30
- // It's already an ID, use it directly
31
- depIds.push(dep);
32
- }
33
- else {
34
- // It's a title, find the corresponding task ID
35
- const depTask = tasks.find((t) => t.title === dep);
36
- if (depTask) {
37
- depIds.push(depTask.id);
38
- }
39
- else {
40
- context.logger.warn(`[Planner] Dependency not found: ${dep}`);
41
- }
42
- }
43
- }
44
- return {
45
- ...task,
46
- dependencies: depIds,
47
- };
48
- });
49
- return resolved;
50
- }
51
- /**
52
- * Create execution phases using topological sort
53
- * Tasks in each phase can be executed in parallel
54
- */
55
- function createExecutionPhases(tasks, _context) {
56
- const phases = [];
57
- const completed = new Set();
58
- const _taskMap = new Map(tasks.map((t) => [t.id, t]));
59
- // Keep processing until all tasks are assigned
60
- while (completed.size < tasks.length) {
61
- const readyTasks = [];
62
- // Find all tasks whose dependencies are met
63
- for (const task of tasks) {
64
- if (completed.has(task.id))
65
- continue;
66
- // Check if all dependencies are met
67
- // Note: task.dependencies should be task IDs at this point
68
- const depsMet = task.dependencies.every((depId) => completed.has(depId));
69
- if (depsMet) {
70
- readyTasks.push(task.id);
71
- }
72
- }
73
- if (readyTasks.length === 0) {
74
- // Circular dependency or missing dependency - throw error instead of returning partial plan
75
- const remainingTasks = tasks.filter((t) => !completed.has(t.id)).map((t) => `${t.title} (deps: ${t.dependencies.join(', ')})`);
76
- throw new Error(`Circular dependency detected or missing dependencies. Remaining tasks: ${remainingTasks.join(', ')}`);
77
- }
78
- // Add to phases and mark as completed
79
- phases.push(readyTasks);
80
- for (const id of readyTasks) {
81
- completed.add(id);
82
- }
83
- }
84
- return phases;
85
- }
86
- /**
87
- * Identify potential risks in the plan
88
- */
89
- function identifyRisks(tasks) {
90
- const risks = [];
91
- // Check for tasks with many dependencies
92
- for (const task of tasks) {
93
- if (task.dependencies.length > PLANNER_CONSTANTS.MAX_DEPENDENCIES) {
94
- risks.push(`Task "${task.title}" has ${task.dependencies.length} dependencies - could become blocked`);
95
- }
96
- }
97
- // Check for long-running tasks
98
- const longTasks = tasks.filter((t) => t.estimatedTime > PLANNER_CONSTANTS.LONG_TASK_MINUTES);
99
- if (longTasks.length > 0) {
100
- risks.push(`${longTasks.length} tasks have long estimated time (>2 hours)`);
101
- }
102
- // Check for high-priority tasks with high complexity
103
- const riskyTasks = tasks.filter((t) => t.priority >= PLANNER_CONSTANTS.HIGH_PRIORITY && t.complexity === 'high');
104
- if (riskyTasks.length > 0) {
105
- risks.push(`${riskyTasks.length} high-priority, high-complexity tasks`);
106
- }
107
- // Check for tasks affecting many files
108
- const fileHeavyTasks = tasks.filter((t) => t.files.length > PLANNER_CONSTANTS.FILE_HEAVY_THRESHOLD);
109
- if (fileHeavyTasks.length > 0) {
110
- risks.push(`${fileHeavyTasks.length} tasks affect >10 files - potential for merge conflicts`);
111
- }
112
- // Check for many critical tasks
113
- const criticalTasks = tasks.filter((t) => t.priority === PLANNER_CONSTANTS.CRITICAL_PRIORITY);
114
- if (criticalTasks.length > 3) {
115
- risks.push(`${criticalTasks.length} critical-priority tasks - consider prioritizing`);
116
- }
117
- return risks;
118
- }
119
- /**
120
- * Generate high-level plan description
121
- */
122
- function generateHighLevelPlan(goal, tasks, context) {
123
- const lines = [];
124
- lines.push(`**Goal:** ${goal}`);
125
- lines.push('');
126
- lines.push(`**Overview:** This goal will be achieved through ${tasks.length} tasks organized into logical phases.`);
127
- lines.push('');
128
- // Group by type
129
- const byType = new Map();
130
- for (const task of tasks) {
131
- if (!byType.has(task.type)) {
132
- byType.set(task.type, []);
133
- }
134
- byType.get(task.type)?.push(task);
135
- }
136
- // Show task breakdown
137
- lines.push(`**Task Breakdown:**`);
138
- for (const [type, typeTasks] of byType) {
139
- lines.push(`- ${typeTasks.length} ${type} task(s)`);
140
- }
141
- lines.push('');
142
- // Show phases (simplified)
143
- const phases = createExecutionPhases(tasks, context);
144
- lines.push(`**Execution:** ${phases.length} phases`);
145
- for (let i = 0; i < phases.length; i++) {
146
- const phaseTasks = phases[i].map((id) => tasks.find((t) => t.id === id)?.title);
147
- lines.push(`- Phase ${i + 1}: ${phaseTasks.join(', ')}`);
148
- }
149
- return lines.join('\n');
150
- }
151
- /**
152
- * Extract dependency graph as list of edges
153
- */
154
- function extractDependencyGraph(tasks) {
155
- const dependencies = [];
156
- for (const task of tasks) {
157
- if (task.dependencies.length > 0) {
158
- dependencies.push({
159
- taskId: task.id,
160
- dependsOn: task.dependencies,
161
- type: 'hard',
162
- });
163
- }
164
- }
165
- return dependencies;
166
- }
167
- export function createTaskPlanner(context) {
168
- return {
169
- createPlan(goal, tasks) {
170
- context.logger.info(`[Planner] Creating plan with ${tasks.length} tasks`);
171
- // Resolve dependencies
172
- const withDependencies = resolveDependencies(tasks, context);
173
- // Create execution phases (topological sort)
174
- const executionOrder = createExecutionPhases(withDependencies, context);
175
- // Estimate total time
176
- const estimatedTime = withDependencies.reduce((sum, task) => sum + task.estimatedTime, 0);
177
- // Identify risks
178
- const risks = identifyRisks(withDependencies);
179
- // Generate high-level plan text
180
- const highLevelPlan = generateHighLevelPlan(goal, withDependencies, context);
181
- // Convert dependency array to Record format
182
- const dependencyGraph = {};
183
- const depArray = extractDependencyGraph(withDependencies);
184
- for (const dep of depArray) {
185
- dependencyGraph[dep.taskId] = dep.dependsOn;
186
- }
187
- return {
188
- goal,
189
- highLevelPlan,
190
- tasks: withDependencies,
191
- executionOrder,
192
- estimatedTime,
193
- risks,
194
- dependencies: dependencyGraph,
195
- };
196
- },
197
- };
198
- }
199
- //# sourceMappingURL=planner.js.map