@kinqs/brainrouter-mcp-server 0.3.4 → 0.3.6
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/.env.example +121 -71
- package/README.md +88 -15
- package/dist/__tests__/cognitive-extractor.test.js +112 -0
- package/dist/__tests__/crypto.test.js +8 -1
- package/dist/__tests__/working-memory.test.js +67 -0
- package/dist/env-loader.js +47 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +12 -1
- package/dist/init.d.ts +1 -0
- package/dist/init.js +64 -0
- package/dist/memory/engine.js +21 -1
- package/dist/memory/pipeline/cognitive-extractor.js +19 -1
- package/dist/memory/recall.d.ts +3 -1
- package/dist/memory/recall.js +48 -3
- package/dist/memory/store/relevance-judge.d.ts +51 -0
- package/dist/memory/store/relevance-judge.js +196 -0
- package/dist/memory/working/canvas.js +11 -0
- package/package.json +2 -2
- package/dist/memory/config.d.ts +0 -2
- package/dist/memory/config.js +0 -3
- package/dist/memory/pipeline/l1-contradiction.d.ts +0 -7
- package/dist/memory/pipeline/l1-contradiction.js +0 -66
- package/dist/memory/pipeline/l1-dedup.d.ts +0 -23
- package/dist/memory/pipeline/l1-dedup.js +0 -39
- package/dist/memory/pipeline/l1-extractor.d.ts +0 -21
- package/dist/memory/pipeline/l1-extractor.js +0 -180
- package/dist/memory/pipeline/l2-direction-shift.d.ts +0 -10
- package/dist/memory/pipeline/l2-direction-shift.js +0 -27
- package/dist/memory/pipeline/l2-scene.d.ts +0 -15
- package/dist/memory/pipeline/l2-scene.js +0 -140
- package/dist/memory/pipeline/l3-distiller.d.ts +0 -15
- package/dist/memory/pipeline/l3-distiller.js +0 -40
- package/dist/memory/pipeline/task-queue.d.ts +0 -54
- package/dist/memory/pipeline/task-queue.js +0 -117
- package/dist/memory/prompts/graph-extraction-batch.d.ts +0 -14
- package/dist/memory/prompts/graph-extraction-batch.js +0 -54
- package/dist/memory/prompts/l1-contradiction-batch.d.ts +0 -16
- package/dist/memory/prompts/l1-contradiction-batch.js +0 -47
- package/dist/memory/prompts/l1-contradiction.d.ts +0 -1
- package/dist/memory/prompts/l1-contradiction.js +0 -25
- package/dist/memory/prompts/l1-extraction.d.ts +0 -10
- package/dist/memory/prompts/l1-extraction.js +0 -114
- package/dist/memory/prompts/l2-direction-shift.d.ts +0 -5
- package/dist/memory/prompts/l2-direction-shift.js +0 -32
- package/dist/memory/prompts/l2-scene-cluster.d.ts +0 -2
- package/dist/memory/prompts/l2-scene-cluster.js +0 -33
- package/dist/memory/prompts/l2-scene.d.ts +0 -7
- package/dist/memory/prompts/l2-scene.js +0 -40
- package/dist/memory/prompts/l3-persona.d.ts +0 -6
- package/dist/memory/prompts/l3-persona.js +0 -60
- package/dist/memory/store/types.d.ts +0 -101
- package/dist/memory/types.d.ts +0 -207
- package/dist/memory/types.js +0 -7
- package/dist/memory/validation.d.ts +0 -441
- package/dist/memory/validation.js +0 -129
- package/dist/tools/agent_memory_tools.d.ts +0 -485
- package/dist/tools/agent_memory_tools.js +0 -793
- package/dist/tools/get_doc.d.ts +0 -21
- package/dist/tools/get_doc.js +0 -24
- package/dist/tools/list_docs.d.ts +0 -15
- package/dist/tools/list_docs.js +0 -16
- package/dist/tools/update_doc.d.ts +0 -24
- package/dist/tools/update_doc.js +0 -35
- /package/dist/__tests__/{agent_mode.test.d.ts → cognitive-extractor.test.d.ts} +0 -0
- /package/dist/{memory/store/types.js → env-loader.d.ts} +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import type { GraphEdge, GraphNode, L0Record, L1FtsResult, L1Record, L2SceneRecord, L3PersonaRecord, SchedulerState, SkillHintsRecord, UserRecord, VectorSearchResult } from "../types.js";
|
|
2
|
-
export interface IMemoryStore {
|
|
3
|
-
init(): void;
|
|
4
|
-
initVec(dimensions: number): void;
|
|
5
|
-
upsertL0(record: L0Record): void;
|
|
6
|
-
getRecentL0Messages(userId: string, sessionKey: string, limit: number, afterIsoTime?: string): L0Record[];
|
|
7
|
-
getUnextractedL0Count(userId: string, sessionKey: string): number;
|
|
8
|
-
upsertL1(record: L1Record): void;
|
|
9
|
-
invalidateL1Record(userId: string, recordId: string, supersededById: string): void;
|
|
10
|
-
searchL1Fts(userId: string, query: string, limit: number): L1FtsResult[];
|
|
11
|
-
searchL1FtsAsOf(userId: string, query: string, limit: number, asOf: string): L1FtsResult[];
|
|
12
|
-
upsertL1Vec(recordId: string, embedding: Float32Array): void;
|
|
13
|
-
searchL1Vec(userId: string, queryEmbedding: Float32Array, limit: number): VectorSearchResult[];
|
|
14
|
-
upsertContradiction(data: {
|
|
15
|
-
id: string;
|
|
16
|
-
userId: string;
|
|
17
|
-
recordIdA: string;
|
|
18
|
-
recordIdB: string;
|
|
19
|
-
reason: string;
|
|
20
|
-
confidence: number;
|
|
21
|
-
createdTime?: string;
|
|
22
|
-
}): void;
|
|
23
|
-
getPendingContradictions(userId: string): any[];
|
|
24
|
-
resolveContradiction(id: string, userId: string, status: "resolved" | "dismissed"): void;
|
|
25
|
-
upsertSkillHints(skillName: string, hints: string, sourceFile?: string): void;
|
|
26
|
-
listSkillHints(): SkillHintsRecord[];
|
|
27
|
-
getSkillHints(skillName: string): string | null;
|
|
28
|
-
upsertL2Scene(record: L2SceneRecord): void;
|
|
29
|
-
getTopL2Scenes(userId: string, limit?: number): L2SceneRecord[];
|
|
30
|
-
decayL2HeatScores(userId: string, decayFactor?: number): void;
|
|
31
|
-
boostL2HeatScore(userId: string, sceneName: string, boost?: number): void;
|
|
32
|
-
getL1sByScene(userId: string, sceneName: string, limit?: number): any[];
|
|
33
|
-
getL2SceneCount(userId: string): number;
|
|
34
|
-
getColdL2Scenes(userId: string, limit: number): L2SceneRecord[];
|
|
35
|
-
deleteL2Scenes(userId: string, sceneIds: string[]): void;
|
|
36
|
-
getL2SceneByName(userId: string, sceneName: string): L2SceneRecord | null;
|
|
37
|
-
getDistinctSceneNames(userId: string): string[];
|
|
38
|
-
renameSceneInL1Records(userId: string, oldName: string, canonicalName: string): void;
|
|
39
|
-
upsertL3Persona(record: L3PersonaRecord): void;
|
|
40
|
-
getL3Persona(userId: string): L3PersonaRecord | null;
|
|
41
|
-
getPersonaAndInstructionL1s(userId: string, limit?: number): any[];
|
|
42
|
-
getSchedulerState(userId: string): SchedulerState;
|
|
43
|
-
incrementSchedulerL1Count(userId: string, count: number): void;
|
|
44
|
-
resetSchedulerL2Count(userId: string): void;
|
|
45
|
-
resetSchedulerL3Count(userId: string): void;
|
|
46
|
-
getAllGraphNodes(userId: string): GraphNode[];
|
|
47
|
-
upsertGraphNode(node: GraphNode): void;
|
|
48
|
-
upsertGraphEdge(edge: GraphEdge): void;
|
|
49
|
-
getGraphNodeByEntity(userId: string, entity: string): GraphNode | null;
|
|
50
|
-
getGraphNeighbors(userId: string, entityId: string, skillTag?: string, maxHops?: number): {
|
|
51
|
-
nodes: GraphNode[];
|
|
52
|
-
edges: GraphEdge[];
|
|
53
|
-
};
|
|
54
|
-
markCited(userId: string, recordIds: string[]): void;
|
|
55
|
-
incrementNeverCited(userId: string, recordIds: string[]): {
|
|
56
|
-
recordId: string;
|
|
57
|
-
neverCitedCount: number;
|
|
58
|
-
}[];
|
|
59
|
-
archiveL1Record(userId: string, recordId: string): void;
|
|
60
|
-
getRecentSkillContextL1s(userId: string, limit: number): {
|
|
61
|
-
skillTag: string;
|
|
62
|
-
createdTime: string;
|
|
63
|
-
}[];
|
|
64
|
-
createUser(userId: string, apiKey: string, displayName?: string, isAdmin?: boolean): UserRecord;
|
|
65
|
-
getUserByApiKey(apiKey: string): UserRecord | null;
|
|
66
|
-
getUserByEmail(email: string): UserRecord | null;
|
|
67
|
-
getUserById(userId: string): UserRecord | null;
|
|
68
|
-
updateUserPassword(userId: string, passwordHash: string): void;
|
|
69
|
-
updateUserEmail(userId: string, email: string): void;
|
|
70
|
-
updateUserDisplayName(userId: string, displayName: string): void;
|
|
71
|
-
updateUserStatus(userId: string, status: "active" | "disabled"): void;
|
|
72
|
-
updateUserApiKey(userId: string, apiKey: string): void;
|
|
73
|
-
setInviteToken(userId: string, token: string | null): void;
|
|
74
|
-
redeemInviteToken(token: string): UserRecord | null;
|
|
75
|
-
listUsers(): UserRecord[];
|
|
76
|
-
deleteUser(userId: string): void;
|
|
77
|
-
listMemories(userId: string, filters?: {
|
|
78
|
-
type?: string;
|
|
79
|
-
scene?: string;
|
|
80
|
-
skill?: string;
|
|
81
|
-
archived?: boolean;
|
|
82
|
-
}): Array<{
|
|
83
|
-
recordId: string;
|
|
84
|
-
content: string;
|
|
85
|
-
type: string;
|
|
86
|
-
priority: number;
|
|
87
|
-
sceneName: string;
|
|
88
|
-
skillTag: string;
|
|
89
|
-
createdTime: string;
|
|
90
|
-
citationCount: number;
|
|
91
|
-
neverCitedCount: number;
|
|
92
|
-
archived: boolean;
|
|
93
|
-
}>;
|
|
94
|
-
getMemoryStats(userId: string): {
|
|
95
|
-
total: number;
|
|
96
|
-
archived: number;
|
|
97
|
-
byType: Record<string, number>;
|
|
98
|
-
citationRate: number;
|
|
99
|
-
lastRecallAt: string | null;
|
|
100
|
-
};
|
|
101
|
-
}
|
package/dist/memory/types.d.ts
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BrainRouter Memory Types
|
|
3
|
-
*
|
|
4
|
-
* Defines the types and boundaries for the BrainRouter memory engine.
|
|
5
|
-
* Inspired by the reference architecture but scoped explicitly for MCP + Multi-tenant.
|
|
6
|
-
*/
|
|
7
|
-
export interface BrainRouterMemoryContext {
|
|
8
|
-
/** User identifier — REQUIRED. Enables multi-tenant isolation. */
|
|
9
|
-
userId: string;
|
|
10
|
-
/** Session identifier (unique per conversation session). */
|
|
11
|
-
sessionKey: string;
|
|
12
|
-
/** Sub-session identifier (optional). */
|
|
13
|
-
sessionId?: string;
|
|
14
|
-
/** Which BrainRouter skill is currently active (if any) */
|
|
15
|
-
activeSkill?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface L0Record {
|
|
18
|
-
id: string;
|
|
19
|
-
userId: string;
|
|
20
|
-
sessionKey: string;
|
|
21
|
-
sessionId: string;
|
|
22
|
-
role: string;
|
|
23
|
-
messageText: string;
|
|
24
|
-
recordedAt: string;
|
|
25
|
-
timestamp: number;
|
|
26
|
-
skillTag: string;
|
|
27
|
-
}
|
|
28
|
-
export type MemoryType = "persona" | "episodic" | "instruction" | "skill_context";
|
|
29
|
-
export interface L1Record {
|
|
30
|
-
id: string;
|
|
31
|
-
userId: string;
|
|
32
|
-
sessionKey: string;
|
|
33
|
-
sessionId: string;
|
|
34
|
-
content: string;
|
|
35
|
-
type: MemoryType;
|
|
36
|
-
priority: number;
|
|
37
|
-
sceneName: string;
|
|
38
|
-
skillTag: string;
|
|
39
|
-
halfLifeDays: number | null;
|
|
40
|
-
supersededBy: string | null;
|
|
41
|
-
invalidAt?: string | null;
|
|
42
|
-
timestampStr: string;
|
|
43
|
-
timestampStart: string;
|
|
44
|
-
timestampEnd: string;
|
|
45
|
-
createdTime: string;
|
|
46
|
-
updatedTime: string;
|
|
47
|
-
metadata: Record<string, unknown>;
|
|
48
|
-
citationCount: number;
|
|
49
|
-
lastCitedAt: string | null;
|
|
50
|
-
neverCitedCount: number;
|
|
51
|
-
archived: boolean;
|
|
52
|
-
}
|
|
53
|
-
export interface VectorSearchResult {
|
|
54
|
-
record_id: string;
|
|
55
|
-
user_id: string;
|
|
56
|
-
content: string;
|
|
57
|
-
type: string;
|
|
58
|
-
priority: number;
|
|
59
|
-
scene_name: string;
|
|
60
|
-
skill_tag: string;
|
|
61
|
-
score: number;
|
|
62
|
-
timestamp_str: string;
|
|
63
|
-
timestamp_start: string;
|
|
64
|
-
timestamp_end: string;
|
|
65
|
-
session_key: string;
|
|
66
|
-
session_id: string;
|
|
67
|
-
metadata_json: string;
|
|
68
|
-
created_time: string;
|
|
69
|
-
}
|
|
70
|
-
export interface L1FtsResult {
|
|
71
|
-
record_id: string;
|
|
72
|
-
user_id: string;
|
|
73
|
-
content: string;
|
|
74
|
-
type: string;
|
|
75
|
-
priority: number;
|
|
76
|
-
scene_name: string;
|
|
77
|
-
skill_tag: string;
|
|
78
|
-
score: number;
|
|
79
|
-
timestamp_str: string;
|
|
80
|
-
timestamp_start: string;
|
|
81
|
-
timestamp_end: string;
|
|
82
|
-
session_key: string;
|
|
83
|
-
session_id: string;
|
|
84
|
-
metadata_json: string;
|
|
85
|
-
created_time: string;
|
|
86
|
-
/** ACE feedback: number of times this memory was cited by the agent. */
|
|
87
|
-
citation_count?: number;
|
|
88
|
-
}
|
|
89
|
-
export interface RecalledMemory {
|
|
90
|
-
content: string;
|
|
91
|
-
score: number;
|
|
92
|
-
type: string;
|
|
93
|
-
recordId: string;
|
|
94
|
-
skillTag?: string;
|
|
95
|
-
}
|
|
96
|
-
export interface RecallResult {
|
|
97
|
-
/** L1 relevant memories — prepended to user prompt text (dynamic, per-turn). */
|
|
98
|
-
prependContext?: string;
|
|
99
|
-
/** Stable recall context appended to system prompt (persona, scene nav, tools guide). */
|
|
100
|
-
appendSystemContext?: string;
|
|
101
|
-
/** Recalled L1 memories with scores (for metrics/debugging). */
|
|
102
|
-
recalledL1Memories?: RecalledMemory[];
|
|
103
|
-
/** Strategy used. Phase 1 = keyword. */
|
|
104
|
-
recallStrategy: string;
|
|
105
|
-
/** L3 persona markdown (for metrics/debugging). */
|
|
106
|
-
personaSummary?: string;
|
|
107
|
-
/** Current most active scene name (for metrics/debugging). */
|
|
108
|
-
activeScene?: string;
|
|
109
|
-
}
|
|
110
|
-
export interface CaptureResult {
|
|
111
|
-
/** Number of L0 messages recorded. */
|
|
112
|
-
l0RecordedCount: number;
|
|
113
|
-
/** Whether L1 extraction was triggered this turn. */
|
|
114
|
-
l1ExtractionTriggered: boolean;
|
|
115
|
-
/** Number of L1 memories extracted (if triggered). */
|
|
116
|
-
l1ExtractedCount: number;
|
|
117
|
-
}
|
|
118
|
-
export interface EmbeddingServiceConfig {
|
|
119
|
-
endpoint?: string;
|
|
120
|
-
apiKey?: string;
|
|
121
|
-
model?: string;
|
|
122
|
-
dimensions?: number;
|
|
123
|
-
}
|
|
124
|
-
export interface RerankerServiceConfig {
|
|
125
|
-
endpoint?: string;
|
|
126
|
-
apiKey?: string;
|
|
127
|
-
model?: string;
|
|
128
|
-
topN?: number;
|
|
129
|
-
}
|
|
130
|
-
export interface SkillHintsRecord {
|
|
131
|
-
skillName: string;
|
|
132
|
-
hints: string;
|
|
133
|
-
sourceFile: string;
|
|
134
|
-
registeredAt: string;
|
|
135
|
-
}
|
|
136
|
-
export interface UserRecord {
|
|
137
|
-
userId: string;
|
|
138
|
-
apiKey: string;
|
|
139
|
-
passwordHash: string | null;
|
|
140
|
-
displayName: string;
|
|
141
|
-
email: string;
|
|
142
|
-
isAdmin: boolean;
|
|
143
|
-
status: "active" | "disabled";
|
|
144
|
-
inviteToken: string | null;
|
|
145
|
-
createdAt: string;
|
|
146
|
-
}
|
|
147
|
-
export interface PublicUserRecord {
|
|
148
|
-
userId: string;
|
|
149
|
-
displayName: string;
|
|
150
|
-
email: string;
|
|
151
|
-
isAdmin: boolean;
|
|
152
|
-
status: "active" | "disabled";
|
|
153
|
-
inviteToken: string | null;
|
|
154
|
-
createdAt: string;
|
|
155
|
-
}
|
|
156
|
-
export interface LLMRunParams {
|
|
157
|
-
prompt: string;
|
|
158
|
-
systemPrompt?: string;
|
|
159
|
-
taskId: string;
|
|
160
|
-
timeoutMs?: number;
|
|
161
|
-
}
|
|
162
|
-
export interface LLMRunner {
|
|
163
|
-
run(params: LLMRunParams): Promise<string>;
|
|
164
|
-
}
|
|
165
|
-
export interface L2SceneRecord {
|
|
166
|
-
id: string;
|
|
167
|
-
userId: string;
|
|
168
|
-
sceneName: string;
|
|
169
|
-
summaryMd: string;
|
|
170
|
-
heatScore: number;
|
|
171
|
-
lastActiveTime: string;
|
|
172
|
-
createdTime: string;
|
|
173
|
-
updatedTime: string;
|
|
174
|
-
}
|
|
175
|
-
export interface L3PersonaRecord {
|
|
176
|
-
userId: string;
|
|
177
|
-
personaMd: string;
|
|
178
|
-
l1CountAtGeneration: number;
|
|
179
|
-
createdTime: string;
|
|
180
|
-
updatedTime: string;
|
|
181
|
-
}
|
|
182
|
-
export interface SchedulerState {
|
|
183
|
-
l1CountSinceLastL2: number;
|
|
184
|
-
l1CountSinceLastL3: number;
|
|
185
|
-
totalL1Count: number;
|
|
186
|
-
}
|
|
187
|
-
export interface GraphNode {
|
|
188
|
-
id: string;
|
|
189
|
-
userId: string;
|
|
190
|
-
entity: string;
|
|
191
|
-
entityType: string;
|
|
192
|
-
skillTag: string;
|
|
193
|
-
confidence: number;
|
|
194
|
-
sourceRecordId: string;
|
|
195
|
-
createdTime: string;
|
|
196
|
-
}
|
|
197
|
-
export interface GraphEdge {
|
|
198
|
-
id: string;
|
|
199
|
-
userId: string;
|
|
200
|
-
fromNodeId: string;
|
|
201
|
-
toNodeId: string;
|
|
202
|
-
relation: string;
|
|
203
|
-
skillTag: string;
|
|
204
|
-
confidence: number;
|
|
205
|
-
sourceRecordId: string;
|
|
206
|
-
createdTime: string;
|
|
207
|
-
}
|