@kosuke-ai/cli 0.0.43 → 0.0.45

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 (86) hide show
  1. package/README.md +94 -1
  2. package/claude.costs.json +34 -0
  3. package/dist/index.js +55 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/kosuke/commands/build.d.ts +5 -1
  6. package/dist/kosuke/commands/build.d.ts.map +1 -1
  7. package/dist/kosuke/commands/build.js +300 -4
  8. package/dist/kosuke/commands/build.js.map +1 -1
  9. package/dist/kosuke/commands/migrate.d.ts +6 -1
  10. package/dist/kosuke/commands/migrate.d.ts.map +1 -1
  11. package/dist/kosuke/commands/migrate.js +124 -37
  12. package/dist/kosuke/commands/migrate.js.map +1 -1
  13. package/dist/kosuke/commands/plan.d.ts +4 -20
  14. package/dist/kosuke/commands/plan.d.ts.map +1 -1
  15. package/dist/kosuke/commands/plan.js +471 -679
  16. package/dist/kosuke/commands/plan.js.map +1 -1
  17. package/dist/kosuke/commands/requirements.js +2 -2
  18. package/dist/kosuke/commands/requirements.js.map +1 -1
  19. package/dist/kosuke/commands/review.d.ts +6 -1
  20. package/dist/kosuke/commands/review.d.ts.map +1 -1
  21. package/dist/kosuke/commands/review.js +168 -68
  22. package/dist/kosuke/commands/review.js.map +1 -1
  23. package/dist/kosuke/commands/serve.d.ts +9 -0
  24. package/dist/kosuke/commands/serve.d.ts.map +1 -0
  25. package/dist/kosuke/commands/serve.js +17 -0
  26. package/dist/kosuke/commands/serve.js.map +1 -0
  27. package/dist/kosuke/commands/ship.d.ts +6 -1
  28. package/dist/kosuke/commands/ship.d.ts.map +1 -1
  29. package/dist/kosuke/commands/ship.js +226 -67
  30. package/dist/kosuke/commands/ship.js.map +1 -1
  31. package/dist/kosuke/commands/test.d.ts +11 -6
  32. package/dist/kosuke/commands/test.d.ts.map +1 -1
  33. package/dist/kosuke/commands/test.js +438 -105
  34. package/dist/kosuke/commands/test.js.map +1 -1
  35. package/dist/kosuke/commands/tickets.d.ts +7 -15
  36. package/dist/kosuke/commands/tickets.d.ts.map +1 -1
  37. package/dist/kosuke/commands/tickets.js +17 -61
  38. package/dist/kosuke/commands/tickets.js.map +1 -1
  39. package/dist/kosuke/serve/middleware/error-handler.d.ts +13 -0
  40. package/dist/kosuke/serve/middleware/error-handler.d.ts.map +1 -0
  41. package/dist/kosuke/serve/middleware/error-handler.js +34 -0
  42. package/dist/kosuke/serve/middleware/error-handler.js.map +1 -0
  43. package/dist/kosuke/serve/middleware/validation.d.ts +13 -0
  44. package/dist/kosuke/serve/middleware/validation.d.ts.map +1 -0
  45. package/dist/kosuke/serve/middleware/validation.js +39 -0
  46. package/dist/kosuke/serve/middleware/validation.js.map +1 -0
  47. package/dist/kosuke/serve/routes/build.d.ts +6 -0
  48. package/dist/kosuke/serve/routes/build.d.ts.map +1 -0
  49. package/dist/kosuke/serve/routes/build.js +224 -0
  50. package/dist/kosuke/serve/routes/build.js.map +1 -0
  51. package/dist/kosuke/serve/routes/health.d.ts +6 -0
  52. package/dist/kosuke/serve/routes/health.d.ts.map +1 -0
  53. package/dist/kosuke/serve/routes/health.js +11 -0
  54. package/dist/kosuke/serve/routes/health.js.map +1 -0
  55. package/dist/kosuke/serve/routes/plan.d.ts +6 -0
  56. package/dist/kosuke/serve/routes/plan.d.ts.map +1 -0
  57. package/dist/kosuke/serve/routes/plan.js +104 -0
  58. package/dist/kosuke/serve/routes/plan.js.map +1 -0
  59. package/dist/kosuke/serve/server.d.ts +16 -0
  60. package/dist/kosuke/serve/server.d.ts.map +1 -0
  61. package/dist/kosuke/serve/server.js +63 -0
  62. package/dist/kosuke/serve/server.js.map +1 -0
  63. package/dist/kosuke/serve/validation/build.d.ts +41 -0
  64. package/dist/kosuke/serve/validation/build.d.ts.map +1 -0
  65. package/dist/kosuke/serve/validation/build.js +20 -0
  66. package/dist/kosuke/serve/validation/build.js.map +1 -0
  67. package/dist/kosuke/serve/validation/plan.d.ts +26 -0
  68. package/dist/kosuke/serve/validation/plan.d.ts.map +1 -0
  69. package/dist/kosuke/serve/validation/plan.js +15 -0
  70. package/dist/kosuke/serve/validation/plan.js.map +1 -0
  71. package/dist/kosuke/types.d.ts +217 -1
  72. package/dist/kosuke/types.d.ts.map +1 -1
  73. package/dist/kosuke/utils/claude-agent.d.ts +82 -6
  74. package/dist/kosuke/utils/claude-agent.d.ts.map +1 -1
  75. package/dist/kosuke/utils/claude-agent.js +381 -180
  76. package/dist/kosuke/utils/claude-agent.js.map +1 -1
  77. package/dist/kosuke/utils/playwright-mcp-client.d.ts +45 -0
  78. package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +1 -0
  79. package/dist/kosuke/utils/playwright-mcp-client.js +131 -0
  80. package/dist/kosuke/utils/playwright-mcp-client.js.map +1 -0
  81. package/dist/lib.d.ts +4 -4
  82. package/dist/lib.d.ts.map +1 -1
  83. package/dist/lib.js +2 -1
  84. package/dist/lib.js.map +1 -1
  85. package/dist/package.json +7 -3
  86. package/package.json +7 -3
@@ -25,9 +25,9 @@
25
25
  */
26
26
  import { existsSync, statSync } from 'fs';
27
27
  import { resolve } from 'path';
28
- import { formatCostBreakdown, runAgent } from '../utils/claude-agent.js';
28
+ import { formatCostBreakdown, logAssistantMessage, logToolUsage, runAgentStream, } from '../utils/claude-agent.js';
29
29
  import { runComprehensiveLinting } from '../utils/validator.js';
30
- import { reviewCore } from './review.js';
30
+ import { reviewCoreStream } from './review.js';
31
31
  /**
32
32
  * Validate ticket data has all required fields
33
33
  */
@@ -94,29 +94,66 @@ ${ticket.description}
94
94
  Begin by exploring the current codebase, then implement the ticket systematically.`;
95
95
  }
96
96
  /**
97
- * Core ship logic (ticket-agnostic, reusable)
98
- * Implements a ticket without managing its lifecycle (status updates, etc.)
97
+ * Streaming version of shipCore - yields events for SSE integration
99
98
  */
100
- export async function shipCore(options) {
99
+ export async function* shipCoreStream(options) {
101
100
  // Validate ticket data
102
- validateTicketData(options.ticketData);
101
+ try {
102
+ validateTicketData(options.ticketData);
103
+ }
104
+ catch (error) {
105
+ const errorMessage = error instanceof Error ? error.message : String(error);
106
+ yield {
107
+ type: 'done',
108
+ data: {
109
+ success: false,
110
+ implementationFixCount: 0,
111
+ lintFixCount: 0,
112
+ reviewFixCount: 0,
113
+ tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
114
+ cost: 0,
115
+ error: errorMessage,
116
+ },
117
+ };
118
+ return;
119
+ }
103
120
  const ticket = options.ticketData;
104
121
  const { review = false, directory, dbUrl = 'postgres://postgres:postgres@localhost:5432/postgres', } = options;
105
122
  // 1. Validate and resolve directory
106
123
  const cwd = directory ? resolve(directory) : process.cwd();
107
124
  if (directory) {
108
125
  if (!existsSync(cwd)) {
109
- throw new Error(`Directory not found: ${cwd}\n` +
110
- `Please provide a valid directory using --directory=<path>\n` +
111
- `Example: shipCore({ ticketData: ticket, directory: './my-project' })`);
126
+ yield {
127
+ type: 'done',
128
+ data: {
129
+ success: false,
130
+ implementationFixCount: 0,
131
+ lintFixCount: 0,
132
+ reviewFixCount: 0,
133
+ tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
134
+ cost: 0,
135
+ error: `Directory not found: ${cwd}`,
136
+ },
137
+ };
138
+ return;
112
139
  }
113
140
  const stats = statSync(cwd);
114
141
  if (!stats.isDirectory()) {
115
- throw new Error(`Path is not a directory: ${cwd}\n` + `Please provide a valid directory path.`);
142
+ yield {
143
+ type: 'done',
144
+ data: {
145
+ success: false,
146
+ implementationFixCount: 0,
147
+ lintFixCount: 0,
148
+ reviewFixCount: 0,
149
+ tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
150
+ cost: 0,
151
+ error: `Path is not a directory: ${cwd}`,
152
+ },
153
+ };
154
+ return;
116
155
  }
117
- console.log(`📁 Using project directory: ${cwd}\n`);
118
156
  }
119
- console.log(`📋 Implementing ticket: ${ticket.id} - ${ticket.title}\n`);
120
157
  // Determine ticket type
121
158
  const isSchemaTicket = ticket.id.toUpperCase().startsWith('SCHEMA-');
122
159
  // Track metrics
@@ -127,89 +164,211 @@ export async function shipCore(options) {
127
164
  let totalCost = 0;
128
165
  let implementationFixCount = 0;
129
166
  let reviewFixCount = 0;
167
+ let lintFixCount = 0;
130
168
  try {
131
169
  // 2. Implementation phase
132
- console.log(`\n${'='.repeat(60)}`);
133
- console.log(`🚀 Phase 1: Implementation`);
134
- console.log(`${'='.repeat(60)}\n`);
170
+ yield { type: 'phase', data: { phase: 'implementation', status: 'started' } };
135
171
  const systemPrompt = buildImplementationPrompt(ticket, dbUrl);
136
- const implementationResult = await runAgent(`Implement ticket ${ticket.id}: ${ticket.title}`, {
172
+ const implementationStream = runAgentStream(`Implement ticket ${ticket.id}: ${ticket.title}`, {
137
173
  systemPrompt,
138
174
  cwd,
139
175
  maxTurns: 40,
140
176
  verbosity: 'normal',
141
177
  });
178
+ let implementationResult = null;
179
+ // Yield events from implementation stream
180
+ for await (const event of implementationStream) {
181
+ if (event.type === 'message') {
182
+ yield { type: 'message', data: event.data };
183
+ }
184
+ else if (event.type === 'agent_result') {
185
+ implementationResult = event.data;
186
+ }
187
+ }
188
+ if (!implementationResult) {
189
+ throw new Error('Implementation stream ended without result');
190
+ }
142
191
  implementationFixCount = implementationResult.fixCount;
143
- totalInputTokens += implementationResult.tokensUsed.input;
144
- totalOutputTokens += implementationResult.tokensUsed.output;
145
- totalCacheCreationTokens += implementationResult.tokensUsed.cacheCreation;
146
- totalCacheReadTokens += implementationResult.tokensUsed.cacheRead;
147
- totalCost += implementationResult.cost;
148
- console.log(`\n✨ Implementation completed (${implementationFixCount} changes made)`);
149
- console.log(`💰 Implementation cost: ${formatCostBreakdown(implementationResult)}`);
192
+ totalInputTokens = implementationResult.tokensUsed.input;
193
+ totalOutputTokens = implementationResult.tokensUsed.output;
194
+ totalCacheCreationTokens = implementationResult.tokensUsed.cacheCreation;
195
+ totalCacheReadTokens = implementationResult.tokensUsed.cacheRead;
196
+ totalCost = implementationResult.cost;
197
+ yield {
198
+ type: 'phase',
199
+ data: {
200
+ phase: 'implementation',
201
+ status: 'completed',
202
+ result: {
203
+ implementationFixCount,
204
+ tokensUsed: {
205
+ input: totalInputTokens,
206
+ output: totalOutputTokens,
207
+ cacheCreation: totalCacheCreationTokens,
208
+ cacheRead: totalCacheReadTokens,
209
+ },
210
+ cost: totalCost,
211
+ },
212
+ },
213
+ };
150
214
  // 3. Linting phase
151
- console.log(`\n${'='.repeat(60)}`);
152
- console.log(`🔧 Phase 2: Linting & Quality Checks`);
153
- console.log(`${'='.repeat(60)}\n`);
215
+ yield { type: 'phase', data: { phase: 'linting', status: 'started' } };
154
216
  const lintResult = await runComprehensiveLinting(cwd);
155
- console.log(`\n✅ Linting completed (${lintResult.fixCount} fixes applied)`);
217
+ lintFixCount = lintResult.fixCount;
218
+ yield {
219
+ type: 'phase',
220
+ data: { phase: 'linting', status: 'completed', result: { lintFixCount } },
221
+ };
156
222
  // 4. Review phase (if review flag is set) - SKIP for SCHEMA tickets
157
223
  if (review && !isSchemaTicket) {
158
- console.log(`\n${'='.repeat(60)}`);
159
- console.log(`🔍 Phase 3: Code Review (Git Diff)`);
160
- console.log(`${'='.repeat(60)}\n`);
161
- const reviewResult = await reviewCore({
224
+ yield { type: 'phase', data: { phase: 'review', status: 'started' } };
225
+ // Stream review events
226
+ for await (const event of reviewCoreStream({
162
227
  directory: cwd,
163
228
  context: {
164
229
  ticketId: ticket.id,
165
230
  ticketTitle: ticket.title,
166
231
  ticketDescription: ticket.description,
167
232
  },
168
- });
169
- reviewFixCount = reviewResult.fixesApplied;
170
- totalInputTokens += reviewResult.tokensUsed.input;
171
- totalOutputTokens += reviewResult.tokensUsed.output;
172
- totalCacheCreationTokens += reviewResult.tokensUsed.cacheCreation;
173
- totalCacheReadTokens += reviewResult.tokensUsed.cacheRead;
174
- totalCost += reviewResult.cost;
175
- console.log(`\n✨ Review completed (${reviewResult.issuesFound} issues found, ${reviewFixCount} fixes applied)`);
176
- }
177
- else if (review && isSchemaTicket) {
178
- console.log('\nℹ️ Skipping code review for SCHEMA ticket (review focuses on application code, not database migrations)');
233
+ })) {
234
+ if (event.type === 'message') {
235
+ yield { type: 'message', data: event.data };
236
+ }
237
+ else if (event.type === 'done') {
238
+ const reviewResult = event.data;
239
+ reviewFixCount = reviewResult.fixesApplied;
240
+ totalInputTokens += reviewResult.tokensUsed.input;
241
+ totalOutputTokens += reviewResult.tokensUsed.output;
242
+ totalCacheCreationTokens += reviewResult.tokensUsed.cacheCreation;
243
+ totalCacheReadTokens += reviewResult.tokensUsed.cacheRead;
244
+ totalCost += reviewResult.cost;
245
+ }
246
+ }
247
+ yield {
248
+ type: 'phase',
249
+ data: { phase: 'review', status: 'completed', result: { reviewFixCount } },
250
+ };
179
251
  }
180
252
  // 5. Return success result
181
- return {
182
- success: true,
183
- implementationFixCount,
184
- lintFixCount: lintResult.fixCount,
185
- reviewFixCount,
186
- tokensUsed: {
187
- input: totalInputTokens,
188
- output: totalOutputTokens,
189
- cacheCreation: totalCacheCreationTokens,
190
- cacheRead: totalCacheReadTokens,
253
+ yield {
254
+ type: 'done',
255
+ data: {
256
+ success: true,
257
+ implementationFixCount,
258
+ lintFixCount,
259
+ reviewFixCount,
260
+ tokensUsed: {
261
+ input: totalInputTokens,
262
+ output: totalOutputTokens,
263
+ cacheCreation: totalCacheCreationTokens,
264
+ cacheRead: totalCacheReadTokens,
265
+ },
266
+ cost: totalCost,
191
267
  },
192
- cost: totalCost,
193
268
  };
194
269
  }
195
270
  catch (error) {
196
- // Return error result
197
271
  const errorMessage = error instanceof Error ? error.message : String(error);
198
- console.error(`\n❌ Implementation failed: ${errorMessage}`);
199
- return {
200
- success: false,
201
- implementationFixCount,
202
- lintFixCount: 0,
203
- reviewFixCount,
204
- tokensUsed: {
205
- input: totalInputTokens,
206
- output: totalOutputTokens,
207
- cacheCreation: totalCacheCreationTokens,
208
- cacheRead: totalCacheReadTokens,
272
+ yield {
273
+ type: 'done',
274
+ data: {
275
+ success: false,
276
+ implementationFixCount,
277
+ lintFixCount,
278
+ reviewFixCount,
279
+ tokensUsed: {
280
+ input: totalInputTokens,
281
+ output: totalOutputTokens,
282
+ cacheCreation: totalCacheCreationTokens,
283
+ cacheRead: totalCacheReadTokens,
284
+ },
285
+ cost: totalCost,
286
+ error: errorMessage,
209
287
  },
210
- cost: totalCost,
211
- error: errorMessage,
212
288
  };
213
289
  }
214
290
  }
291
+ /**
292
+ * Core ship logic (ticket-agnostic, reusable)
293
+ * Implements a ticket without managing its lifecycle (status updates, etc.)
294
+ * Consumes shipCoreStream and adds console logging
295
+ */
296
+ export async function shipCore(options) {
297
+ const ticket = options.ticketData;
298
+ const { review = false, directory } = options;
299
+ if (directory) {
300
+ const cwd = directory ? resolve(directory) : process.cwd();
301
+ console.log(`📁 Using project directory: ${cwd}\n`);
302
+ }
303
+ console.log(`📋 Implementing ticket: ${ticket.id} - ${ticket.title}\n`);
304
+ // Determine ticket type
305
+ const isSchemaTicket = ticket.id.toUpperCase().startsWith('SCHEMA-');
306
+ let result = null;
307
+ // Consume the stream and add console logging
308
+ for await (const event of shipCoreStream(options)) {
309
+ if (event.type === 'phase') {
310
+ const { phase, status, result: phaseResult } = event.data;
311
+ if (status === 'started') {
312
+ if (phase === 'implementation') {
313
+ console.log(`\n${'='.repeat(60)}`);
314
+ console.log(`🚀 Phase 1: Implementation`);
315
+ console.log(`${'='.repeat(60)}\n`);
316
+ }
317
+ else if (phase === 'linting') {
318
+ console.log(`\n${'='.repeat(60)}`);
319
+ console.log(`🔧 Phase 2: Linting & Quality Checks`);
320
+ console.log(`${'='.repeat(60)}\n`);
321
+ }
322
+ else if (phase === 'review') {
323
+ console.log(`\n${'='.repeat(60)}`);
324
+ console.log(`🔍 Phase 3: Code Review (Git Diff)`);
325
+ console.log(`${'='.repeat(60)}\n`);
326
+ }
327
+ }
328
+ else if (status === 'completed' && phaseResult) {
329
+ if (phase === 'implementation') {
330
+ console.log(`\n✨ Implementation completed (${phaseResult.implementationFixCount} changes made)`);
331
+ console.log(`💰 Implementation cost: ${formatCostBreakdown({
332
+ tokensUsed: phaseResult.tokensUsed,
333
+ cost: phaseResult.cost,
334
+ response: '',
335
+ fixCount: phaseResult.implementationFixCount,
336
+ filesReferenced: new Set(),
337
+ })}`);
338
+ }
339
+ else if (phase === 'linting') {
340
+ console.log(`\n✅ Linting completed (${phaseResult.lintFixCount} fixes applied)`);
341
+ }
342
+ else if (phase === 'review') {
343
+ console.log(`\n✨ Review completed (${phaseResult.reviewFixCount} fixes applied)`);
344
+ }
345
+ }
346
+ }
347
+ else if (event.type === 'message') {
348
+ // Log Claude messages for CLI context
349
+ const msg = event.data;
350
+ if (msg.type === 'assistant' && msg.message?.content) {
351
+ for (const block of msg.message.content) {
352
+ if (block.type === 'text' && block.text) {
353
+ // Use shared logging with verbosity: 'normal'
354
+ logAssistantMessage(block.text, 'normal');
355
+ }
356
+ else if (block.type === 'tool_use' && block.name) {
357
+ // Log tool usage (logToolUsage filters file modifications internally)
358
+ const filesReferenced = new Set();
359
+ logToolUsage(block.name, block.input, filesReferenced);
360
+ }
361
+ }
362
+ }
363
+ }
364
+ else if (event.type === 'done') {
365
+ result = event.data;
366
+ // Show skip message for SCHEMA tickets
367
+ if (review && isSchemaTicket) {
368
+ console.log('\nℹ️ Skipping code review for SCHEMA ticket (review focuses on application code, not database migrations)');
369
+ }
370
+ }
371
+ }
372
+ return result;
373
+ }
215
374
  //# sourceMappingURL=ship.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Test command - Atomic web E2E testing (no fixing, no linting)
2
+ * Test command - Atomic web E2E testing with Playwright MCP
3
3
  *
4
4
  * This command:
5
5
  * 1. Accepts a test prompt with optional ticket context
6
- * 2. Runs a single web E2E test with Stagehand
7
- * 3. Returns result (success/failure) with logs
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
8
  *
9
9
  * Test type:
10
- * - web-test: Browser E2E testing with Stagehand + Claude AI
10
+ * - web-test: Browser E2E testing with Playwright MCP + Claude AI
11
11
  *
12
12
  * NOTE: This is ATOMIC - no retries, no fixing, no linting
13
13
  * For iterative test+fix, use: kosuke build
@@ -17,17 +17,22 @@
17
17
  * kosuke test --prompt="..." --url=http://localhost:4000
18
18
  * kosuke test --prompt="..." --verbose # Enable verbose output
19
19
  * kosuke test --prompt="..." --headless # Run in headless mode
20
+ * kosuke test --prompt="..." --trace # Enable trace recording
20
21
  *
21
22
  * Programmatic usage (from build command):
22
23
  * const result = await testCore({
23
24
  * prompt: "Test login functionality",
24
- * type: "web-test",
25
25
  * context: { ticketId, ticketTitle, ticketDescription },
26
26
  * });
27
27
  */
28
- import type { TestOptions, TestResult } from '../types.js';
28
+ import type { TestOptions, TestResult, TestStreamEvent } from '../types.js';
29
+ /**
30
+ * Streaming version of testCore - yields events for SSE integration
31
+ */
32
+ export declare function testCoreStream(options: TestOptions): AsyncGenerator<TestStreamEvent, void, void>;
29
33
  /**
30
34
  * Core test logic (atomic - single execution, no retries, no fixes)
35
+ * Consumes testCoreStream and adds console logging
31
36
  */
32
37
  export declare function testCore(options: TestOptions): Promise<TestResult>;
33
38
  /**
@@ -1 +1 @@
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
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoY5E;;GAEG;AACH,wBAAuB,cAAc,CACnC,OAAO,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAwD7C;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAqDxE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrE"}