@electriccitizen/bolt 0.1.0 → 0.2.1

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 (84) hide show
  1. package/README.md +93 -14
  2. package/dist/ai/agent.d.ts +66 -0
  3. package/dist/ai/agent.js +232 -0
  4. package/dist/ai/agent.js.map +1 -0
  5. package/dist/ai/knowledge/composer.md +90 -0
  6. package/dist/ai/knowledge/config-safety.md +46 -0
  7. package/dist/ai/knowledge/ddev-operations.md +41 -0
  8. package/dist/ai/knowledge/drupal-internals.md +52 -0
  9. package/dist/ai/knowledge/drupal-updates.md +90 -0
  10. package/dist/ai/knowledge/knowledge/composer.md +90 -0
  11. package/dist/ai/knowledge/knowledge/config-safety.md +46 -0
  12. package/dist/ai/knowledge/knowledge/ddev-operations.md +41 -0
  13. package/dist/ai/knowledge/knowledge/drupal-debugging.md +89 -0
  14. package/dist/ai/knowledge/knowledge/drupal-internals.md +52 -0
  15. package/dist/ai/knowledge/knowledge/drupal-updates.md +90 -0
  16. package/dist/ai/prompts/analyze-ticket.d.ts +30 -0
  17. package/dist/ai/prompts/analyze-ticket.js +116 -0
  18. package/dist/ai/prompts/analyze-ticket.js.map +1 -0
  19. package/dist/ai/prompts/fix-ticket.d.ts +27 -0
  20. package/dist/ai/prompts/fix-ticket.js +129 -0
  21. package/dist/ai/prompts/fix-ticket.js.map +1 -0
  22. package/dist/ai/prompts/pr-description.d.ts +19 -0
  23. package/dist/ai/prompts/pr-description.js +56 -0
  24. package/dist/ai/prompts/pr-description.js.map +1 -0
  25. package/dist/ai/prompts/update-package.d.ts +25 -0
  26. package/dist/ai/prompts/update-package.js +87 -0
  27. package/dist/ai/prompts/update-package.js.map +1 -0
  28. package/dist/ai/prompts/update-plan.d.ts +20 -0
  29. package/dist/ai/prompts/update-plan.js +66 -0
  30. package/dist/ai/prompts/update-plan.js.map +1 -0
  31. package/dist/ai/schemas/analysis-result.d.ts +44 -0
  32. package/dist/ai/schemas/analysis-result.js +101 -0
  33. package/dist/ai/schemas/analysis-result.js.map +1 -0
  34. package/dist/ai/schemas/fix-result.d.ts +34 -0
  35. package/dist/ai/schemas/fix-result.js +55 -0
  36. package/dist/ai/schemas/fix-result.js.map +1 -0
  37. package/dist/ai/schemas/pr-body.d.ts +12 -0
  38. package/dist/ai/schemas/pr-body.js +18 -0
  39. package/dist/ai/schemas/pr-body.js.map +1 -0
  40. package/dist/ai/schemas/update-plan.d.ts +20 -0
  41. package/dist/ai/schemas/update-plan.js +33 -0
  42. package/dist/ai/schemas/update-plan.js.map +1 -0
  43. package/dist/ai/schemas/update-result.d.ts +22 -0
  44. package/dist/ai/schemas/update-result.js +30 -0
  45. package/dist/ai/schemas/update-result.js.map +1 -0
  46. package/dist/cli.js +63 -1
  47. package/dist/cli.js.map +1 -1
  48. package/dist/commands/analyze.d.ts +25 -0
  49. package/dist/commands/analyze.js +377 -0
  50. package/dist/commands/analyze.js.map +1 -0
  51. package/dist/commands/doctor.js +90 -17
  52. package/dist/commands/doctor.js.map +1 -1
  53. package/dist/commands/fix.d.ts +35 -0
  54. package/dist/commands/fix.js +480 -0
  55. package/dist/commands/fix.js.map +1 -0
  56. package/dist/commands/init.d.ts +3 -2
  57. package/dist/commands/init.js +118 -160
  58. package/dist/commands/init.js.map +1 -1
  59. package/dist/commands/pr.d.ts +4 -0
  60. package/dist/commands/pr.js +121 -3
  61. package/dist/commands/pr.js.map +1 -1
  62. package/dist/commands/refresh.js +10 -57
  63. package/dist/commands/refresh.js.map +1 -1
  64. package/dist/commands/update.d.ts +2 -0
  65. package/dist/commands/update.js +463 -64
  66. package/dist/commands/update.js.map +1 -1
  67. package/dist/config.d.ts +16 -0
  68. package/dist/config.js +57 -0
  69. package/dist/config.js.map +1 -1
  70. package/dist/runner.js +12 -0
  71. package/dist/runner.js.map +1 -1
  72. package/dist/safety.d.ts +73 -0
  73. package/dist/safety.js +212 -0
  74. package/dist/safety.js.map +1 -0
  75. package/dist/types.d.ts +2 -0
  76. package/package.json +2 -3
  77. package/modules/bolt_inspect/bolt_inspect.info.yml +0 -6
  78. package/modules/bolt_inspect/bolt_inspect.services.yml +0 -22
  79. package/modules/bolt_inspect/composer.json +0 -16
  80. package/modules/bolt_inspect/drush.services.yml +0 -10
  81. package/modules/bolt_inspect/src/Drush/Commands/BoltInspectCommands.php +0 -203
  82. package/modules/bolt_inspect/src/Service/ContentGenerator.php +0 -586
  83. package/modules/bolt_inspect/src/Service/SiteProfiler.php +0 -362
  84. 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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"}
@@ -8,7 +8,25 @@ 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);
13
+ /**
14
+ * Compare two semver version strings (e.g. "0.1.0" vs "0.2.0").
15
+ * Returns -1 if a < b, 0 if equal, 1 if a > b.
16
+ */
17
+ function compareVersions(a, b) {
18
+ const pa = a.replace(/^v/, '').split('.').map(Number);
19
+ const pb = b.replace(/^v/, '').split('.').map(Number);
20
+ for (let i = 0; i < 3; i++) {
21
+ const va = pa[i] ?? 0;
22
+ const vb = pb[i] ?? 0;
23
+ if (va < vb)
24
+ return -1;
25
+ if (va > vb)
26
+ return 1;
27
+ }
28
+ return 0;
29
+ }
12
30
  /**
13
31
  * Run a command and return stdout, or null on failure.
14
32
  */
@@ -110,40 +128,50 @@ export async function doctorCommand() {
110
128
  });
111
129
  issueCount++;
112
130
  }
131
+ // Claude Code.
132
+ const claudeVersion = await getClaudeVersion();
133
+ if (claudeVersion) {
134
+ toolChecks.push({ label: `claude ${claudeVersion}`, status: 'pass' });
135
+ }
136
+ else {
137
+ toolChecks.push({
138
+ label: 'claude',
139
+ status: 'warn',
140
+ detail: 'Claude Code not found. AI features (bolt update) will use scripted fallback.',
141
+ });
142
+ }
113
143
  checks.push({ section: 'Local tools', results: toolChecks });
114
144
  // --- Site section (only if in a DDEV project) ---
115
145
  const ddevConfigPath = join(cwd, '.ddev', 'config.yaml');
116
146
  const inProject = existsSync(ddevConfigPath);
147
+ // Track profile for coverage section.
148
+ let siteProfile = null;
117
149
  if (inProject) {
118
150
  const siteChecks = [];
119
151
  // DDEV running?
120
152
  const ddevDescribe = await tryExec('ddev', ['describe', '-j']);
121
153
  if (ddevDescribe) {
122
154
  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
155
  // bolt_inspect module enabled?
137
156
  const profileResult = await tryExec('ddev', ['drush', 'bolt-inspect:profile']);
138
157
  if (profileResult) {
139
158
  try {
140
159
  const profile = JSON.parse(profileResult);
160
+ siteProfile = profile;
141
161
  const ctCount = profile.contentTypes?.length ?? 0;
162
+ const fieldCount = (profile.contentTypes ?? []).reduce((sum, ct) => sum + (ct.fields?.length ?? 0), 0);
163
+ const pgCount = (profile.paragraphBundles ?? []).length;
164
+ const summary = [`${ctCount} content types`, `${fieldCount} fields`];
165
+ if (pgCount > 0)
166
+ summary.push(`${pgCount} paragraph bundles`);
142
167
  siteChecks.push({
143
- label: `bolt_inspect module enabled (${ctCount} content types)`,
168
+ label: `bolt_inspect module enabled (${summary.join(', ')})`,
144
169
  status: 'pass',
145
170
  });
146
171
  // Version compatibility check.
172
+ // CLI and module are separate packages with independent release cycles.
173
+ // Only warn if the module is below the minimum required version.
174
+ const MIN_MODULE_VERSION = '0.1.0';
147
175
  const moduleVersion = profile.boltInspectVersion ?? 'unknown';
148
176
  if (moduleVersion === 'unknown') {
149
177
  siteChecks.push({
@@ -152,11 +180,11 @@ export async function doctorCommand() {
152
180
  detail: `Module version unknown. Run: bolt init --upgrade`,
153
181
  });
154
182
  }
155
- else if (moduleVersion !== boltVersion) {
183
+ else if (compareVersions(moduleVersion, MIN_MODULE_VERSION) < 0) {
156
184
  siteChecks.push({
157
- label: `bolt_inspect version mismatch`,
185
+ label: `bolt_inspect version ${moduleVersion} too old`,
158
186
  status: 'warn',
159
- detail: `CLI is ${boltVersion}, module is ${moduleVersion}. Run: bolt init --upgrade`,
187
+ detail: `Minimum required: ${MIN_MODULE_VERSION}. Run: bolt init --upgrade`,
160
188
  });
161
189
  }
162
190
  else {
@@ -205,6 +233,51 @@ export async function doctorCommand() {
205
233
  }
206
234
  checks.push({ section: `Site (${projectName})`, results: siteChecks });
207
235
  }
236
+ // --- Coverage section (when profile is available) ---
237
+ if (siteProfile) {
238
+ const coverageChecks = [];
239
+ const contentTypes = siteProfile.contentTypes ?? [];
240
+ const urls = siteProfile.representativeUrls ?? [];
241
+ const customRoutes = siteProfile.representativeUrls?.filter((u) => u.source === 'custom') ?? [];
242
+ coverageChecks.push({
243
+ label: `${contentTypes.length} content types: ${contentTypes.map((ct) => ct.id).join(', ')}`,
244
+ status: 'pass',
245
+ });
246
+ coverageChecks.push({
247
+ label: `${urls.length} representative URLs`,
248
+ status: urls.length > 0 ? 'pass' : 'warn',
249
+ detail: urls.length === 0 ? 'No URLs discovered. Check site content.' : undefined,
250
+ });
251
+ // Show URL breakdown by source.
252
+ const bySource = {};
253
+ for (const u of urls) {
254
+ bySource[u.source] = (bySource[u.source] ?? 0) + 1;
255
+ }
256
+ const sourceSummary = Object.entries(bySource).map(([s, c]) => `${c} ${s}`).join(', ');
257
+ coverageChecks.push({
258
+ label: `URL sources: ${sourceSummary}`,
259
+ status: 'pass',
260
+ });
261
+ // List each URL.
262
+ for (const u of urls) {
263
+ const source = u.source === 'homepage' ? 'home'
264
+ : u.source === 'content_type' ? u.contentType ?? 'content'
265
+ : u.source;
266
+ coverageChecks.push({
267
+ label: `${u.url} (${source})`,
268
+ status: 'pass',
269
+ });
270
+ }
271
+ // Hint about custom routes.
272
+ if (customRoutes.length === 0) {
273
+ coverageChecks.push({
274
+ label: 'custom_routes',
275
+ status: 'skip',
276
+ detail: 'Add pages to .bolt.yml custom_routes for broader coverage',
277
+ });
278
+ }
279
+ checks.push({ section: 'Test coverage', results: coverageChecks });
280
+ }
208
281
  // --- Config section ---
209
282
  const configChecks = [];
210
283
  const boltYmlPath = join(cwd, '.bolt.yml');
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
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>;