@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.
- package/README.md +31 -448
- package/dist/commands/auth.js +117 -0
- package/dist/generated/commands/deploy/cancel.js +17 -0
- package/dist/generated/commands/deploy/messages.js +17 -0
- package/dist/generated/commands/deploy/run.js +60 -0
- package/dist/generated/commands/index.js +132 -0
- package/dist/generated/commands/preview/get.js +25 -0
- package/dist/generated/commands/preview/health.js +25 -0
- package/dist/generated/commands/preview/reset.js +27 -0
- package/dist/generated/commands/preview/share-create.js +36 -0
- package/dist/generated/commands/preview/share-delete.js +26 -0
- package/dist/generated/commands/preview/share-get.js +26 -0
- package/dist/generated/commands/preview/shared.js +17 -0
- package/dist/generated/commands/projects/create.js +37 -0
- package/dist/generated/commands/projects/delete.js +17 -0
- package/dist/generated/commands/projects/env-vars-add.js +21 -0
- package/dist/generated/commands/projects/env-vars-remove.js +21 -0
- package/dist/generated/commands/projects/get.js +17 -0
- package/dist/generated/commands/projects/list.js +15 -0
- package/dist/generated/commands/projects/services-add.js +87 -0
- package/dist/generated/commands/projects/services-list.js +18 -0
- package/dist/generated/commands/projects/services-remove.js +19 -0
- package/dist/generated/commands/projects/services-update.js +81 -0
- package/dist/generated/commands/projects/settings-get.js +18 -0
- package/dist/generated/commands/projects/settings-import.js +91 -0
- package/dist/generated/commands/projects/settings-update.js +77 -0
- package/dist/generated/commands/projects/skills.js +35 -0
- package/dist/generated/commands/projects/update.js +27 -0
- package/dist/generated/commands/sessions/activate.js +18 -0
- package/dist/generated/commands/sessions/checklist-generate.js +19 -0
- package/dist/generated/commands/sessions/checklist-get.js +19 -0
- package/dist/generated/commands/sessions/comments-add.js +63 -0
- package/dist/generated/commands/sessions/comments-delete.js +20 -0
- package/dist/generated/commands/sessions/comments-list.js +19 -0
- package/dist/generated/commands/sessions/comments-update.js +23 -0
- package/dist/generated/commands/sessions/create.js +126 -0
- package/dist/generated/commands/sessions/delete.js +18 -0
- package/dist/generated/commands/sessions/diff-files.js +19 -0
- package/dist/generated/commands/sessions/diff-patch.js +86 -0
- package/dist/generated/commands/sessions/edit-prompt.js +59 -0
- package/dist/generated/commands/sessions/files-get.js +27 -0
- package/dist/generated/commands/sessions/files-list.js +19 -0
- package/dist/generated/commands/sessions/files-write.js +41 -0
- package/dist/generated/commands/sessions/get.js +18 -0
- package/dist/generated/commands/sessions/git-commit-message.js +19 -0
- package/dist/generated/commands/sessions/git-commit.js +29 -0
- package/dist/generated/commands/sessions/git-push.js +19 -0
- package/dist/generated/commands/sessions/git-state.js +19 -0
- package/dist/generated/commands/sessions/jobs-cancel.js +20 -0
- package/dist/generated/commands/sessions/jobs-get.js +20 -0
- package/dist/generated/commands/sessions/list.js +81 -0
- package/dist/generated/commands/sessions/messages.js +18 -0
- package/dist/generated/commands/sessions/search.js +23 -0
- package/dist/generated/commands/sessions/send.js +98 -0
- package/dist/generated/commands/sessions/update.js +72 -0
- package/dist/generated/commands/workspaces/access-status.js +29 -0
- package/dist/generated/commands/workspaces/ai-provider-get.js +18 -0
- package/dist/generated/commands/workspaces/ai-provider-remove.js +42 -0
- package/dist/generated/commands/workspaces/ai-provider-set.js +21 -0
- package/dist/generated/commands/workspaces/credits.js +17 -0
- package/dist/generated/commands/workspaces/get.js +17 -0
- package/dist/generated/commands/workspaces/getting-started-get.js +18 -0
- package/dist/generated/commands/workspaces/getting-started-update.js +32 -0
- package/dist/generated/commands/workspaces/list.js +15 -0
- package/dist/generated/commands/workspaces/members.js +25 -0
- package/dist/generated/commands/workspaces/sandbox-limit.js +17 -0
- package/dist/generated/commands/workspaces/stop-sandboxes.js +27 -0
- package/dist/generated/commands/workspaces/usage.js +32 -0
- package/dist/index.js +5 -516
- package/dist/program.js +46 -0
- package/dist/runtime/attach.js +139 -0
- package/dist/runtime/attachments.js +58 -0
- package/dist/runtime/client.js +12 -0
- package/dist/runtime/config.js +49 -0
- package/dist/runtime/credentials.js +24 -0
- package/dist/runtime/descriptor.js +7 -0
- package/dist/runtime/invoke.js +152 -0
- package/dist/runtime/runtime.js +41 -0
- package/dist/runtime/version.js +5 -0
- package/openapi.json +5222 -0
- package/package.json +21 -79
- package/LICENSE +0 -21
- package/claude.costs.json +0 -34
- package/dist/__tests__/utils/file-discovery.test.d.ts +0 -5
- package/dist/__tests__/utils/file-discovery.test.d.ts.map +0 -1
- package/dist/__tests__/utils/file-discovery.test.js +0 -51
- package/dist/__tests__/utils/file-discovery.test.js.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.d.ts +0 -5
- package/dist/__tests__/utils/logger-nologs.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.js +0 -34
- package/dist/__tests__/utils/logger-nologs.test.js.map +0 -1
- package/dist/__tests__/utils/logger.test.d.ts +0 -5
- package/dist/__tests__/utils/logger.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger.test.js +0 -243
- package/dist/__tests__/utils/logger.test.js.map +0 -1
- package/dist/__tests__/utils/validator.test.d.ts +0 -5
- package/dist/__tests__/utils/validator.test.d.ts.map +0 -1
- package/dist/__tests__/utils/validator.test.js +0 -206
- package/dist/__tests__/utils/validator.test.js.map +0 -1
- package/dist/index.d.ts +0 -35
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kosuke/commands/analyse.d.ts +0 -15
- package/dist/kosuke/commands/analyse.d.ts.map +0 -1
- package/dist/kosuke/commands/analyse.js +0 -273
- package/dist/kosuke/commands/analyse.js.map +0 -1
- package/dist/kosuke/commands/build.d.ts +0 -35
- package/dist/kosuke/commands/build.d.ts.map +0 -1
- package/dist/kosuke/commands/build.js +0 -659
- package/dist/kosuke/commands/build.js.map +0 -1
- package/dist/kosuke/commands/getcode.d.ts +0 -29
- package/dist/kosuke/commands/getcode.d.ts.map +0 -1
- package/dist/kosuke/commands/getcode.js +0 -221
- package/dist/kosuke/commands/getcode.js.map +0 -1
- package/dist/kosuke/commands/lint.d.ts +0 -21
- package/dist/kosuke/commands/lint.d.ts.map +0 -1
- package/dist/kosuke/commands/lint.js +0 -321
- package/dist/kosuke/commands/lint.js.map +0 -1
- package/dist/kosuke/commands/migrate.d.ts +0 -38
- package/dist/kosuke/commands/migrate.d.ts.map +0 -1
- package/dist/kosuke/commands/migrate.js +0 -284
- package/dist/kosuke/commands/migrate.js.map +0 -1
- package/dist/kosuke/commands/plan.d.ts +0 -28
- package/dist/kosuke/commands/plan.d.ts.map +0 -1
- package/dist/kosuke/commands/plan.js +0 -630
- package/dist/kosuke/commands/plan.js.map +0 -1
- package/dist/kosuke/commands/requirements.d.ts +0 -52
- package/dist/kosuke/commands/requirements.d.ts.map +0 -1
- package/dist/kosuke/commands/requirements.js +0 -615
- package/dist/kosuke/commands/requirements.js.map +0 -1
- package/dist/kosuke/commands/review.d.ts +0 -26
- package/dist/kosuke/commands/review.d.ts.map +0 -1
- package/dist/kosuke/commands/review.js +0 -303
- package/dist/kosuke/commands/review.js.map +0 -1
- package/dist/kosuke/commands/serve.d.ts +0 -9
- package/dist/kosuke/commands/serve.d.ts.map +0 -1
- package/dist/kosuke/commands/serve.js +0 -17
- package/dist/kosuke/commands/serve.js.map +0 -1
- package/dist/kosuke/commands/ship.d.ts +0 -37
- package/dist/kosuke/commands/ship.d.ts.map +0 -1
- package/dist/kosuke/commands/ship.js +0 -375
- package/dist/kosuke/commands/ship.js.map +0 -1
- package/dist/kosuke/commands/sync-rules.d.ts +0 -9
- package/dist/kosuke/commands/sync-rules.d.ts.map +0 -1
- package/dist/kosuke/commands/sync-rules.js +0 -379
- package/dist/kosuke/commands/sync-rules.js.map +0 -1
- package/dist/kosuke/commands/test.d.ts +0 -42
- package/dist/kosuke/commands/test.d.ts.map +0 -1
- package/dist/kosuke/commands/test.js +0 -540
- package/dist/kosuke/commands/test.js.map +0 -1
- package/dist/kosuke/commands/tickets.d.ts +0 -43
- package/dist/kosuke/commands/tickets.d.ts.map +0 -1
- package/dist/kosuke/commands/tickets.js +0 -499
- package/dist/kosuke/commands/tickets.js.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.d.ts +0 -14
- package/dist/kosuke/serve/middleware/error-handler.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.js +0 -42
- package/dist/kosuke/serve/middleware/error-handler.js.map +0 -1
- package/dist/kosuke/serve/middleware/validation.d.ts +0 -13
- package/dist/kosuke/serve/middleware/validation.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/validation.js +0 -38
- package/dist/kosuke/serve/middleware/validation.js.map +0 -1
- package/dist/kosuke/serve/routes/build.d.ts +0 -6
- package/dist/kosuke/serve/routes/build.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/build.js +0 -226
- package/dist/kosuke/serve/routes/build.js.map +0 -1
- package/dist/kosuke/serve/routes/health.d.ts +0 -6
- package/dist/kosuke/serve/routes/health.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/health.js +0 -11
- package/dist/kosuke/serve/routes/health.js.map +0 -1
- package/dist/kosuke/serve/routes/plan.d.ts +0 -6
- package/dist/kosuke/serve/routes/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/plan.js +0 -106
- package/dist/kosuke/serve/routes/plan.js.map +0 -1
- package/dist/kosuke/serve/server.d.ts +0 -16
- package/dist/kosuke/serve/server.d.ts.map +0 -1
- package/dist/kosuke/serve/server.js +0 -67
- package/dist/kosuke/serve/server.js.map +0 -1
- package/dist/kosuke/serve/validation/build.d.ts +0 -41
- package/dist/kosuke/serve/validation/build.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/build.js +0 -20
- package/dist/kosuke/serve/validation/build.js.map +0 -1
- package/dist/kosuke/serve/validation/plan.d.ts +0 -26
- package/dist/kosuke/serve/validation/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/plan.js +0 -15
- package/dist/kosuke/serve/validation/plan.js.map +0 -1
- package/dist/kosuke/types.d.ts +0 -469
- package/dist/kosuke/types.d.ts.map +0 -1
- package/dist/kosuke/types.js +0 -5
- package/dist/kosuke/types.js.map +0 -1
- package/dist/kosuke/utils/batch-creator.d.ts +0 -14
- package/dist/kosuke/utils/batch-creator.d.ts.map +0 -1
- package/dist/kosuke/utils/batch-creator.js +0 -76
- package/dist/kosuke/utils/batch-creator.js.map +0 -1
- package/dist/kosuke/utils/claude-agent.d.ts +0 -145
- package/dist/kosuke/utils/claude-agent.d.ts.map +0 -1
- package/dist/kosuke/utils/claude-agent.js +0 -504
- package/dist/kosuke/utils/claude-agent.js.map +0 -1
- package/dist/kosuke/utils/constants.d.ts +0 -40
- package/dist/kosuke/utils/constants.d.ts.map +0 -1
- package/dist/kosuke/utils/constants.js +0 -54
- package/dist/kosuke/utils/constants.js.map +0 -1
- package/dist/kosuke/utils/file-discovery.d.ts +0 -15
- package/dist/kosuke/utils/file-discovery.d.ts.map +0 -1
- package/dist/kosuke/utils/file-discovery.js +0 -80
- package/dist/kosuke/utils/file-discovery.js.map +0 -1
- package/dist/kosuke/utils/git.d.ts +0 -41
- package/dist/kosuke/utils/git.d.ts.map +0 -1
- package/dist/kosuke/utils/git.js +0 -145
- package/dist/kosuke/utils/git.js.map +0 -1
- package/dist/kosuke/utils/github.d.ts +0 -17
- package/dist/kosuke/utils/github.d.ts.map +0 -1
- package/dist/kosuke/utils/github.js +0 -22
- package/dist/kosuke/utils/github.js.map +0 -1
- package/dist/kosuke/utils/interactive-input.d.ts +0 -22
- package/dist/kosuke/utils/interactive-input.d.ts.map +0 -1
- package/dist/kosuke/utils/interactive-input.js +0 -124
- package/dist/kosuke/utils/interactive-input.js.map +0 -1
- package/dist/kosuke/utils/logger.d.ts +0 -161
- package/dist/kosuke/utils/logger.d.ts.map +0 -1
- package/dist/kosuke/utils/logger.js +0 -234
- package/dist/kosuke/utils/logger.js.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.d.ts +0 -46
- package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.js +0 -135
- package/dist/kosuke/utils/playwright-mcp-client.js.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.d.ts +0 -49
- package/dist/kosuke/utils/pr-orchestrator.d.ts.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.js +0 -154
- package/dist/kosuke/utils/pr-orchestrator.js.map +0 -1
- package/dist/kosuke/utils/repository-manager.d.ts +0 -13
- package/dist/kosuke/utils/repository-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-manager.js +0 -94
- package/dist/kosuke/utils/repository-manager.js.map +0 -1
- package/dist/kosuke/utils/repository-resolver.d.ts +0 -12
- package/dist/kosuke/utils/repository-resolver.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-resolver.js +0 -186
- package/dist/kosuke/utils/repository-resolver.js.map +0 -1
- package/dist/kosuke/utils/tickets-manager.d.ts +0 -64
- package/dist/kosuke/utils/tickets-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/tickets-manager.js +0 -331
- package/dist/kosuke/utils/tickets-manager.js.map +0 -1
- package/dist/kosuke/utils/validator.d.ts +0 -45
- package/dist/kosuke/utils/validator.d.ts.map +0 -1
- package/dist/kosuke/utils/validator.js +0 -248
- package/dist/kosuke/utils/validator.js.map +0 -1
- package/dist/lib.d.ts +0 -96
- package/dist/lib.d.ts.map +0 -1
- package/dist/lib.js +0 -95
- package/dist/lib.js.map +0 -1
- 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":"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"}
|