@kosuke-ai/cli 0.0.12 → 0.0.13

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.
package/dist/index.d.ts CHANGED
@@ -3,12 +3,15 @@
3
3
  * Kosuke CLI - Development Automation Tool
4
4
  *
5
5
  * Commands:
6
- * sync-rules [--force] Sync rules from kosuke-template
7
- * analyse Analyze and fix code quality issues
8
- * lint Fix linting errors with Claude AI
9
- * requirements Interactive requirements gathering
10
- * getcode Explore GitHub repositories and fetch code
11
- * tickets Generate implementation tickets from requirements
6
+ * sync-rules [--force] Sync rules from kosuke-template
7
+ * analyse Analyze and fix code quality issues
8
+ * lint Fix linting errors with Claude AI
9
+ * requirements Interactive requirements gathering
10
+ * getcode Explore GitHub repositories and fetch code
11
+ * tickets Generate implementation tickets from requirements
12
+ * ship --ticket=<ID> Implement a single ticket from tickets.json
13
+ * build Batch process all tickets from tickets.json
14
+ * review Review codebase against CLAUDE.md rules
12
15
  *
13
16
  * Usage:
14
17
  * bun run kosuke sync-rules
@@ -17,6 +20,9 @@
17
20
  * bun run kosuke requirements
18
21
  * bun run kosuke getcode "query"
19
22
  * bun run kosuke tickets
23
+ * bun run kosuke ship --ticket=SCHEMA-1
24
+ * bun run kosuke build
25
+ * bun run kosuke review
20
26
  *
21
27
  * Environment Variables:
22
28
  * ANTHROPIC_API_KEY - Required for Claude API
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -3,12 +3,15 @@
3
3
  * Kosuke CLI - Development Automation Tool
4
4
  *
5
5
  * Commands:
6
- * sync-rules [--force] Sync rules from kosuke-template
7
- * analyse Analyze and fix code quality issues
8
- * lint Fix linting errors with Claude AI
9
- * requirements Interactive requirements gathering
10
- * getcode Explore GitHub repositories and fetch code
11
- * tickets Generate implementation tickets from requirements
6
+ * sync-rules [--force] Sync rules from kosuke-template
7
+ * analyse Analyze and fix code quality issues
8
+ * lint Fix linting errors with Claude AI
9
+ * requirements Interactive requirements gathering
10
+ * getcode Explore GitHub repositories and fetch code
11
+ * tickets Generate implementation tickets from requirements
12
+ * ship --ticket=<ID> Implement a single ticket from tickets.json
13
+ * build Batch process all tickets from tickets.json
14
+ * review Review codebase against CLAUDE.md rules
12
15
  *
13
16
  * Usage:
14
17
  * bun run kosuke sync-rules
@@ -17,6 +20,9 @@
17
20
  * bun run kosuke requirements
18
21
  * bun run kosuke getcode "query"
19
22
  * bun run kosuke tickets
23
+ * bun run kosuke ship --ticket=SCHEMA-1
24
+ * bun run kosuke build
25
+ * bun run kosuke review
20
26
  *
21
27
  * Environment Variables:
22
28
  * ANTHROPIC_API_KEY - Required for Claude API
@@ -29,6 +35,9 @@ import { lintCommand } from './kosuke/commands/lint.js';
29
35
  import { requirementsCommand } from './kosuke/commands/requirements.js';
30
36
  import { getCodeCommand, parseGetCodeArgs } from './kosuke/commands/getcode.js';
31
37
  import { ticketsCommand } from './kosuke/commands/tickets.js';
38
+ import { shipCommand } from './kosuke/commands/ship.js';
39
+ import { buildCommand } from './kosuke/commands/build.js';
40
+ import { reviewCommand } from './kosuke/commands/review.js';
32
41
  async function main() {
33
42
  const args = process.argv.slice(2);
34
43
  const command = args[0];
@@ -86,6 +95,41 @@ async function main() {
86
95
  await ticketsCommand(options);
87
96
  break;
88
97
  }
98
+ case 'ship': {
99
+ const ticketArg = args.find((arg) => arg.startsWith('--ticket='))?.split('=')[1];
100
+ if (!ticketArg) {
101
+ console.error('āŒ --ticket flag is required\n');
102
+ console.log('Usage: kosuke ship --ticket=SCHEMA-1 [--review] [--commit | --pr]');
103
+ console.log('\nExamples:');
104
+ console.log(' kosuke ship --ticket=SCHEMA-1 # Local only');
105
+ console.log(' kosuke ship --ticket=BACKEND-2 --review # With review');
106
+ console.log(' kosuke ship --ticket=FRONTEND-1 --commit # Commit to current branch');
107
+ console.log(' kosuke ship --ticket=BACKEND-3 --pr # Create PR (new branch)');
108
+ process.exit(1);
109
+ }
110
+ const options = {
111
+ ticket: ticketArg,
112
+ review: args.includes('--review'),
113
+ commit: args.includes('--commit'),
114
+ pr: args.includes('--pr'),
115
+ baseBranch: args.find((arg) => arg.startsWith('--base-branch='))?.split('=')[1],
116
+ ticketsFile: args.find((arg) => arg.startsWith('--tickets='))?.split('=')[1],
117
+ };
118
+ await shipCommand(options);
119
+ break;
120
+ }
121
+ case 'build': {
122
+ const options = {
123
+ ticketsFile: args.find((arg) => arg.startsWith('--tickets='))?.split('=')[1],
124
+ };
125
+ await buildCommand(options);
126
+ break;
127
+ }
128
+ case 'review': {
129
+ const options = {};
130
+ await reviewCommand(options);
131
+ break;
132
+ }
89
133
  default:
90
134
  console.error(`āŒ Unknown command: ${command}\n`);
91
135
  showHelp();
@@ -187,6 +231,50 @@ COMMANDS:
187
231
  kosuke tickets --path=requirements.md # Custom requirements file
188
232
  kosuke tickets --output=my-tickets.json # Custom output file
189
233
 
234
+ ship --ticket=<ID> [options]
235
+ Implement a single ticket from tickets.json
236
+ Follows CLAUDE.md rules, runs linting, and optionally performs review
237
+
238
+ Options:
239
+ --ticket=<ID> Ticket ID to implement (required, e.g., SCHEMA-1)
240
+ --review Perform code review step after implementation
241
+ --commit Commit and push to current branch
242
+ --pr Create new branch and pull request (mutually exclusive with --commit)
243
+ --base-branch=<name> Base branch for PR (default: current branch)
244
+ --tickets=<file> Path to tickets file (default: tickets.json)
245
+
246
+ Examples:
247
+ kosuke ship --ticket=SCHEMA-1 # Implement locally only
248
+ kosuke ship --ticket=BACKEND-2 --review # Implement with review
249
+ kosuke ship --ticket=FRONTEND-1 --commit # Commit to current branch
250
+ kosuke ship --ticket=BACKEND-3 --pr # Create new branch + PR
251
+ kosuke ship --ticket=SCHEMA-1 --tickets=custom.json
252
+
253
+ build [options]
254
+ Batch process all "Todo" and "Error" tickets from tickets.json
255
+ Automatically commits each ticket to current branch
256
+ Processes tickets in order: Schema → Backend → Frontend
257
+
258
+ Options:
259
+ --tickets=<file> Path to tickets file (default: tickets.json)
260
+
261
+ Examples:
262
+ git checkout -b feat/implement-tickets # Create feature branch first
263
+ kosuke build # Process and commit all tickets
264
+ gh pr create # Create PR manually
265
+
266
+ kosuke build --tickets=custom.json # Use custom tickets file
267
+
268
+ Note: If a ticket fails, fix the issue and run build again to resume
269
+
270
+ review
271
+ Review current git diff against CLAUDE.md rules
272
+ Identifies and fixes compliance issues in uncommitted changes
273
+ Note: Changes applied locally only (no --pr support)
274
+
275
+ Examples:
276
+ kosuke review # Review uncommitted changes
277
+
190
278
  WORKFLOW:
191
279
 
192
280
  By default, all commands apply changes locally without git operations.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Build command - Batch process all tickets from tickets.json
3
+ *
4
+ * This command processes all "Todo" and "Error" tickets sequentially,
5
+ * implementing each one using the ship command with --commit flag.
6
+ * Each ticket is committed individually to the current branch.
7
+ *
8
+ * Usage:
9
+ * kosuke build # Process and commit all tickets
10
+ * kosuke build --tickets=path/to/tickets.json
11
+ *
12
+ * Note: Create a feature branch before running build:
13
+ * git checkout -b feat/implement-tickets
14
+ * kosuke build
15
+ * gh pr create
16
+ */
17
+ import type { BuildOptions } from '../types.js';
18
+ /**
19
+ * Main build command - processes all tickets and commits each one
20
+ */
21
+ export declare function buildCommand(options: BuildOptions): Promise<void>;
22
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAU,MAAM,aAAa,CAAC;AAyDxD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EvE"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Build command - Batch process all tickets from tickets.json
3
+ *
4
+ * This command processes all "Todo" and "Error" tickets sequentially,
5
+ * implementing each one using the ship command with --commit flag.
6
+ * Each ticket is committed individually to the current branch.
7
+ *
8
+ * Usage:
9
+ * kosuke build # Process and commit all tickets
10
+ * kosuke build --tickets=path/to/tickets.json
11
+ *
12
+ * Note: Create a feature branch before running build:
13
+ * git checkout -b feat/implement-tickets
14
+ * kosuke build
15
+ * gh pr create
16
+ */
17
+ import { readFileSync, existsSync } from 'fs';
18
+ import { join } from 'path';
19
+ import { shipCommand } from './ship.js';
20
+ /**
21
+ * Load tickets from file
22
+ */
23
+ function loadTicketsFile(ticketsPath) {
24
+ if (!existsSync(ticketsPath)) {
25
+ throw new Error(`Tickets file not found: ${ticketsPath}\n` +
26
+ `Please generate tickets first using: kosuke tickets`);
27
+ }
28
+ try {
29
+ const content = readFileSync(ticketsPath, 'utf-8');
30
+ return JSON.parse(content);
31
+ }
32
+ catch (error) {
33
+ throw new Error(`Failed to parse tickets file: ${error instanceof Error ? error.message : String(error)}`);
34
+ }
35
+ }
36
+ /**
37
+ * Filter and sort tickets for processing
38
+ */
39
+ function getTicketsToProcess(ticketsData) {
40
+ // Get all Todo and Error tickets (automatic retry on Error)
41
+ let tickets = ticketsData.tickets.filter((t) => t.status === 'Todo' || t.status === 'Error');
42
+ // Sort by phase: SCHEMA -> BACKEND -> FRONTEND
43
+ tickets.sort((a, b) => {
44
+ const getPhaseOrder = (id) => {
45
+ if (id.startsWith('SCHEMA-'))
46
+ return 1;
47
+ if (id.startsWith('BACKEND-'))
48
+ return 2;
49
+ if (id.startsWith('FRONTEND-'))
50
+ return 3;
51
+ return 4;
52
+ };
53
+ const phaseComparison = getPhaseOrder(a.id) - getPhaseOrder(b.id);
54
+ if (phaseComparison !== 0)
55
+ return phaseComparison;
56
+ // Within same phase, sort by ticket number
57
+ const aNum = parseInt(a.id.split('-')[1] || '0', 10);
58
+ const bNum = parseInt(b.id.split('-')[1] || '0', 10);
59
+ return aNum - bNum;
60
+ });
61
+ return tickets;
62
+ }
63
+ /**
64
+ * Main build command - processes all tickets and commits each one
65
+ */
66
+ export async function buildCommand(options) {
67
+ console.log('šŸ—ļø Starting Build - Batch Ticket Processing\n');
68
+ try {
69
+ // Validate environment
70
+ if (!process.env.ANTHROPIC_API_KEY) {
71
+ throw new Error('ANTHROPIC_API_KEY environment variable is required');
72
+ }
73
+ if (!process.env.GITHUB_TOKEN) {
74
+ throw new Error('GITHUB_TOKEN environment variable is required for build command');
75
+ }
76
+ const { ticketsFile = 'tickets.json' } = options;
77
+ const cwd = process.cwd();
78
+ const ticketsPath = join(cwd, ticketsFile);
79
+ // 1. Load tickets
80
+ console.log('šŸ“‹ Loading tickets...');
81
+ const ticketsData = loadTicketsFile(ticketsPath);
82
+ const ticketsToProcess = getTicketsToProcess(ticketsData);
83
+ if (ticketsToProcess.length === 0) {
84
+ console.log('ā„¹ļø No tickets found with status "Todo" or "Error"');
85
+ return;
86
+ }
87
+ console.log(` āœ… Found ${ticketsToProcess.length} ticket(s) to process\n`);
88
+ // Display tickets to be processed
89
+ console.log('šŸ“¦ Tickets to be processed:');
90
+ ticketsToProcess.forEach((ticket, index) => {
91
+ console.log(` ${index + 1}. ${ticket.id}: ${ticket.title}`);
92
+ });
93
+ console.log('');
94
+ // 2. Process each ticket sequentially with ship --commit
95
+ for (let i = 0; i < ticketsToProcess.length; i++) {
96
+ const ticket = ticketsToProcess[i];
97
+ console.log('\n' + '='.repeat(80));
98
+ console.log(`šŸ“¦ Processing Ticket ${i + 1}/${ticketsToProcess.length}: ${ticket.id}`);
99
+ console.log(`šŸ“ ${ticket.title}`);
100
+ console.log('='.repeat(80) + '\n');
101
+ try {
102
+ // Use ship command with --commit flag
103
+ await shipCommand({
104
+ ticket: ticket.id,
105
+ commit: true,
106
+ ticketsFile,
107
+ });
108
+ console.log(`\nāœ… ${ticket.id} completed and committed successfully\n`);
109
+ }
110
+ catch (error) {
111
+ const errorMessage = error instanceof Error ? error.message : String(error);
112
+ console.error(`\nāŒ Failed to process ${ticket.id}: ${errorMessage}`);
113
+ console.error('\nāŒ Build stopped due to ticket failure');
114
+ console.error('ā„¹ļø Fix the issue and run build again to resume from failed tickets\n');
115
+ throw error;
116
+ }
117
+ }
118
+ // 3. Display final summary
119
+ console.log('\n' + '='.repeat(80));
120
+ console.log('āœ… Build Completed Successfully!');
121
+ console.log('='.repeat(80));
122
+ console.log(`šŸ“¦ Total tickets processed: ${ticketsToProcess.length}`);
123
+ console.log(`āœ… All tickets have been committed to current branch`);
124
+ console.log('='.repeat(80));
125
+ console.log('\nšŸ’” Next steps:');
126
+ console.log(' - Review the commits');
127
+ console.log(' - Create a PR using: gh pr create');
128
+ console.log(' - Or push to a remote branch and create PR manually\n');
129
+ }
130
+ catch (error) {
131
+ console.error('\nāŒ Build failed:', error);
132
+ throw error;
133
+ }
134
+ }
135
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../kosuke/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Review command - Review git diff against CLAUDE.md rules
3
+ *
4
+ * This command reviews only the current git diff (uncommitted changes)
5
+ * for compliance with CLAUDE.md rules, fixes any issues found,
6
+ * and runs comprehensive linting afterwards.
7
+ * Note: This command does NOT support --pr flag (changes applied locally only).
8
+ *
9
+ * Usage:
10
+ * kosuke review # Review current git diff
11
+ */
12
+ import type { ReviewOptions, ReviewResult } from '../types.js';
13
+ /**
14
+ * Core review logic - reviews git diff only
15
+ */
16
+ export declare function reviewCore(options?: ReviewOptions): Promise<ReviewResult>;
17
+ /**
18
+ * Main review command
19
+ */
20
+ export declare function reviewCommand(options?: ReviewOptions): Promise<void>;
21
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmE/D;;GAEG;AACH,wBAAsB,UAAU,CAE9B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA0FvB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B9E"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Review command - Review git diff against CLAUDE.md rules
3
+ *
4
+ * This command reviews only the current git diff (uncommitted changes)
5
+ * for compliance with CLAUDE.md rules, fixes any issues found,
6
+ * and runs comprehensive linting afterwards.
7
+ * Note: This command does NOT support --pr flag (changes applied locally only).
8
+ *
9
+ * Usage:
10
+ * kosuke review # Review current git diff
11
+ */
12
+ import { readFileSync, existsSync } from 'fs';
13
+ import { join } from 'path';
14
+ import { runAgent, formatCostBreakdown } from '../utils/claude-agent.js';
15
+ import { getGitDiff, hasUncommittedChanges } from '../utils/git.js';
16
+ import { runComprehensiveLinting } from '../utils/validator.js';
17
+ /**
18
+ * Load CLAUDE.md rules
19
+ */
20
+ function loadClaudeRules(cwd = process.cwd()) {
21
+ const claudePath = join(cwd, 'CLAUDE.md');
22
+ if (!existsSync(claudePath)) {
23
+ throw new Error(`CLAUDE.md not found in workspace root.\n` +
24
+ `Please ensure CLAUDE.md exists at: ${claudePath}`);
25
+ }
26
+ return readFileSync(claudePath, 'utf-8');
27
+ }
28
+ /**
29
+ * Build system prompt for code review (git diff only)
30
+ */
31
+ function buildReviewSystemPrompt(claudeRules, gitDiff) {
32
+ return `You are a senior code reviewer conducting a code quality review of recent changes.
33
+
34
+ **Your Task:**
35
+ Review the git diff below for compliance with the project's CLAUDE.md rules and best practices.
36
+
37
+ **Project Rules (CLAUDE.md):**
38
+ ${claudeRules}
39
+
40
+ **Git Diff to Review:**
41
+ \`\`\`diff
42
+ ${gitDiff}
43
+ \`\`\`
44
+
45
+ **Review Scope:**
46
+ 1. **Code Quality**: Check for violations of CLAUDE.md guidelines
47
+ 2. **Type Safety**: Ensure proper TypeScript usage
48
+ 3. **Best Practices**: Verify coding patterns and conventions
49
+ 4. **Error Handling**: Ensure proper error handling
50
+ 5. **Documentation**: Check for adequate comments and docs
51
+ 6. **Security**: Identify potential security issues
52
+ 7. **Performance**: Look for obvious performance issues
53
+
54
+ **Critical Instructions:**
55
+ - Focus ONLY on the files and changes shown in the git diff above
56
+ - Identify ALL violations of CLAUDE.md rules in the changed code
57
+ - For EACH issue found, FIX it immediately using search_replace or write tools
58
+ - Don't just report issues - FIX them!
59
+ - Make minimal necessary changes
60
+ - Ensure fixes don't break functionality
61
+ - If you need to see more context from a file, use the read_file tool
62
+
63
+ **What to Look For in the Changes:**
64
+ - Use of \`any\` type (should be avoided)
65
+ - Missing error handling
66
+ - Inconsistent naming conventions
67
+ - Poor code organization
68
+ - Missing JSDoc comments on exported functions
69
+ - Improper use of dependencies
70
+ - Code duplication
71
+ - Overly complex functions
72
+ - Missing type exports
73
+
74
+ Review the changes shown in the diff and fix any issues you find.`;
75
+ }
76
+ /**
77
+ * Core review logic - reviews git diff only
78
+ */
79
+ export async function reviewCore(
80
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
81
+ options = {}) {
82
+ const cwd = process.cwd();
83
+ // 1. Check for uncommitted changes
84
+ console.log('šŸ” Checking for uncommitted changes...');
85
+ const hasChanges = await hasUncommittedChanges();
86
+ if (!hasChanges) {
87
+ console.log(' ā„¹ļø No uncommitted changes found. Nothing to review.\n');
88
+ return {
89
+ success: true,
90
+ issuesFound: 0,
91
+ fixesApplied: 0,
92
+ tokensUsed: {
93
+ input: 0,
94
+ output: 0,
95
+ cacheCreation: 0,
96
+ cacheRead: 0,
97
+ },
98
+ cost: 0,
99
+ };
100
+ }
101
+ console.log(' āœ… Found uncommitted changes\n');
102
+ // 2. Get git diff
103
+ console.log('šŸ“ Getting git diff...');
104
+ const gitDiff = await getGitDiff();
105
+ if (!gitDiff || gitDiff.trim().length === 0) {
106
+ console.log(' ā„¹ļø No diff available. Nothing to review.\n');
107
+ return {
108
+ success: true,
109
+ issuesFound: 0,
110
+ fixesApplied: 0,
111
+ tokensUsed: {
112
+ input: 0,
113
+ output: 0,
114
+ cacheCreation: 0,
115
+ cacheRead: 0,
116
+ },
117
+ cost: 0,
118
+ };
119
+ }
120
+ console.log(` āœ… Got diff (${gitDiff.length} characters)\n`);
121
+ // 3. Load CLAUDE.md rules
122
+ console.log('šŸ“– Loading CLAUDE.md rules...');
123
+ const claudeRules = loadClaudeRules(cwd);
124
+ console.log(` āœ… Loaded rules (${claudeRules.length} characters)\n`);
125
+ // 4. Review phase
126
+ console.log(`\n${'='.repeat(60)}`);
127
+ console.log(`šŸ” Phase 1: Code Review of Git Diff`);
128
+ console.log(`${'='.repeat(60)}\n`);
129
+ const systemPrompt = buildReviewSystemPrompt(claudeRules, gitDiff);
130
+ const reviewResult = await runAgent('Review the git diff for compliance with CLAUDE.md rules and fix all issues found', {
131
+ systemPrompt,
132
+ cwd,
133
+ maxTurns: 30,
134
+ verbosity: 'normal',
135
+ });
136
+ const issuesFound = reviewResult.fixCount;
137
+ console.log(`\n✨ Review completed`);
138
+ console.log(` šŸ” Issues found and fixed: ${issuesFound}`);
139
+ console.log(` šŸ’° Review cost: ${formatCostBreakdown(reviewResult)}`);
140
+ // 5. Linting phase
141
+ console.log(`\n${'='.repeat(60)}`);
142
+ console.log(`šŸ”§ Phase 2: Linting & Quality Checks`);
143
+ console.log(`${'='.repeat(60)}\n`);
144
+ const lintResult = await runComprehensiveLinting();
145
+ console.log(`\nāœ… Linting completed (${lintResult.fixCount} additional fixes applied)`);
146
+ return {
147
+ success: true,
148
+ issuesFound,
149
+ fixesApplied: issuesFound + lintResult.fixCount,
150
+ tokensUsed: reviewResult.tokensUsed,
151
+ cost: reviewResult.cost,
152
+ };
153
+ }
154
+ /**
155
+ * Main review command
156
+ */
157
+ export async function reviewCommand(options = {}) {
158
+ console.log('šŸ” Starting Code Review (Git Diff)...\n');
159
+ try {
160
+ // Validate environment
161
+ if (!process.env.ANTHROPIC_API_KEY) {
162
+ throw new Error('ANTHROPIC_API_KEY environment variable is required');
163
+ }
164
+ // Execute core logic (no PR support for review command)
165
+ const result = await reviewCore(options);
166
+ if (result.issuesFound === 0 && result.fixesApplied === 0) {
167
+ console.log('\nāœ… Review completed - no issues found!');
168
+ return;
169
+ }
170
+ console.log('\n' + '='.repeat(60));
171
+ console.log('šŸ“Š Review Summary');
172
+ console.log('='.repeat(60));
173
+ console.log(`šŸ” Issues found: ${result.issuesFound}`);
174
+ console.log(`šŸ”§ Total fixes applied: ${result.fixesApplied}`);
175
+ console.log(`šŸ’° Total cost: $${result.cost.toFixed(4)}`);
176
+ console.log('='.repeat(60));
177
+ console.log('\nāœ… Review completed successfully!');
178
+ console.log('ā„¹ļø All changes applied locally.');
179
+ }
180
+ catch (error) {
181
+ console.error('\nāŒ Review failed:', error);
182
+ throw error;
183
+ }
184
+ }
185
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../kosuke/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Ship command - Implement a ticket from tickets.json
3
+ *
4
+ * This command takes a ticket ID, implements it following CLAUDE.md rules,
5
+ * runs linting and fixing, and optionally performs a review step.
6
+ *
7
+ * Usage:
8
+ * kosuke ship --ticket=SCHEMA-1 # Implement ticket (local only)
9
+ * kosuke ship --ticket=BACKEND-2 --review # Implement with review
10
+ * kosuke ship --ticket=FRONTEND-1 --commit # Implement and commit to current branch
11
+ * kosuke ship --ticket=BACKEND-3 --pr # Implement and create PR (new branch)
12
+ * kosuke ship --ticket=SCHEMA-1 --tickets=path/to/tickets.json
13
+ */
14
+ import type { ShipOptions, ShipResult } from '../types.js';
15
+ /**
16
+ * Core ship logic (git-agnostic, reusable)
17
+ */
18
+ export declare function shipCore(options: ShipOptions): Promise<ShipResult>;
19
+ /**
20
+ * Main ship command
21
+ */
22
+ export declare function shipCommand(options: ShipOptions): Promise<void>;
23
+ //# sourceMappingURL=ship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAuKnE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAwKxE;AA4BD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHrE"}