@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,141 +0,0 @@
1
- // generated by polka.codes
2
- import { afterEach, describe, expect, mock, test } from 'bun:test';
3
- import { execSync } from 'node:child_process';
4
- import { UserCancelledError } from '../errors';
5
- import { createWorkflowTestContext } from '../test/workflow-fixtures';
6
- import { commitWorkflow } from './commit.workflow';
7
- // Check if git is available synchronously
8
- let gitAvailable = false;
9
- try {
10
- execSync('git --version', { stdio: 'ignore' });
11
- gitAvailable = true;
12
- }
13
- catch {
14
- // Git not available
15
- }
16
- describe.skipIf(!gitAvailable)('commitWorkflow', () => {
17
- const defaultInput = {
18
- interactive: false,
19
- additionalTools: {},
20
- };
21
- afterEach(() => {
22
- mock.restore();
23
- });
24
- test('should generate commit message with staged files', async () => {
25
- const { context, tools, logger } = createWorkflowTestContext();
26
- // Add commit-specific tools
27
- tools.printChangeFile = mock();
28
- tools.createCommit = mock();
29
- tools.printChangeFile.mockResolvedValue({
30
- stagedFiles: [{ path: 'src/file.ts', status: 'M' }],
31
- unstagedFiles: [],
32
- });
33
- tools.executeCommand.mockResolvedValueOnce({ exitCode: 0, stdout: 'M\tsrc/file.ts' }).mockResolvedValueOnce({
34
- exitCode: 0,
35
- stdout: '--- a/src/file.ts\n+++ b/src/file.ts\n@@ -1,3 +1,4 @@\n+export const newFunc = () => {}\n',
36
- });
37
- tools.createCommit.mockResolvedValue({});
38
- tools.generateText.mockResolvedValue([
39
- {
40
- role: 'assistant',
41
- content: JSON.stringify({ commitMessage: 'feat: add newFunc' }),
42
- },
43
- ]);
44
- const result = await commitWorkflow({ ...defaultInput }, context);
45
- expect(result).toBe('feat: add newFunc');
46
- expect(tools.printChangeFile).toHaveBeenCalled();
47
- expect(tools.executeCommand).toHaveBeenCalledWith({
48
- command: 'git',
49
- args: ['diff', '--name-status', '--no-color', '--staged'],
50
- });
51
- expect(tools.executeCommand).toHaveBeenCalledWith({
52
- command: 'git',
53
- args: ['diff', '--staged'],
54
- });
55
- expect(tools.generateText).toHaveBeenCalled();
56
- expect(logger.info).toHaveBeenCalledWith('\nCommit message:\nfeat: add newFunc');
57
- expect(tools.createCommit).toHaveBeenCalledWith({
58
- message: 'feat: add newFunc',
59
- });
60
- });
61
- test('should auto-stage all files when all=true', async () => {
62
- const { context, tools } = createWorkflowTestContext();
63
- // Add commit-specific tools
64
- tools.printChangeFile = mock();
65
- tools.createCommit = mock();
66
- tools.printChangeFile.mockResolvedValue({
67
- stagedFiles: [],
68
- unstagedFiles: [{ path: 'src/file.ts', status: 'M' }],
69
- });
70
- tools.executeCommand.mockResolvedValue({ exitCode: 0, stdout: 'M\tsrc/file.ts' });
71
- tools.generateText.mockResolvedValue([
72
- {
73
- role: 'assistant',
74
- content: JSON.stringify({ commitMessage: 'feat: stage file' }),
75
- },
76
- ]);
77
- const result = await commitWorkflow({ ...defaultInput, all: true }, context);
78
- expect(result).toBe('feat: stage file');
79
- expect(tools.executeCommand).toHaveBeenCalledWith({
80
- command: 'git',
81
- args: ['add', '.'],
82
- });
83
- expect(tools.generateText).toHaveBeenCalled();
84
- expect(tools.createCommit).toHaveBeenCalledWith({
85
- message: 'feat: stage file',
86
- });
87
- });
88
- test('should prompt user and stage when confirmed', async () => {
89
- const { context, tools } = createWorkflowTestContext();
90
- // Add commit-specific tools
91
- tools.printChangeFile = mock();
92
- tools.confirm = mock();
93
- tools.createCommit = mock();
94
- tools.printChangeFile.mockResolvedValue({
95
- stagedFiles: [],
96
- unstagedFiles: [{ path: 'src/file.ts', status: 'M' }],
97
- });
98
- tools.confirm.mockResolvedValue(true);
99
- tools.executeCommand.mockResolvedValue({ exitCode: 0, stdout: 'M\tsrc/file.ts' });
100
- tools.generateText.mockResolvedValue([
101
- {
102
- role: 'assistant',
103
- content: JSON.stringify({ commitMessage: 'feat: stage file' }),
104
- },
105
- ]);
106
- const result = await commitWorkflow({ ...defaultInput, interactive: true }, context);
107
- expect(result).toBe('feat: stage file');
108
- expect(tools.confirm).toHaveBeenCalledWith({
109
- message: 'No staged files found. Stage all files?',
110
- default: false,
111
- });
112
- expect(tools.executeCommand).toHaveBeenCalledWith({
113
- command: 'git',
114
- args: ['add', '.'],
115
- });
116
- expect(tools.generateText).toHaveBeenCalled();
117
- expect(tools.createCommit).toHaveBeenCalledWith({
118
- message: 'feat: stage file',
119
- });
120
- });
121
- test('should throw UserCancelledError when user declines staging', async () => {
122
- const { context, tools } = createWorkflowTestContext();
123
- // Add commit-specific tools
124
- tools.printChangeFile = mock();
125
- tools.confirm = mock();
126
- tools.printChangeFile.mockResolvedValue({
127
- stagedFiles: [],
128
- unstagedFiles: [{ path: 'src/file.ts', status: 'M' }],
129
- });
130
- tools.confirm.mockResolvedValue(false);
131
- await expect(commitWorkflow({ ...defaultInput, interactive: true }, context)).rejects.toThrow(UserCancelledError);
132
- });
133
- test('should throw error when no files to commit', async () => {
134
- const { context, tools } = createWorkflowTestContext();
135
- // Add commit-specific tools
136
- tools.printChangeFile = mock();
137
- tools.printChangeFile.mockResolvedValue({ stagedFiles: [], unstagedFiles: [] });
138
- await expect(commitWorkflow({ ...defaultInput }, context)).rejects.toThrow('No files to commit. Aborting.');
139
- });
140
- });
141
- //# sourceMappingURL=commit.workflow.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commit.workflow.test.js","sourceRoot":"","sources":["../../src/workflows/commit.workflow.test.ts"],"names":[],"mappings":"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"}
@@ -1,172 +0,0 @@
1
- // generated by polka.codes
2
- import { agentWorkflow, executeCommand, fetchUrl, listFiles, readBinaryFile, readFile, removeFile, renameFile, replaceInFile, searchFiles, writeToFile, } from '@polka-codes/core';
3
- import { z } from 'zod';
4
- import { FIX_SYSTEM_PROMPT, getFixUserPrompt } from './prompts';
5
- import { getDefaultContext } from './workflow.utils';
6
- const FixIterationSummarySchema = z
7
- .object({
8
- summary: z.string().nullish(),
9
- bailReason: z.string().nullish(),
10
- })
11
- .refine((data) => (data.summary != null) !== (data.bailReason != null), {
12
- message: 'Either summary or bailReason must be provided, but not both',
13
- });
14
- export const fixWorkflow = async (input, context) => {
15
- const { tools, logger, step } = context;
16
- const { command: inputCommand, task, prompt, interactive = true, additionalTools } = input;
17
- let command = inputCommand;
18
- const summaries = [];
19
- let formatCommand;
20
- // Helper function to build script invocation command
21
- const buildScriptCommand = (scriptName) => {
22
- const runtime = process.argv[0];
23
- const script = process.argv[1];
24
- return `"${runtime}" "${script}" run ${scriptName}`;
25
- };
26
- if (!command) {
27
- const config = input.config;
28
- const check = config?.scripts?.check;
29
- const test = config?.scripts?.test;
30
- const format = config?.scripts?.format;
31
- let checkCommand;
32
- if (typeof check === 'string') {
33
- checkCommand = check;
34
- }
35
- else if (check && 'command' in check) {
36
- checkCommand = check.command;
37
- }
38
- else if (check && 'script' in check) {
39
- // For TypeScript scripts, invoke via CLI
40
- checkCommand = buildScriptCommand('check');
41
- }
42
- else if (check && 'workflow' in check) {
43
- // Workflows not yet supported for fix workflow
44
- logger.warn('Workflow scripts are not yet supported in fix workflow');
45
- }
46
- let testCommand;
47
- if (typeof test === 'string') {
48
- testCommand = test;
49
- }
50
- else if (test && 'command' in test) {
51
- testCommand = test.command;
52
- }
53
- else if (test && 'script' in test) {
54
- // For TypeScript scripts, invoke via CLI
55
- testCommand = buildScriptCommand('test');
56
- }
57
- else if (test && 'workflow' in test) {
58
- // Workflows not yet supported for fix workflow
59
- logger.warn('Workflow scripts are not yet supported in fix workflow');
60
- }
61
- if (typeof format === 'string') {
62
- formatCommand = format;
63
- }
64
- else if (format && 'command' in format) {
65
- formatCommand = format.command;
66
- }
67
- else if (format && 'script' in format) {
68
- // For TypeScript scripts, invoke via CLI
69
- formatCommand = buildScriptCommand('format');
70
- }
71
- else if (format && 'workflow' in format) {
72
- // Workflows not yet supported for fix workflow
73
- logger.warn('Workflow scripts are not yet supported in fix workflow');
74
- }
75
- let defaultCommand;
76
- if (checkCommand && testCommand) {
77
- defaultCommand = `${checkCommand} && ${testCommand}`;
78
- }
79
- else if (checkCommand) {
80
- defaultCommand = checkCommand;
81
- }
82
- else if (testCommand) {
83
- defaultCommand = testCommand;
84
- }
85
- if (interactive) {
86
- command = await tools.input({
87
- message: 'Please enter the command to run to identify issues:',
88
- default: defaultCommand,
89
- });
90
- if (!command) {
91
- throw new Error('No command provided. Aborting.');
92
- }
93
- }
94
- else {
95
- command = defaultCommand;
96
- }
97
- if (!command) {
98
- logger.info('No command to run.');
99
- return { success: true, summaries };
100
- }
101
- }
102
- for (let i = 0; i < 10; i++) {
103
- logger.info(`Running command (attempt ${i + 1}/10): ${command}`);
104
- if (formatCommand) {
105
- await tools.executeCommand({ command: formatCommand, shell: true, pipe: true });
106
- }
107
- const { exitCode, stdout, stderr } = await tools.executeCommand({
108
- command,
109
- shell: true,
110
- pipe: true,
111
- });
112
- if (exitCode === 0) {
113
- logger.info('Command succeeded!');
114
- return { success: true, summaries };
115
- }
116
- logger.info(`Command failed with exit code ${exitCode}. Asking agent to fix it...`);
117
- const result = await step(`fix-${i}`, async () => {
118
- const { context: defaultContext } = await getDefaultContext(input.config, 'fix');
119
- const memoryContext = await tools.getMemoryContext();
120
- const userPrompt = getFixUserPrompt(command, exitCode, stdout, stderr, task, prompt);
121
- const agentTools = [
122
- readFile,
123
- writeToFile,
124
- replaceInFile,
125
- searchFiles,
126
- listFiles,
127
- executeCommand,
128
- fetchUrl,
129
- readBinaryFile,
130
- removeFile,
131
- renameFile,
132
- ];
133
- if (additionalTools?.search) {
134
- agentTools.push(additionalTools.search);
135
- }
136
- if (additionalTools?.mcpTools) {
137
- agentTools.push(...additionalTools.mcpTools);
138
- }
139
- return await agentWorkflow({
140
- systemPrompt: FIX_SYSTEM_PROMPT,
141
- userMessage: [
142
- {
143
- role: 'user',
144
- content: `${userPrompt}\n\n${defaultContext}\n${memoryContext}`,
145
- },
146
- ],
147
- tools: agentTools,
148
- outputSchema: FixIterationSummarySchema,
149
- }, context);
150
- });
151
- const res = await step(`fix-summary-${i}`, async () => {
152
- if (result.type === 'Exit' && result.object) {
153
- const { summary, bailReason } = result.object;
154
- if (bailReason) {
155
- logger.warn(`Agent bailed: ${bailReason}`);
156
- return { bailReason };
157
- }
158
- if (summary) {
159
- summaries.push(summary);
160
- await tools.updateMemory({ operation: 'append', content: `Summary of changes for fix attempt ${i + 1}: ${summary}` });
161
- logger.info(`Summary of changes: ${summary}`);
162
- }
163
- }
164
- });
165
- if (res?.bailReason) {
166
- return { success: false, summaries, reason: res.bailReason };
167
- }
168
- }
169
- logger.error('Failed to fix the issue after maximum attempts.');
170
- return { success: false, summaries, reason: 'Failed to fix the issue after maximum attempts.' };
171
- };
172
- //# sourceMappingURL=fix.workflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix.workflow.js","sourceRoot":"","sources":["../../src/workflows/fix.workflow.ts"],"names":[],"mappings":"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"}
@@ -1,137 +0,0 @@
1
- // generated by polka.codes
2
- import { afterEach, describe, expect, mock, spyOn, test } from 'bun:test';
3
- import { z } from 'zod';
4
- import { createWorkflowTestContext, mockAgentResponse, mockCommandAttempts, mockFailedCommand, mockSuccessfulCommand, } from '../test/workflow-fixtures';
5
- import { fixWorkflow } from './fix.workflow';
6
- import * as prompts from './prompts';
7
- describe('fixWorkflow', () => {
8
- const defaultInput = {
9
- interactive: false,
10
- additionalTools: {},
11
- };
12
- afterEach(() => {
13
- mock.restore();
14
- });
15
- test('should succeed when command passes on first attempt', async () => {
16
- const { context, tools } = createWorkflowTestContext();
17
- mockSuccessfulCommand(tools, 'All tests passed');
18
- const result = await fixWorkflow({ ...defaultInput, command: 'bun test' }, context);
19
- expect(tools.executeCommand).toHaveBeenCalledWith({ command: 'bun test', shell: true, pipe: true });
20
- expect(result).toStrictEqual({ success: true, summaries: [] });
21
- });
22
- test('should prompt for command when not provided', async () => {
23
- const { context, tools } = createWorkflowTestContext();
24
- const config = {
25
- scripts: {
26
- check: 'bun typecheck',
27
- test: 'bun test',
28
- },
29
- };
30
- tools.input.mockResolvedValue('bun typecheck && bun test');
31
- mockSuccessfulCommand(tools, 'Success');
32
- await fixWorkflow({ ...defaultInput, interactive: true, config }, context);
33
- expect(tools.input).toHaveBeenCalledWith({
34
- message: 'Please enter the command to run to identify issues:',
35
- default: 'bun typecheck && bun test',
36
- });
37
- expect(tools.executeCommand).toHaveBeenCalledWith({
38
- command: 'bun typecheck && bun test',
39
- shell: true,
40
- pipe: true,
41
- });
42
- });
43
- test('should use default command when not interactive', async () => {
44
- const { context, tools } = createWorkflowTestContext();
45
- const config = {
46
- scripts: {
47
- check: 'bun typecheck',
48
- },
49
- };
50
- mockSuccessfulCommand(tools, '');
51
- await fixWorkflow({ ...defaultInput, interactive: false, config }, context);
52
- expect(tools.executeCommand).toHaveBeenCalledWith({ command: 'bun typecheck', shell: true, pipe: true });
53
- });
54
- test('should throw error when no command provided and user provides empty input', async () => {
55
- const { context, tools } = createWorkflowTestContext();
56
- const config = {};
57
- tools.input.mockResolvedValue('');
58
- const promise = fixWorkflow({ ...defaultInput, interactive: true, config }, context);
59
- await expect(promise).rejects.toThrow('No command provided. Aborting.');
60
- });
61
- test('should succeed after agent fixes the issue', async () => {
62
- const { context, tools } = createWorkflowTestContext();
63
- mockCommandAttempts(tools, [1, 0]);
64
- mockAgentResponse(tools, 'I did a fix');
65
- const result = await fixWorkflow({ ...defaultInput, command: 'bun test' }, context);
66
- expect(tools.executeCommand).toHaveBeenCalledTimes(2);
67
- expect(tools.generateText).toHaveBeenCalledTimes(1);
68
- expect(result).toStrictEqual({ success: true, summaries: ['I did a fix'] });
69
- });
70
- test('should fail after exhausting all retries', async () => {
71
- const { context, tools } = createWorkflowTestContext();
72
- const failedAttempts = Array(10).fill(1);
73
- mockCommandAttempts(tools, failedAttempts);
74
- mockAgentResponse(tools, 'I did a fix');
75
- const result = await fixWorkflow({ ...defaultInput, command: 'bun test' }, context);
76
- expect(tools.executeCommand).toHaveBeenCalledTimes(10);
77
- expect(tools.generateText).toHaveBeenCalledTimes(10);
78
- expect(result).toMatchSnapshot();
79
- });
80
- test('should return bailReason when agent cannot fix', async () => {
81
- const { context, tools } = createWorkflowTestContext();
82
- mockFailedCommand(tools, 'FAIL', 'Mysterious error');
83
- mockAgentResponse(tools, null, 'Unable to identify the root cause of the error');
84
- const result = await fixWorkflow({ ...defaultInput, command: 'bun test' }, context);
85
- expect(tools.executeCommand).toHaveBeenCalledTimes(1);
86
- expect(tools.generateText).toHaveBeenCalledTimes(1);
87
- expect(result).toMatchSnapshot();
88
- });
89
- test('should pass task to agent prompt', async () => {
90
- const { context, tools } = createWorkflowTestContext();
91
- const getFixUserPromptSpy = spyOn(prompts, 'getFixUserPrompt');
92
- mockFailedCommand(tools, 'FAIL src/test.ts', 'TypeError: undefined is not a function');
93
- mockAgentResponse(tools, 'I did a fix');
94
- mockCommandAttempts(tools, [1, 0]);
95
- await fixWorkflow({ ...defaultInput, command: 'bun test', task: 'My original task was to do this thing.' }, context);
96
- expect(getFixUserPromptSpy).toHaveBeenCalledTimes(1);
97
- expect(tools.generateText).toHaveBeenCalledTimes(1);
98
- const generateTextCall = tools.generateText.mock.calls[0][0];
99
- const userMessage = generateTextCall.messages.find((m) => m.role === 'user');
100
- expect(userMessage?.content).toContain('My original task was to do this thing.');
101
- getFixUserPromptSpy.mockRestore();
102
- });
103
- test('should pass prompt to agent prompt', async () => {
104
- const { context, tools } = createWorkflowTestContext();
105
- const getFixUserPromptSpy = spyOn(prompts, 'getFixUserPrompt');
106
- mockFailedCommand(tools, 'FAIL src/test.ts', 'TypeError: undefined is not a function');
107
- mockAgentResponse(tools, 'I did a fix');
108
- mockCommandAttempts(tools, [1, 0]);
109
- await fixWorkflow({ ...defaultInput, command: 'bun test', prompt: 'Focus on the authentication tests' }, context);
110
- expect(getFixUserPromptSpy).toHaveBeenCalledTimes(1);
111
- expect(tools.generateText).toHaveBeenCalledTimes(1);
112
- const generateTextCall = tools.generateText.mock.calls[0][0];
113
- const userMessage = generateTextCall.messages.find((m) => m.role === 'user');
114
- expect(userMessage?.content).toContain('Focus on the authentication tests');
115
- getFixUserPromptSpy.mockRestore();
116
- });
117
- test('should pass additional tools to agent workflow', async () => {
118
- const { context, tools } = createWorkflowTestContext();
119
- const searchTool = {
120
- name: 'search',
121
- description: 'Search the web',
122
- parameters: z.object({ query: z.string() }),
123
- handler: async () => ({ type: 'Reply', message: { type: 'text', value: 'result' } }),
124
- };
125
- mockFailedCommand(tools, 'FAIL', 'Error');
126
- mockAgentResponse(tools, 'I did a fix');
127
- await fixWorkflow({
128
- ...defaultInput,
129
- command: 'bun test',
130
- additionalTools: { search: searchTool },
131
- }, context);
132
- const generateTextCall = tools.generateText.mock.calls[0][0];
133
- expect(generateTextCall.tools).toHaveProperty('search');
134
- expect(generateTextCall.tools.search.description).toBe('Search the web');
135
- });
136
- });
137
- //# sourceMappingURL=fix.workflow.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix.workflow.test.js","sourceRoot":"","sources":["../../src/workflows/fix.workflow.test.ts"],"names":[],"mappings":"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"}