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.
- package/README.md +364 -0
- package/dist/acknowledgement.d.ts +14 -0
- package/dist/acknowledgement.d.ts.map +1 -0
- package/dist/acknowledgement.js +55 -0
- package/dist/acknowledgement.js.map +1 -0
- package/dist/atlas/client.d.ts +9 -0
- package/dist/atlas/client.d.ts.map +1 -0
- package/dist/atlas/client.js +64 -0
- package/dist/atlas/client.js.map +1 -0
- package/dist/atlas/embeddings.d.ts +18 -0
- package/dist/atlas/embeddings.d.ts.map +1 -0
- package/dist/atlas/embeddings.js +56 -0
- package/dist/atlas/embeddings.js.map +1 -0
- package/dist/atlas/indexes.d.ts +4 -0
- package/dist/atlas/indexes.d.ts.map +1 -0
- package/dist/atlas/indexes.js +78 -0
- package/dist/atlas/indexes.js.map +1 -0
- package/dist/atlas/vector.d.ts +17 -0
- package/dist/atlas/vector.d.ts.map +1 -0
- package/dist/atlas/vector.js +61 -0
- package/dist/atlas/vector.js.map +1 -0
- package/dist/bin/claude-memory.d.ts +3 -0
- package/dist/bin/claude-memory.d.ts.map +1 -0
- package/dist/bin/claude-memory.js +648 -0
- package/dist/bin/claude-memory.js.map +1 -0
- package/dist/bin/mcp-server.d.ts +3 -0
- package/dist/bin/mcp-server.d.ts.map +1 -0
- package/dist/bin/mcp-server.js +165 -0
- package/dist/bin/mcp-server.js.map +1 -0
- package/dist/cache/command-cache.d.ts +12 -0
- package/dist/cache/command-cache.d.ts.map +1 -0
- package/dist/cache/command-cache.js +63 -0
- package/dist/cache/command-cache.js.map +1 -0
- package/dist/cleanup.d.ts +8 -0
- package/dist/cleanup.d.ts.map +1 -0
- package/dist/cleanup.js +22 -0
- package/dist/cleanup.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/detector.d.ts +20 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +92 -0
- package/dist/detector.js.map +1 -0
- package/dist/editor/file-editor.d.ts +7 -0
- package/dist/editor/file-editor.d.ts.map +1 -0
- package/dist/editor/file-editor.js +73 -0
- package/dist/editor/file-editor.js.map +1 -0
- package/dist/editor/tui.d.ts +11 -0
- package/dist/editor/tui.d.ts.map +1 -0
- package/dist/editor/tui.js +75 -0
- package/dist/editor/tui.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts +11 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/hooks/post-tool-use.js +36 -0
- package/dist/hooks/post-tool-use.js.map +1 -0
- package/dist/hooks/pre-tool-use.d.ts +5 -0
- package/dist/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/hooks/pre-tool-use.js +103 -0
- package/dist/hooks/pre-tool-use.js.map +1 -0
- package/dist/hooks/startup.d.ts +25 -0
- package/dist/hooks/startup.d.ts.map +1 -0
- package/dist/hooks/startup.js +62 -0
- package/dist/hooks/startup.js.map +1 -0
- package/dist/hooks/stop.d.ts +39 -0
- package/dist/hooks/stop.d.ts.map +1 -0
- package/dist/hooks/stop.js +102 -0
- package/dist/hooks/stop.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/commands.d.ts +15 -0
- package/dist/memory/commands.d.ts.map +1 -0
- package/dist/memory/commands.js +55 -0
- package/dist/memory/commands.js.map +1 -0
- package/dist/memory/developer.d.ts +17 -0
- package/dist/memory/developer.d.ts.map +1 -0
- package/dist/memory/developer.js +233 -0
- package/dist/memory/developer.js.map +1 -0
- package/dist/memory/project.d.ts +25 -0
- package/dist/memory/project.d.ts.map +1 -0
- package/dist/memory/project.js +341 -0
- package/dist/memory/project.js.map +1 -0
- package/dist/memory/threads.d.ts +10 -0
- package/dist/memory/threads.d.ts.map +1 -0
- package/dist/memory/threads.js +57 -0
- package/dist/memory/threads.js.map +1 -0
- package/dist/memory/working.d.ts +16 -0
- package/dist/memory/working.d.ts.map +1 -0
- package/dist/memory/working.js +80 -0
- package/dist/memory/working.js.map +1 -0
- package/dist/natural-language/intent.d.ts +4 -0
- package/dist/natural-language/intent.d.ts.map +1 -0
- package/dist/natural-language/intent.js +169 -0
- package/dist/natural-language/intent.js.map +1 -0
- package/dist/natural-language/parser.d.ts +5 -0
- package/dist/natural-language/parser.d.ts.map +1 -0
- package/dist/natural-language/parser.js +63 -0
- package/dist/natural-language/parser.js.map +1 -0
- package/dist/natural-language/router.d.ts +9 -0
- package/dist/natural-language/router.d.ts.map +1 -0
- package/dist/natural-language/router.js +171 -0
- package/dist/natural-language/router.js.map +1 -0
- package/dist/project-id.d.ts +5 -0
- package/dist/project-id.d.ts.map +1 -0
- package/dist/project-id.js +78 -0
- package/dist/project-id.js.map +1 -0
- package/dist/slash-commands/edit.d.ts +10 -0
- package/dist/slash-commands/edit.d.ts.map +1 -0
- package/dist/slash-commands/edit.js +312 -0
- package/dist/slash-commands/edit.js.map +1 -0
- package/dist/slash-commands/memory.d.ts +3 -0
- package/dist/slash-commands/memory.d.ts.map +1 -0
- package/dist/slash-commands/memory.js +69 -0
- package/dist/slash-commands/memory.js.map +1 -0
- package/dist/slash-commands/recall.d.ts +2 -0
- package/dist/slash-commands/recall.d.ts.map +1 -0
- package/dist/slash-commands/recall.js +81 -0
- package/dist/slash-commands/recall.js.map +1 -0
- package/dist/slash-commands/remember.d.ts +2 -0
- package/dist/slash-commands/remember.d.ts.map +1 -0
- package/dist/slash-commands/remember.js +21 -0
- package/dist/slash-commands/remember.js.map +1 -0
- package/dist/slash-commands/stats.d.ts +2 -0
- package/dist/slash-commands/stats.d.ts.map +1 -0
- package/dist/slash-commands/stats.js +55 -0
- package/dist/slash-commands/stats.js.map +1 -0
- package/dist/slash-commands/threads.d.ts +4 -0
- package/dist/slash-commands/threads.d.ts.map +1 -0
- package/dist/slash-commands/threads.js +36 -0
- package/dist/slash-commands/threads.js.map +1 -0
- package/dist/startup/conversation.d.ts +17 -0
- package/dist/startup/conversation.d.ts.map +1 -0
- package/dist/startup/conversation.js +78 -0
- package/dist/startup/conversation.js.map +1 -0
- package/dist/startup/feature-search.d.ts +9 -0
- package/dist/startup/feature-search.d.ts.map +1 -0
- package/dist/startup/feature-search.js +62 -0
- package/dist/startup/feature-search.js.map +1 -0
- package/dist/startup/injector.d.ts +4 -0
- package/dist/startup/injector.d.ts.map +1 -0
- package/dist/startup/injector.js +190 -0
- package/dist/startup/injector.js.map +1 -0
- package/dist/summarizer.d.ts +15 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +92 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/types.d.ts +151 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +16 -0
- package/dist/utils.js.map +1 -0
- 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 @@
|
|
|
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"}
|