@kosuke-ai/cli 0.0.38 โ 0.0.39
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 +2 -2
- package/dist/index.js +92 -49
- package/dist/index.js.map +1 -1
- package/dist/kosuke/commands/build.d.ts.map +1 -1
- package/dist/kosuke/commands/build.js +154 -54
- package/dist/kosuke/commands/build.js.map +1 -1
- package/dist/kosuke/commands/test.d.ts +21 -9
- package/dist/kosuke/commands/test.d.ts.map +1 -1
- package/dist/kosuke/commands/test.js +193 -109
- package/dist/kosuke/commands/test.js.map +1 -1
- package/dist/kosuke/commands/tickets.d.ts +15 -4
- package/dist/kosuke/commands/tickets.d.ts.map +1 -1
- package/dist/kosuke/commands/tickets.js +451 -80
- package/dist/kosuke/commands/tickets.js.map +1 -1
- package/dist/kosuke/types.d.ts +25 -4
- package/dist/kosuke/types.d.ts.map +1 -1
- package/dist/kosuke/utils/prompt-generator.d.ts +6 -2
- package/dist/kosuke/utils/prompt-generator.d.ts.map +1 -1
- package/dist/kosuke/utils/prompt-generator.js +27 -2
- 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 +10 -1
- package/dist/kosuke/utils/test-runner.js.map +1 -1
- package/dist/kosuke/utils/tickets-manager.d.ts +0 -4
- package/dist/kosuke/utils/tickets-manager.d.ts.map +1 -1
- package/dist/kosuke/utils/tickets-manager.js +1 -1
- package/dist/kosuke/utils/tickets-manager.js.map +1 -1
- package/dist/lib.d.ts +1 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Test command - Atomic
|
|
2
|
+
* Test command - Atomic testing (web or database, no fixing, no linting)
|
|
3
3
|
*
|
|
4
4
|
* This command:
|
|
5
|
-
* 1.
|
|
6
|
-
* 2. Runs a single test
|
|
5
|
+
* 1. Accepts a test prompt with optional ticket context
|
|
6
|
+
* 2. Runs a single test (web E2E or database validation)
|
|
7
7
|
* 3. Returns result (success/failure) with logs
|
|
8
8
|
*
|
|
9
|
+
* Test types:
|
|
10
|
+
* - web-test: Browser E2E testing with Stagehand
|
|
11
|
+
* - db-test: Database schema validation with Claude Code
|
|
12
|
+
*
|
|
9
13
|
* NOTE: This is ATOMIC - no retries, no fixing, no linting
|
|
10
|
-
* For iterative test+fix, use: kosuke
|
|
14
|
+
* For iterative test+fix, use: kosuke build
|
|
11
15
|
*
|
|
12
16
|
* Usage:
|
|
13
|
-
* kosuke test --
|
|
14
|
-
* kosuke test --prompt="
|
|
15
|
-
* kosuke test --
|
|
16
|
-
* kosuke test --prompt="..." --
|
|
17
|
-
* kosuke test --prompt="..." --
|
|
17
|
+
* kosuke test --prompt="Test user login" --type=web-test
|
|
18
|
+
* kosuke test --prompt="Validate users table exists" --type=db-test
|
|
19
|
+
* kosuke test --prompt="..." --url=http://localhost:4000
|
|
20
|
+
* kosuke test --prompt="..." --db-url=postgres://...
|
|
21
|
+
* kosuke test --prompt="..." --verbose # Enable verbose output
|
|
22
|
+
* kosuke test --prompt="..." --headless # Run in headless mode (web-test only)
|
|
23
|
+
*
|
|
24
|
+
* Programmatic usage (from build command):
|
|
25
|
+
* const result = await testCore({
|
|
26
|
+
* prompt: "Test login functionality",
|
|
27
|
+
* type: "web-test",
|
|
28
|
+
* context: { ticketId, ticketTitle, ticketDescription },
|
|
29
|
+
* });
|
|
18
30
|
*/
|
|
19
31
|
import type { TestOptions, TestResult } from '../types.js';
|
|
20
32
|
/**
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,KAAK,EAAgB,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsEzE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA2KxE;AAuBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrE"}
|
|
@@ -1,140 +1,224 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Test command - Atomic
|
|
2
|
+
* Test command - Atomic testing (web or database, no fixing, no linting)
|
|
3
3
|
*
|
|
4
4
|
* This command:
|
|
5
|
-
* 1.
|
|
6
|
-
* 2. Runs a single test
|
|
5
|
+
* 1. Accepts a test prompt with optional ticket context
|
|
6
|
+
* 2. Runs a single test (web E2E or database validation)
|
|
7
7
|
* 3. Returns result (success/failure) with logs
|
|
8
8
|
*
|
|
9
|
+
* Test types:
|
|
10
|
+
* - web-test: Browser E2E testing with Stagehand
|
|
11
|
+
* - db-test: Database schema validation with Claude Code
|
|
12
|
+
*
|
|
9
13
|
* NOTE: This is ATOMIC - no retries, no fixing, no linting
|
|
10
|
-
* For iterative test+fix, use: kosuke
|
|
14
|
+
* For iterative test+fix, use: kosuke build
|
|
11
15
|
*
|
|
12
16
|
* Usage:
|
|
13
|
-
* kosuke test --
|
|
14
|
-
* kosuke test --prompt="
|
|
15
|
-
* kosuke test --
|
|
16
|
-
* kosuke test --prompt="..." --
|
|
17
|
-
* kosuke test --prompt="..." --
|
|
17
|
+
* kosuke test --prompt="Test user login" --type=web-test
|
|
18
|
+
* kosuke test --prompt="Validate users table exists" --type=db-test
|
|
19
|
+
* kosuke test --prompt="..." --url=http://localhost:4000
|
|
20
|
+
* kosuke test --prompt="..." --db-url=postgres://...
|
|
21
|
+
* kosuke test --prompt="..." --verbose # Enable verbose output
|
|
22
|
+
* kosuke test --prompt="..." --headless # Run in headless mode (web-test only)
|
|
23
|
+
*
|
|
24
|
+
* Programmatic usage (from build command):
|
|
25
|
+
* const result = await testCore({
|
|
26
|
+
* prompt: "Test login functionality",
|
|
27
|
+
* type: "web-test",
|
|
28
|
+
* context: { ticketId, ticketTitle, ticketDescription },
|
|
29
|
+
* });
|
|
18
30
|
*/
|
|
19
31
|
import { Stagehand } from '@browserbasehq/stagehand';
|
|
20
|
-
import {
|
|
32
|
+
import { formatCostBreakdown, runAgent } from '../utils/claude-agent.js';
|
|
21
33
|
import { logger, setupCancellationHandler } from '../utils/logger.js';
|
|
22
|
-
|
|
23
|
-
|
|
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
|
+
}
|
|
24
89
|
/**
|
|
25
90
|
* Core test logic (atomic - single execution, no retries, no fixes)
|
|
26
91
|
*/
|
|
27
92
|
export async function testCore(options) {
|
|
28
|
-
const {
|
|
93
|
+
const { prompt: testPrompt, type: manualType, context, url = 'http://localhost:3000', dbUrl = 'postgres://postgres:postgres@localhost:5432/postgres', headless = false, verbose = false, directory, } = options;
|
|
29
94
|
const cwd = directory || process.cwd();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
throw new Error('Either --ticket or --prompt must be provided\n' +
|
|
95
|
+
// Validate: prompt is required
|
|
96
|
+
if (!testPrompt || testPrompt.trim().length === 0) {
|
|
97
|
+
throw new Error('Test prompt is required\n' +
|
|
34
98
|
'Examples:\n' +
|
|
35
|
-
' kosuke test --
|
|
36
|
-
' kosuke test --prompt="
|
|
99
|
+
' kosuke test --prompt="Test user login" --type=web-test\n' +
|
|
100
|
+
' kosuke test --prompt="Validate users table exists" --type=db-test');
|
|
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';
|
|
37
109
|
}
|
|
38
|
-
if (ticketId
|
|
39
|
-
|
|
110
|
+
else if (context?.ticketId.startsWith('WEB-TEST-')) {
|
|
111
|
+
testType = 'web-test';
|
|
40
112
|
}
|
|
41
|
-
|
|
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
118
|
if (!process.env.ANTHROPIC_API_KEY) {
|
|
43
|
-
throw new Error('ANTHROPIC_API_KEY environment variable is required');
|
|
119
|
+
throw new Error('ANTHROPIC_API_KEY environment variable is required for testing');
|
|
120
|
+
}
|
|
121
|
+
const testIdentifier = context?.ticketId || `test-${Date.now()}`;
|
|
122
|
+
// Log context if provided
|
|
123
|
+
if (context) {
|
|
124
|
+
console.log(`๐ซ Testing: ${context.ticketId} - ${context.ticketTitle}`);
|
|
44
125
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
126
|
+
else {
|
|
127
|
+
console.log(`๐ Test: ${testPrompt.substring(0, 60)}${testPrompt.length > 60 ? '...' : ''}`);
|
|
128
|
+
}
|
|
129
|
+
console.log(`๐ฏ Test Type: ${testType}\n`);
|
|
48
130
|
try {
|
|
49
|
-
//
|
|
50
|
-
if (
|
|
51
|
-
//
|
|
52
|
-
console.log('
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
131
|
+
// 2. Run appropriate test based on type
|
|
132
|
+
if (testType === 'db-test') {
|
|
133
|
+
// Database validation test with Claude Code
|
|
134
|
+
console.log(`${'='.repeat(60)}`);
|
|
135
|
+
console.log(`๐งช Running Database Validation Test`);
|
|
136
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
137
|
+
console.log(`๐๏ธ Database URL: ${dbUrl.replace(/:[^:@]+@/, ':****@')}\n`); // Hide password
|
|
138
|
+
const dbResult = await runDBTest(testPrompt, dbUrl, cwd);
|
|
139
|
+
return {
|
|
140
|
+
ticketId: testIdentifier,
|
|
141
|
+
testType: 'db-test',
|
|
142
|
+
success: dbResult.success,
|
|
143
|
+
output: dbResult.success
|
|
144
|
+
? `โ
Database validation passed`
|
|
145
|
+
: `โ Database validation failed\nErrors:\n${dbResult.errors.join('\n')}`,
|
|
146
|
+
logs: {
|
|
147
|
+
console: [],
|
|
148
|
+
errors: dbResult.errors,
|
|
149
|
+
},
|
|
150
|
+
tokensUsed: dbResult.tokensUsed,
|
|
151
|
+
cost: dbResult.cost,
|
|
152
|
+
error: dbResult.success ? undefined : dbResult.errors.join('\n'),
|
|
153
|
+
};
|
|
67
154
|
}
|
|
68
155
|
else {
|
|
69
|
-
//
|
|
70
|
-
console.log('
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
console.log(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
console.log(`๐ Navigating to ${url}...`);
|
|
94
|
-
await page.goto(url);
|
|
95
|
-
console.log('โ
Navigation complete\n');
|
|
96
|
-
// 4. Create agent with system prompt
|
|
97
|
-
const agent = stagehand.agent({
|
|
98
|
-
systemPrompt: `You are a helpful testing assistant that can control a web browser.
|
|
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.
|
|
99
180
|
Execute the given instructions step by step.
|
|
100
181
|
Be thorough and wait for elements to load when necessary.
|
|
101
182
|
Do not ask follow-up questions, trust your judgement to complete the task.`,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
183
|
+
});
|
|
184
|
+
// 5. Execute test instruction
|
|
185
|
+
console.log('๐ค Agent starting execution...\n');
|
|
186
|
+
const result = await agent.execute({
|
|
187
|
+
instruction: testPrompt,
|
|
188
|
+
});
|
|
189
|
+
// 6. Close browser
|
|
190
|
+
console.log('\n๐ Closing browser session...');
|
|
191
|
+
await stagehand.close();
|
|
192
|
+
console.log('โ
Browser closed\n');
|
|
193
|
+
// 7. Calculate cost from token usage
|
|
194
|
+
const cost = result.usage ? calculateCost(result.usage) : 0;
|
|
195
|
+
// 8. Return TestResult
|
|
196
|
+
return {
|
|
197
|
+
ticketId: testIdentifier,
|
|
198
|
+
testType: 'web-test',
|
|
199
|
+
success: result.success,
|
|
200
|
+
output: result.message,
|
|
201
|
+
logs: {
|
|
202
|
+
console: [], // Stagehand doesn't expose browser console logs via agent
|
|
203
|
+
errors: result.success ? [] : [result.message],
|
|
204
|
+
},
|
|
205
|
+
tokensUsed: {
|
|
206
|
+
input: result.usage?.input_tokens || 0,
|
|
207
|
+
output: result.usage?.output_tokens || 0,
|
|
208
|
+
cacheCreation: 0, // Not exposed separately by Stagehand
|
|
209
|
+
cacheRead: result.usage?.cached_input_tokens || 0,
|
|
210
|
+
},
|
|
211
|
+
cost,
|
|
212
|
+
error: result.success ? undefined : result.message,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
132
215
|
}
|
|
133
216
|
catch (error) {
|
|
134
217
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
135
218
|
console.error(`\nโ Test execution failed: ${errorMessage}`);
|
|
136
219
|
return {
|
|
137
|
-
ticketId: testIdentifier
|
|
220
|
+
ticketId: testIdentifier,
|
|
221
|
+
testType,
|
|
138
222
|
success: false,
|
|
139
223
|
output: `Test failed: ${errorMessage}`,
|
|
140
224
|
logs: {
|
|
@@ -169,10 +253,10 @@ function calculateCost(usage) {
|
|
|
169
253
|
* Main test command
|
|
170
254
|
*/
|
|
171
255
|
export async function testCommand(options) {
|
|
172
|
-
const {
|
|
173
|
-
const testDescription =
|
|
174
|
-
?
|
|
175
|
-
: `
|
|
256
|
+
const { prompt, context, noLogs = false } = options;
|
|
257
|
+
const testDescription = context
|
|
258
|
+
? `${context.ticketId} - ${context.ticketTitle}`
|
|
259
|
+
: `"${prompt.substring(0, 60)}${prompt.length > 60 ? '...' : ''}"`;
|
|
176
260
|
console.log(`๐งช Testing ${testDescription}\n`);
|
|
177
261
|
// Initialize logging context
|
|
178
262
|
const logContext = logger.createContext('test', { noLogs });
|
|
@@ -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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"}
|
|
@@ -2,10 +2,21 @@
|
|
|
2
2
|
* Tickets command - Generate tickets from requirements document
|
|
3
3
|
*
|
|
4
4
|
* This command analyzes a requirements document (default: docs.md) and generates
|
|
5
|
-
* structured tickets
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* structured tickets with test coverage:
|
|
6
|
+
*
|
|
7
|
+
* SCAFFOLD BATCH:
|
|
8
|
+
* 1. Schema scaffold (database infrastructure)
|
|
9
|
+
* 2. DB test (validate scaffold schema)
|
|
10
|
+
* 3. Backend scaffold (API infrastructure)
|
|
11
|
+
* 4. Frontend scaffold (UI infrastructure)
|
|
12
|
+
* 5. Web tests (validate scaffold E2E)
|
|
13
|
+
*
|
|
14
|
+
* LOGIC BATCHES (1..N):
|
|
15
|
+
* 1. Schema logic (business entities)
|
|
16
|
+
* 2. DB test (validate logic schema)
|
|
17
|
+
* 3. Backend logic (business API)
|
|
18
|
+
* 4. Frontend logic (business UI)
|
|
19
|
+
* 5. Web tests (validate logic E2E)
|
|
9
20
|
*
|
|
10
21
|
* Claude Code Agent explores the specified directory (default: current directory)
|
|
11
22
|
* to understand the existing codebase and generate contextual tickets.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAyB,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqsBxF;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA0YjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F3E"}
|