repomemory 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 (66) hide show
  1. package/.claude-plugin/plugin.json +8 -0
  2. package/.mcp.json +8 -0
  3. package/README.md +151 -104
  4. package/dist/commands/analyze.d.ts +2 -0
  5. package/dist/commands/analyze.d.ts.map +1 -1
  6. package/dist/commands/analyze.js +162 -188
  7. package/dist/commands/analyze.js.map +1 -1
  8. package/dist/commands/dashboard.d.ts +5 -0
  9. package/dist/commands/dashboard.d.ts.map +1 -0
  10. package/dist/commands/dashboard.js +520 -0
  11. package/dist/commands/dashboard.js.map +1 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +33 -34
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/serve.d.ts.map +1 -1
  16. package/dist/commands/serve.js +2 -1
  17. package/dist/commands/serve.js.map +1 -1
  18. package/dist/commands/setup.d.ts.map +1 -1
  19. package/dist/commands/setup.js +151 -35
  20. package/dist/commands/setup.js.map +1 -1
  21. package/dist/commands/status.d.ts +4 -0
  22. package/dist/commands/status.d.ts.map +1 -0
  23. package/dist/commands/status.js +87 -0
  24. package/dist/commands/status.js.map +1 -0
  25. package/dist/commands/sync.d.ts.map +1 -1
  26. package/dist/commands/sync.js +57 -27
  27. package/dist/commands/sync.js.map +1 -1
  28. package/dist/commands/wizard.d.ts +4 -0
  29. package/dist/commands/wizard.d.ts.map +1 -0
  30. package/dist/commands/wizard.js +184 -0
  31. package/dist/commands/wizard.js.map +1 -0
  32. package/dist/index.js +37 -42
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/ai-provider.d.ts +11 -0
  35. package/dist/lib/ai-provider.d.ts.map +1 -1
  36. package/dist/lib/ai-provider.js +139 -69
  37. package/dist/lib/ai-provider.js.map +1 -1
  38. package/dist/lib/config.d.ts +11 -15
  39. package/dist/lib/config.d.ts.map +1 -1
  40. package/dist/lib/config.js +34 -22
  41. package/dist/lib/config.js.map +1 -1
  42. package/dist/lib/context-store.d.ts +11 -0
  43. package/dist/lib/context-store.d.ts.map +1 -1
  44. package/dist/lib/context-store.js +51 -18
  45. package/dist/lib/context-store.js.map +1 -1
  46. package/dist/lib/git.d.ts +1 -0
  47. package/dist/lib/git.d.ts.map +1 -1
  48. package/dist/lib/git.js +34 -20
  49. package/dist/lib/git.js.map +1 -1
  50. package/dist/lib/json-repair.d.ts +24 -0
  51. package/dist/lib/json-repair.d.ts.map +1 -0
  52. package/dist/lib/json-repair.js +140 -0
  53. package/dist/lib/json-repair.js.map +1 -0
  54. package/dist/lib/repo-scanner.d.ts.map +1 -1
  55. package/dist/lib/repo-scanner.js +103 -26
  56. package/dist/lib/repo-scanner.js.map +1 -1
  57. package/dist/lib/search.d.ts +10 -4
  58. package/dist/lib/search.d.ts.map +1 -1
  59. package/dist/lib/search.js +136 -51
  60. package/dist/lib/search.js.map +1 -1
  61. package/dist/mcp/server.d.ts.map +1 -1
  62. package/dist/mcp/server.js +163 -54
  63. package/dist/mcp/server.js.map +1 -1
  64. package/package.json +25 -9
  65. package/server.json +46 -0
  66. package/skills/repomemory/SKILL.md +29 -0
@@ -0,0 +1,520 @@
1
+ import chalk from "chalk";
2
+ import { createServer } from "http";
3
+ import { loadConfig } from "../lib/config.js";
4
+ import { ContextStore } from "../lib/context-store.js";
5
+ export async function dashboardCommand(options) {
6
+ const repoRoot = options.dir || process.cwd();
7
+ const port = parseInt(options.port || "3333");
8
+ const config = loadConfig(repoRoot);
9
+ const store = new ContextStore(repoRoot, config);
10
+ if (!store.exists()) {
11
+ console.log(chalk.red("\u2717 No .context/ directory found. Run `repomemory init` first."));
12
+ process.exit(1);
13
+ }
14
+ const server = createServer((req, res) => {
15
+ const url = new URL(req.url || "/", `http://localhost:${port}`);
16
+ // API: return JSON data
17
+ if (url.pathname === "/api/entries") {
18
+ const category = url.searchParams.get("category") || undefined;
19
+ const entries = store.listEntries(category);
20
+ res.writeHead(200, { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" });
21
+ res.end(JSON.stringify(entries.map((e) => ({
22
+ category: e.category,
23
+ filename: e.filename,
24
+ title: e.title,
25
+ content: e.content,
26
+ relativePath: e.relativePath,
27
+ lastModified: e.lastModified.toISOString(),
28
+ sizeBytes: e.sizeBytes,
29
+ }))));
30
+ return;
31
+ }
32
+ if (url.pathname === "/api/stats") {
33
+ const stats = store.getStats();
34
+ res.writeHead(200, { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" });
35
+ res.end(JSON.stringify(stats));
36
+ return;
37
+ }
38
+ if (url.pathname === "/api/index") {
39
+ const content = store.readIndex();
40
+ res.writeHead(200, { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" });
41
+ res.end(JSON.stringify({ content }));
42
+ return;
43
+ }
44
+ // Serve the SPA
45
+ res.writeHead(200, { "Content-Type": "text/html" });
46
+ res.end(buildDashboardHTML(config.provider, config.model));
47
+ });
48
+ server.listen(port, () => {
49
+ const url = `http://localhost:${port}`;
50
+ console.log(chalk.bold(`\n\ud83c\udf10 repomemory dashboard\n`));
51
+ console.log(` ${chalk.cyan("URL:")} ${chalk.underline(url)}`);
52
+ console.log(` ${chalk.cyan("Root:")} ${repoRoot}`);
53
+ console.log(chalk.dim(`\n Press Ctrl+C to stop.\n`));
54
+ // Try to open browser
55
+ const { exec } = require("child_process");
56
+ const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
57
+ exec(`${cmd} ${url}`, () => { }); // Silently fail if can't open
58
+ });
59
+ // Graceful shutdown
60
+ process.on("SIGTERM", () => { server.close(); process.exit(0); });
61
+ process.on("SIGINT", () => { server.close(); process.exit(0); });
62
+ }
63
+ function buildDashboardHTML(provider, model) {
64
+ return `<!DOCTYPE html>
65
+ <html lang="en">
66
+ <head>
67
+ <meta charset="UTF-8">
68
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
69
+ <title>repomemory dashboard</title>
70
+ <style>
71
+ :root {
72
+ --bg: #0a0a0f;
73
+ --surface: #12121a;
74
+ --surface2: #1a1a26;
75
+ --border: #2a2a3a;
76
+ --text: #e4e4ef;
77
+ --text-dim: #7a7a8f;
78
+ --accent: #58a6ff;
79
+ --accent2: #39d353;
80
+ --warn: #f0b040;
81
+ --danger: #f85149;
82
+ --purple: #bc8cff;
83
+ --radius: 12px;
84
+ }
85
+
86
+ * { margin: 0; padding: 0; box-sizing: border-box; }
87
+
88
+ body {
89
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
90
+ background: var(--bg);
91
+ color: var(--text);
92
+ min-height: 100vh;
93
+ }
94
+
95
+ .header {
96
+ border-bottom: 1px solid var(--border);
97
+ padding: 20px 32px;
98
+ display: flex;
99
+ justify-content: space-between;
100
+ align-items: center;
101
+ backdrop-filter: blur(12px);
102
+ background: rgba(10, 10, 15, 0.8);
103
+ position: sticky;
104
+ top: 0;
105
+ z-index: 10;
106
+ }
107
+
108
+ .header h1 {
109
+ font-size: 20px;
110
+ font-weight: 600;
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 10px;
114
+ }
115
+
116
+ .header h1 .logo {
117
+ background: linear-gradient(135deg, var(--accent), var(--purple));
118
+ -webkit-background-clip: text;
119
+ -webkit-text-fill-color: transparent;
120
+ }
121
+
122
+ .header .meta {
123
+ color: var(--text-dim);
124
+ font-size: 13px;
125
+ }
126
+
127
+ .search-bar {
128
+ margin: 24px 32px;
129
+ position: relative;
130
+ }
131
+
132
+ .search-bar input {
133
+ width: 100%;
134
+ padding: 14px 20px 14px 44px;
135
+ background: var(--surface);
136
+ border: 1px solid var(--border);
137
+ border-radius: var(--radius);
138
+ color: var(--text);
139
+ font-size: 15px;
140
+ outline: none;
141
+ transition: border-color 0.2s;
142
+ }
143
+
144
+ .search-bar input:focus {
145
+ border-color: var(--accent);
146
+ }
147
+
148
+ .search-bar .icon {
149
+ position: absolute;
150
+ left: 16px;
151
+ top: 50%;
152
+ transform: translateY(-50%);
153
+ color: var(--text-dim);
154
+ }
155
+
156
+ .stats-row {
157
+ display: grid;
158
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
159
+ gap: 16px;
160
+ padding: 0 32px 24px;
161
+ }
162
+
163
+ .stat-card {
164
+ background: var(--surface);
165
+ border: 1px solid var(--border);
166
+ border-radius: var(--radius);
167
+ padding: 20px;
168
+ text-align: center;
169
+ }
170
+
171
+ .stat-card .value {
172
+ font-size: 28px;
173
+ font-weight: 700;
174
+ color: var(--accent);
175
+ }
176
+
177
+ .stat-card .label {
178
+ font-size: 12px;
179
+ color: var(--text-dim);
180
+ text-transform: uppercase;
181
+ letter-spacing: 0.5px;
182
+ margin-top: 4px;
183
+ }
184
+
185
+ .main {
186
+ display: grid;
187
+ grid-template-columns: 240px 1fr;
188
+ gap: 0;
189
+ min-height: calc(100vh - 200px);
190
+ }
191
+
192
+ .sidebar {
193
+ border-right: 1px solid var(--border);
194
+ padding: 20px 0;
195
+ }
196
+
197
+ .sidebar .cat-btn {
198
+ display: block;
199
+ width: 100%;
200
+ padding: 10px 24px;
201
+ background: none;
202
+ border: none;
203
+ color: var(--text-dim);
204
+ font-size: 14px;
205
+ text-align: left;
206
+ cursor: pointer;
207
+ transition: all 0.15s;
208
+ border-left: 3px solid transparent;
209
+ }
210
+
211
+ .sidebar .cat-btn:hover {
212
+ background: var(--surface);
213
+ color: var(--text);
214
+ }
215
+
216
+ .sidebar .cat-btn.active {
217
+ background: var(--surface);
218
+ color: var(--accent);
219
+ border-left-color: var(--accent);
220
+ font-weight: 600;
221
+ }
222
+
223
+ .sidebar .cat-btn .count {
224
+ float: right;
225
+ background: var(--surface2);
226
+ color: var(--text-dim);
227
+ font-size: 11px;
228
+ padding: 2px 8px;
229
+ border-radius: 99px;
230
+ }
231
+
232
+ .content {
233
+ padding: 20px 32px;
234
+ }
235
+
236
+ .entry-grid {
237
+ display: grid;
238
+ gap: 12px;
239
+ }
240
+
241
+ .entry-card {
242
+ background: var(--surface);
243
+ border: 1px solid var(--border);
244
+ border-radius: var(--radius);
245
+ padding: 20px;
246
+ cursor: pointer;
247
+ transition: all 0.15s;
248
+ }
249
+
250
+ .entry-card:hover {
251
+ border-color: var(--accent);
252
+ transform: translateY(-1px);
253
+ }
254
+
255
+ .entry-card .card-header {
256
+ display: flex;
257
+ justify-content: space-between;
258
+ align-items: flex-start;
259
+ margin-bottom: 8px;
260
+ }
261
+
262
+ .entry-card .card-title {
263
+ font-weight: 600;
264
+ font-size: 15px;
265
+ }
266
+
267
+ .entry-card .card-meta {
268
+ color: var(--text-dim);
269
+ font-size: 12px;
270
+ display: flex;
271
+ gap: 12px;
272
+ }
273
+
274
+ .entry-card .card-category {
275
+ display: inline-block;
276
+ padding: 2px 10px;
277
+ border-radius: 99px;
278
+ font-size: 11px;
279
+ font-weight: 600;
280
+ text-transform: uppercase;
281
+ }
282
+
283
+ .cat-facts { background: rgba(88, 166, 255, 0.15); color: var(--accent); }
284
+ .cat-decisions { background: rgba(188, 140, 255, 0.15); color: var(--purple); }
285
+ .cat-regressions { background: rgba(248, 81, 73, 0.15); color: var(--danger); }
286
+ .cat-sessions { background: rgba(57, 211, 83, 0.15); color: var(--accent2); }
287
+ .cat-changelog { background: rgba(240, 176, 64, 0.15); color: var(--warn); }
288
+
289
+ .entry-card .preview {
290
+ color: var(--text-dim);
291
+ font-size: 13px;
292
+ line-height: 1.5;
293
+ max-height: 3em;
294
+ overflow: hidden;
295
+ margin-top: 8px;
296
+ }
297
+
298
+ /* Detail view (modal-style) */
299
+ .detail-overlay {
300
+ display: none;
301
+ position: fixed;
302
+ inset: 0;
303
+ background: rgba(0,0,0,0.7);
304
+ z-index: 100;
305
+ backdrop-filter: blur(4px);
306
+ }
307
+
308
+ .detail-overlay.visible { display: flex; justify-content: center; align-items: flex-start; padding: 60px 40px; }
309
+
310
+ .detail-panel {
311
+ background: var(--surface);
312
+ border: 1px solid var(--border);
313
+ border-radius: var(--radius);
314
+ max-width: 800px;
315
+ width: 100%;
316
+ max-height: 80vh;
317
+ overflow-y: auto;
318
+ padding: 32px;
319
+ }
320
+
321
+ .detail-panel .close-btn {
322
+ float: right;
323
+ background: none;
324
+ border: none;
325
+ color: var(--text-dim);
326
+ font-size: 24px;
327
+ cursor: pointer;
328
+ padding: 0 8px;
329
+ }
330
+
331
+ .detail-panel .close-btn:hover { color: var(--text); }
332
+
333
+ .detail-panel h2 { font-size: 20px; margin-bottom: 8px; }
334
+
335
+ .detail-panel .md-content {
336
+ font-size: 14px;
337
+ line-height: 1.7;
338
+ color: var(--text);
339
+ white-space: pre-wrap;
340
+ word-wrap: break-word;
341
+ font-family: 'SF Mono', 'Cascadia Code', 'Fira Code', monospace;
342
+ }
343
+
344
+ .detail-panel .md-content h1, .detail-panel .md-content h2, .detail-panel .md-content h3 {
345
+ color: var(--accent);
346
+ margin: 16px 0 8px;
347
+ }
348
+
349
+ .empty {
350
+ text-align: center;
351
+ color: var(--text-dim);
352
+ padding: 60px;
353
+ font-size: 15px;
354
+ }
355
+
356
+ @media (max-width: 768px) {
357
+ .main { grid-template-columns: 1fr; }
358
+ .sidebar { display: flex; overflow-x: auto; border-right: none; border-bottom: 1px solid var(--border); padding: 0; }
359
+ .sidebar .cat-btn { border-left: none; border-bottom: 3px solid transparent; white-space: nowrap; }
360
+ .sidebar .cat-btn.active { border-left: none; border-bottom-color: var(--accent); }
361
+ .content { padding: 16px; }
362
+ }
363
+ </style>
364
+ </head>
365
+ <body>
366
+
367
+ <div class="header">
368
+ <h1><span class="logo">\u25c9 repomemory</span> <span style="color:var(--text-dim);font-weight:400;font-size:14px">dashboard</span></h1>
369
+ <div class="meta">${provider} \u00b7 ${model}</div>
370
+ </div>
371
+
372
+ <div class="search-bar">
373
+ <span class="icon">\ud83d\udd0d</span>
374
+ <input type="text" placeholder="Search context files..." id="searchInput" />
375
+ </div>
376
+
377
+ <div class="stats-row" id="statsRow"></div>
378
+
379
+ <div class="main">
380
+ <div class="sidebar" id="sidebar"></div>
381
+ <div class="content" id="content"></div>
382
+ </div>
383
+
384
+ <div class="detail-overlay" id="detailOverlay">
385
+ <div class="detail-panel" id="detailPanel">
386
+ <button class="close-btn" onclick="closeDetail()">\u00d7</button>
387
+ <h2 id="detailTitle"></h2>
388
+ <div class="card-meta" id="detailMeta" style="margin-bottom:16px"></div>
389
+ <div class="md-content" id="detailContent"></div>
390
+ </div>
391
+ </div>
392
+
393
+ <script>
394
+ let allEntries = [];
395
+ let currentCategory = null;
396
+
397
+ async function init() {
398
+ const [entries, stats] = await Promise.all([
399
+ fetch('/api/entries').then(r => r.json()),
400
+ fetch('/api/stats').then(r => r.json()),
401
+ ]);
402
+ allEntries = entries;
403
+
404
+ // Stats
405
+ const row = document.getElementById('statsRow');
406
+ row.innerHTML = \`
407
+ <div class="stat-card"><div class="value">\${stats.totalFiles}</div><div class="label">Files</div></div>
408
+ <div class="stat-card"><div class="value">\${(stats.totalSize / 1024).toFixed(1)}KB</div><div class="label">Total Size</div></div>
409
+ <div class="stat-card"><div class="value">\${Object.keys(stats.categories).length}</div><div class="label">Categories</div></div>
410
+ <div class="stat-card"><div class="value">\${stats.stalestFile ? timeAgo(stats.stalestFile.age) : '-'}</div><div class="label">Stalest Entry</div></div>
411
+ \`;
412
+
413
+ // Sidebar
414
+ renderSidebar(stats.categories);
415
+ renderEntries(allEntries);
416
+ }
417
+
418
+ function renderSidebar(categories) {
419
+ const sb = document.getElementById('sidebar');
420
+ let html = '<button class="cat-btn active" onclick="filterCategory(null, this)">All <span class="count">' + allEntries.length + '</span></button>';
421
+ for (const [cat, count] of Object.entries(categories)) {
422
+ html += \`<button class="cat-btn" onclick="filterCategory('\${cat}', this)">\${cat}/ <span class="count">\${count}</span></button>\`;
423
+ }
424
+ sb.innerHTML = html;
425
+ }
426
+
427
+ function filterCategory(cat, btn) {
428
+ currentCategory = cat;
429
+ document.querySelectorAll('.cat-btn').forEach(b => b.classList.remove('active'));
430
+ if (btn) btn.classList.add('active');
431
+
432
+ const q = document.getElementById('searchInput').value.toLowerCase();
433
+ const filtered = allEntries.filter(e => {
434
+ if (cat && e.category !== cat) return false;
435
+ if (q && !e.title.toLowerCase().includes(q) && !e.content.toLowerCase().includes(q) && !e.filename.toLowerCase().includes(q)) return false;
436
+ return true;
437
+ });
438
+ renderEntries(filtered);
439
+ }
440
+
441
+ function renderEntries(entries) {
442
+ const content = document.getElementById('content');
443
+ if (!entries.length) {
444
+ content.innerHTML = '<div class="empty">No entries found. Run <code>repomemory analyze</code> to generate context.</div>';
445
+ return;
446
+ }
447
+
448
+ content.innerHTML = '<div class="entry-grid">' + entries.map((e, i) => \`
449
+ <div class="entry-card" onclick="showDetail(\${i})">
450
+ <div class="card-header">
451
+ <div class="card-title">\${escapeHtml(e.title)}</div>
452
+ <span class="card-category cat-\${e.category}">\${e.category}</span>
453
+ </div>
454
+ <div class="card-meta">
455
+ <span>\${e.filename}</span>
456
+ <span>\${(e.sizeBytes / 1024).toFixed(1)}KB</span>
457
+ <span>\${timeAgo(Date.now() - new Date(e.lastModified).getTime())}</span>
458
+ </div>
459
+ <div class="preview">\${escapeHtml(e.content.slice(0, 200))}</div>
460
+ </div>
461
+ \`).join('') + '</div>';
462
+ }
463
+
464
+ function showDetail(index) {
465
+ const filtered = getFilteredEntries();
466
+ const e = filtered[index];
467
+ if (!e) return;
468
+
469
+ document.getElementById('detailTitle').textContent = e.category + '/' + e.filename;
470
+ document.getElementById('detailMeta').innerHTML = \`<span>\${e.title}</span> &middot; <span>\${(e.sizeBytes/1024).toFixed(1)}KB</span> &middot; <span>\${timeAgo(Date.now() - new Date(e.lastModified).getTime())}</span>\`;
471
+ document.getElementById('detailContent').textContent = e.content;
472
+ document.getElementById('detailOverlay').classList.add('visible');
473
+ }
474
+
475
+ function closeDetail() {
476
+ document.getElementById('detailOverlay').classList.remove('visible');
477
+ }
478
+
479
+ function getFilteredEntries() {
480
+ const q = document.getElementById('searchInput').value.toLowerCase();
481
+ return allEntries.filter(e => {
482
+ if (currentCategory && e.category !== currentCategory) return false;
483
+ if (q && !e.title.toLowerCase().includes(q) && !e.content.toLowerCase().includes(q) && !e.filename.toLowerCase().includes(q)) return false;
484
+ return true;
485
+ });
486
+ }
487
+
488
+ document.getElementById('searchInput').addEventListener('input', () => {
489
+ filterCategory(currentCategory, document.querySelector('.cat-btn.active'));
490
+ });
491
+
492
+ document.getElementById('detailOverlay').addEventListener('click', (e) => {
493
+ if (e.target === e.currentTarget) closeDetail();
494
+ });
495
+
496
+ document.addEventListener('keydown', (e) => {
497
+ if (e.key === 'Escape') closeDetail();
498
+ });
499
+
500
+ function escapeHtml(s) {
501
+ return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
502
+ }
503
+
504
+ function timeAgo(ms) {
505
+ const s = Math.floor(ms / 1000);
506
+ if (s < 60) return 'just now';
507
+ if (s < 3600) return Math.floor(s/60) + 'm ago';
508
+ if (s < 86400) return Math.floor(s/3600) + 'h ago';
509
+ const d = Math.floor(s / 86400);
510
+ if (d < 30) return d + 'd ago';
511
+ if (d < 365) return Math.floor(d/30) + 'mo ago';
512
+ return Math.floor(d/365) + 'y ago';
513
+ }
514
+
515
+ init();
516
+ </script>
517
+ </body>
518
+ </html>`;
519
+ }
520
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAiBA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,iBA4E7E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,iBAqF7E"}
@@ -1,18 +1,8 @@
1
1
  import { existsSync, writeFileSync } from "fs";
2
2
  import { join } from "path";
3
3
  import chalk from "chalk";
4
- import { loadConfig } from "../lib/config.js";
4
+ import { loadConfig, DEFAULT_CONFIG } from "../lib/config.js";
5
5
  import { ContextStore } from "../lib/context-store.js";
6
- const DEFAULT_REPO_CONTEXT_CONFIG = {
7
- provider: "anthropic",
8
- model: "claude-sonnet-4-5-20250929",
9
- ignorePatterns: [],
10
- keyFilePatterns: [],
11
- maxFilesForAnalysis: 80,
12
- maxGitCommits: 100,
13
- autoIndex: true,
14
- contextDir: ".context",
15
- };
16
6
  export async function initCommand(options) {
17
7
  const repoRoot = options.dir || process.cwd();
18
8
  const config = loadConfig(repoRoot);
@@ -21,7 +11,7 @@ export async function initCommand(options) {
21
11
  }
22
12
  const store = new ContextStore(repoRoot, config);
23
13
  if (store.exists()) {
24
- console.log(chalk.yellow(" .context/ directory already exists."));
14
+ console.log(chalk.yellow("\u26a0 .context/ directory already exists."));
25
15
  console.log(chalk.dim(" Run `repomemory analyze` to regenerate content."));
26
16
  return;
27
17
  }
@@ -30,41 +20,47 @@ export async function initCommand(options) {
30
20
  // Write starter index
31
21
  store.writeIndex(`# Project Context
32
22
 
33
- > Auto-generated by [repomemory](https://github.com/repomemory/repomemory). Run \`repomemory analyze\` to populate.
23
+ > Auto-generated by [repomemory](https://github.com/DanielGuru/repomemory). Run \`repomemory analyze\` to populate.
34
24
 
35
25
  ## Quick Orient
36
26
  *Run \`repomemory analyze\` to generate project-specific orientation.*
37
27
 
38
28
  ## Context Files
39
- - \`facts/\` Architecture, patterns, integrations
40
- - \`decisions/\` Why things are this way (prevents re-debating)
41
- - \`regressions/\` Known gotchas, things that broke before
42
- - \`sessions/\` Compressed session summaries
43
- - \`changelog/\` Recent changes by month
29
+ - \`facts/\` \u2014 Architecture, patterns, integrations
30
+ - \`decisions/\` \u2014 Why things are this way (prevents re-debating)
31
+ - \`regressions/\` \u2014 Known gotchas, things that broke before
32
+ - \`sessions/\` \u2014 Compressed session summaries
33
+ - \`changelog/\` \u2014 Recent changes by month
44
34
 
45
35
  ## For AI Agents
46
36
  Search this directory for task-relevant context before starting work.
47
37
  Write new learnings using the \`context_write\` MCP tool during your session.
48
38
  `);
49
- // Write config file if it doesn't exist
39
+ // Write config file from shared defaults (not a duplicate)
50
40
  const configPath = join(repoRoot, ".repomemory.json");
51
41
  if (!existsSync(configPath)) {
52
- const configToWrite = { ...DEFAULT_REPO_CONTEXT_CONFIG };
53
- if (options.provider) {
54
- configToWrite.provider = options.provider;
55
- }
42
+ const configToWrite = {
43
+ provider: config.provider,
44
+ model: config.model,
45
+ contextDir: DEFAULT_CONFIG.contextDir,
46
+ maxFilesForAnalysis: DEFAULT_CONFIG.maxFilesForAnalysis,
47
+ maxGitCommits: DEFAULT_CONFIG.maxGitCommits,
48
+ autoIndex: DEFAULT_CONFIG.autoIndex,
49
+ ignorePatterns: [],
50
+ keyFilePatterns: [],
51
+ };
56
52
  writeFileSync(configPath, JSON.stringify(configToWrite, null, 2) + "\n");
57
53
  }
58
- console.log(chalk.green(" Initialized .context/ directory"));
54
+ console.log(chalk.green("\u2713 Initialized .context/ directory"));
59
55
  console.log();
60
56
  console.log(chalk.bold("Created:"));
61
- console.log(` ${chalk.cyan(".context/index.md")} Quick orientation`);
62
- console.log(` ${chalk.cyan(".context/facts/")} Architecture & patterns`);
63
- console.log(` ${chalk.cyan(".context/decisions/")} Why things are this way`);
64
- console.log(` ${chalk.cyan(".context/regressions/")} Known gotchas`);
65
- console.log(` ${chalk.cyan(".context/sessions/")} Session summaries`);
66
- console.log(` ${chalk.cyan(".context/changelog/")} Monthly changelogs`);
67
- console.log(` ${chalk.cyan(".repomemory.json")} Configuration`);
57
+ console.log(` ${chalk.cyan(".context/index.md")} \u2014 Quick orientation`);
58
+ console.log(` ${chalk.cyan(".context/facts/")} \u2014 Architecture & patterns`);
59
+ console.log(` ${chalk.cyan(".context/decisions/")} \u2014 Why things are this way`);
60
+ console.log(` ${chalk.cyan(".context/regressions/")} \u2014 Known gotchas`);
61
+ console.log(` ${chalk.cyan(".context/sessions/")} \u2014 Session summaries`);
62
+ console.log(` ${chalk.cyan(".context/changelog/")} \u2014 Monthly changelogs`);
63
+ console.log(` ${chalk.cyan(".repomemory.json")} \u2014 Configuration`);
68
64
  console.log();
69
65
  console.log(chalk.bold("Next steps:"));
70
66
  console.log();
@@ -78,9 +74,12 @@ Write new learnings using the \`context_write\` MCP tool during your session.
78
74
  console.log(chalk.dim(` repomemory analyze`));
79
75
  console.log();
80
76
  console.log(` 3. Add the MCP server to your AI tool:`);
81
- console.log(chalk.dim(` repomemory setup claude # Configure Claude Code`));
82
- console.log(chalk.dim(` repomemory setup cursor # Configure Cursor`));
77
+ console.log(chalk.dim(` repomemory setup claude # Claude Code`));
78
+ console.log(chalk.dim(` repomemory setup cursor # Cursor`));
79
+ console.log(chalk.dim(` repomemory setup copilot # GitHub Copilot`));
80
+ console.log(chalk.dim(` repomemory setup windsurf # Windsurf`));
81
+ console.log(chalk.dim(` repomemory setup cline # Cline`));
83
82
  console.log();
84
- console.log(` 4. Commit .context/ to git your team shares the knowledge.`);
83
+ console.log(` 4. Commit .context/ to git \u2014 your team shares the knowledge.`);
85
84
  }
86
85
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAU3D"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAW3D"}
@@ -5,9 +5,10 @@ export async function serveCommand(options) {
5
5
  const repoRoot = options.dir || process.cwd();
6
6
  const config = loadConfig(repoRoot);
7
7
  // Only log to stderr so stdout is clean for MCP protocol
8
- console.error(chalk.dim(`repomemory MCP server starting...`));
8
+ console.error(chalk.dim(`repomemory MCP server v0.2.0`));
9
9
  console.error(chalk.dim(` Root: ${repoRoot}`));
10
10
  console.error(chalk.dim(` Context: ${config.contextDir}/`));
11
+ console.error(chalk.dim(` Tools: context_search, context_write, context_delete, context_list, context_read`));
11
12
  await startMcpServer(repoRoot, config);
12
13
  }
13
14
  //# sourceMappingURL=serve.js.map