@j0hanz/memory-mcp 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -25
- package/dist/completions/index.d.ts.map +1 -1
- package/dist/completions/index.js +11 -8
- package/dist/completions/index.js.map +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +68 -8
- package/dist/db/index.js.map +1 -1
- package/dist/db/typed.d.ts +9 -3
- package/dist/db/typed.d.ts.map +1 -1
- package/dist/db/typed.js +33 -4
- package/dist/db/typed.js.map +1 -1
- package/dist/index.js +13 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/errors.d.ts +4 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +12 -4
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/hash.d.ts.map +1 -1
- package/dist/lib/hash.js +9 -2
- package/dist/lib/hash.js.map +1 -1
- package/dist/lib/instructions.d.ts +2 -0
- package/dist/lib/instructions.d.ts.map +1 -0
- package/dist/lib/instructions.js +96 -0
- package/dist/lib/instructions.js.map +1 -0
- package/dist/lib/mcp-utils.d.ts +6 -0
- package/dist/lib/mcp-utils.d.ts.map +1 -0
- package/dist/lib/mcp-utils.js +26 -0
- package/dist/lib/mcp-utils.js.map +1 -0
- package/dist/lib/pagination.d.ts.map +1 -1
- package/dist/lib/pagination.js +14 -7
- package/dist/lib/pagination.js.map +1 -1
- package/dist/lib/search-cursor.d.ts +13 -0
- package/dist/lib/search-cursor.d.ts.map +1 -0
- package/dist/lib/search-cursor.js +89 -0
- package/dist/lib/search-cursor.js.map +1 -0
- package/dist/lib/search.d.ts +16 -0
- package/dist/lib/search.d.ts.map +1 -1
- package/dist/lib/search.js +53 -12
- package/dist/lib/search.js.map +1 -1
- package/dist/lib/sql.d.ts +17 -0
- package/dist/lib/sql.d.ts.map +1 -0
- package/dist/lib/sql.js +18 -0
- package/dist/lib/sql.js.map +1 -0
- package/dist/lib/tool-contracts.d.ts +18 -0
- package/dist/lib/tool-contracts.d.ts.map +1 -0
- package/dist/lib/tool-contracts.js +120 -0
- package/dist/lib/tool-contracts.js.map +1 -0
- package/dist/lib/tool-response.d.ts +1 -5
- package/dist/lib/tool-response.d.ts.map +1 -1
- package/dist/lib/tool-response.js +9 -7
- package/dist/lib/tool-response.js.map +1 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +10 -9
- package/dist/lib/types.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +22 -36
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +15 -36
- package/dist/resources/index.js.map +1 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/inputs.d.ts +5 -5
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +21 -14
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/schemas/outputs.d.ts +94 -148
- package/dist/schemas/outputs.d.ts.map +1 -1
- package/dist/schemas/outputs.js +59 -66
- package/dist/schemas/outputs.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +20 -18
- package/dist/server.js.map +1 -1
- package/dist/tools/create-relationship.d.ts.map +1 -1
- package/dist/tools/create-relationship.js +38 -25
- package/dist/tools/create-relationship.js.map +1 -1
- package/dist/tools/delete-memories.d.ts.map +1 -1
- package/dist/tools/delete-memories.js +37 -30
- package/dist/tools/delete-memories.js.map +1 -1
- package/dist/tools/delete-memory.d.ts.map +1 -1
- package/dist/tools/delete-memory.js +24 -22
- package/dist/tools/delete-memory.js.map +1 -1
- package/dist/tools/delete-relationship.d.ts.map +1 -1
- package/dist/tools/delete-relationship.js +28 -20
- package/dist/tools/delete-relationship.js.map +1 -1
- package/dist/tools/get-memory.d.ts.map +1 -1
- package/dist/tools/get-memory.js +26 -16
- package/dist/tools/get-memory.js.map +1 -1
- package/dist/tools/get-relationships.d.ts.map +1 -1
- package/dist/tools/get-relationships.js +71 -40
- package/dist/tools/get-relationships.js.map +1 -1
- package/dist/tools/index.d.ts +6 -14
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +5 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory-stats.d.ts.map +1 -1
- package/dist/tools/memory-stats.js +29 -39
- package/dist/tools/memory-stats.js.map +1 -1
- package/dist/tools/progress.d.ts +34 -0
- package/dist/tools/progress.d.ts.map +1 -0
- package/dist/tools/progress.js +136 -0
- package/dist/tools/progress.js.map +1 -0
- package/dist/tools/recall.d.ts.map +1 -1
- package/dist/tools/recall.js +157 -105
- package/dist/tools/recall.js.map +1 -1
- package/dist/tools/result.d.ts +7 -0
- package/dist/tools/result.d.ts.map +1 -0
- package/dist/tools/result.js +19 -0
- package/dist/tools/result.js.map +1 -0
- package/dist/tools/retrieve-context.d.ts.map +1 -1
- package/dist/tools/retrieve-context.js +127 -40
- package/dist/tools/retrieve-context.js.map +1 -1
- package/dist/tools/search-memories.d.ts.map +1 -1
- package/dist/tools/search-memories.js +37 -47
- package/dist/tools/search-memories.js.map +1 -1
- package/dist/tools/store-memories.d.ts.map +1 -1
- package/dist/tools/store-memories.js +44 -28
- package/dist/tools/store-memories.js.map +1 -1
- package/dist/tools/store-memory.d.ts.map +1 -1
- package/dist/tools/store-memory.js +43 -23
- package/dist/tools/store-memory.js.map +1 -1
- package/dist/tools/update-memory.d.ts.map +1 -1
- package/dist/tools/update-memory.js +63 -29
- package/dist/tools/update-memory.js.map +1 -1
- package/package.json +1 -3
- package/dist/instructions.md +0 -123
- package/dist/tools/helpers.d.ts +0 -13
- package/dist/tools/helpers.d.ts.map +0 -1
- package/dist/tools/helpers.js +0 -49
- package/dist/tools/helpers.js.map +0 -1
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { registerMemoryStats } from './memory-stats.js';
|
|
8
|
-
import { registerRecall } from './recall.js';
|
|
9
|
-
import { registerRetrieveContext } from './retrieve-context.js';
|
|
10
|
-
import { registerSearchMemories } from './search-memories.js';
|
|
11
|
-
import { registerStoreMemories } from './store-memories.js';
|
|
12
|
-
import { registerStoreMemory } from './store-memory.js';
|
|
13
|
-
import { registerUpdateMemory } from './update-memory.js';
|
|
14
|
-
export declare const TOOL_REGISTRARS: readonly [typeof registerStoreMemory, typeof registerGetMemory, typeof registerUpdateMemory, typeof registerDeleteMemory, typeof registerMemoryStats, typeof registerStoreMemories, typeof registerDeleteMemories, typeof registerSearchMemories, typeof registerCreateRelationship, typeof registerDeleteRelationship, typeof registerGetRelationships, typeof registerRecall, typeof registerRetrieveContext];
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { TypedDb } from '../db/typed.js';
|
|
3
|
+
type ToolRegistrar = (server: McpServer, db: TypedDb) => void;
|
|
4
|
+
export declare const TOOL_REGISTRARS: readonly ToolRegistrar[];
|
|
5
|
+
export declare function registerAllTools(server: McpServer, db: TypedDb): void;
|
|
6
|
+
export {};
|
|
15
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAe9C,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;AAE9D,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAcnD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAIrE"}
|
package/dist/tools/index.js
CHANGED
|
@@ -26,4 +26,9 @@ export const TOOL_REGISTRARS = [
|
|
|
26
26
|
registerRecall,
|
|
27
27
|
registerRetrieveContext,
|
|
28
28
|
];
|
|
29
|
+
export function registerAllTools(server, db) {
|
|
30
|
+
for (const registerTool of TOOL_REGISTRARS) {
|
|
31
|
+
registerTool(server, db);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
29
34
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,mBAAmB;IACnB,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;IACnB,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,0BAA0B;IAC1B,0BAA0B;IAC1B,wBAAwB;IACxB,cAAc;IACd,uBAAuB;CACxB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,EAAW;IAC7D,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE,CAAC;QAC3C,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-stats.d.ts","sourceRoot":"","sources":["../../src/tools/memory-stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-stats.d.ts","sourceRoot":"","sources":["../../src/tools/memory-stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAgC9C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CA4CxE"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { E_UNKNOWN, getErrorMessage } from '../lib/errors.js';
|
|
1
|
+
import { E_UNKNOWN, getErrorMessage, rethrowMcpError } from '../lib/errors.js';
|
|
2
|
+
import { MEMORY_AGGREGATE_SQL, RELATIONSHIP_COUNT_SQL, TYPE_COUNTS_SQL, } from '../lib/sql.js';
|
|
3
|
+
import { getToolContract } from '../lib/tool-contracts.js';
|
|
2
4
|
import { createErrorResponse, createToolResponse, } from '../lib/tool-response.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const TOTAL_RELATIONSHIPS_SQL = 'SELECT COUNT(*) AS total FROM relationships';
|
|
7
|
-
const TYPE_COUNTS_SQL = 'SELECT memory_type, COUNT(*) AS count FROM memories GROUP BY memory_type ORDER BY count DESC';
|
|
8
|
-
const OLDEST_MEMORY_SQL = 'SELECT MIN(created_at) AS oldest FROM memories';
|
|
9
|
-
const NEWEST_MEMORY_SQL = 'SELECT MAX(created_at) AS newest FROM memories';
|
|
10
|
-
const AVG_IMPORTANCE_SQL = 'SELECT AVG(importance) AS avg_importance FROM memories';
|
|
5
|
+
import {} from '../schemas/inputs.js';
|
|
6
|
+
import {} from '../schemas/outputs.js';
|
|
7
|
+
import { wrapToolHandler } from './progress.js';
|
|
11
8
|
function toTypeCounts(rows) {
|
|
12
9
|
const byType = {};
|
|
13
10
|
for (const row of rows) {
|
|
@@ -15,46 +12,39 @@ function toTypeCounts(rows) {
|
|
|
15
12
|
}
|
|
16
13
|
return byType;
|
|
17
14
|
}
|
|
18
|
-
function getTotalCount(db, sql) {
|
|
19
|
-
return db.prepare(sql).get()?.total ?? 0;
|
|
20
|
-
}
|
|
21
15
|
export function registerMemoryStats(server, db) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
const contract = getToolContract('memory_stats');
|
|
17
|
+
server.registerTool(contract.name, {
|
|
18
|
+
title: contract.title,
|
|
19
|
+
description: contract.description,
|
|
20
|
+
inputSchema: contract.inputSchema,
|
|
21
|
+
outputSchema: contract.outputSchema,
|
|
22
|
+
annotations: contract.annotations,
|
|
23
|
+
}, wrapToolHandler(() => {
|
|
29
24
|
try {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
const typeRows = db.prepare(TYPE_COUNTS_SQL).all();
|
|
33
|
-
const oldestRow = db.prepare(OLDEST_MEMORY_SQL).get();
|
|
34
|
-
const newestRow = db.prepare(NEWEST_MEMORY_SQL).get();
|
|
35
|
-
const avgImportanceRow = db
|
|
36
|
-
.prepare(AVG_IMPORTANCE_SQL)
|
|
25
|
+
const aggregate = db
|
|
26
|
+
.prepareOnce(MEMORY_AGGREGATE_SQL)
|
|
37
27
|
.get();
|
|
28
|
+
const totalRelationships = db.prepareOnce(RELATIONSHIP_COUNT_SQL).get()?.total ?? 0;
|
|
29
|
+
const typeRows = db.prepareOnce(TYPE_COUNTS_SQL).all();
|
|
38
30
|
const byType = toTypeCounts(typeRows);
|
|
39
31
|
return createToolResponse({
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
relationships: {
|
|
49
|
-
total: totalRelationships,
|
|
50
|
-
},
|
|
51
|
-
by_type: byType,
|
|
32
|
+
memories: {
|
|
33
|
+
total: aggregate?.total ?? 0,
|
|
34
|
+
oldest: aggregate?.oldest ?? null,
|
|
35
|
+
newest: aggregate?.newest ?? null,
|
|
36
|
+
avg_importance: aggregate?.avg_importance ?? null,
|
|
37
|
+
},
|
|
38
|
+
relationships: {
|
|
39
|
+
total: totalRelationships,
|
|
52
40
|
},
|
|
41
|
+
by_type: byType,
|
|
53
42
|
});
|
|
54
43
|
}
|
|
55
44
|
catch (err) {
|
|
45
|
+
rethrowMcpError(err);
|
|
56
46
|
return createErrorResponse(E_UNKNOWN, getErrorMessage(err));
|
|
57
47
|
}
|
|
58
|
-
});
|
|
48
|
+
}, { progressMessage: () => '⊙ memory_stats: [aggregate]' }));
|
|
59
49
|
}
|
|
60
50
|
//# sourceMappingURL=memory-stats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-stats.js","sourceRoot":"","sources":["../../src/tools/memory-stats.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-stats.js","sourceRoot":"","sources":["../../src/tools/memory-stats.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAA+B,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAA0B,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAShD,SAAS,YAAY,CAAC,IAAe;IACnC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,EAAW;IAChE,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,YAAY,CACjB,QAAQ,CAAC,IAAI,EACb;QACE,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,WAAW,EAAE,QAAQ,CAAC,WAA4C;QAClE,YAAY,EAAE,QAAQ,CAAC,YAAwC;QAC/D,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,EACD,eAAe,CACb,GAAG,EAAE;QACH,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,EAAE;iBACjB,WAAW,CAAqB,oBAAoB,CAAC;iBACrD,GAAG,EAAE,CAAC;YAET,MAAM,kBAAkB,GACtB,EAAE,CAAC,WAAW,CAAW,sBAAsB,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;YAErE,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAU,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC;YAChE,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEtC,OAAO,kBAAkB,CAAC;gBACxB,QAAQ,EAAE;oBACR,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;oBAC5B,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,IAAI;oBACjC,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,IAAI;oBACjC,cAAc,EAAE,SAAS,EAAE,cAAc,IAAI,IAAI;iBAClD;gBACD,aAAa,EAAE;oBACb,KAAK,EAAE,kBAAkB;iBAC1B;gBACD,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAe,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,EACD,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,6BAA6B,EAAE,CACzD,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { CallToolResult, ProgressNotification } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
interface ProgressMeta {
|
|
3
|
+
progressToken?: unknown;
|
|
4
|
+
}
|
|
5
|
+
interface ProgressContext {
|
|
6
|
+
_meta?: ProgressMeta;
|
|
7
|
+
sendNotification?: (notification: ProgressNotification) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
interface ProgressUpdate {
|
|
10
|
+
current: number;
|
|
11
|
+
total?: number;
|
|
12
|
+
message?: string;
|
|
13
|
+
}
|
|
14
|
+
interface ProgressReporterOptions {
|
|
15
|
+
minIntervalMs?: number;
|
|
16
|
+
}
|
|
17
|
+
interface ProgressSnapshot {
|
|
18
|
+
current: number;
|
|
19
|
+
total?: number;
|
|
20
|
+
}
|
|
21
|
+
export type ProgressReporter<TProgress extends ProgressSnapshot = ProgressUpdate> = ((progress: TProgress) => void) & {
|
|
22
|
+
flush: () => Promise<void>;
|
|
23
|
+
};
|
|
24
|
+
interface WrappedHandlerOptions<TArgs> {
|
|
25
|
+
completionMessage?: (args: TArgs, result: CallToolResult) => string;
|
|
26
|
+
progressMessage: (args: TArgs) => string;
|
|
27
|
+
}
|
|
28
|
+
type ToolHandler<TArgs> = (args: TArgs, extra: ProgressContext) => Promise<CallToolResult> | CallToolResult;
|
|
29
|
+
export declare function notifyProgress(extra: ProgressContext, progress: ProgressUpdate): Promise<void>;
|
|
30
|
+
export declare function createProgressReporter(extra: ProgressContext, options?: ProgressReporterOptions): ProgressReporter;
|
|
31
|
+
export declare function progressWithMessage(reporter: ProgressReporter, getMessage: (progress: ProgressSnapshot) => string): ProgressReporter<ProgressSnapshot>;
|
|
32
|
+
export declare function wrapToolHandler<TArgs>(handler: ToolHandler<TArgs>, options: WrappedHandlerOptions<TArgs>): ToolHandler<TArgs>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/tools/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACrB,MAAM,oCAAoC,CAAC;AAM5C,UAAU,YAAY;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,uBAAuB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,gBAAgB,GAAG,cAAc,IACjD,CAAC,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG;IACpC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,UAAU,qBAAqB,CAAC,KAAK;IACnC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,KAAK,MAAM,CAAC;IACpE,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC;CAC1C;AAED,KAAK,WAAW,CAAC,KAAK,IAAI,CACxB,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,eAAe,KACnB,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;AA4D9C,wBAAsB,cAAc,CAClC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CA+ClB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,MAAM,GACjD,gBAAgB,CAAC,gBAAgB,CAAC,CAepC;AAED,wBAAgB,eAAe,CAAC,KAAK,EACnC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,EAC3B,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,GACpC,WAAW,CAAC,KAAK,CAAC,CAsCpB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { E_CANCELLED } from '../lib/errors.js';
|
|
2
|
+
const DEFAULT_PROGRESS_INTERVAL_MS = 250;
|
|
3
|
+
function toProgressToken(value) {
|
|
4
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
function toNotificationParams(progressToken, progress) {
|
|
10
|
+
const params = {
|
|
11
|
+
progressToken,
|
|
12
|
+
progress: progress.current,
|
|
13
|
+
};
|
|
14
|
+
if (progress.total !== undefined) {
|
|
15
|
+
params.total = progress.total;
|
|
16
|
+
}
|
|
17
|
+
if (progress.message !== undefined) {
|
|
18
|
+
params.message = progress.message;
|
|
19
|
+
}
|
|
20
|
+
return params;
|
|
21
|
+
}
|
|
22
|
+
function getResultOutcome(result) {
|
|
23
|
+
if (result.structuredContent?.error) {
|
|
24
|
+
const error = result.structuredContent.error;
|
|
25
|
+
if (error.code === E_CANCELLED) {
|
|
26
|
+
return 'cancelled';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (result.isError) {
|
|
30
|
+
return 'failed';
|
|
31
|
+
}
|
|
32
|
+
if (result.structuredContent?.ok === false) {
|
|
33
|
+
return 'failed';
|
|
34
|
+
}
|
|
35
|
+
return 'completed';
|
|
36
|
+
}
|
|
37
|
+
function defaultCompletionMessage(startMessage, result) {
|
|
38
|
+
return `${startMessage} • ${getResultOutcome(result)}`;
|
|
39
|
+
}
|
|
40
|
+
export async function notifyProgress(extra, progress) {
|
|
41
|
+
const progressToken = toProgressToken(extra._meta?.progressToken);
|
|
42
|
+
if (progressToken === undefined) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (typeof extra.sendNotification !== 'function') {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
await extra.sendNotification({
|
|
50
|
+
method: 'notifications/progress',
|
|
51
|
+
params: toNotificationParams(progressToken, progress),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// best-effort progress
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function createProgressReporter(extra, options = {}) {
|
|
59
|
+
const minIntervalMs = options.minIntervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS;
|
|
60
|
+
let lastCurrent = 0;
|
|
61
|
+
let lastReportedAt = 0;
|
|
62
|
+
let isCompleted = false;
|
|
63
|
+
let notificationChain = Promise.resolve();
|
|
64
|
+
const reporter = ((progress) => {
|
|
65
|
+
if (isCompleted) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const monotonicCurrent = progress.current >= lastCurrent ? progress.current : lastCurrent;
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
const shouldFlush = now - lastReportedAt >= minIntervalMs ||
|
|
71
|
+
(progress.total !== undefined && monotonicCurrent >= progress.total);
|
|
72
|
+
lastCurrent = monotonicCurrent;
|
|
73
|
+
if (!shouldFlush) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
lastReportedAt = now;
|
|
77
|
+
isCompleted =
|
|
78
|
+
progress.total !== undefined && monotonicCurrent >= progress.total;
|
|
79
|
+
const payload = { current: monotonicCurrent };
|
|
80
|
+
if (progress.total !== undefined) {
|
|
81
|
+
payload.total = progress.total;
|
|
82
|
+
}
|
|
83
|
+
if (progress.message !== undefined) {
|
|
84
|
+
payload.message = progress.message;
|
|
85
|
+
}
|
|
86
|
+
notificationChain = notificationChain.then(() => notifyProgress(extra, payload));
|
|
87
|
+
});
|
|
88
|
+
reporter.flush = async () => {
|
|
89
|
+
await notificationChain;
|
|
90
|
+
};
|
|
91
|
+
return reporter;
|
|
92
|
+
}
|
|
93
|
+
export function progressWithMessage(reporter, getMessage) {
|
|
94
|
+
const wrapped = (({ current, total }) => {
|
|
95
|
+
const message = getMessage(total === undefined ? { current } : { current, total });
|
|
96
|
+
reporter({
|
|
97
|
+
current,
|
|
98
|
+
...(total === undefined ? {} : { total }),
|
|
99
|
+
message,
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
wrapped.flush = () => reporter.flush();
|
|
103
|
+
return wrapped;
|
|
104
|
+
}
|
|
105
|
+
export function wrapToolHandler(handler, options) {
|
|
106
|
+
return async (args, extra) => {
|
|
107
|
+
const startMessage = options.progressMessage(args);
|
|
108
|
+
await notifyProgress(extra, {
|
|
109
|
+
current: 0,
|
|
110
|
+
total: 1,
|
|
111
|
+
message: startMessage,
|
|
112
|
+
});
|
|
113
|
+
let result;
|
|
114
|
+
try {
|
|
115
|
+
result = await handler(args, extra);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const isCancelled = error instanceof Error && error.message === E_CANCELLED;
|
|
119
|
+
await notifyProgress(extra, {
|
|
120
|
+
current: 1,
|
|
121
|
+
total: 1,
|
|
122
|
+
message: `${startMessage} • ${isCancelled ? 'cancelled' : 'failed'}`,
|
|
123
|
+
});
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
const completionMessage = options.completionMessage?.(args, result) ??
|
|
127
|
+
defaultCompletionMessage(startMessage, result);
|
|
128
|
+
await notifyProgress(extra, {
|
|
129
|
+
current: 1,
|
|
130
|
+
total: 1,
|
|
131
|
+
message: completionMessage,
|
|
132
|
+
});
|
|
133
|
+
return result;
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/tools/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAmO9C,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAgInE"}
|