@aitytech/agentkits-memory 1.0.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 +250 -0
- package/dist/cache-manager.d.ts +134 -0
- package/dist/cache-manager.d.ts.map +1 -0
- package/dist/cache-manager.js +407 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/cli/save.d.ts +20 -0
- package/dist/cli/save.d.ts.map +1 -0
- package/dist/cli/save.js +94 -0
- package/dist/cli/save.js.map +1 -0
- package/dist/cli/setup.d.ts +18 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +163 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/viewer.d.ts +21 -0
- package/dist/cli/viewer.d.ts.map +1 -0
- package/dist/cli/viewer.js +182 -0
- package/dist/cli/viewer.js.map +1 -0
- package/dist/hnsw-index.d.ts +111 -0
- package/dist/hnsw-index.d.ts.map +1 -0
- package/dist/hnsw-index.js +781 -0
- package/dist/hnsw-index.js.map +1 -0
- package/dist/hooks/cli.d.ts +20 -0
- package/dist/hooks/cli.d.ts.map +1 -0
- package/dist/hooks/cli.js +102 -0
- package/dist/hooks/cli.js.map +1 -0
- package/dist/hooks/context.d.ts +31 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +64 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/index.d.ts +16 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +20 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/observation.d.ts +30 -0
- package/dist/hooks/observation.d.ts.map +1 -0
- package/dist/hooks/observation.js +79 -0
- package/dist/hooks/observation.js.map +1 -0
- package/dist/hooks/service.d.ts +102 -0
- package/dist/hooks/service.d.ts.map +1 -0
- package/dist/hooks/service.js +454 -0
- package/dist/hooks/service.js.map +1 -0
- package/dist/hooks/session-init.d.ts +30 -0
- package/dist/hooks/session-init.d.ts.map +1 -0
- package/dist/hooks/session-init.js +54 -0
- package/dist/hooks/session-init.js.map +1 -0
- package/dist/hooks/summarize.d.ts +30 -0
- package/dist/hooks/summarize.d.ts.map +1 -0
- package/dist/hooks/summarize.js +74 -0
- package/dist/hooks/summarize.js.map +1 -0
- package/dist/hooks/types.d.ts +193 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +137 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +173 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +564 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +9 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +9 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +368 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +14 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +110 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +100 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +9 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/migration.d.ts +77 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +457 -0
- package/dist/migration.js.map +1 -0
- package/dist/sqljs-backend.d.ts +128 -0
- package/dist/sqljs-backend.d.ts.map +1 -0
- package/dist/sqljs-backend.js +623 -0
- package/dist/sqljs-backend.js.map +1 -0
- package/dist/types.d.ts +481 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +73 -0
- package/dist/types.js.map +1 -0
- package/hooks.json +46 -0
- package/package.json +67 -0
- package/src/__tests__/index.test.ts +407 -0
- package/src/__tests__/sqljs-backend.test.ts +410 -0
- package/src/cache-manager.ts +515 -0
- package/src/cli/save.ts +109 -0
- package/src/cli/setup.ts +203 -0
- package/src/cli/viewer.ts +218 -0
- package/src/hnsw-index.ts +1013 -0
- package/src/hooks/__tests__/handlers.test.ts +298 -0
- package/src/hooks/__tests__/integration.test.ts +431 -0
- package/src/hooks/__tests__/service.test.ts +487 -0
- package/src/hooks/__tests__/types.test.ts +341 -0
- package/src/hooks/cli.ts +121 -0
- package/src/hooks/context.ts +77 -0
- package/src/hooks/index.ts +23 -0
- package/src/hooks/observation.ts +102 -0
- package/src/hooks/service.ts +582 -0
- package/src/hooks/session-init.ts +70 -0
- package/src/hooks/summarize.ts +89 -0
- package/src/hooks/types.ts +365 -0
- package/src/index.ts +755 -0
- package/src/mcp/__tests__/server.test.ts +181 -0
- package/src/mcp/index.ts +9 -0
- package/src/mcp/server.ts +441 -0
- package/src/mcp/tools.ts +113 -0
- package/src/mcp/types.ts +109 -0
- package/src/migration.ts +574 -0
- package/src/sql.js.d.ts +70 -0
- package/src/sqljs-backend.ts +789 -0
- package/src/types.ts +715 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Types for AgentKits Memory
|
|
3
|
+
*
|
|
4
|
+
* Lightweight hook system for auto-capturing Claude Code sessions.
|
|
5
|
+
* Based on claude-mem patterns but simplified for project-scoped storage.
|
|
6
|
+
*
|
|
7
|
+
* @module @agentkits/memory/hooks/types
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Raw input from Claude Code hooks (via stdin JSON)
|
|
11
|
+
*/
|
|
12
|
+
export interface ClaudeCodeHookInput {
|
|
13
|
+
/** Claude's session ID */
|
|
14
|
+
session_id?: string;
|
|
15
|
+
/** Current working directory */
|
|
16
|
+
cwd?: string;
|
|
17
|
+
/** User's prompt (UserPromptSubmit) */
|
|
18
|
+
prompt?: string;
|
|
19
|
+
/** Tool name (PostToolUse) */
|
|
20
|
+
tool_name?: string;
|
|
21
|
+
/** Tool input parameters (PostToolUse) */
|
|
22
|
+
tool_input?: unknown;
|
|
23
|
+
/** Tool response/output (PostToolUse) */
|
|
24
|
+
tool_result?: unknown;
|
|
25
|
+
/** Path to conversation transcript (Stop) */
|
|
26
|
+
transcript_path?: string;
|
|
27
|
+
/** Stop reason (Stop) */
|
|
28
|
+
stop_reason?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Normalized hook input for handlers
|
|
32
|
+
*/
|
|
33
|
+
export interface NormalizedHookInput {
|
|
34
|
+
/** Session ID */
|
|
35
|
+
sessionId: string;
|
|
36
|
+
/** Project directory */
|
|
37
|
+
cwd: string;
|
|
38
|
+
/** Project name (derived from cwd) */
|
|
39
|
+
project: string;
|
|
40
|
+
/** User's prompt */
|
|
41
|
+
prompt?: string;
|
|
42
|
+
/** Tool name */
|
|
43
|
+
toolName?: string;
|
|
44
|
+
/** Tool input */
|
|
45
|
+
toolInput?: unknown;
|
|
46
|
+
/** Tool response */
|
|
47
|
+
toolResponse?: unknown;
|
|
48
|
+
/** Transcript path */
|
|
49
|
+
transcriptPath?: string;
|
|
50
|
+
/** Stop reason */
|
|
51
|
+
stopReason?: string;
|
|
52
|
+
/** Timestamp */
|
|
53
|
+
timestamp: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Hook execution result
|
|
57
|
+
*/
|
|
58
|
+
export interface HookResult {
|
|
59
|
+
/** Continue processing (always true for us) */
|
|
60
|
+
continue: boolean;
|
|
61
|
+
/** Suppress output to Claude */
|
|
62
|
+
suppressOutput: boolean;
|
|
63
|
+
/** Additional context to inject (SessionStart only) */
|
|
64
|
+
additionalContext?: string;
|
|
65
|
+
/** Error message if failed */
|
|
66
|
+
error?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Hook-specific output for Claude Code
|
|
70
|
+
*/
|
|
71
|
+
export interface HookSpecificOutput {
|
|
72
|
+
hookEventName: string;
|
|
73
|
+
additionalContext?: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Full hook response for Claude Code
|
|
77
|
+
*/
|
|
78
|
+
export interface ClaudeCodeHookResponse {
|
|
79
|
+
continue?: boolean;
|
|
80
|
+
suppressOutput?: boolean;
|
|
81
|
+
hookSpecificOutput?: HookSpecificOutput;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Hook event types
|
|
85
|
+
*/
|
|
86
|
+
export type HookEventType = 'context' | 'session-init' | 'observation' | 'summarize';
|
|
87
|
+
/**
|
|
88
|
+
* Event handler interface
|
|
89
|
+
*/
|
|
90
|
+
export interface EventHandler {
|
|
91
|
+
/** Execute the hook handler */
|
|
92
|
+
execute(input: NormalizedHookInput): Promise<HookResult>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Captured observation from tool usage
|
|
96
|
+
*/
|
|
97
|
+
export interface Observation {
|
|
98
|
+
/** Unique ID */
|
|
99
|
+
id: string;
|
|
100
|
+
/** Session ID */
|
|
101
|
+
sessionId: string;
|
|
102
|
+
/** Project name */
|
|
103
|
+
project: string;
|
|
104
|
+
/** Tool name */
|
|
105
|
+
toolName: string;
|
|
106
|
+
/** Tool input (JSON) */
|
|
107
|
+
toolInput: string;
|
|
108
|
+
/** Tool response (JSON, truncated) */
|
|
109
|
+
toolResponse: string;
|
|
110
|
+
/** Working directory */
|
|
111
|
+
cwd: string;
|
|
112
|
+
/** Timestamp */
|
|
113
|
+
timestamp: number;
|
|
114
|
+
/** Observation type */
|
|
115
|
+
type: ObservationType;
|
|
116
|
+
/** Brief title (auto-generated) */
|
|
117
|
+
title?: string;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Observation types based on tool usage
|
|
121
|
+
*/
|
|
122
|
+
export type ObservationType = 'read' | 'write' | 'execute' | 'search' | 'other';
|
|
123
|
+
/**
|
|
124
|
+
* Session record for tracking
|
|
125
|
+
*/
|
|
126
|
+
export interface SessionRecord {
|
|
127
|
+
/** Database ID */
|
|
128
|
+
id: number;
|
|
129
|
+
/** Claude's session ID */
|
|
130
|
+
sessionId: string;
|
|
131
|
+
/** Project name */
|
|
132
|
+
project: string;
|
|
133
|
+
/** First user prompt */
|
|
134
|
+
prompt: string;
|
|
135
|
+
/** Session start time */
|
|
136
|
+
startedAt: number;
|
|
137
|
+
/** Session end time */
|
|
138
|
+
endedAt?: number;
|
|
139
|
+
/** Number of observations */
|
|
140
|
+
observationCount: number;
|
|
141
|
+
/** Auto-generated summary */
|
|
142
|
+
summary?: string;
|
|
143
|
+
/** Status */
|
|
144
|
+
status: 'active' | 'completed' | 'abandoned';
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Context to inject on session start
|
|
148
|
+
*/
|
|
149
|
+
export interface MemoryContext {
|
|
150
|
+
/** Recent observations */
|
|
151
|
+
recentObservations: Observation[];
|
|
152
|
+
/** Previous sessions */
|
|
153
|
+
previousSessions: SessionRecord[];
|
|
154
|
+
/** Project-specific patterns */
|
|
155
|
+
patterns?: string[];
|
|
156
|
+
/** Recent decisions */
|
|
157
|
+
decisions?: string[];
|
|
158
|
+
/** Formatted markdown */
|
|
159
|
+
markdown: string;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Generate observation ID
|
|
163
|
+
*/
|
|
164
|
+
export declare function generateObservationId(): string;
|
|
165
|
+
/**
|
|
166
|
+
* Get project name from cwd
|
|
167
|
+
*/
|
|
168
|
+
export declare function getProjectName(cwd: string): string;
|
|
169
|
+
/**
|
|
170
|
+
* Determine observation type from tool name
|
|
171
|
+
*/
|
|
172
|
+
export declare function getObservationType(toolName: string): ObservationType;
|
|
173
|
+
/**
|
|
174
|
+
* Generate observation title from tool usage
|
|
175
|
+
*/
|
|
176
|
+
export declare function generateObservationTitle(toolName: string, toolInput: unknown): string;
|
|
177
|
+
/**
|
|
178
|
+
* Truncate string to max length
|
|
179
|
+
*/
|
|
180
|
+
export declare function truncate(str: string, maxLength?: number): string;
|
|
181
|
+
/**
|
|
182
|
+
* Standard hook response (continue, no output)
|
|
183
|
+
*/
|
|
184
|
+
export declare const STANDARD_RESPONSE: ClaudeCodeHookResponse;
|
|
185
|
+
/**
|
|
186
|
+
* Format hook response for stdout
|
|
187
|
+
*/
|
|
188
|
+
export declare function formatResponse(result: HookResult): string;
|
|
189
|
+
/**
|
|
190
|
+
* Parse stdin input from Claude Code
|
|
191
|
+
*/
|
|
192
|
+
export declare function parseHookInput(stdin: string): NormalizedHookInput;
|
|
193
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Types for AgentKits Memory
|
|
3
|
+
*
|
|
4
|
+
* Lightweight hook system for auto-capturing Claude Code sessions.
|
|
5
|
+
* Based on claude-mem patterns but simplified for project-scoped storage.
|
|
6
|
+
*
|
|
7
|
+
* @module @agentkits/memory/hooks/types
|
|
8
|
+
*/
|
|
9
|
+
// ===== Utility Functions =====
|
|
10
|
+
/**
|
|
11
|
+
* Generate observation ID
|
|
12
|
+
*/
|
|
13
|
+
export function generateObservationId() {
|
|
14
|
+
const timestamp = Date.now().toString(36);
|
|
15
|
+
const random = Math.random().toString(36).substring(2, 6);
|
|
16
|
+
return `obs_${timestamp}_${random}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get project name from cwd
|
|
20
|
+
*/
|
|
21
|
+
export function getProjectName(cwd) {
|
|
22
|
+
const parts = cwd.split(/[/\\]/);
|
|
23
|
+
return parts[parts.length - 1] || 'unknown';
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Determine observation type from tool name
|
|
27
|
+
*/
|
|
28
|
+
export function getObservationType(toolName) {
|
|
29
|
+
const readTools = ['Read', 'Glob', 'Grep', 'LS'];
|
|
30
|
+
const writeTools = ['Write', 'Edit', 'NotebookEdit'];
|
|
31
|
+
const executeTools = ['Bash', 'Task', 'Skill'];
|
|
32
|
+
const searchTools = ['WebSearch', 'WebFetch'];
|
|
33
|
+
if (readTools.includes(toolName))
|
|
34
|
+
return 'read';
|
|
35
|
+
if (writeTools.includes(toolName))
|
|
36
|
+
return 'write';
|
|
37
|
+
if (executeTools.includes(toolName))
|
|
38
|
+
return 'execute';
|
|
39
|
+
if (searchTools.includes(toolName))
|
|
40
|
+
return 'search';
|
|
41
|
+
return 'other';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate observation title from tool usage
|
|
45
|
+
*/
|
|
46
|
+
export function generateObservationTitle(toolName, toolInput) {
|
|
47
|
+
try {
|
|
48
|
+
const input = typeof toolInput === 'string' ? JSON.parse(toolInput) : toolInput;
|
|
49
|
+
switch (toolName) {
|
|
50
|
+
case 'Read':
|
|
51
|
+
return `Read ${input?.file_path || input?.path || 'file'}`;
|
|
52
|
+
case 'Write':
|
|
53
|
+
return `Write ${input?.file_path || input?.path || 'file'}`;
|
|
54
|
+
case 'Edit':
|
|
55
|
+
return `Edit ${input?.file_path || input?.path || 'file'}`;
|
|
56
|
+
case 'Bash':
|
|
57
|
+
const cmd = input?.command || '';
|
|
58
|
+
return `Run: ${cmd.substring(0, 50)}${cmd.length > 50 ? '...' : ''}`;
|
|
59
|
+
case 'Glob':
|
|
60
|
+
return `Find ${input?.pattern || 'files'}`;
|
|
61
|
+
case 'Grep':
|
|
62
|
+
return `Search "${input?.pattern || ''}"`;
|
|
63
|
+
case 'Task':
|
|
64
|
+
return `Task: ${input?.description || 'agent'}`;
|
|
65
|
+
case 'WebSearch':
|
|
66
|
+
return `Search: ${input?.query || ''}`;
|
|
67
|
+
case 'WebFetch':
|
|
68
|
+
return `Fetch: ${input?.url || ''}`;
|
|
69
|
+
default:
|
|
70
|
+
return `${toolName}`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return toolName;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Truncate string to max length
|
|
79
|
+
*/
|
|
80
|
+
export function truncate(str, maxLength = 1000) {
|
|
81
|
+
if (str.length <= maxLength)
|
|
82
|
+
return str;
|
|
83
|
+
return str.substring(0, maxLength) + '...[truncated]';
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Standard hook response (continue, no output)
|
|
87
|
+
*/
|
|
88
|
+
export const STANDARD_RESPONSE = {
|
|
89
|
+
continue: true,
|
|
90
|
+
suppressOutput: true,
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Format hook response for stdout
|
|
94
|
+
*/
|
|
95
|
+
export function formatResponse(result) {
|
|
96
|
+
if (result.additionalContext) {
|
|
97
|
+
return JSON.stringify({
|
|
98
|
+
hookSpecificOutput: {
|
|
99
|
+
hookEventName: 'SessionStart',
|
|
100
|
+
additionalContext: result.additionalContext,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return JSON.stringify(STANDARD_RESPONSE);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Parse stdin input from Claude Code
|
|
108
|
+
*/
|
|
109
|
+
export function parseHookInput(stdin) {
|
|
110
|
+
try {
|
|
111
|
+
const raw = JSON.parse(stdin);
|
|
112
|
+
const cwd = raw.cwd || process.cwd();
|
|
113
|
+
return {
|
|
114
|
+
sessionId: raw.session_id || `session_${Date.now()}`,
|
|
115
|
+
cwd,
|
|
116
|
+
project: getProjectName(cwd),
|
|
117
|
+
prompt: raw.prompt,
|
|
118
|
+
toolName: raw.tool_name,
|
|
119
|
+
toolInput: raw.tool_input,
|
|
120
|
+
toolResponse: raw.tool_result,
|
|
121
|
+
transcriptPath: raw.transcript_path,
|
|
122
|
+
stopReason: raw.stop_reason,
|
|
123
|
+
timestamp: Date.now(),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Fallback for empty or invalid input
|
|
128
|
+
const cwd = process.cwd();
|
|
129
|
+
return {
|
|
130
|
+
sessionId: `session_${Date.now()}`,
|
|
131
|
+
cwd,
|
|
132
|
+
project: getProjectName(cwd),
|
|
133
|
+
timestamp: Date.now(),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @agentkits/memory - Project-Scoped Memory System
|
|
3
|
+
*
|
|
4
|
+
* Provides persistent memory for Claude Code sessions within a project.
|
|
5
|
+
* Stores data in .claude/memory/memory.db using SQLite with optional
|
|
6
|
+
* HNSW vector indexing for semantic search.
|
|
7
|
+
*
|
|
8
|
+
* @module @agentkits/memory
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { ProjectMemoryService } from '@agentkits/memory';
|
|
13
|
+
*
|
|
14
|
+
* // Initialize memory for current project
|
|
15
|
+
* const memory = new ProjectMemoryService('.claude/memory');
|
|
16
|
+
* await memory.initialize();
|
|
17
|
+
*
|
|
18
|
+
* // Store an entry
|
|
19
|
+
* await memory.store({
|
|
20
|
+
* key: 'auth-pattern',
|
|
21
|
+
* content: 'Use JWT with refresh tokens for authentication',
|
|
22
|
+
* namespace: 'patterns',
|
|
23
|
+
* tags: ['auth', 'security'],
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Query entries
|
|
27
|
+
* const patterns = await memory.query({
|
|
28
|
+
* type: 'hybrid',
|
|
29
|
+
* namespace: 'patterns',
|
|
30
|
+
* tags: ['auth'],
|
|
31
|
+
* limit: 10,
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Semantic search (if embeddings enabled)
|
|
35
|
+
* const similar = await memory.semanticSearch('how to authenticate users', 5);
|
|
36
|
+
*
|
|
37
|
+
* // Session management
|
|
38
|
+
* await memory.startSession();
|
|
39
|
+
* await memory.checkpoint('Completed authentication setup');
|
|
40
|
+
* await memory.endSession('Successfully implemented auth');
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import { EventEmitter } from 'node:events';
|
|
44
|
+
import { IMemoryBackend, MemoryEntry, MemoryEntryInput, MemoryEntryUpdate, MemoryQuery, SearchResult, SearchOptions, BackendStats, HealthCheckResult, EmbeddingGenerator, SessionInfo, MigrationResult } from './types.js';
|
|
45
|
+
export * from './types.js';
|
|
46
|
+
export { SqlJsBackend } from './sqljs-backend.js';
|
|
47
|
+
export { CacheManager, TieredCacheManager } from './cache-manager.js';
|
|
48
|
+
export { HNSWIndex } from './hnsw-index.js';
|
|
49
|
+
export { MemoryMigrator, migrateMarkdownMemory } from './migration.js';
|
|
50
|
+
/**
|
|
51
|
+
* Configuration for ProjectMemoryService
|
|
52
|
+
*/
|
|
53
|
+
export interface ProjectMemoryConfig {
|
|
54
|
+
/** Base directory for memory storage (default: .claude/memory) */
|
|
55
|
+
baseDir: string;
|
|
56
|
+
/** Database filename (default: memory.db) */
|
|
57
|
+
dbFilename: string;
|
|
58
|
+
/** Enable HNSW vector indexing */
|
|
59
|
+
enableVectorIndex: boolean;
|
|
60
|
+
/** Vector dimensions for embeddings (default: 384 for local models) */
|
|
61
|
+
dimensions: number;
|
|
62
|
+
/** Embedding generator function (optional) */
|
|
63
|
+
embeddingGenerator?: EmbeddingGenerator;
|
|
64
|
+
/** Enable caching */
|
|
65
|
+
cacheEnabled: boolean;
|
|
66
|
+
/** Cache size (number of entries) */
|
|
67
|
+
cacheSize: number;
|
|
68
|
+
/** Cache TTL in milliseconds */
|
|
69
|
+
cacheTtl: number;
|
|
70
|
+
/** Auto-persist interval in milliseconds */
|
|
71
|
+
autoPersistInterval: number;
|
|
72
|
+
/** Maximum entries before cleanup */
|
|
73
|
+
maxEntries: number;
|
|
74
|
+
/** Enable verbose logging */
|
|
75
|
+
verbose: boolean;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Project-Scoped Memory Service
|
|
79
|
+
*
|
|
80
|
+
* High-level interface for project memory that provides:
|
|
81
|
+
* - Persistent storage in .claude/memory/memory.db
|
|
82
|
+
* - Session tracking and checkpoints
|
|
83
|
+
* - Optional semantic search with HNSW indexing
|
|
84
|
+
* - Migration from existing markdown files
|
|
85
|
+
* - Backward-compatible markdown exports
|
|
86
|
+
*/
|
|
87
|
+
export declare class ProjectMemoryService extends EventEmitter implements IMemoryBackend {
|
|
88
|
+
private config;
|
|
89
|
+
private backend;
|
|
90
|
+
private cache;
|
|
91
|
+
private vectorIndex;
|
|
92
|
+
private initialized;
|
|
93
|
+
private currentSession;
|
|
94
|
+
constructor(baseDirOrConfig?: string | Partial<ProjectMemoryConfig>);
|
|
95
|
+
initialize(): Promise<void>;
|
|
96
|
+
shutdown(): Promise<void>;
|
|
97
|
+
store(entry: MemoryEntry): Promise<void>;
|
|
98
|
+
get(id: string): Promise<MemoryEntry | null>;
|
|
99
|
+
getByKey(namespace: string, key: string): Promise<MemoryEntry | null>;
|
|
100
|
+
update(id: string, update: MemoryEntryUpdate): Promise<MemoryEntry | null>;
|
|
101
|
+
delete(id: string): Promise<boolean>;
|
|
102
|
+
query(query: MemoryQuery): Promise<MemoryEntry[]>;
|
|
103
|
+
search(embedding: Float32Array, options: SearchOptions): Promise<SearchResult[]>;
|
|
104
|
+
bulkInsert(entries: MemoryEntry[]): Promise<void>;
|
|
105
|
+
bulkDelete(ids: string[]): Promise<number>;
|
|
106
|
+
count(namespace?: string): Promise<number>;
|
|
107
|
+
listNamespaces(): Promise<string[]>;
|
|
108
|
+
clearNamespace(namespace: string): Promise<number>;
|
|
109
|
+
getStats(): Promise<BackendStats>;
|
|
110
|
+
healthCheck(): Promise<HealthCheckResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Store an entry from simple input
|
|
113
|
+
*/
|
|
114
|
+
storeEntry(input: MemoryEntryInput): Promise<MemoryEntry>;
|
|
115
|
+
/**
|
|
116
|
+
* Semantic search by content string
|
|
117
|
+
*/
|
|
118
|
+
semanticSearch(content: string, k?: number, threshold?: number): Promise<SearchResult[]>;
|
|
119
|
+
/**
|
|
120
|
+
* Get entries by namespace (convenience method)
|
|
121
|
+
*/
|
|
122
|
+
getByNamespace(namespace: string, limit?: number): Promise<MemoryEntry[]>;
|
|
123
|
+
/**
|
|
124
|
+
* Get or create an entry
|
|
125
|
+
*/
|
|
126
|
+
getOrCreate(namespace: string, key: string, creator: () => MemoryEntryInput | Promise<MemoryEntryInput>): Promise<MemoryEntry>;
|
|
127
|
+
/**
|
|
128
|
+
* Start a new session
|
|
129
|
+
*/
|
|
130
|
+
startSession(): Promise<SessionInfo>;
|
|
131
|
+
/**
|
|
132
|
+
* Get current session
|
|
133
|
+
*/
|
|
134
|
+
getCurrentSession(): SessionInfo | null;
|
|
135
|
+
/**
|
|
136
|
+
* Create a checkpoint in current session
|
|
137
|
+
*/
|
|
138
|
+
checkpoint(description: string): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* End current session
|
|
141
|
+
*/
|
|
142
|
+
endSession(summary?: string): Promise<SessionInfo | null>;
|
|
143
|
+
/**
|
|
144
|
+
* Get recent sessions
|
|
145
|
+
*/
|
|
146
|
+
getRecentSessions(limit?: number): Promise<SessionInfo[]>;
|
|
147
|
+
/**
|
|
148
|
+
* Migrate from existing markdown memory files
|
|
149
|
+
*/
|
|
150
|
+
migrateFromMarkdown(options?: {
|
|
151
|
+
generateEmbeddings?: boolean;
|
|
152
|
+
}): Promise<MigrationResult>;
|
|
153
|
+
/**
|
|
154
|
+
* Export namespace to markdown (for git-friendly backup)
|
|
155
|
+
*/
|
|
156
|
+
exportToMarkdown(namespace: string, outputPath?: string): Promise<string>;
|
|
157
|
+
/**
|
|
158
|
+
* Export all namespaces to markdown
|
|
159
|
+
*/
|
|
160
|
+
exportAllToMarkdown(): Promise<string[]>;
|
|
161
|
+
private ensureInitialized;
|
|
162
|
+
private rebuildVectorIndex;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Create a memory service for the current project
|
|
166
|
+
*/
|
|
167
|
+
export declare function createProjectMemory(baseDir?: string, options?: Partial<ProjectMemoryConfig>): ProjectMemoryService;
|
|
168
|
+
/**
|
|
169
|
+
* Create a memory service with embedding support
|
|
170
|
+
*/
|
|
171
|
+
export declare function createEmbeddingMemory(baseDir: string, embeddingGenerator: EmbeddingGenerator, dimensions?: number): ProjectMemoryService;
|
|
172
|
+
export default ProjectMemoryService;
|
|
173
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|