ai-memory-layer 2.0.1 → 3.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/CHANGELOG.md +19 -12
- package/README.md +435 -320
- package/bin/memory-server.mjs +0 -0
- package/dist/adapters/memory/embeddings.d.ts.map +1 -1
- package/dist/adapters/memory/embeddings.js +12 -1
- package/dist/adapters/memory/embeddings.js.map +1 -1
- package/dist/adapters/memory/index.d.ts.map +1 -1
- package/dist/adapters/memory/index.js +1281 -48
- package/dist/adapters/memory/index.js.map +1 -1
- package/dist/adapters/postgres/index.d.ts +1 -0
- package/dist/adapters/postgres/index.d.ts.map +1 -1
- package/dist/adapters/postgres/index.js +1770 -42
- package/dist/adapters/postgres/index.js.map +1 -1
- package/dist/adapters/sqlite/embeddings.d.ts.map +1 -1
- package/dist/adapters/sqlite/embeddings.js +49 -12
- package/dist/adapters/sqlite/embeddings.js.map +1 -1
- package/dist/adapters/sqlite/index.d.ts.map +1 -1
- package/dist/adapters/sqlite/index.js +1720 -38
- package/dist/adapters/sqlite/index.js.map +1 -1
- package/dist/adapters/sqlite/mappers.d.ts +39 -4
- package/dist/adapters/sqlite/mappers.d.ts.map +1 -1
- package/dist/adapters/sqlite/mappers.js +87 -0
- package/dist/adapters/sqlite/mappers.js.map +1 -1
- package/dist/adapters/sqlite/schema.d.ts +1 -1
- package/dist/adapters/sqlite/schema.d.ts.map +1 -1
- package/dist/adapters/sqlite/schema.js +297 -1
- package/dist/adapters/sqlite/schema.js.map +1 -1
- package/dist/adapters/sync-to-async.d.ts.map +1 -1
- package/dist/adapters/sync-to-async.js +54 -0
- package/dist/adapters/sync-to-async.js.map +1 -1
- package/dist/contracts/async-storage.d.ts +61 -1
- package/dist/contracts/async-storage.d.ts.map +1 -1
- package/dist/contracts/cognitive.d.ts +37 -0
- package/dist/contracts/cognitive.d.ts.map +1 -0
- package/dist/contracts/cognitive.js +24 -0
- package/dist/contracts/cognitive.js.map +1 -0
- package/dist/contracts/coordination.d.ts +101 -0
- package/dist/contracts/coordination.d.ts.map +1 -0
- package/dist/contracts/coordination.js +26 -0
- package/dist/contracts/coordination.js.map +1 -0
- package/dist/contracts/embedding.d.ts +1 -1
- package/dist/contracts/embedding.d.ts.map +1 -1
- package/dist/contracts/errors.d.ts +28 -0
- package/dist/contracts/errors.d.ts.map +1 -0
- package/dist/contracts/errors.js +41 -0
- package/dist/contracts/errors.js.map +1 -0
- package/dist/contracts/identity.d.ts +2 -0
- package/dist/contracts/identity.d.ts.map +1 -1
- package/dist/contracts/identity.js +26 -1
- package/dist/contracts/identity.js.map +1 -1
- package/dist/contracts/observability.d.ts +2 -1
- package/dist/contracts/observability.d.ts.map +1 -1
- package/dist/contracts/observability.js +11 -0
- package/dist/contracts/observability.js.map +1 -1
- package/dist/contracts/profile.d.ts +29 -0
- package/dist/contracts/profile.d.ts.map +1 -0
- package/dist/contracts/profile.js +2 -0
- package/dist/contracts/profile.js.map +1 -0
- package/dist/contracts/session-state.d.ts +10 -0
- package/dist/contracts/session-state.d.ts.map +1 -0
- package/dist/contracts/session-state.js +2 -0
- package/dist/contracts/session-state.js.map +1 -0
- package/dist/contracts/storage.d.ts +73 -1
- package/dist/contracts/storage.d.ts.map +1 -1
- package/dist/contracts/storage.js +16 -1
- package/dist/contracts/storage.js.map +1 -1
- package/dist/contracts/temporal.d.ts +112 -0
- package/dist/contracts/temporal.d.ts.map +1 -0
- package/dist/contracts/temporal.js +31 -0
- package/dist/contracts/temporal.js.map +1 -0
- package/dist/contracts/types.d.ts +135 -0
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js +27 -0
- package/dist/contracts/types.js.map +1 -1
- package/dist/core/associations.d.ts +18 -0
- package/dist/core/associations.d.ts.map +1 -0
- package/dist/core/associations.js +185 -0
- package/dist/core/associations.js.map +1 -0
- package/dist/core/circuit-breaker.d.ts +9 -0
- package/dist/core/circuit-breaker.d.ts.map +1 -1
- package/dist/core/circuit-breaker.js +13 -1
- package/dist/core/circuit-breaker.js.map +1 -1
- package/dist/core/cognitive.d.ts +5 -0
- package/dist/core/cognitive.d.ts.map +1 -0
- package/dist/core/cognitive.js +120 -0
- package/dist/core/cognitive.js.map +1 -0
- package/dist/core/context.d.ts +72 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +471 -45
- package/dist/core/context.js.map +1 -1
- package/dist/core/episodic.d.ts +28 -0
- package/dist/core/episodic.d.ts.map +1 -0
- package/dist/core/episodic.js +371 -0
- package/dist/core/episodic.js.map +1 -0
- package/dist/core/formatter.d.ts +4 -0
- package/dist/core/formatter.d.ts.map +1 -1
- package/dist/core/formatter.js +103 -0
- package/dist/core/formatter.js.map +1 -1
- package/dist/core/maintenance.d.ts +1 -0
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +75 -0
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/manager.d.ts +159 -7
- package/dist/core/manager.d.ts.map +1 -1
- package/dist/core/manager.js +740 -31
- package/dist/core/manager.js.map +1 -1
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +210 -178
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/playbook.d.ts +35 -0
- package/dist/core/playbook.d.ts.map +1 -0
- package/dist/core/playbook.js +184 -0
- package/dist/core/playbook.js.map +1 -0
- package/dist/core/profile.d.ts +8 -0
- package/dist/core/profile.d.ts.map +1 -0
- package/dist/core/profile.js +103 -0
- package/dist/core/profile.js.map +1 -0
- package/dist/core/quick.d.ts +5 -0
- package/dist/core/quick.d.ts.map +1 -1
- package/dist/core/quick.js +10 -1
- package/dist/core/quick.js.map +1 -1
- package/dist/core/runtime.d.ts +17 -1
- package/dist/core/runtime.d.ts.map +1 -1
- package/dist/core/runtime.js +88 -5
- package/dist/core/runtime.js.map +1 -1
- package/dist/core/streaming.d.ts +1 -1
- package/dist/core/streaming.d.ts.map +1 -1
- package/dist/core/temporal.d.ts +29 -0
- package/dist/core/temporal.d.ts.map +1 -0
- package/dist/core/temporal.js +447 -0
- package/dist/core/temporal.js.map +1 -0
- package/dist/core/validation.d.ts +3 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +25 -10
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-detect.d.ts +17 -0
- package/dist/core/workspace-detect.d.ts.map +1 -0
- package/dist/core/workspace-detect.js +55 -0
- package/dist/core/workspace-detect.js.map +1 -0
- package/dist/embeddings/resilience.d.ts.map +1 -1
- package/dist/embeddings/resilience.js +19 -8
- package/dist/embeddings/resilience.js.map +1 -1
- package/dist/index.d.ts +21 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/claude-agent.d.ts +6 -0
- package/dist/integrations/claude-agent.d.ts.map +1 -1
- package/dist/integrations/claude-agent.js +5 -1
- package/dist/integrations/claude-agent.js.map +1 -1
- package/dist/integrations/claude-tools.d.ts +5 -4
- package/dist/integrations/claude-tools.d.ts.map +1 -1
- package/dist/integrations/claude-tools.js +155 -2
- package/dist/integrations/claude-tools.js.map +1 -1
- package/dist/integrations/middleware.d.ts +6 -0
- package/dist/integrations/middleware.d.ts.map +1 -1
- package/dist/integrations/middleware.js +11 -1
- package/dist/integrations/middleware.js.map +1 -1
- package/dist/integrations/openai-tools.d.ts +5 -4
- package/dist/integrations/openai-tools.d.ts.map +1 -1
- package/dist/integrations/openai-tools.js +170 -2
- package/dist/integrations/openai-tools.js.map +1 -1
- package/dist/integrations/vercel-ai.d.ts +6 -0
- package/dist/integrations/vercel-ai.d.ts.map +1 -1
- package/dist/integrations/vercel-ai.js +4 -0
- package/dist/integrations/vercel-ai.js.map +1 -1
- package/dist/server/http-server.d.ts +8 -0
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +976 -58
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/mcp-server.d.ts +8 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +1157 -37
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/parsing.d.ts +12 -0
- package/dist/server/parsing.d.ts.map +1 -0
- package/dist/server/parsing.js +42 -0
- package/dist/server/parsing.js.map +1 -0
- package/dist/summarizers/prompts.d.ts +4 -0
- package/dist/summarizers/prompts.d.ts.map +1 -1
- package/dist/summarizers/prompts.js +42 -0
- package/dist/summarizers/prompts.js.map +1 -1
- package/docs/ULTIMATE_MEMORY_LAYER_ROADMAP.md +291 -0
- package/docs/prd.json +1498 -0
- package/openapi.yaml +1945 -112
- package/package.json +4 -2
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { UniqueConstraintError } from '../contracts/storage.js';
|
|
2
|
+
export async function traverseAssociations(adapter, scope, startKind, startId, options = {}) {
|
|
3
|
+
if (!Number.isInteger(startId) || startId <= 0) {
|
|
4
|
+
throw new Error(`traverseAssociations: startId must be a positive integer, got ${startId}`);
|
|
5
|
+
}
|
|
6
|
+
const maxDepth = normalizeTraversalBound(options.maxDepth, 2, 'maxDepth');
|
|
7
|
+
const maxNodes = normalizeTraversalBound(options.maxNodes, 20, 'maxNodes');
|
|
8
|
+
const visitedKey = (kind, id) => `${kind}:${id}`;
|
|
9
|
+
const visited = new Set();
|
|
10
|
+
const nodes = [];
|
|
11
|
+
const edges = [];
|
|
12
|
+
const edgeIds = new Set();
|
|
13
|
+
// Cap includes the start node. If maxNodes is 0 (or effectively unusable),
|
|
14
|
+
// return an empty graph rather than silently allowing a single-node result.
|
|
15
|
+
if (maxNodes < 1) {
|
|
16
|
+
return { nodes, edges };
|
|
17
|
+
}
|
|
18
|
+
const queue = [
|
|
19
|
+
{ kind: startKind, id: startId, depth: 0 },
|
|
20
|
+
];
|
|
21
|
+
visited.add(visitedKey(startKind, startId));
|
|
22
|
+
nodes.push({ kind: startKind, id: startId });
|
|
23
|
+
while (queue.length > 0 && nodes.length < maxNodes) {
|
|
24
|
+
const current = queue.shift();
|
|
25
|
+
if (current.depth >= maxDepth)
|
|
26
|
+
continue;
|
|
27
|
+
const [fromEdges, toEdges] = await Promise.all([
|
|
28
|
+
adapter.getAssociationsFrom(current.kind, current.id, scope),
|
|
29
|
+
adapter.getAssociationsTo(current.kind, current.id, scope),
|
|
30
|
+
]);
|
|
31
|
+
for (const edge of [...fromEdges, ...toEdges]) {
|
|
32
|
+
if (edgeIds.has(edge.id))
|
|
33
|
+
continue;
|
|
34
|
+
// Determine the neighbor from the edge
|
|
35
|
+
const neighborKind = edge.source_kind === current.kind && edge.source_id === current.id
|
|
36
|
+
? edge.target_kind
|
|
37
|
+
: edge.source_kind;
|
|
38
|
+
const neighborId = edge.source_kind === current.kind && edge.source_id === current.id
|
|
39
|
+
? edge.target_id
|
|
40
|
+
: edge.source_id;
|
|
41
|
+
const key = visitedKey(neighborKind, neighborId);
|
|
42
|
+
const neighborAlreadyVisited = visited.has(key);
|
|
43
|
+
if (!neighborAlreadyVisited && nodes.length < maxNodes) {
|
|
44
|
+
visited.add(key);
|
|
45
|
+
nodes.push({ kind: neighborKind, id: neighborId });
|
|
46
|
+
queue.push({ kind: neighborKind, id: neighborId, depth: current.depth + 1 });
|
|
47
|
+
}
|
|
48
|
+
const neighborInNodeSet = neighborAlreadyVisited ||
|
|
49
|
+
nodes.some((node) => node.kind === neighborKind && node.id === neighborId);
|
|
50
|
+
if (neighborInNodeSet) {
|
|
51
|
+
edgeIds.add(edge.id);
|
|
52
|
+
edges.push(edge);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return { nodes, edges };
|
|
57
|
+
}
|
|
58
|
+
function normalizeTraversalBound(value, defaultValue, name) {
|
|
59
|
+
if (value === undefined)
|
|
60
|
+
return defaultValue;
|
|
61
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {
|
|
62
|
+
throw new Error(`traverseAssociations: ${name} must be a non-negative integer, got ${value}`);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
function tokenize(text) {
|
|
67
|
+
return new Set(text
|
|
68
|
+
.toLowerCase()
|
|
69
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
70
|
+
.split(/\s+/)
|
|
71
|
+
.filter((t) => t.length > 2));
|
|
72
|
+
}
|
|
73
|
+
function jaccardSimilarity(a, b) {
|
|
74
|
+
if (a.size === 0 && b.size === 0)
|
|
75
|
+
return 0;
|
|
76
|
+
let intersection = 0;
|
|
77
|
+
for (const token of a) {
|
|
78
|
+
if (b.has(token))
|
|
79
|
+
intersection++;
|
|
80
|
+
}
|
|
81
|
+
const union = a.size + b.size - intersection;
|
|
82
|
+
return union > 0 ? intersection / union : 0;
|
|
83
|
+
}
|
|
84
|
+
function detectRelationType(source, target, similarity) {
|
|
85
|
+
const sameSlot = Boolean(source.slot_key) &&
|
|
86
|
+
Boolean(target.slot_key) &&
|
|
87
|
+
source.slot_key === target.slot_key;
|
|
88
|
+
// Contradiction: same slot key with either negation mismatch OR
|
|
89
|
+
// divergent fact text (different values asserted for the same slot).
|
|
90
|
+
// Slot facts are assertions like "deploy:region = us-east-1" vs
|
|
91
|
+
// "deploy:region = eu-west-1" — they must not be collapsed into supports.
|
|
92
|
+
if (sameSlot) {
|
|
93
|
+
const negationMismatch = source.is_negated !== target.is_negated;
|
|
94
|
+
const divergentValues = !negationMismatch && similarity < 0.9;
|
|
95
|
+
if (negationMismatch || divergentValues) {
|
|
96
|
+
return 'contradicts';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Supersedes: same slot key, same polarity, target is newer, facts align
|
|
100
|
+
if (sameSlot &&
|
|
101
|
+
source.is_negated === target.is_negated &&
|
|
102
|
+
target.created_at > source.created_at &&
|
|
103
|
+
similarity >= 0.9) {
|
|
104
|
+
return 'supersedes';
|
|
105
|
+
}
|
|
106
|
+
// Supports: high similarity + same polarity (and not same-slot-divergent)
|
|
107
|
+
if (similarity >= 0.4 && source.is_negated === target.is_negated) {
|
|
108
|
+
return 'supports';
|
|
109
|
+
}
|
|
110
|
+
// Related: moderate similarity
|
|
111
|
+
if (similarity >= 0.25) {
|
|
112
|
+
return 'related_to';
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
export async function autoDetectAssociations(adapter, scope, newKnowledge, existingKnowledge) {
|
|
117
|
+
const created = [];
|
|
118
|
+
const newTokens = tokenize(newKnowledge.fact);
|
|
119
|
+
for (const existing of existingKnowledge) {
|
|
120
|
+
if (existing.id === newKnowledge.id)
|
|
121
|
+
continue;
|
|
122
|
+
const similarity = jaccardSimilarity(newTokens, tokenize(existing.fact));
|
|
123
|
+
const relationType = detectRelationType(existing, newKnowledge, similarity);
|
|
124
|
+
if (!relationType)
|
|
125
|
+
continue;
|
|
126
|
+
// For supersedes, new knowledge is the source (it supersedes the old)
|
|
127
|
+
const sourceId = relationType === 'supersedes' ? newKnowledge.id : existing.id;
|
|
128
|
+
const targetId = relationType === 'supersedes' ? existing.id : newKnowledge.id;
|
|
129
|
+
try {
|
|
130
|
+
const association = await adapter.insertAssociation({
|
|
131
|
+
tenant_id: newKnowledge.tenant_id,
|
|
132
|
+
system_id: newKnowledge.system_id,
|
|
133
|
+
workspace_id: newKnowledge.workspace_id,
|
|
134
|
+
collaboration_id: newKnowledge.collaboration_id,
|
|
135
|
+
scope_id: newKnowledge.scope_id,
|
|
136
|
+
source_kind: 'knowledge',
|
|
137
|
+
source_id: sourceId,
|
|
138
|
+
target_kind: 'knowledge',
|
|
139
|
+
target_id: targetId,
|
|
140
|
+
association_type: relationType,
|
|
141
|
+
confidence: similarity,
|
|
142
|
+
auto_generated: true,
|
|
143
|
+
});
|
|
144
|
+
created.push(association);
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
if (!isUniqueConstraintError(err)) {
|
|
148
|
+
throw err;
|
|
149
|
+
}
|
|
150
|
+
// Unique constraint violation — association already exists, skip
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return created;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Detect whether an adapter error represents a duplicate-edge unique
|
|
157
|
+
* constraint violation.
|
|
158
|
+
*
|
|
159
|
+
* All bundled adapters throw the structured `UniqueConstraintError` class.
|
|
160
|
+
* The code/message fallbacks below exist only for defence-in-depth against
|
|
161
|
+
* third-party or older adapter implementations that have not adopted the
|
|
162
|
+
* typed error yet.
|
|
163
|
+
*/
|
|
164
|
+
function isUniqueConstraintError(err) {
|
|
165
|
+
if (err instanceof UniqueConstraintError)
|
|
166
|
+
return true;
|
|
167
|
+
if (!err || typeof err !== 'object')
|
|
168
|
+
return false;
|
|
169
|
+
const anyErr = err;
|
|
170
|
+
if (anyErr.kind === 'UniqueConstraintError')
|
|
171
|
+
return true;
|
|
172
|
+
// Postgres: 23505 unique_violation
|
|
173
|
+
if (anyErr.code === '23505')
|
|
174
|
+
return true;
|
|
175
|
+
// better-sqlite3: SQLITE_CONSTRAINT_UNIQUE
|
|
176
|
+
if (anyErr.code === 'SQLITE_CONSTRAINT_UNIQUE')
|
|
177
|
+
return true;
|
|
178
|
+
const message = typeof anyErr.message === 'string' ? anyErr.message : '';
|
|
179
|
+
if (message.includes('Association already exists'))
|
|
180
|
+
return true;
|
|
181
|
+
if (message.toLowerCase().includes('unique constraint'))
|
|
182
|
+
return true;
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=associations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"associations.js","sourceRoot":"","sources":["../../src/core/associations.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,18 @@ export interface CircuitBreakerOptions {
|
|
|
3
3
|
failureThreshold?: number;
|
|
4
4
|
resetTimeoutMs?: number;
|
|
5
5
|
}
|
|
6
|
+
export interface CircuitBreakerSnapshot {
|
|
7
|
+
state: CircuitState;
|
|
8
|
+
failures: number;
|
|
9
|
+
failureThreshold: number;
|
|
10
|
+
resetTimeoutMs: number;
|
|
11
|
+
openedAt: number | null;
|
|
12
|
+
nextProbeAt: number | null;
|
|
13
|
+
}
|
|
6
14
|
export interface CircuitBreaker {
|
|
7
15
|
readonly state: CircuitState;
|
|
8
16
|
execute<T>(run: () => Promise<T>): Promise<T>;
|
|
17
|
+
getSnapshot(): CircuitBreakerSnapshot;
|
|
9
18
|
}
|
|
10
19
|
export declare function createCircuitBreaker(options?: CircuitBreakerOptions): CircuitBreaker;
|
|
11
20
|
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/core/circuit-breaker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/core/circuit-breaker.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,WAAW,IAAI,sBAAsB,CAAC;CACvC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAmDxF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ProviderUnavailableError } from '../contracts/errors.js';
|
|
1
2
|
export function createCircuitBreaker(options = {}) {
|
|
2
3
|
const failureThreshold = options.failureThreshold ?? 3;
|
|
3
4
|
const resetTimeoutMs = options.resetTimeoutMs ?? 30_000;
|
|
@@ -13,7 +14,7 @@ export function createCircuitBreaker(options = {}) {
|
|
|
13
14
|
},
|
|
14
15
|
async execute(run) {
|
|
15
16
|
if (state === 'open' && !canProbe()) {
|
|
16
|
-
throw new
|
|
17
|
+
throw new ProviderUnavailableError('Circuit breaker is open');
|
|
17
18
|
}
|
|
18
19
|
if (canProbe()) {
|
|
19
20
|
state = 'half_open';
|
|
@@ -33,6 +34,17 @@ export function createCircuitBreaker(options = {}) {
|
|
|
33
34
|
throw error;
|
|
34
35
|
}
|
|
35
36
|
},
|
|
37
|
+
getSnapshot() {
|
|
38
|
+
const effectiveState = canProbe() ? 'half_open' : state;
|
|
39
|
+
return {
|
|
40
|
+
state: effectiveState,
|
|
41
|
+
failures,
|
|
42
|
+
failureThreshold,
|
|
43
|
+
resetTimeoutMs,
|
|
44
|
+
openedAt: openedAt > 0 ? openedAt : null,
|
|
45
|
+
nextProbeAt: state === 'open' ? openedAt + resetTimeoutMs : null,
|
|
46
|
+
};
|
|
47
|
+
},
|
|
36
48
|
};
|
|
37
49
|
}
|
|
38
50
|
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/core/circuit-breaker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/core/circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAwBlE,MAAM,UAAU,oBAAoB,CAAC,UAAiC,EAAE;IACtE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC;IACxD,IAAI,KAAK,GAAiB,QAAQ,CAAC;IACnC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,SAAS,QAAQ;QACf,OAAO,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,cAAc,CAAC;IACrE,CAAC;IAED,OAAO;QACL,IAAI,KAAK;YACP,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,OAAO,CAAI,GAAqB;YACpC,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACpC,MAAM,IAAI,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,QAAQ,EAAE,EAAE,CAAC;gBACf,KAAK,GAAG,WAAW,CAAC;YACtB,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;gBAC3B,QAAQ,GAAG,CAAC,CAAC;gBACb,KAAK,GAAG,QAAQ,CAAC;gBACjB,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,IAAI,CAAC,CAAC;gBACd,IAAI,QAAQ,IAAI,gBAAgB,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;oBAC1D,KAAK,GAAG,MAAM,CAAC;oBACf,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACxB,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,WAAW;YACT,MAAM,cAAc,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;YACxD,OAAO;gBACL,KAAK,EAAE,cAAc;gBACrB,QAAQ;gBACR,gBAAgB;gBAChB,cAAc;gBACd,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBACxC,WAAW,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI;aACjE,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MemoryScope } from '../contracts/identity.js';
|
|
2
|
+
import type { AsyncStorageAdapter } from '../contracts/async-storage.js';
|
|
3
|
+
import type { CognitiveSearchOptions, CognitiveSearchResult } from '../contracts/cognitive.js';
|
|
4
|
+
export declare function searchCognitive(adapter: AsyncStorageAdapter, scope: MemoryScope, options: CognitiveSearchOptions): Promise<CognitiveSearchResult>;
|
|
5
|
+
//# sourceMappingURL=cognitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cognitive.d.ts","sourceRoot":"","sources":["../../src/core/cognitive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAIV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAkEnC,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAyEhC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { mapKnowledgeClassToCognitive, mapCognitiveToKnowledgeClasses, } from '../contracts/cognitive.js';
|
|
2
|
+
function knowledgeToCognitiveItem(km) {
|
|
3
|
+
return {
|
|
4
|
+
id: km.id,
|
|
5
|
+
type: mapKnowledgeClassToCognitive(km.knowledge_class),
|
|
6
|
+
fact: km.fact,
|
|
7
|
+
createdAt: km.created_at,
|
|
8
|
+
lastAccessedAt: km.last_accessed_at,
|
|
9
|
+
metadata: {
|
|
10
|
+
trustScore: km.trust_score,
|
|
11
|
+
knowledgeClass: km.knowledge_class,
|
|
12
|
+
knowledgeState: km.knowledge_state,
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function workingMemoryToCognitiveItem(wm) {
|
|
17
|
+
return {
|
|
18
|
+
id: wm.id,
|
|
19
|
+
type: 'working',
|
|
20
|
+
fact: wm.summary,
|
|
21
|
+
createdAt: wm.created_at,
|
|
22
|
+
lastAccessedAt: wm.created_at,
|
|
23
|
+
metadata: {
|
|
24
|
+
trustScore: 1,
|
|
25
|
+
knowledgeClass: 'project_fact',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function groupByType(results) {
|
|
30
|
+
const grouped = {
|
|
31
|
+
episodic: [],
|
|
32
|
+
semantic: [],
|
|
33
|
+
procedural: [],
|
|
34
|
+
working: [],
|
|
35
|
+
};
|
|
36
|
+
for (const r of results) {
|
|
37
|
+
grouped[r.item.type].push(r);
|
|
38
|
+
}
|
|
39
|
+
return grouped;
|
|
40
|
+
}
|
|
41
|
+
function computeWorkingMemoryRank(wm, query) {
|
|
42
|
+
const queryLower = query.toLowerCase();
|
|
43
|
+
let score = 0;
|
|
44
|
+
const summaryLower = wm.summary.toLowerCase();
|
|
45
|
+
if (summaryLower.includes(queryLower))
|
|
46
|
+
score += 1.0;
|
|
47
|
+
const tagMatches = wm.topic_tags.filter((t) => t.toLowerCase().includes(queryLower)).length;
|
|
48
|
+
score += tagMatches * 0.3;
|
|
49
|
+
const entityMatches = wm.key_entities.filter((e) => e.toLowerCase().includes(queryLower)).length;
|
|
50
|
+
score += entityMatches * 0.3;
|
|
51
|
+
return score;
|
|
52
|
+
}
|
|
53
|
+
export async function searchCognitive(adapter, scope, options) {
|
|
54
|
+
const limit = options.limit ?? 20;
|
|
55
|
+
const activeOnly = options.activeOnly ?? true;
|
|
56
|
+
const requestedTypes = options.types ?? ['episodic', 'semantic', 'procedural', 'working'];
|
|
57
|
+
const all = [];
|
|
58
|
+
// Semantic and procedural: search knowledge memory
|
|
59
|
+
const knowledgeTypes = requestedTypes.filter((t) => t === 'semantic' || t === 'procedural');
|
|
60
|
+
if (knowledgeTypes.length > 0) {
|
|
61
|
+
const knowledgeClasses = knowledgeTypes.flatMap(mapCognitiveToKnowledgeClasses);
|
|
62
|
+
const searchOpts = {
|
|
63
|
+
limit,
|
|
64
|
+
activeOnly,
|
|
65
|
+
minimumTrustScore: options.minimumTrustScore,
|
|
66
|
+
knowledgeClasses: knowledgeClasses.length > 0 ? knowledgeClasses : undefined,
|
|
67
|
+
};
|
|
68
|
+
const hits = await adapter.searchKnowledge(scope, options.query, searchOpts);
|
|
69
|
+
for (const hit of hits) {
|
|
70
|
+
all.push({
|
|
71
|
+
item: knowledgeToCognitiveItem(hit.item),
|
|
72
|
+
rank: hit.rank ?? 0,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Working: search working memory with computed relevance scores
|
|
77
|
+
if (requestedTypes.includes('working')) {
|
|
78
|
+
const wmList = activeOnly
|
|
79
|
+
? await adapter.getActiveWorkingMemory(scope)
|
|
80
|
+
: await adapter.getWorkingMemoryByTimeRange(scope, { start_at: 0, end_at: Math.floor(Date.now() / 1000) });
|
|
81
|
+
for (const wm of wmList) {
|
|
82
|
+
const score = computeWorkingMemoryRank(wm, options.query);
|
|
83
|
+
if (score > 0) {
|
|
84
|
+
all.push({
|
|
85
|
+
item: workingMemoryToCognitiveItem(wm),
|
|
86
|
+
rank: score,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Episodic: search turns and map to cognitive items
|
|
92
|
+
if (requestedTypes.includes('episodic')) {
|
|
93
|
+
const turnHits = await adapter.searchTurns(scope, options.query, { limit, activeOnly });
|
|
94
|
+
for (const hit of turnHits) {
|
|
95
|
+
const turn = hit.item;
|
|
96
|
+
all.push({
|
|
97
|
+
item: {
|
|
98
|
+
id: turn.id,
|
|
99
|
+
type: 'episodic',
|
|
100
|
+
fact: turn.content,
|
|
101
|
+
createdAt: turn.created_at,
|
|
102
|
+
lastAccessedAt: turn.created_at,
|
|
103
|
+
metadata: {
|
|
104
|
+
trustScore: 1,
|
|
105
|
+
knowledgeClass: 'episodic_fact',
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
rank: hit.rank ?? 0,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Sort descending by rank (higher = more relevant), then trim to limit
|
|
113
|
+
all.sort((a, b) => b.rank - a.rank);
|
|
114
|
+
const trimmed = all.slice(0, limit);
|
|
115
|
+
return {
|
|
116
|
+
byType: groupByType(trimmed),
|
|
117
|
+
all: trimmed,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=cognitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cognitive.js","sourceRoot":"","sources":["../../src/core/cognitive.ts"],"names":[],"mappings":"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"}
|
package/dist/core/context.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { EmbeddingAdapter, EmbeddingVector } from '../contracts/embedding.js';
|
|
2
2
|
import { type MemoryScope, type ScopeLevel } from '../contracts/identity.js';
|
|
3
|
+
import type { ActorRef, ContextViewPolicy, CoordinationState, HandoffRecord, WorkClaim } from '../contracts/coordination.js';
|
|
3
4
|
import type { EventHook, Logger } from '../contracts/observability.js';
|
|
4
5
|
import type { ContextMode, ContextPolicy } from '../contracts/policy.js';
|
|
5
|
-
import type {
|
|
6
|
+
import type { SessionState } from '../contracts/session-state.js';
|
|
7
|
+
import type { KnowledgeMemory, Playbook, Turn, WorkItem, WorkingMemory } from '../contracts/types.js';
|
|
6
8
|
import type { AsyncStorageAdapter } from '../contracts/async-storage.js';
|
|
7
9
|
import { type TokenEstimator } from './tokens.js';
|
|
8
10
|
export interface ContextAssemblyOptions {
|
|
@@ -11,6 +13,8 @@ export interface ContextAssemblyOptions {
|
|
|
11
13
|
mode?: ContextMode;
|
|
12
14
|
maxKnowledgeItems?: number;
|
|
13
15
|
maxRecentSummaries?: number;
|
|
16
|
+
maxAssociationSeedItems?: number;
|
|
17
|
+
maxAssociatedKnowledgeItems?: number;
|
|
14
18
|
relevanceQuery?: string;
|
|
15
19
|
tokenBudget?: number;
|
|
16
20
|
queryVector?: EmbeddingVector;
|
|
@@ -20,6 +24,10 @@ export interface ContextAssemblyOptions {
|
|
|
20
24
|
onEvent?: EventHook;
|
|
21
25
|
tokenEstimator?: TokenEstimator;
|
|
22
26
|
asOf?: number;
|
|
27
|
+
associationMinConfidence?: number;
|
|
28
|
+
view?: ContextViewPolicy;
|
|
29
|
+
viewer?: ActorRef;
|
|
30
|
+
includeCoordinationState?: boolean;
|
|
23
31
|
}
|
|
24
32
|
export interface KnowledgeSelectionReason {
|
|
25
33
|
knowledgeMemoryId: number;
|
|
@@ -34,6 +42,41 @@ export interface KnowledgeSelectionReason {
|
|
|
34
42
|
finalScore: number;
|
|
35
43
|
explanation: string;
|
|
36
44
|
}
|
|
45
|
+
export interface ExcludedKnowledgeReason {
|
|
46
|
+
knowledgeMemoryId: number;
|
|
47
|
+
reason: 'not_selected' | 'token_budget';
|
|
48
|
+
detail: string;
|
|
49
|
+
}
|
|
50
|
+
export interface AssociationExpansionTrace {
|
|
51
|
+
seedKnowledgeIds: number[];
|
|
52
|
+
candidateKnowledgeIds: number[];
|
|
53
|
+
includedKnowledgeIds: number[];
|
|
54
|
+
truncatedKnowledgeIds: number[];
|
|
55
|
+
maxSeedKnowledgeItems: number;
|
|
56
|
+
maxAssociatedKnowledgeItems: number;
|
|
57
|
+
}
|
|
58
|
+
export interface TokenTrimTrace {
|
|
59
|
+
initialTokenEstimate: number;
|
|
60
|
+
finalTokenEstimate: number;
|
|
61
|
+
droppedTurnIds: number[];
|
|
62
|
+
droppedSummaryIds: number[];
|
|
63
|
+
droppedPlaybookIds: number[];
|
|
64
|
+
droppedAssociatedKnowledgeIds: number[];
|
|
65
|
+
droppedKnowledgeIds: number[];
|
|
66
|
+
}
|
|
67
|
+
export interface ContextScopeTrace {
|
|
68
|
+
normalizedScope: MemoryScope;
|
|
69
|
+
scopeSource: 'local' | 'cross_scope';
|
|
70
|
+
scopeLevel: ScopeLevel;
|
|
71
|
+
asOf: number | null;
|
|
72
|
+
}
|
|
73
|
+
export interface ContextDebugTrace {
|
|
74
|
+
scope: ContextScopeTrace;
|
|
75
|
+
selectedKnowledge: KnowledgeSelectionReason[];
|
|
76
|
+
excludedKnowledge: ExcludedKnowledgeReason[];
|
|
77
|
+
associationExpansion: AssociationExpansionTrace;
|
|
78
|
+
tokenTrimming: TokenTrimTrace;
|
|
79
|
+
}
|
|
37
80
|
export interface MemoryContext {
|
|
38
81
|
mode: ContextMode;
|
|
39
82
|
activeTurns: Turn[];
|
|
@@ -46,11 +89,39 @@ export interface MemoryContext {
|
|
|
46
89
|
durableKnowledge: KnowledgeMemory[];
|
|
47
90
|
recentSummaries: WorkingMemory[];
|
|
48
91
|
currentObjective: string | null;
|
|
92
|
+
sessionState: SessionState;
|
|
49
93
|
activeObjectives: WorkItem[];
|
|
50
94
|
activeState: string[];
|
|
51
95
|
unresolvedWork: string[];
|
|
96
|
+
coordinationState: CoordinationState | null;
|
|
97
|
+
relevantPlaybooks?: Playbook[];
|
|
98
|
+
associatedKnowledge: KnowledgeMemory[];
|
|
52
99
|
knowledgeSelectionReasons: KnowledgeSelectionReason[];
|
|
100
|
+
debugTrace: ContextDebugTrace;
|
|
53
101
|
tokenEstimate: number;
|
|
54
102
|
}
|
|
103
|
+
export declare function resolveVisibleKnowledge(items: KnowledgeMemory[], scope: MemoryScope, view: ContextViewPolicy): KnowledgeMemory[];
|
|
104
|
+
export declare function resolveVisibleWorkItems(items: WorkItem[], scope: MemoryScope, view: ContextViewPolicy): WorkItem[];
|
|
105
|
+
export declare function resolveVisiblePlaybooks(items: Playbook[], scope: MemoryScope, view: ContextViewPolicy): Playbook[];
|
|
106
|
+
export declare function resolveVisibleWorkClaims(items: WorkClaim[], scope: MemoryScope, view: ContextViewPolicy): WorkClaim[];
|
|
107
|
+
export declare function resolveVisibleHandoffs(items: HandoffRecord[], scope: MemoryScope, view: ContextViewPolicy): HandoffRecord[];
|
|
108
|
+
export interface DerivedShortTermState {
|
|
109
|
+
workingMemory: WorkingMemory | null;
|
|
110
|
+
recentSummaries: WorkingMemory[];
|
|
111
|
+
activeObjectives: WorkItem[];
|
|
112
|
+
currentObjective: string | null;
|
|
113
|
+
activeState: string[];
|
|
114
|
+
unresolvedWork: string[];
|
|
115
|
+
sessionState: SessionState;
|
|
116
|
+
}
|
|
117
|
+
export declare function buildDerivedShortTermState(input: {
|
|
118
|
+
activeTurns: Turn[];
|
|
119
|
+
workingMemoryCandidates: WorkingMemory[];
|
|
120
|
+
contextWorkItems: WorkItem[];
|
|
121
|
+
relevantKnowledge?: KnowledgeMemory[];
|
|
122
|
+
maxRecentSummaries?: number;
|
|
123
|
+
}): DerivedShortTermState;
|
|
124
|
+
export declare function getContextWorkItems(adapter: AsyncStorageAdapter, scope: MemoryScope, asOf?: number, level?: ScopeLevel): Promise<WorkItem[]>;
|
|
125
|
+
export declare function resolveContextScopeLevel(crossScopeLevel: ScopeLevel | undefined, view: ContextViewPolicy | undefined): ScopeLevel | undefined;
|
|
55
126
|
export declare function buildMemoryContext(adapter: AsyncStorageAdapter, scope: MemoryScope, options?: ContextAssemblyOptions): Promise<MemoryContext>;
|
|
56
127
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAkB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
|