@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,331 +0,0 @@
1
- /**
2
- * Tickets file management utilities
3
- *
4
- * Handles loading, saving, updating, parsing, validating, and displaying tickets
5
- */
6
- import { existsSync, readFileSync, writeFileSync } from 'fs';
7
- import { runAgent } from './claude-agent.js';
8
- // ============================================================================
9
- // File Operations
10
- // ============================================================================
11
- /**
12
- * Load tickets from file
13
- */
14
- export function loadTicketsFile(ticketsPath) {
15
- if (!existsSync(ticketsPath)) {
16
- throw new Error(`Tickets file not found: ${ticketsPath}\n` +
17
- `Please generate tickets first using: kosuke tickets`);
18
- }
19
- try {
20
- const content = readFileSync(ticketsPath, 'utf-8');
21
- return JSON.parse(content);
22
- }
23
- catch (error) {
24
- throw new Error(`Failed to parse tickets file: ${error instanceof Error ? error.message : String(error)}`);
25
- }
26
- }
27
- /**
28
- * Save tickets to file
29
- */
30
- export function saveTicketsFile(ticketsPath, ticketsData) {
31
- writeFileSync(ticketsPath, JSON.stringify(ticketsData, null, 2), 'utf-8');
32
- }
33
- /**
34
- * Write tickets to a JSON file (creates new file structure)
35
- */
36
- export function writeTicketsFile(outputPath, tickets) {
37
- const outputData = {
38
- generatedAt: new Date().toISOString(),
39
- totalTickets: tickets.length,
40
- tickets,
41
- };
42
- writeFileSync(outputPath, JSON.stringify(outputData, null, 2), 'utf-8');
43
- }
44
- // ============================================================================
45
- // Ticket Lookup & Status
46
- // ============================================================================
47
- /**
48
- * Find ticket by ID
49
- */
50
- function findTicket(ticketsData, ticketId) {
51
- return ticketsData.tickets.find((t) => t.id === ticketId);
52
- }
53
- /**
54
- * Update ticket status in file
55
- */
56
- export function updateTicketStatus(ticketsPath, ticketId, status, error) {
57
- const ticketsData = loadTicketsFile(ticketsPath);
58
- const ticket = findTicket(ticketsData, ticketId);
59
- if (!ticket) {
60
- console.warn(`⚠️ Ticket ${ticketId} not found, skipping status update`);
61
- return;
62
- }
63
- ticket.status = status;
64
- if (error) {
65
- ticket.error = error;
66
- }
67
- else {
68
- delete ticket.error;
69
- }
70
- saveTicketsFile(ticketsPath, ticketsData);
71
- }
72
- // ============================================================================
73
- // Parsing & Sorting
74
- // ============================================================================
75
- /**
76
- * Parse tickets from a JSON string or response
77
- * Validates basic structure and normalizes data
78
- */
79
- export function parseTickets(response) {
80
- // Extract JSON from response (in case Claude includes extra text)
81
- const jsonMatch = response.match(/\[[\s\S]*\]/);
82
- if (!jsonMatch) {
83
- throw new Error('No JSON array found in response');
84
- }
85
- const tickets = JSON.parse(jsonMatch[0]);
86
- if (!Array.isArray(tickets)) {
87
- throw new Error(`Expected array of tickets, got ${typeof tickets}`);
88
- }
89
- const validTypes = ['schema', 'engine', 'backend', 'frontend', 'test'];
90
- for (const ticket of tickets) {
91
- if (!ticket.id || !ticket.title || !ticket.description) {
92
- throw new Error(`Invalid ticket structure: ${JSON.stringify(ticket)}`);
93
- }
94
- if (!ticket.type || !validTypes.includes(ticket.type)) {
95
- throw new Error(`Invalid or missing type for ticket ${ticket.id}: ${ticket.type}`);
96
- }
97
- if (typeof ticket.estimatedEffort !== 'number' ||
98
- ticket.estimatedEffort < 1 ||
99
- ticket.estimatedEffort > 10) {
100
- throw new Error(`Invalid estimatedEffort for ticket ${ticket.id}: ${ticket.estimatedEffort}`);
101
- }
102
- if (!ticket.status) {
103
- ticket.status = 'Todo';
104
- }
105
- }
106
- return tickets;
107
- }
108
- /**
109
- * Sort tickets by processing order
110
- */
111
- export function sortTicketsByOrder(tickets) {
112
- return [...tickets].sort((a, b) => {
113
- const getPhaseOrder = (id) => {
114
- const upper = id.toUpperCase();
115
- // SCAFFOLD batch first: schema → engine → backend → frontend → test
116
- if (upper.startsWith('SCAFFOLD-SCHEMA-'))
117
- return 1;
118
- if (upper.startsWith('SCAFFOLD-ENGINE-'))
119
- return 2;
120
- if (upper.startsWith('SCAFFOLD-BACKEND-'))
121
- return 3;
122
- if (upper.startsWith('SCAFFOLD-FRONTEND-'))
123
- return 4;
124
- if (upper.startsWith('SCAFFOLD-WEB-TEST-'))
125
- return 5;
126
- // LOGIC batch second: schema → engine → backend → frontend → test
127
- if (upper.startsWith('LOGIC-SCHEMA-'))
128
- return 6;
129
- if (upper.startsWith('LOGIC-ENGINE-'))
130
- return 7;
131
- if (upper.startsWith('LOGIC-BACKEND-'))
132
- return 8;
133
- if (upper.startsWith('LOGIC-FRONTEND-'))
134
- return 9;
135
- if (upper.startsWith('LOGIC-WEB-TEST-'))
136
- return 10;
137
- // PLAN batch (from plan command): schema → engine → backend → frontend → test
138
- if (upper.startsWith('PLAN-SCHEMA-'))
139
- return 11;
140
- if (upper.startsWith('PLAN-ENGINE-'))
141
- return 12;
142
- if (upper.startsWith('PLAN-BACKEND-'))
143
- return 13;
144
- if (upper.startsWith('PLAN-FRONTEND-'))
145
- return 14;
146
- if (upper.startsWith('PLAN-WEB-TEST-'))
147
- return 15;
148
- return 16;
149
- };
150
- return getPhaseOrder(a.id) - getPhaseOrder(b.id);
151
- });
152
- }
153
- // ============================================================================
154
- // Validation
155
- // ============================================================================
156
- /**
157
- * Build the review/fix prompt for ticket validation
158
- */
159
- function buildReviewPrompt(tickets) {
160
- return `You are a ticket validation and correction expert.
161
-
162
- **Generated Tickets to Review:**
163
- ${JSON.stringify(tickets, null, 2)}
164
-
165
- **Your Task: VALIDATE AND FIX the tickets according to these rules:**
166
-
167
- **RULE 1: ONE Schema Ticket Per Batch**
168
- - Each batch (SCAFFOLD, LOGIC, or simple SCHEMA) should have at most ONE schema ticket
169
- - If multiple schema tickets exist, merge them into one
170
- - ❌ WRONG: SCHEMA-1, SCHEMA-2, SCHEMA-3
171
- - ✅ CORRECT: SCHEMA-1 (combines ALL schemas)
172
-
173
- **RULE 2: Feature-by-Feature Ordering**
174
- Each feature should follow this pattern when possible:
175
- 1. Backend ticket
176
- 2. Frontend ticket
177
- 3. Test ticket (if applicable)
178
-
179
- **RULE 3: Sequential Numbering**
180
- - Ensure ticket IDs are numbered sequentially
181
- - Example: BACKEND-1, BACKEND-2 (not BACKEND-1, BACKEND-5)
182
-
183
- **RULE 4: Test Tickets Must Include Credentials**
184
- - Every WEB-TEST ticket should include test user credentials if available
185
- - Format: "**Test User Credentials:**\\n- Email: user+kosuke_test@example.com\\n- OTP Code: 424242"
186
-
187
- **AUTOMATIC FIXES TO APPLY:**
188
-
189
- 1. **Combine Schema Tickets** if multiple exist
190
- 2. **Reorder Tickets** to follow feature-by-feature pattern
191
- 3. **Renumber Ticket IDs** to be sequential
192
- 4. **Add placeholder credentials** to test tickets if missing
193
-
194
- **OUTPUT FORMAT:**
195
- Return ONLY a valid JSON object with this exact structure:
196
- {
197
- "validationIssues": [
198
- "Issue 1 found and fixed",
199
- "Issue 2 found and fixed"
200
- ],
201
- "fixedTickets": [
202
- { /* all ticket objects in corrected order */ }
203
- ]
204
- }
205
-
206
- **CRITICAL:**
207
- - Return ONLY valid JSON (no markdown, no code blocks)
208
- - fixedTickets array must contain ALL tickets
209
- - Preserve all ticket content (descriptions, effort, category)
210
- - Only fix structure, ordering, and numbering issues
211
- - If no issues found, return empty validationIssues with original tickets`;
212
- }
213
- /**
214
- * Validate and fix tickets using Claude
215
- * Returns fixed tickets and list of issues found
216
- */
217
- export async function validateAndFixTickets(tickets, projectPath) {
218
- console.log(`\n${'─'.repeat(60)}`);
219
- console.log('🔍 Validating ticket structure...');
220
- console.log(`${'─'.repeat(60)}\n`);
221
- const reviewPrompt = buildReviewPrompt(tickets);
222
- const reviewResult = await runAgent('Validate and fix ticket structure', {
223
- systemPrompt: reviewPrompt,
224
- maxTurns: 10,
225
- verbosity: 'minimal',
226
- cwd: projectPath,
227
- });
228
- try {
229
- const jsonMatch = reviewResult.response.match(/\{[\s\S]*"fixedTickets"[\s\S]*\}/);
230
- if (!jsonMatch) {
231
- throw new Error('No valid review result found');
232
- }
233
- const parsed = JSON.parse(jsonMatch[0]);
234
- if (!parsed.fixedTickets || !Array.isArray(parsed.fixedTickets)) {
235
- throw new Error('Invalid review result: fixedTickets must be an array');
236
- }
237
- // Validate fixed tickets
238
- const validTypes = ['schema', 'engine', 'backend', 'frontend', 'test'];
239
- for (const ticket of parsed.fixedTickets) {
240
- if (!ticket.id || !ticket.title || !ticket.description || !ticket.type) {
241
- throw new Error(`Invalid ticket in review result: ${JSON.stringify(ticket)}`);
242
- }
243
- if (!validTypes.includes(ticket.type)) {
244
- throw new Error(`Invalid type in ticket ${ticket.id}: ${ticket.type}`);
245
- }
246
- // Ensure status is set
247
- if (!ticket.status) {
248
- ticket.status = 'Todo';
249
- }
250
- }
251
- // Display validation results
252
- if (parsed.validationIssues.length > 0) {
253
- console.log('🔧 Issues found and fixed:');
254
- parsed.validationIssues.forEach((issue, idx) => {
255
- console.log(` ${idx + 1}. ${issue}`);
256
- });
257
- console.log('');
258
- }
259
- else {
260
- console.log('✅ No validation issues - tickets are correctly structured\n');
261
- }
262
- return parsed;
263
- }
264
- catch (error) {
265
- // If validation fails, return original tickets with warning
266
- console.warn('⚠️ Ticket validation failed, using original tickets');
267
- console.warn(` Error: ${error instanceof Error ? error.message : String(error)}\n`);
268
- return {
269
- validationIssues: [],
270
- fixedTickets: tickets,
271
- };
272
- }
273
- }
274
- // ============================================================================
275
- // Display
276
- // ============================================================================
277
- /**
278
- * Display tickets summary to console
279
- */
280
- export function displayTicketsSummary(tickets) {
281
- console.log(`\n${'='.repeat(60)}`);
282
- console.log('📋 Tickets Created');
283
- console.log(`${'='.repeat(60)}\n`);
284
- for (const ticket of tickets) {
285
- const emoji = ticket.type === 'schema'
286
- ? '🗄️'
287
- : ticket.type === 'engine'
288
- ? '🐍'
289
- : ticket.type === 'backend'
290
- ? '⚙️'
291
- : ticket.type === 'frontend'
292
- ? '🎨'
293
- : '🧪';
294
- console.log(`${emoji} ${ticket.id}: ${ticket.title}`);
295
- console.log(` Type: ${ticket.type} | Effort: ${ticket.estimatedEffort}/10`);
296
- if (ticket.category) {
297
- console.log(` Category: ${ticket.category}`);
298
- }
299
- console.log('');
300
- }
301
- console.log(`${'='.repeat(60)}`);
302
- console.log(`✅ Total: ${tickets.length} ticket(s)`);
303
- console.log(`${'='.repeat(60)}\n`);
304
- }
305
- // ============================================================================
306
- // Pipeline
307
- // ============================================================================
308
- /**
309
- * Full pipeline: parse, validate, sort, and write tickets
310
- * Used by both plan.ts and tickets.ts
311
- */
312
- export async function processAndWriteTickets(rawTickets, outputPath, projectPath, options = {}) {
313
- const { skipValidation = false, displaySummary = true } = options;
314
- let finalTickets = sortTicketsByOrder(rawTickets);
315
- let validationIssues = [];
316
- // Run validation unless skipped
317
- if (!skipValidation) {
318
- const reviewResult = await validateAndFixTickets(finalTickets, projectPath);
319
- finalTickets = reviewResult.fixedTickets;
320
- validationIssues = reviewResult.validationIssues;
321
- }
322
- // Display summary
323
- if (displaySummary) {
324
- displayTicketsSummary(finalTickets);
325
- }
326
- // Write to file
327
- writeTicketsFile(outputPath, finalTickets);
328
- console.log(`💾 Saved to: ${outputPath}\n`);
329
- return { tickets: finalTickets, validationIssues };
330
- }
331
- //# sourceMappingURL=tickets-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tickets-manager.js","sourceRoot":"","sources":["../../../kosuke/utils/tickets-manager.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- /**
2
- * Code validation utilities (lint, typecheck, format)
3
- */
4
- export interface ValidationResult {
5
- success: boolean;
6
- output?: string;
7
- error?: string;
8
- warning?: string;
9
- }
10
- interface PackageJson {
11
- scripts?: Record<string, string>;
12
- }
13
- /**
14
- * Detect package manager based on lock files
15
- */
16
- export declare function detectPackageManager(cwd?: string): string;
17
- /**
18
- * Read package.json and extract scripts
19
- */
20
- export declare function readPackageJsonScripts(cwd?: string): PackageJson['scripts'] | null;
21
- /**
22
- * Run formatting using detected package manager and scripts
23
- */
24
- export declare function runFormat(cwd?: string): Promise<ValidationResult>;
25
- /**
26
- * Run linting using detected package manager and scripts
27
- */
28
- export declare function runLint(cwd?: string): Promise<ValidationResult>;
29
- /**
30
- * Run TypeScript type checking using detected package manager
31
- */
32
- export declare function runTypecheck(cwd?: string): Promise<ValidationResult>;
33
- /**
34
- * Run tests using package.json test script
35
- */
36
- export declare function runTests(cwd?: string): Promise<ValidationResult>;
37
- /**
38
- * Run comprehensive linting and fixing
39
- */
40
- export declare function runComprehensiveLinting(cwd?: string): Promise<{
41
- success: boolean;
42
- fixCount: number;
43
- }>;
44
- export {};
45
- //# sourceMappingURL=validator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAQxE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAsB,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAcjG;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoCtF;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuCpF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoCzF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2BrF;AAOD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAmFjD"}
@@ -1,248 +0,0 @@
1
- /**
2
- * Code validation utilities (lint, typecheck, format)
3
- */
4
- import { execSync } from 'child_process';
5
- import { existsSync, readFileSync } from 'fs';
6
- import { join } from 'path';
7
- /**
8
- * Detect package manager based on lock files
9
- */
10
- export function detectPackageManager(cwd = process.cwd()) {
11
- if (existsSync(join(cwd, 'bun.lockb')))
12
- return 'bun';
13
- if (existsSync(join(cwd, 'pnpm-lock.yaml')))
14
- return 'pnpm';
15
- if (existsSync(join(cwd, 'yarn.lock')))
16
- return 'yarn';
17
- if (existsSync(join(cwd, 'package-lock.json')))
18
- return 'npm';
19
- // Default to npm if no lock file found
20
- return 'npm';
21
- }
22
- /**
23
- * Read package.json and extract scripts
24
- */
25
- export function readPackageJsonScripts(cwd = process.cwd()) {
26
- const packageJsonPath = join(cwd, 'package.json');
27
- if (!existsSync(packageJsonPath)) {
28
- return null;
29
- }
30
- try {
31
- const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
32
- return packageJson.scripts || null;
33
- }
34
- catch (error) {
35
- console.warn(`⚠️ Failed to parse package.json: ${error}`);
36
- return null;
37
- }
38
- }
39
- /**
40
- * Run formatting using detected package manager and scripts
41
- */
42
- export async function runFormat(cwd = process.cwd()) {
43
- const scripts = readPackageJsonScripts(cwd);
44
- if (!scripts) {
45
- return {
46
- success: false,
47
- error: 'package.json not found or has no scripts section',
48
- };
49
- }
50
- if (!scripts.format) {
51
- return {
52
- success: true,
53
- warning: `⚠️ No 'format' script found in package.json. Skipping formatting.\n💡 Hint: kosuke-template uses: "format": "prettier --write ."`,
54
- };
55
- }
56
- const packageManager = detectPackageManager(cwd);
57
- const command = `${packageManager} run format`;
58
- try {
59
- const output = execSync(command, {
60
- cwd,
61
- encoding: 'utf-8',
62
- stdio: 'pipe',
63
- });
64
- return { success: true, output };
65
- }
66
- catch (error) {
67
- const err = error;
68
- const errorMessage = err.stdout || err.stderr || err.message || '';
69
- return {
70
- success: false,
71
- error: `$ ${command}\n\n${errorMessage}`,
72
- };
73
- }
74
- }
75
- /**
76
- * Run linting using detected package manager and scripts
77
- */
78
- export async function runLint(cwd = process.cwd()) {
79
- const scripts = readPackageJsonScripts(cwd);
80
- if (!scripts) {
81
- return {
82
- success: false,
83
- error: 'package.json not found or has no scripts section',
84
- };
85
- }
86
- if (!scripts.lint) {
87
- return {
88
- success: true,
89
- warning: `⚠️ No 'lint' script found in package.json. Skipping linting.\n💡 Hint: kosuke-template uses: "lint": "eslint . --ext .js,.jsx,.ts,.tsx --max-warnings 0"`,
90
- };
91
- }
92
- const packageManager = detectPackageManager(cwd);
93
- // Try to append --fix flag for auto-fixing
94
- // Note: This works with most linters (eslint, biome, etc.)
95
- const command = `${packageManager} run lint -- --fix`;
96
- try {
97
- const output = execSync(command, {
98
- cwd,
99
- encoding: 'utf-8',
100
- stdio: 'pipe',
101
- });
102
- return { success: true, output };
103
- }
104
- catch (error) {
105
- const err = error;
106
- const errorMessage = err.stdout || err.stderr || err.message || '';
107
- return {
108
- success: false,
109
- error: `$ ${command}\n\n${errorMessage}`,
110
- };
111
- }
112
- }
113
- /**
114
- * Run TypeScript type checking using detected package manager
115
- */
116
- export async function runTypecheck(cwd = process.cwd()) {
117
- const scripts = readPackageJsonScripts(cwd);
118
- if (!scripts) {
119
- return {
120
- success: false,
121
- error: 'package.json not found or has no scripts section',
122
- };
123
- }
124
- if (!scripts.typecheck) {
125
- return {
126
- success: true,
127
- warning: `⚠️ No 'typecheck' script found in package.json. Skipping type checking.\n💡 Hint: kosuke-template uses: "typecheck": "tsc --noEmit"`,
128
- };
129
- }
130
- const packageManager = detectPackageManager(cwd);
131
- const command = `${packageManager} run typecheck`;
132
- try {
133
- const output = execSync(command, {
134
- cwd,
135
- encoding: 'utf-8',
136
- stdio: 'pipe',
137
- });
138
- return { success: true, output };
139
- }
140
- catch (error) {
141
- const err = error;
142
- const errorMessage = err.stdout || err.stderr || err.message || '';
143
- return {
144
- success: false,
145
- error: `$ ${command}\n\n${errorMessage}`,
146
- };
147
- }
148
- }
149
- /**
150
- * Run tests using package.json test script
151
- */
152
- export async function runTests(cwd = process.cwd()) {
153
- const scripts = readPackageJsonScripts(cwd);
154
- if (!scripts || !scripts.test) {
155
- return {
156
- success: true,
157
- warning: '⚠️ No test script found in package.json. Skipping tests.',
158
- };
159
- }
160
- const packageManager = detectPackageManager(cwd);
161
- const command = `${packageManager} run test`;
162
- try {
163
- const output = execSync(command, {
164
- cwd,
165
- encoding: 'utf-8',
166
- stdio: 'pipe',
167
- });
168
- return { success: true, output };
169
- }
170
- catch (error) {
171
- const err = error;
172
- return {
173
- success: false,
174
- error: `$ ${command}\n\n${err.stdout || err.stderr || err.message}`,
175
- };
176
- }
177
- }
178
- /**
179
- * Run comprehensive linting and fixing
180
- */
181
- export async function runComprehensiveLinting(cwd = process.cwd()) {
182
- console.log('\n🔍 Running comprehensive code quality checks...\n');
183
- const validationSteps = [
184
- { name: '🎨 Format', run: () => runFormat(cwd) },
185
- { name: '🔍 Lint', run: () => runLint(cwd) },
186
- { name: '🔎 TypeCheck', run: () => runTypecheck(cwd) },
187
- { name: '🧪 Tests', run: () => runTests(cwd) },
188
- ];
189
- let totalFixCount = 0;
190
- // Run each validation step
191
- for (const step of validationSteps) {
192
- console.log(`\n${'='.repeat(60)}`);
193
- console.log(`Running: ${step.name}`);
194
- console.log(`${'='.repeat(60)}\n`);
195
- let result = await step.run();
196
- // Handle warnings (non-blocking)
197
- if (result.warning) {
198
- console.log(result.warning);
199
- console.log(`✅ ${step.name} - SKIPPED\n`);
200
- continue;
201
- }
202
- // Handle success
203
- if (result.success) {
204
- console.log(`✅ ${step.name} - PASSED\n`);
205
- continue;
206
- }
207
- // Handle errors - attempt to fix
208
- console.log(`❌ ${step.name} - FAILED:\n`);
209
- console.log(result.error);
210
- // Attempt to fix errors with Claude (max 3 attempts per step)
211
- let attemptCount = 0;
212
- const maxAttempts = 3;
213
- while (!result.success && attemptCount < maxAttempts) {
214
- attemptCount++;
215
- console.log(`\n${'='.repeat(60)}`);
216
- console.log(`🔄 ${step.name} Fix Attempt ${attemptCount}/${maxAttempts}`);
217
- console.log(`${'='.repeat(60)}`);
218
- const { fixCodeQualityErrors } = await import('../commands/lint.js');
219
- const fixApplied = await fixCodeQualityErrors(step.name, result.error || '', cwd);
220
- if (!fixApplied) {
221
- console.log(`\n⚠️ No fixes were applied by Claude for ${step.name}`);
222
- break;
223
- }
224
- totalFixCount++;
225
- // Verify fixes by running validation again
226
- console.log(`\n🔍 Verifying ${step.name} fixes...\n`);
227
- result = await step.run();
228
- if (result.success) {
229
- console.log(`✅ ${step.name} - All errors fixed!\n`);
230
- break;
231
- }
232
- else {
233
- const errorLines = result.error?.split('\n').length || 0;
234
- console.log(`\n⚠️ Some ${step.name} errors remain (${errorLines} lines):`);
235
- console.log(result.error);
236
- }
237
- }
238
- // Check if step still has errors after attempts
239
- if (!result.success) {
240
- throw new Error(`${step.name} errors remain after ${maxAttempts} attempts. Cannot proceed.`);
241
- }
242
- }
243
- console.log('\n' + '='.repeat(60));
244
- console.log('✅ All validation steps passed!');
245
- console.log('='.repeat(60));
246
- return { success: true, fixCount: totalFixCount };
247
- }
248
- //# sourceMappingURL=validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../kosuke/utils/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAa5B;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC9D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACtD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7D,uCAAuC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACpF,OAAO,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACzD,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,kDAAkD;SAC1D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,mIAAmI;SAC7I,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,GAAG,cAAc,aAAa,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAA+D,CAAC;QAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAEnE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,OAAO,OAAO,YAAY,EAAE;SACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACvD,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,kDAAkD;SAC1D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,2JAA2J;SACrK,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAEjD,2CAA2C;IAC3C,2DAA2D;IAC3D,MAAM,OAAO,GAAG,GAAG,cAAc,oBAAoB,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAA+D,CAAC;QAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAEnE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,OAAO,OAAO,YAAY,EAAE;SACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC5D,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,kDAAkD;SAC1D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,sIAAsI;SAChJ,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,GAAG,cAAc,gBAAgB,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAA+D,CAAC;QAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAEnE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,OAAO,OAAO,YAAY,EAAE;SACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACxD,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,2DAA2D;SACrE,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,GAAG,cAAc,WAAW,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAA+D,CAAC;QAC5E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,OAAO,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;SACpE,CAAC;IACJ,CAAC;AACH,CAAC;AAOD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IAEnE,MAAM,eAAe,GAAqB;QACxC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QAChD,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5C,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;QACtD,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;KAC/C,CAAC;IAEF,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,2BAA2B;IAC3B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAE9B,iCAAiC;QACjC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,iBAAiB;QACjB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QAED,iCAAiC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1B,8DAA8D;QAC9D,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,WAAW,GAAG,CAAC,CAAC;QAEtB,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,YAAY,GAAG,WAAW,EAAE,CAAC;YACrD,YAAY,EAAE,CAAC;YAEf,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,gBAAgB,YAAY,IAAI,WAAW,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAEjC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;YAElF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtE,MAAM;YACR,CAAC;YAED,aAAa,EAAE,CAAC;YAEhB,2CAA2C;YAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;YACtD,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YAE1B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAC;gBACpD,MAAM;YACR,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,mBAAmB,UAAU,UAAU,CAAC,CAAC;gBAC5E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,wBAAwB,WAAW,4BAA4B,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACpD,CAAC"}