@kosuke-ai/cli 0.0.6 → 0.0.8

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.
@@ -5,17 +5,15 @@
5
5
  * - Each batch of 10-12 files gets its own Claude run
6
6
  * - Claude only sees those specific files (no repository-wide context)
7
7
  * - Validate after each batch, commit locally
8
- * - Push all commits at once and create single PR
8
+ * - If --pr flag: Push all commits and create single PR
9
9
  */
10
10
  import { query } from '@anthropic-ai/claude-agent-sdk';
11
- import simpleGit from 'simple-git';
12
11
  import { readFileSync } from 'fs';
13
12
  import { join } from 'path';
14
13
  import { discoverFiles } from '../utils/file-discovery.js';
15
14
  import { createBatches } from '../utils/batch-creator.js';
16
15
  import { runLint, runTypecheck } from '../utils/validator.js';
17
- import { createBranch, commit, push, reset, getCurrentRepo, getCurrentBranch, } from '../utils/git.js';
18
- import { createPullRequest } from '../utils/github.js';
16
+ import { runWithPRBatched } from '../utils/pr-orchestrator.js';
19
17
  /**
20
18
  * Calculate cost based on Claude Sonnet 4.5 pricing
21
19
  * - $3 per million input tokens
@@ -26,8 +24,8 @@ import { createPullRequest } from '../utils/github.js';
26
24
  function calculateCost(inputTokens, outputTokens, cacheCreationTokens = 0, cacheReadTokens = 0) {
27
25
  const INPUT_COST_PER_MILLION = 3.0;
28
26
  const OUTPUT_COST_PER_MILLION = 15.0;
29
- const CACHE_CREATION_COST_PER_MILLION = 3.75; // Input cost + 25% overhead
30
- const CACHE_READ_COST_PER_MILLION = 0.3; // 90% discount from input cost
27
+ const CACHE_CREATION_COST_PER_MILLION = 3.75;
28
+ const CACHE_READ_COST_PER_MILLION = 0.3;
31
29
  const inputCost = (inputTokens / 1000000) * INPUT_COST_PER_MILLION;
32
30
  const outputCost = (outputTokens / 1000000) * OUTPUT_COST_PER_MILLION;
33
31
  const cacheCreationCost = (cacheCreationTokens / 1000000) * CACHE_CREATION_COST_PER_MILLION;
@@ -106,8 +104,6 @@ Start by reading CLAUDE.md, then analyze the batch files.`;
106
104
  }
107
105
  // Track token usage from the response
108
106
  if (message.type === 'result' && message.subtype === 'success') {
109
- // Log the complete usage object to see all available fields
110
- console.log('šŸ“Š Usage data:', JSON.stringify(message.usage, null, 2));
111
107
  // Capture all token types including cache-related tokens
112
108
  inputTokens += message.usage.input_tokens || 0;
113
109
  outputTokens += message.usage.output_tokens || 0;
@@ -137,12 +133,14 @@ Start by reading CLAUDE.md, then analyze the batch files.`;
137
133
  tokenBreakdown.push(`${cacheReadTokens.toLocaleString()} cache read`);
138
134
  console.log(` šŸ’° Cost: $${cost.toFixed(4)} (${tokenBreakdown.join(' + ')} tokens)`);
139
135
  return {
136
+ batch,
140
137
  fixes: fixCount > 0 ? fixes : [],
141
138
  inputTokens,
142
139
  outputTokens,
143
140
  cacheCreationTokens,
144
141
  cacheReadTokens,
145
142
  cost,
143
+ skipped: false,
146
144
  };
147
145
  }
148
146
  catch (error) {
@@ -170,70 +168,75 @@ async function validateBatch() {
170
168
  return true;
171
169
  }
172
170
  /**
173
- * Create quality fixes PR
171
+ * Core analysis logic (git-agnostic)
172
+ * Returns batches and a function to process them
174
173
  */
175
- async function createQualityPR(batches, totalFixes, totalCost, totalInputTokens, totalOutputTokens, totalCacheCreationTokens, totalCacheReadTokens, baseBranch) {
176
- const { owner, repo } = await getCurrentRepo();
177
- const date = new Date().toISOString().split('T')[0];
178
- // Categorize by directory for summary
179
- const dirSummary = batches.reduce((acc, batch) => {
180
- acc[batch.name] = (acc[batch.name] || 0) + batch.files.length;
181
- return acc;
182
- }, {});
183
- const prBody = `## šŸ”§ Automated Quality Fixes
184
-
185
- This PR contains automated fixes to align the codebase with **CLAUDE.md** standards.
186
-
187
- ### šŸ“ˆ Summary
188
- - **Batches Processed**: ${batches.length}
189
- - **Files Modified**: ${batches.reduce((sum, b) => sum + b.files.length, 0)}
190
- - **Fixes Applied**: ${totalFixes}
191
- - **šŸ’° Total Cost**: $${totalCost.toFixed(4)}
192
-
193
- ### šŸ”¢ Token Usage
194
- - **Input tokens**: ${totalInputTokens.toLocaleString()} ($3/M)
195
- - **Output tokens**: ${totalOutputTokens.toLocaleString()} ($15/M)
196
- - **Cache write tokens**: ${totalCacheCreationTokens.toLocaleString()} ($3.75/M)
197
- - **Cache read tokens**: ${totalCacheReadTokens.toLocaleString()} ($0.30/M)
198
- - **Model**: Claude Sonnet 4.5
199
-
200
- ### šŸ“¦ Batches
201
-
202
- ${Object.entries(dirSummary)
203
- .map(([dir, count]) => `- **${dir}**: ${count} files`)
204
- .join('\n')}
205
-
206
- ### āœ… Validation
207
- - Linting: **PASSED**
208
- - Type checking: **PASSED**
209
-
210
- ### šŸŽÆ Fix Categories
211
-
212
- All fixes follow the comprehensive rules in CLAUDE.md, including:
213
- - āœ… Type inference from tRPC routers
214
- - āœ… Centralized type management
215
- - āœ… Navigation patterns (Link vs Button)
216
- - āœ… Loading states (Skeleton components)
217
- - āœ… Component colocation
218
- - āœ… Server-side filtering
219
- - āœ… Python code quality (if applicable)
220
-
221
- ---
222
-
223
- šŸ¤– *Generated by Kosuke CLI (\`bun run kosuke analyse\`)*
224
- `;
225
- // Get current branch name from git
226
- const git = simpleGit();
227
- const currentBranch = await git.revparse(['--abbrev-ref', 'HEAD']);
228
- const prUrl = await createPullRequest({
229
- owner,
230
- repo,
231
- title: `chore: Quality Fixes (${date})`,
232
- head: currentBranch.trim(),
233
- base: baseBranch,
234
- body: prBody,
174
+ async function prepareAnalysis(options) {
175
+ // Load CLAUDE.md rules
176
+ const claudeMdPath = join(process.cwd(), 'CLAUDE.md');
177
+ const claudeMdRules = readFileSync(claudeMdPath, 'utf-8');
178
+ console.log('šŸ“– Loaded CLAUDE.md rules\n');
179
+ // Discover files
180
+ console.log('šŸ” Discovering files...');
181
+ const files = await discoverFiles({
182
+ scope: options.scope,
183
+ types: options.types,
235
184
  });
236
- console.log(`āœ… Pull request created: ${prUrl}`);
185
+ console.log(`šŸ“Š Found ${files.length} files to analyze\n`);
186
+ if (files.length === 0) {
187
+ console.log('ā„¹ļø No files found to analyze.');
188
+ return { batches: [], claudeMdRules };
189
+ }
190
+ // Create batches (10-12 files each, grouped by directory)
191
+ const batches = createBatches(files, { maxSize: 10, groupBy: 'directory' });
192
+ console.log(`šŸ“¦ Created ${batches.length} batches\n`);
193
+ return { batches, claudeMdRules };
194
+ }
195
+ /**
196
+ * Process all batches sequentially (git-agnostic)
197
+ */
198
+ async function analyzeAllBatches(batches, claudeMdRules) {
199
+ const processedBatches = [];
200
+ let totalFixes = 0;
201
+ let totalCost = 0;
202
+ let totalInputTokens = 0;
203
+ let totalOutputTokens = 0;
204
+ let totalCacheCreationTokens = 0;
205
+ let totalCacheReadTokens = 0;
206
+ for (const [index, batch] of batches.entries()) {
207
+ console.log(`\nšŸ“Š Progress: ${index + 1}/${batches.length}`);
208
+ // Analyze batch (isolated Claude run)
209
+ const result = await analyzeBatch(batch, claudeMdRules);
210
+ // Always validate changes
211
+ const isValid = await validateBatch();
212
+ if (isValid && result.fixes.length > 0) {
213
+ console.log(` āœ… Batch validated and ready\n`);
214
+ processedBatches.push(result);
215
+ totalFixes += result.fixes.length;
216
+ totalCost += result.cost;
217
+ totalInputTokens += result.inputTokens;
218
+ totalOutputTokens += result.outputTokens;
219
+ totalCacheCreationTokens += result.cacheCreationTokens;
220
+ totalCacheReadTokens += result.cacheReadTokens;
221
+ }
222
+ else if (!isValid) {
223
+ // Validation failed, mark as skipped
224
+ console.warn(` āš ļø Validation failed, skipping batch\n`);
225
+ processedBatches.push({ ...result, skipped: true });
226
+ }
227
+ else {
228
+ console.log(` ā„¹ļø No fixes needed for this batch\n`);
229
+ }
230
+ }
231
+ return {
232
+ processedBatches,
233
+ totalFixes,
234
+ totalCost,
235
+ totalInputTokens,
236
+ totalOutputTokens,
237
+ totalCacheCreationTokens,
238
+ totalCacheReadTokens,
239
+ };
237
240
  }
238
241
  /**
239
242
  * Main analyse command
@@ -245,123 +248,64 @@ export async function analyseCommand(options = {}) {
245
248
  if (!process.env.ANTHROPIC_API_KEY) {
246
249
  throw new Error('ANTHROPIC_API_KEY environment variable is required');
247
250
  }
248
- if (!process.env.GITHUB_TOKEN) {
249
- throw new Error('GITHUB_TOKEN environment variable is required');
250
- }
251
- // Load CLAUDE.md rules
252
- const claudeMdPath = join(process.cwd(), 'CLAUDE.md');
253
- const claudeMdRules = readFileSync(claudeMdPath, 'utf-8');
254
- console.log('šŸ“– Loaded CLAUDE.md rules\n');
255
- // Discover files
256
- console.log('šŸ” Discovering files...');
257
- const files = await discoverFiles({
258
- scope: options.scope,
259
- types: options.types,
260
- });
261
- console.log(`šŸ“Š Found ${files.length} files to analyze\n`);
262
- if (files.length === 0) {
263
- console.log('ā„¹ļø No files found to analyze.');
251
+ // Prepare analysis (discover files, create batches)
252
+ const { batches, claudeMdRules } = await prepareAnalysis(options);
253
+ if (batches.length === 0) {
254
+ console.log('\nāœ… No files to analyze.\n');
264
255
  return;
265
256
  }
266
- // Create batches (10-12 files each, grouped by directory)
267
- const batches = createBatches(files, { maxSize: 10, groupBy: 'directory' });
268
- console.log(`šŸ“¦ Created ${batches.length} batches\n`);
269
- // Dry run: just analyze and report
270
- if (options.dryRun) {
271
- console.log('šŸ” DRY RUN MODE: Analyzing without creating PR...\n');
272
- for (const [index, batch] of batches.entries()) {
273
- console.log(`\nBatch ${index + 1}/${batches.length}: ${batch.name}`);
274
- console.log(`Files: ${batch.files.join(', ')}`);
257
+ // If --pr flag is provided, wrap with PR workflow
258
+ if (options.pr) {
259
+ if (!process.env.GITHUB_TOKEN) {
260
+ throw new Error('GITHUB_TOKEN environment variable is required for --pr flag');
275
261
  }
276
- console.log('\nāœ… Dry run complete. Use without --dry-run to create PR.');
277
- return;
278
- }
279
- // Get current branch for PR base (before creating new branch)
280
- const baseBranch = await getCurrentBranch();
281
- console.log(`šŸ“ Base branch: ${baseBranch}\n`);
282
- // Create working branch with unique name
283
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('.')[0];
284
- const branchName = `quality/kosuke-analysis-${timestamp}`;
285
- console.log(`🌿 Creating branch: ${branchName}\n`);
286
- await createBranch(branchName, baseBranch);
287
- // Process each batch with isolated Claude run
288
- const processedBatches = [];
289
- let totalFixes = 0;
290
- let totalCost = 0;
291
- let totalInputTokens = 0;
292
- let totalOutputTokens = 0;
293
- let totalCacheCreationTokens = 0;
294
- let totalCacheReadTokens = 0;
295
- for (const [index, batch] of batches.entries()) {
296
- console.log(`\nšŸ“Š Progress: ${index + 1}/${batches.length}`);
297
- // Analyze batch (isolated Claude run)
298
- const result = await analyzeBatch(batch, claudeMdRules);
299
- if (result.fixes.length > 0) {
300
- // Validate changes
301
- const isValid = await validateBatch();
302
- if (isValid) {
303
- // Commit batch
304
- try {
305
- await commit(`fix(quality): ${batch.name} - ${result.fixes.length} improvements`);
306
- console.log(` āœ… Batch committed\n`);
307
- processedBatches.push(batch);
308
- totalFixes += result.fixes.length;
309
- totalCost += result.cost;
310
- totalInputTokens += result.inputTokens;
311
- totalOutputTokens += result.outputTokens;
312
- totalCacheCreationTokens += result.cacheCreationTokens;
313
- totalCacheReadTokens += result.cacheReadTokens;
314
- }
315
- catch (error) {
316
- console.error(` āŒ Failed to commit batch:`, error);
317
- console.warn(` āš ļø Rolling back batch\n`);
318
- await reset();
319
- }
320
- }
321
- else {
322
- // Validation failed, rollback
323
- console.warn(` āš ļø Validation failed, rolling back batch\n`);
324
- await reset();
325
- }
262
+ const date = new Date().toISOString().split('T')[0];
263
+ // Create batch processors
264
+ const batchProcessors = batches.map((batch, index) => async () => {
265
+ console.log(`\nBatch ${index + 1}/${batches.length}`);
266
+ const result = await analyzeBatch(batch, claudeMdRules);
267
+ return result;
268
+ });
269
+ try {
270
+ const { results, prInfo } = await runWithPRBatched({
271
+ branchPrefix: 'quality/kosuke-analysis',
272
+ baseBranch: options.baseBranch,
273
+ commitMessage: (batchIndex) => `fix(quality): ${batches[batchIndex].name} - improvements`,
274
+ prTitle: `chore: Quality Fixes (${date})`,
275
+ prBody: '', // TODO: Generate detailed PR body after processing
276
+ validateBeforeCommit: validateBatch,
277
+ }, batchProcessors);
278
+ // Calculate totals
279
+ const processedBatches = results.filter((r) => !r.skipped);
280
+ const totalFixes = processedBatches.reduce((sum, r) => sum + r.fixes.length, 0);
281
+ const totalCost = processedBatches.reduce((sum, r) => sum + r.cost, 0);
282
+ console.log('\nāœ… Analysis complete!');
283
+ console.log(`šŸ“Š Processed ${processedBatches.length}/${batches.length} batches`);
284
+ console.log(`šŸ”§ Applied ${totalFixes} fixes`);
285
+ console.log(`šŸ’° Total cost: $${totalCost.toFixed(4)}`);
286
+ console.log(`šŸ”— PR: ${prInfo.prUrl}`);
326
287
  }
327
- else {
328
- console.log(` ā„¹ļø No fixes needed for this batch\n`);
288
+ catch (error) {
289
+ if (error instanceof Error && error.message === 'No changes to commit') {
290
+ console.log('\nāœ… No fixes needed! Codebase is already compliant.\n');
291
+ return;
292
+ }
293
+ throw error;
329
294
  }
330
295
  }
331
- if (processedBatches.length === 0) {
332
- console.log('\nāœ… No fixes needed! Codebase is already compliant.\n');
333
- console.log('ā„¹ļø Note: Created branch will not be pushed as there are no changes.');
334
- return;
335
- }
336
- console.log(`\nšŸ“Š Summary of processed batches:`);
337
- console.log(` āœ… Successfully processed: ${processedBatches.length}`);
338
- console.log(` āš ļø Skipped (no changes or validation failed): ${batches.length - processedBatches.length}`);
339
- // Push all commits
340
- console.log(`\n${'='.repeat(60)}`);
341
- console.log('šŸ“¤ Pushing all commits...\n');
342
- try {
343
- await push(branchName);
344
- console.log('āœ… Commits pushed successfully\n');
345
- }
346
- catch (error) {
347
- console.error('āŒ Failed to push commits:', error);
348
- throw new Error(`Failed to push branch ${branchName}: ${error instanceof Error ? error.message : String(error)}`);
349
- }
350
- // Create PR
351
- console.log('šŸ“‹ Creating pull request...\n');
352
- try {
353
- await createQualityPR(processedBatches, totalFixes, totalCost, totalInputTokens, totalOutputTokens, totalCacheCreationTokens, totalCacheReadTokens, baseBranch);
354
- }
355
- catch (error) {
356
- console.error('āŒ Failed to create pull request:', error);
357
- console.log(`\nā„¹ļø Changes have been pushed to branch: ${branchName}`);
358
- console.log(` You can manually create a PR from this branch.`);
359
- throw new Error(`Failed to create PR: ${error instanceof Error ? error.message : String(error)}`);
296
+ else {
297
+ // Run core logic without PR
298
+ const result = await analyzeAllBatches(batches, claudeMdRules);
299
+ if (result.processedBatches.length === 0) {
300
+ console.log('\nāœ… No fixes needed! Codebase is already compliant.\n');
301
+ return;
302
+ }
303
+ console.log('\nāœ… Analysis complete!');
304
+ console.log(`šŸ“Š Processed ${result.processedBatches.length}/${batches.length} batches`);
305
+ console.log(`šŸ”§ Applied ${result.totalFixes} fixes`);
306
+ console.log(`šŸ’° Total cost: $${result.totalCost.toFixed(4)}`);
307
+ console.log('\nā„¹ļø Changes applied locally. Use --pr flag to create a pull request.');
360
308
  }
361
- console.log('\nāœ… Quality analysis complete!');
362
- console.log(`šŸ“Š Processed ${processedBatches.length}/${batches.length} batches`);
363
- console.log(`šŸ”§ Applied ${totalFixes} fixes`);
364
- console.log(`šŸ’° Total cost: $${totalCost.toFixed(4)}`);
365
309
  }
366
310
  catch (error) {
367
311
  console.error('\nāŒ Analysis failed:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"analyse.js","sourceRoot":"","sources":["../../../kosuke/commands/analyse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyse.js","sourceRoot":"","sources":["../../../kosuke/commands/analyse.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,9 @@
3
3
  *
4
4
  * Strategy: Run linter, give errors to Claude, let it fix them
5
5
  */
6
- interface LintOptions {
7
- dryRun?: boolean;
8
- noPr?: boolean;
9
- }
6
+ import type { LintOptions } from '../types.js';
10
7
  /**
11
8
  * Main lint command
12
9
  */
13
10
  export declare function lintCommand(options?: LintOptions): Promise<void>;
14
- export {};
15
11
  //# sourceMappingURL=lint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/lint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAgFD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuI1E"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/lint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAqJ/C;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD1E"}
@@ -5,8 +5,7 @@
5
5
  */
6
6
  import { query } from '@anthropic-ai/claude-agent-sdk';
7
7
  import { runLint } from '../utils/validator.js';
8
- import { commit, push, createBranch, getCurrentRepo } from '../utils/git.js';
9
- import { createPullRequest } from '../utils/github.js';
8
+ import { runWithPR } from '../utils/pr-orchestrator.js';
10
9
  /**
11
10
  * Run Claude-powered lint fixing
12
11
  */
@@ -77,91 +76,79 @@ Start by reading the files with errors and fixing them one by one.`;
77
76
  }
78
77
  }
79
78
  /**
80
- * Main lint command
79
+ * Core lint fixing logic (git-agnostic)
81
80
  */
82
- export async function lintCommand(options = {}) {
83
- console.log('šŸš€ Starting Kosuke Lint Fix...\n');
84
- try {
85
- // Validate environment for PR creation
86
- if (!options.noPr) {
87
- if (!process.env.ANTHROPIC_API_KEY) {
88
- throw new Error('ANTHROPIC_API_KEY environment variable is required');
89
- }
90
- if (!process.env.GITHUB_TOKEN) {
91
- throw new Error('GITHUB_TOKEN environment variable is required');
92
- }
81
+ async function fixLintErrorsCore() {
82
+ console.log('šŸ” Running linter...\n');
83
+ let lintResult = await runLint();
84
+ if (lintResult.success) {
85
+ console.log('āœ… No linting errors found! Code is clean.\n');
86
+ return { success: true, attempts: 0, fixesApplied: 0 };
87
+ }
88
+ console.log('āŒ Linting errors found:\n');
89
+ console.log(lintResult.error);
90
+ // Use Claude to fix errors (up to 3 attempts)
91
+ let attemptCount = 0;
92
+ const maxAttempts = 3;
93
+ let totalFixes = 0;
94
+ while (!lintResult.success && attemptCount < maxAttempts) {
95
+ attemptCount++;
96
+ console.log(`\n${'='.repeat(60)}`);
97
+ console.log(`šŸ”„ Fix Attempt ${attemptCount}/${maxAttempts}`);
98
+ console.log(`${'='.repeat(60)}`);
99
+ const fixApplied = await fixLintErrors(lintResult.error || '');
100
+ if (!fixApplied) {
101
+ console.log('\nāš ļø No fixes were applied by Claude');
102
+ break;
93
103
  }
94
- // Run initial lint check
95
- console.log('šŸ” Running linter...\n');
96
- let lintResult = await runLint();
104
+ totalFixes++;
105
+ // Verify fixes by running lint again
106
+ console.log('\nšŸ” Verifying fixes...\n');
107
+ lintResult = await runLint();
97
108
  if (lintResult.success) {
98
- console.log('āœ… No linting errors found! Code is clean.\n');
99
- return;
109
+ console.log('āœ… All linting errors fixed!\n');
110
+ break;
100
111
  }
101
- console.log('āŒ Linting errors found:\n');
102
- console.log(lintResult.error);
103
- if (options.dryRun) {
104
- console.log('\nšŸ” DRY RUN MODE: Not fixing errors.');
105
- return;
106
- }
107
- // Create working branch
108
- let branchName = '';
109
- if (!options.noPr) {
110
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('.')[0];
111
- branchName = `fix/kosuke-lint-${timestamp}`;
112
- console.log(`\n🌿 Creating branch: ${branchName}\n`);
113
- await createBranch(branchName);
114
- }
115
- // Use Claude to fix errors (up to 3 attempts)
116
- let attemptCount = 0;
117
- const maxAttempts = 3;
118
- while (!lintResult.success && attemptCount < maxAttempts) {
119
- attemptCount++;
120
- console.log(`\n${'='.repeat(60)}`);
121
- console.log(`šŸ”„ Fix Attempt ${attemptCount}/${maxAttempts}`);
122
- console.log(`${'='.repeat(60)}`);
123
- const fixApplied = await fixLintErrors(lintResult.error || '');
124
- if (!fixApplied) {
125
- console.log('\nāš ļø No fixes were applied by Claude');
126
- break;
127
- }
128
- // Verify fixes by running lint again
129
- console.log('\nšŸ” Verifying fixes...\n');
130
- lintResult = await runLint();
131
- if (lintResult.success) {
132
- console.log('āœ… All linting errors fixed!\n');
133
- break;
134
- }
135
- else {
136
- console.log(`\nāš ļø Some errors remain (${lintResult.error?.split('\n').length || 0} lines):`);
137
- console.log(lintResult.error);
138
- }
139
- }
140
- // Check final result
141
- if (!lintResult.success) {
142
- console.error('\nāŒ Could not fix all linting errors after 3 attempts');
143
- console.log('\nRemaining errors:');
112
+ else {
113
+ console.log(`\nāš ļø Some errors remain (${lintResult.error?.split('\n').length || 0} lines):`);
144
114
  console.log(lintResult.error);
145
- throw new Error('Linting errors remain after maximum attempts');
146
115
  }
147
- // Commit and push if not in no-PR mode
148
- if (!options.noPr && branchName) {
149
- try {
150
- console.log('\nšŸ“ Committing fixes...\n');
151
- await commit('chore: fix linting errors');
152
- console.log('āœ… Changes committed\n');
153
- console.log('šŸ“¤ Pushing changes...\n');
154
- await push(branchName);
155
- console.log('āœ… Changes pushed\n');
156
- // Create PR
157
- console.log('šŸ“‹ Creating pull request...\n');
158
- const { owner, repo } = await getCurrentRepo();
159
- const prBody = `## šŸ”§ Automated Lint Fixes
116
+ }
117
+ // Check final result
118
+ if (!lintResult.success) {
119
+ console.error('\nāŒ Could not fix all linting errors after 3 attempts');
120
+ console.log('\nRemaining errors:');
121
+ console.log(lintResult.error);
122
+ throw new Error('Linting errors remain after maximum attempts');
123
+ }
124
+ return {
125
+ success: true,
126
+ attempts: attemptCount,
127
+ fixesApplied: totalFixes,
128
+ };
129
+ }
130
+ /**
131
+ * Main lint command
132
+ */
133
+ export async function lintCommand(options = {}) {
134
+ console.log('šŸš€ Starting Kosuke Lint Fix...\n');
135
+ try {
136
+ // Validate environment
137
+ if (!process.env.ANTHROPIC_API_KEY) {
138
+ throw new Error('ANTHROPIC_API_KEY environment variable is required');
139
+ }
140
+ // If --pr flag is provided, wrap with PR workflow
141
+ if (options.pr) {
142
+ const { result, prInfo } = await runWithPR({
143
+ branchPrefix: 'fix/kosuke-lint',
144
+ baseBranch: options.baseBranch,
145
+ commitMessage: 'chore: fix linting errors',
146
+ prTitle: 'chore: Fix linting errors',
147
+ prBody: `## šŸ”§ Automated Lint Fixes
160
148
 
161
149
  This PR contains automated fixes for linting errors.
162
150
 
163
151
  ### šŸ“ˆ Summary
164
- - **Fix Attempts**: ${attemptCount}
165
152
  - **Status**: āœ… All errors fixed
166
153
 
167
154
  ### āœ… Validation
@@ -169,27 +156,21 @@ This PR contains automated fixes for linting errors.
169
156
 
170
157
  ---
171
158
 
172
- šŸ¤– *Generated by Kosuke CLI (\`kosuke lint\`)*`;
173
- const prUrl = await createPullRequest({
174
- owner,
175
- repo,
176
- title: `chore: Fix linting errors`,
177
- head: branchName,
178
- base: 'main',
179
- body: prBody,
180
- });
181
- console.log(`āœ… Pull request created: ${prUrl}`);
182
- }
183
- catch (error) {
184
- console.error('\nāŒ Failed to create PR:', error);
185
- if (branchName) {
186
- console.log(`\nā„¹ļø Changes may be on branch: ${branchName}`);
187
- console.log(` You can manually create a PR from this branch.`);
188
- }
189
- throw error;
190
- }
159
+ šŸ¤– *Generated by Kosuke CLI (\`kosuke lint --pr\`)*`,
160
+ }, fixLintErrorsCore);
161
+ console.log('\nāœ… Lint fixing complete!');
162
+ console.log(`šŸ“Š Attempts: ${result.attempts}`);
163
+ console.log(`šŸ”§ Fixes applied: ${result.fixesApplied}`);
164
+ console.log(`šŸ”— PR: ${prInfo.prUrl}`);
165
+ }
166
+ else {
167
+ // Run core logic without PR
168
+ const result = await fixLintErrorsCore();
169
+ console.log('\nāœ… Lint fixing complete!');
170
+ console.log(`šŸ“Š Attempts: ${result.attempts}`);
171
+ console.log(`šŸ”§ Fixes applied: ${result.fixesApplied}`);
172
+ console.log('\nā„¹ļø Changes applied locally. Use --pr flag to create a pull request.');
191
173
  }
192
- console.log('\nāœ… Lint fixing complete!');
193
174
  }
194
175
  catch (error) {
195
176
  console.error('\nāŒ Lint fixing failed:', error);