ai-memory-layer 2.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 +26 -0
- package/LICENSE +21 -0
- package/README.md +765 -0
- package/bin/memory-server.mjs +157 -0
- package/dist/adapters/memory/embeddings.d.ts +4 -0
- package/dist/adapters/memory/embeddings.d.ts.map +1 -0
- package/dist/adapters/memory/embeddings.js +53 -0
- package/dist/adapters/memory/embeddings.js.map +1 -0
- package/dist/adapters/memory/index.d.ts +7 -0
- package/dist/adapters/memory/index.d.ts.map +1 -0
- package/dist/adapters/memory/index.js +650 -0
- package/dist/adapters/memory/index.js.map +1 -0
- package/dist/adapters/postgres/index.d.ts +38 -0
- package/dist/adapters/postgres/index.d.ts.map +1 -0
- package/dist/adapters/postgres/index.js +982 -0
- package/dist/adapters/postgres/index.js.map +1 -0
- package/dist/adapters/sqlite/embeddings.d.ts +5 -0
- package/dist/adapters/sqlite/embeddings.d.ts.map +1 -0
- package/dist/adapters/sqlite/embeddings.js +122 -0
- package/dist/adapters/sqlite/embeddings.js.map +1 -0
- package/dist/adapters/sqlite/index.d.ts +8 -0
- package/dist/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/index.js +839 -0
- package/dist/adapters/sqlite/index.js.map +1 -0
- package/dist/adapters/sqlite/mappers.d.ts +40 -0
- package/dist/adapters/sqlite/mappers.d.ts.map +1 -0
- package/dist/adapters/sqlite/mappers.js +95 -0
- package/dist/adapters/sqlite/mappers.js.map +1 -0
- package/dist/adapters/sqlite/schema.d.ts +4 -0
- package/dist/adapters/sqlite/schema.d.ts.map +1 -0
- package/dist/adapters/sqlite/schema.js +394 -0
- package/dist/adapters/sqlite/schema.js.map +1 -0
- package/dist/adapters/sync-to-async.d.ts +15 -0
- package/dist/adapters/sync-to-async.d.ts.map +1 -0
- package/dist/adapters/sync-to-async.js +95 -0
- package/dist/adapters/sync-to-async.js.map +1 -0
- package/dist/cli/inspect.d.ts +34 -0
- package/dist/cli/inspect.d.ts.map +1 -0
- package/dist/cli/inspect.js +190 -0
- package/dist/cli/inspect.js.map +1 -0
- package/dist/contracts/async-storage.d.ts +86 -0
- package/dist/contracts/async-storage.d.ts.map +1 -0
- package/dist/contracts/async-storage.js +2 -0
- package/dist/contracts/async-storage.js.map +1 -0
- package/dist/contracts/embedding.d.ts +22 -0
- package/dist/contracts/embedding.d.ts.map +1 -0
- package/dist/contracts/embedding.js +2 -0
- package/dist/contracts/embedding.js.map +1 -0
- package/dist/contracts/identity.d.ts +29 -0
- package/dist/contracts/identity.d.ts.map +1 -0
- package/dist/contracts/identity.js +34 -0
- package/dist/contracts/identity.js.map +1 -0
- package/dist/contracts/observability.d.ts +18 -0
- package/dist/contracts/observability.d.ts.map +1 -0
- package/dist/contracts/observability.js +7 -0
- package/dist/contracts/observability.js.map +1 -0
- package/dist/contracts/policy.d.ts +108 -0
- package/dist/contracts/policy.d.ts.map +1 -0
- package/dist/contracts/policy.js +107 -0
- package/dist/contracts/policy.js.map +1 -0
- package/dist/contracts/storage.d.ts +78 -0
- package/dist/contracts/storage.d.ts.map +1 -0
- package/dist/contracts/storage.js +2 -0
- package/dist/contracts/storage.js.map +1 -0
- package/dist/contracts/types.d.ts +381 -0
- package/dist/contracts/types.d.ts.map +1 -0
- package/dist/contracts/types.js +94 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/core/circuit-breaker.d.ts +11 -0
- package/dist/core/circuit-breaker.d.ts.map +1 -0
- package/dist/core/circuit-breaker.js +38 -0
- package/dist/core/circuit-breaker.js.map +1 -0
- package/dist/core/context.d.ts +56 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +345 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/events.d.ts +8 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +25 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/extractor.d.ts +37 -0
- package/dist/core/extractor.d.ts.map +1 -0
- package/dist/core/extractor.js +448 -0
- package/dist/core/extractor.js.map +1 -0
- package/dist/core/formatter.d.ts +25 -0
- package/dist/core/formatter.d.ts.map +1 -0
- package/dist/core/formatter.js +97 -0
- package/dist/core/formatter.js.map +1 -0
- package/dist/core/knowledge-lifecycle.d.ts +15 -0
- package/dist/core/knowledge-lifecycle.d.ts.map +1 -0
- package/dist/core/knowledge-lifecycle.js +103 -0
- package/dist/core/knowledge-lifecycle.js.map +1 -0
- package/dist/core/maintenance.d.ts +13 -0
- package/dist/core/maintenance.d.ts.map +1 -0
- package/dist/core/maintenance.js +102 -0
- package/dist/core/maintenance.js.map +1 -0
- package/dist/core/manager.d.ts +110 -0
- package/dist/core/manager.d.ts.map +1 -0
- package/dist/core/manager.js +640 -0
- package/dist/core/manager.js.map +1 -0
- package/dist/core/monitor.d.ts +73 -0
- package/dist/core/monitor.d.ts.map +1 -0
- package/dist/core/monitor.js +395 -0
- package/dist/core/monitor.js.map +1 -0
- package/dist/core/orchestrator.d.ts +64 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +916 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/presets.d.ts +15 -0
- package/dist/core/presets.d.ts.map +1 -0
- package/dist/core/presets.js +99 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/provider-managers.d.ts +47 -0
- package/dist/core/provider-managers.d.ts.map +1 -0
- package/dist/core/provider-managers.js +112 -0
- package/dist/core/provider-managers.js.map +1 -0
- package/dist/core/quick.d.ts +62 -0
- package/dist/core/quick.d.ts.map +1 -0
- package/dist/core/quick.js +300 -0
- package/dist/core/quick.js.map +1 -0
- package/dist/core/retrieval.d.ts +29 -0
- package/dist/core/retrieval.d.ts.map +1 -0
- package/dist/core/retrieval.js +150 -0
- package/dist/core/retrieval.js.map +1 -0
- package/dist/core/runtime.d.ts +67 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +84 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/streaming.d.ts +37 -0
- package/dist/core/streaming.d.ts.map +1 -0
- package/dist/core/streaming.js +51 -0
- package/dist/core/streaming.js.map +1 -0
- package/dist/core/sync.d.ts +13 -0
- package/dist/core/sync.d.ts.map +1 -0
- package/dist/core/sync.js +46 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/core/telemetry.d.ts +8 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +14 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/tokens.d.ts +8 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +59 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/core/trust.d.ts +23 -0
- package/dist/core/trust.d.ts.map +1 -0
- package/dist/core/trust.js +164 -0
- package/dist/core/trust.js.map +1 -0
- package/dist/core/validation.d.ts +36 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +185 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/embeddings/local.d.ts +5 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +128 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/embeddings/openai.d.ts +26 -0
- package/dist/embeddings/openai.d.ts.map +1 -0
- package/dist/embeddings/openai.js +48 -0
- package/dist/embeddings/openai.js.map +1 -0
- package/dist/embeddings/resilience.d.ts +5 -0
- package/dist/embeddings/resilience.d.ts.map +1 -0
- package/dist/embeddings/resilience.js +53 -0
- package/dist/embeddings/resilience.js.map +1 -0
- package/dist/embeddings/voyage.d.ts +30 -0
- package/dist/embeddings/voyage.d.ts.map +1 -0
- package/dist/embeddings/voyage.js +53 -0
- package/dist/embeddings/voyage.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/claude-agent.d.ts +21 -0
- package/dist/integrations/claude-agent.d.ts.map +1 -0
- package/dist/integrations/claude-agent.js +44 -0
- package/dist/integrations/claude-agent.js.map +1 -0
- package/dist/integrations/claude-tools.d.ts +18 -0
- package/dist/integrations/claude-tools.d.ts.map +1 -0
- package/dist/integrations/claude-tools.js +60 -0
- package/dist/integrations/claude-tools.js.map +1 -0
- package/dist/integrations/langchain.d.ts +24 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +48 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/mcp.d.ts +23 -0
- package/dist/integrations/mcp.d.ts.map +1 -0
- package/dist/integrations/mcp.js +60 -0
- package/dist/integrations/mcp.js.map +1 -0
- package/dist/integrations/middleware.d.ts +15 -0
- package/dist/integrations/middleware.d.ts.map +1 -0
- package/dist/integrations/middleware.js +27 -0
- package/dist/integrations/middleware.js.map +1 -0
- package/dist/integrations/openai-tools.d.ts +21 -0
- package/dist/integrations/openai-tools.d.ts.map +1 -0
- package/dist/integrations/openai-tools.js +69 -0
- package/dist/integrations/openai-tools.js.map +1 -0
- package/dist/integrations/vercel-ai.d.ts +19 -0
- package/dist/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/integrations/vercel-ai.js +41 -0
- package/dist/integrations/vercel-ai.js.map +1 -0
- package/dist/server/http-server.d.ts +61 -0
- package/dist/server/http-server.d.ts.map +1 -0
- package/dist/server/http-server.js +684 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp-server.d.ts +61 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +465 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/summarizers/claude.d.ts +11 -0
- package/dist/summarizers/claude.d.ts.map +1 -0
- package/dist/summarizers/claude.js +39 -0
- package/dist/summarizers/claude.js.map +1 -0
- package/dist/summarizers/client.d.ts +23 -0
- package/dist/summarizers/client.d.ts.map +1 -0
- package/dist/summarizers/client.js +24 -0
- package/dist/summarizers/client.js.map +1 -0
- package/dist/summarizers/extractive.d.ts +6 -0
- package/dist/summarizers/extractive.d.ts.map +1 -0
- package/dist/summarizers/extractive.js +204 -0
- package/dist/summarizers/extractive.js.map +1 -0
- package/dist/summarizers/extractor.d.ts +12 -0
- package/dist/summarizers/extractor.d.ts.map +1 -0
- package/dist/summarizers/extractor.js +75 -0
- package/dist/summarizers/extractor.js.map +1 -0
- package/dist/summarizers/openai.d.ts +11 -0
- package/dist/summarizers/openai.d.ts.map +1 -0
- package/dist/summarizers/openai.js +41 -0
- package/dist/summarizers/openai.js.map +1 -0
- package/dist/summarizers/prompts.d.ts +11 -0
- package/dist/summarizers/prompts.d.ts.map +1 -0
- package/dist/summarizers/prompts.js +104 -0
- package/dist/summarizers/prompts.js.map +1 -0
- package/docs/DEPLOYMENT.md +84 -0
- package/docs/INTEGRATIONS.md +64 -0
- package/docs/MEMORY_QUALITY_BASELINE.md +55 -0
- package/docs/MEMORY_QUALITY_RELEASE_GATE.md +63 -0
- package/docs/MEMORY_QUALITY_RUBRIC.md +249 -0
- package/docs/OPERATIONS.md +49 -0
- package/docs/SECURITY.md +25 -0
- package/openapi.yaml +843 -0
- package/package.json +157 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { formatBootstrapForPrompt, formatContextAsMessages, formatContextForPrompt, } from './formatter.js';
|
|
2
|
+
function resolveRuntimeInput(input) {
|
|
3
|
+
return typeof input === 'string'
|
|
4
|
+
? {
|
|
5
|
+
input,
|
|
6
|
+
}
|
|
7
|
+
: input;
|
|
8
|
+
}
|
|
9
|
+
export function createMemoryRuntime(manager, options = {}) {
|
|
10
|
+
async function getBootstrapPayload(relevanceQuery, format) {
|
|
11
|
+
const bootstrap = await manager.getSessionBootstrap(relevanceQuery);
|
|
12
|
+
const bootstrapPrompt = formatBootstrapForPrompt(bootstrap, format ?? options.format);
|
|
13
|
+
return {
|
|
14
|
+
bootstrap,
|
|
15
|
+
bootstrapPrompt,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
async startSession(relevanceQuery, format) {
|
|
20
|
+
return getBootstrapPayload(relevanceQuery, format);
|
|
21
|
+
},
|
|
22
|
+
async resumeSession(relevanceQuery, format) {
|
|
23
|
+
return getBootstrapPayload(relevanceQuery, format);
|
|
24
|
+
},
|
|
25
|
+
async beforeModelCall(input) {
|
|
26
|
+
const resolved = resolveRuntimeInput(input);
|
|
27
|
+
const resolvedFormat = {
|
|
28
|
+
...(options.format ?? {}),
|
|
29
|
+
...(resolved.format ?? {}),
|
|
30
|
+
includeProvisionalKnowledge: resolved.includeProvisionalKnowledge ??
|
|
31
|
+
resolved.format?.includeProvisionalKnowledge ??
|
|
32
|
+
options.format?.includeProvisionalKnowledge,
|
|
33
|
+
includeDisputedKnowledge: resolved.includeDisputedKnowledge ??
|
|
34
|
+
resolved.format?.includeDisputedKnowledge ??
|
|
35
|
+
options.format?.includeDisputedKnowledge,
|
|
36
|
+
};
|
|
37
|
+
const [bootstrapPayload, context] = await Promise.all([
|
|
38
|
+
getBootstrapPayload(resolved.relevanceQuery ?? resolved.input, resolvedFormat),
|
|
39
|
+
resolved.asOf != null
|
|
40
|
+
? manager.getContextAt(resolved.asOf, resolved.relevanceQuery ?? resolved.input)
|
|
41
|
+
: manager.getContext(resolved.relevanceQuery ?? resolved.input),
|
|
42
|
+
]);
|
|
43
|
+
const contextPrompt = formatContextForPrompt(context, resolvedFormat);
|
|
44
|
+
return {
|
|
45
|
+
bootstrap: bootstrapPayload.bootstrap,
|
|
46
|
+
context,
|
|
47
|
+
bootstrapPrompt: bootstrapPayload.bootstrapPrompt,
|
|
48
|
+
prompt: [bootstrapPayload.bootstrapPrompt, contextPrompt].join('\n\n'),
|
|
49
|
+
messages: formatContextAsMessages(context, resolvedFormat),
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
async afterModelCall(input) {
|
|
53
|
+
const exchange = await manager.processExchange(input.userInput, input.assistantOutput, input.actors);
|
|
54
|
+
const inferred = options.inferWorkItems
|
|
55
|
+
? await options.inferWorkItems({
|
|
56
|
+
userInput: input.userInput,
|
|
57
|
+
assistantOutput: input.assistantOutput,
|
|
58
|
+
})
|
|
59
|
+
: [];
|
|
60
|
+
const trackedWorkItems = await Promise.all([...(input.workItems ?? []), ...inferred].map((item) => manager.trackWorkItem(item.title, item.kind, item.status, item.detail)));
|
|
61
|
+
return {
|
|
62
|
+
exchange,
|
|
63
|
+
trackedWorkItems,
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
async wrapModelCall(modelCall, input, actors) {
|
|
67
|
+
const runtime = await this.beforeModelCall(input);
|
|
68
|
+
const result = await modelCall(runtime);
|
|
69
|
+
const resolved = resolveRuntimeInput(input);
|
|
70
|
+
const after = await this.afterModelCall({
|
|
71
|
+
userInput: resolved.input,
|
|
72
|
+
assistantOutput: result,
|
|
73
|
+
actors,
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
result,
|
|
77
|
+
runtime,
|
|
78
|
+
exchange: after.exchange,
|
|
79
|
+
trackedWorkItems: after.trackedWorkItems,
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Turn, TurnRole } from '../contracts/types.js';
|
|
2
|
+
import type { MemoryManager } from './manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* A collector that accumulates streamed text chunks and commits them
|
|
5
|
+
* as a single turn when finalized.
|
|
6
|
+
*/
|
|
7
|
+
export interface StreamCollector {
|
|
8
|
+
/** Append a chunk of text to the buffer. */
|
|
9
|
+
write(chunk: string): void;
|
|
10
|
+
/** Get the current accumulated text. */
|
|
11
|
+
getText(): string;
|
|
12
|
+
/** Finalize the stream and commit the full content as a turn. */
|
|
13
|
+
finalize(): Promise<Turn>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a StreamCollector that buffers streamed model output and commits
|
|
17
|
+
* the full response as a single turn when the stream ends.
|
|
18
|
+
*
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const collector = createStreamCollector(manager, 'assistant');
|
|
21
|
+
* for await (const chunk of modelStream) {
|
|
22
|
+
* collector.write(chunk);
|
|
23
|
+
* }
|
|
24
|
+
* const turn = await collector.finalize();
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function createStreamCollector(manager: MemoryManager, role: TurnRole, actor?: string): StreamCollector;
|
|
28
|
+
/**
|
|
29
|
+
* Processes an async iterable stream as a single turn.
|
|
30
|
+
* Collects all chunks, then commits the full content.
|
|
31
|
+
*
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const turn = await processStreamingTurn(manager, 'assistant', modelStream);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function processStreamingTurn(manager: MemoryManager, role: TurnRole, stream: AsyncIterable<string>, actor?: string): Promise<Turn>;
|
|
37
|
+
//# sourceMappingURL=streaming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/core/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,wCAAwC;IACxC,OAAO,IAAI,MAAM,CAAC;IAClB,iEAAiE;IACjE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,QAAQ,EACd,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,CAyBjB;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a StreamCollector that buffers streamed model output and commits
|
|
3
|
+
* the full response as a single turn when the stream ends.
|
|
4
|
+
*
|
|
5
|
+
* ```typescript
|
|
6
|
+
* const collector = createStreamCollector(manager, 'assistant');
|
|
7
|
+
* for await (const chunk of modelStream) {
|
|
8
|
+
* collector.write(chunk);
|
|
9
|
+
* }
|
|
10
|
+
* const turn = await collector.finalize();
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export function createStreamCollector(manager, role, actor) {
|
|
14
|
+
const chunks = [];
|
|
15
|
+
let finalized = false;
|
|
16
|
+
return {
|
|
17
|
+
write(chunk) {
|
|
18
|
+
if (finalized) {
|
|
19
|
+
throw new Error('StreamCollector: cannot write after finalize()');
|
|
20
|
+
}
|
|
21
|
+
chunks.push(chunk);
|
|
22
|
+
},
|
|
23
|
+
getText() {
|
|
24
|
+
return chunks.join('');
|
|
25
|
+
},
|
|
26
|
+
async finalize() {
|
|
27
|
+
if (finalized) {
|
|
28
|
+
throw new Error('StreamCollector: already finalized');
|
|
29
|
+
}
|
|
30
|
+
finalized = true;
|
|
31
|
+
const content = chunks.join('');
|
|
32
|
+
return manager.processTurn(role, content, actor);
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Processes an async iterable stream as a single turn.
|
|
38
|
+
* Collects all chunks, then commits the full content.
|
|
39
|
+
*
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const turn = await processStreamingTurn(manager, 'assistant', modelStream);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export async function processStreamingTurn(manager, role, stream, actor) {
|
|
45
|
+
const collector = createStreamCollector(manager, role, actor);
|
|
46
|
+
for await (const chunk of stream) {
|
|
47
|
+
collector.write(chunk);
|
|
48
|
+
}
|
|
49
|
+
return collector.finalize();
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=streaming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/core/streaming.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAsB,EACtB,IAAc,EACd,KAAc;IAEd,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,OAAO;QACL,KAAK,CAAC,KAAa;YACjB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO;YACL,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAsB,EACtB,IAAc,EACd,MAA6B,EAC7B,KAAc;IAEd,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9D,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ScopeLevel } from '../contracts/identity.js';
|
|
2
|
+
import type { KnowledgeMemory } from '../contracts/types.js';
|
|
3
|
+
import type { MemoryManager } from './manager.js';
|
|
4
|
+
export declare function createMemorySync(options: {
|
|
5
|
+
manager: MemoryManager;
|
|
6
|
+
scopeLevel?: ScopeLevel;
|
|
7
|
+
pollIntervalMs?: number;
|
|
8
|
+
}): {
|
|
9
|
+
onKnowledgeChange(handler: (knowledge: KnowledgeMemory[]) => void): () => boolean;
|
|
10
|
+
startPolling(): void;
|
|
11
|
+
stopPolling(): void;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;+BAyB8B,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,IAAI;;;EAiBpE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export function createMemorySync(options) {
|
|
2
|
+
const handlers = new Set();
|
|
3
|
+
const pollIntervalMs = options.pollIntervalMs ?? 5000;
|
|
4
|
+
let timer = null;
|
|
5
|
+
let lastSeen = new Date(0);
|
|
6
|
+
let inFlight = false;
|
|
7
|
+
async function pollOnce() {
|
|
8
|
+
if (inFlight)
|
|
9
|
+
return;
|
|
10
|
+
inFlight = true;
|
|
11
|
+
try {
|
|
12
|
+
const changes = await options.manager.pollForChanges(lastSeen, {
|
|
13
|
+
scopeLevel: options.scopeLevel,
|
|
14
|
+
});
|
|
15
|
+
if (changes.length > 0) {
|
|
16
|
+
const newest = Math.max(...changes.map((item) => item.created_at));
|
|
17
|
+
lastSeen = new Date(newest * 1000);
|
|
18
|
+
handlers.forEach((handler) => handler(changes));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
inFlight = false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
onKnowledgeChange(handler) {
|
|
27
|
+
handlers.add(handler);
|
|
28
|
+
return () => handlers.delete(handler);
|
|
29
|
+
},
|
|
30
|
+
startPolling() {
|
|
31
|
+
if (timer)
|
|
32
|
+
return;
|
|
33
|
+
timer = setInterval(() => {
|
|
34
|
+
void pollOnce();
|
|
35
|
+
}, pollIntervalMs);
|
|
36
|
+
void pollOnce();
|
|
37
|
+
},
|
|
38
|
+
stopPolling() {
|
|
39
|
+
if (!timer)
|
|
40
|
+
return;
|
|
41
|
+
clearInterval(timer);
|
|
42
|
+
timer = null;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,gBAAgB,CAAC,OAIhC;IACC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0C,CAAC;IACnE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IACtD,IAAI,KAAK,GAA0C,IAAI,CAAC;IACxD,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,UAAU,QAAQ;QACrB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE;gBAC7D,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBACnE,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBACnC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,iBAAiB,CAAC,OAA+C;YAC/D,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,YAAY;YACV,IAAI,KAAK;gBAAE,OAAO;YAClB,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBACvB,KAAK,QAAQ,EAAE,CAAC;YAClB,CAAC,EAAE,cAAc,CAAC,CAAC;YACnB,KAAK,QAAQ,EAAE,CAAC;QAClB,CAAC;QACD,WAAW;YACT,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type MemoryScope } from '../contracts/identity.js';
|
|
2
|
+
import type { EventHook, Logger, MemoryEvent } from '../contracts/observability.js';
|
|
3
|
+
export interface TelemetryOptions {
|
|
4
|
+
logger?: Logger;
|
|
5
|
+
onEvent?: EventHook;
|
|
6
|
+
}
|
|
7
|
+
export declare function emitMemoryEvent(type: MemoryEvent['type'], scope: MemoryScope, options: TelemetryOptions | undefined, durationMs: number, meta?: Record<string, unknown>): void;
|
|
8
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,IAAI,CAYN"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { normalizeScope } from '../contracts/identity.js';
|
|
2
|
+
export function emitMemoryEvent(type, scope, options, durationMs, meta = {}) {
|
|
3
|
+
const normalizedScope = normalizeScope(scope);
|
|
4
|
+
const event = {
|
|
5
|
+
type,
|
|
6
|
+
scope: normalizedScope,
|
|
7
|
+
timestamp: Date.now(),
|
|
8
|
+
durationMs,
|
|
9
|
+
meta,
|
|
10
|
+
};
|
|
11
|
+
options?.onEvent?.(event);
|
|
12
|
+
options?.logger?.debug(`memory.${type}`, event.meta);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAoB,MAAM,0BAA0B,CAAC;AAQ5E,MAAM,UAAU,eAAe,CAC7B,IAAyB,EACzB,KAAkB,EAClB,OAAqC,EACrC,UAAkB,EAClB,OAAgC,EAAE;IAElC,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAgB;QACzB,IAAI;QACJ,KAAK,EAAE,eAAe;QACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,UAAU;QACV,IAAI;KACL,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MemoryScope } from '../contracts/identity.js';
|
|
2
|
+
export type TokenEstimator = (text: string) => number;
|
|
3
|
+
export declare function createCharacterRatioTokenEstimator(charsPerToken?: number, multiplier?: number): TokenEstimator;
|
|
4
|
+
export declare function createModelTokenEstimator(model?: string): TokenEstimator;
|
|
5
|
+
export declare function createTiktokenEstimator(model?: string): Promise<TokenEstimator>;
|
|
6
|
+
export declare function estimateTokens(text: string): number;
|
|
7
|
+
export declare function createSessionId(scope: MemoryScope): string;
|
|
8
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/core/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAW5D,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAGtD,wBAAgB,kCAAkC,CAChD,aAAa,SAAkB,EAC/B,UAAU,SAAmB,GAC5B,cAAc,CAKhB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAQxE;AAED,wBAAsB,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2BrF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAK1D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { randomBytes } from 'crypto';
|
|
2
|
+
import { normalizeScope } from '../contracts/identity.js';
|
|
3
|
+
const TOKEN_MULTIPLIER = 1.15;
|
|
4
|
+
const CHARS_PER_TOKEN = 4;
|
|
5
|
+
const MODEL_CHAR_RATIOS = [
|
|
6
|
+
{ match: /gpt-4|gpt-5|o1|o3|o4/i, charsPerToken: 3.3 },
|
|
7
|
+
{ match: /claude/i, charsPerToken: 3.5 },
|
|
8
|
+
{ match: /llama|mistral|mixtral/i, charsPerToken: 3.7 },
|
|
9
|
+
];
|
|
10
|
+
const defaultTokenEstimator = createCharacterRatioTokenEstimator();
|
|
11
|
+
export function createCharacterRatioTokenEstimator(charsPerToken = CHARS_PER_TOKEN, multiplier = TOKEN_MULTIPLIER) {
|
|
12
|
+
return (text) => {
|
|
13
|
+
if (text.length === 0)
|
|
14
|
+
return 0;
|
|
15
|
+
return Math.max(1, Math.ceil((text.length / charsPerToken) * multiplier));
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function createModelTokenEstimator(model) {
|
|
19
|
+
if (!model) {
|
|
20
|
+
return createCharacterRatioTokenEstimator();
|
|
21
|
+
}
|
|
22
|
+
const resolved = MODEL_CHAR_RATIOS.find((entry) => entry.match.test(model))?.charsPerToken ?? CHARS_PER_TOKEN;
|
|
23
|
+
return createCharacterRatioTokenEstimator(resolved);
|
|
24
|
+
}
|
|
25
|
+
export async function createTiktokenEstimator(model) {
|
|
26
|
+
try {
|
|
27
|
+
const moduleName = 'tiktoken';
|
|
28
|
+
const tiktokenModule = await import(moduleName);
|
|
29
|
+
const encodingForModel = tiktokenModule.encoding_for_model ??
|
|
30
|
+
tiktokenModule.encodingForModel ??
|
|
31
|
+
tiktokenModule.getEncodingForModel;
|
|
32
|
+
const getEncoding = tiktokenModule.get_encoding ?? tiktokenModule.getEncoding;
|
|
33
|
+
const encoding = (typeof encodingForModel === 'function' && model
|
|
34
|
+
? encodingForModel(model)
|
|
35
|
+
: undefined) ??
|
|
36
|
+
(typeof getEncoding === 'function' ? getEncoding('cl100k_base') : undefined);
|
|
37
|
+
if (!encoding || typeof encoding.encode !== 'function') {
|
|
38
|
+
return createModelTokenEstimator(model);
|
|
39
|
+
}
|
|
40
|
+
return (text) => {
|
|
41
|
+
if (text.length === 0)
|
|
42
|
+
return 0;
|
|
43
|
+
return Math.max(1, encoding.encode(text).length);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return createModelTokenEstimator(model);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function estimateTokens(text) {
|
|
51
|
+
return defaultTokenEstimator(text);
|
|
52
|
+
}
|
|
53
|
+
export function createSessionId(scope) {
|
|
54
|
+
normalizeScope(scope);
|
|
55
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
56
|
+
const rand = randomBytes(4).toString('hex');
|
|
57
|
+
return ['session', date, rand].join('_');
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/core/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ExtractionPolicy } from '../contracts/policy.js';
|
|
2
|
+
import type { KnowledgeCandidate, KnowledgeConflict, KnowledgeEvidence, KnowledgeMemory, KnowledgeTrustAssessment } from '../contracts/types.js';
|
|
3
|
+
export declare function computeContradictionScore(evidence: KnowledgeEvidence[]): number;
|
|
4
|
+
export declare function assessCandidateTrust(input: {
|
|
5
|
+
candidate: KnowledgeCandidate;
|
|
6
|
+
evidence: KnowledgeEvidence[];
|
|
7
|
+
policy: Required<ExtractionPolicy>;
|
|
8
|
+
existingKnowledge?: KnowledgeMemory | null;
|
|
9
|
+
relation?: KnowledgeConflict['relation'] | 'created';
|
|
10
|
+
}): KnowledgeTrustAssessment;
|
|
11
|
+
export declare function assessKnowledgeReverification(input: {
|
|
12
|
+
knowledge: KnowledgeMemory;
|
|
13
|
+
evidence: KnowledgeEvidence[];
|
|
14
|
+
policy: Required<ExtractionPolicy>;
|
|
15
|
+
}): KnowledgeTrustAssessment;
|
|
16
|
+
export declare function buildKnowledgeConflict(input: {
|
|
17
|
+
existing: KnowledgeMemory;
|
|
18
|
+
candidateId: number | null;
|
|
19
|
+
relation: KnowledgeConflict['relation'];
|
|
20
|
+
contradictionScore: number;
|
|
21
|
+
policy: Required<ExtractionPolicy>;
|
|
22
|
+
}): KnowledgeConflict;
|
|
23
|
+
//# sourceMappingURL=trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../src/core/trust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAuB/B,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAQ/E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACnC,iBAAiB,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACtD,GAAG,wBAAwB,CAoG3B;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;CACpC,GAAG,wBAAwB,CAqC3B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;CACpC,GAAG,iBAAiB,CAcpB"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
function average(values) {
|
|
2
|
+
if (values.length === 0)
|
|
3
|
+
return 0;
|
|
4
|
+
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
5
|
+
}
|
|
6
|
+
function clamp(value, min = 0, max = 1) {
|
|
7
|
+
return Math.max(min, Math.min(max, value));
|
|
8
|
+
}
|
|
9
|
+
function contradictionPenalty(score, policy) {
|
|
10
|
+
if (score >= policy.contradictionSeverityHighThreshold)
|
|
11
|
+
return 'high';
|
|
12
|
+
if (score >= policy.contradictionSeverityMediumThreshold)
|
|
13
|
+
return 'medium';
|
|
14
|
+
return 'low';
|
|
15
|
+
}
|
|
16
|
+
export function computeContradictionScore(evidence) {
|
|
17
|
+
const supporting = evidence.filter((item) => item.support_polarity === 'supports');
|
|
18
|
+
const contradicting = evidence.filter((item) => item.support_polarity === 'contradicts');
|
|
19
|
+
if (supporting.length === 0 && contradicting.length === 0)
|
|
20
|
+
return 0;
|
|
21
|
+
const supportWeight = supporting.reduce((sum, item) => sum + item.explicitness_score, 0);
|
|
22
|
+
const contradictionWeight = contradicting.reduce((sum, item) => sum + item.explicitness_score, 0);
|
|
23
|
+
const total = supportWeight + contradictionWeight;
|
|
24
|
+
return total <= 0 ? 0 : contradictionWeight / total;
|
|
25
|
+
}
|
|
26
|
+
export function assessCandidateTrust(input) {
|
|
27
|
+
const { candidate, evidence, policy } = input;
|
|
28
|
+
const relation = input.relation ?? 'created';
|
|
29
|
+
const supporting = evidence.filter((item) => item.support_polarity === 'supports');
|
|
30
|
+
const contradicting = evidence.filter((item) => item.support_polarity === 'contradicts');
|
|
31
|
+
const assistantSupport = supporting.filter((item) => item.source_type === 'assistant_turn').length;
|
|
32
|
+
const toolSupport = supporting.filter((item) => ['tool_output', 'execution_result'].includes(item.source_type)).length;
|
|
33
|
+
const humanFeedbackSupport = supporting.filter((item) => item.source_type === 'human_feedback').length;
|
|
34
|
+
const explicitSupport = supporting.filter((item) => item.is_explicit).length;
|
|
35
|
+
const protectedSingleSourceSupport = supporting.some((item) => ['user_turn', 'system_turn', 'human_feedback', 'tool_output'].includes(item.source_type));
|
|
36
|
+
const successSupport = supporting.filter((item) => item.outcome === 'success').length;
|
|
37
|
+
const failureSupport = supporting.filter((item) => item.outcome === 'failure').length;
|
|
38
|
+
const contradictionScore = computeContradictionScore(evidence);
|
|
39
|
+
const reasons = [];
|
|
40
|
+
let trustScore = candidate.trust_score;
|
|
41
|
+
if (policy.requireGroundingForTrusted && supporting.length === 0) {
|
|
42
|
+
trustScore -= policy.noGroundingPenalty;
|
|
43
|
+
reasons.push('no_raw_turn_grounding');
|
|
44
|
+
}
|
|
45
|
+
if (assistantSupport > 0) {
|
|
46
|
+
trustScore -= policy.assistantClaimPenalty * assistantSupport;
|
|
47
|
+
reasons.push('assistant_claim_penalty');
|
|
48
|
+
}
|
|
49
|
+
if (toolSupport > 0) {
|
|
50
|
+
trustScore += policy.toolEvidenceBoost * toolSupport;
|
|
51
|
+
reasons.push('tool_or_feedback_evidence');
|
|
52
|
+
}
|
|
53
|
+
if (humanFeedbackSupport > 0) {
|
|
54
|
+
trustScore += policy.humanFeedbackBoost * humanFeedbackSupport;
|
|
55
|
+
reasons.push('human_feedback_evidence');
|
|
56
|
+
}
|
|
57
|
+
if (explicitSupport > 0) {
|
|
58
|
+
trustScore += policy.explicitStatementBoost * explicitSupport;
|
|
59
|
+
reasons.push('explicit_support');
|
|
60
|
+
}
|
|
61
|
+
if (successSupport > 0) {
|
|
62
|
+
trustScore += policy.executionSuccessBoost * successSupport;
|
|
63
|
+
reasons.push('successful_outcome_support');
|
|
64
|
+
}
|
|
65
|
+
if (failureSupport > 0) {
|
|
66
|
+
trustScore -= policy.executionFailurePenalty * failureSupport;
|
|
67
|
+
reasons.push('failure_outcome_penalty');
|
|
68
|
+
}
|
|
69
|
+
trustScore -= contradictionScore * policy.contradictionTrustPenalty;
|
|
70
|
+
if (contradictionScore > 0) {
|
|
71
|
+
reasons.push('contradictory_evidence_present');
|
|
72
|
+
}
|
|
73
|
+
trustScore = clamp(trustScore);
|
|
74
|
+
if (contradictionScore >= policy.contradictionDisputeThreshold) {
|
|
75
|
+
return {
|
|
76
|
+
trust_score: trustScore,
|
|
77
|
+
state: 'disputed',
|
|
78
|
+
decision: input.existingKnowledge ? 'mark_disputed' : 'reject_candidate',
|
|
79
|
+
reasons,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if ((supporting.length >= policy.minimumEvidenceCountForTrusted ||
|
|
83
|
+
((candidate.knowledge_class === 'constraint' || candidate.knowledge_class === 'identity') &&
|
|
84
|
+
protectedSingleSourceSupport &&
|
|
85
|
+
explicitSupport > 0 &&
|
|
86
|
+
contradicting.length === 0 &&
|
|
87
|
+
relation !== 'conflict' &&
|
|
88
|
+
relation !== 'update')) &&
|
|
89
|
+
trustScore >= policy.trustPromotionThreshold) {
|
|
90
|
+
return {
|
|
91
|
+
trust_score: trustScore,
|
|
92
|
+
state: 'trusted',
|
|
93
|
+
decision: input.relation === 'update' || input.relation === 'conflict'
|
|
94
|
+
? 'supersede_existing'
|
|
95
|
+
: 'promote_candidate',
|
|
96
|
+
reasons,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (trustScore >= policy.trustProvisionalThreshold && supporting.length > 0) {
|
|
100
|
+
return {
|
|
101
|
+
trust_score: trustScore,
|
|
102
|
+
state: 'provisional',
|
|
103
|
+
decision: 'keep_provisional',
|
|
104
|
+
reasons,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
trust_score: trustScore,
|
|
109
|
+
state: 'candidate',
|
|
110
|
+
decision: 'reject_candidate',
|
|
111
|
+
reasons,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export function assessKnowledgeReverification(input) {
|
|
115
|
+
const contradictionScore = computeContradictionScore(input.evidence);
|
|
116
|
+
const explicitness = average(input.evidence.map((item) => item.explicitness_score));
|
|
117
|
+
const baseCandidate = {
|
|
118
|
+
id: input.knowledge.id,
|
|
119
|
+
tenant_id: input.knowledge.tenant_id,
|
|
120
|
+
system_id: input.knowledge.system_id,
|
|
121
|
+
workspace_id: input.knowledge.workspace_id,
|
|
122
|
+
collaboration_id: input.knowledge.collaboration_id,
|
|
123
|
+
scope_id: input.knowledge.scope_id,
|
|
124
|
+
working_memory_id: input.knowledge.source_working_memory_id ?? 0,
|
|
125
|
+
fact: input.knowledge.fact,
|
|
126
|
+
fact_type: input.knowledge.fact_type,
|
|
127
|
+
knowledge_class: input.knowledge.knowledge_class,
|
|
128
|
+
normalized_fact: input.knowledge.normalized_fact ?? input.knowledge.fact.toLowerCase(),
|
|
129
|
+
slot_key: input.knowledge.slot_key,
|
|
130
|
+
confidence: input.knowledge.confidence,
|
|
131
|
+
source_summary: true,
|
|
132
|
+
source_turns: input.evidence.some((item) => item.support_polarity === 'supports'),
|
|
133
|
+
grounding_strength: input.knowledge.grounding_strength,
|
|
134
|
+
evidence_count: input.evidence.filter((item) => item.support_polarity === 'supports').length,
|
|
135
|
+
trust_score: clamp(input.knowledge.trust_score +
|
|
136
|
+
explicitness * input.policy.reverificationExplicitnessBoost -
|
|
137
|
+
contradictionScore * input.policy.reverificationContradictionPenalty),
|
|
138
|
+
state: input.knowledge.knowledge_state === 'provisional' ? 'provisional' : 'candidate',
|
|
139
|
+
created_at: input.knowledge.created_at,
|
|
140
|
+
promoted_knowledge_id: input.knowledge.id,
|
|
141
|
+
};
|
|
142
|
+
return assessCandidateTrust({
|
|
143
|
+
candidate: baseCandidate,
|
|
144
|
+
evidence: input.evidence,
|
|
145
|
+
policy: input.policy,
|
|
146
|
+
existingKnowledge: input.knowledge,
|
|
147
|
+
relation: 'created',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
export function buildKnowledgeConflict(input) {
|
|
151
|
+
const severity = contradictionPenalty(input.contradictionScore, input.policy);
|
|
152
|
+
return {
|
|
153
|
+
existing_knowledge_id: input.existing.id,
|
|
154
|
+
candidate_id: input.candidateId,
|
|
155
|
+
relation: input.relation,
|
|
156
|
+
severity,
|
|
157
|
+
resolution: input.relation === 'update'
|
|
158
|
+
? 'supersede'
|
|
159
|
+
: input.contradictionScore >= input.policy.contradictionDisputeThreshold
|
|
160
|
+
? 'dispute'
|
|
161
|
+
: 'ignore',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/core/trust.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type MemoryScope, type NormalizedMemoryScope } from '../contracts/identity.js';
|
|
2
|
+
import type { CompactionState, CompactionTrigger, ContextMonitorUpsert, EvidenceSourceType, FactConfidence, FactSource, FactType, GroundingStrength, KnowledgeAuditDecision, KnowledgeClass, KnowledgeState, NewKnowledgeCandidate, NewKnowledgeEvidence, NewCompactionLog, NewKnowledgeMemoryAudit, NewKnowledgeMemory, NewWorkItem, NewTurn, NewWorkingMemory, TimeRange, TurnRole, WorkItemKind, WorkItemStatus } from '../contracts/types.js';
|
|
3
|
+
export declare function nowSeconds(): number;
|
|
4
|
+
export declare function assertNonEmpty(value: string, name: string): void;
|
|
5
|
+
export declare function assertEnum<T>(value: T, allowed: readonly T[], name: string): void;
|
|
6
|
+
export declare function assertStringArray(value: string[], name: string): void;
|
|
7
|
+
export declare function assertMaxEntries(value: string[], name: string, max: number): void;
|
|
8
|
+
export declare function assertNumberRange(value: number, name: string, min: number, max: number): void;
|
|
9
|
+
export declare function assertTurnRange(startId: number, endId: number): void;
|
|
10
|
+
export declare function assertScope(scope: MemoryScope): NormalizedMemoryScope;
|
|
11
|
+
export declare function assertTurnRole(role: TurnRole): void;
|
|
12
|
+
export declare function assertCompactionTrigger(trigger: CompactionTrigger, name?: string): void;
|
|
13
|
+
export declare function assertFactType(factType: FactType): void;
|
|
14
|
+
export declare function assertFactSource(source: FactSource): void;
|
|
15
|
+
export declare function assertFactConfidence(confidence: FactConfidence): void;
|
|
16
|
+
export declare function assertKnowledgeState(state: KnowledgeState): void;
|
|
17
|
+
export declare function assertKnowledgeClass(knowledgeClass: KnowledgeClass): void;
|
|
18
|
+
export declare function assertEvidenceSourceType(sourceType: EvidenceSourceType): void;
|
|
19
|
+
export declare function assertGroundingStrength(strength: GroundingStrength): void;
|
|
20
|
+
export declare function assertSupportPolarity(polarity: 'supports' | 'contradicts'): void;
|
|
21
|
+
export declare function assertKnowledgeAuditDecision(decision: KnowledgeAuditDecision): void;
|
|
22
|
+
export declare function assertCompactionState(state: CompactionState): void;
|
|
23
|
+
export declare function assertWorkItemKind(kind: WorkItemKind): void;
|
|
24
|
+
export declare function assertWorkItemStatus(status: WorkItemStatus): void;
|
|
25
|
+
export declare function validateNewTurn(input: NewTurn): NormalizedMemoryScope;
|
|
26
|
+
export declare function validateNewWorkingMemory(input: NewWorkingMemory): NormalizedMemoryScope;
|
|
27
|
+
export declare function validateNewKnowledgeMemory(input: NewKnowledgeMemory): NormalizedMemoryScope;
|
|
28
|
+
export declare function validateNewKnowledgeMemoryAudit(input: NewKnowledgeMemoryAudit): NormalizedMemoryScope;
|
|
29
|
+
export declare function validateNewKnowledgeCandidate(input: NewKnowledgeCandidate): NormalizedMemoryScope;
|
|
30
|
+
export declare function validateNewKnowledgeEvidence(input: NewKnowledgeEvidence): NormalizedMemoryScope;
|
|
31
|
+
export declare function validateContextMonitorUpsert(input: ContextMonitorUpsert): NormalizedMemoryScope;
|
|
32
|
+
export declare function validateNewCompactionLog(input: NewCompactionLog): NormalizedMemoryScope;
|
|
33
|
+
export declare function validateTimeRange(range: TimeRange): void;
|
|
34
|
+
export declare function validateNewWorkItem(input: NewWorkItem): NormalizedMemoryScope;
|
|
35
|
+
export declare function assertArchiveInput(id: number, archivedAt: number, compactionLogId: number): void;
|
|
36
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
|