@kosuke-ai/cli 0.0.39 → 0.0.40
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 +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -26
- package/dist/index.js.map +1 -1
- package/dist/kosuke/commands/build.d.ts.map +1 -1
- package/dist/kosuke/commands/build.js +30 -13
- package/dist/kosuke/commands/build.js.map +1 -1
- package/dist/kosuke/commands/migrate.d.ts +33 -0
- package/dist/kosuke/commands/migrate.d.ts.map +1 -0
- package/dist/kosuke/commands/migrate.js +196 -0
- package/dist/kosuke/commands/migrate.js.map +1 -0
- package/dist/kosuke/commands/ship.d.ts.map +1 -1
- package/dist/kosuke/commands/ship.js +4 -9
- package/dist/kosuke/commands/ship.js.map +1 -1
- package/dist/kosuke/commands/test.d.ts +6 -9
- package/dist/kosuke/commands/test.d.ts.map +1 -1
- package/dist/kosuke/commands/test.js +65 -169
- package/dist/kosuke/commands/test.js.map +1 -1
- package/dist/kosuke/commands/tickets.d.ts +22 -22
- package/dist/kosuke/commands/tickets.d.ts.map +1 -1
- package/dist/kosuke/commands/tickets.js +289 -674
- package/dist/kosuke/commands/tickets.js.map +1 -1
- package/dist/kosuke/types.d.ts +23 -14
- package/dist/kosuke/types.d.ts.map +1 -1
- package/dist/kosuke/utils/logger.d.ts +1 -1
- package/dist/kosuke/utils/logger.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 -25
- package/dist/kosuke/utils/prompt-generator.js.map +1 -1
- package/dist/kosuke/utils/test-runner.d.ts.map +1 -1
- package/dist/kosuke/utils/test-runner.js +3 -5
- package/dist/kosuke/utils/test-runner.js.map +1 -1
- package/dist/lib.d.ts +2 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +1 -0
- package/dist/lib.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
|
@@ -45,7 +45,7 @@ function validateTicketData(ticketData) {
|
|
|
45
45
|
/**
|
|
46
46
|
* Build system prompt for ticket implementation
|
|
47
47
|
*/
|
|
48
|
-
function buildImplementationPrompt(ticket,
|
|
48
|
+
function buildImplementationPrompt(ticket, _dbUrl) {
|
|
49
49
|
const isSchemaTicket = ticket.id.toUpperCase().startsWith('SCHEMA-');
|
|
50
50
|
const schemaMigrationInstructions = isSchemaTicket
|
|
51
51
|
? `
|
|
@@ -53,14 +53,9 @@ function buildImplementationPrompt(ticket, dbUrl) {
|
|
|
53
53
|
**Database Schema Changes (CRITICAL FOR SCHEMA TICKETS):**
|
|
54
54
|
This is a SCHEMA ticket. After making changes to database schema files:
|
|
55
55
|
1. Run \`bun run db:generate\` to generate Drizzle migrations
|
|
56
|
-
2.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
⚠️ Skipping this step will cause runtime errors when the app expects the new schema
|
|
60
|
-
3. Run \`POSTGRES_URL="${dbUrl}" bun run db:seed\` to seed the database with initial data
|
|
61
|
-
4. Verify migration files were created in lib/db/migrations/
|
|
62
|
-
5. Handle any migration errors before proceeding
|
|
63
|
-
6. Ensure schema changes follow Drizzle ORM best practices from project guidelines
|
|
56
|
+
2. Verify migration files were created in lib/db/migrations/
|
|
57
|
+
3. **DO NOT run db:migrate** - this will be handled automatically after implementation
|
|
58
|
+
4. Ensure schema changes follow Drizzle ORM best practices from project guidelines
|
|
64
59
|
`
|
|
65
60
|
: '';
|
|
66
61
|
return `You are an expert software engineer implementing a feature ticket.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,OAAO,UAAU,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,MAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Test command - Atomic
|
|
2
|
+
* Test command - Atomic web E2E testing (no fixing, no linting)
|
|
3
3
|
*
|
|
4
4
|
* This command:
|
|
5
5
|
* 1. Accepts a test prompt with optional ticket context
|
|
6
|
-
* 2. Runs a single
|
|
6
|
+
* 2. Runs a single web E2E test with Stagehand
|
|
7
7
|
* 3. Returns result (success/failure) with logs
|
|
8
8
|
*
|
|
9
|
-
* Test
|
|
10
|
-
* - web-test: Browser E2E testing with Stagehand
|
|
11
|
-
* - db-test: Database schema validation with Claude Code
|
|
9
|
+
* Test type:
|
|
10
|
+
* - web-test: Browser E2E testing with Stagehand + Claude AI
|
|
12
11
|
*
|
|
13
12
|
* NOTE: This is ATOMIC - no retries, no fixing, no linting
|
|
14
13
|
* For iterative test+fix, use: kosuke build
|
|
15
14
|
*
|
|
16
15
|
* Usage:
|
|
17
|
-
* kosuke test --prompt="Test user login"
|
|
18
|
-
* kosuke test --prompt="Validate users table exists" --type=db-test
|
|
16
|
+
* kosuke test --prompt="Test user login"
|
|
19
17
|
* kosuke test --prompt="..." --url=http://localhost:4000
|
|
20
|
-
* kosuke test --prompt="..." --db-url=postgres://...
|
|
21
18
|
* kosuke test --prompt="..." --verbose # Enable verbose output
|
|
22
|
-
* kosuke test --prompt="..." --headless # Run in headless mode
|
|
19
|
+
* kosuke test --prompt="..." --headless # Run in headless mode
|
|
23
20
|
*
|
|
24
21
|
* Programmatic usage (from build command):
|
|
25
22
|
* const result = await testCore({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3D;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA0HxE;AAuBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrE"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Test command - Atomic
|
|
2
|
+
* Test command - Atomic web E2E testing (no fixing, no linting)
|
|
3
3
|
*
|
|
4
4
|
* This command:
|
|
5
5
|
* 1. Accepts a test prompt with optional ticket context
|
|
6
|
-
* 2. Runs a single
|
|
6
|
+
* 2. Runs a single web E2E test with Stagehand
|
|
7
7
|
* 3. Returns result (success/failure) with logs
|
|
8
8
|
*
|
|
9
|
-
* Test
|
|
10
|
-
* - web-test: Browser E2E testing with Stagehand
|
|
11
|
-
* - db-test: Database schema validation with Claude Code
|
|
9
|
+
* Test type:
|
|
10
|
+
* - web-test: Browser E2E testing with Stagehand + Claude AI
|
|
12
11
|
*
|
|
13
12
|
* NOTE: This is ATOMIC - no retries, no fixing, no linting
|
|
14
13
|
* For iterative test+fix, use: kosuke build
|
|
15
14
|
*
|
|
16
15
|
* Usage:
|
|
17
|
-
* kosuke test --prompt="Test user login"
|
|
18
|
-
* kosuke test --prompt="Validate users table exists" --type=db-test
|
|
16
|
+
* kosuke test --prompt="Test user login"
|
|
19
17
|
* kosuke test --prompt="..." --url=http://localhost:4000
|
|
20
|
-
* kosuke test --prompt="..." --db-url=postgres://...
|
|
21
18
|
* kosuke test --prompt="..." --verbose # Enable verbose output
|
|
22
|
-
* kosuke test --prompt="..." --headless # Run in headless mode
|
|
19
|
+
* kosuke test --prompt="..." --headless # Run in headless mode
|
|
23
20
|
*
|
|
24
21
|
* Programmatic usage (from build command):
|
|
25
22
|
* const result = await testCore({
|
|
@@ -29,92 +26,20 @@
|
|
|
29
26
|
* });
|
|
30
27
|
*/
|
|
31
28
|
import { Stagehand } from '@browserbasehq/stagehand';
|
|
32
|
-
import { formatCostBreakdown, runAgent } from '../utils/claude-agent.js';
|
|
33
29
|
import { logger, setupCancellationHandler } from '../utils/logger.js';
|
|
34
|
-
/**
|
|
35
|
-
* Build system prompt for DB schema validation with Claude Code
|
|
36
|
-
*/
|
|
37
|
-
function buildDBTestPrompt(testPrompt, dbUrl) {
|
|
38
|
-
return `You are a database testing expert validating database schema.
|
|
39
|
-
|
|
40
|
-
**Your Task:**
|
|
41
|
-
${testPrompt}
|
|
42
|
-
|
|
43
|
-
**Database Connection:**
|
|
44
|
-
- Database URL: ${dbUrl}
|
|
45
|
-
- Use the \`postgres\` npm package to connect and query the database
|
|
46
|
-
- Connection is already available via environment (use POSTGRES_URL)
|
|
47
|
-
|
|
48
|
-
**Critical Instructions:**
|
|
49
|
-
1. Connect to the PostgreSQL database using the URL provided
|
|
50
|
-
2. Query the database to check if the expected tables exist
|
|
51
|
-
3. Validate table existence based on the test requirements
|
|
52
|
-
4. Report success if all expected tables are found
|
|
53
|
-
5. Report failure with specific missing tables if validation fails
|
|
54
|
-
6. Use terminal commands to run database queries (e.g., \`POSTGRES_URL="${dbUrl}" psql -c "\\dt"\`)
|
|
55
|
-
7. Alternatively, write and run a Node.js script to validate schema
|
|
56
|
-
|
|
57
|
-
**Success Criteria:**
|
|
58
|
-
- All expected tables from the test prompt exist in the database
|
|
59
|
-
- No errors during database connection
|
|
60
|
-
- Clear validation output showing which tables were checked
|
|
61
|
-
|
|
62
|
-
Begin by connecting to the database and validating the schema requirements.`;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Run database schema validation test with Claude Code
|
|
66
|
-
*/
|
|
67
|
-
async function runDBTest(testPrompt, dbUrl, cwd) {
|
|
68
|
-
console.log('🗄️ Running database validation with Claude Code...\n');
|
|
69
|
-
const systemPrompt = buildDBTestPrompt(testPrompt, dbUrl);
|
|
70
|
-
const result = await runAgent('Validate database schema according to test requirements', {
|
|
71
|
-
systemPrompt,
|
|
72
|
-
cwd,
|
|
73
|
-
maxTurns: 15,
|
|
74
|
-
verbosity: 'normal',
|
|
75
|
-
});
|
|
76
|
-
console.log(`\n✨ Database validation completed`);
|
|
77
|
-
console.log(`💰 Validation cost: ${formatCostBreakdown(result)}`);
|
|
78
|
-
// Parse validation result from agent output
|
|
79
|
-
// Success if agent completed without errors
|
|
80
|
-
const success = result.fixCount === 0 || result.response.toLowerCase().includes('success');
|
|
81
|
-
return {
|
|
82
|
-
success,
|
|
83
|
-
tablesValidated: [], // Agent handles validation internally
|
|
84
|
-
errors: success ? [] : ['Database validation failed - see agent output above'],
|
|
85
|
-
tokensUsed: result.tokensUsed,
|
|
86
|
-
cost: result.cost,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
30
|
/**
|
|
90
31
|
* Core test logic (atomic - single execution, no retries, no fixes)
|
|
91
32
|
*/
|
|
92
33
|
export async function testCore(options) {
|
|
93
|
-
const { prompt: testPrompt,
|
|
94
|
-
const cwd = directory || process.cwd();
|
|
34
|
+
const { prompt: testPrompt, context, url = 'http://localhost:3000', headless = false, verbose = false, } = options;
|
|
95
35
|
// Validate: prompt is required
|
|
96
36
|
if (!testPrompt || testPrompt.trim().length === 0) {
|
|
97
37
|
throw new Error('Test prompt is required\n' +
|
|
98
38
|
'Examples:\n' +
|
|
99
|
-
' kosuke test --prompt="Test user login"
|
|
100
|
-
' kosuke test --prompt="
|
|
101
|
-
}
|
|
102
|
-
// Auto-detect test type from context or use manual type
|
|
103
|
-
let testType;
|
|
104
|
-
if (manualType) {
|
|
105
|
-
testType = manualType;
|
|
106
|
-
}
|
|
107
|
-
else if (context?.ticketId.startsWith('DB-TEST-')) {
|
|
108
|
-
testType = 'db-test';
|
|
39
|
+
' kosuke test --prompt="Test user login"\n' +
|
|
40
|
+
' kosuke test --prompt="Test task creation flow"');
|
|
109
41
|
}
|
|
110
|
-
|
|
111
|
-
testType = 'web-test';
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
// Default to web-test if no clear indication
|
|
115
|
-
testType = 'web-test';
|
|
116
|
-
}
|
|
117
|
-
// Validate ANTHROPIC_API_KEY (required for both test types now)
|
|
42
|
+
// Validate ANTHROPIC_API_KEY (required for Stagehand)
|
|
118
43
|
if (!process.env.ANTHROPIC_API_KEY) {
|
|
119
44
|
throw new Error('ANTHROPIC_API_KEY environment variable is required for testing');
|
|
120
45
|
}
|
|
@@ -126,99 +51,70 @@ export async function testCore(options) {
|
|
|
126
51
|
else {
|
|
127
52
|
console.log(`📋 Test: ${testPrompt.substring(0, 60)}${testPrompt.length > 60 ? '...' : ''}`);
|
|
128
53
|
}
|
|
129
|
-
console.log(`🎯 Test Type: ${testType}\n`);
|
|
130
54
|
try {
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
else {
|
|
156
|
-
// Web E2E test with Stagehand
|
|
157
|
-
console.log(`${'='.repeat(60)}`);
|
|
158
|
-
console.log(`🧪 Running Browser Test`);
|
|
159
|
-
console.log(`${'='.repeat(60)}\n`);
|
|
160
|
-
console.log(`🌐 URL: ${url}`);
|
|
161
|
-
console.log(`🔍 Verbose: ${verbose ? 'enabled' : 'disabled'}`);
|
|
162
|
-
console.log(`👁️ Headless: ${headless ? 'enabled' : 'disabled'}\n`);
|
|
163
|
-
const stagehand = new Stagehand({
|
|
164
|
-
env: 'LOCAL',
|
|
165
|
-
verbose: verbose ? 2 : 1, // verbose flag → level 2, otherwise level 1
|
|
166
|
-
localBrowserLaunchOptions: {
|
|
167
|
-
headless,
|
|
168
|
-
},
|
|
169
|
-
});
|
|
170
|
-
await stagehand.init();
|
|
171
|
-
console.log('✅ Stagehand initialized\n');
|
|
172
|
-
// 3. Navigate to URL
|
|
173
|
-
const page = stagehand.context.pages()[0];
|
|
174
|
-
console.log(`🌐 Navigating to ${url}...`);
|
|
175
|
-
await page.goto(url);
|
|
176
|
-
console.log('✅ Navigation complete\n');
|
|
177
|
-
// 4. Create agent with system prompt
|
|
178
|
-
const agent = stagehand.agent({
|
|
179
|
-
systemPrompt: `You are a helpful testing assistant that can control a web browser.
|
|
55
|
+
// Run web E2E test with Stagehand
|
|
56
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
57
|
+
console.log(`🧪 Running Browser Test`);
|
|
58
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
59
|
+
console.log(`🌐 URL: ${url}`);
|
|
60
|
+
console.log(`🔍 Verbose: ${verbose ? 'enabled' : 'disabled'}`);
|
|
61
|
+
console.log(`👁️ Headless: ${headless ? 'enabled' : 'disabled'}\n`);
|
|
62
|
+
const stagehand = new Stagehand({
|
|
63
|
+
env: 'LOCAL',
|
|
64
|
+
verbose: verbose ? 2 : 1, // verbose flag → level 2, otherwise level 1
|
|
65
|
+
localBrowserLaunchOptions: {
|
|
66
|
+
headless,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
await stagehand.init();
|
|
70
|
+
console.log('✅ Stagehand initialized\n');
|
|
71
|
+
// Navigate to URL
|
|
72
|
+
const page = stagehand.context.pages()[0];
|
|
73
|
+
console.log(`🌐 Navigating to ${url}...`);
|
|
74
|
+
await page.goto(url);
|
|
75
|
+
console.log('✅ Navigation complete\n');
|
|
76
|
+
// Create agent with system prompt
|
|
77
|
+
const agent = stagehand.agent({
|
|
78
|
+
systemPrompt: `You are a helpful testing assistant that can control a web browser.
|
|
180
79
|
Execute the given instructions step by step.
|
|
181
80
|
Be thorough and wait for elements to load when necessary.
|
|
182
81
|
Do not ask follow-up questions, trust your judgement to complete the task.`,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
};
|
|
214
|
-
}
|
|
82
|
+
});
|
|
83
|
+
// Execute test instruction
|
|
84
|
+
console.log('🤖 Agent starting execution...\n');
|
|
85
|
+
const result = await agent.execute({
|
|
86
|
+
instruction: testPrompt,
|
|
87
|
+
});
|
|
88
|
+
// Close browser
|
|
89
|
+
console.log('\n🔒 Closing browser session...');
|
|
90
|
+
await stagehand.close();
|
|
91
|
+
console.log('✅ Browser closed\n');
|
|
92
|
+
// Calculate cost from token usage
|
|
93
|
+
const cost = result.usage ? calculateCost(result.usage) : 0;
|
|
94
|
+
// Return TestResult
|
|
95
|
+
return {
|
|
96
|
+
ticketId: testIdentifier,
|
|
97
|
+
success: result.success,
|
|
98
|
+
output: result.message,
|
|
99
|
+
logs: {
|
|
100
|
+
console: [], // Stagehand doesn't expose browser console logs via agent
|
|
101
|
+
errors: result.success ? [] : [result.message],
|
|
102
|
+
},
|
|
103
|
+
tokensUsed: {
|
|
104
|
+
input: result.usage?.input_tokens || 0,
|
|
105
|
+
output: result.usage?.output_tokens || 0,
|
|
106
|
+
cacheCreation: 0, // Not exposed separately by Stagehand
|
|
107
|
+
cacheRead: result.usage?.cached_input_tokens || 0,
|
|
108
|
+
},
|
|
109
|
+
cost,
|
|
110
|
+
error: result.success ? undefined : result.message,
|
|
111
|
+
};
|
|
215
112
|
}
|
|
216
113
|
catch (error) {
|
|
217
114
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
218
115
|
console.error(`\n❌ Test execution failed: ${errorMessage}`);
|
|
219
116
|
return {
|
|
220
117
|
ticketId: testIdentifier,
|
|
221
|
-
testType,
|
|
222
118
|
success: false,
|
|
223
119
|
output: `Test failed: ${errorMessage}`,
|
|
224
120
|
logs: {
|
|
@@ -304,7 +200,7 @@ function displayTestSummary(result) {
|
|
|
304
200
|
else {
|
|
305
201
|
console.log(`\n❌ Test failed: ${result.error || 'See output above for details'}`);
|
|
306
202
|
console.log('\nℹ️ This is an atomic test command - it does not apply fixes.');
|
|
307
|
-
console.log('ℹ️ To test with automatic fixing, use: kosuke
|
|
203
|
+
console.log('ℹ️ To test with automatic fixing, use: kosuke build');
|
|
308
204
|
}
|
|
309
205
|
}
|
|
310
206
|
//# sourceMappingURL=test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tickets command - Generate tickets from requirements document
|
|
3
3
|
*
|
|
4
|
-
* This command analyzes a requirements document
|
|
5
|
-
* structured tickets with test coverage:
|
|
4
|
+
* This command analyzes a requirements document and generates structured tickets:
|
|
6
5
|
*
|
|
7
|
-
* SCAFFOLD
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
6
|
+
* SCAFFOLD MODE (--scaffold flag):
|
|
7
|
+
* SCAFFOLD BATCH (template adaptation):
|
|
8
|
+
* 1. SCAFFOLD-SCHEMA-1 (database infrastructure changes, auto-validated)
|
|
9
|
+
* 2. SCAFFOLD-BACKEND-X (API infrastructure changes)
|
|
10
|
+
* 3. SCAFFOLD-FRONTEND-X (UI infrastructure changes)
|
|
11
|
+
* 4. SCAFFOLD-WEB-TEST-X (validate scaffold E2E)
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
13
|
+
* LOGIC BATCH (business functionality):
|
|
14
|
+
* 1. LOGIC-SCHEMA-1 (business entities, auto-validated)
|
|
15
|
+
* 2. LOGIC-BACKEND-1 (business API)
|
|
16
|
+
* 3. LOGIC-FRONTEND-1 (business UI)
|
|
17
|
+
* 4. LOGIC-WEB-TEST-1 (validate logic E2E)
|
|
18
|
+
* ... (multiple logic batches per feature)
|
|
20
19
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* LOGIC-ONLY MODE (default):
|
|
21
|
+
* Only generates LOGIC tickets for new features
|
|
23
22
|
*
|
|
24
|
-
*
|
|
23
|
+
* Claude Code Agent explores the codebase to understand the tech stack and
|
|
24
|
+
* generates contextual tickets in a single comprehensive analysis.
|
|
25
25
|
*
|
|
26
26
|
* Usage:
|
|
27
|
-
* kosuke tickets #
|
|
27
|
+
* kosuke tickets # Logic-only mode, use docs.md
|
|
28
|
+
* kosuke tickets --scaffold # Scaffold + logic mode
|
|
28
29
|
* kosuke tickets --path=custom.md # Custom requirements file
|
|
29
|
-
* kosuke tickets --
|
|
30
|
-
* kosuke tickets --directory=./
|
|
31
|
-
* kosuke tickets --dir=./my-app --path=docs/spec.md # Custom directory and requirements path
|
|
30
|
+
* kosuke tickets --prompt="Add dark mode" # Inline requirements
|
|
31
|
+
* kosuke tickets --directory=./my-app # Analyze specific directory
|
|
32
32
|
*/
|
|
33
33
|
import type { TicketsOptions, TicketsResult } from '../types.js';
|
|
34
34
|
/**
|
|
35
|
-
* Core tickets logic
|
|
35
|
+
* Core tickets logic - Simplified to single agent call
|
|
36
36
|
*/
|
|
37
37
|
export declare function ticketsCore(options: TicketsOptions): Promise<TicketsResult>;
|
|
38
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAU,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA8RzE;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA+JjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsG3E"}
|