@polka-codes/cli 0.10.23 → 0.10.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +3 -3
  3. package/dist/ApiProviderConfig.js +0 -57
  4. package/dist/ApiProviderConfig.js.map +0 -1
  5. package/dist/ApiProviderConfig.test.js +0 -278
  6. package/dist/ApiProviderConfig.test.js.map +0 -1
  7. package/dist/agent/advanced-discovery.js +0 -604
  8. package/dist/agent/advanced-discovery.js.map +0 -1
  9. package/dist/agent/config.js +0 -139
  10. package/dist/agent/config.js.map +0 -1
  11. package/dist/agent/config.test.js +0 -140
  12. package/dist/agent/config.test.js.map +0 -1
  13. package/dist/agent/constants.js +0 -172
  14. package/dist/agent/constants.js.map +0 -1
  15. package/dist/agent/constants.test.js +0 -132
  16. package/dist/agent/constants.test.js.map +0 -1
  17. package/dist/agent/debug-logger.js +0 -281
  18. package/dist/agent/debug-logger.js.map +0 -1
  19. package/dist/agent/debug-logger.test.js +0 -294
  20. package/dist/agent/debug-logger.test.js.map +0 -1
  21. package/dist/agent/error-handling.js +0 -114
  22. package/dist/agent/error-handling.js.map +0 -1
  23. package/dist/agent/error-handling.test.js +0 -191
  24. package/dist/agent/error-handling.test.js.map +0 -1
  25. package/dist/agent/errors.js +0 -301
  26. package/dist/agent/errors.js.map +0 -1
  27. package/dist/agent/executor.js +0 -206
  28. package/dist/agent/executor.js.map +0 -1
  29. package/dist/agent/executor.test.js +0 -228
  30. package/dist/agent/executor.test.js.map +0 -1
  31. package/dist/agent/goal-decomposer.js +0 -281
  32. package/dist/agent/goal-decomposer.js.map +0 -1
  33. package/dist/agent/goal-decomposer.test.js +0 -225
  34. package/dist/agent/goal-decomposer.test.js.map +0 -1
  35. package/dist/agent/health-monitor.js +0 -89
  36. package/dist/agent/health-monitor.js.map +0 -1
  37. package/dist/agent/improvement-loop.js +0 -177
  38. package/dist/agent/improvement-loop.js.map +0 -1
  39. package/dist/agent/index.js +0 -38
  40. package/dist/agent/index.js.map +0 -1
  41. package/dist/agent/metrics.js +0 -158
  42. package/dist/agent/metrics.js.map +0 -1
  43. package/dist/agent/metrics.test.js +0 -311
  44. package/dist/agent/metrics.test.js.map +0 -1
  45. package/dist/agent/orchestrator.js +0 -438
  46. package/dist/agent/orchestrator.js.map +0 -1
  47. package/dist/agent/planner.js +0 -199
  48. package/dist/agent/planner.js.map +0 -1
  49. package/dist/agent/planner.test.js +0 -135
  50. package/dist/agent/planner.test.js.map +0 -1
  51. package/dist/agent/progress.js +0 -298
  52. package/dist/agent/progress.js.map +0 -1
  53. package/dist/agent/progress.test.js +0 -255
  54. package/dist/agent/progress.test.js.map +0 -1
  55. package/dist/agent/resource-monitor.js +0 -114
  56. package/dist/agent/resource-monitor.js.map +0 -1
  57. package/dist/agent/safety/approval.js +0 -178
  58. package/dist/agent/safety/approval.js.map +0 -1
  59. package/dist/agent/safety/approval.test.js +0 -142
  60. package/dist/agent/safety/approval.test.js.map +0 -1
  61. package/dist/agent/safety/checks.js +0 -152
  62. package/dist/agent/safety/checks.js.map +0 -1
  63. package/dist/agent/safety/checks.test.js +0 -89
  64. package/dist/agent/safety/checks.test.js.map +0 -1
  65. package/dist/agent/safety/interrupt.js +0 -92
  66. package/dist/agent/safety/interrupt.js.map +0 -1
  67. package/dist/agent/safety/interrupt.test.js +0 -53
  68. package/dist/agent/safety/interrupt.test.js.map +0 -1
  69. package/dist/agent/session.js +0 -117
  70. package/dist/agent/session.js.map +0 -1
  71. package/dist/agent/session.test.js +0 -213
  72. package/dist/agent/session.test.js.map +0 -1
  73. package/dist/agent/state-manager.js +0 -287
  74. package/dist/agent/state-manager.js.map +0 -1
  75. package/dist/agent/task-discovery.js +0 -433
  76. package/dist/agent/task-discovery.js.map +0 -1
  77. package/dist/agent/task-discovery.test.js +0 -40
  78. package/dist/agent/task-discovery.test.js.map +0 -1
  79. package/dist/agent/task-history.js +0 -128
  80. package/dist/agent/task-history.js.map +0 -1
  81. package/dist/agent/task-prioritizer.js +0 -286
  82. package/dist/agent/task-prioritizer.js.map +0 -1
  83. package/dist/agent/test-fixtures.js +0 -112
  84. package/dist/agent/test-fixtures.js.map +0 -1
  85. package/dist/agent/types.js +0 -15
  86. package/dist/agent/types.js.map +0 -1
  87. package/dist/agent/workflow-adapter.js +0 -219
  88. package/dist/agent/workflow-adapter.js.map +0 -1
  89. package/dist/agent/workflow-adapter.test.js +0 -11
  90. package/dist/agent/workflow-adapter.test.js.map +0 -1
  91. package/dist/agent/working-dir-discovery.js +0 -54
  92. package/dist/agent/working-dir-discovery.js.map +0 -1
  93. package/dist/agent/working-space.js +0 -484
  94. package/dist/agent/working-space.js.map +0 -1
  95. package/dist/agent/working-space.test.js +0 -436
  96. package/dist/agent/working-space.test.js.map +0 -1
  97. package/dist/api.js +0 -279
  98. package/dist/api.js.map +0 -1
  99. package/dist/builtin-commands.js +0 -20
  100. package/dist/builtin-commands.js.map +0 -1
  101. package/dist/commandSummarizer.js +0 -96
  102. package/dist/commandSummarizer.js.map +0 -1
  103. package/dist/commands/__tests__/command-detection.integration.test.js +0 -238
  104. package/dist/commands/__tests__/command-detection.integration.test.js.map +0 -1
  105. package/dist/commands/__tests__/script-generator.integration.test.js +0 -271
  106. package/dist/commands/__tests__/script-generator.integration.test.js.map +0 -1
  107. package/dist/commands/agent.js +0 -218
  108. package/dist/commands/agent.js.map +0 -1
  109. package/dist/commands/code.js +0 -102
  110. package/dist/commands/code.js.map +0 -1
  111. package/dist/commands/command.constants.js +0 -13
  112. package/dist/commands/command.constants.js.map +0 -1
  113. package/dist/commands/commit.js +0 -17
  114. package/dist/commands/commit.js.map +0 -1
  115. package/dist/commands/fix.js +0 -17
  116. package/dist/commands/fix.js.map +0 -1
  117. package/dist/commands/init.js +0 -501
  118. package/dist/commands/init.js.map +0 -1
  119. package/dist/commands/mcp-server.js +0 -122
  120. package/dist/commands/mcp-server.js.map +0 -1
  121. package/dist/commands/memory.js +0 -410
  122. package/dist/commands/memory.js.map +0 -1
  123. package/dist/commands/memory.test.js +0 -453
  124. package/dist/commands/memory.test.js.map +0 -1
  125. package/dist/commands/meta.js +0 -142
  126. package/dist/commands/meta.js.map +0 -1
  127. package/dist/commands/plan.js +0 -39
  128. package/dist/commands/plan.js.map +0 -1
  129. package/dist/commands/pr.js +0 -14
  130. package/dist/commands/pr.js.map +0 -1
  131. package/dist/commands/review-json.test.js +0 -33
  132. package/dist/commands/review-json.test.js.map +0 -1
  133. package/dist/commands/review.js +0 -137
  134. package/dist/commands/review.js.map +0 -1
  135. package/dist/commands/review.usage.test.js +0 -41
  136. package/dist/commands/review.usage.test.js.map +0 -1
  137. package/dist/commands/run.js +0 -107
  138. package/dist/commands/run.js.map +0 -1
  139. package/dist/commands/skills.js +0 -175
  140. package/dist/commands/skills.js.map +0 -1
  141. package/dist/commands/task.js +0 -34
  142. package/dist/commands/task.js.map +0 -1
  143. package/dist/commands/workflow.js +0 -117
  144. package/dist/commands/workflow.js.map +0 -1
  145. package/dist/configPrompt.js +0 -39
  146. package/dist/configPrompt.js.map +0 -1
  147. package/dist/env.js +0 -22
  148. package/dist/env.js.map +0 -1
  149. package/dist/errors.js +0 -132
  150. package/dist/errors.js.map +0 -1
  151. package/dist/errors.test.js +0 -21
  152. package/dist/errors.test.js.map +0 -1
  153. package/dist/file-attachments.js +0 -77
  154. package/dist/file-attachments.js.map +0 -1
  155. package/dist/file-attachments.test.js +0 -214
  156. package/dist/file-attachments.test.js.map +0 -1
  157. package/dist/getModel.js +0 -229
  158. package/dist/getModel.js.map +0 -1
  159. package/dist/getModel.test.js +0 -67
  160. package/dist/getModel.test.js.map +0 -1
  161. package/dist/getProviderOptions.js +0 -58
  162. package/dist/getProviderOptions.js.map +0 -1
  163. package/dist/git-operations.js +0 -363
  164. package/dist/git-operations.js.map +0 -1
  165. package/dist/git-operations.test.js +0 -81
  166. package/dist/git-operations.test.js.map +0 -1
  167. package/dist/index.js.map +0 -1
  168. package/dist/logger.js +0 -41
  169. package/dist/logger.js.map +0 -1
  170. package/dist/mcp/client.js +0 -11
  171. package/dist/mcp/client.js.map +0 -1
  172. package/dist/mcp/error-scenarios.test.js +0 -206
  173. package/dist/mcp/error-scenarios.test.js.map +0 -1
  174. package/dist/mcp/errors.js +0 -63
  175. package/dist/mcp/errors.js.map +0 -1
  176. package/dist/mcp/index.js +0 -9
  177. package/dist/mcp/index.js.map +0 -1
  178. package/dist/mcp/manager.js +0 -231
  179. package/dist/mcp/manager.js.map +0 -1
  180. package/dist/mcp/manager.test.js +0 -40
  181. package/dist/mcp/manager.test.js.map +0 -1
  182. package/dist/mcp/sdk-client.js +0 -166
  183. package/dist/mcp/sdk-client.js.map +0 -1
  184. package/dist/mcp/shared-types.js +0 -3
  185. package/dist/mcp/shared-types.js.map +0 -1
  186. package/dist/mcp/tools-integration.test.js +0 -198
  187. package/dist/mcp/tools-integration.test.js.map +0 -1
  188. package/dist/mcp/tools.js +0 -60
  189. package/dist/mcp/tools.js.map +0 -1
  190. package/dist/mcp/transport.js +0 -257
  191. package/dist/mcp/transport.js.map +0 -1
  192. package/dist/mcp/types.js +0 -3
  193. package/dist/mcp/types.js.map +0 -1
  194. package/dist/mcp-server/index.js +0 -5
  195. package/dist/mcp-server/index.js.map +0 -1
  196. package/dist/mcp-server/plan-formatting.test.js +0 -74
  197. package/dist/mcp-server/plan-formatting.test.js.map +0 -1
  198. package/dist/mcp-server/sdk-server.js +0 -102
  199. package/dist/mcp-server/sdk-server.js.map +0 -1
  200. package/dist/mcp-server/sdk-server.test.js +0 -363
  201. package/dist/mcp-server/sdk-server.test.js.map +0 -1
  202. package/dist/mcp-server/tools.js +0 -785
  203. package/dist/mcp-server/tools.js.map +0 -1
  204. package/dist/mcp-server/types.js +0 -3
  205. package/dist/mcp-server/types.js.map +0 -1
  206. package/dist/options.js +0 -85
  207. package/dist/options.js.map +0 -1
  208. package/dist/options.test.js +0 -177
  209. package/dist/options.test.js.map +0 -1
  210. package/dist/prices.js +0 -61
  211. package/dist/prices.js.map +0 -1
  212. package/dist/prices.test.js +0 -148
  213. package/dist/prices.test.js.map +0 -1
  214. package/dist/runWorkflow.js +0 -313
  215. package/dist/runWorkflow.js.map +0 -1
  216. package/dist/script/__tests__/execution.integration.test.js +0 -274
  217. package/dist/script/__tests__/execution.integration.test.js.map +0 -1
  218. package/dist/script/__tests__/runner.test.js +0 -176
  219. package/dist/script/__tests__/runner.test.js.map +0 -1
  220. package/dist/script/__tests__/validator.test.js +0 -180
  221. package/dist/script/__tests__/validator.test.js.map +0 -1
  222. package/dist/script/executor.js +0 -127
  223. package/dist/script/executor.js.map +0 -1
  224. package/dist/script/index.js +0 -4
  225. package/dist/script/index.js.map +0 -1
  226. package/dist/script/runner.js +0 -258
  227. package/dist/script/runner.js.map +0 -1
  228. package/dist/skillIntegration.js +0 -46
  229. package/dist/skillIntegration.js.map +0 -1
  230. package/dist/skillIntegration.test.js +0 -128
  231. package/dist/skillIntegration.test.js.map +0 -1
  232. package/dist/test/utils.js +0 -200
  233. package/dist/test/utils.js.map +0 -1
  234. package/dist/test/workflow-fixtures.js +0 -120
  235. package/dist/test/workflow-fixtures.js.map +0 -1
  236. package/dist/tool-implementations.js +0 -521
  237. package/dist/tool-implementations.js.map +0 -1
  238. package/dist/tool-implementations.skill-tools.test.js +0 -106
  239. package/dist/tool-implementations.skill-tools.test.js.map +0 -1
  240. package/dist/tools/getTodoItem.js +0 -33
  241. package/dist/tools/getTodoItem.js.map +0 -1
  242. package/dist/tools/gitDiff.js +0 -108
  243. package/dist/tools/gitDiff.js.map +0 -1
  244. package/dist/tools/index.js +0 -8
  245. package/dist/tools/index.js.map +0 -1
  246. package/dist/tools/listMemoryTopics.js +0 -24
  247. package/dist/tools/listMemoryTopics.js.map +0 -1
  248. package/dist/tools/listTodoItems.js +0 -35
  249. package/dist/tools/listTodoItems.js.map +0 -1
  250. package/dist/tools/listTodoItems.test.js +0 -89
  251. package/dist/tools/listTodoItems.test.js.map +0 -1
  252. package/dist/tools/readMemory.js +0 -33
  253. package/dist/tools/readMemory.js.map +0 -1
  254. package/dist/tools/updateMemory.js +0 -62
  255. package/dist/tools/updateMemory.js.map +0 -1
  256. package/dist/tools/updateMemory.test.js +0 -109
  257. package/dist/tools/updateMemory.test.js.map +0 -1
  258. package/dist/tools/updateTodoItem.js +0 -31
  259. package/dist/tools/updateTodoItem.js.map +0 -1
  260. package/dist/tools/utils/diffLineNumbers.js +0 -178
  261. package/dist/tools/utils/diffLineNumbers.js.map +0 -1
  262. package/dist/utils/cacheControl.js +0 -59
  263. package/dist/utils/cacheControl.js.map +0 -1
  264. package/dist/utils/cacheControl.test.js +0 -128
  265. package/dist/utils/cacheControl.test.js.map +0 -1
  266. package/dist/utils/command.js +0 -50
  267. package/dist/utils/command.js.map +0 -1
  268. package/dist/utils/shell.js +0 -56
  269. package/dist/utils/shell.js.map +0 -1
  270. package/dist/utils/userInput.js +0 -47
  271. package/dist/utils/userInput.js.map +0 -1
  272. package/dist/workflow-tools.js +0 -21
  273. package/dist/workflow-tools.js.map +0 -1
  274. package/dist/workflows/agent-builder.js +0 -90
  275. package/dist/workflows/agent-builder.js.map +0 -1
  276. package/dist/workflows/agent-builder.test.js +0 -115
  277. package/dist/workflows/agent-builder.test.js.map +0 -1
  278. package/dist/workflows/code.workflow.js +0 -145
  279. package/dist/workflows/code.workflow.js.map +0 -1
  280. package/dist/workflows/commit.workflow.js +0 -111
  281. package/dist/workflows/commit.workflow.js.map +0 -1
  282. package/dist/workflows/commit.workflow.test.js +0 -141
  283. package/dist/workflows/commit.workflow.test.js.map +0 -1
  284. package/dist/workflows/fix.workflow.js +0 -172
  285. package/dist/workflows/fix.workflow.js.map +0 -1
  286. package/dist/workflows/fix.workflow.test.js +0 -137
  287. package/dist/workflows/fix.workflow.test.js.map +0 -1
  288. package/dist/workflows/git-file-tools.js +0 -408
  289. package/dist/workflows/git-file-tools.js.map +0 -1
  290. package/dist/workflows/index.js +0 -12
  291. package/dist/workflows/index.js.map +0 -1
  292. package/dist/workflows/init-interactive.workflow.js +0 -198
  293. package/dist/workflows/init-interactive.workflow.js.map +0 -1
  294. package/dist/workflows/init.workflow.js +0 -41
  295. package/dist/workflows/init.workflow.js.map +0 -1
  296. package/dist/workflows/meta.workflow.js +0 -107
  297. package/dist/workflows/meta.workflow.js.map +0 -1
  298. package/dist/workflows/plan.workflow.js +0 -275
  299. package/dist/workflows/plan.workflow.js.map +0 -1
  300. package/dist/workflows/plan.workflow.test.js +0 -419
  301. package/dist/workflows/plan.workflow.test.js.map +0 -1
  302. package/dist/workflows/pr.workflow.js +0 -54
  303. package/dist/workflows/pr.workflow.js.map +0 -1
  304. package/dist/workflows/pr.workflow.test.js +0 -98
  305. package/dist/workflows/pr.workflow.test.js.map +0 -1
  306. package/dist/workflows/prompts/coder.js +0 -85
  307. package/dist/workflows/prompts/coder.js.map +0 -1
  308. package/dist/workflows/prompts/commit.js +0 -16
  309. package/dist/workflows/prompts/commit.js.map +0 -1
  310. package/dist/workflows/prompts/fix.js +0 -44
  311. package/dist/workflows/prompts/fix.js.map +0 -1
  312. package/dist/workflows/prompts/index.js +0 -10
  313. package/dist/workflows/prompts/index.js.map +0 -1
  314. package/dist/workflows/prompts/init.js +0 -48
  315. package/dist/workflows/prompts/init.js.map +0 -1
  316. package/dist/workflows/prompts/meta.js +0 -17
  317. package/dist/workflows/prompts/meta.js.map +0 -1
  318. package/dist/workflows/prompts/plan.js +0 -212
  319. package/dist/workflows/prompts/plan.js.map +0 -1
  320. package/dist/workflows/prompts/pr.js +0 -15
  321. package/dist/workflows/prompts/pr.js.map +0 -1
  322. package/dist/workflows/prompts/review.js +0 -145
  323. package/dist/workflows/prompts/review.js.map +0 -1
  324. package/dist/workflows/prompts/shared.js +0 -93
  325. package/dist/workflows/prompts/shared.js.map +0 -1
  326. package/dist/workflows/review.workflow.js +0 -357
  327. package/dist/workflows/review.workflow.js.map +0 -1
  328. package/dist/workflows/task.workflow.js +0 -47
  329. package/dist/workflows/task.workflow.js.map +0 -1
  330. package/dist/workflows/testing/helper.js +0 -41
  331. package/dist/workflows/testing/helper.js.map +0 -1
  332. package/dist/workflows/workflow.utils.js +0 -351
  333. package/dist/workflows/workflow.utils.js.map +0 -1
  334. package/dist/workflows/workflow.utils.test.js +0 -45
  335. package/dist/workflows/workflow.utils.test.js.map +0 -1
@@ -1,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":"AAAA,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,OAA6B,CAAA;IACjC,IAAI,cAAsB,CAAA;IAC1B,IAAI,UAAkB,CAAA;IACtB,IAAI,UAAkB,CAAA;IAEtB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,OAAO,GAAG,IAAI,oBAAoB,EAAE,CAAA;QACpC,cAAc,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACtC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAA;QACpD,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;QAEnD,gCAAgC;QAChC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1C,wBAAwB;QACxB,MAAM,aAAa,GAAG;CACzB,CAAA;QACG,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,UAAU,GAAG,aAAa,CAAA;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,KAAK,CAAC,CAAA;YAEvD,yBAAyB;YACzB,MAAM,QAAQ,GAAG;;;;iCAIU,UAAU;;;;;;;;;;;;;CAa1C,CAAA;YAEK,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YAEnC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEzC,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACrC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,UAAU,GAAG,mBAAmB,CAAA;YACtC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,KAAK,CAAC,CAAA;YAEvD,MAAM,QAAQ,GAAG;;;;;;;;CAQtB,CAAA;YAEK,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YAEnC,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAA;YACxD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;YAE5F,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,EAAE;oBACV,sBAAsB;oBACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;oBACvD,CAAC;gBACH,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;YACtC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;YAEtF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,EAAE;oBACV,sBAAsB;oBACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;oBACjC,CAAC;gBACH,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YAClB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,4CAA4C;YAC5C,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;YAE7C,qCAAqC;YACrC,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,cAAc,GAAG,GAAG,cAAc;;;CAG7C,CAAA;YACK,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;YAEzC,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAC3C,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,8BAA8B;YAC9B,MAAM,aAAa,GAAG;;CAE3B,CAAA;YACK,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YAExC,iCAAiC;YACjC,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,cAAc,GAAG,GAAG,cAAc;;CAE7C,CAAA;YACK,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;YAEzC,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;YAClD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,aAAa,GAAG;;;;;CAK3B,CAAA;YACK,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YAExC,0BAA0B;YAC1B,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,cAAc,GAAG,GAAG,cAAc;;;CAG7C,CAAA;YACK,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;YAEzC,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;YAChD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAC3C,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,UAAU,GAAG,iBAAiB,CAAA;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,KAAK,CAAC,CAAA;YAEvD,MAAM,QAAQ,GAAG;;iCAEU,UAAU;;;;;;;CAO1C,CAAA;YAEK,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YAEnC,4BAA4B;YAC5B,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEzC,uDAAuD;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,KAAK,CAAC,CAAA;YACzD,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAClC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;YAE/C,MAAM,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEjD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;YAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,UAAU,GAAG,aAAa,CAAA;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,KAAK,CAAC,CAAA;YAEvD,MAAM,QAAQ,GAAG;;;mBAGJ,UAAU;;;;;;;;;CAS5B,CAAA;YAEK,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YAEnC,sBAAsB;YACtB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,KAAK,CAAC,CAAA;YACzD,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAClC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;YAE/C,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;YACnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEhD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;YAErD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC,CAAA;gBACjD,MAAM,QAAQ,GAAG;oBACL,IAAI;;;;;;CAMvB,CAAA;gBACO,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YACrC,CAAC;YAED,kCAAkC;YAClC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC,CAAA;gBACjD,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC3C,CAAC;YAED,gDAAgD;YAChD,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,oBAAoB,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnG,MAAM,cAAc,GAAG,GAAG,cAAc;;EAE5C,cAAc;CACf,CAAA;YACK,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;YAEzC,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACvC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,sBAAsB;YACtB,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAC7B;;EAEN,CACK,CAAA;YACD,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAC5B;;EAEN,CACK,CAAA;YAED,gBAAgB;YAChB,MAAM,aAAa,GAAG;;;;;;;;CAQ3B,CAAA;YACK,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YAExC,yBAAyB;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;YACrC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YAC7C,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -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":"AAAA,2BAA2B;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG,iBAAiB,CAAC,wBAAwB,EAAmB,EAAE;IAClG,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAA;YACtC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAA;QACpC,CAAC,CAAA;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,CAAA;YACT,+CAA+C;YAC/C,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,EAAE,SAAS,CAAC,CAAA;QAEb,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,OAAO,EAAE,CAAA;YACT,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAChC,OAAO,EAAE,CAAA;YACT,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAwB,EAAE,QAAa,EAAE,OAAgB;IACrF,IAAI,SAAS,GAAG,IAAI,CAAA;IACpB,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAA;IAE/B,IAAI,KAAK,EAAE,CAAC;QACV,SAAS,GAAG,KAAK,CAAA;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAEpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;IAEnF,MAAM,YAAY,GAAqC,EAAE,CAAA;IACzD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC7B,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;oBACnC,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAClC,YAAY,CAAC,IAAI,CAAC;4BAChB,IAAI,EAAE,OAAO;4BACb,SAAS,EAAE,QAAQ;4BACnB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;yBACjC,CAAC,CAAA;oBACJ,CAAC;yBAAM,CAAC;wBACN,YAAY,CAAC,IAAI,CAAC;4BAChB,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,QAAQ;4BACnB,QAAQ,EAAE,IAAI;4BACd,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;yBAChC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAA;gBACjE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,SAAS,GAAG,MAAM,YAAY,CAAC,gDAAgD,CAAC,CAAA;QAChF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,SAAS,GAAG,oDAAoD,CAAA;IAClE,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QACxD,OAAM;IACR,CAAC;IAED,MAAM,IAAI,CAAC;QACT,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,YAAY;QACnB,GAAG,YAAY;KAChB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,wEAAwE,CAAC;KACrF,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;KACrD,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -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"}