@kosuke-ai/cli 0.0.36 โ 0.0.38
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 +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -84
- package/dist/index.js.map +1 -1
- package/dist/kosuke/commands/build.d.ts +7 -3
- package/dist/kosuke/commands/build.d.ts.map +1 -1
- package/dist/kosuke/commands/build.js +53 -16
- package/dist/kosuke/commands/build.js.map +1 -1
- package/dist/kosuke/commands/ship.d.ts +22 -15
- package/dist/kosuke/commands/ship.d.ts.map +1 -1
- package/dist/kosuke/commands/ship.js +49 -151
- package/dist/kosuke/commands/ship.js.map +1 -1
- package/dist/kosuke/commands/test.d.ts +2 -1
- package/dist/kosuke/commands/test.d.ts.map +1 -1
- package/dist/kosuke/commands/test.js +75 -23
- package/dist/kosuke/commands/test.js.map +1 -1
- package/dist/kosuke/commands/tickets.d.ts.map +1 -1
- package/dist/kosuke/commands/tickets.js +278 -109
- package/dist/kosuke/commands/tickets.js.map +1 -1
- package/dist/kosuke/types.d.ts +30 -9
- package/dist/kosuke/types.d.ts.map +1 -1
- package/dist/kosuke/utils/prompt-generator.d.ts +0 -4
- package/dist/kosuke/utils/prompt-generator.d.ts.map +1 -1
- package/dist/kosuke/utils/prompt-generator.js +0 -14
- package/dist/kosuke/utils/prompt-generator.js.map +1 -1
- package/dist/kosuke/utils/test-runner.d.ts +15 -0
- package/dist/kosuke/utils/test-runner.d.ts.map +1 -0
- package/dist/kosuke/utils/test-runner.js +94 -0
- package/dist/kosuke/utils/test-runner.js.map +1 -0
- package/dist/lib.d.ts +29 -2
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +28 -1
- package/dist/lib.js.map +1 -1
- package/dist/package.json +2 -2
- package/package.json +2 -2
- package/dist/kosuke/utils/browser-agent.d.ts +0 -33
- package/dist/kosuke/utils/browser-agent.d.ts.map +0 -1
- package/dist/kosuke/utils/browser-agent.js +0 -102
- package/dist/kosuke/utils/browser-agent.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* requirements Interactive requirements gathering
|
|
10
10
|
* getcode Explore GitHub repositories and fetch code
|
|
11
11
|
* tickets Generate implementation tickets from requirements
|
|
12
|
-
* ship --ticket=<ID> Implement a single ticket from tickets.json
|
|
13
12
|
* build Batch process all tickets from tickets.json
|
|
14
13
|
* review Review codebase against CLAUDE.md rules
|
|
15
14
|
* test Run E2E tests with automated fixing (ticket or custom prompt)
|
|
@@ -21,7 +20,6 @@
|
|
|
21
20
|
* bun run kosuke requirements
|
|
22
21
|
* bun run kosuke getcode "query"
|
|
23
22
|
* bun run kosuke tickets
|
|
24
|
-
* bun run kosuke ship --ticket=SCHEMA-1
|
|
25
23
|
* bun run kosuke build
|
|
26
24
|
* bun run kosuke review
|
|
27
25
|
* bun run kosuke test --ticket=FRONTEND-1 OR --prompt="Test login flow"
|
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
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* requirements Interactive requirements gathering
|
|
10
10
|
* getcode Explore GitHub repositories and fetch code
|
|
11
11
|
* tickets Generate implementation tickets from requirements
|
|
12
|
-
* ship --ticket=<ID> Implement a single ticket from tickets.json
|
|
13
12
|
* build Batch process all tickets from tickets.json
|
|
14
13
|
* review Review codebase against CLAUDE.md rules
|
|
15
14
|
* test Run E2E tests with automated fixing (ticket or custom prompt)
|
|
@@ -21,7 +20,6 @@
|
|
|
21
20
|
* bun run kosuke requirements
|
|
22
21
|
* bun run kosuke getcode "query"
|
|
23
22
|
* bun run kosuke tickets
|
|
24
|
-
* bun run kosuke ship --ticket=SCHEMA-1
|
|
25
23
|
* bun run kosuke build
|
|
26
24
|
* bun run kosuke review
|
|
27
25
|
* bun run kosuke test --ticket=FRONTEND-1 OR --prompt="Test login flow"
|
|
@@ -31,16 +29,15 @@
|
|
|
31
29
|
* GITHUB_TOKEN - Required for creating PRs
|
|
32
30
|
*/
|
|
33
31
|
import 'dotenv/config';
|
|
34
|
-
import { syncRulesCommand } from './kosuke/commands/sync-rules.js';
|
|
35
32
|
import { analyseCommand } from './kosuke/commands/analyse.js';
|
|
33
|
+
import { buildCommand } from './kosuke/commands/build.js';
|
|
34
|
+
import { getCodeCommand, parseGetCodeArgs } from './kosuke/commands/getcode.js';
|
|
36
35
|
import { lintCommand } from './kosuke/commands/lint.js';
|
|
37
36
|
import { requirementsCommand } from './kosuke/commands/requirements.js';
|
|
38
|
-
import { getCodeCommand, parseGetCodeArgs } from './kosuke/commands/getcode.js';
|
|
39
|
-
import { ticketsCommand } from './kosuke/commands/tickets.js';
|
|
40
|
-
import { shipCommand } from './kosuke/commands/ship.js';
|
|
41
|
-
import { buildCommand } from './kosuke/commands/build.js';
|
|
42
37
|
import { reviewCommand } from './kosuke/commands/review.js';
|
|
38
|
+
import { syncRulesCommand } from './kosuke/commands/sync-rules.js';
|
|
43
39
|
import { testCommand } from './kosuke/commands/test.js';
|
|
40
|
+
import { ticketsCommand } from './kosuke/commands/tickets.js';
|
|
44
41
|
async function main() {
|
|
45
42
|
const args = process.argv.slice(2);
|
|
46
43
|
const command = args[0];
|
|
@@ -104,32 +101,6 @@ async function main() {
|
|
|
104
101
|
await ticketsCommand(options);
|
|
105
102
|
break;
|
|
106
103
|
}
|
|
107
|
-
case 'ship': {
|
|
108
|
-
const ticketArg = args.find((arg) => arg.startsWith('--ticket='))?.split('=')[1];
|
|
109
|
-
if (!ticketArg) {
|
|
110
|
-
console.error('โ --ticket flag is required\n');
|
|
111
|
-
console.log('Usage: kosuke ship --ticket=SCHEMA-1 [--test] [--commit] [--directory=<path>] [--db-url=<url>]');
|
|
112
|
-
console.log('\nExamples:');
|
|
113
|
-
console.log(' kosuke ship --ticket=SCHEMA-1 # Local only');
|
|
114
|
-
console.log(' kosuke ship --ticket=FRONTEND-1 --test # With testing');
|
|
115
|
-
console.log(' kosuke ship --ticket=FRONTEND-1 --commit # Commit to current branch');
|
|
116
|
-
console.log(' kosuke ship --ticket=SCHEMA-1 --directory=./my-project # Specific directory');
|
|
117
|
-
console.log(' kosuke ship --ticket=SCHEMA-1 --db-url=postgres://user:pass@host:5432/db # Custom DB');
|
|
118
|
-
process.exit(1);
|
|
119
|
-
}
|
|
120
|
-
const options = {
|
|
121
|
-
ticket: ticketArg,
|
|
122
|
-
test: args.includes('--test'),
|
|
123
|
-
commit: args.includes('--commit'),
|
|
124
|
-
ticketsFile: args.find((arg) => arg.startsWith('--tickets='))?.split('=')[1],
|
|
125
|
-
directory: args.find((arg) => arg.startsWith('--directory='))?.split('=')[1] ||
|
|
126
|
-
args.find((arg) => arg.startsWith('--dir='))?.split('=')[1],
|
|
127
|
-
dbUrl: args.find((arg) => arg.startsWith('--db-url='))?.split('=')[1],
|
|
128
|
-
noLogs: args.includes('--no-logs'),
|
|
129
|
-
};
|
|
130
|
-
await shipCommand(options);
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
104
|
case 'build': {
|
|
134
105
|
const options = {
|
|
135
106
|
directory: args.find((arg) => arg.startsWith('--directory='))?.split('=')[1] ||
|
|
@@ -139,6 +110,11 @@ async function main() {
|
|
|
139
110
|
reset: args.includes('--reset'),
|
|
140
111
|
askConfirm: args.includes('--ask-confirm'),
|
|
141
112
|
askCommit: args.includes('--ask-commit'),
|
|
113
|
+
review: !args.includes('--no-review'), // Default true, disabled with --no-review
|
|
114
|
+
test: !args.includes('--no-test'), // Default true, disabled with --no-test
|
|
115
|
+
url: args.find((arg) => arg.startsWith('--url='))?.split('=')[1],
|
|
116
|
+
headless: args.includes('--headless'),
|
|
117
|
+
verbose: args.includes('--verbose'),
|
|
142
118
|
noLogs: args.includes('--no-logs'),
|
|
143
119
|
};
|
|
144
120
|
await buildCommand(options);
|
|
@@ -161,17 +137,14 @@ async function main() {
|
|
|
161
137
|
console.log(' --ticket=ID Test a specific ticket from tickets.json');
|
|
162
138
|
console.log(' --prompt="..." Test with a custom prompt');
|
|
163
139
|
console.log(' --url=URL Base URL (default: http://localhost:3000)');
|
|
164
|
-
console.log(' --
|
|
165
|
-
console.log(' --
|
|
166
|
-
console.log(' --update-baseline Update visual baselines');
|
|
167
|
-
console.log(' --max-retries=N Max fix attempts (default: 3)');
|
|
168
|
-
console.log(' --pr Create PR with fixes');
|
|
140
|
+
console.log(' --headless Run in headless mode (invisible browser)');
|
|
141
|
+
console.log(' --verbose Enable verbose output');
|
|
169
142
|
console.log(' --directory=PATH Directory to test (default: cwd)');
|
|
170
143
|
console.log('\nExamples:');
|
|
171
144
|
console.log(' kosuke test --ticket=FRONTEND-1 # Test ticket');
|
|
172
145
|
console.log(' kosuke test --prompt="Test login flow" # Test with prompt');
|
|
173
|
-
console.log(' kosuke test --ticket=FRONTEND-1 --
|
|
174
|
-
console.log(' kosuke test --prompt="..." --
|
|
146
|
+
console.log(' kosuke test --ticket=FRONTEND-1 --verbose # Verbose output');
|
|
147
|
+
console.log(' kosuke test --prompt="..." --headless # Headless mode');
|
|
175
148
|
process.exit(1);
|
|
176
149
|
}
|
|
177
150
|
if (ticketArg && promptArg) {
|
|
@@ -182,15 +155,11 @@ async function main() {
|
|
|
182
155
|
ticket: ticketArg,
|
|
183
156
|
prompt: promptArg,
|
|
184
157
|
url: args.find((arg) => arg.startsWith('--url='))?.split('=')[1],
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
updateBaseline: args.includes('--update-baseline'),
|
|
188
|
-
maxRetries: parseInt(args.find((arg) => arg.startsWith('--max-retries='))?.split('=')[1] || '3'),
|
|
158
|
+
headless: args.includes('--headless'),
|
|
159
|
+
verbose: args.includes('--verbose'),
|
|
189
160
|
ticketsFile: args.find((arg) => arg.startsWith('--tickets='))?.split('=')[1],
|
|
190
161
|
directory: args.find((arg) => arg.startsWith('--directory='))?.split('=')[1] ||
|
|
191
162
|
args.find((arg) => arg.startsWith('--dir='))?.split('=')[1],
|
|
192
|
-
pr: args.includes('--pr'),
|
|
193
|
-
baseBranch: args.find((arg) => arg.startsWith('--base-branch='))?.split('=')[1],
|
|
194
163
|
noLogs: args.includes('--no-logs'),
|
|
195
164
|
};
|
|
196
165
|
await testCommand(options);
|
|
@@ -302,34 +271,12 @@ COMMANDS:
|
|
|
302
271
|
kosuke tickets --directory=./projects/my-app # Analyze specific directory
|
|
303
272
|
kosuke tickets --dir=./my-app --path=docs/spec.md # Custom directory and requirements path
|
|
304
273
|
|
|
305
|
-
ship --ticket=<ID> [options]
|
|
306
|
-
Implement a single ticket from tickets.json
|
|
307
|
-
Follows CLAUDE.md rules, runs linting, and optionally runs tests
|
|
308
|
-
Note: Ship implements tickets but does NOT commit. Use 'build' for commits.
|
|
309
|
-
|
|
310
|
-
Options:
|
|
311
|
-
--ticket=<ID> Ticket ID to implement (required, e.g., SCHEMA-1)
|
|
312
|
-
--test Run E2E tests after implementation
|
|
313
|
-
--review Perform code review with ticket context
|
|
314
|
-
--tickets=<file> Path to tickets file (default: tickets.json, relative to directory)
|
|
315
|
-
--directory=<path> Directory to run ship in (default: current directory)
|
|
316
|
-
--dir=<path> Alias for --directory
|
|
317
|
-
--db-url=<url> Database URL for migrations (default: postgres://postgres:postgres@postgres:5432/postgres)
|
|
318
|
-
|
|
319
|
-
Examples:
|
|
320
|
-
kosuke ship --ticket=SCHEMA-1 # Implement locally only
|
|
321
|
-
kosuke ship --ticket=FRONTEND-1 --test # Implement with testing
|
|
322
|
-
kosuke ship --ticket=BACKEND-2 --review # Implement with code review
|
|
323
|
-
kosuke ship --ticket=SCHEMA-1 --tickets=custom.json
|
|
324
|
-
kosuke ship --ticket=SCHEMA-1 --directory=./my-project # Specific directory
|
|
325
|
-
kosuke ship --ticket=SCHEMA-1 --db-url=postgres://user:pass@host:5432/db # Custom DB
|
|
326
|
-
|
|
327
274
|
build [options]
|
|
328
275
|
Batch process all "Todo" and "Error" tickets from tickets.json
|
|
329
276
|
Implements and commits each ticket individually to current branch
|
|
330
277
|
Processes tickets in order: Schema โ Backend โ Frontend
|
|
331
|
-
Frontend tickets automatically include E2E testing
|
|
332
|
-
All tickets
|
|
278
|
+
Frontend tickets automatically include E2E testing (unless --no-test)
|
|
279
|
+
All tickets include code review by default (unless --no-review)
|
|
333
280
|
|
|
334
281
|
Options:
|
|
335
282
|
--directory=<path> Directory to run build in (default: current directory)
|
|
@@ -339,6 +286,11 @@ COMMANDS:
|
|
|
339
286
|
--reset Reset all tickets to "Todo" status before processing (start from scratch)
|
|
340
287
|
--ask-confirm Ask for confirmation before proceeding to next ticket (useful for review)
|
|
341
288
|
--ask-commit Ask before committing each ticket (default: auto-commit after each ticket)
|
|
289
|
+
--no-review Skip code review phase (enabled by default)
|
|
290
|
+
--no-test Skip testing phase for frontend tickets (enabled by default)
|
|
291
|
+
--url=<URL> Base URL for testing (default: http://localhost:3000)
|
|
292
|
+
--headless Run tests in headless mode (invisible browser)
|
|
293
|
+
--verbose Enable verbose output for tests
|
|
342
294
|
|
|
343
295
|
Examples:
|
|
344
296
|
git checkout -b feat/implement-tickets # Create feature branch first
|
|
@@ -349,6 +301,9 @@ COMMANDS:
|
|
|
349
301
|
kosuke build --ask-confirm # Ask before processing each ticket
|
|
350
302
|
kosuke build --ask-commit --ask-confirm # Fully interactive mode
|
|
351
303
|
kosuke build --reset # Reset all tickets and start from scratch
|
|
304
|
+
kosuke build --no-review --no-test # Skip review and testing (fastest)
|
|
305
|
+
kosuke build --headless # Run tests in headless mode
|
|
306
|
+
kosuke build --verbose # Enable verbose test output
|
|
352
307
|
kosuke build --tickets=custom.json # Use custom tickets file
|
|
353
308
|
kosuke build --directory=./my-project # Run build in specific directory
|
|
354
309
|
kosuke build --db-url=postgres://user:pass@host:5432/db # Custom DB
|
|
@@ -364,32 +319,26 @@ COMMANDS:
|
|
|
364
319
|
kosuke review # Review uncommitted changes
|
|
365
320
|
|
|
366
321
|
test [--ticket=<ID> | --prompt="..."] [options]
|
|
367
|
-
Run
|
|
368
|
-
Uses
|
|
369
|
-
|
|
322
|
+
Run atomic browser tests with AI-powered automation (no fixing, no retries)
|
|
323
|
+
Uses Stagehand with Claude AI for intelligent browser interaction
|
|
324
|
+
For iterative test+fix workflow, use: kosuke ship --test
|
|
370
325
|
|
|
371
326
|
Options:
|
|
372
327
|
--ticket=<ID> Ticket ID to test (from tickets.json, e.g., FRONTEND-1)
|
|
373
328
|
--prompt="..." Custom test prompt (alternative to --ticket)
|
|
374
329
|
--url=<URL> Base URL (default: http://localhost:3000)
|
|
375
|
-
--
|
|
376
|
-
--
|
|
377
|
-
--update-baseline Update visual regression baselines
|
|
378
|
-
--max-retries=<N> Maximum fix-retest iterations (default: 3)
|
|
330
|
+
--headless Run in headless mode (invisible browser)
|
|
331
|
+
--verbose Enable verbose output
|
|
379
332
|
--tickets=<file> Path to tickets file (default: tickets.json, relative to directory)
|
|
380
333
|
--directory=<path> Directory to run tests in (default: current directory)
|
|
381
334
|
--dir=<path> Alias for --directory
|
|
382
|
-
--pr Create pull request with fixes
|
|
383
|
-
--base-branch=<name> Base branch for PR (default: current branch)
|
|
384
335
|
|
|
385
336
|
Examples:
|
|
386
|
-
kosuke test --ticket=FRONTEND-1 # Test
|
|
337
|
+
kosuke test --ticket=FRONTEND-1 # Test ticket (atomic)
|
|
387
338
|
kosuke test --prompt="Test user login flow" # Test with custom prompt
|
|
388
339
|
kosuke test --ticket=FRONTEND-1 --url=http://localhost:4000
|
|
389
|
-
kosuke test --prompt="..." --
|
|
390
|
-
kosuke test --ticket=FRONTEND-1 --
|
|
391
|
-
kosuke test --ticket=FRONTEND-1 --max-retries=5 # More attempts
|
|
392
|
-
kosuke test --prompt="..." --pr # Create PR with fixes
|
|
340
|
+
kosuke test --prompt="..." --verbose # Enable verbose output
|
|
341
|
+
kosuke test --ticket=FRONTEND-1 --headless # Run in headless mode
|
|
393
342
|
kosuke test --ticket=FRONTEND-1 --directory=./my-project # Specific directory
|
|
394
343
|
|
|
395
344
|
GLOBAL OPTIONS:
|
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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"}
|
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
* Build command - Batch process all tickets from tickets.json
|
|
3
3
|
*
|
|
4
4
|
* This command processes all "Todo" and "Error" tickets sequentially,
|
|
5
|
-
* implementing each one using the ship
|
|
6
|
-
* Frontend tickets automatically
|
|
7
|
-
* All tickets
|
|
5
|
+
* implementing each one using the ship core engine and committing individually.
|
|
6
|
+
* Frontend tickets automatically run tests (unless --no-test is specified).
|
|
7
|
+
* All tickets include code review by default (unless --no-review is specified).
|
|
8
8
|
*
|
|
9
9
|
* Usage:
|
|
10
10
|
* kosuke build # Process and auto-commit all tickets
|
|
11
11
|
* kosuke build --ask-commit # Ask before committing each ticket
|
|
12
12
|
* kosuke build --ask-confirm # Ask before processing each ticket
|
|
13
13
|
* kosuke build --reset # Reset all tickets to "Todo" and process from scratch
|
|
14
|
+
* kosuke build --no-review # Skip code review phase
|
|
15
|
+
* kosuke build --no-test # Skip testing phase for frontend tickets
|
|
16
|
+
* kosuke build --headless # Run tests in headless mode (invisible)
|
|
17
|
+
* kosuke build --verbose # Enable verbose test output
|
|
14
18
|
* kosuke build --tickets=path/to/tickets.json
|
|
15
19
|
* kosuke build --db-url=postgres://user:pass@host:5432/db
|
|
16
20
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/build.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAU,MAAM,aAAa,CAAC;AAwExD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2MvE"}
|
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
* Build command - Batch process all tickets from tickets.json
|
|
3
3
|
*
|
|
4
4
|
* This command processes all "Todo" and "Error" tickets sequentially,
|
|
5
|
-
* implementing each one using the ship
|
|
6
|
-
* Frontend tickets automatically
|
|
7
|
-
* All tickets
|
|
5
|
+
* implementing each one using the ship core engine and committing individually.
|
|
6
|
+
* Frontend tickets automatically run tests (unless --no-test is specified).
|
|
7
|
+
* All tickets include code review by default (unless --no-review is specified).
|
|
8
8
|
*
|
|
9
9
|
* Usage:
|
|
10
10
|
* kosuke build # Process and auto-commit all tickets
|
|
11
11
|
* kosuke build --ask-commit # Ask before committing each ticket
|
|
12
12
|
* kosuke build --ask-confirm # Ask before processing each ticket
|
|
13
13
|
* kosuke build --reset # Reset all tickets to "Todo" and process from scratch
|
|
14
|
+
* kosuke build --no-review # Skip code review phase
|
|
15
|
+
* kosuke build --no-test # Skip testing phase for frontend tickets
|
|
16
|
+
* kosuke build --headless # Run tests in headless mode (invisible)
|
|
17
|
+
* kosuke build --verbose # Enable verbose test output
|
|
14
18
|
* kosuke build --tickets=path/to/tickets.json
|
|
15
19
|
* kosuke build --db-url=postgres://user:pass@host:5432/db
|
|
16
20
|
*
|
|
@@ -23,8 +27,9 @@ import { existsSync, statSync } from 'fs';
|
|
|
23
27
|
import { join, resolve } from 'path';
|
|
24
28
|
import * as readline from 'readline';
|
|
25
29
|
import simpleGit from 'simple-git';
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
30
|
+
import { runTestsWithRetry } from '../utils/test-runner.js';
|
|
31
|
+
import { loadTicketsFile, saveTicketsFile, updateTicketStatus, } from '../utils/tickets-manager.js';
|
|
32
|
+
import { shipCore } from './ship.js';
|
|
28
33
|
/**
|
|
29
34
|
* Prompt user for confirmation to continue
|
|
30
35
|
*/
|
|
@@ -93,7 +98,7 @@ export async function buildCommand(options) {
|
|
|
93
98
|
if (!process.env.GITHUB_TOKEN) {
|
|
94
99
|
throw new Error('GITHUB_TOKEN environment variable is required for build command');
|
|
95
100
|
}
|
|
96
|
-
const { directory, ticketsFile = 'tickets.json', dbUrl = 'postgres://postgres:postgres@localhost:5432/postgres', reset = false, askConfirm = false, askCommit = false, noLogs = false, } = options;
|
|
101
|
+
const { directory, ticketsFile = 'tickets.json', dbUrl = 'postgres://postgres:postgres@localhost:5432/postgres', reset = false, askConfirm = false, askCommit = false, review = true, test = true, url, headless, verbose, noLogs = false, } = options;
|
|
97
102
|
// 1. Validate and resolve directory
|
|
98
103
|
const cwd = directory ? resolve(directory) : process.cwd();
|
|
99
104
|
if (!existsSync(cwd)) {
|
|
@@ -144,20 +149,50 @@ export async function buildCommand(options) {
|
|
|
144
149
|
console.log(`๐ ${ticket.title}`);
|
|
145
150
|
console.log('='.repeat(80) + '\n');
|
|
146
151
|
try {
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
review
|
|
152
|
+
// Step 1: Update status to InProgress
|
|
153
|
+
console.log('๐ Updating ticket status to InProgress...');
|
|
154
|
+
updateTicketStatus(ticketsPath, ticket.id, 'InProgress');
|
|
155
|
+
console.log(' โ
Status updated\n');
|
|
156
|
+
// Step 2: Ship implements the ticket (no ticket lifecycle management)
|
|
157
|
+
const shipResult = await shipCore({
|
|
158
|
+
ticketData: ticket, // Pass ticket object directly
|
|
159
|
+
review, // Controlled by build options
|
|
155
160
|
directory: cwd,
|
|
156
161
|
dbUrl,
|
|
157
162
|
noLogs,
|
|
158
163
|
});
|
|
164
|
+
if (!shipResult.success) {
|
|
165
|
+
throw new Error(shipResult.error || 'Ship failed');
|
|
166
|
+
}
|
|
159
167
|
console.log(`\nโ
${ticket.id} implemented successfully`);
|
|
160
|
-
|
|
168
|
+
console.log(`๐ Implementation fixes: ${shipResult.implementationFixCount}`);
|
|
169
|
+
console.log(`๐ง Linting fixes: ${shipResult.lintFixCount}`);
|
|
170
|
+
if (shipResult.reviewFixCount > 0) {
|
|
171
|
+
console.log(`๐ Review fixes: ${shipResult.reviewFixCount}`);
|
|
172
|
+
}
|
|
173
|
+
console.log(`๐ฐ Ship cost: $${shipResult.cost.toFixed(4)}`);
|
|
174
|
+
// Step 3: Run tests if frontend ticket and test enabled
|
|
175
|
+
const isFrontendTicket = ticket.id.startsWith('FRONTEND-');
|
|
176
|
+
if (test && isFrontendTicket) {
|
|
177
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
178
|
+
console.log(`๐งช Phase: Testing (Iterative)`);
|
|
179
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
180
|
+
const testResult = await runTestsWithRetry({
|
|
181
|
+
ticket,
|
|
182
|
+
cwd,
|
|
183
|
+
url,
|
|
184
|
+
headless,
|
|
185
|
+
verbose,
|
|
186
|
+
maxRetries: 3,
|
|
187
|
+
});
|
|
188
|
+
console.log(`\nโจ Testing completed (${testResult.fixesApplied} fixes applied over ${testResult.attempts} iterations)`);
|
|
189
|
+
console.log(`๐ฐ Testing cost: $${testResult.cost.toFixed(4)}`);
|
|
190
|
+
}
|
|
191
|
+
// Step 4: Update ticket status to Done
|
|
192
|
+
console.log('\n๐ Updating ticket status to Done...');
|
|
193
|
+
updateTicketStatus(ticketsPath, ticket.id, 'Done');
|
|
194
|
+
console.log(` โ
Ticket ${ticket.id} marked as Done\n`);
|
|
195
|
+
// Step 5: Commit (if not asking)
|
|
161
196
|
if (askCommit) {
|
|
162
197
|
// Interactive: ask before committing
|
|
163
198
|
const shouldCommit = await promptConfirmation(`\nโ Commit changes for ${ticket.id}?`);
|
|
@@ -165,7 +200,7 @@ export async function buildCommand(options) {
|
|
|
165
200
|
await commitTicket(ticket, cwd);
|
|
166
201
|
}
|
|
167
202
|
else {
|
|
168
|
-
console.log(' โญ๏ธ Skipped commit
|
|
203
|
+
console.log(' โญ๏ธ Skipped commit\n');
|
|
169
204
|
}
|
|
170
205
|
}
|
|
171
206
|
else {
|
|
@@ -186,6 +221,8 @@ export async function buildCommand(options) {
|
|
|
186
221
|
catch (error) {
|
|
187
222
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
188
223
|
console.error(`\nโ Failed to process ${ticket.id}: ${errorMessage}`);
|
|
224
|
+
// Update ticket status to Error
|
|
225
|
+
updateTicketStatus(ticketsPath, ticket.id, 'Error', errorMessage);
|
|
189
226
|
console.error('\nโ Build stopped due to ticket failure');
|
|
190
227
|
console.error('โน๏ธ Fix the issue and run build again to resume from failed tickets\n');
|
|
191
228
|
throw error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../kosuke/commands/build.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../kosuke/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ship
|
|
2
|
+
* Ship Core - Ticket-agnostic implementation engine
|
|
3
3
|
*
|
|
4
|
-
* This
|
|
5
|
-
*
|
|
4
|
+
* This module provides the core implementation logic for tickets.
|
|
5
|
+
* It is designed to be called programmatically with ticket data,
|
|
6
|
+
* making it independent of tickets.json or any ticket management system.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Implements tickets following CLAUDE.md rules
|
|
10
|
+
* - Runs comprehensive linting
|
|
11
|
+
* - Optionally performs code review with ticket context
|
|
12
|
+
* - Does NOT manage ticket lifecycle (status updates, commits, etc.)
|
|
8
13
|
*
|
|
9
|
-
* Usage:
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
14
|
+
* Usage (Programmatic):
|
|
15
|
+
* import { shipCore } from './commands/ship.js';
|
|
16
|
+
*
|
|
17
|
+
* const result = await shipCore({
|
|
18
|
+
* ticketData: { id: 'SCHEMA-1', title: '...', description: '...' },
|
|
19
|
+
* review: true,
|
|
20
|
+
* directory: './my-project',
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* Note: The CLI command 'kosuke ship' is deprecated.
|
|
24
|
+
* Use 'kosuke build' instead for complete ticket workflow.
|
|
15
25
|
*/
|
|
16
26
|
import type { ShipOptions, ShipResult } from '../types.js';
|
|
17
27
|
/**
|
|
18
|
-
* Core ship logic (
|
|
28
|
+
* Core ship logic (ticket-agnostic, reusable)
|
|
29
|
+
* Implements a ticket without managing its lifecycle (status updates, etc.)
|
|
19
30
|
*/
|
|
20
31
|
export declare function shipCore(options: ShipOptions): Promise<ShipResult>;
|
|
21
|
-
/**
|
|
22
|
-
* Main ship command
|
|
23
|
-
*/
|
|
24
|
-
export declare function shipCommand(options: ShipOptions): Promise<void>;
|
|
25
32
|
//# sourceMappingURL=ship.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAyEnE;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAiJxE"}
|