@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,271 +0,0 @@
1
- // generated by polka.codes
2
- import { afterEach, beforeEach, describe, expect, it } from 'bun:test';
3
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
- import { join } from 'node:path';
5
- import { loadConfig } from '@polka-codes/cli-shared';
6
- import { TempDirectoryFixture } from '../../test/utils';
7
- describe('Script Generator Integration Tests', () => {
8
- let fixture;
9
- let testProjectDir;
10
- let configPath;
11
- let scriptsDir;
12
- beforeEach(async () => {
13
- fixture = new TempDirectoryFixture();
14
- testProjectDir = await fixture.setup();
15
- configPath = join(testProjectDir, '.polkacodes.yml');
16
- scriptsDir = join(testProjectDir, '.polka-scripts');
17
- // Create test project directory
18
- mkdirSync(scriptsDir, { recursive: true });
19
- // Create initial config
20
- const configContent = `# PolkaCodes configuration
21
- `;
22
- writeFileSync(configPath, configContent);
23
- });
24
- afterEach(async () => {
25
- await fixture.teardown();
26
- });
27
- describe('Script template creation', () => {
28
- it('should create a valid script template', () => {
29
- const scriptName = 'test-script';
30
- const scriptPath = join(scriptsDir, `${scriptName}.ts`);
31
- // Create script template
32
- const template = `// Generated by polka.codes
33
- import { code, commit } from '@polka-codes/cli'
34
-
35
- export async function main(args: string[]) {
36
- console.log('Running script: ${scriptName}')
37
- console.log('Arguments:', args)
38
-
39
- // Your automation here
40
- // await code({ task: 'Add feature', interactive: false })
41
- // await commit({ all: true, context: 'Feature complete' })
42
-
43
- console.log('Script completed successfully')
44
- }
45
-
46
- if (import.meta.main) {
47
- main(process.argv.slice(2))
48
- }
49
- `;
50
- writeFileSync(scriptPath, template);
51
- expect(existsSync(scriptPath)).toBe(true);
52
- const content = readFileSync(scriptPath, 'utf-8');
53
- expect(content).toContain('export async function main');
54
- expect(content).toContain(scriptName);
55
- expect(content).toContain("import { code, commit } from '@polka-codes/cli'");
56
- });
57
- it('should create script with proper structure', () => {
58
- const scriptName = 'structured-script';
59
- const scriptPath = join(scriptsDir, `${scriptName}.ts`);
60
- const template = `// Generated by polka.codes
61
- export async function main(args: string[]) {
62
- return { success: true }
63
- }
64
-
65
- if (import.meta.main) {
66
- main(process.argv.slice(2))
67
- }
68
- `;
69
- writeFileSync(scriptPath, template);
70
- const content = readFileSync(scriptPath, 'utf-8');
71
- expect(content).toContain('// Generated by polka.codes');
72
- expect(content).toContain('export async function main');
73
- expect(content).toContain('if (import.meta.main)');
74
- });
75
- });
76
- describe('Script naming validation', () => {
77
- it('should reject script names with slashes', () => {
78
- const invalidNames = ['invalid/name', 'invalid\\name', 'path/to/script', 'path\\to\\script'];
79
- for (const name of invalidNames) {
80
- expect(() => {
81
- // Simulate validation
82
- if (name.includes('/') || name.includes('\\')) {
83
- throw new Error('Script name cannot contain slashes');
84
- }
85
- }).toThrow('cannot contain slashes');
86
- }
87
- });
88
- it('should accept valid script names', () => {
89
- const validNames = ['deploy', 'build-and-deploy', 'test123', 'my_script', 'CamelCase'];
90
- for (const name of validNames) {
91
- expect(() => {
92
- // Simulate validation
93
- if (name.includes('/') || name.includes('\\')) {
94
- throw new Error('Invalid name');
95
- }
96
- }).not.toThrow();
97
- }
98
- });
99
- });
100
- describe('Config update behavior', () => {
101
- it('should add scripts section if it does not exist', () => {
102
- // Start with config without scripts section
103
- writeFileSync(configPath, '# Empty config\n');
104
- // Simulate adding a script to config
105
- const currentContent = readFileSync(configPath, 'utf-8');
106
- const updatedContent = `${currentContent}
107
- scripts:
108
- new-script: .polka-scripts/new-script.ts
109
- `;
110
- writeFileSync(configPath, updatedContent);
111
- const configContent = readFileSync(configPath, 'utf-8');
112
- expect(configContent).toContain('scripts:');
113
- expect(configContent).toContain('new-script');
114
- });
115
- it('should append to existing scripts section', () => {
116
- // Start with existing scripts
117
- const initialConfig = `scripts:
118
- existing-script: .polka-scripts/existing.ts
119
- `;
120
- writeFileSync(configPath, initialConfig);
121
- // Simulate adding another script
122
- const currentContent = readFileSync(configPath, 'utf-8');
123
- const updatedContent = `${currentContent}
124
- new-script: .polka-scripts/new.ts
125
- `;
126
- writeFileSync(configPath, updatedContent);
127
- const configContent = readFileSync(configPath, 'utf-8');
128
- expect(configContent).toContain('existing-script');
129
- expect(configContent).toContain('new-script');
130
- });
131
- it('should preserve existing config structure', () => {
132
- const initialConfig = `# Project configuration
133
- defaultProvider: openai
134
- defaultModel: gpt-4
135
-
136
- maxMessageCount: 50
137
- `;
138
- writeFileSync(configPath, initialConfig);
139
- // Simulate adding scripts
140
- const currentContent = readFileSync(configPath, 'utf-8');
141
- const updatedContent = `${currentContent}
142
- scripts:
143
- new-script: .polka-scripts/new.ts
144
- `;
145
- writeFileSync(configPath, updatedContent);
146
- const configContent = readFileSync(configPath, 'utf-8');
147
- expect(configContent).toContain('defaultProvider:');
148
- expect(configContent).toContain('defaultModel:');
149
- expect(configContent).toContain('maxMessageCount:');
150
- expect(configContent).toContain('scripts:');
151
- expect(configContent).toContain('new-script');
152
- });
153
- });
154
- describe('Script execution via runner', () => {
155
- it('should create executable script that can be run', async () => {
156
- const scriptName = 'runnable-script';
157
- const scriptPath = join(scriptsDir, `${scriptName}.ts`);
158
- const template = `// Generated by polka.codes
159
- export async function main(args: string[]) {
160
- console.log('Running script: ${scriptName}')
161
- return { success: true, args }
162
- }
163
-
164
- if (import.meta.main) {
165
- main(process.argv.slice(2))
166
- }
167
- `;
168
- writeFileSync(scriptPath, template);
169
- // Verify script file exists
170
- expect(existsSync(scriptPath)).toBe(true);
171
- // Verify script can be imported (simulating execution)
172
- const absolutePath = join(scriptsDir, `${scriptName}.ts`);
173
- delete require.cache[absolutePath];
174
- const scriptModule = await import(absolutePath);
175
- expect(typeof scriptModule.main).toBe('function');
176
- const result = await scriptModule.main(['--test']);
177
- expect(result.success).toBe(true);
178
- expect(result.args).toEqual(['--test']);
179
- });
180
- it('should create script that accepts arguments', async () => {
181
- const scriptName = 'args-script';
182
- const scriptPath = join(scriptsDir, `${scriptName}.ts`);
183
- const template = `// Generated by polka.codes
184
- export async function main(args: string[]) {
185
- return {
186
- scriptName: '${scriptName}',
187
- arguments: args,
188
- count: args.length
189
- }
190
- }
191
-
192
- if (import.meta.main) {
193
- main(process.argv.slice(2))
194
- }
195
- `;
196
- writeFileSync(scriptPath, template);
197
- // Test with arguments
198
- const absolutePath = join(scriptsDir, `${scriptName}.ts`);
199
- delete require.cache[absolutePath];
200
- const scriptModule = await import(absolutePath);
201
- const testArgs = ['--arg1', '--arg2', 'test-value'];
202
- const result = await scriptModule.main(testArgs);
203
- expect(result.scriptName).toBe(scriptName);
204
- expect(result.arguments).toEqual(testArgs);
205
- expect(result.count).toBe(3);
206
- });
207
- });
208
- describe('Multiple script creation', () => {
209
- it('should handle multiple scripts in directory', () => {
210
- const scriptNames = ['script1', 'script2', 'script3'];
211
- for (const name of scriptNames) {
212
- const scriptPath = join(scriptsDir, `${name}.ts`);
213
- const template = `export async function main(args: string[]) {
214
- return { name: '${name}' }
215
- }
216
-
217
- if (import.meta.main) {
218
- main(process.argv.slice(2))
219
- }
220
- `;
221
- writeFileSync(scriptPath, template);
222
- }
223
- // Verify all scripts were created
224
- for (const name of scriptNames) {
225
- const scriptPath = join(scriptsDir, `${name}.ts`);
226
- expect(existsSync(scriptPath)).toBe(true);
227
- }
228
- // Verify config can be updated with all scripts
229
- const currentContent = readFileSync(configPath, 'utf-8');
230
- const scriptsSection = scriptNames.map((name) => ` ${name}: .polka-scripts/${name}.ts`).join('\n');
231
- const updatedContent = `${currentContent}
232
- scripts:
233
- ${scriptsSection}
234
- `;
235
- writeFileSync(configPath, updatedContent);
236
- const configContent = readFileSync(configPath, 'utf-8');
237
- for (const name of scriptNames) {
238
- expect(configContent).toContain(name);
239
- }
240
- });
241
- });
242
- describe('Config loading after script creation', () => {
243
- it('should load config with newly created scripts', async () => {
244
- // Create script files
245
- writeFileSync(join(scriptsDir, 'deploy.ts'), `export async function main(args: string[]) {
246
- return { deployed: true }
247
- }`);
248
- writeFileSync(join(scriptsDir, 'build.ts'), `export async function main(args: string[]) {
249
- return { built: true }
250
- }`);
251
- // Update config
252
- const configContent = `
253
- scripts:
254
- deploy:
255
- script: .polka-scripts/deploy.ts
256
- description: Deploy to production
257
- build:
258
- script: .polka-scripts/build.ts
259
- description: Build project
260
- `;
261
- writeFileSync(configPath, configContent);
262
- // Load and verify config
263
- const config = await loadConfig([], testProjectDir);
264
- expect(config).toBeDefined();
265
- expect(config?.scripts).toBeDefined();
266
- expect(config?.scripts?.deploy).toBeDefined();
267
- expect(config?.scripts?.build).toBeDefined();
268
- });
269
- });
270
- });
271
- //# sourceMappingURL=script-generator.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"script-generator.integration.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/script-generator.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,218 +0,0 @@
1
- import { exec } from 'node:child_process';
2
- import { randomUUID } from 'node:crypto';
3
- import * as fs from 'node:fs/promises';
4
- import * as path from 'node:path';
5
- import { promisify } from 'node:util';
6
- import { createErrorResponse, createSuccessResponse } from '@polka-codes/core';
7
- import { Command } from 'commander';
8
- import { loadConfig } from '../agent/config';
9
- import { AutonomousAgent } from '../agent/orchestrator';
10
- import { createLogger } from '../logger';
11
- import { quoteForShell } from '../utils/shell';
12
- /**
13
- * Validates that a command string contains only safe characters
14
- * (alphanumeric, hyphen, underscore, slash, dot, and colon)
15
- * This prevents shell injection via malicious command strings
16
- */
17
- function validateCommandName(command) {
18
- // Allow alphanumeric, hyphen, underscore, forward slash, dot, and colon
19
- // This covers common cases like: git, npm, bun, node, ./script.sh, /usr/bin/command
20
- const safeCommandPattern = /^[a-zA-Z0-9_\-./:]+$/;
21
- if (!safeCommandPattern.test(command)) {
22
- throw new Error(`Invalid command: '${command}' contains unsafe characters. ` +
23
- `Commands must not contain spaces. If you need to pass arguments, use the 'args' array parameter instead. ` +
24
- `Only alphanumeric, hyphen, underscore, slash, dot, and colon are allowed in the command field.`);
25
- }
26
- }
27
- /**
28
- * Autonomous agent command
29
- *
30
- * Usage:
31
- * bun run agent "Add user authentication" # Goal-directed mode
32
- * bun run agent --continuous # Continuous improvement mode
33
- * bun run agent --preset conservative "Fix tests" # Use preset configuration
34
- */
35
- export async function runAgent(goal, options, _command) {
36
- const globalOpts = (_command.parent ?? _command).opts();
37
- const verbose = typeof globalOpts.verbose === 'number' ? globalOpts.verbose : 0;
38
- const logger = createLogger({ verbose });
39
- logger.info('🤖 Polka Agent');
40
- logger.info('='.repeat(60));
41
- // Map CLI options to config format
42
- // --continuous flag maps to strategy: 'continuous-improvement'
43
- // --approval-level maps to requireApprovalFor in config
44
- const strategy = options.continuous
45
- ? 'continuous-improvement'
46
- : (options.strategy ?? 'goal-directed');
47
- const requireApprovalFor = options.approvalLevel ?? 'destructive';
48
- const configOptions = {
49
- strategy,
50
- approval: { level: requireApprovalFor, autoApproveSafeTasks: true, maxAutoApprovalCost: 5 },
51
- };
52
- // Load configuration
53
- const config = await loadConfig(configOptions, options.config);
54
- // Create workflow context
55
- const workingDir = process.cwd();
56
- const stateDir = path.join(workingDir, '.polka', 'agent-state');
57
- const sessionId = `agent-${Date.now()}-${randomUUID()}`;
58
- // Create minimal tools implementation for agent context
59
- //
60
- // CRITICAL LIMITATION: The agent currently only provides executeCommand and readFile.
61
- // When the agent invokes workflows (code, fix, plan, etc.) via WorkflowAdapter, those
62
- // workflows expect a full tool context (writeToFile, listFiles, searchFiles, etc.).
63
- //
64
- // This will cause runtime errors if workflows try to use tools beyond executeCommand
65
- // and readFile. The agent context should be initialized with full tools like runWorkflow
66
- // does, using the toolCall infrastructure and provider.
67
- //
68
- // For now, the agent is primarily used for task discovery and planning, which only
69
- // requires executeCommand and readFile. Full workflow execution support requires:
70
- // 1. Initializing provider (getProvider, getModel)
71
- // 2. Creating UsageMeter
72
- // 3. Initializing MCP manager
73
- // 4. Creating Proxy-based tools delegation to toolCall
74
- // 5. Passing full context to AutonomousAgent
75
- //
76
- // TODO: Refactor agent.ts to use runWorkflow infrastructure for full tool support
77
- const asyncExec = promisify(exec);
78
- // Create minimal tools implementation for agent context
79
- const tools = {
80
- executeCommand: async (input) => {
81
- // SECURITY: Validate command name to prevent shell injection
82
- validateCommandName(input.command);
83
- // SECURITY: We use child_process.exec (not spawn) to enable shell features needed by git commands.
84
- // This is safe because:
85
- // 1. Command name is validated to contain only safe characters
86
- // 2. All arguments are quoted using quoteForShell() to prevent injection
87
- // 3. The agent is intended for local development where the user has full shell access anyway
88
- // 4. Working directory is restricted to the project root
89
- //
90
- // Trade-off: Using exec with a string is riskier than spawn with an argument array, but
91
- // necessary for shell operations like git which require shell expansion. The quoteForShell
92
- // function is designed to handle all shell special characters safely.
93
- // Build command from input with proper shell quoting
94
- let fullCommand;
95
- if (input.args && input.args.length > 0) {
96
- // Quote each argument to handle spaces and special characters safely
97
- const quotedArgs = input.args.map(quoteForShell);
98
- fullCommand = `${input.command} ${quotedArgs.join(' ')}`;
99
- }
100
- else {
101
- // Use full command string
102
- fullCommand = input.command;
103
- }
104
- // Note: exec always spawns a shell, so the 'shell' parameter is ignored.
105
- // This is intentional for safety - we want shell expansion for git commands.
106
- // All arguments are properly quoted to prevent injection.
107
- try {
108
- // Increase maxBuffer to handle large git operations (10MB instead of default 1MB)
109
- const { stdout, stderr } = await asyncExec(fullCommand, {
110
- cwd: workingDir,
111
- maxBuffer: 10 * 1024 * 1024, // 10MB
112
- });
113
- return createSuccessResponse(`Command executed successfully\nExit code: 0\nStdout:\n${stdout}\n${stderr ? `Stderr:\n${stderr}` : ''}`);
114
- }
115
- catch (error) {
116
- // Handle ENOBUFS errors (buffer overflow) explicitly
117
- const errorCode = error && typeof error === 'object' && 'code' in error ? String(error.code) : undefined;
118
- const errorErrno = error && typeof error === 'object' && 'errno' in error ? String(error.errno) : undefined;
119
- const errorMessage = error instanceof Error ? error.message : String(error);
120
- if (errorErrno === 'ENOBUFS' || errorCode === 'ENOBUFS') {
121
- const errorStdout = error && typeof error === 'object' && 'stdout' in error ? String(error.stdout) : '';
122
- return createErrorResponse(`Command output exceeded buffer limit (10MB). The command produced too much output. Try using different arguments or redirecting output to a file. Original error: ${errorMessage}\nStdout:\n${errorStdout}`);
123
- }
124
- const errorStdout = error && typeof error === 'object' && 'stdout' in error ? String(error.stdout) : '';
125
- const errorStderr = error && typeof error === 'object' && 'stderr' in error ? String(error.stderr) : errorMessage;
126
- return createErrorResponse(`Command failed with exit code ${errorCode || '1'}\n${errorStderr ? `Stderr:\n${errorStderr}` : errorMessage}${errorStdout ? `\nStdout:\n${errorStdout}` : ''}`);
127
- }
128
- },
129
- readFile: async ({ path: filePath }) => {
130
- const fullPath = path.resolve(workingDir, filePath);
131
- // Validate path is within working directory to prevent reading arbitrary files
132
- // NOTE: This validation prevents basic path traversal but doesn't protect against:
133
- // - Symlinks that point outside the working directory
134
- // - Case-insensitive filesystems (Windows/macOS) where paths could differ in case
135
- // For a local CLI tool, this level of protection is reasonable to prevent accidental reads
136
- const normalizedPath = path.normalize(fullPath);
137
- const normalizedWorkingDir = path.normalize(workingDir);
138
- if (!normalizedPath.startsWith(normalizedWorkingDir + path.sep) && normalizedPath !== normalizedWorkingDir) {
139
- return createErrorResponse(`Path "${filePath}" is outside working directory "${workingDir}"`);
140
- }
141
- const content = await fs.readFile(fullPath, 'utf-8');
142
- return createSuccessResponse(content);
143
- },
144
- };
145
- // Simple step function for workflow execution tracking
146
- // NOTE: This is a minimal implementation that bypasses some workflow step features:
147
- // - No retry logic on failures
148
- // - No step timeout handling
149
- // - No detailed step event logging
150
- // This is acceptable for the agent command context where the autonomous agent
151
- // handles its own retries and error recovery. The step function exists primarily
152
- // for compatibility with the workflow system.
153
- const step = async (_name, optionsOrFn, fn) => {
154
- const actualFn = fn || optionsOrFn;
155
- if (typeof actualFn === 'function') {
156
- return await actualFn();
157
- }
158
- throw new Error('Invalid step function call');
159
- };
160
- const context = {
161
- logger,
162
- step,
163
- workingDir,
164
- stateDir,
165
- sessionId,
166
- tools,
167
- };
168
- // Create agent
169
- const agent = new AutonomousAgent(config, context);
170
- try {
171
- // Initialize
172
- await agent.initialize();
173
- // Check mode
174
- if (options.continuous) {
175
- logger.info('🔄 Mode: Continuous Improvement');
176
- await agent.runContinuous();
177
- }
178
- else {
179
- if (!goal) {
180
- logger.error('❌ Error: Goal is required for goal-directed mode');
181
- logger.error('Usage: bun run agent "your goal here"');
182
- logger.error('');
183
- logger.error('Or use --continuous for autonomous improvement mode');
184
- await agent.cleanup();
185
- return;
186
- }
187
- logger.info(`📝 Goal: ${goal}`);
188
- await agent.setGoal(goal);
189
- await agent.run();
190
- }
191
- // Cleanup
192
- await agent.cleanup();
193
- logger.info('');
194
- logger.info('✅ Agent session complete');
195
- logger.info('');
196
- }
197
- catch (error) {
198
- const errorMessage = error instanceof Error ? error.message : String(error);
199
- logger.error('');
200
- logger.error(`❌ Agent failed: ${errorMessage}`);
201
- logger.error('');
202
- try {
203
- await agent.cleanup();
204
- }
205
- catch (cleanupError) {
206
- logger.warn(`Warning: Error during agent cleanup: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`);
207
- }
208
- }
209
- }
210
- export const agentCommand = new Command('agent')
211
- .description('Run autonomous agent (experimental)')
212
- .argument('[goal]', 'Goal to achieve', '')
213
- .option('--continuous', 'Run in continuous improvement mode')
214
- .option('--preset <name>', 'Configuration preset', 'balanced')
215
- .option('--config <path>', 'Configuration file path')
216
- .option('--approval-level <level>', 'Approval level (none|destructive|commits|all)', 'destructive')
217
- .action(runAgent);
218
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -1,102 +0,0 @@
1
- // generated by polka.codes
2
- import { readFile } from 'node:fs/promises';
3
- import { Command } from 'commander';
4
- import { lookup } from 'mime-types';
5
- import { code } from '../api';
6
- import { COMMAND_CONSTANTS } from '../commands/command.constants';
7
- import { parseOptions } from '../options';
8
- import { getBaseWorkflowOptions } from '../utils/command';
9
- import { getUserInput } from '../utils/userInput';
10
- const readStdin = async (timeoutMs = COMMAND_CONSTANTS.DEFAULT_STDIN_TIMEOUT_MS) => {
11
- if (process.stdin.isTTY) {
12
- return '';
13
- }
14
- return new Promise((resolve, reject) => {
15
- let input = '';
16
- const cleanup = () => {
17
- if (timeoutId)
18
- clearTimeout(timeoutId);
19
- process.stdin.removeAllListeners();
20
- };
21
- const timeoutId = setTimeout(() => {
22
- cleanup();
23
- // Don't reject, just resolve with what we have
24
- resolve(input);
25
- }, timeoutMs);
26
- process.stdin.on('data', (chunk) => {
27
- input += chunk.toString();
28
- });
29
- process.stdin.on('end', () => {
30
- cleanup();
31
- resolve(input);
32
- });
33
- process.stdin.on('error', (err) => {
34
- cleanup();
35
- reject(err);
36
- });
37
- });
38
- };
39
- export async function runCode(task, _options, command) {
40
- let taskInput = task;
41
- const stdin = await readStdin();
42
- if (stdin) {
43
- taskInput = stdin;
44
- }
45
- const workflowOpts = getBaseWorkflowOptions(command);
46
- const { file: files } = await parseOptions(command.opts(), { commandName: 'code' });
47
- const fileContents = [];
48
- if (files) {
49
- for (const file of files) {
50
- try {
51
- const mimeType = lookup(file);
52
- if (mimeType) {
53
- const buffer = await readFile(file);
54
- if (mimeType.startsWith('image/')) {
55
- fileContents.push({
56
- type: 'image',
57
- mediaType: mimeType,
58
- image: buffer.toString('base64'),
59
- });
60
- }
61
- else {
62
- fileContents.push({
63
- type: 'file',
64
- mediaType: mimeType,
65
- filename: file,
66
- data: buffer.toString('base64'),
67
- });
68
- }
69
- }
70
- else {
71
- workflowOpts.logger.warn(`Unknown mime type for file: ${file}`);
72
- }
73
- }
74
- catch (error) {
75
- workflowOpts.logger.error(`Error reading file '${file}': ${error.message}`);
76
- }
77
- }
78
- }
79
- if (!taskInput && fileContents.length === 0) {
80
- taskInput = await getUserInput('What feature or task do you want to implement?');
81
- if (taskInput === undefined) {
82
- return;
83
- }
84
- }
85
- if (!taskInput && fileContents.length > 0) {
86
- taskInput = 'Implement the changes based on the provided files.';
87
- }
88
- if (!taskInput) {
89
- workflowOpts.logger.error('No task provided. Aborting.');
90
- return;
91
- }
92
- await code({
93
- task: taskInput,
94
- files: fileContents,
95
- ...workflowOpts,
96
- });
97
- }
98
- export const codeCommand = new Command('code')
99
- .description('Plan and implement a feature or task using architect and coder agents.')
100
- .argument('[task]', 'The task to plan and implement.')
101
- .action(runCode);
102
- //# sourceMappingURL=code.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Constants for command-line commands
3
- * Extracted to improve code readability and maintainability
4
- */
5
- export const COMMAND_CONSTANTS = {
6
- /** Default timeout (in milliseconds) for reading from stdin */
7
- DEFAULT_STDIN_TIMEOUT_MS: 1000,
8
- /** Default number of context lines to show around search matches */
9
- DEFAULT_CONTEXT_LINES: 5,
10
- /** Threshold for summarizing output (in characters) */
11
- SUMMARY_THRESHOLD: 5000,
12
- };
13
- //# sourceMappingURL=command.constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command.constants.js","sourceRoot":"","sources":["../../src/commands/command.constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,+DAA+D;IAC/D,wBAAwB,EAAE,IAAI;IAE9B,oEAAoE;IACpE,qBAAqB,EAAE,CAAC;IAExB,uDAAuD;IACvD,iBAAiB,EAAE,IAAI;CACf,CAAA"}