engram-sdk 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/CONTRIBUTING.md +65 -0
- package/Dockerfile +21 -0
- package/EVAL-FRAMEWORK.md +70 -0
- package/EVAL.md +127 -0
- package/LICENSE +17 -0
- package/README.md +309 -0
- package/ROADMAP.md +113 -0
- package/deploy/fly.toml +26 -0
- package/dist/auto-ingest.d.ts +3 -0
- package/dist/auto-ingest.d.ts.map +1 -0
- package/dist/auto-ingest.js +334 -0
- package/dist/auto-ingest.js.map +1 -0
- package/dist/brief.d.ts +45 -0
- package/dist/brief.d.ts.map +1 -0
- package/dist/brief.js +183 -0
- package/dist/brief.js.map +1 -0
- package/dist/claude-watcher.d.ts +3 -0
- package/dist/claude-watcher.d.ts.map +1 -0
- package/dist/claude-watcher.js +385 -0
- package/dist/claude-watcher.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +764 -0
- package/dist/cli.js.map +1 -0
- package/dist/embeddings.d.ts +42 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +145 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/eval.d.ts +2 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/eval.js +281 -0
- package/dist/eval.js.map +1 -0
- package/dist/extract.d.ts +11 -0
- package/dist/extract.d.ts.map +1 -0
- package/dist/extract.js +139 -0
- package/dist/extract.js.map +1 -0
- package/dist/hosted.d.ts +3 -0
- package/dist/hosted.d.ts.map +1 -0
- package/dist/hosted.js +144 -0
- package/dist/hosted.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +28 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +192 -0
- package/dist/ingest.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +349 -0
- package/dist/mcp.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +515 -0
- package/dist/server.js.map +1 -0
- package/dist/store.d.ts +87 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +548 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +204 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +77 -0
- package/dist/types.js.map +1 -0
- package/dist/vault.d.ts +116 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +1234 -0
- package/dist/vault.js.map +1 -0
- package/package.json +61 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const MemoryType: z.ZodEnum<["episodic", "semantic", "procedural"]>;
|
|
3
|
+
export type MemoryType = z.infer<typeof MemoryType>;
|
|
4
|
+
export declare const SourceType: z.ZodEnum<["conversation", "observation", "inference", "consolidation", "external", "manual"]>;
|
|
5
|
+
export type SourceType = z.infer<typeof SourceType>;
|
|
6
|
+
export declare const EdgeType: z.ZodEnum<["supports", "contradicts", "elaborates", "supersedes", "causes", "caused_by", "part_of", "instance_of", "associated_with", "temporal_next", "derived_from"]>;
|
|
7
|
+
export type EdgeType = z.infer<typeof EdgeType>;
|
|
8
|
+
export declare const MemoryStatus: z.ZodEnum<["active", "pending", "fulfilled", "superseded", "archived"]>;
|
|
9
|
+
export type MemoryStatus = z.infer<typeof MemoryStatus>;
|
|
10
|
+
export declare const Visibility: z.ZodEnum<["private", "owner_agents", "shared", "public"]>;
|
|
11
|
+
export type Visibility = z.infer<typeof Visibility>;
|
|
12
|
+
export interface Memory {
|
|
13
|
+
id: string;
|
|
14
|
+
type: MemoryType;
|
|
15
|
+
content: string;
|
|
16
|
+
summary: string;
|
|
17
|
+
source: {
|
|
18
|
+
type: SourceType;
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
agentId?: string;
|
|
21
|
+
evidence?: string[];
|
|
22
|
+
timestamp: string;
|
|
23
|
+
};
|
|
24
|
+
createdAt: string;
|
|
25
|
+
lastAccessedAt: string;
|
|
26
|
+
lastModifiedAt: string;
|
|
27
|
+
accessCount: number;
|
|
28
|
+
expiresAt?: string;
|
|
29
|
+
salience: number;
|
|
30
|
+
confidence: number;
|
|
31
|
+
stability: number;
|
|
32
|
+
entities: string[];
|
|
33
|
+
topics: string[];
|
|
34
|
+
status: MemoryStatus;
|
|
35
|
+
visibility: Visibility;
|
|
36
|
+
embedding?: number[];
|
|
37
|
+
}
|
|
38
|
+
export interface Edge {
|
|
39
|
+
id: string;
|
|
40
|
+
sourceId: string;
|
|
41
|
+
targetId: string;
|
|
42
|
+
type: EdgeType;
|
|
43
|
+
strength: number;
|
|
44
|
+
createdAt: string;
|
|
45
|
+
}
|
|
46
|
+
export interface Entity {
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
type: string;
|
|
50
|
+
aliases: string[];
|
|
51
|
+
properties: Record<string, unknown>;
|
|
52
|
+
firstSeen: string;
|
|
53
|
+
lastSeen: string;
|
|
54
|
+
memoryCount: number;
|
|
55
|
+
importance: number;
|
|
56
|
+
}
|
|
57
|
+
export declare const RememberInputSchema: z.ZodObject<{
|
|
58
|
+
content: z.ZodString;
|
|
59
|
+
type: z.ZodDefault<z.ZodEnum<["episodic", "semantic", "procedural"]>>;
|
|
60
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
61
|
+
entities: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
62
|
+
topics: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
63
|
+
salience: z.ZodDefault<z.ZodNumber>;
|
|
64
|
+
confidence: z.ZodDefault<z.ZodNumber>;
|
|
65
|
+
status: z.ZodDefault<z.ZodEnum<["active", "pending", "fulfilled", "superseded", "archived"]>>;
|
|
66
|
+
visibility: z.ZodDefault<z.ZodEnum<["private", "owner_agents", "shared", "public"]>>;
|
|
67
|
+
source: z.ZodOptional<z.ZodObject<{
|
|
68
|
+
type: z.ZodDefault<z.ZodEnum<["conversation", "observation", "inference", "consolidation", "external", "manual"]>>;
|
|
69
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
70
|
+
agentId: z.ZodOptional<z.ZodString>;
|
|
71
|
+
evidence: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
72
|
+
}, "strip", z.ZodTypeAny, {
|
|
73
|
+
type: "conversation" | "observation" | "inference" | "consolidation" | "external" | "manual";
|
|
74
|
+
sessionId?: string | undefined;
|
|
75
|
+
agentId?: string | undefined;
|
|
76
|
+
evidence?: string[] | undefined;
|
|
77
|
+
}, {
|
|
78
|
+
sessionId?: string | undefined;
|
|
79
|
+
type?: "conversation" | "observation" | "inference" | "consolidation" | "external" | "manual" | undefined;
|
|
80
|
+
agentId?: string | undefined;
|
|
81
|
+
evidence?: string[] | undefined;
|
|
82
|
+
}>>;
|
|
83
|
+
expiresAt: z.ZodOptional<z.ZodString>;
|
|
84
|
+
}, "strip", z.ZodTypeAny, {
|
|
85
|
+
type: "episodic" | "semantic" | "procedural";
|
|
86
|
+
status: "active" | "pending" | "fulfilled" | "superseded" | "archived";
|
|
87
|
+
content: string;
|
|
88
|
+
entities: string[];
|
|
89
|
+
topics: string[];
|
|
90
|
+
salience: number;
|
|
91
|
+
confidence: number;
|
|
92
|
+
visibility: "private" | "owner_agents" | "shared" | "public";
|
|
93
|
+
summary?: string | undefined;
|
|
94
|
+
source?: {
|
|
95
|
+
type: "conversation" | "observation" | "inference" | "consolidation" | "external" | "manual";
|
|
96
|
+
sessionId?: string | undefined;
|
|
97
|
+
agentId?: string | undefined;
|
|
98
|
+
evidence?: string[] | undefined;
|
|
99
|
+
} | undefined;
|
|
100
|
+
expiresAt?: string | undefined;
|
|
101
|
+
}, {
|
|
102
|
+
content: string;
|
|
103
|
+
type?: "episodic" | "semantic" | "procedural" | undefined;
|
|
104
|
+
status?: "active" | "pending" | "fulfilled" | "superseded" | "archived" | undefined;
|
|
105
|
+
summary?: string | undefined;
|
|
106
|
+
entities?: string[] | undefined;
|
|
107
|
+
topics?: string[] | undefined;
|
|
108
|
+
salience?: number | undefined;
|
|
109
|
+
confidence?: number | undefined;
|
|
110
|
+
visibility?: "private" | "owner_agents" | "shared" | "public" | undefined;
|
|
111
|
+
source?: {
|
|
112
|
+
sessionId?: string | undefined;
|
|
113
|
+
type?: "conversation" | "observation" | "inference" | "consolidation" | "external" | "manual" | undefined;
|
|
114
|
+
agentId?: string | undefined;
|
|
115
|
+
evidence?: string[] | undefined;
|
|
116
|
+
} | undefined;
|
|
117
|
+
expiresAt?: string | undefined;
|
|
118
|
+
}>;
|
|
119
|
+
export type RememberInput = z.input<typeof RememberInputSchema>;
|
|
120
|
+
export type RememberParsed = z.output<typeof RememberInputSchema>;
|
|
121
|
+
export declare const RecallInputSchema: z.ZodObject<{
|
|
122
|
+
context: z.ZodString;
|
|
123
|
+
entities: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
124
|
+
topics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
125
|
+
types: z.ZodOptional<z.ZodArray<z.ZodEnum<["episodic", "semantic", "procedural"]>, "many">>;
|
|
126
|
+
temporalFocus: z.ZodDefault<z.ZodEnum<["recent", "upcoming", "all"]>>;
|
|
127
|
+
minSalience: z.ZodDefault<z.ZodNumber>;
|
|
128
|
+
minConfidence: z.ZodDefault<z.ZodNumber>;
|
|
129
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
130
|
+
spread: z.ZodDefault<z.ZodBoolean>;
|
|
131
|
+
spreadHops: z.ZodDefault<z.ZodNumber>;
|
|
132
|
+
spreadDecay: z.ZodDefault<z.ZodNumber>;
|
|
133
|
+
spreadMinActivation: z.ZodDefault<z.ZodNumber>;
|
|
134
|
+
spreadEntityHops: z.ZodDefault<z.ZodBoolean>;
|
|
135
|
+
}, "strip", z.ZodTypeAny, {
|
|
136
|
+
context: string;
|
|
137
|
+
temporalFocus: "recent" | "upcoming" | "all";
|
|
138
|
+
minSalience: number;
|
|
139
|
+
minConfidence: number;
|
|
140
|
+
limit: number;
|
|
141
|
+
spread: boolean;
|
|
142
|
+
spreadHops: number;
|
|
143
|
+
spreadDecay: number;
|
|
144
|
+
spreadMinActivation: number;
|
|
145
|
+
spreadEntityHops: boolean;
|
|
146
|
+
entities?: string[] | undefined;
|
|
147
|
+
topics?: string[] | undefined;
|
|
148
|
+
types?: ("episodic" | "semantic" | "procedural")[] | undefined;
|
|
149
|
+
}, {
|
|
150
|
+
context: string;
|
|
151
|
+
entities?: string[] | undefined;
|
|
152
|
+
topics?: string[] | undefined;
|
|
153
|
+
types?: ("episodic" | "semantic" | "procedural")[] | undefined;
|
|
154
|
+
temporalFocus?: "recent" | "upcoming" | "all" | undefined;
|
|
155
|
+
minSalience?: number | undefined;
|
|
156
|
+
minConfidence?: number | undefined;
|
|
157
|
+
limit?: number | undefined;
|
|
158
|
+
spread?: boolean | undefined;
|
|
159
|
+
spreadHops?: number | undefined;
|
|
160
|
+
spreadDecay?: number | undefined;
|
|
161
|
+
spreadMinActivation?: number | undefined;
|
|
162
|
+
spreadEntityHops?: boolean | undefined;
|
|
163
|
+
}>;
|
|
164
|
+
export type RecallInput = z.input<typeof RecallInputSchema>;
|
|
165
|
+
export type RecallParsed = z.output<typeof RecallInputSchema>;
|
|
166
|
+
export interface ConsolidationReport {
|
|
167
|
+
startedAt: string;
|
|
168
|
+
completedAt: string;
|
|
169
|
+
episodesProcessed: number;
|
|
170
|
+
semanticMemoriesCreated: number;
|
|
171
|
+
semanticMemoriesUpdated: number;
|
|
172
|
+
entitiesDiscovered: number;
|
|
173
|
+
connectionsFormed: number;
|
|
174
|
+
contradictionsFound: number;
|
|
175
|
+
memoriesDecayed: number;
|
|
176
|
+
memoriesArchived: number;
|
|
177
|
+
}
|
|
178
|
+
export interface VaultConfig {
|
|
179
|
+
/** Unique owner identifier */
|
|
180
|
+
owner: string;
|
|
181
|
+
/** Path to SQLite database file (default: ./engram.db) */
|
|
182
|
+
dbPath?: string;
|
|
183
|
+
/** Agent ID for source tracking */
|
|
184
|
+
agentId?: string;
|
|
185
|
+
/** Session ID for source tracking */
|
|
186
|
+
sessionId?: string;
|
|
187
|
+
/** LLM provider for consolidation and embeddings */
|
|
188
|
+
llm?: {
|
|
189
|
+
provider: 'anthropic' | 'openai' | 'gemini';
|
|
190
|
+
apiKey: string;
|
|
191
|
+
model?: string;
|
|
192
|
+
embeddingModel?: string;
|
|
193
|
+
};
|
|
194
|
+
/** Decay settings */
|
|
195
|
+
decay?: {
|
|
196
|
+
/** Base half-life in hours for new memories (default: 168 = 1 week) */
|
|
197
|
+
halfLifeHours?: number;
|
|
198
|
+
/** Retrievability threshold below which memories are archived (default: 0.05) */
|
|
199
|
+
archiveThreshold?: number;
|
|
200
|
+
/** Salience weight factor for stability (default: 2.0) */
|
|
201
|
+
salienceWeight?: number;
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Memory Types — The core data model for Engram
|
|
4
|
+
// ============================================================
|
|
5
|
+
export const MemoryType = z.enum(['episodic', 'semantic', 'procedural']);
|
|
6
|
+
export const SourceType = z.enum([
|
|
7
|
+
'conversation', // From a chat/interaction
|
|
8
|
+
'observation', // Agent observed something
|
|
9
|
+
'inference', // Derived from other memories
|
|
10
|
+
'consolidation', // Created during consolidation
|
|
11
|
+
'external', // Imported from external source
|
|
12
|
+
'manual', // Explicitly created by human
|
|
13
|
+
]);
|
|
14
|
+
export const EdgeType = z.enum([
|
|
15
|
+
'supports', // This memory supports another
|
|
16
|
+
'contradicts', // This memory contradicts another
|
|
17
|
+
'elaborates', // This memory adds detail to another
|
|
18
|
+
'supersedes', // This memory replaces another
|
|
19
|
+
'causes', // This memory describes a cause
|
|
20
|
+
'caused_by', // This memory describes an effect
|
|
21
|
+
'part_of', // This memory is part of a larger concept
|
|
22
|
+
'instance_of', // This is a specific instance of a general pattern
|
|
23
|
+
'associated_with', // General association
|
|
24
|
+
'temporal_next', // This happened after another memory
|
|
25
|
+
'derived_from', // Created from this memory during consolidation
|
|
26
|
+
]);
|
|
27
|
+
export const MemoryStatus = z.enum([
|
|
28
|
+
'active', // Current, valid memory
|
|
29
|
+
'pending', // Commitment/plan not yet fulfilled
|
|
30
|
+
'fulfilled', // Commitment completed
|
|
31
|
+
'superseded', // Replaced by newer information
|
|
32
|
+
'archived', // Decayed beyond usefulness
|
|
33
|
+
]);
|
|
34
|
+
export const Visibility = z.enum([
|
|
35
|
+
'private', // Only the creating agent
|
|
36
|
+
'owner_agents', // All of the owner's agents
|
|
37
|
+
'shared', // Specific principals
|
|
38
|
+
'public', // Anyone
|
|
39
|
+
]);
|
|
40
|
+
// ============================================================
|
|
41
|
+
// API Input Types
|
|
42
|
+
// ============================================================
|
|
43
|
+
export const RememberInputSchema = z.object({
|
|
44
|
+
content: z.string().min(1),
|
|
45
|
+
type: MemoryType.default('episodic'),
|
|
46
|
+
summary: z.string().optional(),
|
|
47
|
+
entities: z.array(z.string()).default([]),
|
|
48
|
+
topics: z.array(z.string()).default([]),
|
|
49
|
+
salience: z.number().min(0).max(1).default(0.5),
|
|
50
|
+
confidence: z.number().min(0).max(1).default(0.8),
|
|
51
|
+
status: MemoryStatus.default('active'),
|
|
52
|
+
visibility: Visibility.default('owner_agents'),
|
|
53
|
+
source: z.object({
|
|
54
|
+
type: SourceType.default('conversation'),
|
|
55
|
+
sessionId: z.string().optional(),
|
|
56
|
+
agentId: z.string().optional(),
|
|
57
|
+
evidence: z.array(z.string()).optional(),
|
|
58
|
+
}).optional(),
|
|
59
|
+
expiresAt: z.string().optional(),
|
|
60
|
+
});
|
|
61
|
+
export const RecallInputSchema = z.object({
|
|
62
|
+
context: z.string().min(1),
|
|
63
|
+
entities: z.array(z.string()).optional(),
|
|
64
|
+
topics: z.array(z.string()).optional(),
|
|
65
|
+
types: z.array(MemoryType).optional(),
|
|
66
|
+
temporalFocus: z.enum(['recent', 'upcoming', 'all']).default('all'),
|
|
67
|
+
minSalience: z.number().min(0).max(1).default(0),
|
|
68
|
+
minConfidence: z.number().min(0).max(1).default(0),
|
|
69
|
+
limit: z.number().int().min(1).max(100).default(20),
|
|
70
|
+
// Spreading activation parameters
|
|
71
|
+
spread: z.boolean().default(true), // Enable spreading activation (default ON)
|
|
72
|
+
spreadHops: z.number().int().min(0).max(5).default(2), // Max graph hops
|
|
73
|
+
spreadDecay: z.number().min(0).max(1).default(0.5), // Activation decay per hop
|
|
74
|
+
spreadMinActivation: z.number().min(0).max(1).default(0.1), // Stop spreading below this
|
|
75
|
+
spreadEntityHops: z.boolean().default(true), // Also spread via shared entities (not just edges)
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/vault.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { Memory, Edge, Entity, RememberInput, RecallInput, ConsolidationReport, VaultConfig } from './types.js';
|
|
2
|
+
import type { EmbeddingProvider } from './embeddings.js';
|
|
3
|
+
export declare class Vault {
|
|
4
|
+
private store;
|
|
5
|
+
private config;
|
|
6
|
+
private embedder;
|
|
7
|
+
/** Track all in-flight embedding computations so close() can await them */
|
|
8
|
+
private pendingEmbeddings;
|
|
9
|
+
constructor(config: VaultConfig, embedder?: EmbeddingProvider);
|
|
10
|
+
remember(input: RememberInput | string): Memory;
|
|
11
|
+
/**
|
|
12
|
+
* Dedup: after storing a memory and its embedding, check if a near-identical
|
|
13
|
+
* memory already exists. If so, keep the better one (higher salience/confidence,
|
|
14
|
+
* or newer if semantic) and supersede the other.
|
|
15
|
+
*
|
|
16
|
+
* Threshold: cosine distance <= 0.08 (similarity >= 0.92) = near-duplicate.
|
|
17
|
+
* Only dedup within the same type (don't merge episodic into semantic).
|
|
18
|
+
*/
|
|
19
|
+
private dedup;
|
|
20
|
+
/** Compute embedding and store it — can be awaited if needed */
|
|
21
|
+
computeAndStoreEmbedding(memoryId: string, content: string): Promise<void>;
|
|
22
|
+
/** Batch compute embeddings for all memories missing them */
|
|
23
|
+
backfillEmbeddings(): Promise<number>;
|
|
24
|
+
recall(input: RecallInput | string): Promise<Memory[]>;
|
|
25
|
+
private spreadActivation;
|
|
26
|
+
private edgeTypeWeight;
|
|
27
|
+
forget(id: string, hard?: boolean): void;
|
|
28
|
+
connect(sourceId: string, targetId: string, type: Edge['type'], strength?: number): Edge;
|
|
29
|
+
neighbors(memoryId: string, depth?: number): Memory[];
|
|
30
|
+
consolidate(): Promise<ConsolidationReport>;
|
|
31
|
+
briefing(context?: string, limit?: number): Promise<{
|
|
32
|
+
summary: string;
|
|
33
|
+
keyFacts: Array<{
|
|
34
|
+
content: string;
|
|
35
|
+
salience: number;
|
|
36
|
+
entities: string[];
|
|
37
|
+
}>;
|
|
38
|
+
activeCommitments: Array<{
|
|
39
|
+
content: string;
|
|
40
|
+
status: string;
|
|
41
|
+
entities: string[];
|
|
42
|
+
}>;
|
|
43
|
+
recentActivity: Array<{
|
|
44
|
+
content: string;
|
|
45
|
+
when: string;
|
|
46
|
+
}>;
|
|
47
|
+
topEntities: Array<{
|
|
48
|
+
name: string;
|
|
49
|
+
type: string;
|
|
50
|
+
memoryCount: number;
|
|
51
|
+
}>;
|
|
52
|
+
contradictions: Array<{
|
|
53
|
+
a: string;
|
|
54
|
+
b: string;
|
|
55
|
+
}>;
|
|
56
|
+
stats: ReturnType<Vault['stats']>;
|
|
57
|
+
}>;
|
|
58
|
+
contradictions(limit?: number): Array<{
|
|
59
|
+
memoryA: Memory;
|
|
60
|
+
memoryB: Memory;
|
|
61
|
+
type: 'explicit_edge' | 'superseded_conflict' | 'entity_conflict';
|
|
62
|
+
description: string;
|
|
63
|
+
}>;
|
|
64
|
+
surface(input: {
|
|
65
|
+
context: string;
|
|
66
|
+
/** Currently active entities (people, projects in the conversation) */
|
|
67
|
+
activeEntities?: string[];
|
|
68
|
+
/** Currently active topics */
|
|
69
|
+
activeTopics?: string[];
|
|
70
|
+
/** Memory IDs the agent has already seen this session (don't re-surface) */
|
|
71
|
+
seen?: string[];
|
|
72
|
+
/** Minimum salience to surface (default: 0.4 — only important stuff) */
|
|
73
|
+
minSalience?: number;
|
|
74
|
+
/** Minimum hours since last accessed (default: 1 — don't repeat recent) */
|
|
75
|
+
minHoursSinceAccess?: number;
|
|
76
|
+
/** Maximum results (default: 3 — keep it focused) */
|
|
77
|
+
limit?: number;
|
|
78
|
+
/** Relevance threshold 0-1 (default: 0.3 — must be genuinely relevant) */
|
|
79
|
+
relevanceThreshold?: number;
|
|
80
|
+
}): Promise<Array<{
|
|
81
|
+
memory: Memory;
|
|
82
|
+
reason: string;
|
|
83
|
+
relevance: number;
|
|
84
|
+
activationPath: string;
|
|
85
|
+
}>>;
|
|
86
|
+
/** Classify why a memory is being proactively surfaced */
|
|
87
|
+
private classifySurfaceReason;
|
|
88
|
+
/** Trace how a memory was activated (simplified path description) */
|
|
89
|
+
private traceActivationPath;
|
|
90
|
+
/** Composite ranking score for proactive surfacing */
|
|
91
|
+
private surfaceRankScore;
|
|
92
|
+
stats(): {
|
|
93
|
+
total: number;
|
|
94
|
+
episodic: number;
|
|
95
|
+
semantic: number;
|
|
96
|
+
procedural: number;
|
|
97
|
+
entities: number;
|
|
98
|
+
};
|
|
99
|
+
entities(): Entity[];
|
|
100
|
+
export(): {
|
|
101
|
+
memories: Memory[];
|
|
102
|
+
edges: Edge[];
|
|
103
|
+
entities: Entity[];
|
|
104
|
+
};
|
|
105
|
+
close(): Promise<void>;
|
|
106
|
+
/** Flush all pending embedding computations without closing */
|
|
107
|
+
flush(): Promise<number>;
|
|
108
|
+
private extractWithLLM;
|
|
109
|
+
private ruleBasedConsolidate;
|
|
110
|
+
private llmConsolidate;
|
|
111
|
+
private callLLM;
|
|
112
|
+
private keywordSearch;
|
|
113
|
+
private extractKeywords;
|
|
114
|
+
private addCandidate;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"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"}
|