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,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectIntent = detectIntent;
4
+ exports.isActionPrompt = isActionPrompt;
5
+ const STORE_COMMAND_PATTERNS = [
6
+ /store\s+(that|this|it)\s*(as\s+|to\s+)?(\w+)?/i,
7
+ /save\s+(that|this|it)\s+to\s+memory/i,
8
+ /remember\s+(exactly\s+)?what\s+you\s+(just\s+)?did/i,
9
+ /store\s+(that|this)\s+workflow/i,
10
+ /tag\s+(it|this)\s+as\s+(\w+)/i,
11
+ /save\s+this\s+as\s+(\w+)/i,
12
+ /that.*was\s+perfect.*store\s+(it|that)/i,
13
+ /store\s+it/i,
14
+ ];
15
+ const STORE_DECISION_PATTERNS = [
16
+ /remember\s+that[\.\s]/i,
17
+ /always\s+use\s+this\s+pattern/i,
18
+ /store\s+this\s+decision/i,
19
+ /add\s+this\s+to\s+memory/i,
20
+ /save\s+to\s+project\s+memory/i,
21
+ ];
22
+ const DEVELOPER_PREF_PATTERNS = [
23
+ /remember\s+this\s+across\s+all\s+projects/i,
24
+ /save\s+to\s+my\s+preferences/i,
25
+ /i\s+(always|never)\s+want/i,
26
+ /i\s+(always|never)\s+use/i,
27
+ /add\s+to\s+developer\s+memory/i,
28
+ ];
29
+ const CREATE_THREAD_PATTERNS = [
30
+ /add\s+(this\s+)?to\s+open\s+threads/i,
31
+ /flag\s+(this|it)\s+as\s+unresolved/i,
32
+ /^open\s+thread[\s:]/i,
33
+ /come\s+back\s+to\s+(this|it)/i,
34
+ ];
35
+ const CLOSE_THREAD_PATTERNS = [
36
+ /close\s+(the\s+)?(\w+)\s+thread/i,
37
+ /mark\s+(the\s+)?.*thread\s+as\s+done/i,
38
+ /resolve\s+(open\s+)?thread/i,
39
+ /that.*thread.*resolved/i,
40
+ ];
41
+ const FORGET_PATTERNS = [
42
+ /forget\s+(the\s+)?(old\s+)?/i,
43
+ /remove\s+(that|this|it)\s+from\s+memory/i,
44
+ /delete\s+(that|this|it)\s+from\s+memory/i,
45
+ /that.*is\s+wrong.*delete\s+(it|that)/i,
46
+ ];
47
+ const RECALL_PATTERNS = [
48
+ /what\s+do\s+(you|we)\s+know\s+about/i,
49
+ /recall\s+/i,
50
+ /what\s+did\s+we\s+decide\s+about/i,
51
+ /what's\s+in\s+memory\s+(about|for)/i,
52
+ ];
53
+ // Only matches explicit /remember slash command
54
+ const REMEMBER_PATTERNS = [
55
+ /^\/remember\s+/i,
56
+ ];
57
+ function detectIntent(prompt) {
58
+ const trimmed = prompt.trim();
59
+ // Check explicit /remember command first
60
+ for (const pattern of REMEMBER_PATTERNS) {
61
+ const match = trimmed.match(pattern);
62
+ if (match) {
63
+ return {
64
+ intent: 'remember',
65
+ content: trimmed.replace(pattern, '').trim(),
66
+ };
67
+ }
68
+ }
69
+ // Store command — specific workflow storage phrases
70
+ for (const pattern of STORE_COMMAND_PATTERNS) {
71
+ const match = trimmed.match(pattern);
72
+ if (match) {
73
+ // "store this decision" should NOT match store_command — check for decision keywords
74
+ if (/store\s+this\s+decision/i.test(trimmed))
75
+ break;
76
+ const trigger = match[3] || match[2] || '';
77
+ return {
78
+ intent: 'store_command',
79
+ content: trimmed,
80
+ trigger: trigger.toLowerCase(),
81
+ };
82
+ }
83
+ }
84
+ // Developer preference — check before general store_decision
85
+ for (const pattern of DEVELOPER_PREF_PATTERNS) {
86
+ if (pattern.test(trimmed)) {
87
+ return {
88
+ intent: 'store_developer_pref',
89
+ content: trimmed,
90
+ };
91
+ }
92
+ }
93
+ // Store decision
94
+ for (const pattern of STORE_DECISION_PATTERNS) {
95
+ if (pattern.test(trimmed)) {
96
+ return {
97
+ intent: 'store_decision',
98
+ content: trimmed,
99
+ };
100
+ }
101
+ }
102
+ // Close thread — check BEFORE create thread so "resolve open thread" is caught
103
+ for (const pattern of CLOSE_THREAD_PATTERNS) {
104
+ const match = trimmed.match(pattern);
105
+ if (match) {
106
+ return {
107
+ intent: 'close_thread',
108
+ content: trimmed,
109
+ threadId: match[2] || '',
110
+ };
111
+ }
112
+ }
113
+ // Create thread
114
+ for (const pattern of CREATE_THREAD_PATTERNS) {
115
+ if (pattern.test(trimmed)) {
116
+ const content = trimmed
117
+ .replace(pattern, '')
118
+ .replace(/^[\s\-:]+/, '')
119
+ .trim();
120
+ return {
121
+ intent: 'create_thread',
122
+ content: content || trimmed,
123
+ };
124
+ }
125
+ }
126
+ // Forget
127
+ for (const pattern of FORGET_PATTERNS) {
128
+ if (pattern.test(trimmed)) {
129
+ return {
130
+ intent: 'forget',
131
+ content: trimmed,
132
+ };
133
+ }
134
+ }
135
+ // Recall
136
+ for (const pattern of RECALL_PATTERNS) {
137
+ if (pattern.test(trimmed)) {
138
+ const content = trimmed.replace(pattern, '').trim();
139
+ return {
140
+ intent: 'recall',
141
+ content,
142
+ };
143
+ }
144
+ }
145
+ // Bare "remember X" — general storage (last resort before none)
146
+ if (/^remember\s+/i.test(trimmed)) {
147
+ return {
148
+ intent: 'remember',
149
+ content: trimmed.replace(/^remember\s+/i, '').trim(),
150
+ };
151
+ }
152
+ return { intent: 'none', content: trimmed };
153
+ }
154
+ function isActionPrompt(prompt) {
155
+ // Prompts that describe an ACTION are candidates for memory injection
156
+ // Prompts that ask to UNDERSTAND/EXPLAIN are not
157
+ const understandPatterns = [
158
+ /^(what|how|why|where|when|who)\s+(does|is|are|was|were|do|did|can|could|would|should)/i,
159
+ /^explain\s+/i,
160
+ /^describe\s+/i,
161
+ /^show\s+me\s+(the|this|that)\s+(code|function|file|class)/i,
162
+ ];
163
+ for (const pattern of understandPatterns) {
164
+ if (pattern.test(prompt.trim()))
165
+ return false;
166
+ }
167
+ return true;
168
+ }
169
+ //# sourceMappingURL=intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/natural-language/intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function extractTriggerWord(prompt: string): string | null;
2
+ export declare function extractThreadReference(prompt: string): string | null;
3
+ export declare function extractDescription(prompt: string): string;
4
+ export declare function containsSecret(text: string): boolean;
5
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/natural-language/parser.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAchE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUpE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAoBpD"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractTriggerWord = extractTriggerWord;
4
+ exports.extractThreadReference = extractThreadReference;
5
+ exports.extractDescription = extractDescription;
6
+ exports.containsSecret = containsSecret;
7
+ function extractTriggerWord(prompt) {
8
+ // "tag it as deploy" -> "deploy"
9
+ const tagMatch = prompt.match(/tag\s+(?:it|this)\s+as\s+["']?(\w+)["']?/i);
10
+ if (tagMatch)
11
+ return tagMatch[1].toLowerCase();
12
+ // "save this as rollback" -> "rollback"
13
+ const saveAsMatch = prompt.match(/save\s+(?:this|that|it)\s+as\s+["']?(\w+)["']?/i);
14
+ if (saveAsMatch)
15
+ return saveAsMatch[1].toLowerCase();
16
+ // "I want this every time I say deploy" -> "deploy"
17
+ const sayMatch = prompt.match(/(?:every\s+time|whenever)\s+I\s+say\s+["']?(\w+)["']?/i);
18
+ if (sayMatch)
19
+ return sayMatch[1].toLowerCase();
20
+ return null;
21
+ }
22
+ function extractThreadReference(prompt) {
23
+ // "resolve open thread 2" -> "2" (check numbered reference first)
24
+ const numMatch = prompt.match(/(?:close|resolve)\s+(?:open\s+)?thread\s+(\d+)/i);
25
+ if (numMatch)
26
+ return numMatch[1];
27
+ // "close the INTERSECT thread" -> "INTERSECT"
28
+ const closeMatch = prompt.match(/(?:close|resolve|mark)\s+(?:the\s+)?["']?([^"'\s]+)["']?\s+thread/i);
29
+ if (closeMatch)
30
+ return closeMatch[1];
31
+ return null;
32
+ }
33
+ function extractDescription(prompt) {
34
+ // Strip common prefixes to get the core content
35
+ return prompt
36
+ .replace(/^(add\s+(?:this\s+)?to\s+open\s+threads\s*[-:]*\s*)/i, '')
37
+ .replace(/^(flag\s+(?:this|it)\s+as\s+unresolved\s*[-:]*\s*)/i, '')
38
+ .replace(/^(open\s+thread\s*[-:]*\s*)/i, '')
39
+ .replace(/^(remember\s+(?:that\s+)?)/i, '')
40
+ .replace(/^(store\s+(?:this|that)\s+(?:decision|to\s+(?:project\s+)?memory)\s*[-:]*\s*)/i, '')
41
+ .trim();
42
+ }
43
+ function containsSecret(text) {
44
+ const secretPatterns = [
45
+ /(?:api[_-]?key|token|secret|password|credential|auth)\s*[:=]\s*\S+/i,
46
+ /(?:bearer|basic)\s+[A-Za-z0-9+/=._-]{20,}/i,
47
+ /ghp_[A-Za-z0-9]{36}/, // GitHub PAT
48
+ /github_pat_[A-Za-z0-9_]{80,}/, // GitHub fine-grained PAT
49
+ /sk-[A-Za-z0-9]{20,}/, // OpenAI key
50
+ /mongodb\+srv:\/\/[^:]+:[^@]+@/, // MongoDB URI with creds
51
+ /-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY/, // Private keys
52
+ /AKIA[0-9A-Z]{16}/, // AWS access key
53
+ /xox[bpras]-[A-Za-z0-9-]{10,}/, // Slack tokens
54
+ /sk_live_[A-Za-z0-9]{20,}/, // Stripe secret key
55
+ /pk_live_[A-Za-z0-9]{20,}/, // Stripe publishable key
56
+ /glpat-[A-Za-z0-9_-]{20,}/, // GitLab PAT
57
+ /eyJ[A-Za-z0-9_-]{20,}\.eyJ[A-Za-z0-9_-]{20,}/, // JWT tokens
58
+ /SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}/, // SendGrid API key
59
+ /npm_[A-Za-z0-9]{36}/, // npm token
60
+ ];
61
+ return secretPatterns.some((p) => p.test(text));
62
+ }
63
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/natural-language/parser.ts"],"names":[],"mappings":";;AAAA,gDAcC;AAED,wDAUC;AAED,gDASC;AAED,wCAoBC;AA3DD,SAAgB,kBAAkB,CAAC,MAAc;IAC/C,iCAAiC;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC3E,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAE/C,wCAAwC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACpF,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAErD,oDAAoD;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IACxF,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAE/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,sBAAsB,CAAC,MAAc;IACnD,kEAAkE;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACjF,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,8CAA8C;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACtG,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAErC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAc;IAC/C,gDAAgD;IAChD,OAAO,MAAM;SACV,OAAO,CAAC,sDAAsD,EAAE,EAAE,CAAC;SACnE,OAAO,CAAC,qDAAqD,EAAE,EAAE,CAAC;SAClE,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC;SAC3C,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;SAC1C,OAAO,CAAC,gFAAgF,EAAE,EAAE,CAAC;SAC7F,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,MAAM,cAAc,GAAG;QACrB,qEAAqE;QACrE,4CAA4C;QAC5C,qBAAqB,EAA2B,aAAa;QAC7D,8BAA8B,EAAmB,0BAA0B;QAC3E,qBAAqB,EAA4B,aAAa;QAC9D,+BAA+B,EAAkB,yBAAyB;QAC1E,uCAAuC,EAAU,eAAe;QAChE,kBAAkB,EAA+B,iBAAiB;QAClE,8BAA8B,EAAmB,eAAe;QAChE,0BAA0B,EAAuB,oBAAoB;QACrE,0BAA0B,EAAuB,yBAAyB;QAC1E,0BAA0B,EAAuB,aAAa;QAC9D,8CAA8C,EAAE,aAAa;QAC7D,0CAA0C,EAAM,mBAAmB;QACnE,qBAAqB,EAA4B,YAAY;KAC9D,CAAC;IAEF,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface RouteResult {
2
+ handled: boolean;
3
+ response?: string;
4
+ needsConfirmation?: boolean;
5
+ confirmationPrompt?: string;
6
+ pendingAction?: () => Promise<string>;
7
+ }
8
+ export declare function routeIntent(prompt: string): Promise<RouteResult>;
9
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/natural-language/router.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAwBtE"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.routeIntent = routeIntent;
4
+ const intent_js_1 = require("./intent.js");
5
+ const parser_js_1 = require("./parser.js");
6
+ const threads_js_1 = require("../memory/threads.js");
7
+ const project_js_1 = require("../memory/project.js");
8
+ const developer_js_1 = require("../memory/developer.js");
9
+ const vector_js_1 = require("../atlas/vector.js");
10
+ const project_id_js_1 = require("../project-id.js");
11
+ async function routeIntent(prompt) {
12
+ const parsed = (0, intent_js_1.detectIntent)(prompt);
13
+ switch (parsed.intent) {
14
+ case 'store_command':
15
+ return handleStoreCommand(parsed);
16
+ case 'store_decision':
17
+ return handleStoreDecision(parsed);
18
+ case 'store_developer_pref':
19
+ return handleStoreDeveloperPref(parsed);
20
+ case 'create_thread':
21
+ return handleCreateThread(parsed);
22
+ case 'close_thread':
23
+ return handleCloseThread(parsed);
24
+ case 'forget':
25
+ return handleForget(parsed);
26
+ case 'recall':
27
+ return handleRecall(parsed);
28
+ case 'remember':
29
+ return handleRemember(parsed);
30
+ case 'none':
31
+ default:
32
+ return { handled: false };
33
+ }
34
+ }
35
+ async function handleStoreCommand(parsed) {
36
+ return {
37
+ handled: true,
38
+ response: `[MEMORY] Ready to store command. Claude will capture the workflow steps and ask for trigger word and notes.`,
39
+ };
40
+ }
41
+ async function handleStoreDecision(parsed) {
42
+ const content = (0, parser_js_1.extractDescription)(parsed.content);
43
+ if ((0, parser_js_1.containsSecret)(content)) {
44
+ return {
45
+ handled: true,
46
+ response: `[MEMORY] WARNING: Content appears to contain a credential or token. Never store secrets in memory. Please redact before saving.`,
47
+ };
48
+ }
49
+ await (0, project_js_1.addArchitectureDecision)(content);
50
+ return {
51
+ handled: true,
52
+ response: `[MEMORY] Decision stored to project memory:\n"${content}"`,
53
+ };
54
+ }
55
+ async function handleStoreDeveloperPref(parsed) {
56
+ const content = (0, parser_js_1.extractDescription)(parsed.content);
57
+ await (0, developer_js_1.addPreference)(content);
58
+ return {
59
+ handled: true,
60
+ response: `[MEMORY] Developer preference stored (applies across all projects):\n"${content}"`,
61
+ };
62
+ }
63
+ async function handleCreateThread(parsed) {
64
+ const description = (0, parser_js_1.extractDescription)(parsed.content);
65
+ const thread = await (0, threads_js_1.createThread)(description, 'Flagged during session');
66
+ return {
67
+ handled: true,
68
+ response: `[MEMORY] Open thread created:\n! ${thread.description} (${thread.status})\n ID: ${thread.id.slice(0, 8)}`,
69
+ };
70
+ }
71
+ async function handleCloseThread(parsed) {
72
+ const ref = (0, parser_js_1.extractThreadReference)(parsed.content);
73
+ if (!ref) {
74
+ return {
75
+ handled: true,
76
+ response: '[MEMORY] Which thread should be closed? Specify by name or number.',
77
+ };
78
+ }
79
+ // Try by index
80
+ const num = parseInt(ref, 10);
81
+ let found = !isNaN(num) ? await (0, threads_js_1.findThreadByIndex)(num) : null;
82
+ // Try by description
83
+ if (!found) {
84
+ found = await (0, threads_js_1.findThreadByDescription)(ref);
85
+ }
86
+ if (!found) {
87
+ return {
88
+ handled: true,
89
+ response: `[MEMORY] No open thread found matching "${ref}".`,
90
+ };
91
+ }
92
+ return {
93
+ handled: true,
94
+ needsConfirmation: true,
95
+ confirmationPrompt: `[MEMORY] Close thread: "${found.description}"?\nThis cannot be undone. (y/n)`,
96
+ pendingAction: async () => {
97
+ await (0, threads_js_1.resolveThread)(found.id);
98
+ return `[MEMORY] Thread closed: "${found.description}"`;
99
+ },
100
+ };
101
+ }
102
+ async function handleForget(parsed) {
103
+ return {
104
+ handled: true,
105
+ needsConfirmation: true,
106
+ confirmationPrompt: `[MEMORY] What would you like to forget? Please specify the exact item.\nThis cannot be undone.`,
107
+ };
108
+ }
109
+ async function handleRecall(parsed) {
110
+ const topic = parsed.content;
111
+ if (!topic) {
112
+ return {
113
+ handled: true,
114
+ response: '[MEMORY] What topic would you like to recall?',
115
+ };
116
+ }
117
+ const projectId = (0, project_id_js_1.getProjectId)();
118
+ const results = await (0, vector_js_1.search)(topic, projectId, 5);
119
+ if (results.length === 0) {
120
+ return {
121
+ handled: true,
122
+ response: `[MEMORY] No memory found for "${topic}".`,
123
+ };
124
+ }
125
+ const formatted = results
126
+ .map((r) => ` [${r.type}] ${r.content.slice(0, 200)}`)
127
+ .join('\n');
128
+ return {
129
+ handled: true,
130
+ response: `=== MEMORY RECALL: ${topic} ===\n\n${formatted}`,
131
+ };
132
+ }
133
+ async function handleRemember(parsed) {
134
+ const content = parsed.content;
135
+ if ((0, parser_js_1.containsSecret)(content)) {
136
+ return {
137
+ handled: true,
138
+ response: `[MEMORY] WARNING: Content appears to contain a credential or token. Never store secrets in memory.`,
139
+ };
140
+ }
141
+ // Classify content by keywords to store in the appropriate category
142
+ const lower = content.toLowerCase();
143
+ if (/\b(never|don't|do not|avoid|stop)\b/.test(lower)) {
144
+ await (0, project_js_1.addAvoid)(content);
145
+ return {
146
+ handled: true,
147
+ response: `[MEMORY] Stored to project avoid rules:\n"${content}"`,
148
+ };
149
+ }
150
+ if (/\b(always use|pattern|convention|approach)\b/.test(lower)) {
151
+ await (0, project_js_1.addPattern)(content);
152
+ return {
153
+ handled: true,
154
+ response: `[MEMORY] Stored to project patterns:\n"${content}"`,
155
+ };
156
+ }
157
+ if (/\b(architecture|design|structure|database|schema|stack)\b/.test(lower)) {
158
+ await (0, project_js_1.addArchitectureDecision)(content);
159
+ return {
160
+ handled: true,
161
+ response: `[MEMORY] Stored to project architecture:\n"${content}"`,
162
+ };
163
+ }
164
+ // Default: store as architecture decision (general project knowledge)
165
+ await (0, project_js_1.addArchitectureDecision)(content);
166
+ return {
167
+ handled: true,
168
+ response: `[MEMORY] Stored to project memory:\n"${content}"`,
169
+ };
170
+ }
171
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/natural-language/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getGitRemote(): string | null;
2
+ export declare function getProjectName(): string;
3
+ export declare function getProjectId(): string;
4
+ export declare function getDeveloperId(): string;
5
+ //# sourceMappingURL=project-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-id.d.ts","sourceRoot":"","sources":["../src/project-id.ts"],"names":[],"mappings":"AASA,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAQ5C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAOrC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getGitRemote = getGitRemote;
37
+ exports.getProjectName = getProjectName;
38
+ exports.getProjectId = getProjectId;
39
+ exports.getDeveloperId = getDeveloperId;
40
+ const node_child_process_1 = require("node:child_process");
41
+ const crypto = __importStar(require("node:crypto"));
42
+ const os = __importStar(require("node:os"));
43
+ const path = __importStar(require("node:path"));
44
+ function hash(input) {
45
+ return crypto.createHash('sha256').update(input).digest('hex').slice(0, 16);
46
+ }
47
+ function getGitRemote() {
48
+ try {
49
+ return (0, node_child_process_1.execSync)('git remote get-url origin', { stdio: ['pipe', 'pipe', 'pipe'] })
50
+ .toString()
51
+ .trim();
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ function getProjectName() {
58
+ const remote = getGitRemote();
59
+ if (remote) {
60
+ // Extract repo name from URL: git@github.com:user/repo.git -> repo
61
+ const match = remote.match(/\/([^/]+?)(?:\.git)?$/);
62
+ if (match)
63
+ return match[1];
64
+ }
65
+ return path.basename(process.cwd());
66
+ }
67
+ function getProjectId() {
68
+ const remote = getGitRemote();
69
+ if (remote) {
70
+ return hash(remote);
71
+ }
72
+ // Fallback: directory name + hostname
73
+ return hash(process.cwd() + os.hostname());
74
+ }
75
+ function getDeveloperId() {
76
+ return hash(os.hostname() + os.userInfo().username);
77
+ }
78
+ //# sourceMappingURL=project-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-id.js","sourceRoot":"","sources":["../src/project-id.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,oCAQC;AAED,wCAQC;AAED,oCAOC;AAED,wCAEC;AAxCD,2DAA8C;AAC9C,oDAAsC;AACtC,4CAA8B;AAC9B,gDAAkC;AAElC,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,YAAY;IAC1B,IAAI,CAAC;QACH,OAAO,IAAA,6BAAQ,EAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;aAC9E,QAAQ,EAAE;aACV,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,IAAI,MAAM,EAAE,CAAC;QACX,mEAAmE;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACpD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,sCAAsC;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,cAAc;IAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Export project memory to a temp file, open in $EDITOR, reimport on close.
3
+ */
4
+ export declare function editFileMode(isDeveloperMode?: boolean): Promise<string>;
5
+ /**
6
+ * Interactive TUI mode for editing memory.
7
+ * Returns formatted memory for selection-based editing.
8
+ */
9
+ export declare function editTuiMode(): Promise<string>;
10
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/slash-commands/edit.ts"],"names":[],"mappings":"AAsCA;;GAEG;AACH,wBAAsB,YAAY,CAAC,eAAe,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAgJpF;AAyED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA8DnD"}