@getvibeguard/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +166 -0
  2. package/dashboard/dist/assets/Tableau10-B-NsZVaP.js +1 -0
  3. package/dashboard/dist/assets/arc-CZ1oDkm-.js +1 -0
  4. package/dashboard/dist/assets/array-BKyUJesY.js +1 -0
  5. package/dashboard/dist/assets/blockDiagram-c4efeb88-BLITAZDl.js +118 -0
  6. package/dashboard/dist/assets/c4Diagram-c83219d4-DErNj891.js +10 -0
  7. package/dashboard/dist/assets/channel-sWBGOq9p.js +1 -0
  8. package/dashboard/dist/assets/classDiagram-beda092f-Bj8IB6RW.js +2 -0
  9. package/dashboard/dist/assets/classDiagram-v2-2358418a-BZtd2g5W.js +2 -0
  10. package/dashboard/dist/assets/clone-DtEyH3ya.js +1 -0
  11. package/dashboard/dist/assets/createText-1719965b-DkNrTk-5.js +7 -0
  12. package/dashboard/dist/assets/edges-96097737-CYxl0j3g.js +4 -0
  13. package/dashboard/dist/assets/erDiagram-0228fc6a-ClEp9Atg.js +51 -0
  14. package/dashboard/dist/assets/flowDb-c6c81e3f-ClDJCJwu.js +10 -0
  15. package/dashboard/dist/assets/flowDiagram-50d868cf-DYxwClWS.js +4 -0
  16. package/dashboard/dist/assets/flowDiagram-v2-4f6560a1-D7vEnO1T.js +1 -0
  17. package/dashboard/dist/assets/flowchart-elk-definition-6af322e1-C-wX1mNx.js +139 -0
  18. package/dashboard/dist/assets/ganttDiagram-a2739b55-DTeLavAj.js +257 -0
  19. package/dashboard/dist/assets/gitGraphDiagram-82fe8481-ClxNoYya.js +70 -0
  20. package/dashboard/dist/assets/graph-CT-F3Got.js +1 -0
  21. package/dashboard/dist/assets/index-5325376f-C-jTCYZA.js +1 -0
  22. package/dashboard/dist/assets/index-CvYvquQR.js +283 -0
  23. package/dashboard/dist/assets/index-n43poL1x.css +1 -0
  24. package/dashboard/dist/assets/infoDiagram-8eee0895-Zljudo5L.js +7 -0
  25. package/dashboard/dist/assets/init-Gi6I4Gst.js +1 -0
  26. package/dashboard/dist/assets/journeyDiagram-c64418c1-DXzTbuum.js +139 -0
  27. package/dashboard/dist/assets/katex-Cu_Erd72.js +261 -0
  28. package/dashboard/dist/assets/layout-CVO3EizT.js +1 -0
  29. package/dashboard/dist/assets/line-CIgln-0z.js +1 -0
  30. package/dashboard/dist/assets/linear-bmIUMQqg.js +1 -0
  31. package/dashboard/dist/assets/mindmap-definition-8da855dc-BDLTNZYk.js +425 -0
  32. package/dashboard/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  33. package/dashboard/dist/assets/path-CbwjOpE9.js +1 -0
  34. package/dashboard/dist/assets/pieDiagram-a8764435-DtcOKNPc.js +35 -0
  35. package/dashboard/dist/assets/quadrantDiagram-1e28029f-zoSI_Ltf.js +7 -0
  36. package/dashboard/dist/assets/requirementDiagram-08caed73-TsQZ9lTB.js +52 -0
  37. package/dashboard/dist/assets/sankeyDiagram-a04cb91d-DE5ciDwD.js +8 -0
  38. package/dashboard/dist/assets/sequenceDiagram-c5b8d532-DhabPb2n.js +122 -0
  39. package/dashboard/dist/assets/stateDiagram-1ecb1508-Bg2q_YNx.js +1 -0
  40. package/dashboard/dist/assets/stateDiagram-v2-c2b004d7-Bs5iRjYB.js +1 -0
  41. package/dashboard/dist/assets/styles-b4e223ce-DchmAmav.js +160 -0
  42. package/dashboard/dist/assets/styles-ca3715f6-Bu5zjaDx.js +207 -0
  43. package/dashboard/dist/assets/styles-d45a18b0-jCaD8baR.js +116 -0
  44. package/dashboard/dist/assets/svgDrawCommon-b86b1483-BrYVGY4c.js +1 -0
  45. package/dashboard/dist/assets/timeline-definition-faaaa080--sq0bTHe.js +61 -0
  46. package/dashboard/dist/assets/xychartDiagram-f5964ef8-ByvzN0uj.js +7 -0
  47. package/dashboard/dist/index.html +22 -0
  48. package/dist/cli.d.ts +4 -0
  49. package/dist/cli.d.ts.map +1 -0
  50. package/dist/cli.js +641 -0
  51. package/dist/cli.js.map +1 -0
  52. package/dist/commands/dashboard.d.ts +2 -0
  53. package/dist/commands/dashboard.d.ts.map +1 -0
  54. package/dist/commands/dashboard.js +184 -0
  55. package/dist/commands/dashboard.js.map +1 -0
  56. package/dist/commands/init.d.ts +5 -0
  57. package/dist/commands/init.d.ts.map +1 -0
  58. package/dist/commands/init.js +501 -0
  59. package/dist/commands/init.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +602 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/librarian/autofix.d.ts +34 -0
  65. package/dist/librarian/autofix.d.ts.map +1 -0
  66. package/dist/librarian/autofix.js +369 -0
  67. package/dist/librarian/autofix.js.map +1 -0
  68. package/dist/librarian/heartbeat.d.ts +38 -0
  69. package/dist/librarian/heartbeat.d.ts.map +1 -0
  70. package/dist/librarian/heartbeat.js +98 -0
  71. package/dist/librarian/heartbeat.js.map +1 -0
  72. package/dist/librarian/initializer.d.ts +41 -0
  73. package/dist/librarian/initializer.d.ts.map +1 -0
  74. package/dist/librarian/initializer.js +202 -0
  75. package/dist/librarian/initializer.js.map +1 -0
  76. package/dist/librarian/memory-manager.d.ts +37 -0
  77. package/dist/librarian/memory-manager.d.ts.map +1 -0
  78. package/dist/librarian/memory-manager.js +205 -0
  79. package/dist/librarian/memory-manager.js.map +1 -0
  80. package/dist/librarian/oracle.d.ts +51 -0
  81. package/dist/librarian/oracle.d.ts.map +1 -0
  82. package/dist/librarian/oracle.js +235 -0
  83. package/dist/librarian/oracle.js.map +1 -0
  84. package/dist/librarian/summarizer.d.ts +19 -0
  85. package/dist/librarian/summarizer.d.ts.map +1 -0
  86. package/dist/librarian/summarizer.js +175 -0
  87. package/dist/librarian/summarizer.js.map +1 -0
  88. package/dist/librarian/watcher.d.ts +51 -0
  89. package/dist/librarian/watcher.d.ts.map +1 -0
  90. package/dist/librarian/watcher.js +189 -0
  91. package/dist/librarian/watcher.js.map +1 -0
  92. package/dist/mcp-server.d.ts +10 -0
  93. package/dist/mcp-server.d.ts.map +1 -0
  94. package/dist/mcp-server.js +879 -0
  95. package/dist/mcp-server.js.map +1 -0
  96. package/dist/services/token-tracker.d.ts +58 -0
  97. package/dist/services/token-tracker.d.ts.map +1 -0
  98. package/dist/services/token-tracker.js +178 -0
  99. package/dist/services/token-tracker.js.map +1 -0
  100. package/dist/utils/chunker.d.ts +5 -0
  101. package/dist/utils/chunker.d.ts.map +1 -0
  102. package/dist/utils/chunker.js +121 -0
  103. package/dist/utils/chunker.js.map +1 -0
  104. package/dist/utils/config-manager.d.ts +65 -0
  105. package/dist/utils/config-manager.d.ts.map +1 -0
  106. package/dist/utils/config-manager.js +243 -0
  107. package/dist/utils/config-manager.js.map +1 -0
  108. package/dist/utils/config.d.ts +46 -0
  109. package/dist/utils/config.d.ts.map +1 -0
  110. package/dist/utils/config.js +171 -0
  111. package/dist/utils/config.js.map +1 -0
  112. package/dist/utils/diff-cleaner.d.ts +13 -0
  113. package/dist/utils/diff-cleaner.d.ts.map +1 -0
  114. package/dist/utils/diff-cleaner.js +80 -0
  115. package/dist/utils/diff-cleaner.js.map +1 -0
  116. package/dist/utils/git.d.ts +71 -0
  117. package/dist/utils/git.d.ts.map +1 -0
  118. package/dist/utils/git.js +285 -0
  119. package/dist/utils/git.js.map +1 -0
  120. package/dist/utils/llm.d.ts +30 -0
  121. package/dist/utils/llm.d.ts.map +1 -0
  122. package/dist/utils/llm.js +308 -0
  123. package/dist/utils/llm.js.map +1 -0
  124. package/dist/utils/pricing.d.ts +47 -0
  125. package/dist/utils/pricing.d.ts.map +1 -0
  126. package/dist/utils/pricing.js +171 -0
  127. package/dist/utils/pricing.js.map +1 -0
  128. package/package.json +45 -0
package/dist/index.js ADDED
@@ -0,0 +1,602 @@
1
+ #!/usr/bin/env node
2
+ import { Watcher } from './librarian/watcher.js';
3
+ import { Summarizer } from './librarian/summarizer.js';
4
+ import { MemoryManager } from './librarian/memory-manager.js';
5
+ import { OracleService } from './librarian/oracle.js';
6
+ import { Heartbeat } from './librarian/heartbeat.js';
7
+ import { GitUtils } from './utils/git.js';
8
+ import { getApiKey, getModel } from './utils/config.js';
9
+ import { generateSummary } from './utils/llm.js';
10
+ import { handleDashboard } from './commands/dashboard.js';
11
+ import { handleInit } from './commands/init.js';
12
+ import * as fs from 'fs/promises';
13
+ import * as path from 'path';
14
+ import { simpleGit } from 'simple-git';
15
+ const COMMANDS = {
16
+ INIT: 'init',
17
+ WATCH: 'watch',
18
+ SYNC: 'sync',
19
+ CHECK: 'check',
20
+ VISUALIZE: 'visualize',
21
+ DASHBOARD: 'dashboard',
22
+ };
23
+ async function setupServices() {
24
+ // Validate API key is available (backward compatibility)
25
+ // New init command handles this via ConfigManager
26
+ try {
27
+ await getApiKey();
28
+ }
29
+ catch (error) {
30
+ // Don't exit if using new config system - let init command handle it
31
+ console.warn('Warning: API key not found. Run `vibeguard init` to configure.');
32
+ }
33
+ }
34
+ // handleInit is now imported from commands/init.ts
35
+ async function handleWatch() {
36
+ console.log('Starting VibeGuard Librarian watcher...\n');
37
+ await setupServices();
38
+ const repoPath = process.cwd();
39
+ const watcher = new Watcher(repoPath);
40
+ const summarizer = new Summarizer();
41
+ const memoryManager = new MemoryManager(repoPath);
42
+ const gitUtils = new GitUtils(repoPath);
43
+ // Initialize Oracle and Heartbeat
44
+ const oracle = new OracleService(repoPath);
45
+ const heartbeat = new Heartbeat(oracle);
46
+ heartbeat.start(); // Start quiet reflection monitoring
47
+ // Set up commit processing callback
48
+ watcher.onCommitDetected(async () => {
49
+ // Record activity for quiet reflection
50
+ heartbeat.recordActivity();
51
+ try {
52
+ console.log('New commit detected, processing...');
53
+ const lastProcessed = await watcher.getLastProcessedCommit();
54
+ const currentHead = await gitUtils.getHeadCommit();
55
+ if (lastProcessed === currentHead) {
56
+ // No new commit, check for unstaged changes as draft memory
57
+ const unstagedDiff = await gitUtils.getUnstagedDiff();
58
+ if (unstagedDiff && unstagedDiff.trim().length > 0) {
59
+ console.log('No new commit, but unstaged changes detected. Creating draft memory...');
60
+ // Read current memory
61
+ const currentMemory = await memoryManager.readMemory();
62
+ // Prefix with draft note
63
+ const draftDiff = `## Draft Changes (Unstaged)\n\n${unstagedDiff}`;
64
+ // Summarize and update (using flash for routine summarization)
65
+ const updatedMemory = await summarizer.summarizeDiff(draftDiff, currentMemory, 'flash');
66
+ // Write updated memory
67
+ await memoryManager.writeMemory(updatedMemory);
68
+ console.log('✅ Draft memory updated successfully');
69
+ }
70
+ return; // Already processed or no changes
71
+ }
72
+ // Get diff for ALL commits between lastProcessed and currentHead
73
+ // This handles cases where multiple commits happened quickly
74
+ let diff;
75
+ if (lastProcessed) {
76
+ // Get diff from lastProcessed to currentHead (covers all commits in between)
77
+ try {
78
+ diff = await gitUtils.getCommitRangeDiff(lastProcessed, currentHead);
79
+ }
80
+ catch (error) {
81
+ // Fallback: if range diff fails, try latest commit only
82
+ console.warn('Could not get commit range diff, falling back to latest commit:', error.message);
83
+ diff = await gitUtils.getLatestCommitDiff();
84
+ }
85
+ }
86
+ else {
87
+ // No previous commit, use latest commit diff
88
+ diff = await gitUtils.getLatestCommitDiff();
89
+ }
90
+ if (!diff || diff.trim().length === 0) {
91
+ console.log('No diff found. Skipping...');
92
+ await watcher.setLastProcessedCommit(currentHead);
93
+ return;
94
+ }
95
+ // Read current memory
96
+ const currentMemory = await memoryManager.readMemory();
97
+ // Summarize and update (using flash for routine summarization)
98
+ const updatedMemory = await summarizer.summarizeDiff(diff, currentMemory, 'flash');
99
+ // Write updated memory
100
+ await memoryManager.writeMemory(updatedMemory);
101
+ // Update last processed commit
102
+ await watcher.setLastProcessedCommit(currentHead);
103
+ console.log('✅ Memory updated successfully');
104
+ }
105
+ catch (error) {
106
+ console.error('Error processing commit:', error);
107
+ }
108
+ });
109
+ // Initialize watcher state with current HEAD if not set
110
+ const currentHead = await gitUtils.getHeadCommit();
111
+ const lastProcessed = await watcher.getLastProcessedCommit();
112
+ if (!lastProcessed) {
113
+ await watcher.setLastProcessedCommit(currentHead);
114
+ }
115
+ // Start watching
116
+ await watcher.startWatching();
117
+ // Handle graceful shutdown
118
+ process.on('SIGINT', async () => {
119
+ console.log('\nShutting down watcher...');
120
+ heartbeat.stop();
121
+ await watcher.stopWatching();
122
+ process.exit(0);
123
+ });
124
+ process.on('SIGTERM', async () => {
125
+ console.log('\nShutting down watcher...');
126
+ heartbeat.stop();
127
+ await watcher.stopWatching();
128
+ process.exit(0);
129
+ });
130
+ // Keep process alive
131
+ console.log('Watcher is running. Press Ctrl+C to stop.\n');
132
+ }
133
+ async function handleCheck() {
134
+ console.log('VibeGuard Health Check\n');
135
+ const checks = [];
136
+ // Check 1: .env file exists and contains API key
137
+ try {
138
+ const envPath = path.join(process.cwd(), '.env');
139
+ try {
140
+ const envContent = await fs.readFile(envPath, 'utf-8');
141
+ // Check for GEMINI_API_KEY with more robust parsing
142
+ const lines = envContent.split('\n');
143
+ const apiKeyLine = lines.find(line => line.trim().startsWith('GEMINI_API_KEY=') &&
144
+ !line.trim().startsWith('#'));
145
+ if (apiKeyLine) {
146
+ // Extract value (handle quoted and unquoted values)
147
+ const value = apiKeyLine.split('=')[1]?.trim().replace(/^["']|["']$/g, '');
148
+ if (value && value.length > 0) {
149
+ checks.push({ name: 'Environment (.env)', status: true, message: '.env file exists with GEMINI_API_KEY' });
150
+ }
151
+ else {
152
+ checks.push({ name: 'Environment (.env)', status: false, message: '.env file exists but GEMINI_API_KEY is empty' });
153
+ }
154
+ }
155
+ else {
156
+ checks.push({ name: 'Environment (.env)', status: false, message: '.env file exists but GEMINI_API_KEY is missing' });
157
+ }
158
+ }
159
+ catch (error) {
160
+ checks.push({ name: 'Environment (.env)', status: false, message: '.env file not found in project root' });
161
+ }
162
+ }
163
+ catch (error) {
164
+ checks.push({ name: 'Environment (.env)', status: false, message: 'Error checking .env file' });
165
+ }
166
+ // Check 2: API key is valid and active (test with minimal Gemini call)
167
+ try {
168
+ const apiKey = await getApiKey();
169
+ // Basic validation: API key should be non-empty and look valid
170
+ if (!apiKey || apiKey.trim().length === 0) {
171
+ checks.push({ name: 'Librarian Health (API Key)', status: false, message: 'API key is empty' });
172
+ }
173
+ else {
174
+ // Test with minimal call - use a neutral prompt unlikely to trigger safety filters
175
+ try {
176
+ const model = await getModel();
177
+ await generateSummary('Say hello', 'You are a helpful assistant. Respond briefly.', { maxTokens: 1000, feature: 'Librarian' });
178
+ checks.push({ name: 'Librarian Health (API Key)', status: true, message: `API key is active (tested with ${model})` });
179
+ }
180
+ catch (error) {
181
+ const errorMsg = error.message || 'Unknown error';
182
+ if (errorMsg.includes('API_KEY') || errorMsg.includes('401') || errorMsg.includes('403')) {
183
+ checks.push({ name: 'Librarian Health (API Key)', status: false, message: `API key is invalid or unauthorized: ${errorMsg}` });
184
+ }
185
+ else {
186
+ checks.push({ name: 'Librarian Health (API Key)', status: false, message: `API test failed: ${errorMsg}` });
187
+ }
188
+ }
189
+ }
190
+ }
191
+ catch (error) {
192
+ checks.push({ name: 'Librarian Health (API Key)', status: false, message: `API key not found: ${error.message || 'Unknown error'}` });
193
+ }
194
+ // Check 3: Git repository
195
+ try {
196
+ const git = simpleGit(process.cwd());
197
+ const isRepo = await git.checkIsRepo();
198
+ if (isRepo) {
199
+ checks.push({ name: 'Git Status', status: true, message: 'Current directory is a Git repository' });
200
+ }
201
+ else {
202
+ checks.push({ name: 'Git Status', status: false, message: 'Current directory is not a Git repository' });
203
+ }
204
+ }
205
+ catch (error) {
206
+ checks.push({ name: 'Git Status', status: false, message: 'Error checking Git repository status' });
207
+ }
208
+ // Check 4: PROJECT_MEMORY.md exists
209
+ try {
210
+ const memoryPath = path.join(process.cwd(), 'PROJECT_MEMORY.md');
211
+ try {
212
+ await fs.access(memoryPath);
213
+ checks.push({ name: 'PROJECT_MEMORY.md', status: true, message: 'PROJECT_MEMORY.md exists' });
214
+ }
215
+ catch (error) {
216
+ checks.push({ name: 'PROJECT_MEMORY.md', status: false, message: 'PROJECT_MEMORY.md not found in project root' });
217
+ }
218
+ }
219
+ catch (error) {
220
+ checks.push({ name: 'PROJECT_MEMORY.md', status: false, message: 'Error checking PROJECT_MEMORY.md' });
221
+ }
222
+ // Print status report
223
+ console.log('Status Report:');
224
+ console.log('─'.repeat(60));
225
+ for (const check of checks) {
226
+ const icon = check.status ? '✓' : '✗';
227
+ const colorCode = check.status ? '\x1b[32m' : '\x1b[31m'; // Green for success, red for failure
228
+ const resetCode = '\x1b[0m';
229
+ console.log(`${colorCode}${icon}${resetCode} ${check.name.padEnd(30)} ${check.message}`);
230
+ }
231
+ console.log('─'.repeat(60));
232
+ const allPassed = checks.every(c => c.status);
233
+ if (allPassed) {
234
+ console.log('\n✅ All checks passed! VibeGuard is ready to use.');
235
+ }
236
+ else {
237
+ console.log('\n⚠️ Some checks failed. Please review the issues above.');
238
+ process.exit(1);
239
+ }
240
+ }
241
+ /**
242
+ * Scan src/ directory and return file structure
243
+ */
244
+ async function scanSrcDirectory() {
245
+ const srcPath = path.join(process.cwd(), 'src');
246
+ const files = [];
247
+ async function walkDir(dir, prefix = '', depth = 0) {
248
+ if (depth > 10)
249
+ return; // Limit depth
250
+ try {
251
+ const entries = await fs.readdir(dir, { withFileTypes: true });
252
+ // Filter out common ignore patterns
253
+ const filtered = entries.filter(entry => {
254
+ const name = entry.name;
255
+ return !name.startsWith('.') &&
256
+ name !== 'node_modules' &&
257
+ name !== 'dist' &&
258
+ name !== 'build';
259
+ });
260
+ for (let i = 0; i < filtered.length; i++) {
261
+ const entry = filtered[i];
262
+ const isLast = i === filtered.length - 1;
263
+ const currentPrefix = isLast ? '└── ' : '├── ';
264
+ const nextPrefix = isLast ? ' ' : '│ ';
265
+ files.push(prefix + currentPrefix + entry.name);
266
+ if (entry.isDirectory()) {
267
+ const fullPath = path.join(dir, entry.name);
268
+ await walkDir(fullPath, prefix + nextPrefix, depth + 1);
269
+ }
270
+ }
271
+ }
272
+ catch (error) {
273
+ // Ignore permission errors
274
+ }
275
+ }
276
+ try {
277
+ await fs.access(srcPath);
278
+ await walkDir(srcPath);
279
+ }
280
+ catch (error) {
281
+ throw new Error('src/ directory not found. Make sure you are in the project root.');
282
+ }
283
+ return files.join('\n');
284
+ }
285
+ /**
286
+ * Validate Mermaid syntax - check for unclosed brackets
287
+ */
288
+ function validateMermaidSyntax(mermaidCode) {
289
+ const errors = [];
290
+ // Extract the mermaid code block content
291
+ const mermaidMatch = mermaidCode.match(/```mermaid\n([\s\S]*?)```/);
292
+ if (!mermaidMatch) {
293
+ errors.push('No mermaid code block found');
294
+ return { valid: false, errors };
295
+ }
296
+ const code = mermaidMatch[1];
297
+ // Check for balanced brackets
298
+ const bracketPairs = [
299
+ { open: '[', close: ']', name: 'square brackets' },
300
+ { open: '(', close: ')', name: 'parentheses' },
301
+ { open: '{', close: '}', name: 'curly braces' },
302
+ ];
303
+ for (const pair of bracketPairs) {
304
+ let depth = 0;
305
+ for (let i = 0; i < code.length; i++) {
306
+ if (code[i] === pair.open) {
307
+ depth++;
308
+ }
309
+ else if (code[i] === pair.close) {
310
+ depth--;
311
+ if (depth < 0) {
312
+ errors.push(`Unmatched closing ${pair.name} at position ${i}`);
313
+ return { valid: false, errors };
314
+ }
315
+ }
316
+ }
317
+ if (depth > 0) {
318
+ errors.push(`Unclosed ${pair.name}: ${depth} unclosed bracket(s)`);
319
+ }
320
+ }
321
+ // Check for balanced subgraph blocks
322
+ const subgraphOpen = (code.match(/subgraph\s+[^\s]+\s*\[/g) || []).length;
323
+ const subgraphClose = (code.match(/end\s*$/gm) || []).length;
324
+ if (subgraphOpen !== subgraphClose) {
325
+ errors.push(`Unbalanced subgraphs: ${subgraphOpen} opened, ${subgraphClose} closed`);
326
+ }
327
+ return { valid: errors.length === 0, errors };
328
+ }
329
+ async function handleVisualize() {
330
+ console.log('Generating architecture diagram...\n');
331
+ await setupServices();
332
+ const repoPath = process.cwd();
333
+ const srcPath = path.join(repoPath, 'src');
334
+ try {
335
+ // Check if src/ exists
336
+ await fs.access(srcPath);
337
+ }
338
+ catch (error) {
339
+ console.error('Error: src/ directory not found. Make sure you are in the project root.');
340
+ process.exit(1);
341
+ }
342
+ // Scan src/ directory
343
+ console.log('Scanning src/ directory...');
344
+ const fileStructure = await scanSrcDirectory();
345
+ // Read PROJECT_MEMORY.md for context
346
+ const memoryManager = new MemoryManager(repoPath);
347
+ let projectMemory = '';
348
+ try {
349
+ projectMemory = await memoryManager.readMemory();
350
+ }
351
+ catch (error) {
352
+ console.warn('Warning: Could not read PROJECT_MEMORY.md. Continuing without context...');
353
+ }
354
+ // Build prompt for Gemini
355
+ const today = new Date().toLocaleDateString();
356
+ const prompt = `You are a Senior Software Architect & Mermaid.js Specialist. Your task is to generate a valid Mermaid.js flowchart (TD - Top Down) that visually represents the project's architecture.
357
+
358
+ # PROJECT STRUCTURE
359
+ \`\`\`
360
+ ${fileStructure}
361
+ \`\`\`
362
+
363
+ ${projectMemory ? `# PROJECT CONTEXT\n\`\`\`\n${projectMemory}\n\`\`\`\n\n` : ''}# REQUIREMENTS
364
+ 1. Use Mermaid.js Flowchart syntax (flowchart TD)
365
+ 2. Structure:
366
+ - Use subgraphs to group "Internal Logic" vs "External Services"
367
+ - Nodes should represent key components (CLI, MCP Server, Watcher, Gemini API, File System, etc.)
368
+ - Edges should have descriptive text (e.g., "Sends Diffs", "Returns Summary", "Updates Memory")
369
+ 3. Color Styling (REQUIRED):
370
+ - Add a classDef section at the end of the Mermaid code (before the closing code block)
371
+ - Define three classes with the following colors:
372
+ * ExternalServices: fill:#e1f5fe (Light Blue)
373
+ * InternalLogic: fill:#e8f5e9 (Light Green)
374
+ * PersistenceFiles: fill:#fff8e1 (Soft Amber)
375
+ - Apply classes to subgraphs or specific nodes:
376
+ * Apply "ExternalServices" class to the "External Services" subgraph
377
+ * Apply "InternalLogic" class to the "Internal Logic" subgraph
378
+ * Apply "PersistenceFiles" class to nodes representing File System, Git Repository, or any persistence layer
379
+ - Example classDef syntax:
380
+ \`\`\`
381
+ classDef ExternalServices fill:#e1f5fe,stroke:#01579b,stroke-width:2px
382
+ classDef InternalLogic fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
383
+ classDef PersistenceFiles fill:#fff8e1,stroke:#f57f17,stroke-width:2px
384
+ \`\`\`
385
+ - Apply classes using: \`class subgraphId ExternalServices\` or \`class nodeId PersistenceFiles\`
386
+ 4. Syntax Rules:
387
+ - All node IDs must be alphanumeric (use [ ] for labels with spaces)
388
+ - Avoid special characters like & or > inside labels unless escaped
389
+ - Ensure all brackets are properly closed
390
+ - All subgraphs must have matching "end" statements
391
+ 5. Output Format:
392
+ - Wrap the output in a standard Markdown code block: \`\`\`mermaid
393
+ - Include a brief H1 header "# VibeGuard Architecture Diagram" before the code block
394
+ - Add a short "Legend" section after the diagram explaining symbols and color scheme
395
+
396
+ # OUTPUT
397
+ Return ONLY the complete Markdown content for DIAGRAM.md, including:
398
+ - H1 header
399
+ - Mermaid code block with valid syntax
400
+ - Legend section
401
+
402
+ Do not include any explanations outside the Markdown format.`;
403
+ const systemPrompt = `You are an expert at creating Mermaid.js diagrams for software architecture. You always generate valid, well-structured diagrams that follow Mermaid syntax rules strictly.`;
404
+ console.log('Generating diagram with Gemini...');
405
+ try {
406
+ const diagramContent = await generateSummary(prompt, systemPrompt, {
407
+ thinkingLevel: 'pro',
408
+ maxTokens: 10000,
409
+ feature: 'Librarian',
410
+ });
411
+ // Validate Mermaid syntax
412
+ console.log('Validating Mermaid syntax...');
413
+ const validation = validateMermaidSyntax(diagramContent);
414
+ if (!validation.valid) {
415
+ console.error('❌ Mermaid syntax validation failed:');
416
+ validation.errors.forEach(error => console.error(` - ${error}`));
417
+ console.error('\nAttempting to fix syntax issues...');
418
+ // Try to fix common issues and regenerate
419
+ const fixPrompt = `The previous Mermaid diagram had syntax errors: ${validation.errors.join(', ')}.
420
+
421
+ Please regenerate the diagram with these fixes:
422
+ ${diagramContent}
423
+
424
+ CRITICAL REQUIREMENTS:
425
+ 1. Ensure all brackets are closed and all subgraphs have matching "end" statements.
426
+ 2. MUST include color styling with classDef:
427
+ - classDef ExternalServices fill:#e1f5fe,stroke:#01579b,stroke-width:2px
428
+ - classDef InternalLogic fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
429
+ - classDef PersistenceFiles fill:#fff8e1,stroke:#f57f17,stroke-width:2px
430
+ 3. Apply classes to subgraphs: "External Services" subgraph gets ExternalServices class, "Internal Logic" subgraph gets InternalLogic class.
431
+ 4. Apply PersistenceFiles class to File System, Git Repository, or any persistence-related nodes.`;
432
+ const fixedContent = await generateSummary(fixPrompt, systemPrompt, {
433
+ thinkingLevel: 'pro',
434
+ maxTokens: 10000,
435
+ feature: 'Librarian',
436
+ });
437
+ const fixedValidation = validateMermaidSyntax(fixedContent);
438
+ if (!fixedValidation.valid) {
439
+ console.error('❌ Could not fix syntax errors. Saving anyway, but diagram may not render correctly.');
440
+ console.error('Errors:', fixedValidation.errors);
441
+ }
442
+ else {
443
+ console.log('✅ Syntax fixed successfully!');
444
+ }
445
+ // Save the fixed version
446
+ const diagramPath = path.join(repoPath, 'DIAGRAM.md');
447
+ await fs.writeFile(diagramPath, fixedContent, 'utf-8');
448
+ console.log(`\n✅ Diagram saved to DIAGRAM.md`);
449
+ }
450
+ else {
451
+ console.log('✅ Mermaid syntax is valid!');
452
+ // Save the diagram
453
+ const diagramPath = path.join(repoPath, 'DIAGRAM.md');
454
+ await fs.writeFile(diagramPath, diagramContent, 'utf-8');
455
+ console.log(`\n✅ Diagram saved to DIAGRAM.md`);
456
+ }
457
+ }
458
+ catch (error) {
459
+ console.error('Error generating diagram:', error.message || error);
460
+ process.exit(1);
461
+ }
462
+ }
463
+ async function handleSync(deep = false) {
464
+ console.log(deep ? 'Running deep sync (full history)...' : 'Running sync (latest commits)...\n');
465
+ await setupServices();
466
+ const repoPath = process.cwd();
467
+ const summarizer = new Summarizer();
468
+ const memoryManager = new MemoryManager(repoPath);
469
+ const gitUtils = new GitUtils(repoPath);
470
+ const watcher = new Watcher(repoPath);
471
+ try {
472
+ if (deep) {
473
+ // Process full history
474
+ console.log('Processing full Git history (this may take a while)...');
475
+ // Get all commits (or a large number)
476
+ const commits = await gitUtils.getLatestCommits(1000); // Process up to 1000 commits
477
+ console.log(`Processing ${commits.length} commits...`);
478
+ // Process in batches
479
+ const batchSize = 10;
480
+ let currentMemory = await memoryManager.readMemory();
481
+ for (let i = 0; i < commits.length; i += batchSize) {
482
+ const batch = commits.slice(i, i + batchSize);
483
+ console.log(`Processing batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(commits.length / batchSize)}...`);
484
+ const diffs = [];
485
+ for (const commit of batch) {
486
+ try {
487
+ const diff = await gitUtils.getCommitDiff(commit.hash);
488
+ diffs.push(`## Commit: ${commit.message}\n\n${diff}`);
489
+ }
490
+ catch (error) {
491
+ console.warn(`Skipping commit ${commit.hash}:`, error);
492
+ }
493
+ }
494
+ const combinedDiff = diffs.join('\n\n---\n\n');
495
+ currentMemory = await summarizer.summarizeDiff(combinedDiff, currentMemory, 'flash');
496
+ }
497
+ await memoryManager.writeMemory(currentMemory);
498
+ const currentHead = await gitUtils.getHeadCommit();
499
+ await watcher.setLastProcessedCommit(currentHead);
500
+ console.log('✅ Deep sync complete!');
501
+ }
502
+ else {
503
+ // Process latest commit(s)
504
+ const lastProcessed = await watcher.getLastProcessedCommit();
505
+ const currentHead = await gitUtils.getHeadCommit();
506
+ if (lastProcessed === currentHead) {
507
+ // No new commit, check for unstaged changes as draft memory
508
+ const unstagedDiff = await gitUtils.getUnstagedDiff();
509
+ if (unstagedDiff && unstagedDiff.trim().length > 0) {
510
+ console.log('No new commit, but unstaged changes detected. Creating draft memory...');
511
+ // Read current memory
512
+ const currentMemory = await memoryManager.readMemory();
513
+ // Prefix with draft note
514
+ const draftDiff = `## Draft Changes (Unstaged)\n\n${unstagedDiff}`;
515
+ // Summarize and update (using flash for routine summarization)
516
+ const updatedMemory = await summarizer.summarizeDiff(draftDiff, currentMemory, 'flash');
517
+ // Write updated memory
518
+ await memoryManager.writeMemory(updatedMemory);
519
+ console.log('✅ Draft memory sync complete!');
520
+ return;
521
+ }
522
+ console.log('No new commits to process.');
523
+ return;
524
+ }
525
+ console.log('Processing latest commit...');
526
+ // Get diff for the new commit using latest commit diff method
527
+ const diff = await gitUtils.getLatestCommitDiff();
528
+ if (!diff || diff.trim().length === 0) {
529
+ console.log('No diff found for latest commit. Updating state and skipping...');
530
+ await watcher.setLastProcessedCommit(currentHead);
531
+ return;
532
+ }
533
+ const currentMemory = await memoryManager.readMemory();
534
+ const updatedMemory = await summarizer.summarizeDiff(diff, currentMemory, 'flash');
535
+ await memoryManager.writeMemory(updatedMemory);
536
+ await watcher.setLastProcessedCommit(currentHead);
537
+ console.log('✅ Sync complete!');
538
+ }
539
+ }
540
+ catch (error) {
541
+ console.error('Error during sync:', error);
542
+ process.exit(1);
543
+ }
544
+ }
545
+ async function main() {
546
+ const args = process.argv.slice(2);
547
+ const command = args[0];
548
+ if (!command) {
549
+ console.log(`
550
+ VibeGuard Librarian - Context Management Tool
551
+
552
+ Usage:
553
+ vibeguard init Initialize and create PROJECT_MEMORY.md
554
+ vibeguard watch Start watching for Git changes
555
+ vibeguard sync Process latest commit(s)
556
+ vibeguard sync --deep Process full Git history
557
+ vibeguard check Run health check (env, API key, Git, memory)
558
+ vibeguard visualize Generate architecture diagram (DIAGRAM.md)
559
+ vibeguard dashboard Start the VibeGuard dashboard server
560
+
561
+ For more information, visit: https://github.com/cdaviddav/vibeguard
562
+ `);
563
+ process.exit(0);
564
+ }
565
+ try {
566
+ switch (command) {
567
+ case COMMANDS.INIT:
568
+ await handleInit(); // Uses new interactive wizard
569
+ break;
570
+ case COMMANDS.WATCH:
571
+ await handleWatch();
572
+ break;
573
+ case COMMANDS.SYNC:
574
+ const deep = args.includes('--deep');
575
+ await handleSync(deep);
576
+ break;
577
+ case COMMANDS.CHECK:
578
+ await handleCheck();
579
+ break;
580
+ case COMMANDS.VISUALIZE:
581
+ await handleVisualize();
582
+ break;
583
+ case COMMANDS.DASHBOARD:
584
+ await handleDashboard();
585
+ break;
586
+ default:
587
+ console.error(`Unknown command: ${command}`);
588
+ console.log('Run `vibeguard` without arguments to see usage.');
589
+ process.exit(1);
590
+ }
591
+ }
592
+ catch (error) {
593
+ console.error('Error:', error.message || error);
594
+ process.exit(1);
595
+ }
596
+ }
597
+ // Run main function (this is the entry point)
598
+ main().catch(error => {
599
+ console.error('Fatal error:', error);
600
+ process.exit(1);
601
+ });
602
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface FixResult {
2
+ success: boolean;
3
+ branchName?: string;
4
+ error?: string;
5
+ filesChanged?: string[];
6
+ }
7
+ export declare class AutoFixService {
8
+ private repoPath;
9
+ private gitUtils;
10
+ private oracleService;
11
+ private git;
12
+ constructor(repoPath?: string);
13
+ /**
14
+ * Apply a fix for a prophecy by creating a git branch and refactoring code
15
+ */
16
+ applyFix(prophecyId: string): Promise<FixResult>;
17
+ /**
18
+ * Check if there are uncommitted changes in the working directory
19
+ */
20
+ private checkUncommittedChanges;
21
+ /**
22
+ * Identify which files are affected by the prophecy using AI
23
+ */
24
+ private identifyAffectedFiles;
25
+ /**
26
+ * Apply a fix to a specific file using AI
27
+ */
28
+ private applyFixToFile;
29
+ /**
30
+ * Read PROJECT_MEMORY.md for context
31
+ */
32
+ private readProjectMemory;
33
+ }
34
+ //# sourceMappingURL=autofix.d.ts.map