@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.
Files changed (343) hide show
  1. package/dist/bin.cjs +143854 -0
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +9201 -9195
  7. package/dist/program.d.ts +3 -0
  8. package/dist/program.d.ts.map +1 -0
  9. package/package.json +6 -7
  10. package/cli.mjs +0 -2
  11. package/dist/ApiProviderConfig.js +0 -57
  12. package/dist/ApiProviderConfig.js.map +0 -1
  13. package/dist/ApiProviderConfig.test.js +0 -278
  14. package/dist/ApiProviderConfig.test.js.map +0 -1
  15. package/dist/agent/advanced-discovery.js +0 -604
  16. package/dist/agent/advanced-discovery.js.map +0 -1
  17. package/dist/agent/config.js +0 -139
  18. package/dist/agent/config.js.map +0 -1
  19. package/dist/agent/config.test.js +0 -140
  20. package/dist/agent/config.test.js.map +0 -1
  21. package/dist/agent/constants.js +0 -172
  22. package/dist/agent/constants.js.map +0 -1
  23. package/dist/agent/constants.test.js +0 -132
  24. package/dist/agent/constants.test.js.map +0 -1
  25. package/dist/agent/debug-logger.js +0 -281
  26. package/dist/agent/debug-logger.js.map +0 -1
  27. package/dist/agent/debug-logger.test.js +0 -294
  28. package/dist/agent/debug-logger.test.js.map +0 -1
  29. package/dist/agent/error-handling.js +0 -114
  30. package/dist/agent/error-handling.js.map +0 -1
  31. package/dist/agent/error-handling.test.js +0 -191
  32. package/dist/agent/error-handling.test.js.map +0 -1
  33. package/dist/agent/errors.js +0 -301
  34. package/dist/agent/errors.js.map +0 -1
  35. package/dist/agent/executor.js +0 -206
  36. package/dist/agent/executor.js.map +0 -1
  37. package/dist/agent/executor.test.js +0 -228
  38. package/dist/agent/executor.test.js.map +0 -1
  39. package/dist/agent/goal-decomposer.js +0 -281
  40. package/dist/agent/goal-decomposer.js.map +0 -1
  41. package/dist/agent/goal-decomposer.test.js +0 -225
  42. package/dist/agent/goal-decomposer.test.js.map +0 -1
  43. package/dist/agent/health-monitor.js +0 -89
  44. package/dist/agent/health-monitor.js.map +0 -1
  45. package/dist/agent/improvement-loop.js +0 -177
  46. package/dist/agent/improvement-loop.js.map +0 -1
  47. package/dist/agent/index.js +0 -38
  48. package/dist/agent/index.js.map +0 -1
  49. package/dist/agent/metrics.js +0 -158
  50. package/dist/agent/metrics.js.map +0 -1
  51. package/dist/agent/metrics.test.js +0 -311
  52. package/dist/agent/metrics.test.js.map +0 -1
  53. package/dist/agent/orchestrator.js +0 -438
  54. package/dist/agent/orchestrator.js.map +0 -1
  55. package/dist/agent/planner.js +0 -199
  56. package/dist/agent/planner.js.map +0 -1
  57. package/dist/agent/planner.test.js +0 -135
  58. package/dist/agent/planner.test.js.map +0 -1
  59. package/dist/agent/progress.js +0 -298
  60. package/dist/agent/progress.js.map +0 -1
  61. package/dist/agent/progress.test.js +0 -255
  62. package/dist/agent/progress.test.js.map +0 -1
  63. package/dist/agent/resource-monitor.js +0 -114
  64. package/dist/agent/resource-monitor.js.map +0 -1
  65. package/dist/agent/safety/approval.js +0 -178
  66. package/dist/agent/safety/approval.js.map +0 -1
  67. package/dist/agent/safety/approval.test.js +0 -142
  68. package/dist/agent/safety/approval.test.js.map +0 -1
  69. package/dist/agent/safety/checks.js +0 -152
  70. package/dist/agent/safety/checks.js.map +0 -1
  71. package/dist/agent/safety/checks.test.js +0 -89
  72. package/dist/agent/safety/checks.test.js.map +0 -1
  73. package/dist/agent/safety/interrupt.js +0 -92
  74. package/dist/agent/safety/interrupt.js.map +0 -1
  75. package/dist/agent/safety/interrupt.test.js +0 -53
  76. package/dist/agent/safety/interrupt.test.js.map +0 -1
  77. package/dist/agent/session.js +0 -117
  78. package/dist/agent/session.js.map +0 -1
  79. package/dist/agent/session.test.js +0 -213
  80. package/dist/agent/session.test.js.map +0 -1
  81. package/dist/agent/state-manager.js +0 -287
  82. package/dist/agent/state-manager.js.map +0 -1
  83. package/dist/agent/task-discovery.js +0 -433
  84. package/dist/agent/task-discovery.js.map +0 -1
  85. package/dist/agent/task-discovery.test.js +0 -40
  86. package/dist/agent/task-discovery.test.js.map +0 -1
  87. package/dist/agent/task-history.js +0 -128
  88. package/dist/agent/task-history.js.map +0 -1
  89. package/dist/agent/task-prioritizer.js +0 -286
  90. package/dist/agent/task-prioritizer.js.map +0 -1
  91. package/dist/agent/test-fixtures.js +0 -112
  92. package/dist/agent/test-fixtures.js.map +0 -1
  93. package/dist/agent/types.js +0 -15
  94. package/dist/agent/types.js.map +0 -1
  95. package/dist/agent/workflow-adapter.js +0 -219
  96. package/dist/agent/workflow-adapter.js.map +0 -1
  97. package/dist/agent/workflow-adapter.test.js +0 -11
  98. package/dist/agent/workflow-adapter.test.js.map +0 -1
  99. package/dist/agent/working-dir-discovery.js +0 -54
  100. package/dist/agent/working-dir-discovery.js.map +0 -1
  101. package/dist/agent/working-space.js +0 -484
  102. package/dist/agent/working-space.js.map +0 -1
  103. package/dist/agent/working-space.test.js +0 -436
  104. package/dist/agent/working-space.test.js.map +0 -1
  105. package/dist/api.js +0 -279
  106. package/dist/api.js.map +0 -1
  107. package/dist/builtin-commands.js +0 -20
  108. package/dist/builtin-commands.js.map +0 -1
  109. package/dist/commandSummarizer.js +0 -96
  110. package/dist/commandSummarizer.js.map +0 -1
  111. package/dist/commands/__tests__/command-detection.integration.test.js +0 -238
  112. package/dist/commands/__tests__/command-detection.integration.test.js.map +0 -1
  113. package/dist/commands/__tests__/script-generator.integration.test.js +0 -271
  114. package/dist/commands/__tests__/script-generator.integration.test.js.map +0 -1
  115. package/dist/commands/agent.js +0 -218
  116. package/dist/commands/agent.js.map +0 -1
  117. package/dist/commands/code.js +0 -102
  118. package/dist/commands/code.js.map +0 -1
  119. package/dist/commands/command.constants.js +0 -13
  120. package/dist/commands/command.constants.js.map +0 -1
  121. package/dist/commands/commit.js +0 -17
  122. package/dist/commands/commit.js.map +0 -1
  123. package/dist/commands/fix.js +0 -17
  124. package/dist/commands/fix.js.map +0 -1
  125. package/dist/commands/init.js +0 -501
  126. package/dist/commands/init.js.map +0 -1
  127. package/dist/commands/mcp-server.js +0 -122
  128. package/dist/commands/mcp-server.js.map +0 -1
  129. package/dist/commands/memory.js +0 -410
  130. package/dist/commands/memory.js.map +0 -1
  131. package/dist/commands/memory.test.js +0 -453
  132. package/dist/commands/memory.test.js.map +0 -1
  133. package/dist/commands/meta.js +0 -142
  134. package/dist/commands/meta.js.map +0 -1
  135. package/dist/commands/plan.js +0 -39
  136. package/dist/commands/plan.js.map +0 -1
  137. package/dist/commands/pr.js +0 -14
  138. package/dist/commands/pr.js.map +0 -1
  139. package/dist/commands/review-json.test.js +0 -33
  140. package/dist/commands/review-json.test.js.map +0 -1
  141. package/dist/commands/review.js +0 -137
  142. package/dist/commands/review.js.map +0 -1
  143. package/dist/commands/review.usage.test.js +0 -41
  144. package/dist/commands/review.usage.test.js.map +0 -1
  145. package/dist/commands/run.js +0 -107
  146. package/dist/commands/run.js.map +0 -1
  147. package/dist/commands/skills.js +0 -175
  148. package/dist/commands/skills.js.map +0 -1
  149. package/dist/commands/task.js +0 -34
  150. package/dist/commands/task.js.map +0 -1
  151. package/dist/commands/workflow.js +0 -117
  152. package/dist/commands/workflow.js.map +0 -1
  153. package/dist/configPrompt.js +0 -39
  154. package/dist/configPrompt.js.map +0 -1
  155. package/dist/env.js +0 -22
  156. package/dist/env.js.map +0 -1
  157. package/dist/errors.js +0 -132
  158. package/dist/errors.js.map +0 -1
  159. package/dist/errors.test.js +0 -21
  160. package/dist/errors.test.js.map +0 -1
  161. package/dist/file-attachments.js +0 -77
  162. package/dist/file-attachments.js.map +0 -1
  163. package/dist/file-attachments.test.js +0 -214
  164. package/dist/file-attachments.test.js.map +0 -1
  165. package/dist/getModel.js +0 -229
  166. package/dist/getModel.js.map +0 -1
  167. package/dist/getModel.test.js +0 -67
  168. package/dist/getModel.test.js.map +0 -1
  169. package/dist/getProviderOptions.js +0 -58
  170. package/dist/getProviderOptions.js.map +0 -1
  171. package/dist/git-operations.js +0 -363
  172. package/dist/git-operations.js.map +0 -1
  173. package/dist/git-operations.test.js +0 -81
  174. package/dist/git-operations.test.js.map +0 -1
  175. package/dist/index.js.map +0 -1
  176. package/dist/logger.js +0 -41
  177. package/dist/logger.js.map +0 -1
  178. package/dist/mcp/client.js +0 -11
  179. package/dist/mcp/client.js.map +0 -1
  180. package/dist/mcp/error-scenarios.test.js +0 -206
  181. package/dist/mcp/error-scenarios.test.js.map +0 -1
  182. package/dist/mcp/errors.js +0 -63
  183. package/dist/mcp/errors.js.map +0 -1
  184. package/dist/mcp/index.js +0 -9
  185. package/dist/mcp/index.js.map +0 -1
  186. package/dist/mcp/manager.js +0 -231
  187. package/dist/mcp/manager.js.map +0 -1
  188. package/dist/mcp/manager.test.js +0 -40
  189. package/dist/mcp/manager.test.js.map +0 -1
  190. package/dist/mcp/sdk-client.js +0 -166
  191. package/dist/mcp/sdk-client.js.map +0 -1
  192. package/dist/mcp/shared-types.js +0 -3
  193. package/dist/mcp/shared-types.js.map +0 -1
  194. package/dist/mcp/tools-integration.test.js +0 -198
  195. package/dist/mcp/tools-integration.test.js.map +0 -1
  196. package/dist/mcp/tools.js +0 -60
  197. package/dist/mcp/tools.js.map +0 -1
  198. package/dist/mcp/transport.js +0 -257
  199. package/dist/mcp/transport.js.map +0 -1
  200. package/dist/mcp/types.js +0 -3
  201. package/dist/mcp/types.js.map +0 -1
  202. package/dist/mcp-server/index.js +0 -5
  203. package/dist/mcp-server/index.js.map +0 -1
  204. package/dist/mcp-server/plan-formatting.test.js +0 -74
  205. package/dist/mcp-server/plan-formatting.test.js.map +0 -1
  206. package/dist/mcp-server/sdk-server.js +0 -102
  207. package/dist/mcp-server/sdk-server.js.map +0 -1
  208. package/dist/mcp-server/sdk-server.test.js +0 -363
  209. package/dist/mcp-server/sdk-server.test.js.map +0 -1
  210. package/dist/mcp-server/tools.js +0 -785
  211. package/dist/mcp-server/tools.js.map +0 -1
  212. package/dist/mcp-server/types.js +0 -3
  213. package/dist/mcp-server/types.js.map +0 -1
  214. package/dist/options.js +0 -85
  215. package/dist/options.js.map +0 -1
  216. package/dist/options.test.js +0 -177
  217. package/dist/options.test.js.map +0 -1
  218. package/dist/prices.js +0 -61
  219. package/dist/prices.js.map +0 -1
  220. package/dist/prices.test.js +0 -148
  221. package/dist/prices.test.js.map +0 -1
  222. package/dist/runWorkflow.js +0 -313
  223. package/dist/runWorkflow.js.map +0 -1
  224. package/dist/script/__tests__/execution.integration.test.js +0 -274
  225. package/dist/script/__tests__/execution.integration.test.js.map +0 -1
  226. package/dist/script/__tests__/runner.test.js +0 -176
  227. package/dist/script/__tests__/runner.test.js.map +0 -1
  228. package/dist/script/__tests__/validator.test.js +0 -180
  229. package/dist/script/__tests__/validator.test.js.map +0 -1
  230. package/dist/script/executor.js +0 -127
  231. package/dist/script/executor.js.map +0 -1
  232. package/dist/script/index.js +0 -4
  233. package/dist/script/index.js.map +0 -1
  234. package/dist/script/runner.js +0 -258
  235. package/dist/script/runner.js.map +0 -1
  236. package/dist/skillIntegration.js +0 -46
  237. package/dist/skillIntegration.js.map +0 -1
  238. package/dist/skillIntegration.test.js +0 -128
  239. package/dist/skillIntegration.test.js.map +0 -1
  240. package/dist/test/utils.js +0 -200
  241. package/dist/test/utils.js.map +0 -1
  242. package/dist/test/workflow-fixtures.js +0 -120
  243. package/dist/test/workflow-fixtures.js.map +0 -1
  244. package/dist/tool-implementations.js +0 -521
  245. package/dist/tool-implementations.js.map +0 -1
  246. package/dist/tool-implementations.skill-tools.test.js +0 -106
  247. package/dist/tool-implementations.skill-tools.test.js.map +0 -1
  248. package/dist/tools/getTodoItem.js +0 -33
  249. package/dist/tools/getTodoItem.js.map +0 -1
  250. package/dist/tools/gitDiff.js +0 -108
  251. package/dist/tools/gitDiff.js.map +0 -1
  252. package/dist/tools/index.js +0 -8
  253. package/dist/tools/index.js.map +0 -1
  254. package/dist/tools/listMemoryTopics.js +0 -24
  255. package/dist/tools/listMemoryTopics.js.map +0 -1
  256. package/dist/tools/listTodoItems.js +0 -35
  257. package/dist/tools/listTodoItems.js.map +0 -1
  258. package/dist/tools/listTodoItems.test.js +0 -89
  259. package/dist/tools/listTodoItems.test.js.map +0 -1
  260. package/dist/tools/readMemory.js +0 -33
  261. package/dist/tools/readMemory.js.map +0 -1
  262. package/dist/tools/updateMemory.js +0 -62
  263. package/dist/tools/updateMemory.js.map +0 -1
  264. package/dist/tools/updateMemory.test.js +0 -109
  265. package/dist/tools/updateMemory.test.js.map +0 -1
  266. package/dist/tools/updateTodoItem.js +0 -31
  267. package/dist/tools/updateTodoItem.js.map +0 -1
  268. package/dist/tools/utils/diffLineNumbers.js +0 -178
  269. package/dist/tools/utils/diffLineNumbers.js.map +0 -1
  270. package/dist/utils/cacheControl.js +0 -59
  271. package/dist/utils/cacheControl.js.map +0 -1
  272. package/dist/utils/cacheControl.test.js +0 -128
  273. package/dist/utils/cacheControl.test.js.map +0 -1
  274. package/dist/utils/command.js +0 -50
  275. package/dist/utils/command.js.map +0 -1
  276. package/dist/utils/shell.js +0 -56
  277. package/dist/utils/shell.js.map +0 -1
  278. package/dist/utils/userInput.js +0 -47
  279. package/dist/utils/userInput.js.map +0 -1
  280. package/dist/workflow-tools.js +0 -21
  281. package/dist/workflow-tools.js.map +0 -1
  282. package/dist/workflows/agent-builder.js +0 -90
  283. package/dist/workflows/agent-builder.js.map +0 -1
  284. package/dist/workflows/agent-builder.test.js +0 -115
  285. package/dist/workflows/agent-builder.test.js.map +0 -1
  286. package/dist/workflows/code.workflow.js +0 -145
  287. package/dist/workflows/code.workflow.js.map +0 -1
  288. package/dist/workflows/commit.workflow.js +0 -111
  289. package/dist/workflows/commit.workflow.js.map +0 -1
  290. package/dist/workflows/commit.workflow.test.js +0 -141
  291. package/dist/workflows/commit.workflow.test.js.map +0 -1
  292. package/dist/workflows/fix.workflow.js +0 -172
  293. package/dist/workflows/fix.workflow.js.map +0 -1
  294. package/dist/workflows/fix.workflow.test.js +0 -137
  295. package/dist/workflows/fix.workflow.test.js.map +0 -1
  296. package/dist/workflows/git-file-tools.js +0 -408
  297. package/dist/workflows/git-file-tools.js.map +0 -1
  298. package/dist/workflows/index.js +0 -12
  299. package/dist/workflows/index.js.map +0 -1
  300. package/dist/workflows/init-interactive.workflow.js +0 -198
  301. package/dist/workflows/init-interactive.workflow.js.map +0 -1
  302. package/dist/workflows/init.workflow.js +0 -41
  303. package/dist/workflows/init.workflow.js.map +0 -1
  304. package/dist/workflows/meta.workflow.js +0 -107
  305. package/dist/workflows/meta.workflow.js.map +0 -1
  306. package/dist/workflows/plan.workflow.js +0 -275
  307. package/dist/workflows/plan.workflow.js.map +0 -1
  308. package/dist/workflows/plan.workflow.test.js +0 -419
  309. package/dist/workflows/plan.workflow.test.js.map +0 -1
  310. package/dist/workflows/pr.workflow.js +0 -54
  311. package/dist/workflows/pr.workflow.js.map +0 -1
  312. package/dist/workflows/pr.workflow.test.js +0 -98
  313. package/dist/workflows/pr.workflow.test.js.map +0 -1
  314. package/dist/workflows/prompts/coder.js +0 -85
  315. package/dist/workflows/prompts/coder.js.map +0 -1
  316. package/dist/workflows/prompts/commit.js +0 -16
  317. package/dist/workflows/prompts/commit.js.map +0 -1
  318. package/dist/workflows/prompts/fix.js +0 -44
  319. package/dist/workflows/prompts/fix.js.map +0 -1
  320. package/dist/workflows/prompts/index.js +0 -10
  321. package/dist/workflows/prompts/index.js.map +0 -1
  322. package/dist/workflows/prompts/init.js +0 -48
  323. package/dist/workflows/prompts/init.js.map +0 -1
  324. package/dist/workflows/prompts/meta.js +0 -17
  325. package/dist/workflows/prompts/meta.js.map +0 -1
  326. package/dist/workflows/prompts/plan.js +0 -212
  327. package/dist/workflows/prompts/plan.js.map +0 -1
  328. package/dist/workflows/prompts/pr.js +0 -15
  329. package/dist/workflows/prompts/pr.js.map +0 -1
  330. package/dist/workflows/prompts/review.js +0 -145
  331. package/dist/workflows/prompts/review.js.map +0 -1
  332. package/dist/workflows/prompts/shared.js +0 -93
  333. package/dist/workflows/prompts/shared.js.map +0 -1
  334. package/dist/workflows/review.workflow.js +0 -357
  335. package/dist/workflows/review.workflow.js.map +0 -1
  336. package/dist/workflows/task.workflow.js +0 -47
  337. package/dist/workflows/task.workflow.js.map +0 -1
  338. package/dist/workflows/testing/helper.js +0 -41
  339. package/dist/workflows/testing/helper.js.map +0 -1
  340. package/dist/workflows/workflow.utils.js +0 -351
  341. package/dist/workflows/workflow.utils.js.map +0 -1
  342. package/dist/workflows/workflow.utils.test.js +0 -45
  343. 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