spec-gen-cli 1.2.4 → 1.2.6

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 (51) hide show
  1. package/README.md +51 -18
  2. package/dist/api/generate.d.ts.map +1 -1
  3. package/dist/api/generate.js +46 -32
  4. package/dist/api/generate.js.map +1 -1
  5. package/dist/cli/commands/generate.d.ts.map +1 -1
  6. package/dist/cli/commands/generate.js +26 -12
  7. package/dist/cli/commands/generate.js.map +1 -1
  8. package/dist/cli/commands/mcp.d.ts +225 -0
  9. package/dist/cli/commands/mcp.d.ts.map +1 -1
  10. package/dist/cli/commands/mcp.js +116 -1
  11. package/dist/cli/commands/mcp.js.map +1 -1
  12. package/dist/cli/commands/refresh-stories.d.ts +10 -0
  13. package/dist/cli/commands/refresh-stories.d.ts.map +1 -0
  14. package/dist/cli/commands/refresh-stories.js +314 -0
  15. package/dist/cli/commands/refresh-stories.js.map +1 -0
  16. package/dist/cli/index.js +2 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/constants.d.ts +1 -0
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +1 -0
  21. package/dist/constants.js.map +1 -1
  22. package/dist/core/analyzer/unified-search.d.ts +107 -0
  23. package/dist/core/analyzer/unified-search.d.ts.map +1 -0
  24. package/dist/core/analyzer/unified-search.js +237 -0
  25. package/dist/core/analyzer/unified-search.js.map +1 -0
  26. package/dist/core/generator/openspec-format-generator.d.ts +17 -2
  27. package/dist/core/generator/openspec-format-generator.d.ts.map +1 -1
  28. package/dist/core/generator/openspec-format-generator.js +111 -10
  29. package/dist/core/generator/openspec-format-generator.js.map +1 -1
  30. package/dist/core/generator/rag-manifest-generator.d.ts +37 -0
  31. package/dist/core/generator/rag-manifest-generator.d.ts.map +1 -0
  32. package/dist/core/generator/rag-manifest-generator.js +134 -0
  33. package/dist/core/generator/rag-manifest-generator.js.map +1 -0
  34. package/dist/core/services/chat-tools.d.ts.map +1 -1
  35. package/dist/core/services/chat-tools.js +54 -6
  36. package/dist/core/services/chat-tools.js.map +1 -1
  37. package/dist/core/services/mcp-handlers/change.d.ts +14 -0
  38. package/dist/core/services/mcp-handlers/change.d.ts.map +1 -0
  39. package/dist/core/services/mcp-handlers/change.js +416 -0
  40. package/dist/core/services/mcp-handlers/change.js.map +1 -0
  41. package/dist/core/services/mcp-handlers/orient.d.ts.map +1 -1
  42. package/dist/core/services/mcp-handlers/orient.js +108 -1
  43. package/dist/core/services/mcp-handlers/orient.js.map +1 -1
  44. package/dist/core/services/mcp-handlers/semantic.d.ts +4 -0
  45. package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -1
  46. package/dist/core/services/mcp-handlers/semantic.js +101 -32
  47. package/dist/core/services/mcp-handlers/semantic.js.map +1 -1
  48. package/package.json +4 -1
  49. package/src/viewer/InteractiveGraphViewer.jsx +46 -4
  50. package/src/viewer/components/ChatPanel.jsx +2 -3
  51. package/src/viewer/components/ClusterGraph.jsx +22 -6
@@ -0,0 +1,416 @@
1
+ /**
2
+ * MCP tool handler: generate_change_proposal
3
+ *
4
+ * Given a story description (BMAD story, free-form intent, or spec delta request),
5
+ * produces a populated OpenSpec change proposal at openspec/changes/{slug}/proposal.md.
6
+ *
7
+ * The proposal is built from pure structural analysis — no LLM required:
8
+ * - orient() → affected functions, spec domains, insertion points
9
+ * - search_specs() → existing requirements touched by this change
10
+ * - analyze_impact()→ risk scores for the top 2 functions
11
+ */
12
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
13
+ import { join } from 'node:path';
14
+ import { validateDirectory, safeJoin } from './utils.js';
15
+ import { handleOrient } from './orient.js';
16
+ import { handleSearchSpecs } from './semantic.js';
17
+ import { handleAnalyzeImpact } from './graph.js';
18
+ // ============================================================================
19
+ // PROPOSAL TEMPLATE BUILDER
20
+ // ============================================================================
21
+ function strategyText(s) {
22
+ if (!s)
23
+ return 'n/a';
24
+ if (typeof s === 'string')
25
+ return s;
26
+ return s.approach;
27
+ }
28
+ function riskBadge(score) {
29
+ if (score < 40)
30
+ return '🟢 low';
31
+ if (score < 70)
32
+ return '🟡 medium';
33
+ if (score < 85)
34
+ return '🟠 high';
35
+ return '🔴 critical';
36
+ }
37
+ function buildProposal(slug, description, storyContent, orient, specSearch, impacts, generatedAt) {
38
+ const lines = [];
39
+ // Header
40
+ lines.push(`# Proposal: ${slug.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase())}`);
41
+ lines.push('');
42
+ lines.push(`> Generated by spec-gen on ${generatedAt}`);
43
+ lines.push(`> Source: ${storyContent ? 'BMAD story' : 'intent description'}`);
44
+ lines.push(`> Status: draft`);
45
+ lines.push('');
46
+ // Intent
47
+ lines.push('## Intent');
48
+ lines.push('');
49
+ lines.push(description);
50
+ lines.push('');
51
+ if (storyContent) {
52
+ lines.push('### Story');
53
+ lines.push('');
54
+ lines.push('```');
55
+ lines.push(storyContent.trim());
56
+ lines.push('```');
57
+ lines.push('');
58
+ }
59
+ // Spec domains affected
60
+ const domains = orient.specDomains ?? [];
61
+ if (domains.length > 0) {
62
+ lines.push('## Spec Domains Affected');
63
+ lines.push('');
64
+ lines.push('| Domain | Spec File | Match Count |');
65
+ lines.push('|--------|-----------|-------------|');
66
+ for (const d of domains) {
67
+ lines.push(`| \`${d.domain}\` | \`${d.specFile}\` | ${d.matchCount} |`);
68
+ }
69
+ lines.push('');
70
+ }
71
+ else {
72
+ lines.push('## Spec Domains Affected');
73
+ lines.push('');
74
+ lines.push('> No spec domains found. Run `spec-gen generate` to create specs from this codebase.');
75
+ lines.push('');
76
+ }
77
+ // Existing requirements touched
78
+ const specResults = specSearch.results ?? [];
79
+ if (specResults.length > 0) {
80
+ lines.push('## Existing Requirements Touched');
81
+ lines.push('');
82
+ lines.push('> Review these before writing new requirements — avoid duplication.');
83
+ lines.push('');
84
+ const byDomain = new Map();
85
+ for (const r of specResults) {
86
+ const bucket = byDomain.get(r.domain) ?? [];
87
+ bucket.push(r);
88
+ byDomain.set(r.domain, bucket);
89
+ }
90
+ for (const [domain, reqs] of byDomain) {
91
+ lines.push(`### Domain: \`${domain}\``);
92
+ lines.push('');
93
+ for (const req of reqs) {
94
+ const scoreStr = req.score.toFixed(2);
95
+ lines.push(`**${req.title}** *(relevance: ${scoreStr})*`);
96
+ if (req.section)
97
+ lines.push(`*Section: ${req.section}*`);
98
+ lines.push('');
99
+ const preview = req.text.length > 400 ? req.text.slice(0, 400) + '…' : req.text;
100
+ for (const line of preview.split('\n'))
101
+ lines.push(`> ${line}`);
102
+ if (req.linkedFiles && req.linkedFiles.length > 0) {
103
+ lines.push('');
104
+ lines.push(`*Linked files: ${req.linkedFiles.map(f => `\`${f}\``).join(', ')}*`);
105
+ }
106
+ lines.push('');
107
+ }
108
+ }
109
+ }
110
+ // Proposed spec changes (scaffold for human completion)
111
+ lines.push('## Proposed Spec Changes');
112
+ lines.push('');
113
+ lines.push('> Complete this section. Then run `openspec specs ' + slug + '` to formalise.');
114
+ lines.push('');
115
+ if (domains.length > 0) {
116
+ for (const d of domains.slice(0, 3)) {
117
+ lines.push(`### Domain: \`${d.domain}\``);
118
+ lines.push('');
119
+ lines.push('- [ ] **Add requirement**: <!-- describe new behaviour in RFC 2119 (SHALL/SHOULD/MAY) -->');
120
+ lines.push('- [ ] **Modify requirement**: <!-- existing requirement id + what changes -->');
121
+ lines.push('- [ ] **Add scenario**: <!-- Given / When / Then -->');
122
+ lines.push('');
123
+ }
124
+ }
125
+ else {
126
+ lines.push('- [ ] **Add requirement**: <!-- describe new behaviour in RFC 2119 (SHALL/SHOULD/MAY) -->');
127
+ lines.push('- [ ] **Add scenario**: <!-- Given / When / Then -->');
128
+ lines.push('');
129
+ }
130
+ // Technical context
131
+ lines.push('## Technical Context');
132
+ lines.push('');
133
+ lines.push('> Generated by spec-gen static analysis. Do not edit this section manually.');
134
+ lines.push('');
135
+ // Affected functions
136
+ const topFunctions = (orient.relevantFunctions ?? []).slice(0, 5);
137
+ if (topFunctions.length > 0) {
138
+ lines.push('### Affected Functions');
139
+ lines.push('');
140
+ lines.push('| Function | File | Fan-in | Fan-out | Hub |');
141
+ lines.push('|----------|------|--------|---------|-----|');
142
+ for (const fn of topFunctions) {
143
+ const hub = fn.isHub ? '⚠️ yes' : 'no';
144
+ lines.push(`| \`${fn.name}\` | \`${fn.filePath}\` | ${fn.fanIn} | ${fn.fanOut} | ${hub} |`);
145
+ }
146
+ lines.push('');
147
+ }
148
+ // Risk assessment
149
+ const validImpacts = impacts.filter(i => i.riskScore !== undefined);
150
+ if (validImpacts.length > 0) {
151
+ lines.push('### Risk Assessment');
152
+ lines.push('');
153
+ lines.push('| Function | Risk Score | Level | Strategy |');
154
+ lines.push('|----------|-----------|-------|----------|');
155
+ for (const i of validImpacts) {
156
+ const score = i.riskScore ?? 0;
157
+ lines.push(`| \`${i.symbol}\` | ${score} | ${riskBadge(score)} | \`${strategyText(i.recommendedStrategy)}\` |`);
158
+ }
159
+ lines.push('');
160
+ const maxRisk = Math.max(...validImpacts.map(i => i.riskScore ?? 0));
161
+ if (maxRisk >= 70) {
162
+ lines.push('> ⚠️ **High risk detected.** Run `bmad/tasks/refactor.md` before implementing this change.');
163
+ lines.push('');
164
+ }
165
+ else if (maxRisk >= 40) {
166
+ lines.push('> ⚠️ **Moderate risk.** Ensure callers are covered by tests before implementing.');
167
+ lines.push('');
168
+ }
169
+ }
170
+ // Insertion points
171
+ const insertionPoints = orient.insertionPoints ?? [];
172
+ if (insertionPoints.length > 0) {
173
+ lines.push('### Insertion Points');
174
+ lines.push('');
175
+ for (const ip of insertionPoints) {
176
+ lines.push(`${ip.rank}. **\`${ip.name}\`** in \`${ip.filePath}\``);
177
+ lines.push(` - Role: \`${ip.role}\` | Strategy: \`${ip.strategy}\``);
178
+ lines.push(` - ${ip.reason}`);
179
+ }
180
+ lines.push('');
181
+ }
182
+ // Next steps
183
+ lines.push('## Next Steps');
184
+ lines.push('');
185
+ lines.push(`- [ ] Complete "Proposed Spec Changes" above`);
186
+ lines.push(`- [ ] \`openspec specs ${slug}\` — formalise spec delta`);
187
+ lines.push(`- [ ] \`openspec design ${slug}\` — technical design`);
188
+ lines.push(`- [ ] \`openspec tasks ${slug}\` — implementation task list`);
189
+ if (validImpacts.some(i => (i.riskScore ?? 0) >= 70)) {
190
+ lines.push(`- [ ] Run \`bmad/tasks/brownfield-refactor.md\` for high-risk functions before implementation`);
191
+ }
192
+ lines.push('');
193
+ return lines.join('\n');
194
+ }
195
+ // ============================================================================
196
+ // HANDLER
197
+ // ============================================================================
198
+ export async function handleGenerateChangeProposal(directory, description, slug, storyContent) {
199
+ const absDir = await validateDirectory(directory);
200
+ // Normalise slug: lowercase, hyphens only
201
+ const safeSlug = slug
202
+ .toLowerCase()
203
+ .replace(/[^a-z0-9]+/g, '-')
204
+ .replace(/^-+|-+$/g, '');
205
+ if (!safeSlug) {
206
+ return { error: 'Invalid slug. Use alphanumeric characters and hyphens, e.g. "add-payment-retry".' };
207
+ }
208
+ const changeDir = join(absDir, 'openspec', 'changes', safeSlug);
209
+ const proposalPath = join(changeDir, 'proposal.md');
210
+ const generatedAt = new Date().toISOString().split('T')[0];
211
+ // ── Parallel orientation + spec search ────────────────────────────────────
212
+ const [orientRaw, specSearchRaw] = await Promise.all([
213
+ handleOrient(directory, description, 7),
214
+ handleSearchSpecs(directory, description, 5),
215
+ ]);
216
+ const orient = orientRaw;
217
+ const specSearch = specSearchRaw;
218
+ // ── Impact analysis on top 2 functions (best-effort) ──────────────────────
219
+ const topFunctions = (orient.relevantFunctions ?? []).slice(0, 2);
220
+ const impacts = [];
221
+ for (const fn of topFunctions) {
222
+ try {
223
+ const raw = await handleAnalyzeImpact(directory, fn.name, 2);
224
+ const impact = raw;
225
+ if (!impact.error)
226
+ impacts.push(impact);
227
+ }
228
+ catch {
229
+ // non-fatal — proceed with partial context
230
+ }
231
+ }
232
+ // ── Build proposal ─────────────────────────────────────────────────────────
233
+ const content = buildProposal(safeSlug, description, storyContent, orient, specSearch, impacts, generatedAt);
234
+ // ── Write to disk ──────────────────────────────────────────────────────────
235
+ await mkdir(changeDir, { recursive: true });
236
+ await writeFile(proposalPath, content, 'utf8');
237
+ // ── Summary ────────────────────────────────────────────────────────────────
238
+ const domains = (orient.specDomains ?? []).map(d => d.domain);
239
+ const maxRisk = impacts.length > 0
240
+ ? Math.max(...impacts.map(i => i.riskScore ?? 0))
241
+ : null;
242
+ return {
243
+ slug: safeSlug,
244
+ proposalPath: join('openspec', 'changes', safeSlug, 'proposal.md'),
245
+ domainsAffected: domains,
246
+ functionsFound: (orient.relevantFunctions ?? []).length,
247
+ requirementsTouched: (specSearch.results ?? []).length,
248
+ maxRiskScore: maxRisk,
249
+ riskLevel: maxRisk !== null
250
+ ? (maxRisk < 40 ? 'low' : maxRisk < 70 ? 'medium' : maxRisk < 85 ? 'high' : 'critical')
251
+ : 'unknown',
252
+ nextStep: `Review and complete openspec/changes/${safeSlug}/proposal.md, then run: openspec specs ${safeSlug}`,
253
+ orientErrors: orient.error ? [orient.error] : [],
254
+ specSearchErrors: specSearch.error ? [specSearch.error] : [],
255
+ };
256
+ }
257
+ // ============================================================================
258
+ // ANNOTATE STORY
259
+ // ============================================================================
260
+ /**
261
+ * Build the compact risk_context block written into story files.
262
+ */
263
+ function buildRiskContextBlock(orient, impacts, generatedAt) {
264
+ const validImpacts = impacts.filter(i => i.riskScore !== undefined);
265
+ const maxRisk = validImpacts.length > 0
266
+ ? Math.max(...validImpacts.map(i => i.riskScore ?? 0))
267
+ : null;
268
+ const badge = maxRisk === null ? '' : ` ${riskBadge(maxRisk)}`;
269
+ const lines = [];
270
+ lines.push(`> Auto-generated by spec-gen on ${generatedAt}. Re-run \`annotate_story\` after structural changes.`);
271
+ lines.push('');
272
+ const domains = (orient.specDomains ?? []).map(d => d.domain);
273
+ lines.push(`- **Domains**: ${domains.length > 0 ? domains.join(', ') : 'none detected'}`);
274
+ if (maxRisk !== null) {
275
+ lines.push(`- **Max risk score**: ${maxRisk}${badge}`);
276
+ }
277
+ else {
278
+ lines.push('- **Max risk score**: unknown (run analyze_codebase first)');
279
+ }
280
+ const topFunctions = (orient.relevantFunctions ?? []).slice(0, 4);
281
+ if (topFunctions.length > 0) {
282
+ const fnList = topFunctions.map(f => `\`${f.name}\` (${f.filePath})`).join(', ');
283
+ lines.push(`- **Functions in scope**: ${fnList}`);
284
+ }
285
+ // Callers to protect = upstream of highest-risk function
286
+ const topImpact = validImpacts[0];
287
+ if (topImpact?.upstreamChain && Array.isArray(topImpact.upstreamChain) && topImpact.upstreamChain.length > 0) {
288
+ const callers = topImpact.upstreamChain
289
+ .slice(0, 3)
290
+ .map(c => `\`${c.name}\``)
291
+ .join(', ');
292
+ lines.push(`- **Callers to protect**: ${callers}`);
293
+ }
294
+ // Blocking refactors
295
+ if (maxRisk !== null && maxRisk >= 70 && validImpacts.length > 0) {
296
+ const blocked = validImpacts
297
+ .filter(i => (i.riskScore ?? 0) >= 70)
298
+ .map(i => `Refactor \`${i.symbol}\` first (risk: ${i.riskScore})`)
299
+ .join('; ');
300
+ lines.push(`- **Blocking refactors**: ${blocked}`);
301
+ }
302
+ else {
303
+ lines.push('- **Blocking refactors**: none');
304
+ }
305
+ // Insertion points
306
+ const insertionPoints = orient.insertionPoints ?? [];
307
+ if (insertionPoints.length > 0) {
308
+ const top = insertionPoints[0];
309
+ lines.push(`- **Insertion points**: \`${top.name}\` — ${top.strategy} (score: ${top.score})`);
310
+ }
311
+ // Spec domains with file links
312
+ if (domains.length > 0) {
313
+ const specLinks = (orient.specDomains ?? [])
314
+ .slice(0, 3)
315
+ .map(d => `\`${d.specFile}\``)
316
+ .join(', ');
317
+ lines.push(`- **Spec domains linked**: ${specLinks}`);
318
+ }
319
+ // Warning
320
+ if (maxRisk !== null && maxRisk >= 70) {
321
+ lines.push('');
322
+ lines.push('> ⚠️ **Blocked.** Schedule `bmad/tasks/refactor.md` for the high-risk function(s) before this story enters a sprint.');
323
+ }
324
+ else if (maxRisk !== null && maxRisk >= 40) {
325
+ lines.push('');
326
+ lines.push('> ⚠️ **Caution.** Ensure callers listed above are covered by tests.');
327
+ }
328
+ return lines.join('\n');
329
+ }
330
+ /**
331
+ * Patch the `## Risk Context` section of a markdown story file in-place.
332
+ *
333
+ * - If the section exists: replaces its body (keeps the heading).
334
+ * - If it doesn't exist: inserts it before `## Technical Constraints`,
335
+ * `## Tasks`, or `## Dependencies` — whichever comes first.
336
+ * If none found, appends at end of file.
337
+ */
338
+ function patchRiskContext(original, newBody) {
339
+ const HEADING = '## Risk Context';
340
+ const lines = original.split('\n');
341
+ const sectionStart = lines.findIndex(l => l.trim() === HEADING);
342
+ if (sectionStart !== -1) {
343
+ // Find end of section = next ## heading (exclusive) or EOF
344
+ let sectionEnd = lines.length;
345
+ for (let i = sectionStart + 1; i < lines.length; i++) {
346
+ if (lines[i].startsWith('## ')) {
347
+ sectionEnd = i;
348
+ break;
349
+ }
350
+ }
351
+ const replacement = [HEADING, '', newBody, ''];
352
+ lines.splice(sectionStart, sectionEnd - sectionStart, ...replacement);
353
+ return lines.join('\n');
354
+ }
355
+ // Section not found — find insertion point
356
+ const insertBefore = ['## Technical Constraints', '## Tasks', '## Dependencies', '## Dev Agent Record'];
357
+ let insertAt = lines.length;
358
+ for (const marker of insertBefore) {
359
+ const idx = lines.findIndex(l => l.trim() === marker);
360
+ if (idx !== -1 && idx < insertAt)
361
+ insertAt = idx;
362
+ }
363
+ const insertion = ['', HEADING, '', newBody, ''];
364
+ lines.splice(insertAt, 0, ...insertion);
365
+ return lines.join('\n');
366
+ }
367
+ export async function handleAnnotateStory(directory, storyFilePath, description) {
368
+ const absDir = await validateDirectory(directory);
369
+ // Resolve story path and ensure it stays within the project directory
370
+ const absStory = safeJoin(absDir, storyFilePath);
371
+ let original;
372
+ try {
373
+ original = await readFile(absStory, 'utf8');
374
+ }
375
+ catch {
376
+ return { error: `Story file not found: ${absStory}` };
377
+ }
378
+ const generatedAt = new Date().toISOString().split('T')[0];
379
+ // ── Structural analysis (same pattern as generate_change_proposal) ─────────
380
+ // spec search not needed for risk_context — orient already returns linked specs
381
+ const orient = await handleOrient(directory, description, 7);
382
+ const topFunctions = (orient.relevantFunctions ?? []).slice(0, 2);
383
+ const impacts = [];
384
+ for (const fn of topFunctions) {
385
+ try {
386
+ const raw = await handleAnalyzeImpact(directory, fn.name, 2);
387
+ const impact = raw;
388
+ if (!impact.error)
389
+ impacts.push(impact);
390
+ }
391
+ catch { /* non-fatal */ }
392
+ }
393
+ // ── Build and patch ────────────────────────────────────────────────────────
394
+ const riskBlock = buildRiskContextBlock(orient, impacts, generatedAt);
395
+ const patched = patchRiskContext(original, riskBlock);
396
+ await writeFile(absStory, patched, 'utf8');
397
+ // ── Summary ────────────────────────────────────────────────────────────────
398
+ const maxRisk = impacts.length > 0
399
+ ? Math.max(...impacts.map(i => i.riskScore ?? 0))
400
+ : null;
401
+ const domains = (orient.specDomains ?? []).map(d => d.domain);
402
+ return {
403
+ storyFile: storyFilePath,
404
+ domainsAffected: domains,
405
+ functionsFound: (orient.relevantFunctions ?? []).length,
406
+ maxRiskScore: maxRisk,
407
+ riskLevel: maxRisk === null ? 'unknown'
408
+ : maxRisk < 40 ? 'low'
409
+ : maxRisk < 70 ? 'medium'
410
+ : maxRisk < 85 ? 'high'
411
+ : 'critical',
412
+ blocked: maxRisk !== null && maxRisk >= 70,
413
+ orientErrors: orient.error ? [orient.error] : [],
414
+ };
415
+ }
416
+ //# sourceMappingURL=change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change.js","sourceRoot":"","sources":["../../../../src/core/services/mcp-handlers/change.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"orient.d.ts","sourceRoot":"","sources":["../../../../src/core/services/mcp-handlers/orient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgEH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAI,GACR,OAAO,CAAC,OAAO,CAAC,CAqMlB"}
1
+ {"version":3,"file":"orient.d.ts","sourceRoot":"","sources":["../../../../src/core/services/mcp-handlers/orient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmIH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAI,GACR,OAAO,CAAC,OAAO,CAAC,CAiPlB"}
@@ -14,9 +14,49 @@
14
14
  * → suggest_insertion_points manually.
15
15
  */
16
16
  import { join } from 'node:path';
17
+ import { readFile, stat } from 'node:fs/promises';
17
18
  import { validateDirectory, loadMappingIndex, specsForFile, functionsForDomain, readCachedContext } from './utils.js';
18
19
  import { readSpecGenConfig } from '../config-manager.js';
20
+ import { OPENSPEC_DIR, ARTIFACT_RAG_MANIFEST } from '../../../constants.js';
19
21
  import { classifyRole, deriveStrategy, compositeScore, buildReason, } from './semantic.js';
22
+ /** One cache entry per project directory (MCP server is long-lived). */
23
+ const _manifestCache = new Map();
24
+ /** Load (or return cached) RagManifest. Returns undefined on any error. */
25
+ async function loadManifestCached(manifestPath, cacheKey) {
26
+ try {
27
+ const mtime = (await stat(manifestPath)).mtimeMs;
28
+ const cached = _manifestCache.get(cacheKey);
29
+ if (cached && cached.fileMtime === mtime)
30
+ return cached;
31
+ const raw = await readFile(manifestPath, 'utf-8');
32
+ const entry = {
33
+ manifest: JSON.parse(raw),
34
+ fileMtime: mtime,
35
+ condensed: cached?.condensed ?? new Map(),
36
+ };
37
+ _manifestCache.set(cacheKey, entry);
38
+ return entry;
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ }
44
+ /** Load (or return cached) condensed spec content for a single spec file. */
45
+ async function loadCondensedCached(cache, absSpecPath, specPath) {
46
+ try {
47
+ const mtime = (await stat(absSpecPath)).mtimeMs;
48
+ const cached = cache.condensed.get(specPath);
49
+ if (cached && cached.mtime === mtime)
50
+ return cached.content;
51
+ const raw = await readFile(absSpecPath, 'utf-8');
52
+ const content = condenseSpec(raw);
53
+ cache.condensed.set(specPath, { content, mtime });
54
+ return content;
55
+ }
56
+ catch {
57
+ return undefined;
58
+ }
59
+ }
20
60
  // ============================================================================
21
61
  // HANDLER
22
62
  // ============================================================================
@@ -172,13 +212,57 @@ export async function handleOrient(directory, task, limit = 5) {
172
212
  // non-fatal — spec index may be corrupt or unavailable
173
213
  }
174
214
  }
215
+ // ── Inline spec purpose from RAG manifest ─────────────────────────────────
216
+ let inlineSpecs;
217
+ if (specDomains.length > 0) {
218
+ try {
219
+ const cfg = await readSpecGenConfig(absDir);
220
+ const openspecRelPath = cfg?.openspecPath ?? OPENSPEC_DIR;
221
+ const manifestPath = join(absDir, openspecRelPath, ARTIFACT_RAG_MANIFEST);
222
+ const manifestCache = await loadManifestCached(manifestPath, absDir);
223
+ if (manifestCache) {
224
+ const { manifest } = manifestCache;
225
+ const specs = await Promise.all(specDomains.slice(0, 3).map(async (sd) => {
226
+ const entry = manifest.domains.find(d => d.domain.toLowerCase() === sd.domain.toLowerCase());
227
+ if (!entry)
228
+ return null;
229
+ const absSpecPath = join(absDir, entry.specPath);
230
+ const content = await loadCondensedCached(manifestCache, absSpecPath, entry.specPath);
231
+ if (!content)
232
+ return null;
233
+ const MAX_SOURCE_FILES = 8;
234
+ const relFiles = entry.sourceFiles.map(f => f.startsWith(absDir) ? f.slice(absDir.length).replace(/^\//, '') : f);
235
+ const sourceFiles = relFiles.length > MAX_SOURCE_FILES
236
+ ? [...relFiles.slice(0, MAX_SOURCE_FILES), `… and ${relFiles.length - MAX_SOURCE_FILES} more`]
237
+ : relFiles;
238
+ return {
239
+ domain: sd.domain,
240
+ specPath: entry.specPath,
241
+ sourceFiles,
242
+ dependsOn: entry.dependsOn,
243
+ calledBy: entry.calledBy,
244
+ content,
245
+ };
246
+ }));
247
+ const filtered = specs.filter((s) => s !== null);
248
+ if (filtered.length > 0)
249
+ inlineSpecs = filtered;
250
+ }
251
+ }
252
+ catch {
253
+ // non-fatal — manifest may not exist yet (generate not yet run)
254
+ }
255
+ }
175
256
  // ── Next steps ────────────────────────────────────────────────────────────
176
257
  const nextSteps = [];
177
258
  if (insertionPoints.length > 0) {
178
259
  nextSteps.push(`Call get_subgraph("${insertionPoints[0].name}") to trace the call neighbourhood`);
179
260
  }
180
261
  if (specDomains.length > 0) {
181
- nextSteps.push(`Call get_spec("${specDomains[0].domain}") to read the full spec before writing code`);
262
+ const hint = inlineSpecs
263
+ ? `Domain purposes included in inlineSpecs — call get_spec("${specDomains[0].domain}") for requirements and implementation details`
264
+ : `Call get_spec("${specDomains[0].domain}") to read the full spec before writing code`;
265
+ nextSteps.push(hint);
182
266
  }
183
267
  nextSteps.push('After implementing, run check_spec_drift to verify the code matches the spec');
184
268
  return {
@@ -191,10 +275,33 @@ export async function handleOrient(directory, task, limit = 5) {
191
275
  relevantFunctions,
192
276
  ...(specLinkedFunctions.length > 0 ? { specLinkedFunctions } : {}),
193
277
  specDomains,
278
+ ...(inlineSpecs !== undefined ? { inlineSpecs } : {}),
194
279
  callPaths,
195
280
  insertionPoints,
196
281
  ...(matchingSpecs !== undefined ? { matchingSpecs } : {}),
197
282
  nextSteps,
198
283
  };
199
284
  }
285
+ // ============================================================================
286
+ // HELPERS
287
+ // ============================================================================
288
+ /**
289
+ * Condense a spec to its ## Purpose paragraph only (~50-150 chars).
290
+ * dependsOn/calledBy are already in the InlineSpec manifest fields.
291
+ * Full requirements are available via get_spec.
292
+ */
293
+ function condenseSpec(content) {
294
+ const lines = content.split('\n');
295
+ const purposeStart = lines.findIndex(l => /^## Purpose\s*$/.test(l));
296
+ if (purposeStart === -1)
297
+ return '';
298
+ let i = purposeStart + 1;
299
+ while (i < lines.length && lines[i].trim() === '')
300
+ i++;
301
+ const out = [];
302
+ while (i < lines.length && lines[i].trim() !== '' && !lines[i].startsWith('#')) {
303
+ out.push(lines[i++]);
304
+ }
305
+ return out.join('\n').trim().replace(/^\[PARTIAL SPEC[^\]]*\]\s*/i, '');
306
+ }
200
307
  //# sourceMappingURL=orient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orient.js","sourceRoot":"","sources":["../../../../src/core/services/mcp-handlers/orient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orient.js","sourceRoot":"","sources":["../../../../src/core/services/mcp-handlers/orient.ts"],"names":[],"mappings":"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"}