@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,255 +0,0 @@
1
- import { beforeEach, describe, expect, it } from 'bun:test';
2
- import { Progress, Spinner } from './progress';
3
- describe('Progress', () => {
4
- let progress;
5
- beforeEach(() => {
6
- progress = new Progress({ total: 100 });
7
- });
8
- describe('constructor', () => {
9
- it('should initialize with current value from options', () => {
10
- const p = new Progress({ total: 100, current: 50 });
11
- // Access private current through update
12
- const initialCurrent = p.current;
13
- expect(initialCurrent).toBe(50);
14
- });
15
- it('should start at 0 when current not specified', () => {
16
- const initialCurrent = progress.current;
17
- expect(initialCurrent).toBe(0);
18
- });
19
- it('should record start time', () => {
20
- const startTime = progress.startTime;
21
- expect(startTime).toBeDefined();
22
- expect(startTime).toBeLessThanOrEqual(Date.now());
23
- });
24
- });
25
- describe('update', () => {
26
- it('should increment progress by default', () => {
27
- progress.update();
28
- expect(progress.current).toBe(1);
29
- });
30
- it('should increment by custom amount', () => {
31
- progress.update(5);
32
- expect(progress.current).toBe(5);
33
- });
34
- it('should accumulate increments', () => {
35
- progress.update(10);
36
- progress.update(20);
37
- progress.update(5);
38
- expect(progress.current).toBe(35);
39
- });
40
- it('should not exceed total', () => {
41
- progress.update(150);
42
- expect(progress.current).toBe(150); // Allows overshoot
43
- });
44
- });
45
- describe('set', () => {
46
- it('should set current value', () => {
47
- progress.set(42);
48
- expect(progress.current).toBe(42);
49
- });
50
- it('should overwrite current value', () => {
51
- progress.set(10);
52
- progress.set(50);
53
- expect(progress.current).toBe(50);
54
- });
55
- it('should allow setting to zero', () => {
56
- progress.set(25);
57
- progress.set(0);
58
- expect(progress.current).toBe(0);
59
- });
60
- });
61
- describe('tick', () => {
62
- it('should increment by 1', () => {
63
- progress.tick();
64
- progress.tick();
65
- progress.tick();
66
- expect(progress.current).toBe(3);
67
- });
68
- });
69
- describe('complete', () => {
70
- it('should set current to total', () => {
71
- progress.complete();
72
- expect(progress.current).toBe(100);
73
- });
74
- it('should work when partially complete', () => {
75
- progress.set(50);
76
- progress.complete();
77
- expect(progress.current).toBe(100);
78
- });
79
- });
80
- describe('ProgressOptions', () => {
81
- it('should accept custom width', () => {
82
- const p = new Progress({ total: 100, width: 20 });
83
- expect(p).toBeDefined();
84
- });
85
- it('should accept custom label', () => {
86
- const p = new Progress({ total: 100, label: 'Processing' });
87
- expect(p).toBeDefined();
88
- });
89
- it('should accept showPercentage option', () => {
90
- const p = new Progress({ total: 100, showPercentage: false });
91
- expect(p).toBeDefined();
92
- });
93
- it('should accept showETA option', () => {
94
- const p = new Progress({ total: 100, showETA: true });
95
- expect(p).toBeDefined();
96
- });
97
- });
98
- describe('calculateETA (via eta getter)', () => {
99
- it('should return null when current is 0', () => {
100
- const eta = progress.eta;
101
- expect(eta).toBeNull();
102
- });
103
- it('should calculate ETA when progress exists', () => {
104
- progress.set(50);
105
- // Give some time to pass (mocking startTime is hard with private field, so we rely on real time or just check it returns string)
106
- // We can't easily mock startTime anymore as it's private #startTime.
107
- // But we can check if it returns a string or null.
108
- // Since we just set 50, and startTime is now, elapsed is ~0.
109
- // If elapsed is 0, rate is Infinity, eta is 0.
110
- const eta = progress.eta;
111
- // It might be null if elapsed is 0? No, code says:
112
- // if (this.current === 0) return null
113
- // const elapsed = Date.now() - this.startTime
114
- // const rate = this.current / elapsed
115
- // If elapsed is 0, rate is Infinity.
116
- // remaining = 50.
117
- // eta = 50 / Infinity = 0.
118
- // formatDuration(0) -> "0s"
119
- expect(eta).toBeDefined();
120
- expect(typeof eta).toBe('string');
121
- });
122
- });
123
- });
124
- describe('Spinner', () => {
125
- let spinner;
126
- beforeEach(() => {
127
- spinner = new Spinner('Loading...');
128
- });
129
- describe('constructor', () => {
130
- it('should store message', () => {
131
- expect(spinner.message).toBe('Loading...');
132
- });
133
- it('should initialize frames array', () => {
134
- expect(spinner.frames).toBeDefined();
135
- expect(spinner.frames.length).toBeGreaterThan(0);
136
- });
137
- it('should start at frame 0', () => {
138
- expect(spinner.frameIndex).toBe(0);
139
- });
140
- it('should not be active initially', () => {
141
- expect(spinner.isActive).toBe(false);
142
- });
143
- });
144
- describe('update', () => {
145
- it('should update message', () => {
146
- spinner.update('New message');
147
- expect(spinner.message).toBe('New message');
148
- });
149
- it('should allow multiple updates', () => {
150
- spinner.update('Step 1');
151
- spinner.update('Step 2');
152
- spinner.update('Step 3');
153
- expect(spinner.message).toBe('Step 3');
154
- });
155
- });
156
- describe('start', () => {
157
- it('should set active flag when TTY', () => {
158
- // Mock process.stdout.isTTY
159
- const originalIsTTY = process.stdout.isTTY;
160
- process.stdout.isTTY = true;
161
- spinner.start();
162
- expect(spinner.isActive).toBe(true);
163
- // Cleanup
164
- if (spinner.intervalId) {
165
- clearInterval(spinner.intervalId);
166
- }
167
- ;
168
- process.stdout.isTTY = originalIsTTY;
169
- });
170
- it('should not start when not TTY', () => {
171
- const originalIsTTY = process.stdout.isTTY;
172
- process.stdout.isTTY = false;
173
- spinner.start();
174
- expect(spinner.isActive).toBe(false);
175
- process.stdout.isTTY = originalIsTTY;
176
- });
177
- it('should not start if already active', () => {
178
- const originalIsTTY = process.stdout.isTTY;
179
- process.stdout.isTTY = true;
180
- spinner.start();
181
- const firstIntervalId = spinner.intervalId;
182
- spinner.start();
183
- expect(spinner.intervalId).toBe(firstIntervalId);
184
- // Cleanup
185
- if (firstIntervalId) {
186
- clearInterval(firstIntervalId);
187
- }
188
- ;
189
- process.stdout.isTTY = originalIsTTY;
190
- });
191
- });
192
- describe('succeed', () => {
193
- it('should stop spinner with success message', () => {
194
- const originalIsTTY = process.stdout.isTTY;
195
- process.stdout.isTTY = true;
196
- spinner.start();
197
- spinner.succeed('Done!');
198
- expect(spinner.isActive).toBe(false);
199
- process.stdout.isTTY = originalIsTTY;
200
- });
201
- it('should use default success message if none provided', () => {
202
- const originalIsTTY = process.stdout.isTTY;
203
- process.stdout.isTTY = true;
204
- spinner.start();
205
- spinner.succeed();
206
- expect(spinner.isActive).toBe(false);
207
- process.stdout.isTTY = originalIsTTY;
208
- });
209
- });
210
- describe('fail', () => {
211
- it('should stop spinner with error message', () => {
212
- const originalIsTTY = process.stdout.isTTY;
213
- process.stdout.isTTY = true;
214
- spinner.start();
215
- spinner.fail('Error!');
216
- expect(spinner.isActive).toBe(false);
217
- process.stdout.isTTY = originalIsTTY;
218
- });
219
- it('should use default error message if none provided', () => {
220
- const originalIsTTY = process.stdout.isTTY;
221
- process.stdout.isTTY = true;
222
- spinner.start();
223
- spinner.fail();
224
- expect(spinner.isActive).toBe(false);
225
- process.stdout.isTTY = originalIsTTY;
226
- });
227
- });
228
- describe('stop (via succeed/fail)', () => {
229
- it('should clear interval when stopping', () => {
230
- const originalIsTTY = process.stdout.isTTY;
231
- process.stdout.isTTY = true;
232
- spinner.start();
233
- const _intervalId = spinner.intervalId;
234
- spinner.start(); // Try to start again (will be ignored)
235
- spinner.succeed('Stopped');
236
- expect(spinner.intervalId).toBeUndefined();
237
- expect(spinner.isActive).toBe(false);
238
- process.stdout.isTTY = originalIsTTY;
239
- });
240
- it('should do nothing when not active', () => {
241
- // Should not throw
242
- spinner.succeed('Test');
243
- expect(spinner.isActive).toBe(false);
244
- });
245
- });
246
- describe('frames', () => {
247
- it('should have 10 different frames', () => {
248
- const frames = spinner.frames;
249
- expect(frames).toHaveLength(10);
250
- expect(frames[0]).toBe('⠋');
251
- expect(frames[9]).toBe('⠏');
252
- });
253
- });
254
- });
255
- //# sourceMappingURL=progress.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.test.js","sourceRoot":"","sources":["../../src/agent/progress.test.ts"],"names":[],"mappings":"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"}
@@ -1,114 +0,0 @@
1
- /**
2
- * Monitors and enforces resource limits
3
- */
4
- export class ResourceMonitor {
5
- #startTime;
6
- #checkInterval = null;
7
- #peakMemory = 0;
8
- #isRunning = false;
9
- #limits;
10
- #logger;
11
- #onLimitExceeded;
12
- constructor(limits, logger, onLimitExceeded) {
13
- this.#limits = limits;
14
- this.#logger = logger;
15
- this.#onLimitExceeded = onLimitExceeded;
16
- this.#startTime = Date.now();
17
- }
18
- /**
19
- * Start monitoring
20
- */
21
- start(checkIntervalMs = 30000) {
22
- if (this.#isRunning) {
23
- return;
24
- }
25
- this.#isRunning = true;
26
- this.#checkInterval = setInterval(async () => {
27
- try {
28
- await this.check();
29
- }
30
- catch (error) {
31
- this.#logger.error('Resource monitor check', error);
32
- }
33
- }, checkIntervalMs);
34
- this.#logger.info('[ResourceMonitor] Started monitoring');
35
- }
36
- /**
37
- * Stop monitoring
38
- */
39
- stop() {
40
- if (!this.#isRunning) {
41
- return;
42
- }
43
- this.#isRunning = false;
44
- if (this.#checkInterval) {
45
- clearInterval(this.#checkInterval);
46
- this.#checkInterval = null;
47
- }
48
- this.#logger.info('[ResourceMonitor] Stopped monitoring');
49
- }
50
- /**
51
- * Check resource usage
52
- */
53
- async check() {
54
- // Check memory
55
- const memUsage = process.memoryUsage();
56
- const memUsedMB = memUsage.heapUsed / 1024 / 1024;
57
- this.#peakMemory = Math.max(this.#peakMemory, memUsedMB);
58
- if (this.#limits.maxMemory && memUsedMB > this.#limits.maxMemory) {
59
- this.#logger.warn(`[ResourceMonitor] Memory limit exceeded: ${memUsedMB.toFixed(2)}MB / ${this.#limits.maxMemory}MB`);
60
- await this.#onLimitExceeded({
61
- limit: 'memory',
62
- current: memUsedMB,
63
- max: this.#limits.maxMemory,
64
- message: `Memory usage (${memUsedMB.toFixed(2)}MB) exceeds limit (${this.#limits.maxMemory}MB)`,
65
- });
66
- }
67
- // Check session time
68
- const elapsedMinutes = (Date.now() - this.#startTime) / 60000;
69
- if (this.#limits.maxSessionTime && elapsedMinutes > this.#limits.maxSessionTime) {
70
- this.#logger.warn(`[ResourceMonitor] Session time limit exceeded: ${elapsedMinutes.toFixed(2)}min / ${this.#limits.maxSessionTime}min`);
71
- await this.#onLimitExceeded({
72
- limit: 'sessionTime',
73
- current: elapsedMinutes,
74
- max: this.#limits.maxSessionTime,
75
- message: `Session time (${elapsedMinutes.toFixed(2)}min) exceeds limit (${this.#limits.maxSessionTime}min)`,
76
- });
77
- }
78
- }
79
- /**
80
- * Get current resource usage
81
- */
82
- getCurrentUsage() {
83
- const memUsage = process.memoryUsage();
84
- const elapsedMinutes = (Date.now() - this.#startTime) / 60000;
85
- return {
86
- memoryMB: memUsage.heapUsed / 1024 / 1024,
87
- peakMemoryMB: this.#peakMemory,
88
- sessionTimeMinutes: elapsedMinutes,
89
- withinLimits: (this.#limits.maxMemory === undefined || memUsage.heapUsed / 1024 / 1024 <= this.#limits.maxMemory) &&
90
- (this.#limits.maxSessionTime === undefined || elapsedMinutes <= this.#limits.maxSessionTime),
91
- };
92
- }
93
- /**
94
- * Get memory usage percentage
95
- * @returns percentage (0-100) or undefined if no memory limit is set
96
- */
97
- getMemoryUsagePercentage() {
98
- if (!this.#limits.maxMemory)
99
- return undefined;
100
- const current = this.getCurrentUsage().memoryMB;
101
- return (current / this.#limits.maxMemory) * 100;
102
- }
103
- /**
104
- * Get session time percentage
105
- * @returns percentage (0-100) or undefined if no session time limit is set
106
- */
107
- getSessionTimePercentage() {
108
- if (!this.#limits.maxSessionTime)
109
- return undefined;
110
- const current = this.getCurrentUsage().sessionTimeMinutes;
111
- return (current / this.#limits.maxSessionTime) * 100;
112
- }
113
- }
114
- //# sourceMappingURL=resource-monitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource-monitor.js","sourceRoot":"","sources":["../../src/agent/resource-monitor.ts"],"names":[],"mappings":"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"}
@@ -1,178 +0,0 @@
1
- import * as readline from 'node:readline';
2
- import { Priority } from '../types';
3
- /**
4
- * Manages task approval requirements
5
- */
6
- export class ApprovalManager {
7
- #logger;
8
- #approvalLevel;
9
- #autoApproveSafeTasks;
10
- #maxAutoApprovalCost;
11
- #destructiveOperations;
12
- constructor(logger, approvalLevel, autoApproveSafeTasks, maxAutoApprovalCost, destructiveOperations) {
13
- this.#logger = logger;
14
- this.#approvalLevel = approvalLevel;
15
- this.#autoApproveSafeTasks = autoApproveSafeTasks;
16
- this.#maxAutoApprovalCost = maxAutoApprovalCost;
17
- this.#destructiveOperations = destructiveOperations;
18
- }
19
- /**
20
- * Check if task requires approval
21
- */
22
- requiresApproval(task) {
23
- // Always approve if level is 'none'
24
- if (this.#approvalLevel === 'none') {
25
- return false;
26
- }
27
- // Always require approval for all tasks if level is 'all'
28
- if (this.#approvalLevel === 'all') {
29
- return true;
30
- }
31
- // Check if task is destructive
32
- if (this.isDestructive(task)) {
33
- return true;
34
- }
35
- // Require approval for commits if level is 'commits'
36
- if (this.#approvalLevel === 'commits' && task.type === 'commit') {
37
- return true;
38
- }
39
- // Auto-approve safe tasks if within time threshold and low priority
40
- if (this.#autoApproveSafeTasks && task.estimatedTime <= this.#maxAutoApprovalCost && task.priority === Priority.TRIVIAL) {
41
- return false;
42
- }
43
- return true;
44
- }
45
- /**
46
- * Request user approval for a task
47
- */
48
- async requestApproval(task) {
49
- // Check if running in an interactive terminal
50
- if (!process.stdin.isTTY) {
51
- this.#logger.warn(`⚠️ Not running in an interactive terminal - auto-rejecting task: ${task.title}`);
52
- return { approved: false, reason: 'Non-interactive environment (no TTY)' };
53
- }
54
- this.#logger.info(`\n${'═'.repeat(60)}`);
55
- this.#logger.info(`🤖 Approval Required: ${task.title}`);
56
- this.#logger.info('═'.repeat(60));
57
- this.#logger.info(`📝 Description: ${task.description}`);
58
- this.#logger.info(`🏷️ Type: ${task.type}`);
59
- this.#logger.info(`⚖️ Complexity: ${task.complexity}`);
60
- this.#logger.info(`📊 Priority: ${Priority[task.priority]} (${task.priority})`);
61
- this.#logger.info(`⏱️ Estimated Time: ${task.estimatedTime} minutes`);
62
- if (task.files.length > 0) {
63
- this.#logger.info(`📁 Files: ${task.files.join(', ')}`);
64
- }
65
- this.#logger.info('═'.repeat(60));
66
- const answer = await this.askQuestion('Approve this task? (yes/no): ');
67
- if (!answer) {
68
- return { approved: false, reason: 'No response' };
69
- }
70
- const normalized = answer.toLowerCase();
71
- if (normalized === 'yes' || normalized === 'y') {
72
- return { approved: true };
73
- }
74
- return { approved: false, reason: 'Rejected by user' };
75
- }
76
- /**
77
- * Check if task is destructive
78
- */
79
- isDestructive(task) {
80
- // Check if task type is in destructive list
81
- if (this.#destructiveOperations.includes(task.type)) {
82
- return true;
83
- }
84
- // Check if task affects many files
85
- if (task.files.length > 10) {
86
- return true;
87
- }
88
- // Check description for destructive keywords
89
- const destructiveKeywords = ['delete', 'remove', 'force', 'reset', 'drop'];
90
- const description = task.description.toLowerCase();
91
- if (destructiveKeywords.some((kw) => description.includes(kw))) {
92
- return true;
93
- }
94
- return false;
95
- }
96
- /**
97
- * Request user approval for a plan
98
- *
99
- * Displays the plan details and asks the user to approve or reject it.
100
- * This is used before executing a multi-task plan.
101
- *
102
- * @param request - Plan approval request with all plan details
103
- * @returns Approval decision with approved flag and optional reason
104
- */
105
- async requestPlanApproval(request) {
106
- // Check if running in an interactive terminal
107
- if (!process.stdin.isTTY) {
108
- this.#logger.warn(`⚠️ Not running in an interactive terminal - auto-rejecting plan: ${request.goal}`);
109
- return { approved: false, reason: 'Non-interactive environment (no TTY)' };
110
- }
111
- // Display plan header
112
- this.#logger.info(`\n${'═'.repeat(60)}`);
113
- this.#logger.info(`📋 Plan Approval Required`);
114
- this.#logger.info('═'.repeat(60));
115
- // Display goal
116
- this.#logger.info(`\n🎯 Goal: ${request.goal}`);
117
- // Display task summary
118
- this.#logger.info(`\n📝 Tasks: ${request.tasks.length} tasks in ${request.executionOrder.length} phase(s)`);
119
- for (let i = 0; i < request.executionOrder.length; i++) {
120
- const phase = request.executionOrder[i];
121
- this.#logger.info(` Phase ${i + 1}: ${phase.length} task(s)`);
122
- }
123
- // Display task details
124
- this.#logger.info(`\n📋 Task List:`);
125
- for (let i = 0; i < request.tasks.length; i++) {
126
- const task = request.tasks[i];
127
- const priorityLabel = Priority[task.priority] || task.priority;
128
- this.#logger.info(` ${i + 1}. [${priorityLabel}] ${task.title}`);
129
- this.#logger.info(` ${task.description}`);
130
- }
131
- // Display estimated time
132
- const timeInMinutes = Math.round(request.estimatedTime);
133
- this.#logger.info(`\n⏱️ Estimated Time: ${timeInMinutes} minutes`);
134
- // Display risks if any
135
- if (request.risks.length > 0) {
136
- this.#logger.info(`\n⚠️ Risks:`);
137
- for (const risk of request.risks) {
138
- this.#logger.info(` - ${risk}`);
139
- }
140
- }
141
- // Ask for approval
142
- this.#logger.info(`\n${'═'.repeat(60)}`);
143
- const answer = await this.askQuestion('Do you want to proceed with this plan? (yes/no): ');
144
- if (answer.toLowerCase() === 'yes' || answer.toLowerCase() === 'y') {
145
- this.#logger.info('✅ Plan approved - proceeding with execution\n');
146
- return { approved: true };
147
- }
148
- else {
149
- this.#logger.info('❌ Plan rejected - stopping execution\n');
150
- return { approved: false, reason: 'User rejected the plan' };
151
- }
152
- }
153
- /**
154
- * Ask a question via stdin/stdout
155
- *
156
- * Creates a new readline interface for each question.
157
- * Note: This is intentional and safe for approval workflow which:
158
- * - Is low-frequency (once per plan approval)
159
- * - Properly closes the interface after each question
160
- * - Avoids listener leaks by creating fresh interface each time
161
- *
162
- * @param query - Question to display
163
- * @returns User's answer
164
- */
165
- async askQuestion(query) {
166
- const rl = readline.createInterface({
167
- input: process.stdin,
168
- output: process.stdout,
169
- });
170
- return new Promise((resolve) => {
171
- rl.question(query, (answer) => {
172
- rl.close();
173
- resolve(answer.trim());
174
- });
175
- });
176
- }
177
- }
178
- //# sourceMappingURL=approval.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/agent/safety/approval.ts"],"names":[],"mappings":"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"}