@askdkc/kiokuko 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +31 -0
- package/README.ko.md +31 -0
- package/README.md +32 -0
- package/README.zh-CN.md +29 -0
- package/dist/akinator/agent-task.d.ts +3 -0
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +38 -4
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +89 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +43 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/embeddings.d.ts +19 -0
- package/dist/commands/embeddings.d.ts.map +1 -0
- package/dist/commands/embeddings.js +159 -0
- package/dist/commands/embeddings.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +7 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +22 -8
- package/dist/commands/use.js.map +1 -1
- package/dist/context/broker.d.ts +3 -1
- package/dist/context/broker.d.ts.map +1 -1
- package/dist/context/broker.js +11 -7
- package/dist/context/broker.js.map +1 -1
- package/dist/context/delivery.d.ts.map +1 -1
- package/dist/context/delivery.js +5 -3
- package/dist/context/delivery.js.map +1 -1
- package/dist/context/ranking.d.ts +1 -1
- package/dist/context/ranking.d.ts.map +1 -1
- package/dist/context/ranking.js +1 -0
- package/dist/context/ranking.js.map +1 -1
- package/dist/context/scoped-broker.d.ts +4 -3
- package/dist/context/scoped-broker.d.ts.map +1 -1
- package/dist/context/scoped-broker.js +45 -7
- package/dist/context/scoped-broker.js.map +1 -1
- package/dist/context/selection-state.d.ts +12 -0
- package/dist/context/selection-state.d.ts.map +1 -1
- package/dist/context/selection-state.js +117 -7
- package/dist/context/selection-state.js.map +1 -1
- package/dist/db/capabilities.d.ts +8 -0
- package/dist/db/capabilities.d.ts.map +1 -1
- package/dist/db/capabilities.js +14 -0
- package/dist/db/capabilities.js.map +1 -1
- package/dist/db/connection.d.ts +7 -0
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +56 -0
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +3 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/embedding/backend.d.ts +27 -0
- package/dist/embedding/backend.d.ts.map +1 -0
- package/dist/embedding/backend.js +51 -0
- package/dist/embedding/backend.js.map +1 -0
- package/dist/embedding/config.d.ts +7 -0
- package/dist/embedding/config.d.ts.map +1 -0
- package/dist/embedding/config.js +125 -0
- package/dist/embedding/config.js.map +1 -0
- package/dist/embedding/diagnostics.d.ts +34 -0
- package/dist/embedding/diagnostics.d.ts.map +1 -0
- package/dist/embedding/diagnostics.js +248 -0
- package/dist/embedding/diagnostics.js.map +1 -0
- package/dist/embedding/document.d.ts +15 -0
- package/dist/embedding/document.d.ts.map +1 -0
- package/dist/embedding/document.js +102 -0
- package/dist/embedding/document.js.map +1 -0
- package/dist/embedding/javascript-backend.d.ts +11 -0
- package/dist/embedding/javascript-backend.d.ts.map +1 -0
- package/dist/embedding/javascript-backend.js +164 -0
- package/dist/embedding/javascript-backend.js.map +1 -0
- package/dist/embedding/jobs.d.ts +67 -0
- package/dist/embedding/jobs.d.ts.map +1 -0
- package/dist/embedding/jobs.js +259 -0
- package/dist/embedding/jobs.js.map +1 -0
- package/dist/embedding/openai-compatible-provider.d.ts +24 -0
- package/dist/embedding/openai-compatible-provider.d.ts.map +1 -0
- package/dist/embedding/openai-compatible-provider.js +330 -0
- package/dist/embedding/openai-compatible-provider.js.map +1 -0
- package/dist/embedding/profile.d.ts +6 -0
- package/dist/embedding/profile.d.ts.map +1 -0
- package/dist/embedding/profile.js +31 -0
- package/dist/embedding/profile.js.map +1 -0
- package/dist/embedding/provider.d.ts +13 -0
- package/dist/embedding/provider.d.ts.map +1 -0
- package/dist/embedding/provider.js +17 -0
- package/dist/embedding/provider.js.map +1 -0
- package/dist/embedding/query-cache.d.ts +39 -0
- package/dist/embedding/query-cache.d.ts.map +1 -0
- package/dist/embedding/query-cache.js +160 -0
- package/dist/embedding/query-cache.js.map +1 -0
- package/dist/embedding/runtime.d.ts +13 -0
- package/dist/embedding/runtime.d.ts.map +1 -0
- package/dist/embedding/runtime.js +373 -0
- package/dist/embedding/runtime.js.map +1 -0
- package/dist/embedding/sqlite-vec-backend.d.ts +9 -0
- package/dist/embedding/sqlite-vec-backend.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-backend.js +106 -0
- package/dist/embedding/sqlite-vec-backend.js.map +1 -0
- package/dist/embedding/sqlite-vec-loader.d.ts +17 -0
- package/dist/embedding/sqlite-vec-loader.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-loader.js +51 -0
- package/dist/embedding/sqlite-vec-loader.js.map +1 -0
- package/dist/embedding/store.d.ts +64 -0
- package/dist/embedding/store.d.ts.map +1 -0
- package/dist/embedding/store.js +377 -0
- package/dist/embedding/store.js.map +1 -0
- package/dist/embedding/types.d.ts +97 -0
- package/dist/embedding/types.d.ts.map +1 -0
- package/dist/embedding/types.js +2 -0
- package/dist/embedding/types.js.map +1 -0
- package/dist/embedding/vector.d.ts +9 -0
- package/dist/embedding/vector.d.ts.map +1 -0
- package/dist/embedding/vector.js +90 -0
- package/dist/embedding/vector.js.map +1 -0
- package/dist/embedding/worker.d.ts +23 -0
- package/dist/embedding/worker.d.ts.map +1 -0
- package/dist/embedding/worker.js +84 -0
- package/dist/embedding/worker.js.map +1 -0
- package/dist/enno-oduno/schemas.d.ts +2 -2
- package/dist/ledger/checkpoint-contract.d.ts +2 -2
- package/dist/mcp/bounded-stdio-transport.d.ts +12 -2
- package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -1
- package/dist/mcp/bounded-stdio-transport.js +103 -4
- package/dist/mcp/bounded-stdio-transport.js.map +1 -1
- package/dist/mcp/runtime-owner.d.ts +27 -0
- package/dist/mcp/runtime-owner.d.ts.map +1 -0
- package/dist/mcp/runtime-owner.js +130 -0
- package/dist/mcp/runtime-owner.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +38 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory/checkpoint-contract.d.ts +3 -3
- package/dist/memory/entries.d.ts.map +1 -1
- package/dist/memory/entries.js +13 -0
- package/dist/memory/entries.js.map +1 -1
- package/dist/memory/federated-retrieval.d.ts +3 -2
- package/dist/memory/federated-retrieval.d.ts.map +1 -1
- package/dist/memory/federated-retrieval.js +112 -31
- package/dist/memory/federated-retrieval.js.map +1 -1
- package/dist/memory/hybrid-retrieval.d.ts +9 -2
- package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/memory/hybrid-retrieval.js +60 -13
- package/dist/memory/hybrid-retrieval.js.map +1 -1
- package/dist/memory/retrieval.d.ts +4 -3
- package/dist/memory/retrieval.d.ts.map +1 -1
- package/dist/memory/retrieval.js +6 -6
- package/dist/memory/retrieval.js.map +1 -1
- package/dist/memory/scoped-memory.d.ts +2 -1
- package/dist/memory/scoped-memory.d.ts.map +1 -1
- package/dist/memory/scoped-memory.js +2 -2
- package/dist/memory/scoped-memory.js.map +1 -1
- package/dist/server/agent-application.js +1 -1
- package/dist/server/agent-application.js.map +1 -1
- package/dist/server/http.d.ts +17 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +76 -13
- package/dist/server/http.js.map +1 -1
- package/migrations/021_semantic_embeddings.sql +122 -0
- package/migrations/down/021_semantic_embeddings.sql +17 -0
- package/package.json +7 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { KiokukoError } from '../errors.js';
|
|
3
|
+
export const MIN_VECTOR_DIMENSIONS = 2;
|
|
4
|
+
export const MAX_VECTOR_DIMENSIONS = 8_192;
|
|
5
|
+
function invalid(message) {
|
|
6
|
+
throw new KiokukoError('VALIDATION_ERROR', message);
|
|
7
|
+
}
|
|
8
|
+
function dimensionsValue(dimensions) {
|
|
9
|
+
if (!Number.isSafeInteger(dimensions) || dimensions < MIN_VECTOR_DIMENSIONS || dimensions > MAX_VECTOR_DIMENSIONS) {
|
|
10
|
+
invalid('Vector dimensions are invalid');
|
|
11
|
+
}
|
|
12
|
+
return dimensions;
|
|
13
|
+
}
|
|
14
|
+
function validateFiniteVector(vector, expectedDimensions) {
|
|
15
|
+
const dimensions = dimensionsValue(expectedDimensions ?? vector.length);
|
|
16
|
+
if (vector.length !== dimensions)
|
|
17
|
+
invalid('Vector dimensions do not match');
|
|
18
|
+
let normSquared = 0;
|
|
19
|
+
for (const value of vector) {
|
|
20
|
+
if (!Number.isFinite(value))
|
|
21
|
+
invalid('Vector contains a non-finite value');
|
|
22
|
+
normSquared += value * value;
|
|
23
|
+
}
|
|
24
|
+
if (!Number.isFinite(normSquared) || normSquared === 0)
|
|
25
|
+
invalid('Vector norm must be non-zero');
|
|
26
|
+
return vector;
|
|
27
|
+
}
|
|
28
|
+
export function normalizeVector(input, expectedDimensions) {
|
|
29
|
+
const vector = input instanceof Float32Array ? new Float32Array(input) : new Float32Array(input);
|
|
30
|
+
return validateFiniteVector(vector, expectedDimensions);
|
|
31
|
+
}
|
|
32
|
+
export function encodeVector(input, expectedDimensions) {
|
|
33
|
+
const vector = normalizeVector(input, expectedDimensions);
|
|
34
|
+
const bytes = new Uint8Array(vector.byteLength);
|
|
35
|
+
const view = new DataView(bytes.buffer);
|
|
36
|
+
for (let index = 0; index < vector.length; index += 1) {
|
|
37
|
+
view.setFloat32(index * 4, vector[index], true);
|
|
38
|
+
}
|
|
39
|
+
return bytes;
|
|
40
|
+
}
|
|
41
|
+
function blobBytes(blob) {
|
|
42
|
+
if (blob instanceof Uint8Array)
|
|
43
|
+
return new Uint8Array(blob);
|
|
44
|
+
if (ArrayBuffer.isView(blob))
|
|
45
|
+
return new Uint8Array(blob.buffer.slice(blob.byteOffset, blob.byteOffset + blob.byteLength));
|
|
46
|
+
if (blob instanceof ArrayBuffer)
|
|
47
|
+
return new Uint8Array(blob.slice(0));
|
|
48
|
+
invalid('Vector BLOB is invalid');
|
|
49
|
+
}
|
|
50
|
+
export function decodeVector(blob, dimensions, expectedHash) {
|
|
51
|
+
const validDimensions = dimensionsValue(dimensions);
|
|
52
|
+
const bytes = blobBytes(blob);
|
|
53
|
+
if (bytes.byteLength !== validDimensions * 4)
|
|
54
|
+
invalid('Vector BLOB length does not match dimensions');
|
|
55
|
+
if (expectedHash !== undefined && hashVectorBytes(bytes) !== expectedHash) {
|
|
56
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Vector hash does not match its BLOB');
|
|
57
|
+
}
|
|
58
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
59
|
+
const vector = new Float32Array(validDimensions);
|
|
60
|
+
for (let index = 0; index < validDimensions; index += 1)
|
|
61
|
+
vector[index] = view.getFloat32(index * 4, true);
|
|
62
|
+
return validateFiniteVector(vector, validDimensions);
|
|
63
|
+
}
|
|
64
|
+
export function hashVectorBytes(bytes) {
|
|
65
|
+
return createHash('sha256').update(bytes).digest('hex');
|
|
66
|
+
}
|
|
67
|
+
export function hashVector(input) {
|
|
68
|
+
return hashVectorBytes(encodeVector(input));
|
|
69
|
+
}
|
|
70
|
+
export function cosineDistance(left, right) {
|
|
71
|
+
if (left.length !== right.length)
|
|
72
|
+
invalid('Vectors must have matching dimensions');
|
|
73
|
+
const first = validateFiniteVector(left);
|
|
74
|
+
const second = validateFiniteVector(right, first.length);
|
|
75
|
+
let dot = 0;
|
|
76
|
+
let leftNorm = 0;
|
|
77
|
+
let rightNorm = 0;
|
|
78
|
+
for (let index = 0; index < first.length; index += 1) {
|
|
79
|
+
const leftValue = first[index];
|
|
80
|
+
const rightValue = second[index];
|
|
81
|
+
dot += leftValue * rightValue;
|
|
82
|
+
leftNorm += leftValue * leftValue;
|
|
83
|
+
rightNorm += rightValue * rightValue;
|
|
84
|
+
}
|
|
85
|
+
const similarity = dot / Math.sqrt(leftNorm * rightNorm);
|
|
86
|
+
if (!Number.isFinite(similarity))
|
|
87
|
+
invalid('Vector cosine distance is invalid');
|
|
88
|
+
return Math.min(2, Math.max(0, 1 - similarity));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/embedding/vector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EmbeddingDrainResult, EmbeddingRuntime } from './types.js';
|
|
2
|
+
export declare const DEFAULT_EMBEDDING_WORKER_INTERVAL_MS = 5000;
|
|
3
|
+
export declare const DEFAULT_EMBEDDING_WORKER_MAX_JOBS = 64;
|
|
4
|
+
export declare const DEFAULT_EMBEDDING_WORKER_DEADLINE_MS = 120000;
|
|
5
|
+
export interface EmbeddingWorkerOptions {
|
|
6
|
+
readonly runtime: EmbeddingRuntime;
|
|
7
|
+
readonly intervalMs?: number;
|
|
8
|
+
readonly maxJobs?: number;
|
|
9
|
+
readonly deadlineMs?: number;
|
|
10
|
+
readonly setTimeout?: typeof setTimeout;
|
|
11
|
+
readonly clearTimeout?: typeof clearTimeout;
|
|
12
|
+
readonly onDrain?: (result: EmbeddingDrainResult) => void | PromiseLike<void>;
|
|
13
|
+
readonly onError?: (error: unknown) => void | PromiseLike<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface EmbeddingWorker {
|
|
16
|
+
readonly running: boolean;
|
|
17
|
+
start(): void;
|
|
18
|
+
stop(): void;
|
|
19
|
+
close(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/** Run bounded embedding drains without overlapping provider calls or timers. */
|
|
22
|
+
export declare function createEmbeddingWorker(options: EmbeddingWorkerOptions): EmbeddingWorker;
|
|
23
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/embedding/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,oCAAoC,OAAQ,CAAC;AAC1D,eAAO,MAAM,iCAAiC,KAAK,CAAC;AACpD,eAAO,MAAM,oCAAoC,SAAU,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAOD,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAqEtF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export const DEFAULT_EMBEDDING_WORKER_INTERVAL_MS = 5_000;
|
|
2
|
+
export const DEFAULT_EMBEDDING_WORKER_MAX_JOBS = 64;
|
|
3
|
+
export const DEFAULT_EMBEDDING_WORKER_DEADLINE_MS = 120_000;
|
|
4
|
+
function positiveInteger(value, label) {
|
|
5
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
6
|
+
throw new TypeError(`${label} must be a positive integer`);
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
/** Run bounded embedding drains without overlapping provider calls or timers. */
|
|
10
|
+
export function createEmbeddingWorker(options) {
|
|
11
|
+
const intervalMs = positiveInteger(options.intervalMs ?? DEFAULT_EMBEDDING_WORKER_INTERVAL_MS, 'intervalMs');
|
|
12
|
+
const maxJobs = positiveInteger(options.maxJobs ?? DEFAULT_EMBEDDING_WORKER_MAX_JOBS, 'maxJobs');
|
|
13
|
+
const deadlineMs = positiveInteger(options.deadlineMs ?? DEFAULT_EMBEDDING_WORKER_DEADLINE_MS, 'deadlineMs');
|
|
14
|
+
const setTimer = options.setTimeout ?? setTimeout;
|
|
15
|
+
const clearTimer = options.clearTimeout ?? clearTimeout;
|
|
16
|
+
let started = false;
|
|
17
|
+
let closing = false;
|
|
18
|
+
let timer;
|
|
19
|
+
let active;
|
|
20
|
+
const schedule = (delay) => {
|
|
21
|
+
if (!started || closing || timer !== undefined)
|
|
22
|
+
return;
|
|
23
|
+
timer = setTimer(() => {
|
|
24
|
+
timer = undefined;
|
|
25
|
+
void run();
|
|
26
|
+
}, delay);
|
|
27
|
+
};
|
|
28
|
+
const run = async () => {
|
|
29
|
+
if (!started || closing || active !== undefined)
|
|
30
|
+
return;
|
|
31
|
+
const operation = (async () => {
|
|
32
|
+
try {
|
|
33
|
+
const result = await options.runtime.drain({ maxJobs, deadlineMs });
|
|
34
|
+
await options.onDrain?.(result);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
try {
|
|
38
|
+
await options.onError?.(error);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// A background observer must not create an unhandled rejection.
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
})();
|
|
45
|
+
active = operation;
|
|
46
|
+
try {
|
|
47
|
+
await operation;
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
if (active === operation)
|
|
51
|
+
active = undefined;
|
|
52
|
+
schedule(intervalMs);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const stop = () => {
|
|
56
|
+
if (closing)
|
|
57
|
+
return;
|
|
58
|
+
closing = true;
|
|
59
|
+
started = false;
|
|
60
|
+
if (timer !== undefined) {
|
|
61
|
+
clearTimer(timer);
|
|
62
|
+
timer = undefined;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const worker = {
|
|
66
|
+
get running() {
|
|
67
|
+
return started && !closing;
|
|
68
|
+
},
|
|
69
|
+
start() {
|
|
70
|
+
if (started || closing)
|
|
71
|
+
return;
|
|
72
|
+
started = true;
|
|
73
|
+
schedule(0);
|
|
74
|
+
},
|
|
75
|
+
stop,
|
|
76
|
+
async close() {
|
|
77
|
+
stop();
|
|
78
|
+
await options.runtime.close();
|
|
79
|
+
await active;
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
return Object.freeze(worker);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/embedding/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -229,11 +229,11 @@ export declare const advisoryContributionSchemaPublic: z.ZodUnion<readonly [z.Zo
|
|
|
229
229
|
failed: "failed";
|
|
230
230
|
}>;
|
|
231
231
|
reasonCode: z.ZodEnum<{
|
|
232
|
+
invalid_response: "invalid_response";
|
|
232
233
|
unsafe_output: "unsafe_output";
|
|
233
234
|
host_read_only_unavailable: "host_read_only_unavailable";
|
|
234
235
|
host_execution_failed: "host_execution_failed";
|
|
235
236
|
host_timeout: "host_timeout";
|
|
236
|
-
invalid_response: "invalid_response";
|
|
237
237
|
}>;
|
|
238
238
|
}, z.core.$strict>]>;
|
|
239
239
|
export declare const adviceSubmissionSchema: z.ZodObject<{
|
|
@@ -373,11 +373,11 @@ export declare const adviceSubmissionSchema: z.ZodObject<{
|
|
|
373
373
|
failed: "failed";
|
|
374
374
|
}>;
|
|
375
375
|
reasonCode: z.ZodEnum<{
|
|
376
|
+
invalid_response: "invalid_response";
|
|
376
377
|
unsafe_output: "unsafe_output";
|
|
377
378
|
host_read_only_unavailable: "host_read_only_unavailable";
|
|
378
379
|
host_execution_failed: "host_execution_failed";
|
|
379
380
|
host_timeout: "host_timeout";
|
|
380
|
-
invalid_response: "invalid_response";
|
|
381
381
|
}>;
|
|
382
382
|
}, z.core.$strict>]>>;
|
|
383
383
|
}, z.core.$strict>;
|
|
@@ -92,8 +92,8 @@ export declare const checkpointTestEvidenceSchema: z.ZodObject<{
|
|
|
92
92
|
export declare const checkpointVerificationSchema: z.ZodObject<{
|
|
93
93
|
outcome: z.ZodEnum<{
|
|
94
94
|
unknown: "unknown";
|
|
95
|
-
stale: "stale";
|
|
96
95
|
failed: "failed";
|
|
96
|
+
stale: "stale";
|
|
97
97
|
fresh: "fresh";
|
|
98
98
|
}>;
|
|
99
99
|
}, z.core.$strict>;
|
|
@@ -124,8 +124,8 @@ export declare const checkpointEvidenceSchema: z.ZodObject<{
|
|
|
124
124
|
verification: z.ZodOptional<z.ZodObject<{
|
|
125
125
|
outcome: z.ZodEnum<{
|
|
126
126
|
unknown: "unknown";
|
|
127
|
-
stale: "stale";
|
|
128
127
|
failed: "failed";
|
|
128
|
+
stale: "stale";
|
|
129
129
|
fresh: "fresh";
|
|
130
130
|
}>;
|
|
131
131
|
}, z.core.$strict>>;
|
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
import type { Readable, Writable } from 'node:stream';
|
|
2
|
-
import type
|
|
2
|
+
import { type JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import type { Transport, TransportSendOptions } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
4
4
|
export declare const MAX_STDIO_JSON_RPC_MESSAGE_BYTES: number;
|
|
5
|
+
export declare const DEFAULT_MCP_REQUEST_TIMEOUT_MS = 55000;
|
|
6
|
+
export declare const MIN_MCP_REQUEST_TIMEOUT_MS = 10;
|
|
7
|
+
export declare const MAX_MCP_REQUEST_TIMEOUT_MS: number;
|
|
5
8
|
export declare class BoundedStdioServerTransport implements Transport {
|
|
6
9
|
private readonly input;
|
|
7
10
|
private readonly output;
|
|
8
11
|
private readonly maxMessageBytes;
|
|
12
|
+
private readonly requestTimeoutMs;
|
|
9
13
|
onclose?: () => void;
|
|
10
14
|
onerror?: (error: Error) => void;
|
|
11
15
|
onmessage?: <T extends JSONRPCMessage>(message: T) => void;
|
|
12
16
|
private buffer;
|
|
13
17
|
private discardingOversizedLine;
|
|
18
|
+
private readonly requestDeadlines;
|
|
14
19
|
private started;
|
|
15
|
-
|
|
20
|
+
private closed;
|
|
21
|
+
constructor(input?: Readable, output?: Writable, maxMessageBytes?: number, requestTimeoutMs?: number);
|
|
22
|
+
private clearRequestDeadline;
|
|
23
|
+
private startRequestDeadline;
|
|
24
|
+
private trackIncomingMessage;
|
|
16
25
|
private readonly onData;
|
|
17
26
|
private readonly onInputError;
|
|
27
|
+
private readonly onInputEnd;
|
|
18
28
|
private writeOversizedMessageError;
|
|
19
29
|
start(): Promise<void>;
|
|
20
30
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounded-stdio-transport.d.ts","sourceRoot":"","sources":["../../src/mcp/bounded-stdio-transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"bounded-stdio-transport.d.ts","sourceRoot":"","sources":["../../src/mcp/bounded-stdio-transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAa,KAAK,cAAc,EAAkB,MAAM,oCAAoC,CAAC;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAGrG,eAAO,MAAM,gCAAgC,QAAkB,CAAC;AAChE,eAAO,MAAM,8BAA8B,QAAS,CAAC;AACrD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AA8BzD,qBAAa,2BAA4B,YAAW,SAAS;IAYzD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAdnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IAE3D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuD;IACxF,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAGJ,KAAK,GAAE,QAAwB,EAC/B,MAAM,GAAE,QAAyB,EACjC,eAAe,SAAmC,EAClD,gBAAgB,SAAiC;IAYpE,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAwCrB;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAE3B;IAEF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAEzB;IAEF,OAAO,CAAC,0BAA0B;IAM5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAc9E"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import process from 'node:process';
|
|
2
|
+
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
2
3
|
import { deserializeMessage, serializeMessage } from '@modelcontextprotocol/sdk/shared/stdio.js';
|
|
3
4
|
export const MAX_STDIO_JSON_RPC_MESSAGE_BYTES = 8 * 1024 * 1024;
|
|
5
|
+
export const DEFAULT_MCP_REQUEST_TIMEOUT_MS = 55_000;
|
|
6
|
+
export const MIN_MCP_REQUEST_TIMEOUT_MS = 10;
|
|
7
|
+
export const MAX_MCP_REQUEST_TIMEOUT_MS = 5 * 60 * 1_000;
|
|
4
8
|
const MESSAGE_TOO_LARGE = Object.freeze({
|
|
5
9
|
jsonrpc: '2.0',
|
|
6
10
|
error: {
|
|
@@ -8,23 +12,99 @@ const MESSAGE_TOO_LARGE = Object.freeze({
|
|
|
8
12
|
message: 'JSON-RPC message exceeds the configured transport limit.',
|
|
9
13
|
},
|
|
10
14
|
});
|
|
15
|
+
function requestIdOf(message) {
|
|
16
|
+
if (!('id' in message))
|
|
17
|
+
return undefined;
|
|
18
|
+
return typeof message.id === 'string' || typeof message.id === 'number' ? message.id : undefined;
|
|
19
|
+
}
|
|
20
|
+
function isRequest(message) {
|
|
21
|
+
return 'method' in message && requestIdOf(message) !== undefined;
|
|
22
|
+
}
|
|
23
|
+
function isResponse(message) {
|
|
24
|
+
return !('method' in message) && requestIdOf(message) !== undefined;
|
|
25
|
+
}
|
|
26
|
+
function cancelledRequestId(message) {
|
|
27
|
+
if (!('method' in message) || message.method !== 'notifications/cancelled' || !('params' in message))
|
|
28
|
+
return undefined;
|
|
29
|
+
const params = message.params;
|
|
30
|
+
if (typeof params !== 'object' || params === null || !('requestId' in params))
|
|
31
|
+
return undefined;
|
|
32
|
+
return typeof params.requestId === 'string' || typeof params.requestId === 'number' ? params.requestId : undefined;
|
|
33
|
+
}
|
|
11
34
|
export class BoundedStdioServerTransport {
|
|
12
35
|
input;
|
|
13
36
|
output;
|
|
14
37
|
maxMessageBytes;
|
|
38
|
+
requestTimeoutMs;
|
|
15
39
|
onclose;
|
|
16
40
|
onerror;
|
|
17
41
|
onmessage;
|
|
18
42
|
buffer;
|
|
19
43
|
discardingOversizedLine = false;
|
|
44
|
+
requestDeadlines = new Map();
|
|
20
45
|
started = false;
|
|
21
|
-
|
|
46
|
+
closed = false;
|
|
47
|
+
constructor(input = process.stdin, output = process.stdout, maxMessageBytes = MAX_STDIO_JSON_RPC_MESSAGE_BYTES, requestTimeoutMs = DEFAULT_MCP_REQUEST_TIMEOUT_MS) {
|
|
22
48
|
this.input = input;
|
|
23
49
|
this.output = output;
|
|
24
50
|
this.maxMessageBytes = maxMessageBytes;
|
|
51
|
+
this.requestTimeoutMs = requestTimeoutMs;
|
|
25
52
|
if (!Number.isSafeInteger(maxMessageBytes) || maxMessageBytes < 1) {
|
|
26
53
|
throw new Error('Stdio message limit must be a positive integer');
|
|
27
54
|
}
|
|
55
|
+
if (!Number.isSafeInteger(requestTimeoutMs)
|
|
56
|
+
|| requestTimeoutMs < MIN_MCP_REQUEST_TIMEOUT_MS
|
|
57
|
+
|| requestTimeoutMs > MAX_MCP_REQUEST_TIMEOUT_MS) {
|
|
58
|
+
throw new Error(`MCP request timeout must be an integer between ${MIN_MCP_REQUEST_TIMEOUT_MS} and ${MAX_MCP_REQUEST_TIMEOUT_MS} milliseconds`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
clearRequestDeadline(requestId) {
|
|
62
|
+
const deadline = this.requestDeadlines.get(requestId);
|
|
63
|
+
if (deadline === undefined)
|
|
64
|
+
return;
|
|
65
|
+
clearTimeout(deadline);
|
|
66
|
+
this.requestDeadlines.delete(requestId);
|
|
67
|
+
}
|
|
68
|
+
startRequestDeadline(requestId) {
|
|
69
|
+
this.clearRequestDeadline(requestId);
|
|
70
|
+
const deadline = setTimeout(() => {
|
|
71
|
+
if (!this.requestDeadlines.delete(requestId))
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
this.onmessage?.({
|
|
75
|
+
jsonrpc: '2.0',
|
|
76
|
+
method: 'notifications/cancelled',
|
|
77
|
+
params: { requestId, reason: 'Server request deadline exceeded' },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
this.onerror?.(error instanceof Error ? error : new Error('Failed to cancel timed out MCP request'));
|
|
82
|
+
}
|
|
83
|
+
void this.send({
|
|
84
|
+
jsonrpc: '2.0',
|
|
85
|
+
id: requestId,
|
|
86
|
+
error: {
|
|
87
|
+
code: ErrorCode.RequestTimeout,
|
|
88
|
+
message: 'MCP request exceeded the server deadline.',
|
|
89
|
+
data: { timeoutMs: this.requestTimeoutMs, cancelled: true },
|
|
90
|
+
},
|
|
91
|
+
}).catch((error) => {
|
|
92
|
+
this.onerror?.(error instanceof Error ? error : new Error('Failed to write MCP request timeout'));
|
|
93
|
+
});
|
|
94
|
+
}, this.requestTimeoutMs);
|
|
95
|
+
this.requestDeadlines.set(requestId, deadline);
|
|
96
|
+
}
|
|
97
|
+
trackIncomingMessage(message) {
|
|
98
|
+
const cancelledId = cancelledRequestId(message);
|
|
99
|
+
if (cancelledId !== undefined) {
|
|
100
|
+
this.clearRequestDeadline(cancelledId);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (!isRequest(message))
|
|
104
|
+
return;
|
|
105
|
+
const requestId = requestIdOf(message);
|
|
106
|
+
if (requestId !== undefined)
|
|
107
|
+
this.startRequestDeadline(requestId);
|
|
28
108
|
}
|
|
29
109
|
onData = (value) => {
|
|
30
110
|
const chunk = Buffer.isBuffer(value) ? value : Buffer.from(value);
|
|
@@ -59,7 +139,9 @@ export class BoundedStdioServerTransport {
|
|
|
59
139
|
this.buffer = undefined;
|
|
60
140
|
try {
|
|
61
141
|
const text = line.toString('utf8').replace(/\r$/u, '');
|
|
62
|
-
|
|
142
|
+
const message = deserializeMessage(text);
|
|
143
|
+
this.trackIncomingMessage(message);
|
|
144
|
+
this.onmessage?.(message);
|
|
63
145
|
}
|
|
64
146
|
catch (error) {
|
|
65
147
|
this.onerror?.(error instanceof Error ? error : new Error('Invalid JSON-RPC stdio message'));
|
|
@@ -71,28 +153,45 @@ export class BoundedStdioServerTransport {
|
|
|
71
153
|
onInputError = (error) => {
|
|
72
154
|
this.onerror?.(error);
|
|
73
155
|
};
|
|
156
|
+
onInputEnd = () => {
|
|
157
|
+
void this.close();
|
|
158
|
+
};
|
|
74
159
|
writeOversizedMessageError() {
|
|
75
160
|
void this.send(MESSAGE_TOO_LARGE).catch((error) => {
|
|
76
161
|
this.onerror?.(error instanceof Error ? error : new Error('Failed to write JSON-RPC transport error'));
|
|
77
162
|
});
|
|
78
163
|
}
|
|
79
164
|
async start() {
|
|
80
|
-
if (this.started)
|
|
81
|
-
throw new Error('BoundedStdioServerTransport
|
|
165
|
+
if (this.started || this.closed)
|
|
166
|
+
throw new Error('BoundedStdioServerTransport cannot be started again');
|
|
82
167
|
this.started = true;
|
|
83
168
|
this.input.on('data', this.onData);
|
|
84
169
|
this.input.on('error', this.onInputError);
|
|
170
|
+
this.input.on('end', this.onInputEnd);
|
|
85
171
|
}
|
|
86
172
|
async close() {
|
|
173
|
+
if (this.closed)
|
|
174
|
+
return;
|
|
175
|
+
this.closed = true;
|
|
176
|
+
this.started = false;
|
|
87
177
|
this.input.off('data', this.onData);
|
|
88
178
|
this.input.off('error', this.onInputError);
|
|
179
|
+
this.input.off('end', this.onInputEnd);
|
|
89
180
|
if (this.input.listenerCount('data') === 0)
|
|
90
181
|
this.input.pause();
|
|
91
182
|
this.buffer = undefined;
|
|
92
183
|
this.discardingOversizedLine = false;
|
|
184
|
+
for (const deadline of this.requestDeadlines.values())
|
|
185
|
+
clearTimeout(deadline);
|
|
186
|
+
this.requestDeadlines.clear();
|
|
93
187
|
this.onclose?.();
|
|
94
188
|
}
|
|
95
189
|
send(message, _options) {
|
|
190
|
+
if (isResponse(message)) {
|
|
191
|
+
const requestId = requestIdOf(message);
|
|
192
|
+
if (requestId !== undefined)
|
|
193
|
+
this.clearRequestDeadline(requestId);
|
|
194
|
+
}
|
|
96
195
|
return new Promise((resolve, reject) => {
|
|
97
196
|
try {
|
|
98
197
|
if (this.output.write(serializeMessage(message)))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounded-stdio-transport.js","sourceRoot":"","sources":["../../src/mcp/bounded-stdio-transport.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bounded-stdio-transport.js","sourceRoot":"","sources":["../../src/mcp/bounded-stdio-transport.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAuC,MAAM,oCAAoC,CAAC;AAEpG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAEjG,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAChE,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC;AACrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAEzD,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,KAAc;IACvB,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,KAAK;QACZ,OAAO,EAAE,0DAA0D;KACpE;CACF,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,OAAuB;IAC1C,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,CAAC;AAED,SAAS,SAAS,CAAC,OAAuB;IACxC,OAAO,QAAQ,IAAI,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,UAAU,CAAC,OAAuB;IACzC,OAAO,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;AACtE,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAuB;IACjD,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,yBAAyB,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACvH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAChG,OAAO,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACrH,CAAC;AAED,MAAM,OAAO,2BAA2B;IAYnB;IACA;IACA;IACA;IAdnB,OAAO,CAAc;IACrB,OAAO,CAA0B;IACjC,SAAS,CAAkD;IAEnD,MAAM,CAAqB;IAC3B,uBAAuB,GAAG,KAAK,CAAC;IACvB,gBAAgB,GAAG,IAAI,GAAG,EAA4C,CAAC;IAChF,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAG,KAAK,CAAC;IAEvB,YACmB,QAAkB,OAAO,CAAC,KAAK,EAC/B,SAAmB,OAAO,CAAC,MAAM,EACjC,kBAAkB,gCAAgC,EAClD,mBAAmB,8BAA8B;QAHjD,UAAK,GAAL,KAAK,CAA0B;QAC/B,WAAM,GAAN,MAAM,CAA2B;QACjC,oBAAe,GAAf,eAAe,CAAmC;QAClD,qBAAgB,GAAhB,gBAAgB,CAAiC;QAElE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;eACtC,gBAAgB,GAAG,0BAA0B;eAC7C,gBAAgB,GAAG,0BAA0B,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,kDAAkD,0BAA0B,QAAQ,0BAA0B,eAAe,CAAC,CAAC;QACjJ,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,SAAoB;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO;QACnC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAEO,oBAAoB,CAAC,SAAoB;QAC/C,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAAE,OAAO;YACrD,IAAI,CAAC;gBACH,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,yBAAyB;oBACjC,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,kCAAkC,EAAE;iBAClE,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACvG,CAAC;YACD,KAAK,IAAI,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,SAAS;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,cAAc;oBAC9B,OAAO,EAAE,2CAA2C;oBACpD,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE;iBAC5D;aACF,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBAC1B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YACpG,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAEO,oBAAoB,CAAC,OAAuB;QAClD,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO;QAChC,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAEgB,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC5C,IAAI,OAAO,KAAK,CAAC,CAAC;oBAAE,OAAO;gBAC3B,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;gBACrC,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;YAC/C,IAAI,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1D,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAClC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;oBACnB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;oBACpC,OAAO;gBACT,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvG,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBACzF,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACvD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBACzC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;oBACnC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBAC/F,CAAC;YACH,CAAC;YACD,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEe,YAAY,GAAG,CAAC,KAAY,EAAQ,EAAE;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC;IAEe,UAAU,GAAG,GAAS,EAAE;QACvC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC;IAEM,0BAA0B;QAChC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACzD,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACxG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/D,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9E,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,OAAuB,EAAE,QAA+B;QAC3D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAAE,OAAO,EAAE,CAAC;;oBACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type InitOptions } from '../commands/init.js';
|
|
2
|
+
import { type PathEnvironment } from '../config/paths.js';
|
|
3
|
+
import type { SqliteDatabase } from '../db/adapter.js';
|
|
4
|
+
import { type EmbeddingDatabaseOpener } from '../embedding/backend.js';
|
|
5
|
+
import type { EmbeddingConfig, EmbeddingProvider, EmbeddingRuntime, VectorSearchBackend } from '../embedding/types.js';
|
|
6
|
+
export interface McpRuntimeOwnerOptions extends PathEnvironment {
|
|
7
|
+
readonly databasePath?: string;
|
|
8
|
+
readonly migrationsDirectory?: string;
|
|
9
|
+
readonly initializeDatabase?: (options: InitOptions) => unknown | PromiseLike<unknown>;
|
|
10
|
+
readonly openDatabase?: EmbeddingDatabaseOpener;
|
|
11
|
+
readonly embeddingConfig?: EmbeddingConfig;
|
|
12
|
+
readonly embeddingProvider?: EmbeddingProvider;
|
|
13
|
+
readonly embeddingBackend?: VectorSearchBackend;
|
|
14
|
+
}
|
|
15
|
+
export type McpDatabaseOperation<T> = (database: SqliteDatabase, runtime: EmbeddingRuntime) => Promise<T> | T;
|
|
16
|
+
export interface McpDatabaseOwner {
|
|
17
|
+
withDatabase<T>(operation: McpDatabaseOperation<T>): Promise<T>;
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
/** Own one MCP-process database/runtime instead of opening a connection per tool call. */
|
|
21
|
+
export declare class McpRuntimeOwner implements McpDatabaseOwner {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(options?: McpRuntimeOwnerOptions);
|
|
24
|
+
withDatabase<T>(operation: McpDatabaseOperation<T>): Promise<T>;
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=runtime-owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-owner.d.ts","sourceRoot":"","sources":["../../src/mcp/runtime-owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAyB,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE9F,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIvH,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACvF,QAAQ,CAAC,YAAY,CAAC,EAAE,uBAAuB,CAAC;IAChD,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACjD;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,CACpC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AASD,0FAA0F;AAC1F,qBAAa,eAAgB,YAAW,gBAAgB;;gBAQ1C,OAAO,GAAE,sBAA2B;IA0D1C,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAuC7B"}
|