@kosuke-ai/cli 0.0.56 → 1.0.0

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 (251) hide show
  1. package/README.md +31 -448
  2. package/dist/commands/auth.js +117 -0
  3. package/dist/generated/commands/deploy/cancel.js +17 -0
  4. package/dist/generated/commands/deploy/messages.js +17 -0
  5. package/dist/generated/commands/deploy/run.js +60 -0
  6. package/dist/generated/commands/index.js +132 -0
  7. package/dist/generated/commands/preview/get.js +25 -0
  8. package/dist/generated/commands/preview/health.js +25 -0
  9. package/dist/generated/commands/preview/reset.js +27 -0
  10. package/dist/generated/commands/preview/share-create.js +36 -0
  11. package/dist/generated/commands/preview/share-delete.js +26 -0
  12. package/dist/generated/commands/preview/share-get.js +26 -0
  13. package/dist/generated/commands/preview/shared.js +17 -0
  14. package/dist/generated/commands/projects/create.js +37 -0
  15. package/dist/generated/commands/projects/delete.js +17 -0
  16. package/dist/generated/commands/projects/env-vars-add.js +21 -0
  17. package/dist/generated/commands/projects/env-vars-remove.js +21 -0
  18. package/dist/generated/commands/projects/get.js +17 -0
  19. package/dist/generated/commands/projects/list.js +15 -0
  20. package/dist/generated/commands/projects/services-add.js +87 -0
  21. package/dist/generated/commands/projects/services-list.js +18 -0
  22. package/dist/generated/commands/projects/services-remove.js +19 -0
  23. package/dist/generated/commands/projects/services-update.js +81 -0
  24. package/dist/generated/commands/projects/settings-get.js +18 -0
  25. package/dist/generated/commands/projects/settings-import.js +91 -0
  26. package/dist/generated/commands/projects/settings-update.js +77 -0
  27. package/dist/generated/commands/projects/skills.js +35 -0
  28. package/dist/generated/commands/projects/update.js +27 -0
  29. package/dist/generated/commands/sessions/activate.js +18 -0
  30. package/dist/generated/commands/sessions/checklist-generate.js +19 -0
  31. package/dist/generated/commands/sessions/checklist-get.js +19 -0
  32. package/dist/generated/commands/sessions/comments-add.js +63 -0
  33. package/dist/generated/commands/sessions/comments-delete.js +20 -0
  34. package/dist/generated/commands/sessions/comments-list.js +19 -0
  35. package/dist/generated/commands/sessions/comments-update.js +23 -0
  36. package/dist/generated/commands/sessions/create.js +126 -0
  37. package/dist/generated/commands/sessions/delete.js +18 -0
  38. package/dist/generated/commands/sessions/diff-files.js +19 -0
  39. package/dist/generated/commands/sessions/diff-patch.js +86 -0
  40. package/dist/generated/commands/sessions/edit-prompt.js +59 -0
  41. package/dist/generated/commands/sessions/files-get.js +27 -0
  42. package/dist/generated/commands/sessions/files-list.js +19 -0
  43. package/dist/generated/commands/sessions/files-write.js +41 -0
  44. package/dist/generated/commands/sessions/get.js +18 -0
  45. package/dist/generated/commands/sessions/git-commit-message.js +19 -0
  46. package/dist/generated/commands/sessions/git-commit.js +29 -0
  47. package/dist/generated/commands/sessions/git-push.js +19 -0
  48. package/dist/generated/commands/sessions/git-state.js +19 -0
  49. package/dist/generated/commands/sessions/jobs-cancel.js +20 -0
  50. package/dist/generated/commands/sessions/jobs-get.js +20 -0
  51. package/dist/generated/commands/sessions/list.js +81 -0
  52. package/dist/generated/commands/sessions/messages.js +18 -0
  53. package/dist/generated/commands/sessions/search.js +23 -0
  54. package/dist/generated/commands/sessions/send.js +98 -0
  55. package/dist/generated/commands/sessions/update.js +72 -0
  56. package/dist/generated/commands/workspaces/access-status.js +29 -0
  57. package/dist/generated/commands/workspaces/ai-provider-get.js +18 -0
  58. package/dist/generated/commands/workspaces/ai-provider-remove.js +42 -0
  59. package/dist/generated/commands/workspaces/ai-provider-set.js +21 -0
  60. package/dist/generated/commands/workspaces/credits.js +17 -0
  61. package/dist/generated/commands/workspaces/get.js +17 -0
  62. package/dist/generated/commands/workspaces/getting-started-get.js +18 -0
  63. package/dist/generated/commands/workspaces/getting-started-update.js +32 -0
  64. package/dist/generated/commands/workspaces/list.js +15 -0
  65. package/dist/generated/commands/workspaces/members.js +25 -0
  66. package/dist/generated/commands/workspaces/sandbox-limit.js +17 -0
  67. package/dist/generated/commands/workspaces/stop-sandboxes.js +27 -0
  68. package/dist/generated/commands/workspaces/usage.js +32 -0
  69. package/dist/index.js +5 -516
  70. package/dist/program.js +46 -0
  71. package/dist/runtime/attach.js +139 -0
  72. package/dist/runtime/attachments.js +58 -0
  73. package/dist/runtime/client.js +12 -0
  74. package/dist/runtime/config.js +49 -0
  75. package/dist/runtime/credentials.js +24 -0
  76. package/dist/runtime/descriptor.js +7 -0
  77. package/dist/runtime/invoke.js +152 -0
  78. package/dist/runtime/runtime.js +41 -0
  79. package/dist/runtime/version.js +5 -0
  80. package/openapi.json +5222 -0
  81. package/package.json +21 -79
  82. package/LICENSE +0 -21
  83. package/claude.costs.json +0 -34
  84. package/dist/__tests__/utils/file-discovery.test.d.ts +0 -5
  85. package/dist/__tests__/utils/file-discovery.test.d.ts.map +0 -1
  86. package/dist/__tests__/utils/file-discovery.test.js +0 -51
  87. package/dist/__tests__/utils/file-discovery.test.js.map +0 -1
  88. package/dist/__tests__/utils/logger-nologs.test.d.ts +0 -5
  89. package/dist/__tests__/utils/logger-nologs.test.d.ts.map +0 -1
  90. package/dist/__tests__/utils/logger-nologs.test.js +0 -34
  91. package/dist/__tests__/utils/logger-nologs.test.js.map +0 -1
  92. package/dist/__tests__/utils/logger.test.d.ts +0 -5
  93. package/dist/__tests__/utils/logger.test.d.ts.map +0 -1
  94. package/dist/__tests__/utils/logger.test.js +0 -243
  95. package/dist/__tests__/utils/logger.test.js.map +0 -1
  96. package/dist/__tests__/utils/validator.test.d.ts +0 -5
  97. package/dist/__tests__/utils/validator.test.d.ts.map +0 -1
  98. package/dist/__tests__/utils/validator.test.js +0 -206
  99. package/dist/__tests__/utils/validator.test.js.map +0 -1
  100. package/dist/index.d.ts +0 -35
  101. package/dist/index.d.ts.map +0 -1
  102. package/dist/index.js.map +0 -1
  103. package/dist/kosuke/commands/analyse.d.ts +0 -15
  104. package/dist/kosuke/commands/analyse.d.ts.map +0 -1
  105. package/dist/kosuke/commands/analyse.js +0 -273
  106. package/dist/kosuke/commands/analyse.js.map +0 -1
  107. package/dist/kosuke/commands/build.d.ts +0 -35
  108. package/dist/kosuke/commands/build.d.ts.map +0 -1
  109. package/dist/kosuke/commands/build.js +0 -659
  110. package/dist/kosuke/commands/build.js.map +0 -1
  111. package/dist/kosuke/commands/getcode.d.ts +0 -29
  112. package/dist/kosuke/commands/getcode.d.ts.map +0 -1
  113. package/dist/kosuke/commands/getcode.js +0 -221
  114. package/dist/kosuke/commands/getcode.js.map +0 -1
  115. package/dist/kosuke/commands/lint.d.ts +0 -21
  116. package/dist/kosuke/commands/lint.d.ts.map +0 -1
  117. package/dist/kosuke/commands/lint.js +0 -321
  118. package/dist/kosuke/commands/lint.js.map +0 -1
  119. package/dist/kosuke/commands/migrate.d.ts +0 -38
  120. package/dist/kosuke/commands/migrate.d.ts.map +0 -1
  121. package/dist/kosuke/commands/migrate.js +0 -284
  122. package/dist/kosuke/commands/migrate.js.map +0 -1
  123. package/dist/kosuke/commands/plan.d.ts +0 -28
  124. package/dist/kosuke/commands/plan.d.ts.map +0 -1
  125. package/dist/kosuke/commands/plan.js +0 -630
  126. package/dist/kosuke/commands/plan.js.map +0 -1
  127. package/dist/kosuke/commands/requirements.d.ts +0 -52
  128. package/dist/kosuke/commands/requirements.d.ts.map +0 -1
  129. package/dist/kosuke/commands/requirements.js +0 -615
  130. package/dist/kosuke/commands/requirements.js.map +0 -1
  131. package/dist/kosuke/commands/review.d.ts +0 -26
  132. package/dist/kosuke/commands/review.d.ts.map +0 -1
  133. package/dist/kosuke/commands/review.js +0 -303
  134. package/dist/kosuke/commands/review.js.map +0 -1
  135. package/dist/kosuke/commands/serve.d.ts +0 -9
  136. package/dist/kosuke/commands/serve.d.ts.map +0 -1
  137. package/dist/kosuke/commands/serve.js +0 -17
  138. package/dist/kosuke/commands/serve.js.map +0 -1
  139. package/dist/kosuke/commands/ship.d.ts +0 -37
  140. package/dist/kosuke/commands/ship.d.ts.map +0 -1
  141. package/dist/kosuke/commands/ship.js +0 -375
  142. package/dist/kosuke/commands/ship.js.map +0 -1
  143. package/dist/kosuke/commands/sync-rules.d.ts +0 -9
  144. package/dist/kosuke/commands/sync-rules.d.ts.map +0 -1
  145. package/dist/kosuke/commands/sync-rules.js +0 -379
  146. package/dist/kosuke/commands/sync-rules.js.map +0 -1
  147. package/dist/kosuke/commands/test.d.ts +0 -42
  148. package/dist/kosuke/commands/test.d.ts.map +0 -1
  149. package/dist/kosuke/commands/test.js +0 -540
  150. package/dist/kosuke/commands/test.js.map +0 -1
  151. package/dist/kosuke/commands/tickets.d.ts +0 -43
  152. package/dist/kosuke/commands/tickets.d.ts.map +0 -1
  153. package/dist/kosuke/commands/tickets.js +0 -499
  154. package/dist/kosuke/commands/tickets.js.map +0 -1
  155. package/dist/kosuke/serve/middleware/error-handler.d.ts +0 -14
  156. package/dist/kosuke/serve/middleware/error-handler.d.ts.map +0 -1
  157. package/dist/kosuke/serve/middleware/error-handler.js +0 -42
  158. package/dist/kosuke/serve/middleware/error-handler.js.map +0 -1
  159. package/dist/kosuke/serve/middleware/validation.d.ts +0 -13
  160. package/dist/kosuke/serve/middleware/validation.d.ts.map +0 -1
  161. package/dist/kosuke/serve/middleware/validation.js +0 -38
  162. package/dist/kosuke/serve/middleware/validation.js.map +0 -1
  163. package/dist/kosuke/serve/routes/build.d.ts +0 -6
  164. package/dist/kosuke/serve/routes/build.d.ts.map +0 -1
  165. package/dist/kosuke/serve/routes/build.js +0 -226
  166. package/dist/kosuke/serve/routes/build.js.map +0 -1
  167. package/dist/kosuke/serve/routes/health.d.ts +0 -6
  168. package/dist/kosuke/serve/routes/health.d.ts.map +0 -1
  169. package/dist/kosuke/serve/routes/health.js +0 -11
  170. package/dist/kosuke/serve/routes/health.js.map +0 -1
  171. package/dist/kosuke/serve/routes/plan.d.ts +0 -6
  172. package/dist/kosuke/serve/routes/plan.d.ts.map +0 -1
  173. package/dist/kosuke/serve/routes/plan.js +0 -106
  174. package/dist/kosuke/serve/routes/plan.js.map +0 -1
  175. package/dist/kosuke/serve/server.d.ts +0 -16
  176. package/dist/kosuke/serve/server.d.ts.map +0 -1
  177. package/dist/kosuke/serve/server.js +0 -67
  178. package/dist/kosuke/serve/server.js.map +0 -1
  179. package/dist/kosuke/serve/validation/build.d.ts +0 -41
  180. package/dist/kosuke/serve/validation/build.d.ts.map +0 -1
  181. package/dist/kosuke/serve/validation/build.js +0 -20
  182. package/dist/kosuke/serve/validation/build.js.map +0 -1
  183. package/dist/kosuke/serve/validation/plan.d.ts +0 -26
  184. package/dist/kosuke/serve/validation/plan.d.ts.map +0 -1
  185. package/dist/kosuke/serve/validation/plan.js +0 -15
  186. package/dist/kosuke/serve/validation/plan.js.map +0 -1
  187. package/dist/kosuke/types.d.ts +0 -469
  188. package/dist/kosuke/types.d.ts.map +0 -1
  189. package/dist/kosuke/types.js +0 -5
  190. package/dist/kosuke/types.js.map +0 -1
  191. package/dist/kosuke/utils/batch-creator.d.ts +0 -14
  192. package/dist/kosuke/utils/batch-creator.d.ts.map +0 -1
  193. package/dist/kosuke/utils/batch-creator.js +0 -76
  194. package/dist/kosuke/utils/batch-creator.js.map +0 -1
  195. package/dist/kosuke/utils/claude-agent.d.ts +0 -145
  196. package/dist/kosuke/utils/claude-agent.d.ts.map +0 -1
  197. package/dist/kosuke/utils/claude-agent.js +0 -504
  198. package/dist/kosuke/utils/claude-agent.js.map +0 -1
  199. package/dist/kosuke/utils/constants.d.ts +0 -40
  200. package/dist/kosuke/utils/constants.d.ts.map +0 -1
  201. package/dist/kosuke/utils/constants.js +0 -54
  202. package/dist/kosuke/utils/constants.js.map +0 -1
  203. package/dist/kosuke/utils/file-discovery.d.ts +0 -15
  204. package/dist/kosuke/utils/file-discovery.d.ts.map +0 -1
  205. package/dist/kosuke/utils/file-discovery.js +0 -80
  206. package/dist/kosuke/utils/file-discovery.js.map +0 -1
  207. package/dist/kosuke/utils/git.d.ts +0 -41
  208. package/dist/kosuke/utils/git.d.ts.map +0 -1
  209. package/dist/kosuke/utils/git.js +0 -145
  210. package/dist/kosuke/utils/git.js.map +0 -1
  211. package/dist/kosuke/utils/github.d.ts +0 -17
  212. package/dist/kosuke/utils/github.d.ts.map +0 -1
  213. package/dist/kosuke/utils/github.js +0 -22
  214. package/dist/kosuke/utils/github.js.map +0 -1
  215. package/dist/kosuke/utils/interactive-input.d.ts +0 -22
  216. package/dist/kosuke/utils/interactive-input.d.ts.map +0 -1
  217. package/dist/kosuke/utils/interactive-input.js +0 -124
  218. package/dist/kosuke/utils/interactive-input.js.map +0 -1
  219. package/dist/kosuke/utils/logger.d.ts +0 -161
  220. package/dist/kosuke/utils/logger.d.ts.map +0 -1
  221. package/dist/kosuke/utils/logger.js +0 -234
  222. package/dist/kosuke/utils/logger.js.map +0 -1
  223. package/dist/kosuke/utils/playwright-mcp-client.d.ts +0 -46
  224. package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +0 -1
  225. package/dist/kosuke/utils/playwright-mcp-client.js +0 -135
  226. package/dist/kosuke/utils/playwright-mcp-client.js.map +0 -1
  227. package/dist/kosuke/utils/pr-orchestrator.d.ts +0 -49
  228. package/dist/kosuke/utils/pr-orchestrator.d.ts.map +0 -1
  229. package/dist/kosuke/utils/pr-orchestrator.js +0 -154
  230. package/dist/kosuke/utils/pr-orchestrator.js.map +0 -1
  231. package/dist/kosuke/utils/repository-manager.d.ts +0 -13
  232. package/dist/kosuke/utils/repository-manager.d.ts.map +0 -1
  233. package/dist/kosuke/utils/repository-manager.js +0 -94
  234. package/dist/kosuke/utils/repository-manager.js.map +0 -1
  235. package/dist/kosuke/utils/repository-resolver.d.ts +0 -12
  236. package/dist/kosuke/utils/repository-resolver.d.ts.map +0 -1
  237. package/dist/kosuke/utils/repository-resolver.js +0 -186
  238. package/dist/kosuke/utils/repository-resolver.js.map +0 -1
  239. package/dist/kosuke/utils/tickets-manager.d.ts +0 -64
  240. package/dist/kosuke/utils/tickets-manager.d.ts.map +0 -1
  241. package/dist/kosuke/utils/tickets-manager.js +0 -331
  242. package/dist/kosuke/utils/tickets-manager.js.map +0 -1
  243. package/dist/kosuke/utils/validator.d.ts +0 -45
  244. package/dist/kosuke/utils/validator.d.ts.map +0 -1
  245. package/dist/kosuke/utils/validator.js +0 -248
  246. package/dist/kosuke/utils/validator.js.map +0 -1
  247. package/dist/lib.d.ts +0 -96
  248. package/dist/lib.d.ts.map +0 -1
  249. package/dist/lib.js +0 -95
  250. package/dist/lib.js.map +0 -1
  251. package/dist/package.json +0 -99
@@ -1,540 +0,0 @@
1
- /**
2
- * Test command - Atomic web E2E testing with Playwright MCP
3
- *
4
- * This command:
5
- * 1. Accepts a test prompt with optional ticket context
6
- * 2. Runs a single web E2E test using Playwright MCP + Claude AI
7
- * 3. Returns result (success/failure) with logs and trace files
8
- *
9
- * Test type:
10
- * - web-test: Browser E2E testing with Playwright MCP + Claude AI
11
- *
12
- * NOTE: This is ATOMIC - no retries, no fixing, no linting
13
- * For iterative test+fix, use: kosuke build
14
- *
15
- * Usage:
16
- * kosuke test --prompt="Test user login"
17
- * kosuke test --prompt="..." --url=http://localhost:4000
18
- * kosuke test --prompt="..." --verbose # Enable verbose output
19
- * kosuke test --prompt="..." --headless # Run in headless mode
20
- * kosuke test --prompt="..." --trace # Enable trace recording
21
- *
22
- * Programmatic usage (from build command):
23
- * const result = await testCore({
24
- * prompt: "Test login functionality",
25
- * context: { ticketId, ticketTitle, ticketDescription },
26
- * });
27
- */
28
- import Anthropic from '@anthropic-ai/sdk';
29
- import { logger, setupCancellationHandler } from '../utils/logger.js';
30
- import { PlaywrightMCPClient } from '../utils/playwright-mcp-client.js';
31
- import { DEFAULT_TEST_URL, DEFAULT_ANTHROPIC_MODEL } from '../utils/constants.js';
32
- /**
33
- * Calculate cost from text generation token usage
34
- * Pricing (per million tokens):
35
- * - Input: $3.00
36
- * - Output: $15.00
37
- * - Cache creation: $3.75
38
- * - Cache read: $0.30
39
- */
40
- function calculateTextGenerationCost(usage) {
41
- const inputCost = (usage.input_tokens / 1000000) * 3.0;
42
- const outputCost = (usage.output_tokens / 1000000) * 15.0;
43
- const cacheCreationCost = (usage.cache_creation_tokens / 1000000) * 3.75;
44
- const cacheReadCost = (usage.cache_read_tokens / 1000000) * 0.3;
45
- return inputCost + outputCost + cacheCreationCost + cacheReadCost;
46
- }
47
- /**
48
- * Execute test using Playwright MCP mode (streaming version)
49
- */
50
- async function* executeWithPlaywrightMCPStream(params) {
51
- const { testPrompt, context, testIdentifier, url, headless, verbose, trace } = params;
52
- // Yield test started event
53
- yield {
54
- type: 'test_started',
55
- data: { testIdentifier, url, headless },
56
- };
57
- // Validate ANTHROPIC_API_KEY
58
- if (!process.env.ANTHROPIC_API_KEY) {
59
- throw new Error('ANTHROPIC_API_KEY environment variable is required');
60
- }
61
- // Initialize MCP client
62
- const mcpClient = new PlaywrightMCPClient();
63
- try {
64
- // Connect to MCP server
65
- await mcpClient.connect({ verbose, trace });
66
- // Get MCP tools
67
- const mcpTools = mcpClient.getTools();
68
- // Yield MCP connected event
69
- yield {
70
- type: 'mcp_connected',
71
- data: { toolsAvailable: mcpTools.length },
72
- };
73
- // Start tracing if enabled
74
- if (trace) {
75
- console.log('šŸ“¹ Starting trace recording...');
76
- try {
77
- await mcpClient.executeTool('browser_start_tracing', {});
78
- console.log('āœ… Trace recording started\n');
79
- }
80
- catch (error) {
81
- console.warn(`āš ļø Failed to start tracing: ${error instanceof Error ? error.message : String(error)}`);
82
- console.warn('āš ļø Continuing without tracing...\n');
83
- }
84
- }
85
- // Initialize Anthropic client
86
- const anthropic = new Anthropic({
87
- apiKey: process.env.ANTHROPIC_API_KEY,
88
- });
89
- // Prepare system prompt
90
- const systemPrompt = `You are a browser testing assistant using Playwright tools.
91
-
92
- Execute the test instructions step by step using the available Playwright MCP tools.
93
-
94
- REQUIREMENTS:
95
- - Use chromium browser (already configured)
96
- - Headless mode: ${headless ? 'enabled' : 'disabled'}
97
- - Target URL: ${url}
98
- - Be thorough and wait for elements to load when necessary
99
- - Report success or failure clearly
100
-
101
- ${context ? `\nTest Context:\n- Ticket: ${context.ticketId}\n- Title: ${context.ticketTitle}\n${context.ticketDescription ? `- Description: ${context.ticketDescription}\n` : ''}` : ''}`;
102
- // Build messages
103
- let messages = [
104
- {
105
- role: 'user',
106
- content: testPrompt,
107
- },
108
- ];
109
- // Track tokens and cost
110
- let totalInputTokens = 0;
111
- let totalOutputTokens = 0;
112
- let totalCacheCreation = 0;
113
- let totalCacheRead = 0;
114
- // Execute test loop (max 20 turns)
115
- let turnCount = 0;
116
- const maxTurns = 20;
117
- let responseText = '';
118
- let testSuccess = false;
119
- while (turnCount < maxTurns) {
120
- turnCount++;
121
- // Yield test turn event
122
- yield {
123
- type: 'test_turn',
124
- data: { turnNumber: turnCount, maxTurns },
125
- };
126
- // Truncate old tool results to prevent token overflow
127
- // Keep only last 3 tool result exchanges (6 messages: 3 assistant + 3 user with results)
128
- if (messages.length > 13) {
129
- // Keep initial user message + last 6 messages (3 exchanges)
130
- const initialMessage = messages[0];
131
- const recentMessages = messages.slice(-6);
132
- messages = [initialMessage, ...recentMessages];
133
- if (verbose) {
134
- console.log(`\nšŸ”„ Truncated message history (keeping last 3 exchanges to prevent token overflow)`);
135
- }
136
- }
137
- // Stream response
138
- const stream = await anthropic.messages.stream({
139
- model: DEFAULT_ANTHROPIC_MODEL,
140
- max_tokens: 4096,
141
- system: systemPrompt,
142
- tools: mcpTools,
143
- messages,
144
- });
145
- let currentText = '';
146
- const toolUses = [];
147
- // Process stream
148
- for await (const event of stream) {
149
- if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
150
- const delta = event.delta.text;
151
- currentText += delta;
152
- if (verbose) {
153
- process.stdout.write(delta);
154
- }
155
- }
156
- }
157
- responseText += currentText;
158
- // Get final message
159
- const finalMessage = await stream.finalMessage();
160
- // Track tokens
161
- const usage = finalMessage.usage;
162
- totalInputTokens += usage.input_tokens;
163
- totalOutputTokens += usage.output_tokens;
164
- totalCacheCreation += usage.cache_creation_input_tokens || 0;
165
- totalCacheRead += usage.cache_read_input_tokens || 0;
166
- // Extract tool uses
167
- for (const block of finalMessage.content) {
168
- if (block.type === 'tool_use') {
169
- toolUses.push({
170
- id: block.id,
171
- name: block.name,
172
- input: block.input,
173
- });
174
- }
175
- }
176
- // Add assistant message to history
177
- messages.push({ role: 'assistant', content: finalMessage.content });
178
- // Yield assistant message event
179
- yield {
180
- type: 'assistant_message',
181
- data: {
182
- text: currentText,
183
- toolUses: toolUses.map((t) => ({ name: t.name })),
184
- },
185
- };
186
- // If no tools called, test is complete
187
- if (toolUses.length === 0) {
188
- testSuccess =
189
- responseText.toLowerCase().includes('success') ||
190
- responseText.toLowerCase().includes('passed');
191
- break;
192
- }
193
- // Execute tools and collect results
194
- const toolResults = [];
195
- for (const toolUse of toolUses) {
196
- let success = false;
197
- try {
198
- const result = await mcpClient.executeTool(toolUse.name, toolUse.input);
199
- toolResults.push({
200
- type: 'tool_result',
201
- tool_use_id: toolUse.id,
202
- content: JSON.stringify(result),
203
- });
204
- success = true;
205
- }
206
- catch (error) {
207
- const errorMsg = error instanceof Error ? error.message : String(error);
208
- toolResults.push({
209
- type: 'tool_result',
210
- tool_use_id: toolUse.id,
211
- content: `Error: ${errorMsg}`,
212
- is_error: true,
213
- });
214
- }
215
- // Yield tool executed event
216
- yield {
217
- type: 'tool_executed',
218
- data: { toolName: toolUse.name, success },
219
- };
220
- }
221
- // Add tool results to messages
222
- messages.push({ role: 'user', content: toolResults });
223
- }
224
- // Stop tracing if enabled
225
- if (trace) {
226
- console.log('\nšŸ“¹ Stopping trace recording...');
227
- try {
228
- const traceResult = await mcpClient.executeTool('browser_stop_tracing', {});
229
- console.log('āœ… Trace recording stopped\n');
230
- // Parse trace result to find output paths
231
- let traceText = '';
232
- if (Array.isArray(traceResult)) {
233
- const textContent = traceResult.find((item) => item.type === 'text');
234
- if (textContent?.text) {
235
- traceText = textContent.text;
236
- }
237
- }
238
- else if (typeof traceResult === 'string') {
239
- traceText = traceResult;
240
- }
241
- else if (traceResult && typeof traceResult === 'object' && 'text' in traceResult) {
242
- traceText = traceResult.text;
243
- }
244
- if (traceText) {
245
- // Extract paths from MCP response
246
- const actionLogMatch = traceText.match(/Action log:\s*(.+\.trace)/);
247
- const networkLogMatch = traceText.match(/Network log:\s*(.+\.network)/);
248
- const resourcesMatch = traceText.match(/Resources.*:\s*(.+resources)/);
249
- if (actionLogMatch) {
250
- const tracePath = actionLogMatch[1];
251
- const networkPath = networkLogMatch ? networkLogMatch[1] : null;
252
- const resourcesPath = resourcesMatch ? resourcesMatch[1] : null;
253
- console.log('šŸ“ Trace files:');
254
- console.log(` šŸ“¹ Action log: ${tracePath}`);
255
- if (networkPath) {
256
- console.log(` 🌐 Network log: ${networkPath}`);
257
- }
258
- if (resourcesPath) {
259
- console.log(` šŸ“¦ Resources: ${resourcesPath}`);
260
- }
261
- console.log(`\nšŸŽ¬ View trace (with video): npx playwright show-trace ${tracePath}`);
262
- console.log(' ā„¹ļø Video is embedded in the trace file and will play in the viewer');
263
- }
264
- else {
265
- console.log('āœ… Trace saved (paths not parsed)');
266
- console.log(`Raw result: ${traceText}`);
267
- }
268
- }
269
- else {
270
- console.log('āš ļø Trace saved but location not returned by MCP server');
271
- }
272
- }
273
- catch (error) {
274
- console.warn(`āš ļø Failed to stop tracing: ${error instanceof Error ? error.message : String(error)}`);
275
- }
276
- }
277
- // Yield test completed event
278
- yield {
279
- type: 'test_completed',
280
- data: { success: testSuccess },
281
- };
282
- // Get MCP tool usage
283
- const toolUsage = mcpClient.getToolUsage();
284
- // Calculate costs
285
- const textGenerationCost = calculateTextGenerationCost({
286
- input_tokens: totalInputTokens,
287
- output_tokens: totalOutputTokens,
288
- cache_creation_tokens: totalCacheCreation,
289
- cache_read_tokens: totalCacheRead,
290
- });
291
- // MCP tool calls cost (estimated: $0.01 per tool call)
292
- const toolCallCost = toolUsage.total * 0.01;
293
- const totalCost = textGenerationCost + toolCallCost;
294
- // Close MCP client
295
- await mcpClient.close();
296
- // Yield done event
297
- yield {
298
- type: 'done',
299
- data: {
300
- ticketId: testIdentifier,
301
- success: testSuccess,
302
- output: responseText,
303
- logs: {
304
- console: [],
305
- errors: testSuccess ? [] : [responseText],
306
- },
307
- tokensUsed: {
308
- input: totalInputTokens,
309
- output: totalOutputTokens,
310
- cacheCreation: totalCacheCreation,
311
- cacheRead: totalCacheRead,
312
- },
313
- cost: totalCost,
314
- mcpToolUsage: {
315
- navigations: toolUsage.navigations,
316
- clicks: toolUsage.clicks,
317
- types: toolUsage.types,
318
- extracts: toolUsage.extracts,
319
- other: toolUsage.other,
320
- },
321
- mcpToolCost: toolCallCost,
322
- error: testSuccess ? undefined : 'Test did not complete successfully',
323
- },
324
- };
325
- }
326
- catch (error) {
327
- await mcpClient.close();
328
- const errorMessage = error instanceof Error ? error.message : String(error);
329
- // Yield done event with error
330
- yield {
331
- type: 'done',
332
- data: {
333
- ticketId: testIdentifier,
334
- success: false,
335
- output: `Test failed: ${errorMessage}`,
336
- logs: {
337
- console: [],
338
- errors: [errorMessage],
339
- },
340
- tokensUsed: {
341
- input: 0,
342
- output: 0,
343
- cacheCreation: 0,
344
- cacheRead: 0,
345
- },
346
- cost: 0,
347
- error: errorMessage,
348
- },
349
- };
350
- }
351
- }
352
- /**
353
- * Streaming version of testCore - yields events for SSE integration
354
- */
355
- export async function* testCoreStream(options) {
356
- const { prompt: testPrompt, context, url = DEFAULT_TEST_URL, headless = false, verbose = false, trace = false, } = options;
357
- // Validate: prompt is required
358
- if (!testPrompt || testPrompt.trim().length === 0) {
359
- yield {
360
- type: 'done',
361
- data: {
362
- ticketId: 'error',
363
- success: false,
364
- output: 'Test prompt is required',
365
- logs: { console: [], errors: ['Test prompt is required'] },
366
- tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
367
- cost: 0,
368
- error: 'Test prompt is required',
369
- },
370
- };
371
- return;
372
- }
373
- // Validate ANTHROPIC_API_KEY (required for Playwright MCP)
374
- if (!process.env.ANTHROPIC_API_KEY) {
375
- yield {
376
- type: 'done',
377
- data: {
378
- ticketId: 'error',
379
- success: false,
380
- output: 'ANTHROPIC_API_KEY is required',
381
- logs: { console: [], errors: ['ANTHROPIC_API_KEY is required'] },
382
- tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
383
- cost: 0,
384
- error: 'ANTHROPIC_API_KEY is required',
385
- },
386
- };
387
- return;
388
- }
389
- const testIdentifier = context?.ticketId || `test-${Date.now()}`;
390
- // Execute with Playwright MCP (streaming)
391
- yield* executeWithPlaywrightMCPStream({
392
- testPrompt,
393
- context,
394
- testIdentifier,
395
- url,
396
- headless,
397
- verbose,
398
- trace,
399
- });
400
- }
401
- /**
402
- * Core test logic (atomic - single execution, no retries, no fixes)
403
- * Consumes testCoreStream and adds console logging
404
- */
405
- export async function testCore(options) {
406
- const { prompt: testPrompt, context } = options;
407
- // Log context if provided
408
- if (context) {
409
- console.log(`šŸŽ« Testing: ${context.ticketId} - ${context.ticketTitle}`);
410
- }
411
- else {
412
- console.log(`šŸ“‹ Test: ${testPrompt.substring(0, 60)}${testPrompt.length > 60 ? '...' : ''}`);
413
- }
414
- console.log(`\n${'='.repeat(60)}`);
415
- console.log(`🧪 Running Browser Test`);
416
- console.log(`${'='.repeat(60)}\n`);
417
- let result = null;
418
- // Consume stream and add console logging
419
- for await (const event of testCoreStream(options)) {
420
- if (event.type === 'test_started') {
421
- console.log(`🌐 URL: ${event.data.url}`);
422
- console.log(`šŸ‘ļø Headless: ${event.data.headless ? 'enabled' : 'disabled'}`);
423
- console.log(`šŸŽ­ Browser: chromium (forced)\n`);
424
- }
425
- else if (event.type === 'mcp_connected') {
426
- console.log(`āœ… Connected to Playwright MCP (${event.data.toolsAvailable} tools available)\n`);
427
- console.log('šŸ¤– Starting test execution with Claude + Playwright MCP...\n');
428
- }
429
- else if (event.type === 'test_turn') {
430
- if (options.verbose) {
431
- console.log(`\nšŸ”„ Turn ${event.data.turnNumber}/${event.data.maxTurns}`);
432
- }
433
- }
434
- else if (event.type === 'assistant_message') {
435
- if (options.verbose && event.data.text) {
436
- console.log(event.data.text);
437
- }
438
- }
439
- else if (event.type === 'tool_executed') {
440
- if (options.verbose) {
441
- console.log(`šŸ”§ Executed: ${event.data.toolName} - ${event.data.success ? 'āœ…' : 'āŒ'}`);
442
- }
443
- }
444
- else if (event.type === 'test_completed') {
445
- console.log(`\nāœ… Test ${event.data.success ? 'passed' : 'failed'}\n`);
446
- }
447
- else if (event.type === 'done') {
448
- result = event.data;
449
- console.log('šŸ”’ Closing MCP connection...');
450
- console.log('āœ… MCP connection closed\n');
451
- }
452
- }
453
- if (!result) {
454
- throw new Error('Test stream ended without result');
455
- }
456
- return result;
457
- }
458
- /**
459
- * Main test command
460
- */
461
- export async function testCommand(options) {
462
- const { prompt, context, noLogs = false } = options;
463
- const testDescription = context
464
- ? `${context.ticketId} - ${context.ticketTitle}`
465
- : `"${prompt.substring(0, 60)}${prompt.length > 60 ? '...' : ''}"`;
466
- console.log(`🧪 Testing ${testDescription}\n`);
467
- // Initialize logging context
468
- const logContext = logger.createContext('test', { noLogs });
469
- const cleanupHandler = setupCancellationHandler(logContext);
470
- try {
471
- // Run atomic test
472
- const result = await testCore(options);
473
- // Track metrics
474
- logger.trackTokens(logContext, result.tokensUsed);
475
- // Display summary
476
- displayTestSummary(result);
477
- // Log execution (success or error based on test result)
478
- await logger.complete(logContext, result.success ? 'success' : 'error', result.error ? new Error(result.error) : undefined);
479
- cleanupHandler();
480
- }
481
- catch (error) {
482
- console.error('\nāŒ Test command failed:', error);
483
- // Log failed execution
484
- await logger.complete(logContext, 'error', error);
485
- cleanupHandler();
486
- throw error;
487
- }
488
- }
489
- /**
490
- * Display test summary
491
- */
492
- function displayTestSummary(result) {
493
- console.log(`\n${'='.repeat(60)}`);
494
- console.log('šŸ“Š Test Summary');
495
- console.log('='.repeat(60));
496
- if (result.success) {
497
- console.log('āœ… Status: Test passed');
498
- }
499
- else {
500
- console.log('āŒ Status: Test failed');
501
- }
502
- console.log(`šŸ“ Output: ${result.output}`);
503
- console.log(`šŸ”§ Console logs: ${result.logs.console.length}`);
504
- console.log(`āŒ Errors: ${result.logs.errors.length}`);
505
- // Display MCP tool usage
506
- if (result.mcpToolUsage) {
507
- console.log(`\nšŸŽ­ Playwright Tool Usage:`);
508
- console.log(` 🌐 Navigations: ${result.mcpToolUsage.navigations}`);
509
- console.log(` šŸ–±ļø Clicks: ${result.mcpToolUsage.clicks}`);
510
- console.log(` āŒØļø Types: ${result.mcpToolUsage.types}`);
511
- console.log(` šŸ“¤ Extracts: ${result.mcpToolUsage.extracts}`);
512
- console.log(` šŸ”§ Other: ${result.mcpToolUsage.other}`);
513
- const totalTools = result.mcpToolUsage.navigations +
514
- result.mcpToolUsage.clicks +
515
- result.mcpToolUsage.types +
516
- result.mcpToolUsage.extracts +
517
- result.mcpToolUsage.other;
518
- console.log(` šŸ“Š Total: ${totalTools}`);
519
- }
520
- // Display cost breakdown
521
- if (result.mcpToolCost !== undefined) {
522
- console.log(`\nšŸ’° Cost Breakdown:`);
523
- console.log(` šŸ’¬ Text generation: $${(result.cost - result.mcpToolCost).toFixed(4)}`);
524
- console.log(` šŸŽ­ Playwright tool calls: $${result.mcpToolCost.toFixed(4)}`);
525
- console.log(` šŸ“Š Total: $${result.cost.toFixed(4)}`);
526
- }
527
- else {
528
- console.log(`šŸ’° Cost: $${result.cost.toFixed(4)}`);
529
- }
530
- console.log('='.repeat(60));
531
- if (result.success) {
532
- console.log('\nāœ… Test completed successfully!');
533
- }
534
- else {
535
- console.log(`\nāŒ Test failed: ${result.error || 'See output above for details'}`);
536
- console.log('\nā„¹ļø This is an atomic test command - it does not apply fixes.');
537
- console.log('ā„¹ļø To test with automatic fixing, use: kosuke build');
538
- }
539
- }
540
- //# sourceMappingURL=test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Tickets command - Generate tickets from requirements document
3
- *
4
- * Generates tickets directly from a requirements document.
5
- * No clarification questions - assumes requirements are complete.
6
- * Best for: New projects with detailed requirements from `kosuke requirements`.
7
- *
8
- * For interactive ticket creation with questions, use: kosuke plan --prompt="..."
9
- *
10
- * SCAFFOLD MODE (--scaffold flag):
11
- * SCAFFOLD BATCH (template adaptation):
12
- * 1. SCAFFOLD-SCHEMA-1 (ONE ticket for ALL database infrastructure changes)
13
- * 2. SCAFFOLD-BACKEND-X → SCAFFOLD-FRONTEND-X → SCAFFOLD-WEB-TEST-X (feature-by-feature)
14
- *
15
- * LOGIC BATCH (business functionality):
16
- * 1. LOGIC-SCHEMA-1 (ONE ticket for ALL business entities)
17
- * 2. LOGIC-BACKEND-X → LOGIC-FRONTEND-X → LOGIC-WEB-TEST-X (feature-by-feature)
18
- *
19
- * LOGIC-ONLY MODE (default):
20
- * Only generates LOGIC tickets for new features
21
- * 1. LOGIC-SCHEMA-1 (ONE ticket for ALL business entities)
22
- * 2. LOGIC-BACKEND-X → LOGIC-FRONTEND-X → LOGIC-WEB-TEST-X (feature-by-feature)
23
- *
24
- * Workflow:
25
- * 1. Claude Code Agent explores codebase and generates tickets
26
- * 2. Review step validates and fixes ticket structure
27
- * 3. Outputs validated tickets.json
28
- *
29
- * Usage:
30
- * kosuke tickets # Use docs.md
31
- * kosuke tickets --scaffold # Scaffold + logic from docs.md
32
- * kosuke tickets --path=custom.md # Custom requirements file
33
- */
34
- import type { TicketsOptions, TicketsResult } from '../types.js';
35
- /**
36
- * Core tickets logic - Simplified to single agent call
37
- */
38
- export declare function ticketsCore(options: TicketsOptions): Promise<TicketsResult>;
39
- /**
40
- * Main tickets command
41
- */
42
- export declare function ticketsCommand(options: TicketsOptions): Promise<void>;
43
- //# sourceMappingURL=tickets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiTjE;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAsHjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G3E"}