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,11 @@
1
+ interface EditableItem {
2
+ index: number;
3
+ category: 'architecture' | 'patterns' | 'avoid' | 'open_threads' | 'commands';
4
+ value: string;
5
+ key?: string;
6
+ }
7
+ export declare function buildEditableList(): Promise<EditableItem[]>;
8
+ export declare function deleteItem(item: EditableItem): Promise<string>;
9
+ export declare function editItem(item: EditableItem, newValue: string): Promise<string>;
10
+ export {};
11
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/editor/tui.ts"],"names":[],"mappings":"AAiBA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CA6BjE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BpE;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildEditableList = buildEditableList;
4
+ exports.deleteItem = deleteItem;
5
+ exports.editItem = editItem;
6
+ const project_js_1 = require("../memory/project.js");
7
+ async function buildEditableList() {
8
+ const [architecture, patterns, avoid, openThreads, commands] = await Promise.all([
9
+ (0, project_js_1.getArchitectureDecisions)(),
10
+ (0, project_js_1.getPatterns)(),
11
+ (0, project_js_1.getAvoidRules)(),
12
+ (0, project_js_1.getOpenThreads)(),
13
+ (0, project_js_1.getAllCommands)(),
14
+ ]);
15
+ const items = [];
16
+ let idx = 1;
17
+ architecture.forEach((a) => items.push({ index: idx++, category: 'architecture', value: a }));
18
+ patterns.forEach((p) => items.push({ index: idx++, category: 'patterns', value: p }));
19
+ avoid.forEach((a) => items.push({ index: idx++, category: 'avoid', value: a }));
20
+ openThreads.forEach((t) => items.push({ index: idx++, category: 'open_threads', value: t.description, key: t.id }));
21
+ Object.entries(commands).forEach(([trigger, cmd]) => items.push({ index: idx++, category: 'commands', value: `${trigger}: ${cmd.description}`, key: trigger }));
22
+ return items;
23
+ }
24
+ async function deleteItem(item) {
25
+ switch (item.category) {
26
+ case 'architecture': {
27
+ await (0, project_js_1.removeArchitectureDecision)(item.value);
28
+ return `Deleted architecture: "${item.value}"`;
29
+ }
30
+ case 'patterns': {
31
+ await (0, project_js_1.removePattern)(item.value);
32
+ return `Deleted pattern: "${item.value}"`;
33
+ }
34
+ case 'avoid': {
35
+ await (0, project_js_1.removeAvoid)(item.value);
36
+ return `Deleted avoid: "${item.value}"`;
37
+ }
38
+ case 'open_threads': {
39
+ if (item.key) {
40
+ await (0, project_js_1.closeOpenThread)(item.key);
41
+ return `Closed thread: "${item.value}"`;
42
+ }
43
+ return 'Thread not found.';
44
+ }
45
+ case 'commands': {
46
+ if (item.key) {
47
+ await (0, project_js_1.removeCommand)(item.key);
48
+ return `Deleted command: "${item.key}"`;
49
+ }
50
+ return 'Command not found.';
51
+ }
52
+ }
53
+ }
54
+ async function editItem(item, newValue) {
55
+ switch (item.category) {
56
+ case 'architecture': {
57
+ await (0, project_js_1.removeArchitectureDecision)(item.value);
58
+ await (0, project_js_1.addArchitectureDecision)(newValue);
59
+ return `Updated architecture entry.`;
60
+ }
61
+ case 'patterns': {
62
+ await (0, project_js_1.removePattern)(item.value);
63
+ await (0, project_js_1.addPattern)(newValue);
64
+ return `Updated pattern.`;
65
+ }
66
+ case 'avoid': {
67
+ await (0, project_js_1.removeAvoid)(item.value);
68
+ await (0, project_js_1.addAvoid)(newValue);
69
+ return `Updated avoid rule.`;
70
+ }
71
+ default:
72
+ return 'Edit not supported for this item type via TUI. Use --file mode.';
73
+ }
74
+ }
75
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/editor/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * PostToolUse hook - fires after every tool call.
3
+ * Checks conversation content for memory-related intent and routes accordingly.
4
+ */
5
+ export declare function postToolUse(toolName: string, toolInput: string, toolOutput: string): Promise<string | null>;
6
+ /**
7
+ * Process explicit memory commands from the developer.
8
+ * Called when the developer types something that matches memory intent.
9
+ */
10
+ export declare function processMemoryCommand(prompt: string): Promise<string | null>;
11
+ //# sourceMappingURL=post-tool-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tool-use.d.ts","sourceRoot":"","sources":["../../src/hooks/post-tool-use.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBjF"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postToolUse = postToolUse;
4
+ exports.processMemoryCommand = processMemoryCommand;
5
+ const router_js_1 = require("../natural-language/router.js");
6
+ const intent_js_1 = require("../natural-language/intent.js");
7
+ /**
8
+ * PostToolUse hook - fires after every tool call.
9
+ * Checks conversation content for memory-related intent and routes accordingly.
10
+ */
11
+ async function postToolUse(toolName, toolInput, toolOutput) {
12
+ // Check tool input for explicit memory commands from the developer
13
+ if (toolInput) {
14
+ return processMemoryCommand(toolInput);
15
+ }
16
+ return null;
17
+ }
18
+ /**
19
+ * Process explicit memory commands from the developer.
20
+ * Called when the developer types something that matches memory intent.
21
+ */
22
+ async function processMemoryCommand(prompt) {
23
+ const intent = (0, intent_js_1.detectIntent)(prompt);
24
+ if (intent.intent === 'none') {
25
+ return null;
26
+ }
27
+ const result = await (0, router_js_1.routeIntent)(prompt);
28
+ if (!result.handled) {
29
+ return null;
30
+ }
31
+ if (result.needsConfirmation) {
32
+ return result.confirmationPrompt || null;
33
+ }
34
+ return result.response || null;
35
+ }
36
+ //# sourceMappingURL=post-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../src/hooks/post-tool-use.ts"],"names":[],"mappings":";;AAOA,kCAUC;AAMD,oDAkBC;AAzCD,6DAA4D;AAC5D,6DAA6D;AAE7D;;;GAGG;AACI,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,SAAiB,EACjB,UAAkB;IAElB,mEAAmE;IACnE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAW,EAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { CommandCache } from '../cache/command-cache.js';
2
+ export declare function initCommandCache(): Promise<void>;
3
+ export declare function getCommandCache(): CommandCache | null;
4
+ export declare function preToolUse(prompt: string): Promise<string | null>;
5
+ //# sourceMappingURL=pre-tool-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-tool-use.d.ts","sourceRoot":"","sources":["../../src/hooks/pre-tool-use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAazD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKtD;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkDvE"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initCommandCache = initCommandCache;
4
+ exports.getCommandCache = getCommandCache;
5
+ exports.preToolUse = preToolUse;
6
+ const command_cache_js_1 = require("../cache/command-cache.js");
7
+ const project_js_1 = require("../memory/project.js");
8
+ const project_js_2 = require("../memory/project.js");
9
+ const vector_js_1 = require("../atlas/vector.js");
10
+ const project_id_js_1 = require("../project-id.js");
11
+ const utils_js_1 = require("../utils.js");
12
+ const RELEVANCE_THRESHOLD = 0.70;
13
+ let commandCache = null;
14
+ let cacheLoaded = false;
15
+ async function initCommandCache() {
16
+ commandCache = new command_cache_js_1.CommandCache();
17
+ const commands = await (0, project_js_1.getAllCommands)();
18
+ commandCache.load(commands);
19
+ cacheLoaded = true;
20
+ }
21
+ function getCommandCache() {
22
+ return commandCache;
23
+ }
24
+ async function preToolUse(prompt) {
25
+ const projectId = (0, project_id_js_1.getProjectId)();
26
+ // Ensure cache is loaded
27
+ if (!cacheLoaded || !commandCache) {
28
+ try {
29
+ await initCommandCache();
30
+ }
31
+ catch {
32
+ // If DB unavailable, proceed silently
33
+ return null;
34
+ }
35
+ }
36
+ // Step 1: Command cache check (no DB call, under 1ms)
37
+ const matchedCommand = commandCache.match(prompt);
38
+ // Step 2: Semantic search on every prompt — Atlas is fast
39
+ let relevantMemory = [];
40
+ if (!matchedCommand) {
41
+ try {
42
+ const results = await (0, vector_js_1.search)(prompt, projectId, 3);
43
+ relevantMemory = results.filter((r) => r.score >= RELEVANCE_THRESHOLD);
44
+ }
45
+ catch {
46
+ // Semantic search unavailable — continue silently
47
+ }
48
+ }
49
+ // Step 3: Open thread relevance check
50
+ let relatedThreads = [];
51
+ try {
52
+ const allThreads = await (0, project_js_2.getOpenThreads)();
53
+ const promptLower = prompt.toLowerCase();
54
+ relatedThreads = allThreads.filter((thread) => {
55
+ const descLower = thread.description.toLowerCase();
56
+ const threadWords = descLower.split(/\s+/).filter((w) => w.length > 3);
57
+ const matchingWords = threadWords.filter((word) => promptLower.includes(word));
58
+ // Require 2+ word overlaps, or 1 long word (>6 chars) to reduce false positives
59
+ return matchingWords.length >= 2 || matchingWords.some((w) => w.length > 6);
60
+ });
61
+ }
62
+ catch {
63
+ // Thread check unavailable — continue silently
64
+ }
65
+ // Nothing found — do nothing
66
+ if (!matchedCommand && relevantMemory.length === 0 && relatedThreads.length === 0) {
67
+ return null;
68
+ }
69
+ // Build context injection
70
+ return buildContextInjection(matchedCommand, relevantMemory, relatedThreads);
71
+ }
72
+ function buildContextInjection(command, memory, threads) {
73
+ const sections = [];
74
+ sections.push('[MEMORY] Relevant context found:\n');
75
+ if (command) {
76
+ sections.push(`VERIFIED COMMAND -- ${command.triggers[0] || 'unnamed'} (confirmed ${command.verified_count}x)`);
77
+ command.steps.forEach((step, i) => {
78
+ sections.push(`${i + 1}. ${step}`);
79
+ });
80
+ if (command.notes) {
81
+ sections.push(`Notes: ${command.notes}`);
82
+ }
83
+ sections.push('');
84
+ }
85
+ if (memory.length > 0) {
86
+ sections.push('RELATED MEMORY');
87
+ for (const item of memory) {
88
+ sections.push(` [${item.type}] ${item.content.slice(0, 200)}`);
89
+ }
90
+ sections.push('');
91
+ }
92
+ if (threads.length > 0) {
93
+ sections.push('RELATED OPEN THREADS');
94
+ for (const thread of threads) {
95
+ sections.push(`! ${thread.description} -- ${thread.status} (${(0, utils_js_1.getAge)(thread.created)})`);
96
+ if (thread.context) {
97
+ sections.push(` "${thread.context}"`);
98
+ }
99
+ }
100
+ }
101
+ return sections.join('\n');
102
+ }
103
+ //# sourceMappingURL=pre-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../src/hooks/pre-tool-use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { StartupChoice } from '../types.js';
2
+ /**
3
+ * Startup hook - fires at session start.
4
+ *
5
+ * 1. Connects to Atlas
6
+ * 2. Loads command cache
7
+ * 3. Gathers startup data
8
+ * 4. Returns the startup banner
9
+ */
10
+ export declare function startup(): Promise<{
11
+ banner: string;
12
+ connected: boolean;
13
+ }>;
14
+ /**
15
+ * Handle the developer's startup choice and return appropriate context.
16
+ */
17
+ export declare function handleStartupChoice(choice: StartupChoice): Promise<string>;
18
+ /**
19
+ * Handle the feature search flow when developer chooses (f).
20
+ */
21
+ export declare function handleFeatureSearch(featureDescription: string): Promise<{
22
+ context: string;
23
+ searchResults: string;
24
+ }>;
25
+ //# sourceMappingURL=startup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../src/hooks/startup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAuBD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAUD"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startup = startup;
4
+ exports.handleStartupChoice = handleStartupChoice;
5
+ exports.handleFeatureSearch = handleFeatureSearch;
6
+ const client_js_1 = require("../atlas/client.js");
7
+ const pre_tool_use_js_1 = require("./pre-tool-use.js");
8
+ const conversation_js_1 = require("../startup/conversation.js");
9
+ const injector_js_1 = require("../startup/injector.js");
10
+ const feature_search_js_1 = require("../startup/feature-search.js");
11
+ const config_js_1 = require("../config.js");
12
+ const cleanup_js_1 = require("../cleanup.js");
13
+ /**
14
+ * Startup hook - fires at session start.
15
+ *
16
+ * 1. Connects to Atlas
17
+ * 2. Loads command cache
18
+ * 3. Gathers startup data
19
+ * 4. Returns the startup banner
20
+ */
21
+ async function startup() {
22
+ if (!(0, config_js_1.isConfigured)()) {
23
+ return {
24
+ banner: '[MEMORY] Not configured. Run "claude-memory init" to set up.',
25
+ connected: false,
26
+ };
27
+ }
28
+ try {
29
+ await (0, client_js_1.connect)();
30
+ await (0, cleanup_js_1.cleanupExpiredMemory)().catch(() => { }); // Best-effort TTL cleanup
31
+ await (0, pre_tool_use_js_1.initCommandCache)();
32
+ const data = await (0, conversation_js_1.gatherStartupData)();
33
+ const banner = (0, conversation_js_1.formatStartupBanner)(data);
34
+ return { banner, connected: true };
35
+ }
36
+ catch (err) {
37
+ return {
38
+ banner: `[MEMORY] Could not connect to Atlas. Session continues without memory.\nError: ${err instanceof Error ? err.message : String(err)}`,
39
+ connected: false,
40
+ };
41
+ }
42
+ }
43
+ /**
44
+ * Handle the developer's startup choice and return appropriate context.
45
+ */
46
+ async function handleStartupChoice(choice) {
47
+ return (0, injector_js_1.buildContextForChoice)(choice);
48
+ }
49
+ /**
50
+ * Handle the feature search flow when developer chooses (f).
51
+ */
52
+ async function handleFeatureSearch(featureDescription) {
53
+ const [context, results] = await Promise.all([
54
+ (0, injector_js_1.buildFeatureContext)(featureDescription),
55
+ (0, feature_search_js_1.searchFeatureHistory)(featureDescription),
56
+ ]);
57
+ return {
58
+ context,
59
+ searchResults: (0, feature_search_js_1.formatFeatureSearchResults)(results),
60
+ };
61
+ }
62
+ //# sourceMappingURL=startup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../src/hooks/startup.ts"],"names":[],"mappings":";;AAiBA,0BA0BC;AAKD,kDAEC;AAKD,kDAaC;AApED,kDAA6C;AAC7C,uDAAqD;AACrD,gEAAoF;AACpF,wDAAoF;AACpF,oEAAgG;AAChG,4CAA4C;AAC5C,8CAAqD;AAGrD;;;;;;;GAOG;AACI,KAAK,UAAU,OAAO;IAI3B,IAAI,CAAC,IAAA,wBAAY,GAAE,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,8DAA8D;YACtE,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAA,mBAAO,GAAE,CAAC;QAChB,MAAM,IAAA,iCAAoB,GAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,0BAA0B;QACxE,MAAM,IAAA,kCAAgB,GAAE,CAAC;QAEzB,MAAM,IAAI,GAAG,MAAM,IAAA,mCAAiB,GAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAA,qCAAmB,EAAC,IAAI,CAAC,CAAC;QAEzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,kFAAkF,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC5I,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CAAC,MAAqB;IAC7D,OAAO,IAAA,mCAAqB,EAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CAAC,kBAA0B;IAIlE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,IAAA,iCAAmB,EAAC,kBAAkB,CAAC;QACvC,IAAA,wCAAoB,EAAC,kBAAkB,CAAC;KACzC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,aAAa,EAAE,IAAA,8CAA0B,EAAC,OAAO,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { SummaryItem } from '../types.js';
2
+ interface SessionEndData {
3
+ files_touched: string[];
4
+ current_state: string;
5
+ next_steps: string[];
6
+ blockers: string[];
7
+ session_cost_usd: number;
8
+ session_duration_ms: number;
9
+ feature_context: string;
10
+ }
11
+ /**
12
+ * Stop hook - fires at session end.
13
+ *
14
+ * Phase 1: Saves working memory automatically (no prompt).
15
+ * Phase 2: Returns the summarization prompt for Claude to process.
16
+ *
17
+ * Returns a structured response that the CLI handler uses to:
18
+ * 1. Save working memory
19
+ * 2. Show the acknowledgement prompt
20
+ * 3. Process the developer's choice
21
+ */
22
+ export declare function sessionEnd(data: SessionEndData): Promise<{
23
+ workingSaved: boolean;
24
+ summarizationPrompt: string;
25
+ }>;
26
+ /**
27
+ * Process Claude's summary response and show acknowledgement to developer.
28
+ */
29
+ export declare function processSummaryResponse(response: string): Promise<{
30
+ items: SummaryItem[];
31
+ formatted: string;
32
+ prompt: string;
33
+ }>;
34
+ /**
35
+ * Handle developer's acknowledgement choice.
36
+ */
37
+ export declare function handleAcknowledgement(choice: 'a' | 'r' | 's', items: SummaryItem[], individualChoices?: boolean[]): Promise<string>;
38
+ export {};
39
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,UAAU,cAAc;IACtB,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;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC;IAC9D,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC,CAmCD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAMD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACvB,KAAK,EAAE,WAAW,EAAE,EACpB,iBAAiB,CAAC,EAAE,OAAO,EAAE,GAC5B,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sessionEnd = sessionEnd;
4
+ exports.processSummaryResponse = processSummaryResponse;
5
+ exports.handleAcknowledgement = handleAcknowledgement;
6
+ const uuid_1 = require("uuid");
7
+ const working_js_1 = require("../memory/working.js");
8
+ const project_js_1 = require("../memory/project.js");
9
+ const developer_js_1 = require("../memory/developer.js");
10
+ const summarizer_js_1 = require("../summarizer.js");
11
+ const acknowledgement_js_1 = require("../acknowledgement.js");
12
+ const detector_js_1 = require("../detector.js");
13
+ /**
14
+ * Stop hook - fires at session end.
15
+ *
16
+ * Phase 1: Saves working memory automatically (no prompt).
17
+ * Phase 2: Returns the summarization prompt for Claude to process.
18
+ *
19
+ * Returns a structured response that the CLI handler uses to:
20
+ * 1. Save working memory
21
+ * 2. Show the acknowledgement prompt
22
+ * 3. Process the developer's choice
23
+ */
24
+ async function sessionEnd(data) {
25
+ const sessionId = (0, uuid_1.v4)();
26
+ // Phase 1: Always save working memory automatically
27
+ let workingSaved = false;
28
+ try {
29
+ await (0, working_js_1.saveWorkingMemory)({
30
+ session_id: sessionId,
31
+ ...data,
32
+ });
33
+ workingSaved = true;
34
+ // Increment session counters
35
+ await Promise.all([
36
+ (0, project_js_1.incrementSession)(data.session_cost_usd),
37
+ (0, developer_js_1.incrementDeveloperSession)(data.session_cost_usd),
38
+ ]);
39
+ }
40
+ catch (err) {
41
+ // Working memory write failed — continue silently
42
+ console.error('[MEMORY] Failed to save working memory:', err);
43
+ }
44
+ // Phase 2: Build session context for summarization
45
+ const recentSessions = await (0, working_js_1.getRecentWorkingMemory)(3).catch(() => []);
46
+ const sessionContext = [
47
+ `Feature: ${data.feature_context}`,
48
+ `State: ${data.current_state}`,
49
+ `Files: ${data.files_touched.join(', ')}`,
50
+ `Next steps: ${data.next_steps.join(', ')}`,
51
+ `Blockers: ${data.blockers.join(', ')}`,
52
+ ].join('\n');
53
+ const summarizationPrompt = (0, summarizer_js_1.buildSummarizationPrompt)(sessionContext);
54
+ return { workingSaved, summarizationPrompt };
55
+ }
56
+ /**
57
+ * Process Claude's summary response and show acknowledgement to developer.
58
+ */
59
+ async function processSummaryResponse(response) {
60
+ const items = (0, summarizer_js_1.parseSummaryResponse)(response);
61
+ const formatted = (0, summarizer_js_1.formatSummaryForReview)(items);
62
+ const prompt = (0, acknowledgement_js_1.buildAcknowledgementPrompt)(items, formatted);
63
+ return { items, formatted, prompt };
64
+ }
65
+ /**
66
+ * Handle developer's acknowledgement choice.
67
+ */
68
+ async function handleAcknowledgement(choice, items, individualChoices) {
69
+ switch (choice) {
70
+ case 'a': {
71
+ const saved = await (0, acknowledgement_js_1.saveAllSummaryItems)(items);
72
+ const patternDetections = await (0, detector_js_1.detectDeveloperPatterns)().catch(() => []);
73
+ let response = `[MEMORY] ${saved} items saved to memory.`;
74
+ if (patternDetections.length > 0) {
75
+ response += '\n\nDEVELOPER PATTERN DETECTED\n';
76
+ for (const p of patternDetections) {
77
+ response += `- ${p.description} (${p.occurrences}x across ${p.sessions} sessions)\n`;
78
+ }
79
+ response += '\nAdd to Developer Memory? (y/n)';
80
+ }
81
+ return response;
82
+ }
83
+ case 'r': {
84
+ if (individualChoices) {
85
+ let saved = 0;
86
+ for (let i = 0; i < items.length; i++) {
87
+ if (individualChoices[i]) {
88
+ await (0, acknowledgement_js_1.saveSummaryItem)(items[i]);
89
+ saved++;
90
+ }
91
+ }
92
+ return `[MEMORY] ${saved} items saved to memory.`;
93
+ }
94
+ return 'Review mode: approve each item individually.';
95
+ }
96
+ case 's':
97
+ return '[MEMORY] All items skipped. Working memory was still saved.';
98
+ default:
99
+ return '[MEMORY] Unknown choice. Working memory was still saved.';
100
+ }
101
+ }
102
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export { loadConfig, saveConfig, getAtlasUri, isConfigured, getMemoryTtlDays } from './config.js';
2
+ export { cleanupExpiredMemory } from './cleanup.js';
3
+ export { getProjectId, getDeveloperId, getProjectName, getGitRemote } from './project-id.js';
4
+ export type * from './types.js';
5
+ export { connect, disconnect, testConnection } from './atlas/client.js';
6
+ export { createIndexes, createVectorSearchIndex } from './atlas/indexes.js';
7
+ export { search } from './atlas/vector.js';
8
+ export { generateEmbedding, EMBEDDING_DIMENSIONS } from './atlas/embeddings.js';
9
+ export { saveWorkingMemory, getRecentWorkingMemory, getLastSession, getWorkingMemoryCount, clearWorkingMemory, } from './memory/working.js';
10
+ export { getProjectMeta, ensureProjectMeta, getArchitectureDecisions, getPatterns, getAvoidRules, addArchitectureDecision, removeArchitectureDecision, addPattern, removePattern, addAvoid, removeAvoid, incrementSession, saveCommand, removeCommand, getAllCommands, addOpenThread, closeOpenThread, updateOpenThreadStatus, getOpenThreads, clearAllMemory, } from './memory/project.js';
11
+ export { getDeveloperMeta, ensureDeveloperMeta, getPreferences, getStyles, getDefaults, getDevAvoidRules, addPreference, addStyle, addDefault, addDeveloperAvoid, incrementDeveloperSession, removePreference, removeStyle, removeDefault, removeDevAvoid, } from './memory/developer.js';
12
+ export { storeCommand, getCommand, deleteCommand, listCommands, verifyCommand, } from './memory/commands.js';
13
+ export { createThread, resolveThread, deferThread, watchThread, listThreads, findThreadByDescription, findThreadByIndex, formatThread, } from './memory/threads.js';
14
+ export { preToolUse, initCommandCache, getCommandCache } from './hooks/pre-tool-use.js';
15
+ export { postToolUse, processMemoryCommand } from './hooks/post-tool-use.js';
16
+ export { sessionEnd, processSummaryResponse, handleAcknowledgement } from './hooks/stop.js';
17
+ export { startup, handleStartupChoice, handleFeatureSearch } from './hooks/startup.js';
18
+ export { gatherStartupData, formatStartupBanner } from './startup/conversation.js';
19
+ export { buildContextForChoice, buildFeatureContext } from './startup/injector.js';
20
+ export { searchFeatureHistory, formatFeatureSearchResults } from './startup/feature-search.js';
21
+ export { detectIntent, isActionPrompt } from './natural-language/intent.js';
22
+ export { extractTriggerWord, extractThreadReference, extractDescription, containsSecret } from './natural-language/parser.js';
23
+ export { routeIntent } from './natural-language/router.js';
24
+ export { CommandCache } from './cache/command-cache.js';
25
+ export { buildSummarizationPrompt, parseSummaryResponse, formatSummaryForReview } from './summarizer.js';
26
+ export { saveSummaryItem, saveAllSummaryItems, buildAcknowledgementPrompt } from './acknowledgement.js';
27
+ export { getAge } from './utils.js';
28
+ export { detectDeveloperPatterns, detectContradiction, formatContradiction } from './detector.js';
29
+ export { memoryCommand, memoryCommandsCommand } from './slash-commands/memory.js';
30
+ export { recallCommand } from './slash-commands/recall.js';
31
+ export { rememberCommand } from './slash-commands/remember.js';
32
+ export { threadsCommand, addThreadCommand, closeThreadCommand } from './slash-commands/threads.js';
33
+ export { statsCommand } from './slash-commands/stats.js';
34
+ export { editFileMode, editTuiMode } from './slash-commands/edit.js';
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}