@kosuke-ai/cli 0.0.57 → 1.0.0

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 (263) hide show
  1. package/README.md +31 -448
  2. package/dist/commands/auth.js +117 -0
  3. package/dist/generated/commands/deploy/cancel.js +17 -0
  4. package/dist/generated/commands/deploy/messages.js +17 -0
  5. package/dist/generated/commands/deploy/run.js +60 -0
  6. package/dist/generated/commands/index.js +132 -0
  7. package/dist/generated/commands/preview/get.js +25 -0
  8. package/dist/generated/commands/preview/health.js +25 -0
  9. package/dist/generated/commands/preview/reset.js +27 -0
  10. package/dist/generated/commands/preview/share-create.js +36 -0
  11. package/dist/generated/commands/preview/share-delete.js +26 -0
  12. package/dist/generated/commands/preview/share-get.js +26 -0
  13. package/dist/generated/commands/preview/shared.js +17 -0
  14. package/dist/generated/commands/projects/create.js +37 -0
  15. package/dist/generated/commands/projects/delete.js +17 -0
  16. package/dist/generated/commands/projects/env-vars-add.js +21 -0
  17. package/dist/generated/commands/projects/env-vars-remove.js +21 -0
  18. package/dist/generated/commands/projects/get.js +17 -0
  19. package/dist/generated/commands/projects/list.js +15 -0
  20. package/dist/generated/commands/projects/services-add.js +87 -0
  21. package/dist/generated/commands/projects/services-list.js +18 -0
  22. package/dist/generated/commands/projects/services-remove.js +19 -0
  23. package/dist/generated/commands/projects/services-update.js +81 -0
  24. package/dist/generated/commands/projects/settings-get.js +18 -0
  25. package/dist/generated/commands/projects/settings-import.js +91 -0
  26. package/dist/generated/commands/projects/settings-update.js +77 -0
  27. package/dist/generated/commands/projects/skills.js +35 -0
  28. package/dist/generated/commands/projects/update.js +27 -0
  29. package/dist/generated/commands/sessions/activate.js +18 -0
  30. package/dist/generated/commands/sessions/checklist-generate.js +19 -0
  31. package/dist/generated/commands/sessions/checklist-get.js +19 -0
  32. package/dist/generated/commands/sessions/comments-add.js +63 -0
  33. package/dist/generated/commands/sessions/comments-delete.js +20 -0
  34. package/dist/generated/commands/sessions/comments-list.js +19 -0
  35. package/dist/generated/commands/sessions/comments-update.js +23 -0
  36. package/dist/generated/commands/sessions/create.js +126 -0
  37. package/dist/generated/commands/sessions/delete.js +18 -0
  38. package/dist/generated/commands/sessions/diff-files.js +19 -0
  39. package/dist/generated/commands/sessions/diff-patch.js +86 -0
  40. package/dist/generated/commands/sessions/edit-prompt.js +59 -0
  41. package/dist/generated/commands/sessions/files-get.js +27 -0
  42. package/dist/generated/commands/sessions/files-list.js +19 -0
  43. package/dist/generated/commands/sessions/files-write.js +41 -0
  44. package/dist/generated/commands/sessions/get.js +18 -0
  45. package/dist/generated/commands/sessions/git-commit-message.js +19 -0
  46. package/dist/generated/commands/sessions/git-commit.js +29 -0
  47. package/dist/generated/commands/sessions/git-push.js +19 -0
  48. package/dist/generated/commands/sessions/git-state.js +19 -0
  49. package/dist/generated/commands/sessions/jobs-cancel.js +20 -0
  50. package/dist/generated/commands/sessions/jobs-get.js +20 -0
  51. package/dist/generated/commands/sessions/list.js +81 -0
  52. package/dist/generated/commands/sessions/messages.js +18 -0
  53. package/dist/generated/commands/sessions/search.js +23 -0
  54. package/dist/generated/commands/sessions/send.js +98 -0
  55. package/dist/generated/commands/sessions/update.js +72 -0
  56. package/dist/generated/commands/workspaces/access-status.js +29 -0
  57. package/dist/generated/commands/workspaces/ai-provider-get.js +18 -0
  58. package/dist/generated/commands/workspaces/ai-provider-remove.js +42 -0
  59. package/dist/generated/commands/workspaces/ai-provider-set.js +21 -0
  60. package/dist/generated/commands/workspaces/credits.js +17 -0
  61. package/dist/generated/commands/workspaces/get.js +17 -0
  62. package/dist/generated/commands/workspaces/getting-started-get.js +18 -0
  63. package/dist/generated/commands/workspaces/getting-started-update.js +32 -0
  64. package/dist/generated/commands/workspaces/list.js +15 -0
  65. package/dist/generated/commands/workspaces/members.js +25 -0
  66. package/dist/generated/commands/workspaces/sandbox-limit.js +17 -0
  67. package/dist/generated/commands/workspaces/stop-sandboxes.js +27 -0
  68. package/dist/generated/commands/workspaces/usage.js +32 -0
  69. package/dist/index.js +5 -595
  70. package/dist/program.js +46 -0
  71. package/dist/runtime/attach.js +139 -0
  72. package/dist/runtime/attachments.js +58 -0
  73. package/dist/runtime/client.js +12 -0
  74. package/dist/runtime/config.js +49 -0
  75. package/dist/runtime/credentials.js +24 -0
  76. package/dist/runtime/descriptor.js +7 -0
  77. package/dist/runtime/invoke.js +152 -0
  78. package/dist/runtime/runtime.js +41 -0
  79. package/dist/runtime/version.js +5 -0
  80. package/openapi.json +5222 -0
  81. package/package.json +21 -79
  82. package/LICENSE +0 -21
  83. package/claude.costs.json +0 -34
  84. package/dist/__tests__/utils/file-discovery.test.d.ts +0 -5
  85. package/dist/__tests__/utils/file-discovery.test.d.ts.map +0 -1
  86. package/dist/__tests__/utils/file-discovery.test.js +0 -51
  87. package/dist/__tests__/utils/file-discovery.test.js.map +0 -1
  88. package/dist/__tests__/utils/logger-nologs.test.d.ts +0 -5
  89. package/dist/__tests__/utils/logger-nologs.test.d.ts.map +0 -1
  90. package/dist/__tests__/utils/logger-nologs.test.js +0 -34
  91. package/dist/__tests__/utils/logger-nologs.test.js.map +0 -1
  92. package/dist/__tests__/utils/logger.test.d.ts +0 -5
  93. package/dist/__tests__/utils/logger.test.d.ts.map +0 -1
  94. package/dist/__tests__/utils/logger.test.js +0 -243
  95. package/dist/__tests__/utils/logger.test.js.map +0 -1
  96. package/dist/__tests__/utils/validator.test.d.ts +0 -5
  97. package/dist/__tests__/utils/validator.test.d.ts.map +0 -1
  98. package/dist/__tests__/utils/validator.test.js +0 -206
  99. package/dist/__tests__/utils/validator.test.js.map +0 -1
  100. package/dist/index.d.ts +0 -37
  101. package/dist/index.d.ts.map +0 -1
  102. package/dist/index.js.map +0 -1
  103. package/dist/kosuke/commands/analyse.d.ts +0 -15
  104. package/dist/kosuke/commands/analyse.d.ts.map +0 -1
  105. package/dist/kosuke/commands/analyse.js +0 -304
  106. package/dist/kosuke/commands/analyse.js.map +0 -1
  107. package/dist/kosuke/commands/build.d.ts +0 -35
  108. package/dist/kosuke/commands/build.d.ts.map +0 -1
  109. package/dist/kosuke/commands/build.js +0 -660
  110. package/dist/kosuke/commands/build.js.map +0 -1
  111. package/dist/kosuke/commands/fix.d.ts +0 -21
  112. package/dist/kosuke/commands/fix.d.ts.map +0 -1
  113. package/dist/kosuke/commands/fix.js +0 -256
  114. package/dist/kosuke/commands/fix.js.map +0 -1
  115. package/dist/kosuke/commands/getcode.d.ts +0 -29
  116. package/dist/kosuke/commands/getcode.d.ts.map +0 -1
  117. package/dist/kosuke/commands/getcode.js +0 -248
  118. package/dist/kosuke/commands/getcode.js.map +0 -1
  119. package/dist/kosuke/commands/lint.d.ts +0 -21
  120. package/dist/kosuke/commands/lint.d.ts.map +0 -1
  121. package/dist/kosuke/commands/lint.js +0 -342
  122. package/dist/kosuke/commands/lint.js.map +0 -1
  123. package/dist/kosuke/commands/migrate.d.ts +0 -38
  124. package/dist/kosuke/commands/migrate.d.ts.map +0 -1
  125. package/dist/kosuke/commands/migrate.js +0 -284
  126. package/dist/kosuke/commands/migrate.js.map +0 -1
  127. package/dist/kosuke/commands/plan.d.ts +0 -28
  128. package/dist/kosuke/commands/plan.d.ts.map +0 -1
  129. package/dist/kosuke/commands/plan.js +0 -684
  130. package/dist/kosuke/commands/plan.js.map +0 -1
  131. package/dist/kosuke/commands/requirements.d.ts +0 -52
  132. package/dist/kosuke/commands/requirements.d.ts.map +0 -1
  133. package/dist/kosuke/commands/requirements.js +0 -615
  134. package/dist/kosuke/commands/requirements.js.map +0 -1
  135. package/dist/kosuke/commands/review.d.ts +0 -26
  136. package/dist/kosuke/commands/review.d.ts.map +0 -1
  137. package/dist/kosuke/commands/review.js +0 -303
  138. package/dist/kosuke/commands/review.js.map +0 -1
  139. package/dist/kosuke/commands/serve.d.ts +0 -9
  140. package/dist/kosuke/commands/serve.d.ts.map +0 -1
  141. package/dist/kosuke/commands/serve.js +0 -17
  142. package/dist/kosuke/commands/serve.js.map +0 -1
  143. package/dist/kosuke/commands/ship.d.ts +0 -37
  144. package/dist/kosuke/commands/ship.d.ts.map +0 -1
  145. package/dist/kosuke/commands/ship.js +0 -375
  146. package/dist/kosuke/commands/ship.js.map +0 -1
  147. package/dist/kosuke/commands/sync-rules.d.ts +0 -9
  148. package/dist/kosuke/commands/sync-rules.d.ts.map +0 -1
  149. package/dist/kosuke/commands/sync-rules.js +0 -414
  150. package/dist/kosuke/commands/sync-rules.js.map +0 -1
  151. package/dist/kosuke/commands/test.d.ts +0 -42
  152. package/dist/kosuke/commands/test.d.ts.map +0 -1
  153. package/dist/kosuke/commands/test.js +0 -540
  154. package/dist/kosuke/commands/test.js.map +0 -1
  155. package/dist/kosuke/commands/tickets.d.ts +0 -43
  156. package/dist/kosuke/commands/tickets.d.ts.map +0 -1
  157. package/dist/kosuke/commands/tickets.js +0 -876
  158. package/dist/kosuke/commands/tickets.js.map +0 -1
  159. package/dist/kosuke/commands/validate-tickets.d.ts +0 -23
  160. package/dist/kosuke/commands/validate-tickets.d.ts.map +0 -1
  161. package/dist/kosuke/commands/validate-tickets.js +0 -360
  162. package/dist/kosuke/commands/validate-tickets.js.map +0 -1
  163. package/dist/kosuke/serve/middleware/error-handler.d.ts +0 -14
  164. package/dist/kosuke/serve/middleware/error-handler.d.ts.map +0 -1
  165. package/dist/kosuke/serve/middleware/error-handler.js +0 -42
  166. package/dist/kosuke/serve/middleware/error-handler.js.map +0 -1
  167. package/dist/kosuke/serve/middleware/validation.d.ts +0 -13
  168. package/dist/kosuke/serve/middleware/validation.d.ts.map +0 -1
  169. package/dist/kosuke/serve/middleware/validation.js +0 -38
  170. package/dist/kosuke/serve/middleware/validation.js.map +0 -1
  171. package/dist/kosuke/serve/routes/build.d.ts +0 -6
  172. package/dist/kosuke/serve/routes/build.d.ts.map +0 -1
  173. package/dist/kosuke/serve/routes/build.js +0 -226
  174. package/dist/kosuke/serve/routes/build.js.map +0 -1
  175. package/dist/kosuke/serve/routes/health.d.ts +0 -6
  176. package/dist/kosuke/serve/routes/health.d.ts.map +0 -1
  177. package/dist/kosuke/serve/routes/health.js +0 -11
  178. package/dist/kosuke/serve/routes/health.js.map +0 -1
  179. package/dist/kosuke/serve/routes/plan.d.ts +0 -6
  180. package/dist/kosuke/serve/routes/plan.d.ts.map +0 -1
  181. package/dist/kosuke/serve/routes/plan.js +0 -106
  182. package/dist/kosuke/serve/routes/plan.js.map +0 -1
  183. package/dist/kosuke/serve/server.d.ts +0 -16
  184. package/dist/kosuke/serve/server.d.ts.map +0 -1
  185. package/dist/kosuke/serve/server.js +0 -67
  186. package/dist/kosuke/serve/server.js.map +0 -1
  187. package/dist/kosuke/serve/validation/build.d.ts +0 -41
  188. package/dist/kosuke/serve/validation/build.d.ts.map +0 -1
  189. package/dist/kosuke/serve/validation/build.js +0 -20
  190. package/dist/kosuke/serve/validation/build.js.map +0 -1
  191. package/dist/kosuke/serve/validation/plan.d.ts +0 -26
  192. package/dist/kosuke/serve/validation/plan.d.ts.map +0 -1
  193. package/dist/kosuke/serve/validation/plan.js +0 -15
  194. package/dist/kosuke/serve/validation/plan.js.map +0 -1
  195. package/dist/kosuke/types.d.ts +0 -539
  196. package/dist/kosuke/types.d.ts.map +0 -1
  197. package/dist/kosuke/types.js +0 -5
  198. package/dist/kosuke/types.js.map +0 -1
  199. package/dist/kosuke/utils/batch-creator.d.ts +0 -14
  200. package/dist/kosuke/utils/batch-creator.d.ts.map +0 -1
  201. package/dist/kosuke/utils/batch-creator.js +0 -76
  202. package/dist/kosuke/utils/batch-creator.js.map +0 -1
  203. package/dist/kosuke/utils/claude-agent.d.ts +0 -140
  204. package/dist/kosuke/utils/claude-agent.d.ts.map +0 -1
  205. package/dist/kosuke/utils/claude-agent.js +0 -388
  206. package/dist/kosuke/utils/claude-agent.js.map +0 -1
  207. package/dist/kosuke/utils/constants.d.ts +0 -40
  208. package/dist/kosuke/utils/constants.d.ts.map +0 -1
  209. package/dist/kosuke/utils/constants.js +0 -54
  210. package/dist/kosuke/utils/constants.js.map +0 -1
  211. package/dist/kosuke/utils/file-discovery.d.ts +0 -15
  212. package/dist/kosuke/utils/file-discovery.d.ts.map +0 -1
  213. package/dist/kosuke/utils/file-discovery.js +0 -80
  214. package/dist/kosuke/utils/file-discovery.js.map +0 -1
  215. package/dist/kosuke/utils/git.d.ts +0 -41
  216. package/dist/kosuke/utils/git.d.ts.map +0 -1
  217. package/dist/kosuke/utils/git.js +0 -145
  218. package/dist/kosuke/utils/git.js.map +0 -1
  219. package/dist/kosuke/utils/github.d.ts +0 -17
  220. package/dist/kosuke/utils/github.d.ts.map +0 -1
  221. package/dist/kosuke/utils/github.js +0 -22
  222. package/dist/kosuke/utils/github.js.map +0 -1
  223. package/dist/kosuke/utils/interactive-input.d.ts +0 -22
  224. package/dist/kosuke/utils/interactive-input.d.ts.map +0 -1
  225. package/dist/kosuke/utils/interactive-input.js +0 -124
  226. package/dist/kosuke/utils/interactive-input.js.map +0 -1
  227. package/dist/kosuke/utils/json-parser.d.ts +0 -14
  228. package/dist/kosuke/utils/json-parser.d.ts.map +0 -1
  229. package/dist/kosuke/utils/json-parser.js +0 -40
  230. package/dist/kosuke/utils/json-parser.js.map +0 -1
  231. package/dist/kosuke/utils/logger.d.ts +0 -161
  232. package/dist/kosuke/utils/logger.d.ts.map +0 -1
  233. package/dist/kosuke/utils/logger.js +0 -234
  234. package/dist/kosuke/utils/logger.js.map +0 -1
  235. package/dist/kosuke/utils/playwright-mcp-client.d.ts +0 -46
  236. package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +0 -1
  237. package/dist/kosuke/utils/playwright-mcp-client.js +0 -135
  238. package/dist/kosuke/utils/playwright-mcp-client.js.map +0 -1
  239. package/dist/kosuke/utils/pr-orchestrator.d.ts +0 -49
  240. package/dist/kosuke/utils/pr-orchestrator.d.ts.map +0 -1
  241. package/dist/kosuke/utils/pr-orchestrator.js +0 -154
  242. package/dist/kosuke/utils/pr-orchestrator.js.map +0 -1
  243. package/dist/kosuke/utils/repository-manager.d.ts +0 -13
  244. package/dist/kosuke/utils/repository-manager.d.ts.map +0 -1
  245. package/dist/kosuke/utils/repository-manager.js +0 -94
  246. package/dist/kosuke/utils/repository-manager.js.map +0 -1
  247. package/dist/kosuke/utils/repository-resolver.d.ts +0 -12
  248. package/dist/kosuke/utils/repository-resolver.d.ts.map +0 -1
  249. package/dist/kosuke/utils/repository-resolver.js +0 -186
  250. package/dist/kosuke/utils/repository-resolver.js.map +0 -1
  251. package/dist/kosuke/utils/tickets-manager.d.ts +0 -34
  252. package/dist/kosuke/utils/tickets-manager.d.ts.map +0 -1
  253. package/dist/kosuke/utils/tickets-manager.js +0 -106
  254. package/dist/kosuke/utils/tickets-manager.js.map +0 -1
  255. package/dist/kosuke/utils/validator.d.ts +0 -45
  256. package/dist/kosuke/utils/validator.d.ts.map +0 -1
  257. package/dist/kosuke/utils/validator.js +0 -248
  258. package/dist/kosuke/utils/validator.js.map +0 -1
  259. package/dist/lib.d.ts +0 -104
  260. package/dist/lib.d.ts.map +0 -1
  261. package/dist/lib.js +0 -104
  262. package/dist/lib.js.map +0 -1
  263. package/dist/package.json +0 -99
@@ -1,342 +0,0 @@
1
- /**
2
- * Lint command - Comprehensive code quality validation and fixing
3
- *
4
- * Strategy: Run all validation steps (format, lint, typecheck, test, knip),
5
- * give errors to Claude, let it fix them
6
- */
7
- import { execSync } from 'child_process';
8
- import { runAgentStream, logAssistantMessage, logToolUsage } from '../utils/claude-agent.js';
9
- import { runWithPR } from '../utils/pr-orchestrator.js';
10
- import { detectPackageManager, readPackageJsonScripts, runFormat, runLint, runTypecheck, } from '../utils/validator.js';
11
- /**
12
- * Run tests using package.json test script
13
- */
14
- async function runTests(cwd = process.cwd()) {
15
- const { readPackageJsonScripts, detectPackageManager } = await import('../utils/validator.js');
16
- const scripts = readPackageJsonScripts(cwd);
17
- if (!scripts || !scripts.test) {
18
- return {
19
- success: true,
20
- warning: 'āš ļø No test script found in package.json. Skipping tests.',
21
- };
22
- }
23
- const packageManager = detectPackageManager(cwd);
24
- const command = `${packageManager} run test`;
25
- try {
26
- const output = execSync(command, {
27
- cwd,
28
- encoding: 'utf-8',
29
- stdio: 'pipe',
30
- });
31
- return { success: true, output };
32
- }
33
- catch (error) {
34
- const err = error;
35
- return {
36
- success: false,
37
- error: `$ ${command}\n\n${err.stdout || err.stderr || err.message}`,
38
- };
39
- }
40
- }
41
- /**
42
- * Run knip to check for unused exports
43
- */
44
- async function runKnip(cwd = process.cwd()) {
45
- const { readPackageJsonScripts, detectPackageManager } = await import('../utils/validator.js');
46
- const scripts = readPackageJsonScripts(cwd);
47
- if (!scripts || !scripts.knip) {
48
- return {
49
- success: true,
50
- warning: 'āš ļø No knip script found in package.json. Skipping knip check.',
51
- };
52
- }
53
- const packageManager = detectPackageManager(cwd);
54
- const command = `${packageManager} run knip`;
55
- try {
56
- const output = execSync(command, {
57
- cwd,
58
- encoding: 'utf-8',
59
- stdio: 'pipe',
60
- });
61
- return { success: true, output };
62
- }
63
- catch (error) {
64
- const err = error;
65
- return {
66
- success: false,
67
- error: `$ ${command}\n\n${err.stdout || err.stderr || err.message}`,
68
- };
69
- }
70
- }
71
- /**
72
- * Build command-specific system prompt for fixing errors
73
- */
74
- function buildFixSystemPrompt(stepName, cwd) {
75
- const packageManager = detectPackageManager(cwd);
76
- const scripts = readPackageJsonScripts(cwd);
77
- // Map step names to commands
78
- const commandMap = {
79
- 'šŸŽØ Format': scripts?.format ? `${packageManager} run format` : 'prettier --write .',
80
- 'šŸ” Lint': scripts?.lint ? `${packageManager} run lint` : 'eslint . --fix',
81
- 'šŸ”Ž TypeCheck': scripts?.typecheck ? `${packageManager} run typecheck` : 'tsc --noEmit',
82
- '🧪 Tests': scripts?.test ? `${packageManager} run test` : '',
83
- 'šŸ”Ŗ Knip': scripts?.knip ? `${packageManager} run knip` : '',
84
- };
85
- const fixCommand = commandMap[stepName] || '';
86
- const commandGuidance = fixCommand
87
- ? `\n\n**Available Commands:**
88
- - Package Manager: ${packageManager}
89
- - Fix Command: \`${fixCommand}\`
90
- - You can run this command to verify your fixes, but you MUST fix the issues in the code files first.
91
- `
92
- : '';
93
- return `You are a code quality expert specialized in fixing ${stepName} errors.
94
-
95
- Your task is to analyze errors and fix them according to the project's quality standards.
96
- ${commandGuidance}
97
- **CRITICAL REQUIREMENTS:**
98
- - You MUST use the search_replace or write tools to fix ALL errors
99
- - Simply identifying issues without fixing them is NOT acceptable
100
- - Focus ONLY on fixing the specific errors provided. Do not make unnecessary changes.
101
- - Follow the project's coding guidelines (CLAUDE.md will be loaded automatically)
102
- - Use ${packageManager} commands (NOT npm) if you need to run any commands
103
- - Make minimal, surgical fixes - don't refactor unrelated code`;
104
- }
105
- /**
106
- * Run Claude to fix code quality errors
107
- * Exported so other commands can use it
108
- */
109
- export async function fixCodeQualityErrors(stepName, errors, cwd = process.cwd()) {
110
- console.log(`\nšŸ¤– Using Claude to fix ${stepName} errors...\n`);
111
- // Build command-specific system prompt
112
- const systemPrompt = buildFixSystemPrompt(stepName, cwd);
113
- // User prompt
114
- const promptText = `The following ${stepName} errors need to be fixed:
115
-
116
- \`\`\`
117
- ${errors}
118
- \`\`\`
119
-
120
- **Your task:**
121
- 1. Analyze each error carefully
122
- 2. Read the files that have errors
123
- 3. **IMMEDIATELY FIX each error using search_replace or write tools**
124
- 4. Make minimal changes - only fix what's broken
125
- 5. Ensure your fixes don't introduce new issues
126
- 6. Follow the project's coding guidelines
127
-
128
- **IMPORTANT:**
129
- - Don't just describe errors - FIX them!
130
- - Every error you identify MUST be fixed
131
- - Use the project's coding standards
132
-
133
- Start by reading the files with errors and fixing them one by one.`;
134
- try {
135
- const stream = runAgentStream(promptText, {
136
- systemPrompt,
137
- maxTurns: 20,
138
- cwd,
139
- verbosity: 'normal',
140
- });
141
- let fixCount = 0;
142
- // Process stream
143
- const filesReferenced = new Set();
144
- for await (const event of stream) {
145
- if (event.type === 'message') {
146
- const message = event.data;
147
- if (message.type === 'assistant' && message.message?.content) {
148
- for (const block of message.message.content) {
149
- if (block.type === 'text' && block.text) {
150
- logAssistantMessage(block.text, 'normal');
151
- }
152
- else if (block.type === 'tool_use' && block.name) {
153
- logToolUsage(block.name, block.input, filesReferenced);
154
- }
155
- }
156
- }
157
- }
158
- else if (event.type === 'agent_result') {
159
- fixCount = event.data.fixCount;
160
- }
161
- }
162
- console.log(`\n✨ Claude completed (${fixCount} fixes applied)`);
163
- return fixCount > 0;
164
- }
165
- catch (error) {
166
- console.error('\nāŒ Error during Claude fixing:', error);
167
- return false;
168
- }
169
- }
170
- /**
171
- * Legacy export for backward compatibility
172
- */
173
- export async function fixLintErrors(lintErrors, cwd = process.cwd()) {
174
- return fixCodeQualityErrors('linting', lintErrors, cwd);
175
- }
176
- /**
177
- * Core comprehensive validation and fixing logic (git-agnostic)
178
- * Used internally by lintCommand
179
- */
180
- async function fixLintErrorsCore(cwd = process.cwd()) {
181
- console.log('šŸ” Running comprehensive code quality checks...\n');
182
- // Define all validation steps
183
- const validationSteps = [
184
- { name: 'šŸŽØ Format', run: () => runFormat(cwd), fixable: true },
185
- { name: 'šŸ” Lint', run: () => runLint(cwd), fixable: true },
186
- { name: 'šŸ”Ž TypeCheck', run: () => runTypecheck(cwd), fixable: true },
187
- { name: '🧪 Tests', run: () => runTests(cwd), fixable: true },
188
- { name: 'šŸ”Ŗ Knip', run: () => runKnip(cwd), fixable: true },
189
- ];
190
- const stepsFixed = [];
191
- let totalAttempts = 0;
192
- let totalFixes = 0;
193
- // Run each validation step
194
- for (const step of validationSteps) {
195
- console.log(`\n${'='.repeat(60)}`);
196
- console.log(`Running: ${step.name}`);
197
- console.log(`${'='.repeat(60)}\n`);
198
- let result = await step.run();
199
- // Handle warnings (non-blocking)
200
- if (result.warning) {
201
- console.log(result.warning);
202
- console.log(`āœ… ${step.name} - SKIPPED\n`);
203
- continue;
204
- }
205
- // Handle success
206
- if (result.success) {
207
- console.log(`āœ… ${step.name} - PASSED\n`);
208
- continue;
209
- }
210
- // Handle errors
211
- console.log(`āŒ ${step.name} - FAILED:\n`);
212
- console.log(result.error);
213
- if (!step.fixable) {
214
- console.log(`\nāš ļø ${step.name} errors cannot be auto-fixed by Claude`);
215
- throw new Error(`${step.name} validation failed`);
216
- }
217
- // Attempt to fix errors with Claude (max 3 attempts per step)
218
- let attemptCount = 0;
219
- const maxAttempts = 3;
220
- while (!result.success && attemptCount < maxAttempts) {
221
- attemptCount++;
222
- totalAttempts++;
223
- console.log(`\n${'='.repeat(60)}`);
224
- console.log(`šŸ”„ ${step.name} Fix Attempt ${attemptCount}/${maxAttempts}`);
225
- console.log(`${'='.repeat(60)}`);
226
- const fixApplied = await fixCodeQualityErrors(step.name, result.error || '', cwd);
227
- if (!fixApplied) {
228
- console.log(`\nāš ļø No fixes were applied by Claude for ${step.name}`);
229
- break;
230
- }
231
- totalFixes++;
232
- // Verify fixes by running validation again
233
- console.log(`\nšŸ” Verifying ${step.name} fixes...\n`);
234
- result = await step.run();
235
- if (result.success) {
236
- console.log(`āœ… ${step.name} - All errors fixed!\n`);
237
- stepsFixed.push(step.name);
238
- break;
239
- }
240
- else {
241
- const errorLines = result.error?.split('\n').length || 0;
242
- console.log(`\nāš ļø Some ${step.name} errors remain (${errorLines} lines):`);
243
- console.log(result.error);
244
- }
245
- }
246
- // Check if step still has errors after attempts
247
- if (!result.success) {
248
- console.error(`\nāŒ Could not fix all ${step.name} errors after ${maxAttempts} attempts`);
249
- console.log('\nRemaining errors:');
250
- console.log(result.error);
251
- throw new Error(`${step.name} errors remain after maximum attempts`);
252
- }
253
- }
254
- console.log('\n' + '='.repeat(60));
255
- console.log('āœ… All validation steps passed!');
256
- console.log('='.repeat(60));
257
- return {
258
- success: true,
259
- attempts: totalAttempts,
260
- fixesApplied: totalFixes,
261
- stepsFixed,
262
- };
263
- }
264
- /**
265
- * Main lint command (now runs comprehensive validation)
266
- */
267
- export async function lintCommand(options = {}) {
268
- console.log('šŸš€ Starting Kosuke Code Quality Check & Fix...\n');
269
- try {
270
- // Validate environment
271
- if (!process.env.ANTHROPIC_API_KEY) {
272
- throw new Error('ANTHROPIC_API_KEY environment variable is required');
273
- }
274
- // Resolve directory
275
- const { resolve } = await import('path');
276
- const { existsSync, statSync } = await import('fs');
277
- const cwd = options.directory ? resolve(options.directory) : process.cwd();
278
- // Validate directory if provided
279
- if (options.directory) {
280
- if (!existsSync(cwd)) {
281
- throw new Error(`Directory not found: ${cwd}\n` +
282
- `Please provide a valid directory using --directory=<path>\n` +
283
- `Example: kosuke lint --directory=./my-project`);
284
- }
285
- const stats = statSync(cwd);
286
- if (!stats.isDirectory()) {
287
- throw new Error(`Path is not a directory: ${cwd}\n` + `Please provide a valid directory path.`);
288
- }
289
- console.log(`šŸ“ Using project directory: ${cwd}\n`);
290
- }
291
- // If --pr flag is provided, wrap with PR workflow
292
- if (options.pr) {
293
- const { result: fixResult, prInfo } = await runWithPR({
294
- branchPrefix: 'fix/kosuke-quality',
295
- baseBranch: options.baseBranch,
296
- commitMessage: 'chore: fix code quality issues',
297
- prTitle: 'chore: Fix code quality issues',
298
- prBody: `## šŸ”§ Automated Code Quality Fixes
299
-
300
- This PR contains automated fixes for code quality issues detected by comprehensive validation.
301
-
302
- ### šŸ“‹ Validation Steps Performed
303
- - šŸŽØ **Format**: Code formatting check
304
- - šŸ” **Lint**: ESLint validation
305
- - šŸ”Ž **TypeCheck**: TypeScript type checking
306
- - 🧪 **Tests**: Unit/integration tests
307
- - šŸ”Ŗ **Knip**: Unused exports detection
308
-
309
- ### āœ… Result
310
- All validation steps passed! Code quality issues have been automatically fixed by Claude.
311
-
312
- ---
313
-
314
- šŸ¤– *Generated by Kosuke CLI (\`kosuke lint --pr\`)*`,
315
- cwd,
316
- }, () => fixLintErrorsCore(cwd));
317
- console.log('\nāœ… Code quality check complete!');
318
- console.log(`šŸ“Š Attempts: ${fixResult.attempts}`);
319
- console.log(`šŸ”§ Fixes applied: ${fixResult.fixesApplied}`);
320
- if (fixResult.stepsFixed.length > 0) {
321
- console.log(`šŸŽÆ Steps fixed: ${fixResult.stepsFixed.join(', ')}`);
322
- }
323
- console.log(`šŸ”— PR: ${prInfo.prUrl}`);
324
- }
325
- else {
326
- // Run core logic without PR
327
- const result = await fixLintErrorsCore(cwd);
328
- console.log('\nāœ… Code quality check complete!');
329
- console.log(`šŸ“Š Attempts: ${result.attempts}`);
330
- console.log(`šŸ”§ Fixes applied: ${result.fixesApplied}`);
331
- if (result.stepsFixed.length > 0) {
332
- console.log(`šŸŽÆ Steps fixed: ${result.stepsFixed.join(', ')}`);
333
- }
334
- console.log('\nā„¹ļø Changes applied locally. Use --pr flag to create a pull request.');
335
- }
336
- }
337
- catch (error) {
338
- console.error('\nāŒ Code quality check failed:', error);
339
- throw error;
340
- }
341
- }
342
- //# sourceMappingURL=lint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../kosuke/commands/lint.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Migrate command - Apply database migrations with automatic validation
3
- *
4
- * Uses Claude Code Agent to:
5
- * 1. Apply Drizzle migrations to database (db:migrate)
6
- * 2. Seed database with initial data (db:seed)
7
- * 3. Validate migrations applied successfully
8
- *
9
- * NOTE: This command does NOT generate migrations (ship handles that)
10
- *
11
- * Usage:
12
- * kosuke migrate # Apply migrations in current dir
13
- * kosuke migrate --directory=./my-app # Apply in specific project
14
- * kosuke migrate --db-url=postgres://... # Custom database URL
15
- *
16
- * Programmatic (from build):
17
- * const result = await migrateCore({
18
- * directory: cwd,
19
- * dbUrl,
20
- * context: { ticketId, ticketTitle, ticketDescription }
21
- * });
22
- */
23
- import type { MigrateOptions, MigrateResult, MigrateStreamEvent } from '../types.js';
24
- /**
25
- * Streaming version of migrateCore - yields events for SSE integration
26
- */
27
- export declare function migrateCoreStream(options: MigrateOptions): AsyncGenerator<MigrateStreamEvent, void, void>;
28
- /**
29
- * Core migrate logic (reusable)
30
- * Applies migrations, seeds database, and validates schema changes
31
- * Consumes migrateCoreStream and adds console logging
32
- */
33
- export declare function migrateCore(options: MigrateOptions): Promise<MigrateResult>;
34
- /**
35
- * Main migrate command
36
- */
37
- export declare function migrateCommand(options: MigrateOptions): Promise<void>;
38
- //# sourceMappingURL=migrate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAqDrF;;GAEG;AACH,wBAAuB,iBAAiB,CACtC,OAAO,EAAE,cAAc,GACtB,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,CAiHhD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAiDjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C3E"}
@@ -1,284 +0,0 @@
1
- /**
2
- * Migrate command - Apply database migrations with automatic validation
3
- *
4
- * Uses Claude Code Agent to:
5
- * 1. Apply Drizzle migrations to database (db:migrate)
6
- * 2. Seed database with initial data (db:seed)
7
- * 3. Validate migrations applied successfully
8
- *
9
- * NOTE: This command does NOT generate migrations (ship handles that)
10
- *
11
- * Usage:
12
- * kosuke migrate # Apply migrations in current dir
13
- * kosuke migrate --directory=./my-app # Apply in specific project
14
- * kosuke migrate --db-url=postgres://... # Custom database URL
15
- *
16
- * Programmatic (from build):
17
- * const result = await migrateCore({
18
- * directory: cwd,
19
- * dbUrl,
20
- * context: { ticketId, ticketTitle, ticketDescription }
21
- * });
22
- */
23
- import { existsSync, statSync } from 'fs';
24
- import { resolve } from 'path';
25
- import { DEFAULT_DB_URL } from '../utils/constants.js';
26
- import { formatCostBreakdown, logAssistantMessage, logToolUsage, runAgentStream, } from '../utils/claude-agent.js';
27
- import { logger, setupCancellationHandler } from '../utils/logger.js';
28
- /**
29
- * Build system prompt for database migration and validation
30
- */
31
- function buildMigrationPrompt(dbUrl, context) {
32
- return `You are a database migration specialist.
33
-
34
- **Your Task:**
35
- Apply database migrations and validate schema changes.
36
-
37
- ${context ? `**Context:**\nApplying migrations for ticket ${context.ticketId}: ${context.ticketTitle}\n` : ''}
38
-
39
- **Migration Process (Execute in Order):**
40
-
41
- 1. **Apply Migrations to Database**
42
- - Run: \`POSTGRES_URL="${dbUrl}" bun run db:migrate\`
43
- - This applies pending migrations to the database
44
- - āš ļø CRITICAL: Migrations MUST succeed - fail immediately if errors occur
45
- - Report any migration errors clearly
46
-
47
- 2. **Seed Database**
48
- - Run: \`POSTGRES_URL="${dbUrl}" bun run db:seed\`
49
- - Seeds initial data if seed file exists
50
- - If seed file doesn't exist, this is OK (not an error)
51
-
52
- 3. **Validate Migration Success**
53
- - Connect to the database using the POSTGRES_URL
54
- - Query the database to verify expected tables exist
55
- - Check that schema changes were applied correctly
56
- - Use: \`POSTGRES_URL="${dbUrl}" psql -c "\\dt"\` to list tables
57
- - Or write a Node.js script to validate schema
58
-
59
- **Success Criteria:**
60
- - db:migrate completes without errors
61
- - db:seed runs (success if no seed file is also OK)
62
- - Database validation confirms tables exist and schema is correct
63
-
64
- **Failure Handling:**
65
- - If db:migrate fails → Report error and STOP immediately
66
- - If validation fails → Report which tables/schema are missing
67
-
68
- Begin by applying migrations and validating the results.`;
69
- }
70
- /**
71
- * Streaming version of migrateCore - yields events for SSE integration
72
- */
73
- export async function* migrateCoreStream(options) {
74
- const { directory, dbUrl = DEFAULT_DB_URL, context } = options;
75
- // 1. Validate and resolve directory
76
- const cwd = directory ? resolve(directory) : process.cwd();
77
- if (directory) {
78
- if (!existsSync(cwd)) {
79
- yield {
80
- type: 'done',
81
- data: {
82
- success: false,
83
- migrationsApplied: false,
84
- seedingCompleted: false,
85
- validationPassed: false,
86
- tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
87
- cost: 0,
88
- error: `Directory not found: ${cwd}`,
89
- },
90
- };
91
- return;
92
- }
93
- const stats = statSync(cwd);
94
- if (!stats.isDirectory()) {
95
- yield {
96
- type: 'done',
97
- data: {
98
- success: false,
99
- migrationsApplied: false,
100
- seedingCompleted: false,
101
- validationPassed: false,
102
- tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
103
- cost: 0,
104
- error: `Path is not a directory: ${cwd}`,
105
- },
106
- };
107
- return;
108
- }
109
- }
110
- try {
111
- // Yield migration started event
112
- yield {
113
- type: 'migration_started',
114
- data: { dbUrl: dbUrl.replace(/:[^:@]+@/, ':****@') }, // Hide password
115
- };
116
- // 2. Run migration and validation with Claude Code Agent (streaming)
117
- const systemPrompt = buildMigrationPrompt(dbUrl, context);
118
- const stream = runAgentStream('Apply database migrations and validate schema', {
119
- systemPrompt,
120
- cwd,
121
- maxTurns: 20,
122
- verbosity: 'normal',
123
- });
124
- let agentResult = null;
125
- // Yield events from stream
126
- for await (const event of stream) {
127
- if (event.type === 'message') {
128
- yield { type: 'message', data: event.data };
129
- }
130
- else if (event.type === 'agent_result') {
131
- agentResult = event.data;
132
- }
133
- }
134
- if (!agentResult) {
135
- throw new Error('Migration stream ended without result');
136
- }
137
- // 3. Parse agent output to determine success
138
- const response = agentResult.response.toLowerCase();
139
- const migrationsApplied = response.includes('migrat') && response.includes('success');
140
- const seedingCompleted = response.includes('seed');
141
- const validationPassed = response.includes('validat') && !response.includes('failed');
142
- const success = migrationsApplied && validationPassed;
143
- yield {
144
- type: 'done',
145
- data: {
146
- success,
147
- migrationsApplied,
148
- seedingCompleted,
149
- validationPassed,
150
- tokensUsed: agentResult.tokensUsed,
151
- cost: agentResult.cost,
152
- },
153
- };
154
- }
155
- catch (error) {
156
- const errorMessage = error instanceof Error ? error.message : String(error);
157
- yield {
158
- type: 'done',
159
- data: {
160
- success: false,
161
- migrationsApplied: false,
162
- seedingCompleted: false,
163
- validationPassed: false,
164
- tokensUsed: {
165
- input: 0,
166
- output: 0,
167
- cacheCreation: 0,
168
- cacheRead: 0,
169
- },
170
- cost: 0,
171
- error: errorMessage,
172
- },
173
- };
174
- }
175
- }
176
- /**
177
- * Core migrate logic (reusable)
178
- * Applies migrations, seeds database, and validates schema changes
179
- * Consumes migrateCoreStream and adds console logging
180
- */
181
- export async function migrateCore(options) {
182
- const { directory } = options;
183
- if (directory) {
184
- const cwd = directory ? resolve(directory) : process.cwd();
185
- console.log(`šŸ“ Using project directory: ${cwd}\n`);
186
- }
187
- console.log(`šŸ—„ļø Applying database migrations...\n`);
188
- let result = null;
189
- // Consume the stream and add console logging
190
- for await (const event of migrateCoreStream(options)) {
191
- if (event.type === 'migration_started') {
192
- console.log(`šŸ“Š Database URL: ${event.data.dbUrl}\n`);
193
- }
194
- else if (event.type === 'message') {
195
- // Log Claude messages for CLI context
196
- const msg = event.data;
197
- if (msg.type === 'assistant' && msg.message?.content) {
198
- for (const block of msg.message.content) {
199
- if (block.type === 'text' && block.text) {
200
- // Use shared logging with verbosity: 'normal'
201
- logAssistantMessage(block.text, 'normal');
202
- }
203
- else if (block.type === 'tool_use' && block.name) {
204
- // Log tool usage (logToolUsage filters file modifications internally)
205
- const filesReferenced = new Set();
206
- logToolUsage(block.name, block.input, filesReferenced);
207
- }
208
- }
209
- }
210
- }
211
- else if (event.type === 'done') {
212
- result = event.data;
213
- console.log(`\n✨ Migration process completed`);
214
- console.log(`šŸ’° Migration cost: ${formatCostBreakdown({
215
- tokensUsed: result.tokensUsed,
216
- cost: result.cost,
217
- response: '',
218
- fixCount: 0,
219
- filesReferenced: new Set(),
220
- })}`);
221
- }
222
- }
223
- return result;
224
- }
225
- /**
226
- * Main migrate command
227
- */
228
- export async function migrateCommand(options) {
229
- console.log('šŸ—„ļø Starting Database Migration...\n');
230
- // Initialize logging context
231
- const logContext = logger.createContext('migrate', { noLogs: options.noLogs });
232
- const cleanupHandler = setupCancellationHandler(logContext);
233
- try {
234
- // Validate environment
235
- if (!process.env.ANTHROPIC_API_KEY) {
236
- throw new Error('ANTHROPIC_API_KEY environment variable is required');
237
- }
238
- // Execute core logic
239
- const result = await migrateCore(options);
240
- // Track metrics
241
- logger.trackTokens(logContext, result.tokensUsed);
242
- // Display summary
243
- displayMigrationSummary(result);
244
- // Log execution (success or error based on result)
245
- await logger.complete(logContext, result.success ? 'success' : 'error', result.error ? new Error(result.error) : undefined);
246
- cleanupHandler();
247
- if (!result.success) {
248
- throw new Error(result.error || 'Migration failed');
249
- }
250
- }
251
- catch (error) {
252
- console.error('\nāŒ Migration command failed:', error);
253
- // Log failed execution
254
- await logger.complete(logContext, 'error', error);
255
- cleanupHandler();
256
- throw error;
257
- }
258
- }
259
- /**
260
- * Display migration summary
261
- */
262
- function displayMigrationSummary(result) {
263
- console.log(`\n${'='.repeat(60)}`);
264
- console.log('šŸ“Š Migration Summary');
265
- console.log('='.repeat(60));
266
- if (result.success) {
267
- console.log('āœ… Status: Migration successful');
268
- }
269
- else {
270
- console.log('āŒ Status: Migration failed');
271
- }
272
- console.log(` āœ“ Migrations applied: ${result.migrationsApplied ? 'Yes' : 'No'}`);
273
- console.log(` āœ“ Seeding completed: ${result.seedingCompleted ? 'Yes' : 'No'}`);
274
- console.log(` āœ“ Validation passed: ${result.validationPassed ? 'Yes' : 'No'}`);
275
- console.log(`šŸ’° Cost: $${result.cost.toFixed(4)}`);
276
- console.log('='.repeat(60));
277
- if (result.success) {
278
- console.log('\nāœ… Database migrations applied and validated successfully!');
279
- }
280
- else {
281
- console.log(`\nāŒ Migration failed: ${result.error || 'See output above for details'}`);
282
- }
283
- }
284
- //# sourceMappingURL=migrate.js.map