@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.
Files changed (39) hide show
  1. package/dist/index.d.ts +0 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +33 -84
  4. package/dist/index.js.map +1 -1
  5. package/dist/kosuke/commands/build.d.ts +7 -3
  6. package/dist/kosuke/commands/build.d.ts.map +1 -1
  7. package/dist/kosuke/commands/build.js +53 -16
  8. package/dist/kosuke/commands/build.js.map +1 -1
  9. package/dist/kosuke/commands/ship.d.ts +22 -15
  10. package/dist/kosuke/commands/ship.d.ts.map +1 -1
  11. package/dist/kosuke/commands/ship.js +49 -151
  12. package/dist/kosuke/commands/ship.js.map +1 -1
  13. package/dist/kosuke/commands/test.d.ts +2 -1
  14. package/dist/kosuke/commands/test.d.ts.map +1 -1
  15. package/dist/kosuke/commands/test.js +75 -23
  16. package/dist/kosuke/commands/test.js.map +1 -1
  17. package/dist/kosuke/commands/tickets.d.ts.map +1 -1
  18. package/dist/kosuke/commands/tickets.js +278 -109
  19. package/dist/kosuke/commands/tickets.js.map +1 -1
  20. package/dist/kosuke/types.d.ts +30 -9
  21. package/dist/kosuke/types.d.ts.map +1 -1
  22. package/dist/kosuke/utils/prompt-generator.d.ts +0 -4
  23. package/dist/kosuke/utils/prompt-generator.d.ts.map +1 -1
  24. package/dist/kosuke/utils/prompt-generator.js +0 -14
  25. package/dist/kosuke/utils/prompt-generator.js.map +1 -1
  26. package/dist/kosuke/utils/test-runner.d.ts +15 -0
  27. package/dist/kosuke/utils/test-runner.d.ts.map +1 -0
  28. package/dist/kosuke/utils/test-runner.js +94 -0
  29. package/dist/kosuke/utils/test-runner.js.map +1 -0
  30. package/dist/lib.d.ts +29 -2
  31. package/dist/lib.d.ts.map +1 -1
  32. package/dist/lib.js +28 -1
  33. package/dist/lib.js.map +1 -1
  34. package/dist/package.json +2 -2
  35. package/package.json +2 -2
  36. package/dist/kosuke/utils/browser-agent.d.ts +0 -33
  37. package/dist/kosuke/utils/browser-agent.d.ts.map +0 -1
  38. package/dist/kosuke/utils/browser-agent.js +0 -102
  39. package/dist/kosuke/utils/browser-agent.js.map +0 -1
@@ -77,8 +77,10 @@ export interface Ticket {
77
77
  id: string;
78
78
  title: string;
79
79
  description: string;
80
+ type: 'scaffold' | 'logic';
80
81
  estimatedEffort: number;
81
82
  status: 'Todo' | 'InProgress' | 'Done' | 'Error';
83
+ category?: string;
82
84
  error?: string;
83
85
  }
84
86
  export interface TicketsResult {
@@ -106,13 +108,8 @@ export interface TicketsResult {
106
108
  }>;
107
109
  }
108
110
  export interface ShipOptions {
109
- ticket: string;
111
+ ticketData: Ticket;
110
112
  review?: boolean;
111
- ticketsFile?: string;
112
- test?: boolean;
113
- url?: string;
114
- headed?: boolean;
115
- debug?: boolean;
116
113
  directory?: string;
117
114
  dbUrl?: string;
118
115
  noLogs?: boolean;
@@ -124,6 +121,11 @@ export interface BuildOptions {
124
121
  reset?: boolean;
125
122
  askConfirm?: boolean;
126
123
  askCommit?: boolean;
124
+ review?: boolean;
125
+ test?: boolean;
126
+ url?: string;
127
+ headless?: boolean;
128
+ verbose?: boolean;
127
129
  noLogs?: boolean;
128
130
  }
129
131
  export interface ReviewContext {
@@ -137,7 +139,6 @@ export interface ReviewOptions {
137
139
  noLogs?: boolean;
138
140
  }
139
141
  export interface ShipResult {
140
- ticketId: string;
141
142
  success: boolean;
142
143
  implementationFixCount: number;
143
144
  lintFixCount: number;
@@ -167,8 +168,8 @@ export interface TestOptions {
167
168
  ticket?: string;
168
169
  prompt?: string;
169
170
  url?: string;
170
- headed?: boolean;
171
- debug?: boolean;
171
+ headless?: boolean;
172
+ verbose?: boolean;
172
173
  ticketsFile?: string;
173
174
  directory?: string;
174
175
  noLogs?: boolean;
@@ -190,6 +191,26 @@ export interface TestResult {
190
191
  cost: number;
191
192
  error?: string;
192
193
  }
194
+ export interface TestRunnerOptions {
195
+ ticket: Ticket;
196
+ cwd: string;
197
+ url?: string;
198
+ headless?: boolean;
199
+ verbose?: boolean;
200
+ maxRetries?: number;
201
+ }
202
+ export interface TestRunnerResult {
203
+ success: boolean;
204
+ attempts: number;
205
+ fixesApplied: number;
206
+ tokensUsed: {
207
+ input: number;
208
+ output: number;
209
+ cacheCreation: number;
210
+ cacheRead: number;
211
+ };
212
+ cost: number;
213
+ }
193
214
  export type { CommandName, ExecutionStatus, CliLogData, CommandExecutionContext, } from './utils/logger.js';
194
215
  export type { AnalysisResult, TestFailure } from './utils/error-analyzer.js';
195
216
  export type { ConsoleLog, NetworkLog, DockerLog, CollectedLogs } from './utils/log-collector.js';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../kosuke/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../kosuke/types.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,4 @@ import type { Ticket } from '../types.js';
6
6
  * Generate a structured test prompt from a ticket
7
7
  */
8
8
  export declare function generateTestPrompt(ticket: Ticket): string;
9
- /**
10
- * Generate a test prompt from a custom string
11
- */
12
- export declare function generateCustomTestPrompt(customPrompt: string, url: string): string;
13
9
  //# sourceMappingURL=prompt-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-generator.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/prompt-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAsBzD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAUlF"}
1
+ {"version":3,"file":"prompt-generator.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/prompt-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAsBzD"}
@@ -27,18 +27,4 @@ ${ticket.description}
27
27
 
28
28
  Return a clear success or failure status with details about what was tested and any issues found.`;
29
29
  }
30
- /**
31
- * Generate a test prompt from a custom string
32
- */
33
- export function generateCustomTestPrompt(customPrompt, url) {
34
- return `${customPrompt}
35
-
36
- **Testing Instructions:**
37
- 1. Navigate to ${url}
38
- 2. Execute the test scenario described above
39
- 3. Check for console errors or warnings
40
- 4. Verify expected behavior
41
-
42
- Return success if the test passes, or failure with details about what went wrong.`;
43
- }
44
30
  //# sourceMappingURL=prompt-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-generator.js","sourceRoot":"","sources":["../../../kosuke/utils/prompt-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO;;eAEM,MAAM,CAAC,KAAK;;;EAGzB,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;kGAe8E,CAAC;AACnG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAAoB,EAAE,GAAW;IACxE,OAAO,GAAG,YAAY;;;iBAGP,GAAG;;;;;kFAK8D,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"prompt-generator.js","sourceRoot":"","sources":["../../../kosuke/utils/prompt-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO;;eAEM,MAAM,CAAC,KAAK;;;EAGzB,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;kGAe8E,CAAC;AACnG,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Test runner utility for build command
3
+ *
4
+ * Handles iterative testing with retry logic and error analysis.
5
+ * Separated from ship command to allow build command to control testing phase.
6
+ */
7
+ import type { TestRunnerOptions, TestRunnerResult } from '../types.js';
8
+ /**
9
+ * Run tests with automatic retry and error fixing
10
+ *
11
+ * @param options - Test runner configuration
12
+ * @returns Result with success status, attempts, fixes applied, and costs
13
+ */
14
+ export declare function runTestsWithRetry(options: TestRunnerOptions): Promise<TestRunnerResult>;
15
+ //# sourceMappingURL=test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/test-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKvE;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgG7F"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Test runner utility for build command
3
+ *
4
+ * Handles iterative testing with retry logic and error analysis.
5
+ * Separated from ship command to allow build command to control testing phase.
6
+ */
7
+ import { testCore } from '../commands/test.js';
8
+ import { LogCollector } from './log-collector.js';
9
+ import { analyzeAndFix } from './error-analyzer.js';
10
+ /**
11
+ * Run tests with automatic retry and error fixing
12
+ *
13
+ * @param options - Test runner configuration
14
+ * @returns Result with success status, attempts, fixes applied, and costs
15
+ */
16
+ export async function runTestsWithRetry(options) {
17
+ const { ticket, cwd, url, headless, verbose, maxRetries = 3 } = options;
18
+ let totalInputTokens = 0;
19
+ let totalOutputTokens = 0;
20
+ let totalCacheCreationTokens = 0;
21
+ let totalCacheReadTokens = 0;
22
+ let totalCost = 0;
23
+ let totalFixesApplied = 0;
24
+ let testsPassing = false;
25
+ let attempts = 0;
26
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
27
+ attempts = attempt;
28
+ console.log(`\n🧪 Test Attempt ${attempt}/${maxRetries}\n`);
29
+ try {
30
+ // Run atomic test
31
+ const testResult = await testCore({
32
+ ticket: ticket.id,
33
+ url,
34
+ headless,
35
+ verbose,
36
+ directory: cwd,
37
+ });
38
+ totalInputTokens += testResult.tokensUsed.input;
39
+ totalOutputTokens += testResult.tokensUsed.output;
40
+ totalCacheCreationTokens += testResult.tokensUsed.cacheCreation;
41
+ totalCacheReadTokens += testResult.tokensUsed.cacheRead;
42
+ totalCost += testResult.cost;
43
+ if (testResult.success) {
44
+ testsPassing = true;
45
+ console.log('\nāœ… Tests passed!');
46
+ break;
47
+ }
48
+ // If not last attempt, analyze and fix
49
+ if (attempt < maxRetries) {
50
+ console.log('\nšŸ” Analyzing test failures...');
51
+ // Collect Docker logs for backend debugging
52
+ const logCollector = new LogCollector();
53
+ await logCollector.collectDockerLogs('30s');
54
+ const dockerLogs = logCollector.getErrors();
55
+ // Analyze errors and apply fixes
56
+ const fixResult = await analyzeAndFix(ticket, testResult.output, testResult.logs, dockerLogs, cwd);
57
+ totalFixesApplied += fixResult.fixesApplied;
58
+ totalInputTokens += fixResult.tokensUsed.input;
59
+ totalOutputTokens += fixResult.tokensUsed.output;
60
+ totalCacheCreationTokens += fixResult.tokensUsed.cacheCreation;
61
+ totalCacheReadTokens += fixResult.tokensUsed.cacheRead;
62
+ totalCost += fixResult.cost;
63
+ console.log(`\nšŸ”§ Applied ${fixResult.fixesApplied} fixes`);
64
+ console.log(`šŸ’° Fix cost: $${fixResult.cost.toFixed(4)}`);
65
+ }
66
+ }
67
+ catch (error) {
68
+ const errorMessage = error instanceof Error ? error.message : String(error);
69
+ console.error(`\nāŒ Test attempt ${attempt} failed: ${errorMessage}`);
70
+ // If last attempt, throw
71
+ if (attempt === maxRetries) {
72
+ throw new Error(`Tests failed after ${maxRetries} attempts: ${errorMessage}`);
73
+ }
74
+ // Otherwise, continue to next attempt
75
+ console.log(`\nāš ļø Retrying... (${maxRetries - attempt} attempts remaining)`);
76
+ }
77
+ }
78
+ if (!testsPassing) {
79
+ throw new Error(`Tests failed after ${maxRetries} attempts`);
80
+ }
81
+ return {
82
+ success: testsPassing,
83
+ attempts,
84
+ fixesApplied: totalFixesApplied,
85
+ tokensUsed: {
86
+ input: totalInputTokens,
87
+ output: totalOutputTokens,
88
+ cacheCreation: totalCacheCreationTokens,
89
+ cacheRead: totalCacheReadTokens,
90
+ },
91
+ cost: totalCost,
92
+ };
93
+ }
94
+ //# sourceMappingURL=test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../../kosuke/utils/test-runner.ts"],"names":[],"mappings":"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"}
package/dist/lib.d.ts CHANGED
@@ -9,10 +9,13 @@
9
9
  * import {
10
10
  * analyseCommand,
11
11
  * getCodeCore,
12
+ * shipCore,
13
+ * runTestsWithRetry,
12
14
  * discoverFiles,
13
15
  * runLint,
14
16
  * logger,
15
17
  * withCommandTracking,
18
+ * type Ticket,
16
19
  * type ValidationResult,
17
20
  * type CommandExecutionContext
18
21
  * } from '@kosuke-ai/cli';
@@ -26,6 +29,29 @@
26
29
  * query: 'How does authentication work?'
27
30
  * });
28
31
  *
32
+ * // Ship a ticket (ticket-agnostic)
33
+ * const ticket: Ticket = {
34
+ * id: 'FRONTEND-1',
35
+ * title: 'Implement login page',
36
+ * description: 'Create a login page with email/password...',
37
+ * estimatedEffort: 5,
38
+ * status: 'InProgress'
39
+ * };
40
+ * const shipResult = await shipCore({
41
+ * ticketData: ticket,
42
+ * review: true,
43
+ * directory: './my-project'
44
+ * });
45
+ *
46
+ * // Run tests with retry logic
47
+ * if (ticket.id.startsWith('FRONTEND-')) {
48
+ * const testResult = await runTestsWithRetry({
49
+ * ticket,
50
+ * cwd: './my-project',
51
+ * maxRetries: 3
52
+ * });
53
+ * }
54
+ *
29
55
  * // Use validation utilities
30
56
  * const lintResult: ValidationResult = await runLint();
31
57
  *
@@ -46,17 +72,18 @@ export { syncRulesCommand } from './kosuke/commands/sync-rules.js';
46
72
  export { requirementsCommand, requirementsCore } from './kosuke/commands/requirements.js';
47
73
  export { getCodeCore } from './kosuke/commands/getcode.js';
48
74
  export { ticketsCore } from './kosuke/commands/tickets.js';
49
- export { shipCommand, shipCore } from './kosuke/commands/ship.js';
75
+ export { shipCore } from './kosuke/commands/ship.js';
50
76
  export { buildCommand } from './kosuke/commands/build.js';
51
77
  export { reviewCommand, reviewCore } from './kosuke/commands/review.js';
52
78
  export { testCommand, testCore } from './kosuke/commands/test.js';
79
+ export { runTestsWithRetry } from './kosuke/utils/test-runner.js';
53
80
  export { discoverFiles } from './kosuke/utils/file-discovery.js';
54
81
  export { createBatches } from './kosuke/utils/batch-creator.js';
55
82
  export { runLint, runTypecheck, runFormat, runTests, runComprehensiveLinting, detectPackageManager, readPackageJsonScripts, } from './kosuke/utils/validator.js';
56
83
  export { getRepoLocalPath } from './kosuke/utils/repository-manager.js';
57
84
  export { validateRepoAccess } from './kosuke/utils/repository-resolver.js';
58
85
  export { logger, withCommandTracking, setupCancellationHandler } from './kosuke/utils/logger.js';
59
- export type { Batch, Fix, AnalyseOptions, LintOptions, SyncRulesOptions, RulesAdaptation, GitInfo, GetCodeOptions, CodeExplorationResult, TicketsOptions, TicketsResult, Ticket, ShipOptions, ShipResult, BuildOptions, ReviewOptions, ReviewResult, TestOptions, TestResult, AnalysisResult, TestFailure, ConsoleLog, NetworkLog, DockerLog, CollectedLogs, CommandName, ExecutionStatus, CliLogData, CommandExecutionContext, } from './kosuke/types.js';
86
+ export type { Batch, Fix, AnalyseOptions, LintOptions, SyncRulesOptions, RulesAdaptation, GitInfo, GetCodeOptions, CodeExplorationResult, TicketsOptions, TicketsResult, Ticket, ShipOptions, ShipResult, BuildOptions, ReviewOptions, ReviewResult, TestOptions, TestResult, TestRunnerOptions, TestRunnerResult, AnalysisResult, TestFailure, ConsoleLog, NetworkLog, DockerLog, CollectedLogs, CommandName, ExecutionStatus, CliLogData, CommandExecutionContext, } from './kosuke/types.js';
60
87
  export type { ValidationResult } from './kosuke/utils/validator.js';
61
88
  export type { AgentVerbosity, AgentConfig, AgentResult } from './kosuke/utils/claude-agent.js';
62
89
  export type { RequirementsOptions, RequirementsResult } from './kosuke/commands/requirements.js';
package/dist/lib.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,YAAY,EACV,KAAK,EACL,GAAG,EACH,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EAEV,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EAEb,WAAW,EACX,eAAe,EACf,UAAU,EACV,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC/F,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGjG,eAAO,MAAM,OAAO,QAAsB,CAAC"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,YAAY,EACV,KAAK,EACL,GAAG,EACH,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAEhB,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EAEb,WAAW,EACX,eAAe,EACf,UAAU,EACV,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC/F,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGjG,eAAO,MAAM,OAAO,QAAsB,CAAC"}
package/dist/lib.js CHANGED
@@ -9,10 +9,13 @@
9
9
  * import {
10
10
  * analyseCommand,
11
11
  * getCodeCore,
12
+ * shipCore,
13
+ * runTestsWithRetry,
12
14
  * discoverFiles,
13
15
  * runLint,
14
16
  * logger,
15
17
  * withCommandTracking,
18
+ * type Ticket,
16
19
  * type ValidationResult,
17
20
  * type CommandExecutionContext
18
21
  * } from '@kosuke-ai/cli';
@@ -26,6 +29,29 @@
26
29
  * query: 'How does authentication work?'
27
30
  * });
28
31
  *
32
+ * // Ship a ticket (ticket-agnostic)
33
+ * const ticket: Ticket = {
34
+ * id: 'FRONTEND-1',
35
+ * title: 'Implement login page',
36
+ * description: 'Create a login page with email/password...',
37
+ * estimatedEffort: 5,
38
+ * status: 'InProgress'
39
+ * };
40
+ * const shipResult = await shipCore({
41
+ * ticketData: ticket,
42
+ * review: true,
43
+ * directory: './my-project'
44
+ * });
45
+ *
46
+ * // Run tests with retry logic
47
+ * if (ticket.id.startsWith('FRONTEND-')) {
48
+ * const testResult = await runTestsWithRetry({
49
+ * ticket,
50
+ * cwd: './my-project',
51
+ * maxRetries: 3
52
+ * });
53
+ * }
54
+ *
29
55
  * // Use validation utilities
30
56
  * const lintResult: ValidationResult = await runLint();
31
57
  *
@@ -48,10 +74,11 @@ export { syncRulesCommand } from './kosuke/commands/sync-rules.js';
48
74
  export { requirementsCommand, requirementsCore } from './kosuke/commands/requirements.js';
49
75
  export { getCodeCore } from './kosuke/commands/getcode.js';
50
76
  export { ticketsCore } from './kosuke/commands/tickets.js';
51
- export { shipCommand, shipCore } from './kosuke/commands/ship.js';
77
+ export { shipCore } from './kosuke/commands/ship.js';
52
78
  export { buildCommand } from './kosuke/commands/build.js';
53
79
  export { reviewCommand, reviewCore } from './kosuke/commands/review.js';
54
80
  export { testCommand, testCore } from './kosuke/commands/test.js';
81
+ export { runTestsWithRetry } from './kosuke/utils/test-runner.js';
55
82
  // Re-export utilities
56
83
  export { discoverFiles } from './kosuke/utils/file-discovery.js';
57
84
  export { createBatches } from './kosuke/utils/batch-creator.js';
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAyCjG,mCAAmC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AA2CjG,mCAAmC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosuke-ai/cli",
3
- "version": "0.0.36",
3
+ "version": "0.0.38",
4
4
  "description": "Kosuke CLI - Development automation tool for syncing rules and analyzing code quality",
5
5
  "keywords": [
6
6
  "CLI",
@@ -60,7 +60,7 @@
60
60
  "dependencies": {
61
61
  "@anthropic-ai/claude-agent-sdk": "^0.1.0",
62
62
  "@anthropic-ai/sdk": "^0.32.1",
63
- "@browserbasehq/stagehand": "^1.5.0",
63
+ "@browserbasehq/stagehand": "^3.0.5",
64
64
  "@octokit/rest": "^20.0.0",
65
65
  "dotenv": "^16.4.0",
66
66
  "glob": "^10.3.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosuke-ai/cli",
3
- "version": "0.0.36",
3
+ "version": "0.0.38",
4
4
  "description": "Kosuke CLI - Development automation tool for syncing rules and analyzing code quality",
5
5
  "keywords": [
6
6
  "CLI",
@@ -60,7 +60,7 @@
60
60
  "dependencies": {
61
61
  "@anthropic-ai/claude-agent-sdk": "^0.1.0",
62
62
  "@anthropic-ai/sdk": "^0.32.1",
63
- "@browserbasehq/stagehand": "^1.5.0",
63
+ "@browserbasehq/stagehand": "^3.0.5",
64
64
  "@octokit/rest": "^20.0.0",
65
65
  "dotenv": "^16.4.0",
66
66
  "glob": "^10.3.0",
@@ -1,33 +0,0 @@
1
- /**
2
- * Browser Agent - Stagehand-powered browser automation
3
- *
4
- * Uses Stagehand with Anthropic Claude for AI-driven browser testing.
5
- * Provides simple boolean success/failure results with logs.
6
- */
7
- interface BrowserTestOptions {
8
- url: string;
9
- task: string;
10
- headed?: boolean;
11
- debug?: boolean;
12
- }
13
- interface BrowserTestResult {
14
- success: boolean;
15
- output: string;
16
- logs: {
17
- console: string[];
18
- errors: string[];
19
- };
20
- tokensUsed: {
21
- input: number;
22
- output: number;
23
- cacheCreation: number;
24
- cacheRead: number;
25
- };
26
- cost: number;
27
- }
28
- /**
29
- * Run browser test using Stagehand
30
- */
31
- export declare function runBrowserTest(options: BrowserTestOptions): Promise<BrowserTestResult>;
32
- export {};
33
- //# sourceMappingURL=browser-agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-agent.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/browser-agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6G5F"}
@@ -1,102 +0,0 @@
1
- /**
2
- * Browser Agent - Stagehand-powered browser automation
3
- *
4
- * Uses Stagehand with Anthropic Claude for AI-driven browser testing.
5
- * Provides simple boolean success/failure results with logs.
6
- */
7
- import { Stagehand } from '@browserbasehq/stagehand';
8
- /**
9
- * Run browser test using Stagehand
10
- */
11
- export async function runBrowserTest(options) {
12
- const { url, task, headed = false, debug = false } = options;
13
- if (!process.env.ANTHROPIC_API_KEY) {
14
- throw new Error('ANTHROPIC_API_KEY environment variable is required for Stagehand');
15
- }
16
- console.log(`🌐 Navigating to: ${url}`);
17
- console.log(`šŸŽÆ Task: ${task}\n`);
18
- const stagehand = new Stagehand({
19
- env: 'LOCAL',
20
- apiKey: process.env.ANTHROPIC_API_KEY,
21
- headless: !headed,
22
- debugDom: debug,
23
- modelName: (process.env.STAGEHAND_MODEL ||
24
- 'claude-3-5-sonnet-20240620'),
25
- modelClientOptions: {
26
- apiKey: process.env.ANTHROPIC_API_KEY,
27
- },
28
- });
29
- const consoleLogs = [];
30
- const errors = [];
31
- try {
32
- // Initialize Stagehand
33
- await stagehand.init();
34
- // Set up log collectors
35
- stagehand.page.on('console', (msg) => {
36
- const text = msg.text();
37
- consoleLogs.push(`[${msg.type()}] ${text}`);
38
- // Track errors
39
- if (msg.type() === 'error') {
40
- errors.push(text);
41
- }
42
- });
43
- stagehand.page.on('pageerror', (error) => {
44
- errors.push(error.message);
45
- });
46
- // Navigate to URL
47
- await stagehand.page.goto(url, { waitUntil: 'networkidle' });
48
- // Execute task with Stagehand
49
- console.log('šŸ¤– Executing task with Claude...');
50
- const result = await stagehand.act({ action: task });
51
- // Close browser
52
- await stagehand.close();
53
- // Convert result to string for processing
54
- const resultText = typeof result === 'string' ? result : JSON.stringify(result);
55
- // Determine success based on result
56
- const success = !resultText.toLowerCase().includes('error') &&
57
- !resultText.toLowerCase().includes('failed') &&
58
- errors.length === 0;
59
- const output = success
60
- ? `āœ… Test passed: ${resultText}`
61
- : `āŒ Test failed: ${resultText}${errors.length > 0 ? `\n\nErrors found:\n${errors.join('\n')}` : ''}`;
62
- console.log(`\n${output}\n`);
63
- return {
64
- success,
65
- output,
66
- logs: {
67
- console: consoleLogs,
68
- errors,
69
- },
70
- tokensUsed: {
71
- input: 0, // Stagehand doesn't expose this yet
72
- output: 0,
73
- cacheCreation: 0,
74
- cacheRead: 0,
75
- },
76
- cost: 0, // Will be added later when Stagehand exposes metrics
77
- };
78
- }
79
- catch (error) {
80
- // Ensure browser is closed on error
81
- await stagehand.close();
82
- const errorMessage = error instanceof Error ? error.message : String(error);
83
- errors.push(errorMessage);
84
- console.error(`\nāŒ Browser test failed: ${errorMessage}\n`);
85
- return {
86
- success: false,
87
- output: `āŒ Test failed with error: ${errorMessage}`,
88
- logs: {
89
- console: consoleLogs,
90
- errors,
91
- },
92
- tokensUsed: {
93
- input: 0,
94
- output: 0,
95
- cacheCreation: 0,
96
- cacheRead: 0,
97
- },
98
- cost: 0,
99
- };
100
- }
101
- }
102
- //# sourceMappingURL=browser-agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-agent.js","sourceRoot":"","sources":["../../../kosuke/utils/browser-agent.ts"],"names":[],"mappings":"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"}