@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,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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"}