cmp-memory-system 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 (161) hide show
  1. package/README.md +541 -0
  2. package/dist/analytics/index.d.ts +5 -0
  3. package/dist/analytics/index.d.ts.map +1 -0
  4. package/dist/analytics/index.js +5 -0
  5. package/dist/analytics/index.js.map +1 -0
  6. package/dist/analytics/tracker.d.ts +107 -0
  7. package/dist/analytics/tracker.d.ts.map +1 -0
  8. package/dist/analytics/tracker.js +333 -0
  9. package/dist/analytics/tracker.js.map +1 -0
  10. package/dist/auto-improve/eslint-generator.d.ts +36 -0
  11. package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
  12. package/dist/auto-improve/eslint-generator.js +280 -0
  13. package/dist/auto-improve/eslint-generator.js.map +1 -0
  14. package/dist/auto-improve/index.d.ts +6 -0
  15. package/dist/auto-improve/index.d.ts.map +1 -0
  16. package/dist/auto-improve/index.js +6 -0
  17. package/dist/auto-improve/index.js.map +1 -0
  18. package/dist/auto-improve/pattern-detector.d.ts +92 -0
  19. package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
  20. package/dist/auto-improve/pattern-detector.js +231 -0
  21. package/dist/auto-improve/pattern-detector.js.map +1 -0
  22. package/dist/cli/index.d.ts +16 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +636 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/dashboard/index.d.ts +6 -0
  27. package/dist/dashboard/index.d.ts.map +1 -0
  28. package/dist/dashboard/index.js +6 -0
  29. package/dist/dashboard/index.js.map +1 -0
  30. package/dist/dashboard/server.d.ts +15 -0
  31. package/dist/dashboard/server.d.ts.map +1 -0
  32. package/dist/dashboard/server.js +373 -0
  33. package/dist/dashboard/server.js.map +1 -0
  34. package/dist/dashboard/ui.d.ts +9 -0
  35. package/dist/dashboard/ui.d.ts.map +1 -0
  36. package/dist/dashboard/ui.js +530 -0
  37. package/dist/dashboard/ui.js.map +1 -0
  38. package/dist/db/client.d.ts +66 -0
  39. package/dist/db/client.d.ts.map +1 -0
  40. package/dist/db/client.js +159 -0
  41. package/dist/db/client.js.map +1 -0
  42. package/dist/db/drizzle-client.d.ts +302 -0
  43. package/dist/db/drizzle-client.d.ts.map +1 -0
  44. package/dist/db/drizzle-client.js +404 -0
  45. package/dist/db/drizzle-client.js.map +1 -0
  46. package/dist/db/index.d.ts +5 -0
  47. package/dist/db/index.d.ts.map +1 -0
  48. package/dist/db/index.js +5 -0
  49. package/dist/db/index.js.map +1 -0
  50. package/dist/feedback/collector.d.ts +74 -0
  51. package/dist/feedback/collector.d.ts.map +1 -0
  52. package/dist/feedback/collector.js +231 -0
  53. package/dist/feedback/collector.js.map +1 -0
  54. package/dist/feedback/index.d.ts +5 -0
  55. package/dist/feedback/index.d.ts.map +1 -0
  56. package/dist/feedback/index.js +5 -0
  57. package/dist/feedback/index.js.map +1 -0
  58. package/dist/hooks/index.d.ts +8 -0
  59. package/dist/hooks/index.d.ts.map +1 -0
  60. package/dist/hooks/index.js +8 -0
  61. package/dist/hooks/index.js.map +1 -0
  62. package/dist/hooks/memory-checkpoint.d.ts +43 -0
  63. package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
  64. package/dist/hooks/memory-checkpoint.js +257 -0
  65. package/dist/hooks/memory-checkpoint.js.map +1 -0
  66. package/dist/hooks/post-tool-use.d.ts +61 -0
  67. package/dist/hooks/post-tool-use.d.ts.map +1 -0
  68. package/dist/hooks/post-tool-use.js +262 -0
  69. package/dist/hooks/post-tool-use.js.map +1 -0
  70. package/dist/hooks/pre-tool-use.d.ts +34 -0
  71. package/dist/hooks/pre-tool-use.d.ts.map +1 -0
  72. package/dist/hooks/pre-tool-use.js +358 -0
  73. package/dist/hooks/pre-tool-use.js.map +1 -0
  74. package/dist/hooks/session-start.d.ts +38 -0
  75. package/dist/hooks/session-start.d.ts.map +1 -0
  76. package/dist/hooks/session-start.js +274 -0
  77. package/dist/hooks/session-start.js.map +1 -0
  78. package/dist/index.d.ts +29 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +39 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/mcp/index.d.ts +5 -0
  83. package/dist/mcp/index.d.ts.map +1 -0
  84. package/dist/mcp/index.js +5 -0
  85. package/dist/mcp/index.js.map +1 -0
  86. package/dist/mcp/server.d.ts +42 -0
  87. package/dist/mcp/server.d.ts.map +1 -0
  88. package/dist/mcp/server.js +599 -0
  89. package/dist/mcp/server.js.map +1 -0
  90. package/dist/registry/embeddings.d.ts +38 -0
  91. package/dist/registry/embeddings.d.ts.map +1 -0
  92. package/dist/registry/embeddings.js +110 -0
  93. package/dist/registry/embeddings.js.map +1 -0
  94. package/dist/registry/generator.d.ts +41 -0
  95. package/dist/registry/generator.d.ts.map +1 -0
  96. package/dist/registry/generator.js +323 -0
  97. package/dist/registry/generator.js.map +1 -0
  98. package/dist/registry/index.d.ts +6 -0
  99. package/dist/registry/index.d.ts.map +1 -0
  100. package/dist/registry/index.js +6 -0
  101. package/dist/registry/index.js.map +1 -0
  102. package/dist/services/IdeaCollector.d.ts +103 -0
  103. package/dist/services/IdeaCollector.d.ts.map +1 -0
  104. package/dist/services/IdeaCollector.js +371 -0
  105. package/dist/services/IdeaCollector.js.map +1 -0
  106. package/dist/services/TaskTracker.d.ts +89 -0
  107. package/dist/services/TaskTracker.d.ts.map +1 -0
  108. package/dist/services/TaskTracker.js +324 -0
  109. package/dist/services/TaskTracker.js.map +1 -0
  110. package/dist/services/WorkPlanManager.d.ts +107 -0
  111. package/dist/services/WorkPlanManager.d.ts.map +1 -0
  112. package/dist/services/WorkPlanManager.js +440 -0
  113. package/dist/services/WorkPlanManager.js.map +1 -0
  114. package/dist/services/auto-inject.d.ts +77 -0
  115. package/dist/services/auto-inject.d.ts.map +1 -0
  116. package/dist/services/auto-inject.js +289 -0
  117. package/dist/services/auto-inject.js.map +1 -0
  118. package/dist/services/auto-tag.d.ts +61 -0
  119. package/dist/services/auto-tag.d.ts.map +1 -0
  120. package/dist/services/auto-tag.js +203 -0
  121. package/dist/services/auto-tag.js.map +1 -0
  122. package/dist/services/cross-project-sync.d.ts +76 -0
  123. package/dist/services/cross-project-sync.d.ts.map +1 -0
  124. package/dist/services/cross-project-sync.js +235 -0
  125. package/dist/services/cross-project-sync.js.map +1 -0
  126. package/dist/services/index.d.ts +15 -0
  127. package/dist/services/index.d.ts.map +1 -0
  128. package/dist/services/index.js +18 -0
  129. package/dist/services/index.js.map +1 -0
  130. package/dist/services/memory-consolidation.d.ts +77 -0
  131. package/dist/services/memory-consolidation.d.ts.map +1 -0
  132. package/dist/services/memory-consolidation.js +298 -0
  133. package/dist/services/memory-consolidation.js.map +1 -0
  134. package/dist/services/semantic-search.d.ts +93 -0
  135. package/dist/services/semantic-search.d.ts.map +1 -0
  136. package/dist/services/semantic-search.js +278 -0
  137. package/dist/services/semantic-search.js.map +1 -0
  138. package/dist/services/weekly-digest.d.ts +105 -0
  139. package/dist/services/weekly-digest.d.ts.map +1 -0
  140. package/dist/services/weekly-digest.js +292 -0
  141. package/dist/services/weekly-digest.js.map +1 -0
  142. package/dist/types/index.d.ts +274 -0
  143. package/dist/types/index.d.ts.map +1 -0
  144. package/dist/types/index.js +84 -0
  145. package/dist/types/index.js.map +1 -0
  146. package/dist/utils/config.d.ts +21 -0
  147. package/dist/utils/config.d.ts.map +1 -0
  148. package/dist/utils/config.js +89 -0
  149. package/dist/utils/config.js.map +1 -0
  150. package/dist/utils/index.d.ts +6 -0
  151. package/dist/utils/index.d.ts.map +1 -0
  152. package/dist/utils/index.js +6 -0
  153. package/dist/utils/index.js.map +1 -0
  154. package/dist/utils/paths.d.ts +28 -0
  155. package/dist/utils/paths.d.ts.map +1 -0
  156. package/dist/utils/paths.js +80 -0
  157. package/dist/utils/paths.js.map +1 -0
  158. package/package.json +89 -0
  159. package/templates/memory-config.json +82 -0
  160. package/templates/memory-config.schema.json +212 -0
  161. package/templates/settings.json +58 -0
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Embedding Service
3
+ *
4
+ * Generates embeddings using OpenAI or Gemini APIs.
5
+ */
6
+ // =============================================================================
7
+ // EMBEDDING SERVICE
8
+ // =============================================================================
9
+ export class EmbeddingService {
10
+ config;
11
+ constructor(config) {
12
+ this.config = {
13
+ providers: config?.providers ?? ['openai', 'gemini'],
14
+ openaiApiKey: config?.openaiApiKey ?? process.env.OPENAI_API_KEY,
15
+ geminiApiKey: config?.geminiApiKey ?? process.env.GEMINI_API_KEY,
16
+ };
17
+ }
18
+ /**
19
+ * Generate embedding for text
20
+ */
21
+ async embed(text) {
22
+ for (const provider of this.config.providers) {
23
+ try {
24
+ if (provider === 'openai' && this.config.openaiApiKey) {
25
+ return await this.embedWithOpenAI(text);
26
+ }
27
+ if (provider === 'gemini' && this.config.geminiApiKey) {
28
+ return await this.embedWithGemini(text);
29
+ }
30
+ }
31
+ catch (error) {
32
+ console.warn(`[EmbeddingService] ${provider} failed:`, error);
33
+ // Try next provider
34
+ }
35
+ }
36
+ throw new Error('No embedding provider available');
37
+ }
38
+ /**
39
+ * Generate embeddings for multiple texts
40
+ */
41
+ async embedBatch(texts) {
42
+ // Process in parallel with rate limiting
43
+ const batchSize = 5;
44
+ const results = [];
45
+ for (let i = 0; i < texts.length; i += batchSize) {
46
+ const batch = texts.slice(i, i + batchSize);
47
+ const embeddings = await Promise.all(batch.map(t => this.embed(t)));
48
+ results.push(...embeddings);
49
+ // Rate limit delay
50
+ if (i + batchSize < texts.length) {
51
+ await new Promise(r => setTimeout(r, 200));
52
+ }
53
+ }
54
+ return results;
55
+ }
56
+ /**
57
+ * OpenAI embedding
58
+ */
59
+ async embedWithOpenAI(text) {
60
+ const response = await fetch('https://api.openai.com/v1/embeddings', {
61
+ method: 'POST',
62
+ headers: {
63
+ 'Content-Type': 'application/json',
64
+ 'Authorization': `Bearer ${this.config.openaiApiKey}`
65
+ },
66
+ body: JSON.stringify({
67
+ model: 'text-embedding-3-small',
68
+ input: text.slice(0, 8000 * 4),
69
+ encoding_format: 'float'
70
+ })
71
+ });
72
+ if (!response.ok) {
73
+ const error = await response.json();
74
+ throw new Error(`OpenAI API error: ${JSON.stringify(error)}`);
75
+ }
76
+ const data = await response.json();
77
+ return data.data[0]?.embedding ?? [];
78
+ }
79
+ /**
80
+ * Gemini embedding
81
+ */
82
+ async embedWithGemini(text) {
83
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1/models/text-embedding-004:embedContent?key=${this.config.geminiApiKey}`, {
84
+ method: 'POST',
85
+ headers: { 'Content-Type': 'application/json' },
86
+ body: JSON.stringify({
87
+ content: { parts: [{ text: text.slice(0, 10000) }] }
88
+ })
89
+ });
90
+ if (!response.ok) {
91
+ const error = await response.json();
92
+ throw new Error(`Gemini API error: ${JSON.stringify(error)}`);
93
+ }
94
+ const data = await response.json();
95
+ return data.embedding.values;
96
+ }
97
+ /**
98
+ * Get current provider info
99
+ */
100
+ getProviderInfo() {
101
+ if (this.config.openaiApiKey) {
102
+ return { provider: 'openai', dimension: 1536 };
103
+ }
104
+ if (this.config.geminiApiKey) {
105
+ return { provider: 'gemini', dimension: 768 };
106
+ }
107
+ throw new Error('No provider configured');
108
+ }
109
+ }
110
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/registry/embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Registry Generator
3
+ *
4
+ * Parses CLAUDE.md and other documentation files to create
5
+ * an embedding registry for semantic knowledge retrieval.
6
+ */
7
+ import type { EmbeddingRegistry } from '../types/index.js';
8
+ export interface RegistryGeneratorConfig {
9
+ /** Files to parse for knowledge sections */
10
+ sourceFiles: string[];
11
+ /** Output path for registry.json */
12
+ outputPath: string;
13
+ /** Minimum section length to include */
14
+ minSectionLength: number;
15
+ /** Maximum section length before splitting */
16
+ maxSectionLength: number;
17
+ }
18
+ export declare class RegistryGenerator {
19
+ private config;
20
+ private embeddingService;
21
+ private projectRoot;
22
+ constructor(config?: Partial<RegistryGeneratorConfig>);
23
+ /**
24
+ * Initialize with project root
25
+ */
26
+ init(projectRoot?: string): Promise<void>;
27
+ /**
28
+ * Generate the embedding registry
29
+ */
30
+ generate(): Promise<EmbeddingRegistry>;
31
+ /**
32
+ * Find all source files matching patterns
33
+ */
34
+ private findSourceFiles;
35
+ /**
36
+ * Update registry with new sections (incremental)
37
+ */
38
+ update(newFilePaths: string[]): Promise<EmbeddingRegistry>;
39
+ }
40
+ export declare function runRegistryGenerator(): Promise<void>;
41
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/registry/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAQ5E,MAAM,WAAW,uBAAuB;IACtC,4CAA4C;IAC5C,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,CAAA;IACxB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAoMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,WAAW,CAAsB;gBAE7B,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAKrD;;OAEG;IACG,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAmF5C;;OAEG;YACW,eAAe;IAgB7B;;OAEG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA4DjE;AAMD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG1D"}
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Registry Generator
3
+ *
4
+ * Parses CLAUDE.md and other documentation files to create
5
+ * an embedding registry for semantic knowledge retrieval.
6
+ */
7
+ import fs from 'fs/promises';
8
+ import path from 'path';
9
+ import matter from 'gray-matter';
10
+ import { EmbeddingService } from './embeddings.js';
11
+ import { getProjectRoot } from '../utils/paths.js';
12
+ const DEFAULT_CONFIG = {
13
+ sourceFiles: [
14
+ 'CLAUDE.md',
15
+ '.claude/context/*.md',
16
+ '.ai-skills/**/*.md',
17
+ 'docs/*.md',
18
+ ],
19
+ outputPath: '.claude/knowledge/registry.json',
20
+ minSectionLength: 100,
21
+ maxSectionLength: 2000,
22
+ };
23
+ /**
24
+ * Parse a markdown file into sections
25
+ */
26
+ async function parseMarkdownFile(filePath, config) {
27
+ const content = await fs.readFile(filePath, 'utf-8');
28
+ const { data: frontmatter, content: body } = matter(content);
29
+ const sections = [];
30
+ const lines = body.split('\n');
31
+ let currentSection = null;
32
+ let currentContent = [];
33
+ for (const line of lines) {
34
+ // Detect headers
35
+ const h1Match = line.match(/^#\s+(.+)$/);
36
+ const h2Match = line.match(/^##\s+(.+)$/);
37
+ const h3Match = line.match(/^###\s+(.+)$/);
38
+ if (h1Match || h2Match || h3Match) {
39
+ // Save previous section
40
+ if (currentSection && currentContent.length > 0) {
41
+ const content = currentContent.join('\n').trim();
42
+ if (content.length >= config.minSectionLength) {
43
+ sections.push({
44
+ ...currentSection,
45
+ content,
46
+ description: extractDescription(content),
47
+ keywords: extractKeywords(content),
48
+ });
49
+ }
50
+ }
51
+ // Start new section
52
+ const title = (h1Match?.[1] ?? h2Match?.[1] ?? h3Match?.[1]);
53
+ const id = titleToId(title);
54
+ currentSection = {
55
+ id,
56
+ title,
57
+ criticality: detectCriticality(title, content),
58
+ path: filePath,
59
+ };
60
+ currentContent = [];
61
+ }
62
+ else {
63
+ currentContent.push(line);
64
+ }
65
+ }
66
+ // Don't forget last section
67
+ if (currentSection && currentContent.length > 0) {
68
+ const content = currentContent.join('\n').trim();
69
+ if (content.length >= config.minSectionLength) {
70
+ sections.push({
71
+ ...currentSection,
72
+ content,
73
+ description: extractDescription(content),
74
+ keywords: extractKeywords(content),
75
+ });
76
+ }
77
+ }
78
+ return sections;
79
+ }
80
+ /**
81
+ * Convert title to slug ID
82
+ */
83
+ function titleToId(title) {
84
+ return title
85
+ .toLowerCase()
86
+ .replace(/[^a-z0-9]+/g, '-')
87
+ .replace(/^-|-$/g, '');
88
+ }
89
+ /**
90
+ * Extract first meaningful sentence as description
91
+ */
92
+ function extractDescription(content) {
93
+ // Find first sentence or first 200 chars
94
+ const firstLine = content.split('\n').find(l => l.trim() && !l.startsWith('-'));
95
+ if (!firstLine)
96
+ return content.slice(0, 200);
97
+ const sentence = firstLine.match(/^[^.!?]+[.!?]/);
98
+ return (sentence?.[0] ?? firstLine).slice(0, 200);
99
+ }
100
+ /**
101
+ * Extract keywords from content
102
+ */
103
+ function extractKeywords(content) {
104
+ const keywords = new Set();
105
+ // Extract code blocks identifiers
106
+ const codeMatches = content.matchAll(/```(\w+)/g);
107
+ for (const match of codeMatches) {
108
+ keywords.add(match[1].toLowerCase());
109
+ }
110
+ // Extract bold/emphasis words
111
+ const boldMatches = content.matchAll(/\*\*([^*]+)\*\*/g);
112
+ for (const match of boldMatches) {
113
+ const word = match[1].toLowerCase().trim();
114
+ if (word.length >= 3 && word.length <= 30) {
115
+ keywords.add(word);
116
+ }
117
+ }
118
+ // Extract capitalized terms (likely important)
119
+ const capMatches = content.matchAll(/\b([A-Z][a-z]+(?:[A-Z][a-z]+)+)\b/g);
120
+ for (const match of capMatches) {
121
+ keywords.add(match[1].toLowerCase());
122
+ }
123
+ return Array.from(keywords).slice(0, 10);
124
+ }
125
+ /**
126
+ * Detect criticality based on content
127
+ */
128
+ function detectCriticality(title, content) {
129
+ const text = `${title} ${content}`.toLowerCase();
130
+ // Critical patterns
131
+ if (text.includes('critical') ||
132
+ text.includes('never') ||
133
+ text.includes('must not') ||
134
+ text.includes('security') ||
135
+ text.includes('finance') ||
136
+ text.includes('dual-write')) {
137
+ return 'CRITICAL';
138
+ }
139
+ // High patterns
140
+ if (text.includes('important') ||
141
+ text.includes('required') ||
142
+ text.includes('always') ||
143
+ text.includes('schema') ||
144
+ text.includes('database')) {
145
+ return 'HIGH';
146
+ }
147
+ // Medium patterns
148
+ if (text.includes('should') ||
149
+ text.includes('recommend') ||
150
+ text.includes('prefer')) {
151
+ return 'MEDIUM';
152
+ }
153
+ return 'LOW';
154
+ }
155
+ // =============================================================================
156
+ // REGISTRY GENERATOR CLASS
157
+ // =============================================================================
158
+ export class RegistryGenerator {
159
+ config;
160
+ embeddingService;
161
+ projectRoot = null;
162
+ constructor(config) {
163
+ this.config = { ...DEFAULT_CONFIG, ...config };
164
+ this.embeddingService = new EmbeddingService();
165
+ }
166
+ /**
167
+ * Initialize with project root
168
+ */
169
+ async init(projectRoot) {
170
+ this.projectRoot = projectRoot ?? await getProjectRoot();
171
+ }
172
+ /**
173
+ * Generate the embedding registry
174
+ */
175
+ async generate() {
176
+ if (!this.projectRoot) {
177
+ await this.init();
178
+ }
179
+ const projectRoot = this.projectRoot;
180
+ console.log('📚 Generating knowledge registry...');
181
+ console.log(` Project: ${projectRoot}`);
182
+ // 1. Find all source files
183
+ const files = await this.findSourceFiles(projectRoot);
184
+ console.log(` Found ${files.length} source files`);
185
+ // 2. Parse sections from all files
186
+ const allSections = [];
187
+ for (const file of files) {
188
+ try {
189
+ const sections = await parseMarkdownFile(file, this.config);
190
+ allSections.push(...sections);
191
+ console.log(` Parsed ${sections.length} sections from ${path.basename(file)}`);
192
+ }
193
+ catch (error) {
194
+ console.warn(` Warning: Could not parse ${file}:`, error);
195
+ }
196
+ }
197
+ console.log(` Total sections: ${allSections.length}`);
198
+ // 3. Generate embeddings
199
+ console.log(' Generating embeddings...');
200
+ const providerInfo = this.embeddingService.getProviderInfo();
201
+ const embeddingSections = [];
202
+ for (let i = 0; i < allSections.length; i++) {
203
+ const section = allSections[i];
204
+ // Combine title, description, and content for embedding
205
+ const textToEmbed = `${section.title}\n\n${section.description}\n\n${section.content}`;
206
+ try {
207
+ const embedding = await this.embeddingService.embed(textToEmbed);
208
+ embeddingSections.push({
209
+ id: section.id,
210
+ title: section.title,
211
+ description: section.description,
212
+ keywords: section.keywords,
213
+ embedding,
214
+ path: section.path,
215
+ tokens: Math.ceil(textToEmbed.length / 4), // Rough estimate
216
+ criticality: section.criticality,
217
+ });
218
+ if ((i + 1) % 10 === 0) {
219
+ console.log(` Embedded ${i + 1}/${allSections.length} sections`);
220
+ }
221
+ }
222
+ catch (error) {
223
+ console.warn(` Warning: Could not embed section "${section.title}":`, error);
224
+ }
225
+ }
226
+ // 4. Create registry
227
+ const registry = {
228
+ version: '1.0.0',
229
+ model: `${providerInfo.provider}/text-embedding`,
230
+ dimension: providerInfo.dimension,
231
+ generatedAt: new Date().toISOString(),
232
+ sections: embeddingSections,
233
+ };
234
+ // 5. Save registry
235
+ const outputPath = path.join(projectRoot, this.config.outputPath);
236
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
237
+ await fs.writeFile(outputPath, JSON.stringify(registry, null, 2));
238
+ console.log(`✅ Registry saved to ${outputPath}`);
239
+ console.log(` Sections: ${embeddingSections.length}`);
240
+ console.log(` Critical: ${embeddingSections.filter(s => s.criticality === 'CRITICAL').length}`);
241
+ return registry;
242
+ }
243
+ /**
244
+ * Find all source files matching patterns
245
+ */
246
+ async findSourceFiles(projectRoot) {
247
+ const { glob } = await import('glob');
248
+ const files = [];
249
+ for (const pattern of this.config.sourceFiles) {
250
+ const matches = await glob(pattern, {
251
+ cwd: projectRoot,
252
+ absolute: true,
253
+ nodir: true,
254
+ });
255
+ files.push(...matches);
256
+ }
257
+ return [...new Set(files)];
258
+ }
259
+ /**
260
+ * Update registry with new sections (incremental)
261
+ */
262
+ async update(newFilePaths) {
263
+ if (!this.projectRoot) {
264
+ await this.init();
265
+ }
266
+ // Load existing registry
267
+ const registryPath = path.join(this.projectRoot, this.config.outputPath);
268
+ let existingRegistry;
269
+ try {
270
+ const content = await fs.readFile(registryPath, 'utf-8');
271
+ existingRegistry = JSON.parse(content);
272
+ }
273
+ catch {
274
+ // No existing registry, generate from scratch
275
+ return this.generate();
276
+ }
277
+ // Parse new files
278
+ for (const filePath of newFilePaths) {
279
+ const sections = await parseMarkdownFile(filePath, this.config);
280
+ for (const section of sections) {
281
+ // Check if section already exists
282
+ const existingIndex = existingRegistry.sections.findIndex(s => s.id === section.id && s.path === section.path);
283
+ const textToEmbed = `${section.title}\n\n${section.description}\n\n${section.content}`;
284
+ const embedding = await this.embeddingService.embed(textToEmbed);
285
+ const providerInfo = this.embeddingService.getProviderInfo();
286
+ const newSection = {
287
+ id: section.id,
288
+ title: section.title,
289
+ description: section.description,
290
+ keywords: section.keywords,
291
+ embedding,
292
+ path: section.path,
293
+ tokens: Math.ceil(textToEmbed.length / 4),
294
+ criticality: section.criticality,
295
+ };
296
+ if (existingIndex >= 0) {
297
+ // Update existing
298
+ existingRegistry.sections[existingIndex] = newSection;
299
+ }
300
+ else {
301
+ // Add new
302
+ existingRegistry.sections.push(newSection);
303
+ }
304
+ }
305
+ }
306
+ // Update metadata
307
+ existingRegistry.generatedAt = new Date().toISOString();
308
+ // Save
309
+ await fs.writeFile(registryPath, JSON.stringify(existingRegistry, null, 2));
310
+ return existingRegistry;
311
+ }
312
+ }
313
+ // =============================================================================
314
+ // STANDALONE EXECUTION
315
+ // =============================================================================
316
+ export async function runRegistryGenerator() {
317
+ const generator = new RegistryGenerator();
318
+ await generator.generate();
319
+ }
320
+ if (import.meta.url === `file://${process.argv[1]}`) {
321
+ runRegistryGenerator().catch(console.error);
322
+ }
323
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/registry/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Registry module exports
3
+ */
4
+ export { EmbeddingService, type EmbeddingServiceConfig } from './embeddings.js';
5
+ export { RegistryGenerator, runRegistryGenerator, type RegistryGeneratorConfig } from './generator.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Registry module exports
3
+ */
4
+ export { EmbeddingService } from './embeddings.js';
5
+ export { RegistryGenerator, runRegistryGenerator } from './generator.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAA+B,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAgC,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * IdeaCollector Service
3
+ *
4
+ * Collects and manages ideas and improvements generated during work sessions.
5
+ * Integrates with TaskTracker to associate ideas with tasks.
6
+ */
7
+ import type { DevSystem, TaskIdea, TaskImprovement } from '../types/index.js';
8
+ export interface IdeaInput {
9
+ title: string;
10
+ description: string;
11
+ priority?: 'high' | 'medium' | 'low';
12
+ category?: 'feature' | 'refactor' | 'bug' | 'optimization' | 'documentation';
13
+ relatedFiles?: string[];
14
+ taskId?: string;
15
+ }
16
+ export interface ImprovementInput {
17
+ title: string;
18
+ description: string;
19
+ type?: 'code_quality' | 'performance' | 'security' | 'ux' | 'architecture';
20
+ effort?: 'small' | 'medium' | 'large';
21
+ taskId?: string;
22
+ suggestedBy?: 'ai' | 'user' | 'pattern_detection';
23
+ }
24
+ export interface IdeaStats {
25
+ totalIdeas: number;
26
+ byCategory: Record<string, number>;
27
+ byPriority: Record<string, number>;
28
+ recent: TaskIdea[];
29
+ }
30
+ export interface ImprovementStats {
31
+ totalImprovements: number;
32
+ byType: Record<string, number>;
33
+ byEffort: Record<string, number>;
34
+ recent: TaskImprovement[];
35
+ }
36
+ export declare class IdeaCollector {
37
+ private client;
38
+ private system;
39
+ constructor(system: DevSystem);
40
+ /**
41
+ * Create a new idea (standalone, not attached to task)
42
+ */
43
+ createIdea(input: IdeaInput): Promise<string>;
44
+ /**
45
+ * Get all ideas (standalone and from tasks)
46
+ */
47
+ getAllIdeas(options?: {
48
+ category?: TaskIdea['category'];
49
+ priority?: TaskIdea['priority'];
50
+ limit?: number;
51
+ }): Promise<TaskIdea[]>;
52
+ /**
53
+ * Get idea statistics
54
+ */
55
+ getIdeaStats(): Promise<IdeaStats>;
56
+ /**
57
+ * Mark idea as implemented/done
58
+ */
59
+ completeIdea(ideaId: string): Promise<void>;
60
+ /**
61
+ * Create a new improvement (standalone)
62
+ */
63
+ createImprovement(input: ImprovementInput): Promise<string>;
64
+ /**
65
+ * Get all improvements
66
+ */
67
+ getAllImprovements(options?: {
68
+ type?: TaskImprovement['type'];
69
+ effort?: TaskImprovement['effort'];
70
+ limit?: number;
71
+ }): Promise<TaskImprovement[]>;
72
+ /**
73
+ * Get improvement statistics
74
+ */
75
+ getImprovementStats(): Promise<ImprovementStats>;
76
+ /**
77
+ * Mark improvement as implemented
78
+ */
79
+ completeImprovement(improvementId: string): Promise<void>;
80
+ /**
81
+ * Quick capture from AI analysis (auto-categorizes)
82
+ */
83
+ quickCapture(text: string, context?: {
84
+ taskId?: string;
85
+ files?: string[];
86
+ }): Promise<{
87
+ ideaId?: string;
88
+ improvementId?: string;
89
+ }>;
90
+ /**
91
+ * Export all ideas and improvements as markdown
92
+ */
93
+ exportMarkdown(): Promise<string>;
94
+ }
95
+ /**
96
+ * Get or create IdeaCollector instance
97
+ */
98
+ export declare function getIdeaCollector(system: DevSystem): IdeaCollector;
99
+ /**
100
+ * Create fresh IdeaCollector instance
101
+ */
102
+ export declare function createIdeaCollector(system: DevSystem): IdeaCollector;
103
+ //# sourceMappingURL=IdeaCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdeaCollector.d.ts","sourceRoot":"","sources":["../../src/services/IdeaCollector.ts"],"names":[],"mappings":"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"}