@electriccitizen/bolt 0.1.0 → 0.2.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 +93 -14
- package/dist/ai/agent.d.ts +66 -0
- package/dist/ai/agent.js +232 -0
- package/dist/ai/agent.js.map +1 -0
- package/dist/ai/knowledge/composer.md +90 -0
- package/dist/ai/knowledge/config-safety.md +46 -0
- package/dist/ai/knowledge/ddev-operations.md +41 -0
- package/dist/ai/knowledge/drupal-internals.md +52 -0
- package/dist/ai/knowledge/drupal-updates.md +90 -0
- package/dist/ai/knowledge/knowledge/composer.md +90 -0
- package/dist/ai/knowledge/knowledge/config-safety.md +46 -0
- package/dist/ai/knowledge/knowledge/ddev-operations.md +41 -0
- package/dist/ai/knowledge/knowledge/drupal-debugging.md +89 -0
- package/dist/ai/knowledge/knowledge/drupal-internals.md +52 -0
- package/dist/ai/knowledge/knowledge/drupal-updates.md +90 -0
- package/dist/ai/prompts/analyze-ticket.d.ts +30 -0
- package/dist/ai/prompts/analyze-ticket.js +116 -0
- package/dist/ai/prompts/analyze-ticket.js.map +1 -0
- package/dist/ai/prompts/fix-ticket.d.ts +27 -0
- package/dist/ai/prompts/fix-ticket.js +129 -0
- package/dist/ai/prompts/fix-ticket.js.map +1 -0
- package/dist/ai/prompts/pr-description.d.ts +19 -0
- package/dist/ai/prompts/pr-description.js +56 -0
- package/dist/ai/prompts/pr-description.js.map +1 -0
- package/dist/ai/prompts/update-package.d.ts +25 -0
- package/dist/ai/prompts/update-package.js +87 -0
- package/dist/ai/prompts/update-package.js.map +1 -0
- package/dist/ai/prompts/update-plan.d.ts +20 -0
- package/dist/ai/prompts/update-plan.js +66 -0
- package/dist/ai/prompts/update-plan.js.map +1 -0
- package/dist/ai/schemas/analysis-result.d.ts +44 -0
- package/dist/ai/schemas/analysis-result.js +101 -0
- package/dist/ai/schemas/analysis-result.js.map +1 -0
- package/dist/ai/schemas/fix-result.d.ts +34 -0
- package/dist/ai/schemas/fix-result.js +55 -0
- package/dist/ai/schemas/fix-result.js.map +1 -0
- package/dist/ai/schemas/pr-body.d.ts +12 -0
- package/dist/ai/schemas/pr-body.js +18 -0
- package/dist/ai/schemas/pr-body.js.map +1 -0
- package/dist/ai/schemas/update-plan.d.ts +20 -0
- package/dist/ai/schemas/update-plan.js +33 -0
- package/dist/ai/schemas/update-plan.js.map +1 -0
- package/dist/ai/schemas/update-result.d.ts +22 -0
- package/dist/ai/schemas/update-result.js +30 -0
- package/dist/ai/schemas/update-result.js.map +1 -0
- package/dist/cli.js +63 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +25 -0
- package/dist/commands/analyze.js +377 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/doctor.js +61 -13
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/fix.d.ts +35 -0
- package/dist/commands/fix.js +480 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/init.d.ts +3 -2
- package/dist/commands/init.js +117 -160
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pr.d.ts +4 -0
- package/dist/commands/pr.js +121 -3
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/refresh.js +10 -57
- package/dist/commands/refresh.js.map +1 -1
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.js +463 -64
- package/dist/commands/update.js.map +1 -1
- package/dist/config.d.ts +16 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -1
- package/dist/runner.js +12 -0
- package/dist/runner.js.map +1 -1
- package/dist/safety.d.ts +63 -0
- package/dist/safety.js +192 -0
- package/dist/safety.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/package.json +2 -3
- package/modules/bolt_inspect/bolt_inspect.info.yml +0 -6
- package/modules/bolt_inspect/bolt_inspect.services.yml +0 -22
- package/modules/bolt_inspect/composer.json +0 -16
- package/modules/bolt_inspect/drush.services.yml +0 -10
- package/modules/bolt_inspect/src/Drush/Commands/BoltInspectCommands.php +0 -203
- package/modules/bolt_inspect/src/Service/ContentGenerator.php +0 -586
- package/modules/bolt_inspect/src/Service/SiteProfiler.php +0 -362
- package/modules/bolt_inspect/src/Service/TestEntityTracker.php +0 -98
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bolt analyze — AI-powered ticket analysis.
|
|
3
|
+
*
|
|
4
|
+
* Reads a Jira ticket (or manual description), examines the site profile,
|
|
5
|
+
* and produces a detailed investigation plan with likely causes, specific
|
|
6
|
+
* commands, and a confidence assessment for autonomous fixing.
|
|
7
|
+
*/
|
|
8
|
+
import { execFile } from 'child_process';
|
|
9
|
+
import { promisify } from 'util';
|
|
10
|
+
import { writeFileSync } from 'fs';
|
|
11
|
+
import { isClaudeAvailable, runAgent } from '../ai/agent.js';
|
|
12
|
+
import { buildAnalyzeTicketTask } from '../ai/prompts/analyze-ticket.js';
|
|
13
|
+
import { validateAnalysisResult } from '../ai/schemas/analysis-result.js';
|
|
14
|
+
import { DdevAdapter } from '../adapters/ddev.js';
|
|
15
|
+
const execFileAsync = promisify(execFile);
|
|
16
|
+
function log(msg) {
|
|
17
|
+
process.stderr.write(` ${msg}\n`);
|
|
18
|
+
}
|
|
19
|
+
function logOk(msg) {
|
|
20
|
+
process.stderr.write(` ✓ ${msg}\n`);
|
|
21
|
+
}
|
|
22
|
+
function logFail(msg) {
|
|
23
|
+
process.stderr.write(` ✗ ${msg}\n`);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Fetch a Jira ticket via the Claude subprocess with MCP access.
|
|
27
|
+
* Returns ticket data or null if MCP is unavailable.
|
|
28
|
+
*/
|
|
29
|
+
async function fetchJiraTicket(ticketKey, cloudId) {
|
|
30
|
+
// Use Claude subprocess to access Jira MCP — the subprocess inherits MCP config.
|
|
31
|
+
const prompt = [
|
|
32
|
+
`Fetch Jira ticket ${ticketKey} and return the result as JSON.`,
|
|
33
|
+
'',
|
|
34
|
+
`Use the mcp__atlassian__getJiraIssue tool with cloudId "${cloudId}" and issueIdOrKey "${ticketKey}".`,
|
|
35
|
+
'',
|
|
36
|
+
'Return a JSON code block with this exact format:',
|
|
37
|
+
'```json',
|
|
38
|
+
'{',
|
|
39
|
+
' "summary": "ticket summary/title",',
|
|
40
|
+
' "description": "full ticket description text",',
|
|
41
|
+
' "type": "Bug/Task/Story/etc",',
|
|
42
|
+
' "priority": "High/Medium/Low/etc",',
|
|
43
|
+
' "comments": ["comment 1 text", "comment 2 text"]',
|
|
44
|
+
'}',
|
|
45
|
+
'```',
|
|
46
|
+
'',
|
|
47
|
+
'If the ticket has no description, use an empty string.',
|
|
48
|
+
'For comments, include the text body of each comment. If none, use an empty array.',
|
|
49
|
+
'Do not include any text after the JSON block.',
|
|
50
|
+
].join('\n');
|
|
51
|
+
try {
|
|
52
|
+
const result = await runAgent({
|
|
53
|
+
goal: prompt,
|
|
54
|
+
context: {},
|
|
55
|
+
knowledge: [],
|
|
56
|
+
outputFormat: '{ "summary": "string", "description": "string", "type": "string", "priority": "string", "comments": ["string"] }',
|
|
57
|
+
maxTurns: 5,
|
|
58
|
+
timeout: 30_000,
|
|
59
|
+
allowedTools: [
|
|
60
|
+
'mcp__atlassian__getJiraIssue',
|
|
61
|
+
'mcp__atlassian__getJiraIssueRemoteIssueLinks',
|
|
62
|
+
],
|
|
63
|
+
});
|
|
64
|
+
if (!result.success || !result.output)
|
|
65
|
+
return null;
|
|
66
|
+
const out = result.output;
|
|
67
|
+
return {
|
|
68
|
+
summary: String(out.summary ?? ''),
|
|
69
|
+
description: String(out.description ?? ''),
|
|
70
|
+
type: String(out.type ?? 'Bug'),
|
|
71
|
+
priority: String(out.priority ?? 'Medium'),
|
|
72
|
+
comments: Array.isArray(out.comments)
|
|
73
|
+
? out.comments.filter((c) => typeof c === 'string')
|
|
74
|
+
: [],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get the site profile via DDEV adapter.
|
|
83
|
+
*/
|
|
84
|
+
async function getSiteProfile() {
|
|
85
|
+
const adapter = new DdevAdapter();
|
|
86
|
+
try {
|
|
87
|
+
const result = await adapter.drush('bolt-inspect:profile', []);
|
|
88
|
+
if (result.exitCode !== 0)
|
|
89
|
+
return null;
|
|
90
|
+
return JSON.parse(result.stdout);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get recent git log.
|
|
98
|
+
*/
|
|
99
|
+
async function getRecentGitLog() {
|
|
100
|
+
try {
|
|
101
|
+
const { stdout } = await execFileAsync('git', ['log', '--oneline', '-20'], {
|
|
102
|
+
timeout: 10_000,
|
|
103
|
+
});
|
|
104
|
+
return stdout.trim();
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return '';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Read stdin if piped (non-TTY).
|
|
112
|
+
*/
|
|
113
|
+
async function readStdin() {
|
|
114
|
+
if (process.stdin.isTTY)
|
|
115
|
+
return '';
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
const chunks = [];
|
|
118
|
+
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
119
|
+
process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8').trim()));
|
|
120
|
+
// Timeout after 1s if nothing is piped.
|
|
121
|
+
setTimeout(() => resolve(''), 1_000);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Format analysis result as text output.
|
|
126
|
+
*/
|
|
127
|
+
function formatText(result) {
|
|
128
|
+
const lines = [];
|
|
129
|
+
// Header.
|
|
130
|
+
const key = result.ticket.key !== 'MANUAL' ? result.ticket.key : '';
|
|
131
|
+
const header = key
|
|
132
|
+
? `Ticket: ${key} — ${result.ticket.summary}`
|
|
133
|
+
: `Analysis: ${result.ticket.summary}`;
|
|
134
|
+
lines.push(header);
|
|
135
|
+
lines.push(`Priority: ${result.ticket.priority} | Type: ${result.ticket.type}`);
|
|
136
|
+
lines.push('');
|
|
137
|
+
// Problem summary.
|
|
138
|
+
lines.push('━━━ Problem Summary ━━━');
|
|
139
|
+
lines.push(result.problemSummary);
|
|
140
|
+
lines.push('');
|
|
141
|
+
// Likely causes.
|
|
142
|
+
lines.push('━━━ Likely Causes ━━━');
|
|
143
|
+
for (const cause of result.likelyCauses) {
|
|
144
|
+
lines.push(`${cause.probability.charAt(0).toUpperCase() + cause.probability.slice(1)} [${cause.category}]: ${cause.description}`);
|
|
145
|
+
}
|
|
146
|
+
lines.push('');
|
|
147
|
+
// Investigation steps.
|
|
148
|
+
lines.push('━━━ Investigation Steps ━━━');
|
|
149
|
+
for (const step of result.investigationSteps) {
|
|
150
|
+
lines.push(`${step.order}. ${step.description}`);
|
|
151
|
+
if (step.command)
|
|
152
|
+
lines.push(` $ ${step.command}`);
|
|
153
|
+
if (step.file)
|
|
154
|
+
lines.push(` → ${step.file}`);
|
|
155
|
+
}
|
|
156
|
+
lines.push('');
|
|
157
|
+
// Risk assessment.
|
|
158
|
+
if (result.riskAssessment) {
|
|
159
|
+
lines.push('━━━ Risk Assessment ━━━');
|
|
160
|
+
lines.push(result.riskAssessment);
|
|
161
|
+
lines.push('');
|
|
162
|
+
}
|
|
163
|
+
// Related modules.
|
|
164
|
+
if (result.relatedModules.length > 0) {
|
|
165
|
+
lines.push(`Related modules: ${result.relatedModules.join(', ')}`);
|
|
166
|
+
lines.push('');
|
|
167
|
+
}
|
|
168
|
+
// Suggested tests.
|
|
169
|
+
if (result.suggestedTests.plugins.length > 0) {
|
|
170
|
+
const cmd = ['bolt test'];
|
|
171
|
+
cmd.push(`--plugins=${result.suggestedTests.plugins.join(',')}`);
|
|
172
|
+
if (result.suggestedTests.contentTypes && result.suggestedTests.contentTypes.length > 0) {
|
|
173
|
+
cmd.push(`--content-types=${result.suggestedTests.contentTypes.join(',')}`);
|
|
174
|
+
}
|
|
175
|
+
if (result.suggestedTests.flags) {
|
|
176
|
+
cmd.push(...result.suggestedTests.flags);
|
|
177
|
+
}
|
|
178
|
+
lines.push('━━━ After Fix ━━━');
|
|
179
|
+
lines.push(`Run: ${cmd.join(' ')}`);
|
|
180
|
+
lines.push('');
|
|
181
|
+
}
|
|
182
|
+
// Confidence (for bolt fix integration).
|
|
183
|
+
if (result.confidence) {
|
|
184
|
+
const emoji = result.confidence.canFix === 'autonomous' ? '✓'
|
|
185
|
+
: result.confidence.canFix === 'needs-info' ? '?'
|
|
186
|
+
: '✗';
|
|
187
|
+
lines.push(`━━━ Fix Confidence ━━━`);
|
|
188
|
+
lines.push(`${emoji} ${result.confidence.canFix}: ${result.confidence.reason}`);
|
|
189
|
+
lines.push('');
|
|
190
|
+
}
|
|
191
|
+
return lines.join('\n');
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Format analysis result as markdown.
|
|
195
|
+
*/
|
|
196
|
+
function formatMarkdown(result) {
|
|
197
|
+
const lines = [];
|
|
198
|
+
const key = result.ticket.key !== 'MANUAL' ? result.ticket.key : '';
|
|
199
|
+
const header = key
|
|
200
|
+
? `# ${key}: ${result.ticket.summary}`
|
|
201
|
+
: `# ${result.ticket.summary}`;
|
|
202
|
+
lines.push(header);
|
|
203
|
+
lines.push(`**Priority:** ${result.ticket.priority} | **Type:** ${result.ticket.type}`);
|
|
204
|
+
lines.push('');
|
|
205
|
+
lines.push('## Problem Summary');
|
|
206
|
+
lines.push(result.problemSummary);
|
|
207
|
+
lines.push('');
|
|
208
|
+
lines.push('## Likely Causes');
|
|
209
|
+
for (const cause of result.likelyCauses) {
|
|
210
|
+
lines.push(`- **[${cause.probability}] ${cause.category}:** ${cause.description}`);
|
|
211
|
+
}
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push('## Investigation Steps');
|
|
214
|
+
for (const step of result.investigationSteps) {
|
|
215
|
+
lines.push(`${step.order}. ${step.description}`);
|
|
216
|
+
if (step.command)
|
|
217
|
+
lines.push(` \`\`\`bash\n ${step.command}\n \`\`\``);
|
|
218
|
+
if (step.file)
|
|
219
|
+
lines.push(` *File:* \`${step.file}\``);
|
|
220
|
+
}
|
|
221
|
+
lines.push('');
|
|
222
|
+
if (result.riskAssessment) {
|
|
223
|
+
lines.push('## Risk Assessment');
|
|
224
|
+
lines.push(result.riskAssessment);
|
|
225
|
+
lines.push('');
|
|
226
|
+
}
|
|
227
|
+
if (result.relatedModules.length > 0) {
|
|
228
|
+
lines.push(`**Related modules:** ${result.relatedModules.map(m => `\`${m}\``).join(', ')}`);
|
|
229
|
+
lines.push('');
|
|
230
|
+
}
|
|
231
|
+
if (result.suggestedTests.plugins.length > 0) {
|
|
232
|
+
lines.push('## Verification');
|
|
233
|
+
const cmd = ['bolt test'];
|
|
234
|
+
cmd.push(`--plugins=${result.suggestedTests.plugins.join(',')}`);
|
|
235
|
+
if (result.suggestedTests.contentTypes && result.suggestedTests.contentTypes.length > 0) {
|
|
236
|
+
cmd.push(`--content-types=${result.suggestedTests.contentTypes.join(',')}`);
|
|
237
|
+
}
|
|
238
|
+
lines.push('```bash');
|
|
239
|
+
lines.push(cmd.join(' '));
|
|
240
|
+
lines.push('```');
|
|
241
|
+
lines.push('');
|
|
242
|
+
}
|
|
243
|
+
if (result.confidence) {
|
|
244
|
+
lines.push('## Fix Confidence');
|
|
245
|
+
lines.push(`**${result.confidence.canFix}:** ${result.confidence.reason}`);
|
|
246
|
+
lines.push('');
|
|
247
|
+
}
|
|
248
|
+
lines.push('---');
|
|
249
|
+
lines.push('*Generated by [Bolt](https://github.com/electriccitizen/bolt)*');
|
|
250
|
+
return lines.join('\n');
|
|
251
|
+
}
|
|
252
|
+
export async function analyzeCommand(options) {
|
|
253
|
+
process.stderr.write('\nbolt analyze\n');
|
|
254
|
+
process.stderr.write('━'.repeat(50) + '\n\n');
|
|
255
|
+
// --- Require AI ---
|
|
256
|
+
if (options.noAi) {
|
|
257
|
+
logFail('bolt analyze requires AI. This command IS the AI analysis — there is no scripted fallback.');
|
|
258
|
+
process.exit(2);
|
|
259
|
+
}
|
|
260
|
+
const available = await isClaudeAvailable();
|
|
261
|
+
if (!available) {
|
|
262
|
+
logFail('Claude Code not found. bolt analyze requires Claude Code to be installed.');
|
|
263
|
+
logFail('Install: https://claude.ai/claude-code');
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
// --- Gather ticket info ---
|
|
267
|
+
let ticketKey = '';
|
|
268
|
+
let ticketSummary = '';
|
|
269
|
+
let ticketDescription = '';
|
|
270
|
+
let ticketType = 'Bug';
|
|
271
|
+
let ticketPriority = 'Medium';
|
|
272
|
+
let ticketComments = [];
|
|
273
|
+
if (options.ticket) {
|
|
274
|
+
ticketKey = options.ticket;
|
|
275
|
+
log(`Fetching ticket ${ticketKey} from Jira...`);
|
|
276
|
+
// Determine cloud ID from config or default.
|
|
277
|
+
const cloudId = options.boltConfig?.analyze?.jira?.cloud_id ?? 'ecitizen.atlassian.net';
|
|
278
|
+
const jiraData = await fetchJiraTicket(ticketKey, cloudId);
|
|
279
|
+
if (jiraData) {
|
|
280
|
+
logOk(`Fetched: ${jiraData.summary}`);
|
|
281
|
+
ticketSummary = jiraData.summary;
|
|
282
|
+
ticketDescription = jiraData.description;
|
|
283
|
+
ticketType = jiraData.type;
|
|
284
|
+
ticketPriority = jiraData.priority;
|
|
285
|
+
ticketComments = jiraData.comments;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
logFail('Could not fetch ticket from Jira (MCP unavailable or ticket not found).');
|
|
289
|
+
if (!options.description) {
|
|
290
|
+
logFail('Provide --description as fallback, or configure Jira MCP.');
|
|
291
|
+
process.exit(1);
|
|
292
|
+
}
|
|
293
|
+
log('Falling back to --description.');
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (options.description) {
|
|
297
|
+
ticketDescription = options.description;
|
|
298
|
+
if (!ticketSummary)
|
|
299
|
+
ticketSummary = options.description.slice(0, 100);
|
|
300
|
+
}
|
|
301
|
+
// Try stdin if no description yet.
|
|
302
|
+
if (!ticketDescription) {
|
|
303
|
+
const stdinText = await readStdin();
|
|
304
|
+
if (stdinText) {
|
|
305
|
+
ticketDescription = stdinText;
|
|
306
|
+
ticketSummary = stdinText.split('\n')[0].slice(0, 100);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (!ticketDescription) {
|
|
310
|
+
logFail('No ticket info provided. Use --ticket <key>, --description "...", or pipe via stdin.');
|
|
311
|
+
process.exit(2);
|
|
312
|
+
}
|
|
313
|
+
// --- Gather site context ---
|
|
314
|
+
log('Fetching site profile...');
|
|
315
|
+
const profile = await getSiteProfile();
|
|
316
|
+
if (!profile) {
|
|
317
|
+
logFail('Could not fetch site profile. Is DDEV running with bolt_inspect enabled?');
|
|
318
|
+
logFail('Run: bolt doctor');
|
|
319
|
+
process.exit(1);
|
|
320
|
+
}
|
|
321
|
+
logOk(`Site profile: ${profile.contentTypes.length} content types, ${profile.enabledModules.length} modules`);
|
|
322
|
+
// Git log for recent changes context.
|
|
323
|
+
const gitLog = await getRecentGitLog();
|
|
324
|
+
// --- Run AI analysis ---
|
|
325
|
+
log('Analyzing...');
|
|
326
|
+
process.stderr.write('\n');
|
|
327
|
+
const task = buildAnalyzeTicketTask({
|
|
328
|
+
ticketKey,
|
|
329
|
+
ticketSummary,
|
|
330
|
+
ticketDescription,
|
|
331
|
+
ticketType,
|
|
332
|
+
ticketPriority,
|
|
333
|
+
ticketComments: ticketComments.length > 0 ? ticketComments : undefined,
|
|
334
|
+
siteProfile: profile,
|
|
335
|
+
recentGitLog: gitLog || undefined,
|
|
336
|
+
});
|
|
337
|
+
const agentResult = await runAgent(task);
|
|
338
|
+
if (!agentResult.success) {
|
|
339
|
+
logFail('AI analysis failed.');
|
|
340
|
+
if (agentResult.output.error) {
|
|
341
|
+
logFail(String(agentResult.output.error));
|
|
342
|
+
}
|
|
343
|
+
process.exit(1);
|
|
344
|
+
}
|
|
345
|
+
const analysis = validateAnalysisResult(agentResult.output);
|
|
346
|
+
if (!analysis) {
|
|
347
|
+
logFail('AI returned invalid analysis format.');
|
|
348
|
+
process.stderr.write(` Raw output: ${agentResult.rawResponse.slice(0, 500)}\n`);
|
|
349
|
+
process.exit(1);
|
|
350
|
+
}
|
|
351
|
+
// --- Output ---
|
|
352
|
+
let output;
|
|
353
|
+
switch (options.output) {
|
|
354
|
+
case 'json':
|
|
355
|
+
output = JSON.stringify(analysis, null, 2);
|
|
356
|
+
break;
|
|
357
|
+
case 'markdown':
|
|
358
|
+
output = formatMarkdown(analysis);
|
|
359
|
+
break;
|
|
360
|
+
default:
|
|
361
|
+
output = formatText(analysis);
|
|
362
|
+
}
|
|
363
|
+
process.stdout.write(output + '\n');
|
|
364
|
+
// Write report file if requested.
|
|
365
|
+
if (options.report) {
|
|
366
|
+
writeFileSync(options.report, output, 'utf-8');
|
|
367
|
+
log(`Report written to ${options.report}`);
|
|
368
|
+
}
|
|
369
|
+
// Duration info.
|
|
370
|
+
const durationSec = (agentResult.duration / 1000).toFixed(1);
|
|
371
|
+
process.stderr.write(`\n Analysis complete (${durationSec}s, ${agentResult.numTurns} turns`);
|
|
372
|
+
if (agentResult.costUsd) {
|
|
373
|
+
process.stderr.write(`, $${agentResult.costUsd.toFixed(3)}`);
|
|
374
|
+
}
|
|
375
|
+
process.stderr.write(')\n\n');
|
|
376
|
+
}
|
|
377
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -8,6 +8,7 @@ import { promisify } from 'util';
|
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
9
9
|
import { dirname, resolve } from 'path';
|
|
10
10
|
import { loadConfig, validateConfig } from '../config.js';
|
|
11
|
+
import { getClaudeVersion } from '../ai/agent.js';
|
|
11
12
|
const execFileAsync = promisify(execFile);
|
|
12
13
|
/**
|
|
13
14
|
* Run a command and return stdout, or null on failure.
|
|
@@ -110,34 +111,36 @@ export async function doctorCommand() {
|
|
|
110
111
|
});
|
|
111
112
|
issueCount++;
|
|
112
113
|
}
|
|
114
|
+
// Claude Code.
|
|
115
|
+
const claudeVersion = await getClaudeVersion();
|
|
116
|
+
if (claudeVersion) {
|
|
117
|
+
toolChecks.push({ label: `claude ${claudeVersion}`, status: 'pass' });
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
toolChecks.push({
|
|
121
|
+
label: 'claude',
|
|
122
|
+
status: 'warn',
|
|
123
|
+
detail: 'Claude Code not found. AI features (bolt update) will use scripted fallback.',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
113
126
|
checks.push({ section: 'Local tools', results: toolChecks });
|
|
114
127
|
// --- Site section (only if in a DDEV project) ---
|
|
115
128
|
const ddevConfigPath = join(cwd, '.ddev', 'config.yaml');
|
|
116
129
|
const inProject = existsSync(ddevConfigPath);
|
|
130
|
+
// Track profile for coverage section.
|
|
131
|
+
let siteProfile = null;
|
|
117
132
|
if (inProject) {
|
|
118
133
|
const siteChecks = [];
|
|
119
134
|
// DDEV running?
|
|
120
135
|
const ddevDescribe = await tryExec('ddev', ['describe', '-j']);
|
|
121
136
|
if (ddevDescribe) {
|
|
122
137
|
siteChecks.push({ label: 'DDEV running', status: 'pass' });
|
|
123
|
-
// Volume mount?
|
|
124
|
-
const dockerComposePath = join(cwd, '.ddev', 'docker-compose.bolt.yaml');
|
|
125
|
-
if (existsSync(dockerComposePath)) {
|
|
126
|
-
siteChecks.push({ label: 'bolt volume mount configured', status: 'pass' });
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
siteChecks.push({
|
|
130
|
-
label: 'bolt volume mount',
|
|
131
|
-
status: 'fail',
|
|
132
|
-
detail: 'Run: bolt init',
|
|
133
|
-
});
|
|
134
|
-
issueCount++;
|
|
135
|
-
}
|
|
136
138
|
// bolt_inspect module enabled?
|
|
137
139
|
const profileResult = await tryExec('ddev', ['drush', 'bolt-inspect:profile']);
|
|
138
140
|
if (profileResult) {
|
|
139
141
|
try {
|
|
140
142
|
const profile = JSON.parse(profileResult);
|
|
143
|
+
siteProfile = profile;
|
|
141
144
|
const ctCount = profile.contentTypes?.length ?? 0;
|
|
142
145
|
siteChecks.push({
|
|
143
146
|
label: `bolt_inspect module enabled (${ctCount} content types)`,
|
|
@@ -205,6 +208,51 @@ export async function doctorCommand() {
|
|
|
205
208
|
}
|
|
206
209
|
checks.push({ section: `Site (${projectName})`, results: siteChecks });
|
|
207
210
|
}
|
|
211
|
+
// --- Coverage section (when profile is available) ---
|
|
212
|
+
if (siteProfile) {
|
|
213
|
+
const coverageChecks = [];
|
|
214
|
+
const contentTypes = siteProfile.contentTypes ?? [];
|
|
215
|
+
const urls = siteProfile.representativeUrls ?? [];
|
|
216
|
+
const customRoutes = siteProfile.representativeUrls?.filter((u) => u.source === 'custom') ?? [];
|
|
217
|
+
coverageChecks.push({
|
|
218
|
+
label: `${contentTypes.length} content types: ${contentTypes.map((ct) => ct.id).join(', ')}`,
|
|
219
|
+
status: 'pass',
|
|
220
|
+
});
|
|
221
|
+
coverageChecks.push({
|
|
222
|
+
label: `${urls.length} representative URLs`,
|
|
223
|
+
status: urls.length > 0 ? 'pass' : 'warn',
|
|
224
|
+
detail: urls.length === 0 ? 'No URLs discovered. Check site content.' : undefined,
|
|
225
|
+
});
|
|
226
|
+
// Show URL breakdown by source.
|
|
227
|
+
const bySource = {};
|
|
228
|
+
for (const u of urls) {
|
|
229
|
+
bySource[u.source] = (bySource[u.source] ?? 0) + 1;
|
|
230
|
+
}
|
|
231
|
+
const sourceSummary = Object.entries(bySource).map(([s, c]) => `${c} ${s}`).join(', ');
|
|
232
|
+
coverageChecks.push({
|
|
233
|
+
label: `URL sources: ${sourceSummary}`,
|
|
234
|
+
status: 'pass',
|
|
235
|
+
});
|
|
236
|
+
// List each URL.
|
|
237
|
+
for (const u of urls) {
|
|
238
|
+
const source = u.source === 'homepage' ? 'home'
|
|
239
|
+
: u.source === 'content_type' ? u.contentType ?? 'content'
|
|
240
|
+
: u.source;
|
|
241
|
+
coverageChecks.push({
|
|
242
|
+
label: `${u.url} (${source})`,
|
|
243
|
+
status: 'pass',
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
// Hint about custom routes.
|
|
247
|
+
if (customRoutes.length === 0) {
|
|
248
|
+
coverageChecks.push({
|
|
249
|
+
label: 'custom_routes',
|
|
250
|
+
status: 'skip',
|
|
251
|
+
detail: 'Add pages to .bolt.yml custom_routes for broader coverage',
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
checks.push({ section: 'Test coverage', results: coverageChecks });
|
|
255
|
+
}
|
|
208
256
|
// --- Config section ---
|
|
209
257
|
const configChecks = [];
|
|
210
258
|
const boltYmlPath = join(cwd, '.bolt.yml');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAA0B,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bolt fix — autonomous ticket resolution.
|
|
3
|
+
*
|
|
4
|
+
* Runs bolt analyze internally (or reuses existing analysis), then hands
|
|
5
|
+
* the issue to Claude with full tool access to investigate and fix.
|
|
6
|
+
* Supports both autonomous (subprocess) and interactive (live session) modes.
|
|
7
|
+
*/
|
|
8
|
+
import type { BoltConfig } from '../config.js';
|
|
9
|
+
export interface FixOptions {
|
|
10
|
+
/** Jira ticket key. */
|
|
11
|
+
ticket?: string;
|
|
12
|
+
/** Manual bug description. */
|
|
13
|
+
description?: string;
|
|
14
|
+
/** Path to a saved bolt analyze report (JSON). */
|
|
15
|
+
analysis?: string;
|
|
16
|
+
/** Additional context (answers to questions from analyze). */
|
|
17
|
+
context?: string;
|
|
18
|
+
/** Show what would be changed without modifying files. */
|
|
19
|
+
dryRun: boolean;
|
|
20
|
+
/** Skip post-fix test run. */
|
|
21
|
+
skipTest: boolean;
|
|
22
|
+
/** Skip PR creation. */
|
|
23
|
+
skipPr: boolean;
|
|
24
|
+
/** Skip confirmation prompts. */
|
|
25
|
+
yes: boolean;
|
|
26
|
+
/** Branch name override. */
|
|
27
|
+
branch?: string;
|
|
28
|
+
/** Interactive mode — hand off to live Claude session. */
|
|
29
|
+
interactive: boolean;
|
|
30
|
+
/** Disable AI (this command requires AI). */
|
|
31
|
+
noAi?: boolean;
|
|
32
|
+
/** Resolved .bolt.yml config. */
|
|
33
|
+
boltConfig?: BoltConfig;
|
|
34
|
+
}
|
|
35
|
+
export declare function fixCommand(options: FixOptions): Promise<void>;
|