@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
@@ -1,19 +1,13 @@
1
1
  /**
2
- * Tickets command - Generate tickets from requirements document or prompt
2
+ * Tickets command - Generate tickets from requirements document
3
3
  *
4
- * This command has two modes:
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`.
5
7
  *
6
- * 1. PROMPT MODE (--prompt flag):
7
- * Uses the `plan` command internally for interactive ticket creation.
8
- * Claude asks clarification questions before generating tickets.
9
- * Best for: Adding features or fixing bugs in existing projects.
8
+ * For interactive ticket creation with questions, use: kosuke plan --prompt="..."
10
9
  *
11
- * 2. DOCUMENT MODE (--path or docs.md):
12
- * Generates tickets directly from a requirements document.
13
- * No clarification questions - assumes requirements are complete.
14
- * Best for: New projects with detailed requirements from `kosuke requirements`.
15
- *
16
- * SCAFFOLD MODE (--scaffold flag, document mode only):
10
+ * SCAFFOLD MODE (--scaffold flag):
17
11
  * SCAFFOLD BATCH (template adaptation):
18
12
  * 1. SCAFFOLD-SCHEMA-1 (ONE ticket for ALL database infrastructure changes)
19
13
  * 2. SCAFFOLD-BACKEND-X → SCAFFOLD-FRONTEND-X → SCAFFOLD-WEB-TEST-X (feature-by-feature)
@@ -33,11 +27,9 @@
33
27
  * 3. Outputs validated tickets.json
34
28
  *
35
29
  * Usage:
36
- * kosuke tickets # Use docs.md (no questions)
30
+ * kosuke tickets # Use docs.md
37
31
  * kosuke tickets --scaffold # Scaffold + logic from docs.md
38
32
  * kosuke tickets --path=custom.md # Custom requirements file
39
- * kosuke tickets --prompt="Add dark mode" # Interactive with questions
40
- * kosuke tickets --prompt="Fix login bug" --dir=./ # Interactive with questions
41
33
  */
42
34
  import type { TicketsOptions, TicketsResult } from '../types.js';
43
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkTjE;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAiKjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G3E"}
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"}
@@ -1,19 +1,13 @@
1
1
  /**
2
- * Tickets command - Generate tickets from requirements document or prompt
2
+ * Tickets command - Generate tickets from requirements document
3
3
  *
4
- * This command has two modes:
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`.
5
7
  *
6
- * 1. PROMPT MODE (--prompt flag):
7
- * Uses the `plan` command internally for interactive ticket creation.
8
- * Claude asks clarification questions before generating tickets.
9
- * Best for: Adding features or fixing bugs in existing projects.
8
+ * For interactive ticket creation with questions, use: kosuke plan --prompt="..."
10
9
  *
11
- * 2. DOCUMENT MODE (--path or docs.md):
12
- * Generates tickets directly from a requirements document.
13
- * No clarification questions - assumes requirements are complete.
14
- * Best for: New projects with detailed requirements from `kosuke requirements`.
15
- *
16
- * SCAFFOLD MODE (--scaffold flag, document mode only):
10
+ * SCAFFOLD MODE (--scaffold flag):
17
11
  * SCAFFOLD BATCH (template adaptation):
18
12
  * 1. SCAFFOLD-SCHEMA-1 (ONE ticket for ALL database infrastructure changes)
19
13
  * 2. SCAFFOLD-BACKEND-X → SCAFFOLD-FRONTEND-X → SCAFFOLD-WEB-TEST-X (feature-by-feature)
@@ -33,18 +27,15 @@
33
27
  * 3. Outputs validated tickets.json
34
28
  *
35
29
  * Usage:
36
- * kosuke tickets # Use docs.md (no questions)
30
+ * kosuke tickets # Use docs.md
37
31
  * kosuke tickets --scaffold # Scaffold + logic from docs.md
38
32
  * kosuke tickets --path=custom.md # Custom requirements file
39
- * kosuke tickets --prompt="Add dark mode" # Interactive with questions
40
- * kosuke tickets --prompt="Fix login bug" --dir=./ # Interactive with questions
41
33
  */
42
34
  import { existsSync, readFileSync, statSync } from 'fs';
43
35
  import { join, resolve } from 'path';
44
36
  import { formatCostBreakdown, runAgent } from '../utils/claude-agent.js';
45
37
  import { logger, setupCancellationHandler } from '../utils/logger.js';
46
38
  import { parseTickets, processAndWriteTickets } from '../utils/tickets-manager.js';
47
- import { planCore } from './plan.js';
48
39
  /**
49
40
  * Build unified system prompt for comprehensive ticket generation
50
41
  */
@@ -85,9 +76,9 @@ Examples of SCAFFOLD tickets:
85
76
  const webTestGuidance = noTest
86
77
  ? ''
87
78
  : `
88
- **WEB TEST TICKETS - Stagehand Agent E2E Tests:**
79
+ **WEB TEST TICKETS - Playwright MCP E2E Tests:**
89
80
 
90
- Web test tickets are executed by Stagehand agent and must follow these guidelines:
81
+ Web test tickets are executed by Playwright MCP with Claude AI and must follow these guidelines:
91
82
 
92
83
  **Test User Discovery:**
93
84
  1. **ALWAYS read seed files** to find test user credentials:
@@ -117,7 +108,7 @@ Each web test ticket MUST include:
117
108
  - Data validation points
118
109
  - User feedback confirmation
119
110
 
120
- **Stagehand Best Practices:**
111
+ **Playwright MCP Best Practices:**
121
112
  - Use natural language, NOT code
122
113
  - Be SPECIFIC about element identification (button text, input labels, exact URLs)
123
114
  - Include EXPECTED OUTCOMES after each major action
@@ -356,44 +347,8 @@ export async function ticketsCore(options) {
356
347
  }
357
348
  console.log(`📁 Using project directory: ${projectPath}`);
358
349
  console.log(`🏗️ Mode: ${isScaffoldMode ? 'Scaffold (template adaptation + business logic)' : 'Logic-only (business features)'}\n`);
359
- // 2. Get requirements content (from prompt or file)
350
+ // 2. Get requirements content from file
360
351
  let requirementsContent;
361
- if (options.prompt && options.path) {
362
- throw new Error('Cannot use both --prompt and --path. Please provide only one:\n' +
363
- ' kosuke tickets --prompt="Add dark mode"\n' +
364
- ' kosuke tickets --path=docs.md');
365
- }
366
- // If prompt is provided (without path), use plan command for interactive ticket creation
367
- if (options.prompt && !options.path) {
368
- console.log('📝 Using interactive planning mode for prompt-based ticket creation...\n');
369
- const planResult = await planCore({
370
- prompt: options.prompt,
371
- directory: projectPath,
372
- noTest: options.noTest,
373
- noLogs: options.noLogs,
374
- });
375
- if (!planResult.success) {
376
- throw new Error(planResult.error || 'Plan command failed');
377
- }
378
- // Convert plan result to tickets result format
379
- const schemaTickets = planResult.tickets.filter((t) => t.type === 'schema');
380
- const engineTickets = planResult.tickets.filter((t) => t.type === 'engine');
381
- const backendTickets = planResult.tickets.filter((t) => t.type === 'backend');
382
- const frontendTickets = planResult.tickets.filter((t) => t.type === 'frontend');
383
- const testTickets = planResult.tickets.filter((t) => t.type === 'test');
384
- return {
385
- schemaTickets,
386
- engineTickets,
387
- backendTickets,
388
- frontendTickets,
389
- testTickets,
390
- totalTickets: planResult.tickets.length,
391
- projectPath,
392
- tokensUsed: planResult.tokensUsed,
393
- cost: planResult.cost,
394
- conversationMessages: [],
395
- };
396
- }
397
352
  if (options.path) {
398
353
  const requirementsPath = join(projectPath, options.path);
399
354
  if (!existsSync(requirementsPath)) {
@@ -405,14 +360,15 @@ export async function ticketsCore(options) {
405
360
  console.log(`📄 Loaded ${options.path} (${requirementsContent.length} characters)\n`);
406
361
  }
407
362
  else {
408
- // Default to docs.md if neither prompt nor path provided
363
+ // Default to docs.md if path not provided
409
364
  const defaultPath = 'docs.md';
410
365
  const requirementsPath = join(projectPath, defaultPath);
411
366
  if (!existsSync(requirementsPath)) {
412
- throw new Error('Requirements not provided. Use either:\n' +
413
- ' --prompt="Your requirements here"\n' +
414
- ' --path=requirements.md\n' +
415
- ' Or create a docs.md file in the project directory');
367
+ throw new Error('Requirements document not found. Use either:\n' +
368
+ ' --path=requirements.md (custom file)\n' +
369
+ ' Or create a docs.md file in the project directory\n\n' +
370
+ 'For interactive ticket creation with questions, use:\n' +
371
+ ' kosuke plan --prompt="Your feature description"');
416
372
  }
417
373
  requirementsContent = readFileSync(requirementsPath, 'utf-8');
418
374
  console.log(`📄 Loaded ${defaultPath} (${requirementsContent.length} characters)\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Error handling middleware
3
+ */
4
+ import type { Request, Response, NextFunction } from 'express';
5
+ /**
6
+ * 404 handler for unknown routes
7
+ */
8
+ export declare function notFoundHandler(req: Request, res: Response): void;
9
+ /**
10
+ * Global error handler (must be registered last)
11
+ */
12
+ export declare function errorHandler(err: Error, req: Request, res: Response, _next: NextFunction): void;
13
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../kosuke/serve/middleware/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAMjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAiB/F"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Error handling middleware
3
+ */
4
+ /**
5
+ * 404 handler for unknown routes
6
+ */
7
+ export function notFoundHandler(req, res) {
8
+ res.status(404).json({
9
+ error: 'Not Found',
10
+ message: `Route ${req.method} ${req.path} not found`,
11
+ availableRoutes: ['GET /health', 'POST /api/plan'],
12
+ });
13
+ }
14
+ /**
15
+ * Global error handler (must be registered last)
16
+ */
17
+ export function errorHandler(err, req, res, _next) {
18
+ // JSON parsing errors
19
+ if (err instanceof SyntaxError && 'body' in err) {
20
+ res.status(400).json({
21
+ error: 'Invalid JSON',
22
+ message: 'Request body contains invalid JSON syntax',
23
+ details: err.message,
24
+ });
25
+ return;
26
+ }
27
+ // Generic error handler
28
+ console.error('Server error:', err);
29
+ res.status(500).json({
30
+ error: 'Internal Server Error',
31
+ message: err.message || 'An unexpected error occurred',
32
+ });
33
+ }
34
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../../kosuke/serve/middleware/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,GAAa;IACzD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,SAAS,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,YAAY;QACpD,eAAe,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACnD,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAU,EAAE,GAAY,EAAE,GAAa,EAAE,KAAmB;IACvF,sBAAsB;IACtB,IAAI,GAAG,YAAY,WAAW,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAChD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,2CAA2C;YACpD,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,8BAA8B;KACvD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generic validation middleware
3
+ */
4
+ import type { Request, Response, NextFunction } from 'express';
5
+ import { z } from 'zod';
6
+ /**
7
+ * Generic validation middleware factory
8
+ *
9
+ * Validates request body against a Zod schema and returns 400 if invalid.
10
+ * Replaces req.body with validated data on success.
11
+ */
12
+ export declare function validateRequest(schema: z.ZodSchema): (req: Request, res: Response, next: NextFunction) => void;
13
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../kosuke/serve/middleware/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,IACzC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA6B/D"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Generic validation middleware
3
+ */
4
+ /**
5
+ * Generic validation middleware factory
6
+ *
7
+ * Validates request body against a Zod schema and returns 400 if invalid.
8
+ * Replaces req.body with validated data on success.
9
+ */
10
+ export function validateRequest(schema) {
11
+ return (req, res, next) => {
12
+ try {
13
+ const result = schema.safeParse(req.body);
14
+ if (!result.success) {
15
+ // Format Zod errors into readable format
16
+ const errors = result.error.issues.map((err) => ({
17
+ field: err.path.join('.'),
18
+ message: err.message,
19
+ }));
20
+ res.status(400).json({
21
+ error: 'Validation Error',
22
+ message: 'Request validation failed',
23
+ details: errors,
24
+ });
25
+ return;
26
+ }
27
+ // Replace req.body with validated data
28
+ req.body = result.data;
29
+ next();
30
+ }
31
+ catch (error) {
32
+ res.status(500).json({
33
+ error: 'Internal Server Error',
34
+ message: error instanceof Error ? error.message : 'Unknown error',
35
+ });
36
+ }
37
+ };
38
+ }
39
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../kosuke/serve/middleware/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,yCAAyC;gBACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC/C,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBACzB,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CAAC,CAAC;gBAEJ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Build command SSE route
3
+ */
4
+ import type { Request, Response } from 'express';
5
+ export declare function buildRoute(req: Request, res: Response): Promise<void>;
6
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../kosuke/serve/routes/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOjD,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2P3E"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Build command SSE route
3
+ */
4
+ import { existsSync } from 'fs';
5
+ import { buildCoreStream } from '../../commands/build.js';
6
+ import { parseToolAction } from '../../utils/claude-agent.js';
7
+ export async function buildRoute(req, res) {
8
+ // Request body is already validated by middleware
9
+ const { cwd, ticketsFile, dbUrl, reset, review, url, headless, verbose, trace } = req.body;
10
+ // Verify directory exists
11
+ if (!existsSync(cwd)) {
12
+ res.status(400).json({
13
+ error: 'Invalid directory',
14
+ message: `Directory does not exist: ${cwd}`,
15
+ });
16
+ return;
17
+ }
18
+ // Set SSE headers
19
+ res.setHeader('Content-Type', 'text/event-stream');
20
+ res.setHeader('Cache-Control', 'no-cache');
21
+ res.setHeader('Connection', 'keep-alive');
22
+ const sendEvent = (event, data) => {
23
+ res.write(`event: ${event}\n`);
24
+ res.write(`data: ${JSON.stringify(data)}\n\n`);
25
+ };
26
+ try {
27
+ const options = {
28
+ directory: cwd,
29
+ ticketsFile,
30
+ dbUrl,
31
+ reset,
32
+ review,
33
+ url,
34
+ headless,
35
+ verbose,
36
+ trace,
37
+ // No askCommit/askConfirm in API mode (auto-commit everything)
38
+ };
39
+ const stream = buildCoreStream(options);
40
+ // Stream events to client
41
+ for await (const event of stream) {
42
+ switch (event.type) {
43
+ case 'build_started':
44
+ sendEvent('build_started', {
45
+ totalTickets: event.data.totalTickets,
46
+ ticketsFile: event.data.ticketsFile,
47
+ });
48
+ break;
49
+ case 'ticket_started':
50
+ sendEvent('ticket_started', {
51
+ ticket: event.data.ticket,
52
+ index: event.data.index,
53
+ total: event.data.total,
54
+ });
55
+ break;
56
+ case 'ticket_phase':
57
+ sendEvent('ticket_phase', {
58
+ phase: event.data.phase,
59
+ status: event.data.status,
60
+ });
61
+ break;
62
+ case 'ship_event':
63
+ // Handle nested ship events
64
+ if (event.data.type === 'message') {
65
+ const msg = event.data.data;
66
+ // Skip verbose tool results
67
+ if (msg.type === 'user' && 'tool_use_result' in msg) {
68
+ break;
69
+ }
70
+ // Skip system init
71
+ if (msg.type === 'system' && msg.subtype === 'init') {
72
+ break;
73
+ }
74
+ // Extract tool calls and text from assistant messages
75
+ if (msg.type === 'assistant' && msg.message) {
76
+ const msgData = msg.message;
77
+ if (msgData.content && Array.isArray(msgData.content)) {
78
+ let hasText = false;
79
+ for (const block of msgData.content) {
80
+ if (block.type === 'tool_use' && block.name) {
81
+ // Send tool call event
82
+ const toolInput = block.input;
83
+ const parsed = parseToolAction(block.name, toolInput);
84
+ sendEvent('ship_tool_call', {
85
+ action: parsed.action,
86
+ params: parsed.params,
87
+ });
88
+ }
89
+ else if (block.type === 'text' && block.text) {
90
+ hasText = true;
91
+ }
92
+ }
93
+ // Only forward message if it has text (skip usage-only)
94
+ if (hasText) {
95
+ sendEvent('ship_message', msg);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ else {
101
+ // Forward other ship events as-is
102
+ sendEvent(`ship_${event.data.type}`, event.data.data);
103
+ }
104
+ break;
105
+ case 'test_event':
106
+ // Handle nested test events (uses Playwright MCP, different event structure)
107
+ if (event.data.type === 'tool_executed') {
108
+ // Send tool execution as tool_call
109
+ const toolData = event.data.data;
110
+ sendEvent('test_tool_call', {
111
+ action: toolData.toolName,
112
+ params: { success: toolData.success },
113
+ });
114
+ }
115
+ else if (event.data.type === 'assistant_message') {
116
+ // Send assistant message with text (skip if empty)
117
+ const msgData = event.data.data;
118
+ if (msgData.text && msgData.text.trim()) {
119
+ sendEvent('test_message', { text: msgData.text });
120
+ }
121
+ }
122
+ else {
123
+ // Forward other test events as-is
124
+ sendEvent(`test_${event.data.type}`, event.data.data);
125
+ }
126
+ break;
127
+ case 'migrate_event':
128
+ // Handle nested migrate events
129
+ if (event.data.type === 'message') {
130
+ const msg = event.data.data;
131
+ // Skip verbose tool results
132
+ if (msg.type === 'user' && 'tool_use_result' in msg) {
133
+ break;
134
+ }
135
+ // Skip system init
136
+ if (msg.type === 'system' && msg.subtype === 'init') {
137
+ break;
138
+ }
139
+ // Extract tool calls and text from assistant messages
140
+ if (msg.type === 'assistant' && msg.message) {
141
+ const msgData = msg.message;
142
+ if (msgData.content && Array.isArray(msgData.content)) {
143
+ let hasText = false;
144
+ for (const block of msgData.content) {
145
+ if (block.type === 'tool_use' && block.name) {
146
+ // Send tool call event
147
+ const toolInput = block.input;
148
+ const parsed = parseToolAction(block.name, toolInput);
149
+ sendEvent('migrate_tool_call', {
150
+ action: parsed.action,
151
+ params: parsed.params,
152
+ });
153
+ }
154
+ else if (block.type === 'text' && block.text) {
155
+ hasText = true;
156
+ }
157
+ }
158
+ // Only forward message if it has text (skip usage-only)
159
+ if (hasText) {
160
+ sendEvent('migrate_message', msg);
161
+ }
162
+ }
163
+ }
164
+ }
165
+ else {
166
+ // Forward other migrate events as-is
167
+ sendEvent(`migrate_${event.data.type}`, event.data.data);
168
+ }
169
+ break;
170
+ case 'test_retry':
171
+ sendEvent('test_retry', {
172
+ attempt: event.data.attempt,
173
+ maxRetries: event.data.maxRetries,
174
+ error: event.data.error,
175
+ });
176
+ break;
177
+ case 'ticket_completed':
178
+ sendEvent('ticket_completed', {
179
+ ticket: event.data.ticket,
180
+ result: event.data.result,
181
+ });
182
+ break;
183
+ case 'ticket_committed':
184
+ sendEvent('ticket_committed', {
185
+ ticket: event.data.ticket,
186
+ commitMessage: event.data.commitMessage,
187
+ });
188
+ break;
189
+ case 'progress':
190
+ sendEvent('progress', {
191
+ completed: event.data.completed,
192
+ total: event.data.total,
193
+ percentage: event.data.percentage,
194
+ });
195
+ break;
196
+ case 'done':
197
+ sendEvent('done', {
198
+ success: event.data.success,
199
+ ticketsProcessed: event.data.ticketsProcessed,
200
+ ticketsSucceeded: event.data.ticketsSucceeded,
201
+ ticketsFailed: event.data.ticketsFailed,
202
+ totalCost: event.data.totalCost,
203
+ tokensUsed: event.data.tokensUsed,
204
+ });
205
+ break;
206
+ }
207
+ }
208
+ }
209
+ catch (error) {
210
+ sendEvent('done', {
211
+ success: false,
212
+ ticketsProcessed: 0,
213
+ ticketsSucceeded: 0,
214
+ ticketsFailed: 0,
215
+ totalCost: 0,
216
+ tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
217
+ error: error instanceof Error ? error.message : String(error),
218
+ });
219
+ }
220
+ finally {
221
+ res.end();
222
+ }
223
+ }
224
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../kosuke/serve/routes/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Health check route
3
+ */
4
+ import type { Request, Response } from 'express';
5
+ export declare function healthRoute(_req: Request, res: Response): void;
6
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../../kosuke/serve/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAM9D"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Health check route
3
+ */
4
+ export function healthRoute(_req, res) {
5
+ res.json({
6
+ status: 'ok',
7
+ uptime: process.uptime(),
8
+ timestamp: new Date().toISOString(),
9
+ });
10
+ }
11
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../../kosuke/serve/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,WAAW,CAAC,IAAa,EAAE,GAAa;IACtD,GAAG,CAAC,IAAI,CAAC;QACP,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Plan command SSE route
3
+ */
4
+ import type { Request, Response } from 'express';
5
+ export declare function planRoute(req: Request, res: Response): Promise<void>;
6
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../kosuke/serve/routes/plan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOjD,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiH1E"}