@polka-codes/cli 0.10.22 → 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 (350) hide show
  1. package/dist/index.js +3990 -353
  2. package/package.json +4 -4
  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/chunk-2LRQ2QH6.js +0 -1353
  102. package/dist/chunk-FSNPWI3C.js +0 -128
  103. package/dist/chunk-HB7PTE3H.js +0 -176
  104. package/dist/chunk-LLMPMGV3.js +0 -140
  105. package/dist/chunk-NRDSZGMF.js +0 -675
  106. package/dist/chunk-UEEU3SCC.js +0 -390
  107. package/dist/chunk-YPUL66UK.js +0 -277
  108. package/dist/chunk-ZS4K5RFU.js +0 -176
  109. package/dist/chunk-ZU4UU65A.js +0 -40
  110. package/dist/code.workflow-5TAWK2DE.js +0 -10
  111. package/dist/commandSummarizer.js +0 -96
  112. package/dist/commandSummarizer.js.map +0 -1
  113. package/dist/commands/__tests__/command-detection.integration.test.js +0 -238
  114. package/dist/commands/__tests__/command-detection.integration.test.js.map +0 -1
  115. package/dist/commands/__tests__/script-generator.integration.test.js +0 -271
  116. package/dist/commands/__tests__/script-generator.integration.test.js.map +0 -1
  117. package/dist/commands/agent.js +0 -218
  118. package/dist/commands/agent.js.map +0 -1
  119. package/dist/commands/code.js +0 -102
  120. package/dist/commands/code.js.map +0 -1
  121. package/dist/commands/command.constants.js +0 -13
  122. package/dist/commands/command.constants.js.map +0 -1
  123. package/dist/commands/commit.js +0 -17
  124. package/dist/commands/commit.js.map +0 -1
  125. package/dist/commands/fix.js +0 -17
  126. package/dist/commands/fix.js.map +0 -1
  127. package/dist/commands/init.js +0 -501
  128. package/dist/commands/init.js.map +0 -1
  129. package/dist/commands/mcp-server.js +0 -122
  130. package/dist/commands/mcp-server.js.map +0 -1
  131. package/dist/commands/memory.js +0 -410
  132. package/dist/commands/memory.js.map +0 -1
  133. package/dist/commands/memory.test.js +0 -453
  134. package/dist/commands/memory.test.js.map +0 -1
  135. package/dist/commands/meta.js +0 -142
  136. package/dist/commands/meta.js.map +0 -1
  137. package/dist/commands/plan.js +0 -39
  138. package/dist/commands/plan.js.map +0 -1
  139. package/dist/commands/pr.js +0 -14
  140. package/dist/commands/pr.js.map +0 -1
  141. package/dist/commands/review-json.test.js +0 -33
  142. package/dist/commands/review-json.test.js.map +0 -1
  143. package/dist/commands/review.js +0 -137
  144. package/dist/commands/review.js.map +0 -1
  145. package/dist/commands/review.usage.test.js +0 -41
  146. package/dist/commands/review.usage.test.js.map +0 -1
  147. package/dist/commands/run.js +0 -107
  148. package/dist/commands/run.js.map +0 -1
  149. package/dist/commands/skills.js +0 -175
  150. package/dist/commands/skills.js.map +0 -1
  151. package/dist/commands/task.js +0 -34
  152. package/dist/commands/task.js.map +0 -1
  153. package/dist/commands/workflow.js +0 -117
  154. package/dist/commands/workflow.js.map +0 -1
  155. package/dist/commit.workflow-Z64PNSTS.js +0 -9
  156. package/dist/configPrompt.js +0 -39
  157. package/dist/configPrompt.js.map +0 -1
  158. package/dist/env.js +0 -22
  159. package/dist/env.js.map +0 -1
  160. package/dist/errors.js +0 -132
  161. package/dist/errors.js.map +0 -1
  162. package/dist/errors.test.js +0 -21
  163. package/dist/errors.test.js.map +0 -1
  164. package/dist/file-attachments.js +0 -77
  165. package/dist/file-attachments.js.map +0 -1
  166. package/dist/file-attachments.test.js +0 -214
  167. package/dist/file-attachments.test.js.map +0 -1
  168. package/dist/fix.workflow-KLHJU5Z6.js +0 -7
  169. package/dist/getModel.js +0 -229
  170. package/dist/getModel.js.map +0 -1
  171. package/dist/getModel.test.js +0 -67
  172. package/dist/getModel.test.js.map +0 -1
  173. package/dist/getProviderOptions.js +0 -58
  174. package/dist/getProviderOptions.js.map +0 -1
  175. package/dist/git-operations.js +0 -363
  176. package/dist/git-operations.js.map +0 -1
  177. package/dist/git-operations.test.js +0 -81
  178. package/dist/git-operations.test.js.map +0 -1
  179. package/dist/index.js.map +0 -1
  180. package/dist/logger.js +0 -41
  181. package/dist/logger.js.map +0 -1
  182. package/dist/mcp/client.js +0 -11
  183. package/dist/mcp/client.js.map +0 -1
  184. package/dist/mcp/error-scenarios.test.js +0 -206
  185. package/dist/mcp/error-scenarios.test.js.map +0 -1
  186. package/dist/mcp/errors.js +0 -63
  187. package/dist/mcp/errors.js.map +0 -1
  188. package/dist/mcp/index.js +0 -9
  189. package/dist/mcp/index.js.map +0 -1
  190. package/dist/mcp/manager.js +0 -231
  191. package/dist/mcp/manager.js.map +0 -1
  192. package/dist/mcp/manager.test.js +0 -40
  193. package/dist/mcp/manager.test.js.map +0 -1
  194. package/dist/mcp/sdk-client.js +0 -166
  195. package/dist/mcp/sdk-client.js.map +0 -1
  196. package/dist/mcp/shared-types.js +0 -3
  197. package/dist/mcp/shared-types.js.map +0 -1
  198. package/dist/mcp/tools-integration.test.js +0 -198
  199. package/dist/mcp/tools-integration.test.js.map +0 -1
  200. package/dist/mcp/tools.js +0 -60
  201. package/dist/mcp/tools.js.map +0 -1
  202. package/dist/mcp/transport.js +0 -257
  203. package/dist/mcp/transport.js.map +0 -1
  204. package/dist/mcp/types.js +0 -3
  205. package/dist/mcp/types.js.map +0 -1
  206. package/dist/mcp-server/index.js +0 -5
  207. package/dist/mcp-server/index.js.map +0 -1
  208. package/dist/mcp-server/plan-formatting.test.js +0 -74
  209. package/dist/mcp-server/plan-formatting.test.js.map +0 -1
  210. package/dist/mcp-server/sdk-server.js +0 -102
  211. package/dist/mcp-server/sdk-server.js.map +0 -1
  212. package/dist/mcp-server/sdk-server.test.js +0 -363
  213. package/dist/mcp-server/sdk-server.test.js.map +0 -1
  214. package/dist/mcp-server/tools.js +0 -785
  215. package/dist/mcp-server/tools.js.map +0 -1
  216. package/dist/mcp-server/types.js +0 -3
  217. package/dist/mcp-server/types.js.map +0 -1
  218. package/dist/options.js +0 -85
  219. package/dist/options.js.map +0 -1
  220. package/dist/options.test.js +0 -177
  221. package/dist/options.test.js.map +0 -1
  222. package/dist/plan.workflow-P2Y6W4FA.js +0 -8
  223. package/dist/prices.js +0 -61
  224. package/dist/prices.js.map +0 -1
  225. package/dist/prices.test.js +0 -148
  226. package/dist/prices.test.js.map +0 -1
  227. package/dist/review.workflow-I7RHWKU7.js +0 -8
  228. package/dist/runWorkflow.js +0 -313
  229. package/dist/runWorkflow.js.map +0 -1
  230. package/dist/script/__tests__/execution.integration.test.js +0 -274
  231. package/dist/script/__tests__/execution.integration.test.js.map +0 -1
  232. package/dist/script/__tests__/runner.test.js +0 -176
  233. package/dist/script/__tests__/runner.test.js.map +0 -1
  234. package/dist/script/__tests__/validator.test.js +0 -180
  235. package/dist/script/__tests__/validator.test.js.map +0 -1
  236. package/dist/script/executor.js +0 -127
  237. package/dist/script/executor.js.map +0 -1
  238. package/dist/script/index.js +0 -4
  239. package/dist/script/index.js.map +0 -1
  240. package/dist/script/runner.js +0 -258
  241. package/dist/script/runner.js.map +0 -1
  242. package/dist/sdk-client-KBYJRPEG.js +0 -155
  243. package/dist/skillIntegration.js +0 -46
  244. package/dist/skillIntegration.js.map +0 -1
  245. package/dist/skillIntegration.test.js +0 -128
  246. package/dist/skillIntegration.test.js.map +0 -1
  247. package/dist/test/utils.js +0 -200
  248. package/dist/test/utils.js.map +0 -1
  249. package/dist/test/workflow-fixtures.js +0 -120
  250. package/dist/test/workflow-fixtures.js.map +0 -1
  251. package/dist/tool-implementations.js +0 -521
  252. package/dist/tool-implementations.js.map +0 -1
  253. package/dist/tool-implementations.skill-tools.test.js +0 -106
  254. package/dist/tool-implementations.skill-tools.test.js.map +0 -1
  255. package/dist/tools/getTodoItem.js +0 -33
  256. package/dist/tools/getTodoItem.js.map +0 -1
  257. package/dist/tools/gitDiff.js +0 -108
  258. package/dist/tools/gitDiff.js.map +0 -1
  259. package/dist/tools/index.js +0 -8
  260. package/dist/tools/index.js.map +0 -1
  261. package/dist/tools/listMemoryTopics.js +0 -24
  262. package/dist/tools/listMemoryTopics.js.map +0 -1
  263. package/dist/tools/listTodoItems.js +0 -35
  264. package/dist/tools/listTodoItems.js.map +0 -1
  265. package/dist/tools/listTodoItems.test.js +0 -89
  266. package/dist/tools/listTodoItems.test.js.map +0 -1
  267. package/dist/tools/readMemory.js +0 -33
  268. package/dist/tools/readMemory.js.map +0 -1
  269. package/dist/tools/updateMemory.js +0 -62
  270. package/dist/tools/updateMemory.js.map +0 -1
  271. package/dist/tools/updateMemory.test.js +0 -109
  272. package/dist/tools/updateMemory.test.js.map +0 -1
  273. package/dist/tools/updateTodoItem.js +0 -31
  274. package/dist/tools/updateTodoItem.js.map +0 -1
  275. package/dist/tools/utils/diffLineNumbers.js +0 -178
  276. package/dist/tools/utils/diffLineNumbers.js.map +0 -1
  277. package/dist/utils/cacheControl.js +0 -59
  278. package/dist/utils/cacheControl.js.map +0 -1
  279. package/dist/utils/cacheControl.test.js +0 -128
  280. package/dist/utils/cacheControl.test.js.map +0 -1
  281. package/dist/utils/command.js +0 -50
  282. package/dist/utils/command.js.map +0 -1
  283. package/dist/utils/shell.js +0 -56
  284. package/dist/utils/shell.js.map +0 -1
  285. package/dist/utils/userInput.js +0 -47
  286. package/dist/utils/userInput.js.map +0 -1
  287. package/dist/workflow-tools.js +0 -21
  288. package/dist/workflow-tools.js.map +0 -1
  289. package/dist/workflows/agent-builder.js +0 -90
  290. package/dist/workflows/agent-builder.js.map +0 -1
  291. package/dist/workflows/agent-builder.test.js +0 -115
  292. package/dist/workflows/agent-builder.test.js.map +0 -1
  293. package/dist/workflows/code.workflow.js +0 -145
  294. package/dist/workflows/code.workflow.js.map +0 -1
  295. package/dist/workflows/commit.workflow.js +0 -111
  296. package/dist/workflows/commit.workflow.js.map +0 -1
  297. package/dist/workflows/commit.workflow.test.js +0 -141
  298. package/dist/workflows/commit.workflow.test.js.map +0 -1
  299. package/dist/workflows/fix.workflow.js +0 -172
  300. package/dist/workflows/fix.workflow.js.map +0 -1
  301. package/dist/workflows/fix.workflow.test.js +0 -137
  302. package/dist/workflows/fix.workflow.test.js.map +0 -1
  303. package/dist/workflows/git-file-tools.js +0 -408
  304. package/dist/workflows/git-file-tools.js.map +0 -1
  305. package/dist/workflows/index.js +0 -12
  306. package/dist/workflows/index.js.map +0 -1
  307. package/dist/workflows/init-interactive.workflow.js +0 -198
  308. package/dist/workflows/init-interactive.workflow.js.map +0 -1
  309. package/dist/workflows/init.workflow.js +0 -41
  310. package/dist/workflows/init.workflow.js.map +0 -1
  311. package/dist/workflows/meta.workflow.js +0 -107
  312. package/dist/workflows/meta.workflow.js.map +0 -1
  313. package/dist/workflows/plan.workflow.js +0 -275
  314. package/dist/workflows/plan.workflow.js.map +0 -1
  315. package/dist/workflows/plan.workflow.test.js +0 -419
  316. package/dist/workflows/plan.workflow.test.js.map +0 -1
  317. package/dist/workflows/pr.workflow.js +0 -54
  318. package/dist/workflows/pr.workflow.js.map +0 -1
  319. package/dist/workflows/pr.workflow.test.js +0 -98
  320. package/dist/workflows/pr.workflow.test.js.map +0 -1
  321. package/dist/workflows/prompts/coder.js +0 -85
  322. package/dist/workflows/prompts/coder.js.map +0 -1
  323. package/dist/workflows/prompts/commit.js +0 -16
  324. package/dist/workflows/prompts/commit.js.map +0 -1
  325. package/dist/workflows/prompts/fix.js +0 -44
  326. package/dist/workflows/prompts/fix.js.map +0 -1
  327. package/dist/workflows/prompts/index.js +0 -10
  328. package/dist/workflows/prompts/index.js.map +0 -1
  329. package/dist/workflows/prompts/init.js +0 -48
  330. package/dist/workflows/prompts/init.js.map +0 -1
  331. package/dist/workflows/prompts/meta.js +0 -17
  332. package/dist/workflows/prompts/meta.js.map +0 -1
  333. package/dist/workflows/prompts/plan.js +0 -212
  334. package/dist/workflows/prompts/plan.js.map +0 -1
  335. package/dist/workflows/prompts/pr.js +0 -15
  336. package/dist/workflows/prompts/pr.js.map +0 -1
  337. package/dist/workflows/prompts/review.js +0 -145
  338. package/dist/workflows/prompts/review.js.map +0 -1
  339. package/dist/workflows/prompts/shared.js +0 -93
  340. package/dist/workflows/prompts/shared.js.map +0 -1
  341. package/dist/workflows/review.workflow.js +0 -357
  342. package/dist/workflows/review.workflow.js.map +0 -1
  343. package/dist/workflows/task.workflow.js +0 -47
  344. package/dist/workflows/task.workflow.js.map +0 -1
  345. package/dist/workflows/testing/helper.js +0 -41
  346. package/dist/workflows/testing/helper.js.map +0 -1
  347. package/dist/workflows/workflow.utils.js +0 -351
  348. package/dist/workflows/workflow.utils.js.map +0 -1
  349. package/dist/workflows/workflow.utils.test.js +0 -45
  350. 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":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,OAAO,CAAQ;IACf,cAAc,CAAe;IAC7B,qBAAqB,CAAS;IAC9B,oBAAoB,CAAQ;IAC5B,sBAAsB,CAAU;IAEhC,YACE,MAAc,EACd,aAA4B,EAC5B,oBAA6B,EAC7B,mBAA2B,EAC3B,qBAA+B;QAE/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAA;QACnC,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAA;QACjD,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAA;QAC/C,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAA;IACrD,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAU;QACzB,oCAAoC;QACpC,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YACnC,OAAO,KAAK,CAAA;QACd,CAAC;QAED,0DAA0D;QAC1D,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChE,OAAO,IAAI,CAAA;QACb,CAAC;QAED,oEAAoE;QACpE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxH,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,IAAU;QAC9B,8CAA8C;QAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qEAAqE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;YACpG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAA;QAC5E,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QAC/E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,aAAa,UAAU,CAAC,CAAA;QACtE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAEjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAA;QAEtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;QACnD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;QAEvC,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YAC/C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC3B,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;IACxD,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAU;QAC9B,4CAA4C;QAC5C,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,6CAA6C;QAC7C,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAA;QAClD,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,mBAAmB,CAAC,OAA4B;QACpD,8CAA8C;QAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qEAAqE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YACtG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAA;QAC5E,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAEjC,eAAe;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAE/C,uBAAuB;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,KAAK,CAAC,MAAM,aAAa,OAAO,CAAC,cAAc,CAAC,MAAM,WAAW,CAAC,CAAA;QAC3G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,UAAU,CAAC,CAAA;QACjE,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC7B,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAA;YAC9D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,aAAa,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;YAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QAChD,CAAC;QAED,yBAAyB;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,aAAa,UAAU,CAAC,CAAA;QAEnE,uBAAuB;QACvB,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YACjC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAExC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,mDAAmD,CAAC,CAAA;QAE1F,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;YAClE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;YAC3D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAA;QAC9D,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACK,KAAK,CAAC,WAAW,CAAC,KAAa;QACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;QAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC5B,EAAE,CAAC,KAAK,EAAE,CAAA;gBACV,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACxB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}