claude-memory-store 0.1.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 (158) hide show
  1. package/README.md +364 -0
  2. package/dist/acknowledgement.d.ts +14 -0
  3. package/dist/acknowledgement.d.ts.map +1 -0
  4. package/dist/acknowledgement.js +55 -0
  5. package/dist/acknowledgement.js.map +1 -0
  6. package/dist/atlas/client.d.ts +9 -0
  7. package/dist/atlas/client.d.ts.map +1 -0
  8. package/dist/atlas/client.js +64 -0
  9. package/dist/atlas/client.js.map +1 -0
  10. package/dist/atlas/embeddings.d.ts +18 -0
  11. package/dist/atlas/embeddings.d.ts.map +1 -0
  12. package/dist/atlas/embeddings.js +56 -0
  13. package/dist/atlas/embeddings.js.map +1 -0
  14. package/dist/atlas/indexes.d.ts +4 -0
  15. package/dist/atlas/indexes.d.ts.map +1 -0
  16. package/dist/atlas/indexes.js +78 -0
  17. package/dist/atlas/indexes.js.map +1 -0
  18. package/dist/atlas/vector.d.ts +17 -0
  19. package/dist/atlas/vector.d.ts.map +1 -0
  20. package/dist/atlas/vector.js +61 -0
  21. package/dist/atlas/vector.js.map +1 -0
  22. package/dist/bin/claude-memory.d.ts +3 -0
  23. package/dist/bin/claude-memory.d.ts.map +1 -0
  24. package/dist/bin/claude-memory.js +648 -0
  25. package/dist/bin/claude-memory.js.map +1 -0
  26. package/dist/bin/mcp-server.d.ts +3 -0
  27. package/dist/bin/mcp-server.d.ts.map +1 -0
  28. package/dist/bin/mcp-server.js +165 -0
  29. package/dist/bin/mcp-server.js.map +1 -0
  30. package/dist/cache/command-cache.d.ts +12 -0
  31. package/dist/cache/command-cache.d.ts.map +1 -0
  32. package/dist/cache/command-cache.js +63 -0
  33. package/dist/cache/command-cache.js.map +1 -0
  34. package/dist/cleanup.d.ts +8 -0
  35. package/dist/cleanup.d.ts.map +1 -0
  36. package/dist/cleanup.js +22 -0
  37. package/dist/cleanup.js.map +1 -0
  38. package/dist/config.d.ts +10 -0
  39. package/dist/config.d.ts.map +1 -0
  40. package/dist/config.js +97 -0
  41. package/dist/config.js.map +1 -0
  42. package/dist/detector.d.ts +20 -0
  43. package/dist/detector.d.ts.map +1 -0
  44. package/dist/detector.js +92 -0
  45. package/dist/detector.js.map +1 -0
  46. package/dist/editor/file-editor.d.ts +7 -0
  47. package/dist/editor/file-editor.d.ts.map +1 -0
  48. package/dist/editor/file-editor.js +73 -0
  49. package/dist/editor/file-editor.js.map +1 -0
  50. package/dist/editor/tui.d.ts +11 -0
  51. package/dist/editor/tui.d.ts.map +1 -0
  52. package/dist/editor/tui.js +75 -0
  53. package/dist/editor/tui.js.map +1 -0
  54. package/dist/hooks/post-tool-use.d.ts +11 -0
  55. package/dist/hooks/post-tool-use.d.ts.map +1 -0
  56. package/dist/hooks/post-tool-use.js +36 -0
  57. package/dist/hooks/post-tool-use.js.map +1 -0
  58. package/dist/hooks/pre-tool-use.d.ts +5 -0
  59. package/dist/hooks/pre-tool-use.d.ts.map +1 -0
  60. package/dist/hooks/pre-tool-use.js +103 -0
  61. package/dist/hooks/pre-tool-use.js.map +1 -0
  62. package/dist/hooks/startup.d.ts +25 -0
  63. package/dist/hooks/startup.d.ts.map +1 -0
  64. package/dist/hooks/startup.js +62 -0
  65. package/dist/hooks/startup.js.map +1 -0
  66. package/dist/hooks/stop.d.ts +39 -0
  67. package/dist/hooks/stop.d.ts.map +1 -0
  68. package/dist/hooks/stop.js +102 -0
  69. package/dist/hooks/stop.js.map +1 -0
  70. package/dist/index.d.ts +35 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +166 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/memory/commands.d.ts +15 -0
  75. package/dist/memory/commands.d.ts.map +1 -0
  76. package/dist/memory/commands.js +55 -0
  77. package/dist/memory/commands.js.map +1 -0
  78. package/dist/memory/developer.d.ts +17 -0
  79. package/dist/memory/developer.d.ts.map +1 -0
  80. package/dist/memory/developer.js +233 -0
  81. package/dist/memory/developer.js.map +1 -0
  82. package/dist/memory/project.d.ts +25 -0
  83. package/dist/memory/project.d.ts.map +1 -0
  84. package/dist/memory/project.js +341 -0
  85. package/dist/memory/project.js.map +1 -0
  86. package/dist/memory/threads.d.ts +10 -0
  87. package/dist/memory/threads.d.ts.map +1 -0
  88. package/dist/memory/threads.js +57 -0
  89. package/dist/memory/threads.js.map +1 -0
  90. package/dist/memory/working.d.ts +16 -0
  91. package/dist/memory/working.d.ts.map +1 -0
  92. package/dist/memory/working.js +80 -0
  93. package/dist/memory/working.js.map +1 -0
  94. package/dist/natural-language/intent.d.ts +4 -0
  95. package/dist/natural-language/intent.d.ts.map +1 -0
  96. package/dist/natural-language/intent.js +169 -0
  97. package/dist/natural-language/intent.js.map +1 -0
  98. package/dist/natural-language/parser.d.ts +5 -0
  99. package/dist/natural-language/parser.d.ts.map +1 -0
  100. package/dist/natural-language/parser.js +63 -0
  101. package/dist/natural-language/parser.js.map +1 -0
  102. package/dist/natural-language/router.d.ts +9 -0
  103. package/dist/natural-language/router.d.ts.map +1 -0
  104. package/dist/natural-language/router.js +171 -0
  105. package/dist/natural-language/router.js.map +1 -0
  106. package/dist/project-id.d.ts +5 -0
  107. package/dist/project-id.d.ts.map +1 -0
  108. package/dist/project-id.js +78 -0
  109. package/dist/project-id.js.map +1 -0
  110. package/dist/slash-commands/edit.d.ts +10 -0
  111. package/dist/slash-commands/edit.d.ts.map +1 -0
  112. package/dist/slash-commands/edit.js +312 -0
  113. package/dist/slash-commands/edit.js.map +1 -0
  114. package/dist/slash-commands/memory.d.ts +3 -0
  115. package/dist/slash-commands/memory.d.ts.map +1 -0
  116. package/dist/slash-commands/memory.js +69 -0
  117. package/dist/slash-commands/memory.js.map +1 -0
  118. package/dist/slash-commands/recall.d.ts +2 -0
  119. package/dist/slash-commands/recall.d.ts.map +1 -0
  120. package/dist/slash-commands/recall.js +81 -0
  121. package/dist/slash-commands/recall.js.map +1 -0
  122. package/dist/slash-commands/remember.d.ts +2 -0
  123. package/dist/slash-commands/remember.d.ts.map +1 -0
  124. package/dist/slash-commands/remember.js +21 -0
  125. package/dist/slash-commands/remember.js.map +1 -0
  126. package/dist/slash-commands/stats.d.ts +2 -0
  127. package/dist/slash-commands/stats.d.ts.map +1 -0
  128. package/dist/slash-commands/stats.js +55 -0
  129. package/dist/slash-commands/stats.js.map +1 -0
  130. package/dist/slash-commands/threads.d.ts +4 -0
  131. package/dist/slash-commands/threads.d.ts.map +1 -0
  132. package/dist/slash-commands/threads.js +36 -0
  133. package/dist/slash-commands/threads.js.map +1 -0
  134. package/dist/startup/conversation.d.ts +17 -0
  135. package/dist/startup/conversation.d.ts.map +1 -0
  136. package/dist/startup/conversation.js +78 -0
  137. package/dist/startup/conversation.js.map +1 -0
  138. package/dist/startup/feature-search.d.ts +9 -0
  139. package/dist/startup/feature-search.d.ts.map +1 -0
  140. package/dist/startup/feature-search.js +62 -0
  141. package/dist/startup/feature-search.js.map +1 -0
  142. package/dist/startup/injector.d.ts +4 -0
  143. package/dist/startup/injector.d.ts.map +1 -0
  144. package/dist/startup/injector.js +190 -0
  145. package/dist/startup/injector.js.map +1 -0
  146. package/dist/summarizer.d.ts +15 -0
  147. package/dist/summarizer.d.ts.map +1 -0
  148. package/dist/summarizer.js +92 -0
  149. package/dist/summarizer.js.map +1 -0
  150. package/dist/types.d.ts +151 -0
  151. package/dist/types.d.ts.map +1 -0
  152. package/dist/types.js +3 -0
  153. package/dist/types.js.map +1 -0
  154. package/dist/utils.d.ts +5 -0
  155. package/dist/utils.d.ts.map +1 -0
  156. package/dist/utils.js +16 -0
  157. package/dist/utils.js.map +1 -0
  158. package/package.json +67 -0
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectMeta = getProjectMeta;
4
+ exports.ensureProjectMeta = ensureProjectMeta;
5
+ exports.incrementSession = incrementSession;
6
+ exports.addArchitectureDecision = addArchitectureDecision;
7
+ exports.removeArchitectureDecision = removeArchitectureDecision;
8
+ exports.getArchitectureDecisions = getArchitectureDecisions;
9
+ exports.addPattern = addPattern;
10
+ exports.removePattern = removePattern;
11
+ exports.getPatterns = getPatterns;
12
+ exports.addAvoid = addAvoid;
13
+ exports.removeAvoid = removeAvoid;
14
+ exports.getAvoidRules = getAvoidRules;
15
+ exports.saveCommand = saveCommand;
16
+ exports.removeCommand = removeCommand;
17
+ exports.getAllCommands = getAllCommands;
18
+ exports.addOpenThread = addOpenThread;
19
+ exports.closeOpenThread = closeOpenThread;
20
+ exports.updateOpenThreadStatus = updateOpenThreadStatus;
21
+ exports.getOpenThreads = getOpenThreads;
22
+ exports.clearAllMemory = clearAllMemory;
23
+ const client_js_1 = require("../atlas/client.js");
24
+ const embeddings_js_1 = require("../atlas/embeddings.js");
25
+ const project_id_js_1 = require("../project-id.js");
26
+ // ─── Project Metadata ───────────────────────────────────────────────────────
27
+ async function getProjectMeta() {
28
+ const collection = await (0, client_js_1.getCollection)();
29
+ const projectId = (0, project_id_js_1.getProjectId)();
30
+ const doc = await collection.findOne({
31
+ type: 'project_meta',
32
+ project_id: projectId,
33
+ });
34
+ return doc;
35
+ }
36
+ async function ensureProjectMeta() {
37
+ const existing = await getProjectMeta();
38
+ if (existing)
39
+ return existing;
40
+ const collection = await (0, client_js_1.getCollection)();
41
+ const projectId = (0, project_id_js_1.getProjectId)();
42
+ const doc = {
43
+ type: 'project_meta',
44
+ project_id: projectId,
45
+ project_name: (0, project_id_js_1.getProjectName)(),
46
+ git_remote: (0, project_id_js_1.getGitRemote)() || '',
47
+ last_updated: new Date(),
48
+ total_sessions: 0,
49
+ total_cost_usd: 0,
50
+ active_work: '',
51
+ completion_notes: '',
52
+ };
53
+ await collection.insertOne(doc);
54
+ return doc;
55
+ }
56
+ async function incrementSession(costUsd = 0) {
57
+ const collection = await (0, client_js_1.getCollection)();
58
+ const projectId = (0, project_id_js_1.getProjectId)();
59
+ await ensureProjectMeta();
60
+ await collection.updateOne({ type: 'project_meta', project_id: projectId }, {
61
+ $inc: { total_sessions: 1, total_cost_usd: costUsd },
62
+ $set: { last_updated: new Date() },
63
+ });
64
+ }
65
+ // ─── Architecture Decisions ─────────────────────────────────────────────────
66
+ async function addArchitectureDecision(decision) {
67
+ const collection = await (0, client_js_1.getCollection)();
68
+ const projectId = (0, project_id_js_1.getProjectId)();
69
+ const now = new Date();
70
+ // Application-level dedup check
71
+ const existing = await collection.findOne({
72
+ type: 'architecture',
73
+ project_id: projectId,
74
+ content: decision,
75
+ });
76
+ if (existing)
77
+ return;
78
+ const embedding = await (0, embeddings_js_1.generateEmbedding)(decision);
79
+ try {
80
+ await collection.insertOne({
81
+ type: 'architecture',
82
+ project_id: projectId,
83
+ content: decision,
84
+ created_at: now,
85
+ last_accessed: now,
86
+ searchable_text: decision,
87
+ embedding,
88
+ });
89
+ }
90
+ catch (err) {
91
+ if (err?.code !== 11000)
92
+ throw err;
93
+ }
94
+ }
95
+ async function removeArchitectureDecision(decision) {
96
+ const collection = await (0, client_js_1.getCollection)();
97
+ const projectId = (0, project_id_js_1.getProjectId)();
98
+ const result = await collection.deleteOne({
99
+ type: 'architecture',
100
+ project_id: projectId,
101
+ content: decision,
102
+ });
103
+ return result.deletedCount > 0;
104
+ }
105
+ async function getArchitectureDecisions(projectId) {
106
+ const collection = await (0, client_js_1.getCollection)();
107
+ const pid = projectId || (0, project_id_js_1.getProjectId)();
108
+ const docs = await collection
109
+ .find({ type: 'architecture', project_id: pid })
110
+ .sort({ created_at: 1 })
111
+ .toArray();
112
+ return docs.map((d) => d.content);
113
+ }
114
+ // ─── Patterns ───────────────────────────────────────────────────────────────
115
+ async function addPattern(pattern) {
116
+ const collection = await (0, client_js_1.getCollection)();
117
+ const projectId = (0, project_id_js_1.getProjectId)();
118
+ const now = new Date();
119
+ const existing = await collection.findOne({
120
+ type: 'pattern',
121
+ project_id: projectId,
122
+ content: pattern,
123
+ });
124
+ if (existing)
125
+ return;
126
+ const embedding = await (0, embeddings_js_1.generateEmbedding)(pattern);
127
+ try {
128
+ await collection.insertOne({
129
+ type: 'pattern',
130
+ project_id: projectId,
131
+ content: pattern,
132
+ created_at: now,
133
+ last_accessed: now,
134
+ searchable_text: pattern,
135
+ embedding,
136
+ });
137
+ }
138
+ catch (err) {
139
+ if (err?.code !== 11000)
140
+ throw err;
141
+ }
142
+ }
143
+ async function removePattern(pattern) {
144
+ const collection = await (0, client_js_1.getCollection)();
145
+ const projectId = (0, project_id_js_1.getProjectId)();
146
+ const result = await collection.deleteOne({
147
+ type: 'pattern',
148
+ project_id: projectId,
149
+ content: pattern,
150
+ });
151
+ return result.deletedCount > 0;
152
+ }
153
+ async function getPatterns(projectId) {
154
+ const collection = await (0, client_js_1.getCollection)();
155
+ const pid = projectId || (0, project_id_js_1.getProjectId)();
156
+ const docs = await collection
157
+ .find({ type: 'pattern', project_id: pid })
158
+ .sort({ created_at: 1 })
159
+ .toArray();
160
+ return docs.map((d) => d.content);
161
+ }
162
+ // ─── Avoid Rules ────────────────────────────────────────────────────────────
163
+ async function addAvoid(avoid) {
164
+ const collection = await (0, client_js_1.getCollection)();
165
+ const projectId = (0, project_id_js_1.getProjectId)();
166
+ const now = new Date();
167
+ const existing = await collection.findOne({
168
+ type: 'avoid',
169
+ project_id: projectId,
170
+ content: avoid,
171
+ });
172
+ if (existing)
173
+ return;
174
+ const embedding = await (0, embeddings_js_1.generateEmbedding)(avoid);
175
+ try {
176
+ await collection.insertOne({
177
+ type: 'avoid',
178
+ project_id: projectId,
179
+ content: avoid,
180
+ created_at: now,
181
+ last_accessed: now,
182
+ searchable_text: avoid,
183
+ embedding,
184
+ });
185
+ }
186
+ catch (err) {
187
+ if (err?.code !== 11000)
188
+ throw err;
189
+ }
190
+ }
191
+ async function removeAvoid(avoid) {
192
+ const collection = await (0, client_js_1.getCollection)();
193
+ const projectId = (0, project_id_js_1.getProjectId)();
194
+ const result = await collection.deleteOne({
195
+ type: 'avoid',
196
+ project_id: projectId,
197
+ content: avoid,
198
+ });
199
+ return result.deletedCount > 0;
200
+ }
201
+ async function getAvoidRules(projectId) {
202
+ const collection = await (0, client_js_1.getCollection)();
203
+ const pid = projectId || (0, project_id_js_1.getProjectId)();
204
+ const docs = await collection
205
+ .find({ type: 'avoid', project_id: pid })
206
+ .sort({ created_at: 1 })
207
+ .toArray();
208
+ return docs.map((d) => d.content);
209
+ }
210
+ // ─── Commands ───────────────────────────────────────────────────────────────
211
+ async function saveCommand(trigger, command) {
212
+ const collection = await (0, client_js_1.getCollection)();
213
+ const projectId = (0, project_id_js_1.getProjectId)();
214
+ const now = new Date();
215
+ const searchable_text = [
216
+ trigger,
217
+ command.description,
218
+ ...command.steps,
219
+ command.notes,
220
+ ]
221
+ .filter(Boolean)
222
+ .join(' ');
223
+ const embedding = await (0, embeddings_js_1.generateEmbedding)(searchable_text);
224
+ await collection.updateOne({ type: 'command', project_id: projectId, trigger }, {
225
+ $set: {
226
+ description: command.description,
227
+ steps: command.steps,
228
+ triggers: command.triggers,
229
+ last_verified: command.last_verified,
230
+ verified_count: command.verified_count,
231
+ notes: command.notes,
232
+ last_accessed: now,
233
+ searchable_text,
234
+ embedding,
235
+ },
236
+ $setOnInsert: {
237
+ type: 'command',
238
+ project_id: projectId,
239
+ trigger,
240
+ created_at: now,
241
+ },
242
+ }, { upsert: true });
243
+ }
244
+ async function removeCommand(trigger) {
245
+ const collection = await (0, client_js_1.getCollection)();
246
+ const projectId = (0, project_id_js_1.getProjectId)();
247
+ const result = await collection.deleteOne({
248
+ type: 'command',
249
+ project_id: projectId,
250
+ trigger,
251
+ });
252
+ return result.deletedCount > 0;
253
+ }
254
+ async function getAllCommands() {
255
+ const collection = await (0, client_js_1.getCollection)();
256
+ const projectId = (0, project_id_js_1.getProjectId)();
257
+ const docs = await collection
258
+ .find({ type: 'command', project_id: projectId })
259
+ .toArray();
260
+ const result = {};
261
+ for (const doc of docs) {
262
+ const cmd = doc;
263
+ result[cmd.trigger] = {
264
+ description: cmd.description,
265
+ steps: cmd.steps,
266
+ triggers: cmd.triggers,
267
+ last_verified: cmd.last_verified,
268
+ verified_count: cmd.verified_count,
269
+ notes: cmd.notes,
270
+ };
271
+ }
272
+ return result;
273
+ }
274
+ // ─── Open Threads ───────────────────────────────────────────────────────────
275
+ async function addOpenThread(thread) {
276
+ const collection = await (0, client_js_1.getCollection)();
277
+ const projectId = (0, project_id_js_1.getProjectId)();
278
+ const now = new Date();
279
+ const searchable_text = [thread.description, thread.context].filter(Boolean).join(' ');
280
+ const embedding = await (0, embeddings_js_1.generateEmbedding)(searchable_text);
281
+ await collection.insertOne({
282
+ type: 'thread',
283
+ project_id: projectId,
284
+ thread_id: thread.id,
285
+ description: thread.description,
286
+ context: thread.context,
287
+ status: thread.status,
288
+ created: thread.created,
289
+ created_at: now,
290
+ last_accessed: now,
291
+ searchable_text,
292
+ embedding,
293
+ });
294
+ }
295
+ async function closeOpenThread(threadId) {
296
+ const collection = await (0, client_js_1.getCollection)();
297
+ const projectId = (0, project_id_js_1.getProjectId)();
298
+ const result = await collection.deleteOne({
299
+ type: 'thread',
300
+ project_id: projectId,
301
+ thread_id: threadId,
302
+ });
303
+ return result.deletedCount > 0;
304
+ }
305
+ async function updateOpenThreadStatus(threadId, status) {
306
+ const collection = await (0, client_js_1.getCollection)();
307
+ const projectId = (0, project_id_js_1.getProjectId)();
308
+ const result = await collection.updateOne({ type: 'thread', project_id: projectId, thread_id: threadId }, { $set: { status } });
309
+ return result.modifiedCount > 0;
310
+ }
311
+ async function getOpenThreads() {
312
+ const collection = await (0, client_js_1.getCollection)();
313
+ const projectId = (0, project_id_js_1.getProjectId)();
314
+ const docs = await collection
315
+ .find({ type: 'thread', project_id: projectId })
316
+ .sort({ created: 1 })
317
+ .toArray();
318
+ return docs.map((d) => {
319
+ const t = d;
320
+ return {
321
+ id: t.thread_id,
322
+ description: t.description,
323
+ context: t.context,
324
+ status: t.status,
325
+ created: t.created,
326
+ };
327
+ });
328
+ }
329
+ // ─── Cleanup ────────────────────────────────────────────────────────────────
330
+ /**
331
+ * Clears ALL memory documents for this project across all layers.
332
+ */
333
+ async function clearAllMemory() {
334
+ const collection = await (0, client_js_1.getCollection)();
335
+ const projectId = (0, project_id_js_1.getProjectId)();
336
+ const result = await collection.deleteMany({
337
+ project_id: projectId,
338
+ });
339
+ return result.deletedCount > 0;
340
+ }
341
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/memory/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { OpenThread, OpenThreadStatus } from '../types.js';
2
+ export declare function createThread(description: string, context: string, status?: OpenThreadStatus): Promise<OpenThread>;
3
+ export declare function resolveThread(threadId: string): Promise<boolean>;
4
+ export declare function deferThread(threadId: string): Promise<boolean>;
5
+ export declare function watchThread(threadId: string): Promise<boolean>;
6
+ export declare function listThreads(): Promise<OpenThread[]>;
7
+ export declare function findThreadByDescription(searchText: string): Promise<OpenThread | null>;
8
+ export declare function findThreadByIndex(index: number): Promise<OpenThread | null>;
9
+ export declare function formatThread(thread: OpenThread, index?: number): string;
10
+ //# sourceMappingURL=threads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/memory/threads.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,gBAA+B,GACtC,OAAO,CAAC,UAAU,CAAC,CAWrB;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEtE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAEzD;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAe5B;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAGjF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createThread = createThread;
4
+ exports.resolveThread = resolveThread;
5
+ exports.deferThread = deferThread;
6
+ exports.watchThread = watchThread;
7
+ exports.listThreads = listThreads;
8
+ exports.findThreadByDescription = findThreadByDescription;
9
+ exports.findThreadByIndex = findThreadByIndex;
10
+ exports.formatThread = formatThread;
11
+ const uuid_1 = require("uuid");
12
+ const project_js_1 = require("./project.js");
13
+ const utils_js_1 = require("../utils.js");
14
+ async function createThread(description, context, status = 'unresolved') {
15
+ const thread = {
16
+ id: (0, uuid_1.v4)(),
17
+ description,
18
+ created: new Date(),
19
+ context,
20
+ status,
21
+ };
22
+ await (0, project_js_1.addOpenThread)(thread);
23
+ return thread;
24
+ }
25
+ async function resolveThread(threadId) {
26
+ return (0, project_js_1.closeOpenThread)(threadId);
27
+ }
28
+ async function deferThread(threadId) {
29
+ return (0, project_js_1.updateOpenThreadStatus)(threadId, 'deferred');
30
+ }
31
+ async function watchThread(threadId) {
32
+ return (0, project_js_1.updateOpenThreadStatus)(threadId, 'watching');
33
+ }
34
+ async function listThreads() {
35
+ return (0, project_js_1.getOpenThreads)();
36
+ }
37
+ async function findThreadByDescription(searchText) {
38
+ const threads = await (0, project_js_1.getOpenThreads)();
39
+ const lower = searchText.toLowerCase();
40
+ // Exact match first
41
+ const exact = threads.find((t) => t.description.toLowerCase() === lower);
42
+ if (exact)
43
+ return exact;
44
+ // Partial match
45
+ const partial = threads.find((t) => t.description.toLowerCase().includes(lower) || lower.includes(t.description.toLowerCase()));
46
+ return partial || null;
47
+ }
48
+ async function findThreadByIndex(index) {
49
+ const threads = await (0, project_js_1.getOpenThreads)();
50
+ return threads[index - 1] || null;
51
+ }
52
+ function formatThread(thread, index) {
53
+ const prefix = index !== undefined ? `[${index}] ` : '';
54
+ const age = (0, utils_js_1.getAge)(thread.created);
55
+ return `${prefix}${thread.description}\n Created: ${thread.created.toISOString().split('T')[0]} | Status: ${thread.status} | Age: ${age}\n Context: ${thread.context}`;
56
+ }
57
+ //# sourceMappingURL=threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/memory/threads.ts"],"names":[],"mappings":";;AAUA,oCAeC;AAED,sCAEC;AAED,kCAEC;AAED,kCAEC;AAED,kCAEC;AAED,0DAiBC;AAED,8CAGC;AAED,oCAIC;AAvED,+BAAoC;AACpC,6CAKsB;AACtB,0CAAqC;AAG9B,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,OAAe,EACf,SAA2B,YAAY;IAEvC,MAAM,MAAM,GAAe;QACzB,EAAE,EAAE,IAAA,SAAM,GAAE;QACZ,WAAW;QACX,OAAO,EAAE,IAAI,IAAI,EAAE;QACnB,OAAO;QACP,MAAM;KACP,CAAC;IAEF,MAAM,IAAA,0BAAa,EAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,OAAO,IAAA,4BAAe,EAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,OAAO,IAAA,mCAAsB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,OAAO,IAAA,mCAAsB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC;AAEM,KAAK,UAAU,WAAW;IAC/B,OAAO,IAAA,2BAAc,GAAE,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,UAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,IAAA,2BAAc,GAAE,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAEvC,oBAAoB;IACpB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,KAAK,CAC7C,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,gBAAgB;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAClG,CAAC;IACF,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,KAAa;IACnD,MAAM,OAAO,GAAG,MAAM,IAAA,2BAAc,GAAE,CAAC;IACvC,OAAO,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,SAAgB,YAAY,CAAC,MAAkB,EAAE,KAAc;IAC7D,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,IAAA,iBAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,WAAW,kBAAkB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,MAAM,CAAC,OAAO,EAAE,CAAC;AACnL,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { WorkingMemory } from '../types.js';
2
+ export declare function saveWorkingMemory(data: {
3
+ session_id: string;
4
+ files_touched: string[];
5
+ current_state: string;
6
+ next_steps: string[];
7
+ blockers: string[];
8
+ session_cost_usd: number;
9
+ session_duration_ms: number;
10
+ feature_context: string;
11
+ }): Promise<void>;
12
+ export declare function getRecentWorkingMemory(count?: number): Promise<WorkingMemory[]>;
13
+ export declare function getLastSession(): Promise<WorkingMemory | null>;
14
+ export declare function getWorkingMemoryCount(): Promise<number>;
15
+ export declare function clearWorkingMemory(): Promise<number>;
16
+ //# sourceMappingURL=working.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working.d.ts","sourceRoot":"","sources":["../../src/memory/working.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqChB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,aAAa,EAAE,CAAC,CAgB1B;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAGpE;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAQ7D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAU1D"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.saveWorkingMemory = saveWorkingMemory;
4
+ exports.getRecentWorkingMemory = getRecentWorkingMemory;
5
+ exports.getLastSession = getLastSession;
6
+ exports.getWorkingMemoryCount = getWorkingMemoryCount;
7
+ exports.clearWorkingMemory = clearWorkingMemory;
8
+ const client_js_1 = require("../atlas/client.js");
9
+ const embeddings_js_1 = require("../atlas/embeddings.js");
10
+ const project_id_js_1 = require("../project-id.js");
11
+ async function saveWorkingMemory(data) {
12
+ const collection = await (0, client_js_1.getCollection)();
13
+ const projectId = (0, project_id_js_1.getProjectId)();
14
+ const developerId = (0, project_id_js_1.getDeveloperId)();
15
+ const searchable_text = [
16
+ data.current_state,
17
+ ...data.next_steps,
18
+ ...data.blockers,
19
+ data.feature_context,
20
+ ]
21
+ .filter(Boolean)
22
+ .join(' ');
23
+ const now = new Date();
24
+ const embedding = await (0, embeddings_js_1.generateEmbedding)(searchable_text);
25
+ const doc = {
26
+ type: 'working',
27
+ project_id: projectId,
28
+ developer_id: developerId,
29
+ session_id: data.session_id,
30
+ session_date: now,
31
+ last_accessed: now,
32
+ files_touched: data.files_touched,
33
+ current_state: data.current_state,
34
+ next_steps: data.next_steps,
35
+ blockers: data.blockers,
36
+ session_cost_usd: data.session_cost_usd,
37
+ session_duration_ms: data.session_duration_ms,
38
+ feature_context: data.feature_context,
39
+ searchable_text,
40
+ embedding,
41
+ };
42
+ await collection.insertOne(doc);
43
+ }
44
+ async function getRecentWorkingMemory(count = 3) {
45
+ const collection = await (0, client_js_1.getCollection)();
46
+ const projectId = (0, project_id_js_1.getProjectId)();
47
+ const developerId = (0, project_id_js_1.getDeveloperId)();
48
+ const results = await collection
49
+ .find({
50
+ type: 'working',
51
+ project_id: projectId,
52
+ developer_id: developerId,
53
+ })
54
+ .sort({ session_date: -1, _id: -1 })
55
+ .limit(count)
56
+ .toArray();
57
+ return results;
58
+ }
59
+ async function getLastSession() {
60
+ const results = await getRecentWorkingMemory(1);
61
+ return results[0] || null;
62
+ }
63
+ async function getWorkingMemoryCount() {
64
+ const collection = await (0, client_js_1.getCollection)();
65
+ const projectId = (0, project_id_js_1.getProjectId)();
66
+ return collection.countDocuments({
67
+ type: 'working',
68
+ project_id: projectId,
69
+ });
70
+ }
71
+ async function clearWorkingMemory() {
72
+ const collection = await (0, client_js_1.getCollection)();
73
+ const projectId = (0, project_id_js_1.getProjectId)();
74
+ const result = await collection.deleteMany({
75
+ type: 'working',
76
+ project_id: projectId,
77
+ });
78
+ return result.deletedCount;
79
+ }
80
+ //# sourceMappingURL=working.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working.js","sourceRoot":"","sources":["../../src/memory/working.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ParsedIntent } from '../types.js';
2
+ export declare function detectIntent(prompt: string): ParsedIntent;
3
+ export declare function isActionPrompt(prompt: string): boolean;
4
+ //# sourceMappingURL=intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/natural-language/intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,aAAa,CAAC;AA8D9D,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAyGzD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAetD"}