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,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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7F,mBAAmB,YAAY,CAAC;AAGhC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,UAAU,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAG/F,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9H,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGxG,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpC,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGlG,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
|