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,440 @@
1
+ /**
2
+ * WorkPlanManager Service
3
+ *
4
+ * Manages the current work plan across sessions.
5
+ * Persists the plan to database so it survives session restarts.
6
+ */
7
+ import { ulid } from 'ulid';
8
+ import { createDrizzleClient } from '../db/drizzle-client.js';
9
+ // =============================================================================
10
+ // WORK PLAN MANAGER SERVICE
11
+ // =============================================================================
12
+ export class WorkPlanManager {
13
+ client;
14
+ system;
15
+ currentPlanId = null;
16
+ constructor(system) {
17
+ this.system = system;
18
+ this.client = createDrizzleClient(system);
19
+ }
20
+ // ===========================================================================
21
+ // PLAN LIFECYCLE
22
+ // ===========================================================================
23
+ /**
24
+ * Create a new work plan
25
+ */
26
+ async createPlan(options) {
27
+ const now = new Date().toISOString();
28
+ // Generate IDs for tasks if not provided
29
+ const taskIds = options.tasks.map(t => t.id ?? ulid());
30
+ // Create task entries first
31
+ for (let i = 0; i < options.tasks.length; i++) {
32
+ const task = options.tasks[i];
33
+ const taskId = taskIds[i];
34
+ const taskContent = {
35
+ title: task.title,
36
+ description: task.description,
37
+ status: task.status ?? 'pending',
38
+ startedAt: now,
39
+ filesModified: [],
40
+ context: {},
41
+ ideas: [],
42
+ improvements: [],
43
+ };
44
+ await this.client.create({
45
+ type: 'task',
46
+ status: task.status ?? 'todo',
47
+ priority: 'medium',
48
+ content: taskContent,
49
+ tags: ['task', 'plan-task'],
50
+ });
51
+ }
52
+ // Create the plan
53
+ const content = {
54
+ title: options.title,
55
+ description: options.description,
56
+ status: 'active',
57
+ createdAt: now,
58
+ updatedAt: now,
59
+ taskIds,
60
+ currentTaskId: taskIds[0],
61
+ progress: 0,
62
+ };
63
+ const result = await this.client.create({
64
+ type: 'work_plan',
65
+ status: 'active',
66
+ priority: 'high',
67
+ content: content,
68
+ tags: ['work_plan', 'active'],
69
+ });
70
+ this.currentPlanId = result.id;
71
+ return result.id;
72
+ }
73
+ /**
74
+ * Get the current active plan
75
+ */
76
+ async getActivePlan() {
77
+ // First check cached ID
78
+ if (this.currentPlanId) {
79
+ const plan = await this.client.get(this.currentPlanId);
80
+ if (plan) {
81
+ const content = plan.content;
82
+ if (content.status === 'active') {
83
+ return { plan, content };
84
+ }
85
+ }
86
+ }
87
+ // Search for active plan
88
+ const plans = await this.client.list({
89
+ type: 'work_plan',
90
+ status: 'active',
91
+ limit: 1,
92
+ });
93
+ if (plans.length > 0) {
94
+ this.currentPlanId = plans[0].id;
95
+ return {
96
+ plan: plans[0],
97
+ content: plans[0].content,
98
+ };
99
+ }
100
+ return null;
101
+ }
102
+ /**
103
+ * Get plan summary for display
104
+ */
105
+ async getPlanSummary() {
106
+ const active = await this.getActivePlan();
107
+ if (!active)
108
+ return null;
109
+ const { plan, content } = active;
110
+ // Get tasks to count completed
111
+ const tasks = await this.getTasksForPlan(content.taskIds);
112
+ const completedTasks = tasks.filter(t => {
113
+ const tc = t.content;
114
+ return tc.status === 'completed';
115
+ }).length;
116
+ // Get current task details
117
+ let currentTask;
118
+ if (content.currentTaskId) {
119
+ const ct = tasks.find(t => t.id === content.currentTaskId);
120
+ if (ct) {
121
+ const tc = ct.content;
122
+ currentTask = {
123
+ id: ct.id,
124
+ title: tc.title,
125
+ status: tc.status,
126
+ };
127
+ }
128
+ }
129
+ return {
130
+ id: plan.id,
131
+ title: content.title,
132
+ status: content.status,
133
+ progress: content.progress,
134
+ totalTasks: content.taskIds.length,
135
+ completedTasks,
136
+ currentTask,
137
+ createdAt: content.createdAt,
138
+ };
139
+ }
140
+ /**
141
+ * Update plan progress
142
+ */
143
+ async updateProgress() {
144
+ const active = await this.getActivePlan();
145
+ if (!active)
146
+ return;
147
+ const { plan, content } = active;
148
+ // Get tasks and calculate progress
149
+ const tasks = await this.getTasksForPlan(content.taskIds);
150
+ const completedTasks = tasks.filter(t => {
151
+ const tc = t.content;
152
+ return tc.status === 'completed';
153
+ }).length;
154
+ const progress = Math.round((completedTasks / content.taskIds.length) * 100);
155
+ // Find next incomplete task if current is done
156
+ let currentTaskId = content.currentTaskId;
157
+ if (currentTaskId) {
158
+ const currentTask = tasks.find(t => t.id === currentTaskId);
159
+ if (currentTask) {
160
+ const tc = currentTask.content;
161
+ if (tc.status === 'completed') {
162
+ // Find next pending task
163
+ const nextTask = tasks.find(t => {
164
+ const ntc = t.content;
165
+ return ntc.status === 'pending';
166
+ });
167
+ currentTaskId = nextTask?.id;
168
+ }
169
+ }
170
+ }
171
+ // Update plan
172
+ await this.client.update(plan.id, {
173
+ content: {
174
+ ...content,
175
+ progress,
176
+ currentTaskId,
177
+ updatedAt: new Date().toISOString(),
178
+ },
179
+ });
180
+ // Mark as completed if all done
181
+ if (progress === 100) {
182
+ await this.completePlan();
183
+ }
184
+ }
185
+ /**
186
+ * Mark current task as complete and move to next
187
+ */
188
+ async completeCurrentTask() {
189
+ const active = await this.getActivePlan();
190
+ if (!active)
191
+ return;
192
+ const { content } = active;
193
+ if (content.currentTaskId) {
194
+ // Update task status
195
+ const task = await this.client.get(content.currentTaskId);
196
+ if (task) {
197
+ const tc = task.content;
198
+ await this.client.update(content.currentTaskId, {
199
+ status: 'done',
200
+ content: {
201
+ ...tc,
202
+ status: 'completed',
203
+ completedAt: new Date().toISOString(),
204
+ },
205
+ });
206
+ }
207
+ }
208
+ // Update plan progress
209
+ await this.updateProgress();
210
+ }
211
+ /**
212
+ * Mark current task as in progress
213
+ */
214
+ async startCurrentTask() {
215
+ const active = await this.getActivePlan();
216
+ if (!active)
217
+ return;
218
+ const { content } = active;
219
+ if (content.currentTaskId) {
220
+ const task = await this.client.get(content.currentTaskId);
221
+ if (task) {
222
+ const tc = task.content;
223
+ await this.client.update(content.currentTaskId, {
224
+ status: 'in_progress',
225
+ content: {
226
+ ...tc,
227
+ status: 'in_progress',
228
+ startedAt: new Date().toISOString(),
229
+ },
230
+ });
231
+ }
232
+ }
233
+ }
234
+ /**
235
+ * Complete the entire plan
236
+ */
237
+ async completePlan() {
238
+ const active = await this.getActivePlan();
239
+ if (!active)
240
+ return;
241
+ const { plan, content } = active;
242
+ await this.client.update(plan.id, {
243
+ status: 'done',
244
+ content: {
245
+ ...content,
246
+ status: 'completed',
247
+ progress: 100,
248
+ updatedAt: new Date().toISOString(),
249
+ },
250
+ tags: ['work_plan', 'completed'],
251
+ });
252
+ this.currentPlanId = null;
253
+ }
254
+ /**
255
+ * Pause the current plan
256
+ */
257
+ async pausePlan() {
258
+ const active = await this.getActivePlan();
259
+ if (!active)
260
+ return;
261
+ const { plan, content } = active;
262
+ await this.client.update(plan.id, {
263
+ status: 'blocked',
264
+ content: {
265
+ ...content,
266
+ status: 'paused',
267
+ updatedAt: new Date().toISOString(),
268
+ },
269
+ });
270
+ this.currentPlanId = null;
271
+ }
272
+ /**
273
+ * Resume a paused plan
274
+ */
275
+ async resumePlan(planId) {
276
+ const plan = await this.client.get(planId);
277
+ if (!plan)
278
+ return;
279
+ const content = plan.content;
280
+ await this.client.update(planId, {
281
+ status: 'active',
282
+ content: {
283
+ ...content,
284
+ status: 'active',
285
+ updatedAt: new Date().toISOString(),
286
+ },
287
+ });
288
+ this.currentPlanId = planId;
289
+ }
290
+ // ===========================================================================
291
+ // TASK MANAGEMENT
292
+ // ===========================================================================
293
+ /**
294
+ * Add a task to the current plan
295
+ */
296
+ async addTask(task) {
297
+ const active = await this.getActivePlan();
298
+ if (!active) {
299
+ throw new Error('No active plan');
300
+ }
301
+ const { plan, content } = active;
302
+ const taskId = task.id ?? ulid();
303
+ const now = new Date().toISOString();
304
+ // Create task
305
+ const taskContent = {
306
+ title: task.title,
307
+ description: task.description,
308
+ status: task.status ?? 'pending',
309
+ startedAt: now,
310
+ filesModified: [],
311
+ context: {},
312
+ ideas: [],
313
+ improvements: [],
314
+ };
315
+ await this.client.create({
316
+ type: 'task',
317
+ status: task.status ?? 'todo',
318
+ priority: 'medium',
319
+ content: taskContent,
320
+ tags: ['task', 'plan-task'],
321
+ });
322
+ // Update plan
323
+ await this.client.update(plan.id, {
324
+ content: {
325
+ ...content,
326
+ taskIds: [...content.taskIds, taskId],
327
+ updatedAt: now,
328
+ },
329
+ });
330
+ // Recalculate progress
331
+ await this.updateProgress();
332
+ return taskId;
333
+ }
334
+ /**
335
+ * Get all tasks for a plan
336
+ */
337
+ async getTasksForPlan(taskIds) {
338
+ const tasks = [];
339
+ for (const id of taskIds) {
340
+ const task = await this.client.get(id);
341
+ if (task) {
342
+ tasks.push(task);
343
+ }
344
+ }
345
+ return tasks;
346
+ }
347
+ /**
348
+ * Get tasks with details for display
349
+ */
350
+ async getPlanTasks() {
351
+ const active = await this.getActivePlan();
352
+ if (!active)
353
+ return [];
354
+ const { content } = active;
355
+ const tasks = await this.getTasksForPlan(content.taskIds);
356
+ return tasks.map(t => {
357
+ const tc = t.content;
358
+ return {
359
+ id: t.id,
360
+ title: tc.title,
361
+ status: tc.status,
362
+ isCurrent: t.id === content.currentTaskId,
363
+ };
364
+ });
365
+ }
366
+ // ===========================================================================
367
+ // CONTEXT FOR SESSION START
368
+ // ===========================================================================
369
+ /**
370
+ * Get context string for session start hook
371
+ */
372
+ async getSessionContext() {
373
+ const summary = await this.getPlanSummary();
374
+ if (!summary) {
375
+ return 'No active work plan. Use `claude-memory plan` to create one.';
376
+ }
377
+ const tasks = await this.getPlanTasks();
378
+ const pendingTasks = tasks.filter(t => t.status === 'pending' || t.status === 'in_progress');
379
+ let context = `## Active Work Plan: ${summary.title}\n\n`;
380
+ context += `Progress: ${summary.progress}% (${summary.completedTasks}/${summary.totalTasks} tasks)\n\n`;
381
+ if (summary.currentTask) {
382
+ context += `### Current Task\n`;
383
+ context += `**${summary.currentTask.title}** (${summary.currentTask.status})\n\n`;
384
+ }
385
+ if (pendingTasks.length > 0) {
386
+ context += `### Remaining Tasks\n`;
387
+ for (const task of pendingTasks) {
388
+ const marker = task.isCurrent ? '→' : '-';
389
+ context += `${marker} ${task.title} [${task.status}]\n`;
390
+ }
391
+ }
392
+ return context;
393
+ }
394
+ // ===========================================================================
395
+ // HISTORY
396
+ // ===========================================================================
397
+ /**
398
+ * Get plan history
399
+ */
400
+ async getPlanHistory(limit = 10) {
401
+ const plans = await this.client.list({
402
+ type: 'work_plan',
403
+ limit,
404
+ });
405
+ const summaries = [];
406
+ for (const plan of plans) {
407
+ const content = plan.content;
408
+ summaries.push({
409
+ id: plan.id,
410
+ title: content.title,
411
+ status: content.status,
412
+ progress: content.progress,
413
+ totalTasks: content.taskIds.length,
414
+ completedTasks: Math.round(content.progress / 100 * content.taskIds.length),
415
+ createdAt: content.createdAt,
416
+ });
417
+ }
418
+ return summaries;
419
+ }
420
+ }
421
+ // =============================================================================
422
+ // FACTORY
423
+ // =============================================================================
424
+ let managerInstance = null;
425
+ /**
426
+ * Get or create WorkPlanManager instance
427
+ */
428
+ export function getWorkPlanManager(system) {
429
+ if (!managerInstance) {
430
+ managerInstance = new WorkPlanManager(system);
431
+ }
432
+ return managerInstance;
433
+ }
434
+ /**
435
+ * Create fresh WorkPlanManager instance
436
+ */
437
+ export function createWorkPlanManager(system) {
438
+ return new WorkPlanManager(system);
439
+ }
440
+ //# sourceMappingURL=WorkPlanManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkPlanManager.js","sourceRoot":"","sources":["../../src/services/WorkPlanManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Auto-Inject Service
3
+ *
4
+ * Automatically injects relevant memories into Claude sessions.
5
+ * - Detects working module from git diff
6
+ * - Finds semantically relevant memories
7
+ * - Formats context for injection
8
+ */
9
+ import { SemanticSearchService } from './semantic-search.js';
10
+ import type { DrizzleMemoryClient } from '../db/drizzle-client.js';
11
+ import type { MemoryConfig } from '../types/index.js';
12
+ export interface SessionContext {
13
+ system: string;
14
+ projectName: string;
15
+ detectedModule: string | null;
16
+ recentFiles: string[];
17
+ memories: InjectedMemory[];
18
+ patterns: InjectedPattern[];
19
+ stats: SessionStats;
20
+ }
21
+ export interface InjectedMemory {
22
+ id: string;
23
+ title: string;
24
+ body: string;
25
+ domain?: string;
26
+ relevanceScore?: number;
27
+ }
28
+ export interface InjectedPattern {
29
+ patternId: string;
30
+ description: string;
31
+ occurrences: number;
32
+ severity: string;
33
+ }
34
+ export interface SessionStats {
35
+ totalMemories: number;
36
+ loadedMemories: number;
37
+ triggeredPatterns: number;
38
+ }
39
+ export declare class AutoInjectService {
40
+ private client;
41
+ private searchService;
42
+ private config;
43
+ constructor(client: DrizzleMemoryClient, searchService: SemanticSearchService, config: MemoryConfig);
44
+ /**
45
+ * Generate session context for auto-injection
46
+ */
47
+ generateSessionContext(projectRoot: string): Promise<SessionContext>;
48
+ /**
49
+ * Format context for Claude injection
50
+ */
51
+ formatForInjection(context: SessionContext): string;
52
+ /**
53
+ * Quick context for minimal injection
54
+ */
55
+ getQuickContext(projectRoot: string): Promise<string>;
56
+ /**
57
+ * Detect working module from git diff
58
+ */
59
+ private detectWorkingModule;
60
+ /**
61
+ * Get relevant memories using semantic search
62
+ */
63
+ private getRelevantMemories;
64
+ /**
65
+ * Get triggered patterns
66
+ */
67
+ private getTriggeredPatterns;
68
+ /**
69
+ * Get session statistics
70
+ */
71
+ private getSessionStats;
72
+ }
73
+ /**
74
+ * Create an auto-inject service
75
+ */
76
+ export declare function createAutoInjectService(client: DrizzleMemoryClient, searchService: SemanticSearchService, config: MemoryConfig): AutoInjectService;
77
+ //# sourceMappingURL=auto-inject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-inject.d.ts","sourceRoot":"","sources":["../../src/services/auto-inject.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAA0C,MAAM,mBAAmB,CAAA;AAQ7F,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,KAAK,EAAE,YAAY,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAc;gBAG1B,MAAM,EAAE,mBAAmB,EAC3B,aAAa,EAAE,qBAAqB,EACpC,MAAM,EAAE,YAAY;IAOtB;;OAEG;IACG,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAwB1E;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAkDnD;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B3D;;OAEG;YACW,mBAAmB;IAsFjC;;OAEG;YACW,mBAAmB;IAmEjC;;OAEG;YACW,oBAAoB;IAclC;;OAEG;YACW,eAAe;CAY9B;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,EAC3B,aAAa,EAAE,qBAAqB,EACpC,MAAM,EAAE,YAAY,GACnB,iBAAiB,CAEnB"}