psychmem 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 +632 -0
- package/dist/adapters/claude-code/index.d.ts +125 -0
- package/dist/adapters/claude-code/index.d.ts.map +1 -0
- package/dist/adapters/claude-code/index.js +398 -0
- package/dist/adapters/claude-code/index.js.map +1 -0
- package/dist/adapters/opencode/index.d.ts +50 -0
- package/dist/adapters/opencode/index.d.ts.map +1 -0
- package/dist/adapters/opencode/index.js +793 -0
- package/dist/adapters/opencode/index.js.map +1 -0
- package/dist/adapters/types.d.ts +226 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +6 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli.d.ts +19 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +461 -0
- package/dist/cli.js.map +1 -0
- package/dist/hooks/index.d.ts +92 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +304 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts +26 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/hooks/post-tool-use.js +69 -0
- package/dist/hooks/post-tool-use.js.map +1 -0
- package/dist/hooks/session-end.d.ts +32 -0
- package/dist/hooks/session-end.d.ts.map +1 -0
- package/dist/hooks/session-end.js +66 -0
- package/dist/hooks/session-end.js.map +1 -0
- package/dist/hooks/session-start.d.ts +55 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +173 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/hooks/stop.d.ts +72 -0
- package/dist/hooks/stop.d.ts.map +1 -0
- package/dist/hooks/stop.js +273 -0
- package/dist/hooks/stop.js.map +1 -0
- package/dist/index.d.ts +114 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +191 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/context-sweep.d.ts +107 -0
- package/dist/memory/context-sweep.d.ts.map +1 -0
- package/dist/memory/context-sweep.js +557 -0
- package/dist/memory/context-sweep.js.map +1 -0
- package/dist/memory/patterns.d.ts +106 -0
- package/dist/memory/patterns.d.ts.map +1 -0
- package/dist/memory/patterns.js +613 -0
- package/dist/memory/patterns.js.map +1 -0
- package/dist/memory/selective-memory.d.ts +78 -0
- package/dist/memory/selective-memory.d.ts.map +1 -0
- package/dist/memory/selective-memory.js +227 -0
- package/dist/memory/selective-memory.js.map +1 -0
- package/dist/memory/structural-analyzer.d.ts +75 -0
- package/dist/memory/structural-analyzer.d.ts.map +1 -0
- package/dist/memory/structural-analyzer.js +359 -0
- package/dist/memory/structural-analyzer.js.map +1 -0
- package/dist/retrieval/index.d.ts +106 -0
- package/dist/retrieval/index.d.ts.map +1 -0
- package/dist/retrieval/index.js +291 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/storage/database.d.ts +138 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +748 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/sqlite-adapter.d.ts +35 -0
- package/dist/storage/sqlite-adapter.d.ts.map +1 -0
- package/dist/storage/sqlite-adapter.js +103 -0
- package/dist/storage/sqlite-adapter.js.map +1 -0
- package/dist/transcript/index.d.ts +8 -0
- package/dist/transcript/index.d.ts.map +1 -0
- package/dist/transcript/index.js +6 -0
- package/dist/transcript/index.js.map +1 -0
- package/dist/transcript/parser.d.ts +93 -0
- package/dist/transcript/parser.d.ts.map +1 -0
- package/dist/transcript/parser.js +373 -0
- package/dist/transcript/parser.js.map +1 -0
- package/dist/transcript/sweep.d.ts +75 -0
- package/dist/transcript/sweep.d.ts.map +1 -0
- package/dist/transcript/sweep.js +202 -0
- package/dist/transcript/sweep.js.map +1 -0
- package/dist/types/index.d.ts +328 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +80 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/paths.d.ts +19 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +43 -0
- package/dist/utils/paths.js.map +1 -0
- package/hooks/hooks.json +54 -0
- package/package.json +83 -0
- package/plugin.js +45 -0
- package/plugin.json +19 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PsychMem - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Psych-grounded selective memory system for AI agents
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* psychmem hook <json-input> Process a hook event
|
|
8
|
+
* psychmem search <query> Search memories
|
|
9
|
+
* psychmem get <id> Get memory details
|
|
10
|
+
* psychmem stats Show memory stats
|
|
11
|
+
* psychmem decay Apply decay to all memories
|
|
12
|
+
* psychmem consolidate Run STM→LTM consolidation
|
|
13
|
+
*/
|
|
14
|
+
import { PsychMemHooks, createPsychMemHooks } from './hooks/index.js';
|
|
15
|
+
import { MemoryRetrieval } from './retrieval/index.js';
|
|
16
|
+
import { MemoryDatabase, createMemoryDatabase } from './storage/database.js';
|
|
17
|
+
import { DEFAULT_CONFIG } from './types/index.js';
|
|
18
|
+
export class PsychMem {
|
|
19
|
+
hooks;
|
|
20
|
+
retrieval;
|
|
21
|
+
db;
|
|
22
|
+
config;
|
|
23
|
+
initialized = false;
|
|
24
|
+
_externalDb;
|
|
25
|
+
constructor(config = {}, db) {
|
|
26
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
27
|
+
if (db) {
|
|
28
|
+
this._externalDb = db;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the PsychMem instance (must be called before use)
|
|
33
|
+
*/
|
|
34
|
+
async init() {
|
|
35
|
+
if (this.initialized)
|
|
36
|
+
return;
|
|
37
|
+
this.db = this._externalDb ?? await createMemoryDatabase(this.config);
|
|
38
|
+
this.hooks = await createPsychMemHooks(this.config, this.db);
|
|
39
|
+
this.retrieval = new MemoryRetrieval(this.db, this.config);
|
|
40
|
+
this.initialized = true;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Ensure instance is initialized
|
|
44
|
+
*/
|
|
45
|
+
ensureInit() {
|
|
46
|
+
if (!this.initialized) {
|
|
47
|
+
throw new Error('PsychMem not initialized. Call await psychmem.init() first.');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Process a hook event
|
|
52
|
+
*/
|
|
53
|
+
async handleHook(input) {
|
|
54
|
+
this.ensureInit();
|
|
55
|
+
return this.hooks.handle(input);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Search memories
|
|
59
|
+
*/
|
|
60
|
+
search(query, limit) {
|
|
61
|
+
this.ensureInit();
|
|
62
|
+
return this.retrieval.search(query, undefined, limit);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get memory by ID
|
|
66
|
+
*/
|
|
67
|
+
getMemory(id) {
|
|
68
|
+
this.ensureInit();
|
|
69
|
+
return this.retrieval.getMemory(id);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get memory details for multiple IDs
|
|
73
|
+
*/
|
|
74
|
+
getMemories(ids, sessionId) {
|
|
75
|
+
this.ensureInit();
|
|
76
|
+
return this.retrieval.retrieveDetails(ids, sessionId);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get memory stats
|
|
80
|
+
*/
|
|
81
|
+
getStats() {
|
|
82
|
+
this.ensureInit();
|
|
83
|
+
const stmActive = this.db.getMemoriesByStore('stm', 'active');
|
|
84
|
+
const ltmActive = this.db.getMemoriesByStore('ltm', 'active');
|
|
85
|
+
const stmDecayed = this.db.getMemoriesByStore('stm', 'decayed');
|
|
86
|
+
const ltmDecayed = this.db.getMemoriesByStore('ltm', 'decayed');
|
|
87
|
+
const stmPinned = this.db.getMemoriesByStore('stm', 'pinned');
|
|
88
|
+
const ltmPinned = this.db.getMemoriesByStore('ltm', 'pinned');
|
|
89
|
+
return {
|
|
90
|
+
stm: {
|
|
91
|
+
count: stmActive.length,
|
|
92
|
+
decayedCount: stmDecayed.length,
|
|
93
|
+
pinnedCount: stmPinned.length,
|
|
94
|
+
avgStrength: this.avgStrength(stmActive),
|
|
95
|
+
},
|
|
96
|
+
ltm: {
|
|
97
|
+
count: ltmActive.length,
|
|
98
|
+
decayedCount: ltmDecayed.length,
|
|
99
|
+
pinnedCount: ltmPinned.length,
|
|
100
|
+
avgStrength: this.avgStrength(ltmActive),
|
|
101
|
+
},
|
|
102
|
+
total: stmActive.length + ltmActive.length,
|
|
103
|
+
totalIncludingDecayed: stmActive.length + ltmActive.length +
|
|
104
|
+
stmDecayed.length + ltmDecayed.length +
|
|
105
|
+
stmPinned.length + ltmPinned.length,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* List memories, optionally filtered by store and/or status
|
|
110
|
+
*/
|
|
111
|
+
listMemories(options = {}) {
|
|
112
|
+
this.ensureInit();
|
|
113
|
+
const { store, status = 'active', limit = 50 } = options;
|
|
114
|
+
if (store) {
|
|
115
|
+
return this.db.getMemoriesByStore(store, status).slice(0, limit);
|
|
116
|
+
}
|
|
117
|
+
const stm = this.db.getMemoriesByStore('stm', status);
|
|
118
|
+
const ltm = this.db.getMemoriesByStore('ltm', status);
|
|
119
|
+
return [...ltm, ...stm]
|
|
120
|
+
.sort((a, b) => b.strength - a.strength)
|
|
121
|
+
.slice(0, limit);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Apply decay to all memories
|
|
125
|
+
*/
|
|
126
|
+
applyDecay() {
|
|
127
|
+
this.ensureInit();
|
|
128
|
+
return this.db.applyDecay();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Run consolidation
|
|
132
|
+
*/
|
|
133
|
+
runConsolidation() {
|
|
134
|
+
this.ensureInit();
|
|
135
|
+
return this.db.runConsolidation();
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Pin a memory (prevent decay)
|
|
139
|
+
*/
|
|
140
|
+
pinMemory(id) {
|
|
141
|
+
this.ensureInit();
|
|
142
|
+
this.db.addFeedback('pin', id);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Forget a memory
|
|
146
|
+
*/
|
|
147
|
+
forgetMemory(id) {
|
|
148
|
+
this.ensureInit();
|
|
149
|
+
this.db.addFeedback('forget', id);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Remember a memory (boost importance + promote to LTM)
|
|
153
|
+
*/
|
|
154
|
+
rememberMemory(id) {
|
|
155
|
+
this.ensureInit();
|
|
156
|
+
this.db.addFeedback('remember', id);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Close database connection
|
|
160
|
+
*/
|
|
161
|
+
close() {
|
|
162
|
+
if (this.initialized) {
|
|
163
|
+
this.db.close();
|
|
164
|
+
this.hooks.close();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
avgStrength(memories) {
|
|
168
|
+
if (memories.length === 0)
|
|
169
|
+
return 0;
|
|
170
|
+
return memories.reduce((sum, m) => sum + m.strength, 0) / memories.length;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Create and initialize a PsychMem instance
|
|
175
|
+
*/
|
|
176
|
+
export async function createPsychMem(config = {}, db) {
|
|
177
|
+
const psychmem = new PsychMem(config, db);
|
|
178
|
+
await psychmem.init();
|
|
179
|
+
return psychmem;
|
|
180
|
+
}
|
|
181
|
+
// Re-export types and utilities
|
|
182
|
+
export * from './types/index.js';
|
|
183
|
+
export { PsychMemHooks, createPsychMemHooks } from './hooks/index.js';
|
|
184
|
+
export { MemoryRetrieval } from './retrieval/index.js';
|
|
185
|
+
export { MemoryDatabase, createMemoryDatabase } from './storage/database.js';
|
|
186
|
+
export { ContextSweep } from './memory/context-sweep.js';
|
|
187
|
+
export { SelectiveMemory } from './memory/selective-memory.js';
|
|
188
|
+
// Re-export adapters
|
|
189
|
+
export { createOpenCodePlugin, OpenCodeAdapter } from './adapters/opencode/index.js';
|
|
190
|
+
export { ClaudeCodeAdapter, createClaudeCodeAdapter } from './adapters/claude-code/index.js';
|
|
191
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Sweep - Stage 1 of the selective memory pipeline
|
|
3
|
+
*
|
|
4
|
+
* v1.5: Now includes:
|
|
5
|
+
* - Multilingual keyword patterns (15 languages)
|
|
6
|
+
* - Structural/pragmatic signal detection (language-agnostic)
|
|
7
|
+
* - Unified classification with confidence differentiation
|
|
8
|
+
*
|
|
9
|
+
* Extracts memory candidates from raw events by detecting:
|
|
10
|
+
* - Importance signals (emphasis, corrections, repetitions)
|
|
11
|
+
* - Classification (bugfix, learning, decision, etc.)
|
|
12
|
+
* - Preliminary relevance scoring
|
|
13
|
+
*
|
|
14
|
+
* This is the CRITICAL component - without good extraction, the rest collapses.
|
|
15
|
+
*/
|
|
16
|
+
import type { Event, MemoryCandidate, SweepConfig } from '../types/index.js';
|
|
17
|
+
export declare class ContextSweep {
|
|
18
|
+
private config;
|
|
19
|
+
private structuralAnalyzer;
|
|
20
|
+
constructor(config?: Partial<SweepConfig>);
|
|
21
|
+
/**
|
|
22
|
+
* Extract memory candidates from a list of events
|
|
23
|
+
*/
|
|
24
|
+
extractCandidates(events: Event[]): MemoryCandidate[];
|
|
25
|
+
/**
|
|
26
|
+
* Extract candidates from conversation text (Stop event)
|
|
27
|
+
* This is a comprehensive analysis of the full conversation
|
|
28
|
+
*
|
|
29
|
+
* v1.5: Now uses multilingual patterns + structural signals
|
|
30
|
+
*/
|
|
31
|
+
private extractFromConversationText;
|
|
32
|
+
/**
|
|
33
|
+
* Detect the role (user/assistant/tool) from chunk prefix
|
|
34
|
+
*/
|
|
35
|
+
private detectChunkRole;
|
|
36
|
+
/**
|
|
37
|
+
* Check if chunk contains tool error indicators
|
|
38
|
+
*/
|
|
39
|
+
private chunkHasToolError;
|
|
40
|
+
/**
|
|
41
|
+
* Get extraction method description
|
|
42
|
+
*/
|
|
43
|
+
private getExtractionMethod;
|
|
44
|
+
/**
|
|
45
|
+
* Split content into semantic chunks for analysis.
|
|
46
|
+
*
|
|
47
|
+
* Strategies (tried in order):
|
|
48
|
+
* 1. Double-newline paragraphs (standard prose)
|
|
49
|
+
* 2. Conversation turns (Human:/Assistant: prefixed lines from extractConversationText)
|
|
50
|
+
* 3. Sentences
|
|
51
|
+
* 4. Whole content as single chunk
|
|
52
|
+
*/
|
|
53
|
+
private splitIntoChunks;
|
|
54
|
+
/**
|
|
55
|
+
* Extract candidate from a user prompt
|
|
56
|
+
* v1.5: Now uses multilingual patterns + structural signals
|
|
57
|
+
*/
|
|
58
|
+
private extractFromUserPrompt;
|
|
59
|
+
/**
|
|
60
|
+
* Extract candidates from tool events (bugs, fixes, learnings)
|
|
61
|
+
* v1.5: Now uses multilingual patterns
|
|
62
|
+
*/
|
|
63
|
+
private extractFromToolEvents;
|
|
64
|
+
/**
|
|
65
|
+
* Detect repeated concepts/requests across events
|
|
66
|
+
*/
|
|
67
|
+
private detectRepetitions;
|
|
68
|
+
/**
|
|
69
|
+
* Classify content into a memory classification
|
|
70
|
+
* v1.5: Uses multilingual patterns first, then structural heuristics
|
|
71
|
+
*/
|
|
72
|
+
private classifyContentMultilingual;
|
|
73
|
+
/**
|
|
74
|
+
* Generate a concise summary for a memory candidate
|
|
75
|
+
* v1.5: Considers structural signals in summary selection
|
|
76
|
+
*/
|
|
77
|
+
private generateSummary;
|
|
78
|
+
/**
|
|
79
|
+
* Format summary with classification prefix
|
|
80
|
+
*/
|
|
81
|
+
private formatSummary;
|
|
82
|
+
/**
|
|
83
|
+
* Generate summary for tool events
|
|
84
|
+
*/
|
|
85
|
+
private generateToolSummary;
|
|
86
|
+
/**
|
|
87
|
+
* Get emoji for classification
|
|
88
|
+
*/
|
|
89
|
+
private getClassificationEmoji;
|
|
90
|
+
/**
|
|
91
|
+
* Calculate preliminary importance from signals
|
|
92
|
+
*/
|
|
93
|
+
private calculatePreliminaryImportance;
|
|
94
|
+
/**
|
|
95
|
+
* Extract key concepts from content (simple keyword extraction)
|
|
96
|
+
*/
|
|
97
|
+
private extractKeyConcepts;
|
|
98
|
+
/**
|
|
99
|
+
* Deduplicate and merge similar candidates
|
|
100
|
+
*/
|
|
101
|
+
private deduplicateCandidates;
|
|
102
|
+
/**
|
|
103
|
+
* Simple similarity calculation (Jaccard index on words)
|
|
104
|
+
*/
|
|
105
|
+
private calculateSimilarity;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=context-sweep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-sweep.d.ts","sourceRoot":"","sources":["../../src/memory/context-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EAIf,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAS3B,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM;IAK7C;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE;IAwCrD;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IA+EnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAkDvB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoD7B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA6C7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAuCnC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAwCvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAiBtC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+C7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAS5B"}
|