@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 +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -6
- package/dist/index.js.map +1 -1
- package/dist/kosuke/commands/build.d.ts +22 -0
- package/dist/kosuke/commands/build.d.ts.map +1 -0
- package/dist/kosuke/commands/build.js +135 -0
- package/dist/kosuke/commands/build.js.map +1 -0
- package/dist/kosuke/commands/review.d.ts +21 -0
- package/dist/kosuke/commands/review.d.ts.map +1 -0
- package/dist/kosuke/commands/review.js +185 -0
- package/dist/kosuke/commands/review.js.map +1 -0
- package/dist/kosuke/commands/ship.d.ts +23 -0
- package/dist/kosuke/commands/ship.d.ts.map +1 -0
- package/dist/kosuke/commands/ship.js +419 -0
- package/dist/kosuke/commands/ship.js.map +1 -0
- package/dist/kosuke/types.d.ts +45 -1
- package/dist/kosuke/types.d.ts.map +1 -1
- package/dist/kosuke/utils/git.d.ts +12 -0
- package/dist/kosuke/utils/git.d.ts.map +1 -1
- package/dist/kosuke/utils/git.js +39 -0
- package/dist/kosuke/utils/git.js.map +1 -1
- package/dist/kosuke/utils/validator.d.ts +11 -0
- package/dist/kosuke/utils/validator.d.ts.map +1 -1
- package/dist/kosuke/utils/validator.js +100 -0
- package/dist/kosuke/utils/validator.js.map +1 -1
- package/dist/lib.d.ts +5 -2
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +4 -1
- package/dist/lib.js.map +1 -1
- package/package.json +1 -1
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]
|
|
7
|
-
* analyse
|
|
8
|
-
* lint
|
|
9
|
-
* requirements
|
|
10
|
-
* getcode
|
|
11
|
-
* tickets
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA
|
|
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]
|
|
7
|
-
* analyse
|
|
8
|
-
* lint
|
|
9
|
-
* requirements
|
|
10
|
-
* getcode
|
|
11
|
-
* tickets
|
|
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":";AAEA
|
|
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"}
|