@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
@@ -0,0 +1,202 @@
1
+ import { GitUtils } from '../utils/git.js';
2
+ import { Summarizer } from './summarizer.js';
3
+ import { MemoryManager } from './memory-manager.js';
4
+ import * as path from 'path';
5
+ export class Initializer {
6
+ repoPath;
7
+ gitUtils;
8
+ summarizer;
9
+ memoryManager;
10
+ constructor(repoPath = process.cwd()) {
11
+ this.repoPath = repoPath;
12
+ this.gitUtils = new GitUtils(repoPath);
13
+ this.summarizer = new Summarizer();
14
+ this.memoryManager = new MemoryManager(repoPath);
15
+ }
16
+ /**
17
+ * Ensure PROJECT_MEMORY.md is tracked in Git
18
+ */
19
+ async ensureMemoryTrackedInGit() {
20
+ const memoryPath = path.join(this.repoPath, 'PROJECT_MEMORY.md');
21
+ const isIgnored = await this.gitUtils.isInGitignore(memoryPath);
22
+ if (isIgnored) {
23
+ console.log('Removing PROJECT_MEMORY.md from .gitignore...');
24
+ await this.gitUtils.removeFromGitignore(memoryPath);
25
+ }
26
+ // Stage the file if it exists
27
+ try {
28
+ await this.gitUtils.stageFile(memoryPath);
29
+ }
30
+ catch (error) {
31
+ // File doesn't exist yet - that's fine
32
+ }
33
+ }
34
+ /**
35
+ * Tier 1: Oneline Sweep (0 tokens)
36
+ * Parse git log locally to identify milestone commits
37
+ */
38
+ async tier1OnelineSweep() {
39
+ console.log('Tier 1: Analyzing commit history (oneline sweep)...');
40
+ try {
41
+ // Get last 100 commits or last 6 months
42
+ const sixMonthsAgo = new Date();
43
+ sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6);
44
+ const since = sixMonthsAgo.toISOString().split('T')[0];
45
+ const commits = await this.gitUtils.getOnelineLog(100, since);
46
+ if (commits.length === 0) {
47
+ console.log('No commit history found. This appears to be a brand new repository.');
48
+ return {
49
+ milestones: [],
50
+ totalCommits: 0,
51
+ };
52
+ }
53
+ const milestones = [];
54
+ // Keywords that indicate significant changes
55
+ const significantKeywords = [
56
+ 'refactor',
57
+ 'architecture',
58
+ 'init',
59
+ 'migration',
60
+ 'restructure',
61
+ 'redesign',
62
+ 'major',
63
+ 'breaking',
64
+ ];
65
+ for (const commit of commits) {
66
+ let type = 'other';
67
+ const message = commit.message.toLowerCase();
68
+ // Check for tags (we'd need to check git tags separately)
69
+ // For now, we'll focus on merge commits and keywords
70
+ // Check for merge commits
71
+ if (message.includes('merge') || commit.hash.includes('merge')) {
72
+ type = 'merge';
73
+ milestones.push({
74
+ hash: commit.hash,
75
+ message: commit.message,
76
+ date: commit.date,
77
+ type,
78
+ });
79
+ continue;
80
+ }
81
+ // Check for significant keywords
82
+ for (const keyword of significantKeywords) {
83
+ if (message.includes(keyword)) {
84
+ type = 'keyword';
85
+ milestones.push({
86
+ hash: commit.hash,
87
+ message: commit.message,
88
+ date: commit.date,
89
+ type,
90
+ });
91
+ break;
92
+ }
93
+ }
94
+ }
95
+ console.log(`Found ${milestones.length} milestone commits out of ${commits.length} total`);
96
+ return {
97
+ milestones,
98
+ totalCommits: commits.length,
99
+ };
100
+ }
101
+ catch (error) {
102
+ // Fallback for brand new repositories or Git errors
103
+ console.warn('Could not analyze commit history:', error.message || error);
104
+ console.log('Continuing with empty history...');
105
+ return {
106
+ milestones: [],
107
+ totalCommits: 0,
108
+ };
109
+ }
110
+ }
111
+ /**
112
+ * Tier 2: Deep Context (Mid-cost)
113
+ * Process last 5-10 commits with Gemini
114
+ */
115
+ async tier2DeepContext() {
116
+ console.log('Tier 2: Processing recent commits (deep context)...');
117
+ const commitCount = 10; // Process last 10 commits
118
+ const commits = await this.gitUtils.getLatestCommits(commitCount);
119
+ if (commits.length === 0) {
120
+ return '';
121
+ }
122
+ // Get diffs for all commits
123
+ const diffs = [];
124
+ for (const commit of commits) {
125
+ try {
126
+ const diff = await this.gitUtils.getCommitDiff(commit.hash);
127
+ diffs.push(`## Commit: ${commit.message}\n\n${diff}`);
128
+ }
129
+ catch (error) {
130
+ console.warn(`Failed to get diff for commit ${commit.hash}:`, error);
131
+ }
132
+ }
133
+ const combinedDiff = diffs.join('\n\n---\n\n');
134
+ // Read current memory if it exists
135
+ const currentMemory = await this.memoryManager.readMemory();
136
+ // Summarize with Gemini
137
+ const updatedMemory = await this.summarizer.summarizeDiff(combinedDiff, currentMemory, 'flash' // OPTIMIZATION: Use Flash for diff summarization (faster/cheaper)
138
+ );
139
+ return updatedMemory;
140
+ }
141
+ /**
142
+ * Tier 3: Skeleton Scan (High value)
143
+ * Infer architecture from file structure and README
144
+ */
145
+ async tier3SkeletonScan() {
146
+ console.log('Tier 3: Analyzing project structure (skeleton scan)...');
147
+ // Get file structure
148
+ const fileStructure = await this.gitUtils.getFileStructure();
149
+ // Read README if it exists
150
+ const readme = await this.gitUtils.readReadme();
151
+ // Infer architecture with high thinking level
152
+ const memory = await this.summarizer.inferArchitecture(fileStructure, readme || undefined, 'pro' // OPTIMIZATION: Use Pro for "Big Picture" architecture work
153
+ );
154
+ return memory;
155
+ }
156
+ /**
157
+ * Main initialization orchestrator
158
+ */
159
+ async initialize() {
160
+ console.log('Starting three-tier initialization...\n');
161
+ // Ensure memory is tracked in Git
162
+ await this.ensureMemoryTrackedInGit();
163
+ // Tier 1: Oneline sweep (0 tokens, local only)
164
+ const timeline = await this.tier1OnelineSweep();
165
+ console.log(`Tier 1 complete: ${timeline.milestones.length} milestones identified\n`);
166
+ // Tier 2: Deep context (process recent commits)
167
+ let tier2Memory = '';
168
+ try {
169
+ tier2Memory = await this.tier2DeepContext();
170
+ console.log('Tier 2 complete: Recent commits processed\n');
171
+ }
172
+ catch (error) {
173
+ console.error('Tier 2 error:', error);
174
+ // Continue with Tier 3 even if Tier 2 fails
175
+ }
176
+ // Tier 3: Skeleton scan (infer architecture)
177
+ let tier3Memory = '';
178
+ try {
179
+ tier3Memory = await this.tier3SkeletonScan();
180
+ console.log('Tier 3 complete: Architecture inferred\n');
181
+ }
182
+ catch (error) {
183
+ console.error('Tier 3 error:', error);
184
+ throw error; // Tier 3 is critical
185
+ }
186
+ // Merge Tier 2 and Tier 3 results
187
+ // If we have Tier 2 results, use them as base and enhance with Tier 3
188
+ // Otherwise, use Tier 3 as the base
189
+ let finalMemory = tier2Memory || tier3Memory;
190
+ // If we have both, merge them intelligently
191
+ if (tier2Memory && tier3Memory && tier2Memory !== tier3Memory) {
192
+ // Use Tier 3 as base (architecture) and merge Tier 2 (recent decisions)
193
+ // The summarizer can handle this by using Tier 2 as "current memory" and Tier 3 as "new diff"
194
+ finalMemory = await this.summarizer.summarizeDiff(`# Architecture Update\n\n${tier3Memory}`, tier2Memory, 'pro' // OPTIMIZATION: Use Pro for "Big Picture" architecture work
195
+ );
196
+ }
197
+ // Write the final memory
198
+ await this.memoryManager.writeMemory(finalMemory);
199
+ console.log('Initialization complete! PROJECT_MEMORY.md has been created/updated.');
200
+ }
201
+ }
202
+ //# sourceMappingURL=initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializer.js","sourceRoot":"","sources":["../../src/librarian/initializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAc7B,MAAM,OAAO,WAAW;IACd,QAAQ,CAAS;IACjB,QAAQ,CAAW;IACnB,UAAU,CAAa;IACvB,aAAa,CAAgB;IAErC,YAAY,WAAmB,OAAO,CAAC,GAAG,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAEhE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uCAAuC;QACzC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB;QACrB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;YAChC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEvD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAE9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;gBACnF,OAAO;oBACL,UAAU,EAAE,EAAE;oBACd,YAAY,EAAE,CAAC;iBAChB,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAsB,EAAE,CAAC;YAE3C,6CAA6C;YAC7C,MAAM,mBAAmB,GAAG;gBAC1B,UAAU;gBACV,cAAc;gBACd,MAAM;gBACN,WAAW;gBACX,aAAa;gBACb,UAAU;gBACV,OAAO;gBACP,UAAU;aACX,CAAC;YAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,IAAI,GAA4B,OAAO,CAAC;gBAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAE7C,0DAA0D;gBAC1D,qDAAqD;gBAErD,0BAA0B;gBAC1B,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/D,IAAI,GAAG,OAAO,CAAC;oBACf,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,IAAI;qBACL,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBAED,iCAAiC;gBACjC,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;oBAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC9B,IAAI,GAAG,SAAS,CAAC;wBACjB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,IAAI;yBACL,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAEC,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,MAAM,6BAA6B,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;YAE3F,OAAO;gBACL,UAAU;gBACV,YAAY,EAAE,OAAO,CAAC,MAAM;aAC7B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,oDAAoD;YACpD,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO;gBACL,UAAU,EAAE,EAAE;gBACd,YAAY,EAAE,CAAC;aAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAEnE,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC,0BAA0B;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAElE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,4BAA4B;QAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,OAAO,OAAO,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,MAAM,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE/C,mCAAmC;QACnC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QAE5D,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CACvD,YAAY,EACZ,aAAa,EACb,OAAO,CAAC,kEAAkE;SAC3E,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB;QACrB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAEtE,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAE7D,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAEhD,8CAA8C;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CACpD,aAAa,EACb,MAAM,IAAI,SAAS,EACnB,KAAK,CAAC,4DAA4D;SACnE,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAEvD,kCAAkC;QAClC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEtC,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,UAAU,CAAC,MAAM,0BAA0B,CAAC,CAAC;QAEtF,gDAAgD;QAChD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACtC,4CAA4C;QAC9C,CAAC;QAED,6CAA6C;QAC7C,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC,CAAC,qBAAqB;QACpC,CAAC;QAED,kCAAkC;QAClC,sEAAsE;QACtE,oCAAoC;QACpC,IAAI,WAAW,GAAG,WAAW,IAAI,WAAW,CAAC;QAE7C,4CAA4C;QAC5C,IAAI,WAAW,IAAI,WAAW,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAC9D,wEAAwE;YACxE,8FAA8F;YAC9F,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAC/C,4BAA4B,WAAW,EAAE,EACzC,WAAW,EACX,KAAK,CAAC,4DAA4D;aACnE,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC;CACF"}
@@ -0,0 +1,37 @@
1
+ export declare class MemoryManager {
2
+ private repoPath;
3
+ private gitUtils;
4
+ constructor(repoPath?: string);
5
+ /**
6
+ * Get the full path to PROJECT_MEMORY.md
7
+ */
8
+ private getMemoryPath;
9
+ /**
10
+ * Read existing PROJECT_MEMORY.md
11
+ */
12
+ readMemory(): Promise<string>;
13
+ /**
14
+ * Validate memory file structure
15
+ */
16
+ validateMemoryStructure(content: string): boolean;
17
+ /**
18
+ * Write memory file atomically
19
+ */
20
+ writeMemory(content: string): Promise<void>;
21
+ /**
22
+ * Stage PROJECT_MEMORY.md in Git
23
+ */
24
+ stageMemoryFile(): Promise<void>;
25
+ /**
26
+ * Append content to a specific section in PROJECT_MEMORY.md
27
+ * If the section exists, appends the content under that header.
28
+ * If not, appends to the end of the file.
29
+ * Uses atomic writes for safety.
30
+ */
31
+ appendToSection(section: string, content: string): Promise<void>;
32
+ /**
33
+ * Resolve Git conflicts using Gemini
34
+ */
35
+ resolveConflicts(conflictedContent: string): Promise<string>;
36
+ }
37
+ //# sourceMappingURL=memory-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../../src/librarian/memory-manager.ts"],"names":[],"mappings":"AAgBA,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,GAAE,MAAsB;IAK5C;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAsBnC;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAejD;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFtE;;OAEG;IACG,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA4CnE"}
@@ -0,0 +1,205 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import writeFileAtomic from 'write-file-atomic';
4
+ import { GitUtils } from '../utils/git.js';
5
+ import { generateSummary } from '../utils/llm.js';
6
+ const MEMORY_FILE = 'PROJECT_MEMORY.md';
7
+ const REQUIRED_SECTIONS = [
8
+ '## Project Soul',
9
+ '## Tech Stack',
10
+ '## Architecture',
11
+ '## Core Rules',
12
+ '## Recent Decisions',
13
+ '## Active Tech Debt',
14
+ ];
15
+ export class MemoryManager {
16
+ repoPath;
17
+ gitUtils;
18
+ constructor(repoPath = process.cwd()) {
19
+ this.repoPath = repoPath;
20
+ this.gitUtils = new GitUtils(repoPath);
21
+ }
22
+ /**
23
+ * Get the full path to PROJECT_MEMORY.md
24
+ */
25
+ getMemoryPath() {
26
+ return path.join(this.repoPath, MEMORY_FILE);
27
+ }
28
+ /**
29
+ * Read existing PROJECT_MEMORY.md
30
+ */
31
+ async readMemory() {
32
+ const memoryPath = this.getMemoryPath();
33
+ try {
34
+ const content = await fs.readFile(memoryPath, 'utf-8');
35
+ // Check for conflict markers
36
+ if (this.gitUtils.hasConflictMarkers(content)) {
37
+ // Resolve conflicts using Gemini
38
+ return await this.resolveConflicts(content);
39
+ }
40
+ return content;
41
+ }
42
+ catch (error) {
43
+ if (error.code === 'ENOENT') {
44
+ // File doesn't exist - return empty string
45
+ return '';
46
+ }
47
+ throw error;
48
+ }
49
+ }
50
+ /**
51
+ * Validate memory file structure
52
+ */
53
+ validateMemoryStructure(content) {
54
+ if (!content || content.trim().length === 0) {
55
+ return false; // Empty file is invalid
56
+ }
57
+ // Check for all required sections
58
+ for (const section of REQUIRED_SECTIONS) {
59
+ if (!content.includes(section)) {
60
+ return false;
61
+ }
62
+ }
63
+ return true;
64
+ }
65
+ /**
66
+ * Write memory file atomically
67
+ */
68
+ async writeMemory(content) {
69
+ // Validate structure
70
+ if (!this.validateMemoryStructure(content)) {
71
+ throw new Error('Invalid PROJECT_MEMORY.md structure: missing required sections');
72
+ }
73
+ // Write atomically
74
+ const memoryPath = this.getMemoryPath();
75
+ await writeFileAtomic(memoryPath, content, 'utf-8');
76
+ // Auto-stage the file
77
+ await this.stageMemoryFile();
78
+ }
79
+ /**
80
+ * Stage PROJECT_MEMORY.md in Git
81
+ */
82
+ async stageMemoryFile() {
83
+ const memoryPath = this.getMemoryPath();
84
+ await this.gitUtils.stageFile(memoryPath);
85
+ }
86
+ /**
87
+ * Append content to a specific section in PROJECT_MEMORY.md
88
+ * If the section exists, appends the content under that header.
89
+ * If not, appends to the end of the file.
90
+ * Uses atomic writes for safety.
91
+ */
92
+ async appendToSection(section, content) {
93
+ // Normalize section name to match markdown header format (## Section Name)
94
+ let sectionHeader = section.trim();
95
+ if (!sectionHeader.startsWith('##')) {
96
+ sectionHeader = `## ${sectionHeader}`;
97
+ }
98
+ // Read current memory
99
+ let currentContent = await this.readMemory();
100
+ // If file is empty, create basic structure
101
+ if (!currentContent || currentContent.trim().length === 0) {
102
+ currentContent = `# PROJECT_MEMORY.md\n\n${sectionHeader}\n\n`;
103
+ }
104
+ const lines = currentContent.split('\n');
105
+ const updatedLines = [];
106
+ let sectionFound = false;
107
+ let sectionIndex = -1;
108
+ // Find the section header (handle variations like "## Recent Decisions (The "Why")")
109
+ const normalizedSectionHeader = sectionHeader.replace(/^##\s+/, ''); // Remove ## prefix for comparison
110
+ for (let i = 0; i < lines.length; i++) {
111
+ const line = lines[i].trim();
112
+ // Match exact header or header with additional text in parentheses
113
+ if (line === sectionHeader ||
114
+ (line.startsWith('## ') && line.replace(/^##\s+/, '').split('(')[0].trim() === normalizedSectionHeader)) {
115
+ sectionFound = true;
116
+ sectionIndex = i;
117
+ break;
118
+ }
119
+ }
120
+ if (sectionFound && sectionIndex >= 0) {
121
+ // Section exists - append content after the header
122
+ for (let i = 0; i <= sectionIndex; i++) {
123
+ updatedLines.push(lines[i]);
124
+ }
125
+ // Find the end of the section (next ## header or end of file)
126
+ let insertIndex = sectionIndex + 1;
127
+ // Skip blank lines after header
128
+ while (insertIndex < lines.length && lines[insertIndex].trim() === '') {
129
+ updatedLines.push(lines[insertIndex]);
130
+ insertIndex++;
131
+ }
132
+ // Add the new content with proper formatting
133
+ const formattedContent = content.trim();
134
+ if (formattedContent) {
135
+ updatedLines.push(formattedContent);
136
+ updatedLines.push(''); // Add blank line after content
137
+ }
138
+ // Add remaining lines
139
+ for (let i = insertIndex; i < lines.length; i++) {
140
+ updatedLines.push(lines[i]);
141
+ }
142
+ }
143
+ else {
144
+ // Section doesn't exist - append to end
145
+ updatedLines.push(...lines);
146
+ if (lines[lines.length - 1] !== '') {
147
+ updatedLines.push(''); // Ensure blank line before new section
148
+ }
149
+ updatedLines.push(sectionHeader);
150
+ updatedLines.push(''); // Blank line after header
151
+ updatedLines.push(content.trim());
152
+ }
153
+ const updatedContent = updatedLines.join('\n');
154
+ // Write atomically
155
+ const memoryPath = this.getMemoryPath();
156
+ await writeFileAtomic(memoryPath, updatedContent, 'utf-8');
157
+ // Auto-stage the file
158
+ await this.stageMemoryFile();
159
+ }
160
+ /**
161
+ * Resolve Git conflicts using Gemini
162
+ */
163
+ async resolveConflicts(conflictedContent) {
164
+ const conflictPrompt = `You are "The Librarian," an expert Software Architect and Context Manager.
165
+
166
+ # TASK
167
+ Merge the following conflicted PROJECT_MEMORY.md file. The file contains Git conflict markers (<<<<<<<, =======, >>>>>>>).
168
+
169
+ # INSTRUCTIONS
170
+ 1. Remove all conflict markers (<<<<<<<, =======, >>>>>>>)
171
+ 2. Intelligently merge the conflicting sections, preserving important information from both versions
172
+ 3. Maintain the required structure:
173
+ - ## Project Soul
174
+ - ## Tech Stack
175
+ - ## Architecture
176
+ - ## Core Rules
177
+ - ## Recent Decisions (The "Why")
178
+ - ## Active Tech Debt
179
+ 4. Preserve all Recent Decisions entries; do not delete older entries during merge
180
+ 5. Return the complete, merged Markdown file with no conflict markers
181
+
182
+ # CONFLICTED FILE
183
+ ${conflictedContent}
184
+
185
+ # OUTPUT
186
+ Return only the merged Markdown content, no explanations.`;
187
+ const systemPrompt = `You are a Git conflict resolution expert specializing in Markdown files about software architecture.`;
188
+ try {
189
+ const merged = await generateSummary(conflictPrompt, systemPrompt, {
190
+ thinkingLevel: 'flash',
191
+ temperature: 0.2, // Lower temperature for more consistent merging
192
+ feature: 'Librarian',
193
+ });
194
+ // Validate the merged result
195
+ if (this.gitUtils.hasConflictMarkers(merged)) {
196
+ throw new Error('Conflict resolution failed: merged content still contains conflict markers');
197
+ }
198
+ return merged;
199
+ }
200
+ catch (error) {
201
+ throw new Error(`Failed to resolve conflicts: ${error}`);
202
+ }
203
+ }
204
+ }
205
+ //# sourceMappingURL=memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../src/librarian/memory-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export interface Prophecy {
2
+ id: string;
3
+ type: 'Refactor' | 'RuleViolation' | 'Optimization';
4
+ title: string;
5
+ description: string;
6
+ suggestedAction: string;
7
+ priority: 'High' | 'Medium' | 'Low';
8
+ createdAt: string;
9
+ }
10
+ export declare class OracleService {
11
+ private repoPath;
12
+ private statePath;
13
+ constructor(repoPath?: string);
14
+ /**
15
+ * Load oracle state from file
16
+ */
17
+ private loadState;
18
+ /**
19
+ * Save oracle state to file
20
+ */
21
+ private saveState;
22
+ /**
23
+ * Scan the project directory and return file tree structure
24
+ */
25
+ private scanProjectTree;
26
+ /**
27
+ * Read PROJECT_MEMORY.md
28
+ */
29
+ private readProjectMemory;
30
+ /**
31
+ * Read DIAGRAM.md
32
+ */
33
+ private readDiagram;
34
+ /**
35
+ * Seek prophecy - Compare Project Soul/Rules with actual file structure
36
+ */
37
+ seekProphecy(): Promise<Prophecy[]>;
38
+ /**
39
+ * Get all prophecies
40
+ */
41
+ getProphecies(): Promise<Prophecy[]>;
42
+ /**
43
+ * Get prophecies by priority
44
+ */
45
+ getPropheciesByPriority(priority: 'High' | 'Medium' | 'Low'): Promise<Prophecy[]>;
46
+ /**
47
+ * Clear all prophecies
48
+ */
49
+ clearProphecies(): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=oracle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/librarian/oracle.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;gBAEd,QAAQ,GAAE,MAAsB;IAK5C;;OAEG;YACW,SAAS;IAavB;;OAEG;YACW,SAAS;IAQvB;;OAEG;YACW,eAAe;IAoD7B;;OAEG;YACW,iBAAiB;IAS/B;;OAEG;YACW,WAAW;IASzB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAkHzC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK1C;;OAEG;IACG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKvF;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAMvC"}