@knowledgine/mcp-memory-protocol 0.3.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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/conformance/capabilities.test-suite.d.ts +3 -0
  3. package/dist/conformance/capabilities.test-suite.d.ts.map +1 -0
  4. package/dist/conformance/capabilities.test-suite.js +29 -0
  5. package/dist/conformance/capabilities.test-suite.js.map +1 -0
  6. package/dist/conformance/error-format.test-suite.d.ts +3 -0
  7. package/dist/conformance/error-format.test-suite.d.ts.map +1 -0
  8. package/dist/conformance/error-format.test-suite.js +40 -0
  9. package/dist/conformance/error-format.test-suite.js.map +1 -0
  10. package/dist/conformance/forget.test-suite.d.ts +3 -0
  11. package/dist/conformance/forget.test-suite.d.ts.map +1 -0
  12. package/dist/conformance/forget.test-suite.js +60 -0
  13. package/dist/conformance/forget.test-suite.js.map +1 -0
  14. package/dist/conformance/helpers.d.ts +16 -0
  15. package/dist/conformance/helpers.d.ts.map +1 -0
  16. package/dist/conformance/helpers.js +17 -0
  17. package/dist/conformance/helpers.js.map +1 -0
  18. package/dist/conformance/index.d.ts +17 -0
  19. package/dist/conformance/index.d.ts.map +1 -0
  20. package/dist/conformance/index.js +32 -0
  21. package/dist/conformance/index.js.map +1 -0
  22. package/dist/conformance/recall.test-suite.d.ts +3 -0
  23. package/dist/conformance/recall.test-suite.d.ts.map +1 -0
  24. package/dist/conformance/recall.test-suite.js +130 -0
  25. package/dist/conformance/recall.test-suite.js.map +1 -0
  26. package/dist/conformance/store.test-suite.d.ts +3 -0
  27. package/dist/conformance/store.test-suite.d.ts.map +1 -0
  28. package/dist/conformance/store.test-suite.js +85 -0
  29. package/dist/conformance/store.test-suite.js.map +1 -0
  30. package/dist/conformance/update.test-suite.d.ts +3 -0
  31. package/dist/conformance/update.test-suite.d.ts.map +1 -0
  32. package/dist/conformance/update.test-suite.js +56 -0
  33. package/dist/conformance/update.test-suite.js.map +1 -0
  34. package/dist/conformance/versioning.test-suite.d.ts +3 -0
  35. package/dist/conformance/versioning.test-suite.d.ts.map +1 -0
  36. package/dist/conformance/versioning.test-suite.js +67 -0
  37. package/dist/conformance/versioning.test-suite.js.map +1 -0
  38. package/dist/errors.d.ts +13 -0
  39. package/dist/errors.d.ts.map +1 -0
  40. package/dist/errors.js +31 -0
  41. package/dist/errors.js.map +1 -0
  42. package/dist/index.d.ts +8 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +4 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/provider.d.ts +9 -0
  47. package/dist/provider.d.ts.map +1 -0
  48. package/dist/provider.js +2 -0
  49. package/dist/provider.js.map +1 -0
  50. package/dist/schema.d.ts +75 -0
  51. package/dist/schema.d.ts.map +1 -0
  52. package/dist/schema.js +45 -0
  53. package/dist/schema.js.map +1 -0
  54. package/dist/types.d.ts +112 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +3 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +36 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 R.M
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export declare function runCapabilitiesTests(ctx: ConformanceTestContext): Promise<ConformanceResult[]>;
3
+ //# sourceMappingURL=capabilities.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.test-suite.d.ts","sourceRoot":"","sources":["../../src/conformance/capabilities.test-suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG9E,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B9B"}
@@ -0,0 +1,29 @@
1
+ import { callTool, makeResult } from "./helpers.js";
2
+ export async function runCapabilitiesTests(ctx) {
3
+ const results = [];
4
+ // get_memory_capabilities: tool exists and returns valid structure
5
+ try {
6
+ const r = await callTool(ctx.client, "get_memory_capabilities", {});
7
+ if (r.isError)
8
+ throw new Error(`Unexpected error: ${r.text}`);
9
+ const d = r.data;
10
+ if (typeof d.versioning !== "boolean")
11
+ throw new Error(`Expected boolean versioning, got: ${typeof d.versioning}`);
12
+ if (typeof d.semanticSearch !== "boolean")
13
+ throw new Error(`Expected boolean semanticSearch, got: ${typeof d.semanticSearch}`);
14
+ if (typeof d.layerPromotion !== "boolean")
15
+ throw new Error(`Expected boolean layerPromotion, got: ${typeof d.layerPromotion}`);
16
+ if (typeof d.temporalQuery !== "boolean")
17
+ throw new Error(`Expected boolean temporalQuery, got: ${typeof d.temporalQuery}`);
18
+ if (typeof d.ttl !== "boolean")
19
+ throw new Error(`Expected boolean ttl, got: ${typeof d.ttl}`);
20
+ if (!Array.isArray(d.supportedLayers))
21
+ throw new Error("Expected array supportedLayers");
22
+ results.push(makeResult("get_memory_capabilities: returns valid capability structure", true));
23
+ }
24
+ catch (e) {
25
+ results.push(makeResult("get_memory_capabilities: returns valid capability structure", false, String(e)));
26
+ }
27
+ return results;
28
+ }
29
+ //# sourceMappingURL=capabilities.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.test-suite.js","sourceRoot":"","sources":["../../src/conformance/capabilities.test-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAA2B;IAE3B,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,mEAAmE;IACnE,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,IAA+B,CAAC;QAC5C,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,SAAS;YACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,CAAC,cAAc,KAAK,SAAS;YACvC,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACtF,IAAI,OAAO,CAAC,CAAC,cAAc,KAAK,SAAS;YACvC,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACtF,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,SAAS;YACtC,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QACpF,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,6DAA6D,EAAE,IAAI,CAAC,CAAC,CAAC;IAChG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CACV,UAAU,CAAC,6DAA6D,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAC5F,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export declare function runErrorFormatTests(ctx: ConformanceTestContext): Promise<ConformanceResult[]>;
3
+ //# sourceMappingURL=error-format.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-format.test-suite.d.ts","sourceRoot":"","sources":["../../src/conformance/error-format.test-suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG9E,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAuC9B"}
@@ -0,0 +1,40 @@
1
+ import { callTool, makeResult } from "./helpers.js";
2
+ export async function runErrorFormatTests(ctx) {
3
+ const results = [];
4
+ // Error format: MEMORY_NOT_FOUND returns isError: true
5
+ try {
6
+ const r = await callTool(ctx.client, "forget_memory", { id: "nonexistent-id-for-conformance" });
7
+ if (!r.isError)
8
+ throw new Error("Expected isError: true for MEMORY_NOT_FOUND");
9
+ results.push(makeResult("error format: MEMORY_NOT_FOUND returns isError: true", true));
10
+ }
11
+ catch (e) {
12
+ results.push(makeResult("error format: MEMORY_NOT_FOUND returns isError: true", false, String(e)));
13
+ }
14
+ // Error format: error code is present in text content
15
+ try {
16
+ const r = await callTool(ctx.client, "forget_memory", { id: "nonexistent-id-for-conformance" });
17
+ if (!r.isError)
18
+ throw new Error("Expected error response");
19
+ if (!r.text.includes("MEMORY_NOT_FOUND"))
20
+ throw new Error(`Expected error code in text, got: ${r.text}`);
21
+ results.push(makeResult("error format: error code present in text content", true));
22
+ }
23
+ catch (e) {
24
+ results.push(makeResult("error format: error code present in text content", false, String(e)));
25
+ }
26
+ // Error format: INVALID_CONTENT returns isError: true
27
+ try {
28
+ const r = await callTool(ctx.client, "store_memory", { content: "" });
29
+ if (!r.isError)
30
+ throw new Error("Expected isError: true for INVALID_CONTENT");
31
+ if (!r.text.includes("INVALID_CONTENT"))
32
+ throw new Error(`Expected INVALID_CONTENT code in text, got: ${r.text}`);
33
+ results.push(makeResult("error format: INVALID_CONTENT returns isError: true", true));
34
+ }
35
+ catch (e) {
36
+ results.push(makeResult("error format: INVALID_CONTENT returns isError: true", false, String(e)));
37
+ }
38
+ return results;
39
+ }
40
+ //# sourceMappingURL=error-format.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-format.test-suite.js","sourceRoot":"","sources":["../../src/conformance/error-format.test-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAA2B;IAE3B,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,uDAAuD;IACvD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,gCAAgC,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,sDAAsD,EAAE,IAAI,CAAC,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CACV,UAAU,CAAC,sDAAsD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CACrF,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,gCAAgC,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,kDAAkD,EAAE,IAAI,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,kDAAkD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,sDAAsD;IACtD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC9E,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,qDAAqD,EAAE,IAAI,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CACV,UAAU,CAAC,qDAAqD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CACpF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export declare function runForgetTests(ctx: ConformanceTestContext): Promise<ConformanceResult[]>;
3
+ //# sourceMappingURL=forget.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forget.test-suite.d.ts","sourceRoot":"","sources":["../../src/conformance/forget.test-suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG9E,wBAAsB,cAAc,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsD9F"}
@@ -0,0 +1,60 @@
1
+ import { callTool, makeResult } from "./helpers.js";
2
+ export async function runForgetTests(ctx) {
3
+ const results = [];
4
+ // forget_memory: soft delete (default)
5
+ try {
6
+ const storeR = await callTool(ctx.client, "store_memory", {
7
+ content: "Memory to soft-forget",
8
+ layer: "episodic",
9
+ });
10
+ const id = storeR.data.id;
11
+ const r = await callTool(ctx.client, "forget_memory", { id, reason: "test soft forget" });
12
+ if (r.isError)
13
+ throw new Error(`Unexpected error: ${r.text}`);
14
+ const d = r.data;
15
+ if (d.id !== id)
16
+ throw new Error(`Expected id=${id}, got ${String(d.id)}`);
17
+ if (d.forgotten !== true)
18
+ throw new Error("Expected forgotten=true");
19
+ if (d.method !== "soft")
20
+ throw new Error(`Expected method=soft, got ${String(d.method)}`);
21
+ results.push(makeResult("forget_memory: soft delete success", true));
22
+ }
23
+ catch (e) {
24
+ results.push(makeResult("forget_memory: soft delete success", false, String(e)));
25
+ }
26
+ // forget_memory: hard delete
27
+ try {
28
+ const storeR = await callTool(ctx.client, "store_memory", {
29
+ content: "Memory to hard-forget",
30
+ layer: "episodic",
31
+ });
32
+ const id = storeR.data.id;
33
+ const r = await callTool(ctx.client, "forget_memory", { id, hard: true });
34
+ if (r.isError)
35
+ throw new Error(`Unexpected error: ${r.text}`);
36
+ const d = r.data;
37
+ if (d.forgotten !== true)
38
+ throw new Error("Expected forgotten=true");
39
+ if (d.method !== "hard")
40
+ throw new Error(`Expected method=hard, got ${String(d.method)}`);
41
+ results.push(makeResult("forget_memory: hard delete success", true));
42
+ }
43
+ catch (e) {
44
+ results.push(makeResult("forget_memory: hard delete success", false, String(e)));
45
+ }
46
+ // forget_memory: MEMORY_NOT_FOUND
47
+ try {
48
+ const r = await callTool(ctx.client, "forget_memory", { id: "non-existent-id-xyz" });
49
+ if (!r.isError)
50
+ throw new Error("Expected error for non-existent id");
51
+ if (!r.text.includes("MEMORY_NOT_FOUND"))
52
+ throw new Error(`Expected MEMORY_NOT_FOUND, got: ${r.text}`);
53
+ results.push(makeResult("forget_memory: MEMORY_NOT_FOUND for non-existent id", true));
54
+ }
55
+ catch (e) {
56
+ results.push(makeResult("forget_memory: MEMORY_NOT_FOUND for non-existent id", false, String(e)));
57
+ }
58
+ return results;
59
+ }
60
+ //# sourceMappingURL=forget.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forget.test-suite.js","sourceRoot":"","sources":["../../src/conformance/forget.test-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ export interface ConformanceTestContext {
3
+ client: Client;
4
+ }
5
+ export interface ConformanceResult {
6
+ name: string;
7
+ passed: boolean;
8
+ error?: string;
9
+ }
10
+ export declare function callTool(client: Client, toolName: string, args: Record<string, unknown>): Promise<{
11
+ isError: boolean;
12
+ text: string;
13
+ data: unknown;
14
+ }>;
15
+ export declare function makeResult(name: string, passed: boolean, error?: string): ConformanceResult;
16
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/conformance/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAW5D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAE3F"}
@@ -0,0 +1,17 @@
1
+ export async function callTool(client, toolName, args) {
2
+ const result = await client.callTool({ name: toolName, arguments: args });
3
+ const content = result.content;
4
+ const text = content[0]?.text ?? "";
5
+ let data = null;
6
+ try {
7
+ data = JSON.parse(text);
8
+ }
9
+ catch {
10
+ data = text;
11
+ }
12
+ return { isError: result.isError === true, text, data };
13
+ }
14
+ export function makeResult(name, passed, error) {
15
+ return { name, passed, error };
16
+ }
17
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/conformance/helpers.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAc,EACd,QAAgB,EAChB,IAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IACpC,IAAI,IAAI,GAAY,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAe,EAAE,KAAc;IACtE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,17 @@
1
+ export type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export { runStoreTests } from "./store.test-suite.js";
3
+ export { runRecallTests } from "./recall.test-suite.js";
4
+ export { runUpdateTests } from "./update.test-suite.js";
5
+ export { runForgetTests } from "./forget.test-suite.js";
6
+ export { runVersioningTests } from "./versioning.test-suite.js";
7
+ export { runErrorFormatTests } from "./error-format.test-suite.js";
8
+ export { runCapabilitiesTests } from "./capabilities.test-suite.js";
9
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
10
+ export interface ConformanceSuiteOptions {
11
+ includeVersioning?: boolean;
12
+ includeCapabilities?: boolean;
13
+ /** Include error-format tests (default: true). Set false if your test suite already covers error formats independently. */
14
+ includeErrorFormat?: boolean;
15
+ }
16
+ export declare function runConformanceSuite(ctx: ConformanceTestContext, options?: ConformanceSuiteOptions): Promise<ConformanceResult[]>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAS9E,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2HAA2H;IAC3H,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,sBAAsB,EAC3B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAgB9B"}
@@ -0,0 +1,32 @@
1
+ export { runStoreTests } from "./store.test-suite.js";
2
+ export { runRecallTests } from "./recall.test-suite.js";
3
+ export { runUpdateTests } from "./update.test-suite.js";
4
+ export { runForgetTests } from "./forget.test-suite.js";
5
+ export { runVersioningTests } from "./versioning.test-suite.js";
6
+ export { runErrorFormatTests } from "./error-format.test-suite.js";
7
+ export { runCapabilitiesTests } from "./capabilities.test-suite.js";
8
+ import { runStoreTests } from "./store.test-suite.js";
9
+ import { runRecallTests } from "./recall.test-suite.js";
10
+ import { runUpdateTests } from "./update.test-suite.js";
11
+ import { runForgetTests } from "./forget.test-suite.js";
12
+ import { runVersioningTests } from "./versioning.test-suite.js";
13
+ import { runErrorFormatTests } from "./error-format.test-suite.js";
14
+ import { runCapabilitiesTests } from "./capabilities.test-suite.js";
15
+ export async function runConformanceSuite(ctx, options = {}) {
16
+ const results = [];
17
+ results.push(...(await runStoreTests(ctx)));
18
+ results.push(...(await runRecallTests(ctx)));
19
+ results.push(...(await runUpdateTests(ctx)));
20
+ results.push(...(await runForgetTests(ctx)));
21
+ if (options.includeErrorFormat !== false) {
22
+ results.push(...(await runErrorFormatTests(ctx)));
23
+ }
24
+ if (options.includeVersioning) {
25
+ results.push(...(await runVersioningTests(ctx)));
26
+ }
27
+ if (options.includeCapabilities) {
28
+ results.push(...(await runCapabilitiesTests(ctx)));
29
+ }
30
+ return results;
31
+ }
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AASpE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAA2B,EAC3B,UAAmC,EAAE;IAErC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export declare function runRecallTests(ctx: ConformanceTestContext): Promise<ConformanceResult[]>;
3
+ //# sourceMappingURL=recall.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.test-suite.d.ts","sourceRoot":"","sources":["../../src/conformance/recall.test-suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG9E,wBAAsB,cAAc,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAmH9F"}
@@ -0,0 +1,130 @@
1
+ import { callTool, makeResult } from "./helpers.js";
2
+ export async function runRecallTests(ctx) {
3
+ const results = [];
4
+ // Seed a memory first
5
+ let seedId;
6
+ try {
7
+ const r = await callTool(ctx.client, "store_memory", {
8
+ content: "Recall conformance test seed",
9
+ layer: "episodic",
10
+ tags: ["conformance"],
11
+ });
12
+ seedId = r.data.id;
13
+ }
14
+ catch {
15
+ // will fail in later tests
16
+ }
17
+ // recall_memory: no query returns memories array
18
+ try {
19
+ const r = await callTool(ctx.client, "recall_memory", {});
20
+ if (r.isError)
21
+ throw new Error(`Unexpected error: ${r.text}`);
22
+ const d = r.data;
23
+ if (!Array.isArray(d.memories))
24
+ throw new Error("Response missing memories array");
25
+ if (typeof d.totalCount !== "number")
26
+ throw new Error("Missing totalCount");
27
+ if (typeof d.hasMore !== "boolean")
28
+ throw new Error("Missing hasMore");
29
+ results.push(makeResult("recall_memory: returns memories/totalCount/hasMore", true));
30
+ }
31
+ catch (e) {
32
+ results.push(makeResult("recall_memory: returns memories/totalCount/hasMore", false, String(e)));
33
+ }
34
+ // recall_memory: with query
35
+ try {
36
+ const r = await callTool(ctx.client, "recall_memory", { query: "conformance test seed" });
37
+ if (r.isError)
38
+ throw new Error(`Unexpected error: ${r.text}`);
39
+ const d = r.data;
40
+ if (!Array.isArray(d.memories))
41
+ throw new Error("Missing memories array");
42
+ results.push(makeResult("recall_memory: with query", true));
43
+ }
44
+ catch (e) {
45
+ results.push(makeResult("recall_memory: with query", false, String(e)));
46
+ }
47
+ // recall_memory: each memory has required fields
48
+ try {
49
+ const r = await callTool(ctx.client, "recall_memory", { query: "conformance test seed" });
50
+ if (r.isError)
51
+ throw new Error(`Unexpected error: ${r.text}`);
52
+ const d = r.data;
53
+ const memories = d.memories;
54
+ if (memories.length === 0)
55
+ throw new Error("Expected at least one result");
56
+ const m = memories[0];
57
+ if (!m.id || typeof m.id !== "string")
58
+ throw new Error("Missing string id");
59
+ if (!m.content || typeof m.content !== "string")
60
+ throw new Error("Missing content");
61
+ if (!m.layer)
62
+ throw new Error("Missing layer");
63
+ if (typeof m.version !== "number")
64
+ throw new Error("Missing version");
65
+ if (typeof m.accessCount !== "number")
66
+ throw new Error("Missing accessCount");
67
+ if (!Array.isArray(m.tags))
68
+ throw new Error("Missing tags array");
69
+ if (!m.createdAt)
70
+ throw new Error("Missing createdAt");
71
+ results.push(makeResult("recall_memory: memory has required fields", true));
72
+ }
73
+ catch (e) {
74
+ results.push(makeResult("recall_memory: memory has required fields", false, String(e)));
75
+ }
76
+ // recall_memory: filter by layer
77
+ try {
78
+ const r = await callTool(ctx.client, "recall_memory", {
79
+ filter: { layer: "episodic" },
80
+ });
81
+ if (r.isError)
82
+ throw new Error(`Unexpected error: ${r.text}`);
83
+ const d = r.data;
84
+ const memories = d.memories;
85
+ for (const m of memories) {
86
+ if (m.layer !== "episodic")
87
+ throw new Error(`Expected episodic, got ${String(m.layer)}`);
88
+ }
89
+ results.push(makeResult("recall_memory: filter by layer", true));
90
+ }
91
+ catch (e) {
92
+ results.push(makeResult("recall_memory: filter by layer", false, String(e)));
93
+ }
94
+ // recall_memory: limit respected
95
+ try {
96
+ const r = await callTool(ctx.client, "recall_memory", { limit: 1 });
97
+ if (r.isError)
98
+ throw new Error(`Unexpected error: ${r.text}`);
99
+ const d = r.data;
100
+ const memories = d.memories;
101
+ if (memories.length > 1)
102
+ throw new Error(`Expected at most 1 result, got ${memories.length}`);
103
+ results.push(makeResult("recall_memory: limit respected", true));
104
+ }
105
+ catch (e) {
106
+ results.push(makeResult("recall_memory: limit respected", false, String(e)));
107
+ }
108
+ // recall_memory: accessCount incremented on recall (SHOULD)
109
+ if (seedId) {
110
+ try {
111
+ const r1 = await callTool(ctx.client, "recall_memory", {
112
+ filter: { memoryIds: [seedId] },
113
+ });
114
+ const before = r1.data.memories[0]?.accessCount;
115
+ await callTool(ctx.client, "recall_memory", { filter: { memoryIds: [seedId] } });
116
+ const r2 = await callTool(ctx.client, "recall_memory", {
117
+ filter: { memoryIds: [seedId] },
118
+ });
119
+ const after = r2.data.memories[0]?.accessCount;
120
+ if (after <= before)
121
+ throw new Error(`accessCount not incremented: before=${before}, after=${after}`);
122
+ results.push(makeResult("recall_memory: accessCount incremented (SHOULD)", true));
123
+ }
124
+ catch (e) {
125
+ results.push(makeResult("recall_memory: accessCount incremented (SHOULD)", false, String(e)));
126
+ }
127
+ }
128
+ return results;
129
+ }
130
+ //# sourceMappingURL=recall.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.test-suite.js","sourceRoot":"","sources":["../../src/conformance/recall.test-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export declare function runStoreTests(ctx: ConformanceTestContext): Promise<ConformanceResult[]>;
3
+ //# sourceMappingURL=store.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.test-suite.d.ts","sourceRoot":"","sources":["../../src/conformance/store.test-suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG9E,wBAAsB,aAAa,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyE7F"}
@@ -0,0 +1,85 @@
1
+ import { callTool, makeResult } from "./helpers.js";
2
+ export async function runStoreTests(ctx) {
3
+ const results = [];
4
+ // store_memory: basic success
5
+ try {
6
+ const r = await callTool(ctx.client, "store_memory", {
7
+ content: "Test memory entry",
8
+ layer: "episodic",
9
+ });
10
+ if (r.isError)
11
+ throw new Error(`Unexpected error: ${r.text}`);
12
+ const d = r.data;
13
+ if (!d.id || typeof d.id !== "string")
14
+ throw new Error("Response missing string id");
15
+ if (d.layer !== "episodic")
16
+ throw new Error(`Expected layer=episodic, got ${String(d.layer)}`);
17
+ if (d.version !== 1)
18
+ throw new Error(`Expected version=1, got ${String(d.version)}`);
19
+ if (!d.createdAt || typeof d.createdAt !== "string")
20
+ throw new Error("Missing createdAt");
21
+ results.push(makeResult("store_memory: basic success", true));
22
+ }
23
+ catch (e) {
24
+ results.push(makeResult("store_memory: basic success", false, String(e)));
25
+ }
26
+ // store_memory: defaults layer to episodic
27
+ try {
28
+ const r = await callTool(ctx.client, "store_memory", { content: "No layer specified" });
29
+ if (r.isError)
30
+ throw new Error(`Unexpected error: ${r.text}`);
31
+ const d = r.data;
32
+ if (d.layer !== "episodic")
33
+ throw new Error(`Expected default layer=episodic, got ${String(d.layer)}`);
34
+ results.push(makeResult("store_memory: defaults to episodic layer", true));
35
+ }
36
+ catch (e) {
37
+ results.push(makeResult("store_memory: defaults to episodic layer", false, String(e)));
38
+ }
39
+ // store_memory: INVALID_CONTENT for empty string
40
+ try {
41
+ const r = await callTool(ctx.client, "store_memory", { content: "" });
42
+ if (!r.isError)
43
+ throw new Error("Expected error for empty content");
44
+ if (!r.text.includes("INVALID_CONTENT"))
45
+ throw new Error(`Expected INVALID_CONTENT in error, got: ${r.text}`);
46
+ results.push(makeResult("store_memory: INVALID_CONTENT for empty content", true));
47
+ }
48
+ catch (e) {
49
+ results.push(makeResult("store_memory: INVALID_CONTENT for empty content", false, String(e)));
50
+ }
51
+ // store_memory: INVALID_LAYER for bad layer value
52
+ try {
53
+ const r = await callTool(ctx.client, "store_memory", {
54
+ content: "test",
55
+ layer: "invalid_layer",
56
+ });
57
+ if (!r.isError)
58
+ throw new Error("Expected error for invalid layer");
59
+ if (!r.text.includes("INVALID_LAYER"))
60
+ throw new Error(`Expected INVALID_LAYER in error, got: ${r.text}`);
61
+ results.push(makeResult("store_memory: INVALID_LAYER for bad layer", true));
62
+ }
63
+ catch (e) {
64
+ results.push(makeResult("store_memory: INVALID_LAYER for bad layer", false, String(e)));
65
+ }
66
+ // store_memory: with tags and metadata
67
+ try {
68
+ const r = await callTool(ctx.client, "store_memory", {
69
+ content: "Memory with tags",
70
+ tags: ["tag1", "tag2"],
71
+ metadata: { source: "test", project: "conformance" },
72
+ });
73
+ if (r.isError)
74
+ throw new Error(`Unexpected error: ${r.text}`);
75
+ const d = r.data;
76
+ if (!d.id)
77
+ throw new Error("Missing id in response");
78
+ results.push(makeResult("store_memory: with tags and metadata", true));
79
+ }
80
+ catch (e) {
81
+ results.push(makeResult("store_memory: with tags and metadata", false, String(e)));
82
+ }
83
+ return results;
84
+ }
85
+ //# sourceMappingURL=store.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.test-suite.js","sourceRoot":"","sources":["../../src/conformance/store.test-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export declare function runUpdateTests(ctx: ConformanceTestContext): Promise<ConformanceResult[]>;
3
+ //# sourceMappingURL=update.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.test-suite.d.ts","sourceRoot":"","sources":["../../src/conformance/update.test-suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG9E,wBAAsB,cAAc,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAqD9F"}
@@ -0,0 +1,56 @@
1
+ import { callTool, makeResult } from "./helpers.js";
2
+ export async function runUpdateTests(ctx) {
3
+ const results = [];
4
+ // Seed a memory to update
5
+ let seedId;
6
+ try {
7
+ const r = await callTool(ctx.client, "store_memory", {
8
+ content: "Original content for update test",
9
+ layer: "episodic",
10
+ });
11
+ seedId = r.data.id;
12
+ }
13
+ catch {
14
+ // will fail in later tests
15
+ }
16
+ // update_memory: in-place update (createVersion: false)
17
+ if (seedId) {
18
+ try {
19
+ const r = await callTool(ctx.client, "update_memory", {
20
+ id: seedId,
21
+ content: "Updated content",
22
+ createVersion: false,
23
+ });
24
+ if (r.isError)
25
+ throw new Error(`Unexpected error: ${r.text}`);
26
+ const d = r.data;
27
+ if (!d.id || typeof d.id !== "string")
28
+ throw new Error("Missing id");
29
+ if (typeof d.version !== "number")
30
+ throw new Error("Missing version");
31
+ if (!d.updatedAt || typeof d.updatedAt !== "string")
32
+ throw new Error("Missing updatedAt");
33
+ results.push(makeResult("update_memory: in-place update (createVersion: false)", true));
34
+ }
35
+ catch (e) {
36
+ results.push(makeResult("update_memory: in-place update (createVersion: false)", false, String(e)));
37
+ }
38
+ }
39
+ // update_memory: MEMORY_NOT_FOUND for non-existent id
40
+ try {
41
+ const r = await callTool(ctx.client, "update_memory", {
42
+ id: "non-existent-id-xyz",
43
+ content: "updated",
44
+ });
45
+ if (!r.isError)
46
+ throw new Error("Expected error for non-existent id");
47
+ if (!r.text.includes("MEMORY_NOT_FOUND"))
48
+ throw new Error(`Expected MEMORY_NOT_FOUND, got: ${r.text}`);
49
+ results.push(makeResult("update_memory: MEMORY_NOT_FOUND for non-existent id", true));
50
+ }
51
+ catch (e) {
52
+ results.push(makeResult("update_memory: MEMORY_NOT_FOUND for non-existent id", false, String(e)));
53
+ }
54
+ return results;
55
+ }
56
+ //# sourceMappingURL=update.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.test-suite.js","sourceRoot":"","sources":["../../src/conformance/update.test-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAA2B;IAC9D,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,0BAA0B;IAC1B,IAAI,MAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE;YACnD,OAAO,EAAE,kCAAkC;YAC3C,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,MAAM,GAAI,CAAC,CAAC,IAAgC,CAAC,EAAY,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IAED,wDAAwD;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE;gBACpD,EAAE,EAAE,MAAM;gBACV,OAAO,EAAE,iBAAiB;gBAC1B,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,IAA+B,CAAC;YAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YACrE,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,uDAAuD,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1F,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CACV,UAAU,CAAC,uDAAuD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE;YACpD,EAAE,EAAE,qBAAqB;YACzB,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,qDAAqD,EAAE,IAAI,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CACV,UAAU,CAAC,qDAAqD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CACpF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ConformanceTestContext, ConformanceResult } from "./helpers.js";
2
+ export declare function runVersioningTests(ctx: ConformanceTestContext): Promise<ConformanceResult[]>;
3
+ //# sourceMappingURL=versioning.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.test-suite.d.ts","sourceRoot":"","sources":["../../src/conformance/versioning.test-suite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG9E,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkE9B"}
@@ -0,0 +1,67 @@
1
+ import { callTool, makeResult } from "./helpers.js";
2
+ export async function runVersioningTests(ctx) {
3
+ const results = [];
4
+ // Seed a memory to version
5
+ let seedId;
6
+ let seedVersion;
7
+ try {
8
+ const r = await callTool(ctx.client, "store_memory", {
9
+ content: "Original content for versioning test",
10
+ layer: "episodic",
11
+ });
12
+ const d = r.data;
13
+ seedId = d.id;
14
+ seedVersion = d.version;
15
+ }
16
+ catch {
17
+ // will fail in later tests
18
+ }
19
+ // update_memory: createVersion=true creates new entry
20
+ if (seedId && seedVersion !== undefined) {
21
+ try {
22
+ const r = await callTool(ctx.client, "update_memory", {
23
+ id: seedId,
24
+ content: "Updated versioned content",
25
+ createVersion: true,
26
+ });
27
+ if (r.isError)
28
+ throw new Error(`Unexpected error: ${r.text}`);
29
+ const d = r.data;
30
+ const newId = d.id;
31
+ const newVersion = d.version;
32
+ const prevVersion = d.previousVersion;
33
+ if (newId === seedId)
34
+ throw new Error("New version should have a different id");
35
+ if (newVersion !== seedVersion + 1)
36
+ throw new Error(`Expected version=${seedVersion + 1}, got ${newVersion}`);
37
+ if (prevVersion !== seedVersion)
38
+ throw new Error(`Expected previousVersion=${seedVersion}, got ${prevVersion}`);
39
+ results.push(makeResult("versioning: update creates new id with incremented version", true));
40
+ }
41
+ catch (e) {
42
+ results.push(makeResult("versioning: update creates new id with incremented version", false, String(e)));
43
+ }
44
+ }
45
+ // recall_memory: includeVersionHistory=false excludes deprecated by default
46
+ if (seedId) {
47
+ try {
48
+ const r = await callTool(ctx.client, "recall_memory", {
49
+ filter: { memoryIds: [seedId] },
50
+ includeVersionHistory: false,
51
+ });
52
+ if (r.isError)
53
+ throw new Error(`Unexpected error: ${r.text}`);
54
+ const d = r.data;
55
+ const memories = d.memories;
56
+ const deprecated = memories.filter((m) => m.deprecated === true);
57
+ if (deprecated.length > 0)
58
+ throw new Error("Deprecated entries should be excluded by default");
59
+ results.push(makeResult("versioning: includeVersionHistory=false excludes deprecated", true));
60
+ }
61
+ catch (e) {
62
+ results.push(makeResult("versioning: includeVersionHistory=false excludes deprecated", false, String(e)));
63
+ }
64
+ }
65
+ return results;
66
+ }
67
+ //# sourceMappingURL=versioning.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.test-suite.js","sourceRoot":"","sources":["../../src/conformance/versioning.test-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type MemoryErrorCode = "MEMORY_NOT_FOUND" | "INVALID_CONTENT" | "INVALID_LAYER" | "INVALID_PARAMETER" | "VERSION_CONFLICT" | "STORAGE_ERROR" | "CAPABILITY_NOT_SUPPORTED";
2
+ export declare class MemoryProtocolError extends Error {
3
+ readonly code: MemoryErrorCode;
4
+ constructor(code: MemoryErrorCode, message: string);
5
+ }
6
+ export declare function memoryNotFound(id: string): MemoryProtocolError;
7
+ export declare function invalidContent(): MemoryProtocolError;
8
+ export declare function invalidLayer(value: string): MemoryProtocolError;
9
+ export declare function invalidParameter(field: string, detail: string): MemoryProtocolError;
10
+ export declare function versionConflict(id: string): MemoryProtocolError;
11
+ export declare function storageError(detail: string): MemoryProtocolError;
12
+ export declare function capabilityNotSupported(capability: string): MemoryProtocolError;
13
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,kBAAkB,GAClB,eAAe,GACf,0BAA0B,CAAC;AAE/B,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,IAAI,EAAE,eAAe;gBAArB,IAAI,EAAE,eAAe,EACrC,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,CAE9D;AAED,wBAAgB,cAAc,IAAI,mBAAmB,CAEpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAK/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAEnF;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,CAE/D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAK9E"}
package/dist/errors.js ADDED
@@ -0,0 +1,31 @@
1
+ // Error codes defined in MCP Memory Protocol Specification Section 7
2
+ export class MemoryProtocolError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(`${code}: ${message}`);
6
+ this.code = code;
7
+ this.name = "MemoryProtocolError";
8
+ }
9
+ }
10
+ export function memoryNotFound(id) {
11
+ return new MemoryProtocolError("MEMORY_NOT_FOUND", `Memory entry with id='${id}' does not exist`);
12
+ }
13
+ export function invalidContent() {
14
+ return new MemoryProtocolError("INVALID_CONTENT", "content must be a non-empty string");
15
+ }
16
+ export function invalidLayer(value) {
17
+ return new MemoryProtocolError("INVALID_LAYER", `'${value}' is not a valid layer. Must be one of: episodic, semantic, procedural`);
18
+ }
19
+ export function invalidParameter(field, detail) {
20
+ return new MemoryProtocolError("INVALID_PARAMETER", `${field}: ${detail}`);
21
+ }
22
+ export function versionConflict(id) {
23
+ return new MemoryProtocolError("VERSION_CONFLICT", `Concurrent update conflict for id='${id}'`);
24
+ }
25
+ export function storageError(detail) {
26
+ return new MemoryProtocolError("STORAGE_ERROR", detail);
27
+ }
28
+ export function capabilityNotSupported(capability) {
29
+ return new MemoryProtocolError("CAPABILITY_NOT_SUPPORTED", `Capability '${capability}' is not supported by this server`);
30
+ }
31
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAWrE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE1B;IADlB,YACkB,IAAqB,EACrC,OAAe;QAEf,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAHb,SAAI,GAAJ,IAAI,CAAiB;QAIrC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,mBAAmB,CAAC,iBAAiB,EAAE,oCAAoC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,IAAI,mBAAmB,CAC5B,eAAe,EACf,IAAI,KAAK,wEAAwE,CAClF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC5D,OAAO,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,OAAO,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,sCAAsC,EAAE,GAAG,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,IAAI,mBAAmB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,IAAI,mBAAmB,CAC5B,0BAA0B,EAC1B,eAAe,UAAU,mCAAmC,CAC7D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type { MemoryLayer, MemoryMetadata, MemoryStoreRequest, MemoryStoreResponse, RecallFilter, MemoryRecallRequest, RecalledMemory, MemoryRecallResponse, MemoryUpdateRequest, MemoryUpdateResponse, MemoryForgetRequest, MemoryForgetResponse, MemoryEntry, VersionInfo, MemoryProviderCapabilities, } from "./types.js";
2
+ export type { MemoryProvider } from "./provider.js";
3
+ export { MemoryProtocolError, memoryNotFound, invalidContent, invalidLayer, invalidParameter, versionConflict, storageError, capabilityNotSupported, } from "./errors.js";
4
+ export type { MemoryErrorCode } from "./errors.js";
5
+ export { MemoryLayerSchema, MemoryMetadataSchema, MemoryStoreRequestSchema, RecallFilterSchema, MemoryRecallRequestSchema, MemoryUpdateRequestSchema, MemoryForgetRequestSchema, } from "./schema.js";
6
+ export { runConformanceSuite, runStoreTests, runRecallTests, runUpdateTests, runForgetTests, runVersioningTests, runErrorFormatTests, runCapabilitiesTests, } from "./conformance/index.js";
7
+ export type { ConformanceTestContext, ConformanceResult, ConformanceSuiteOptions, } from "./conformance/index.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { MemoryProtocolError, memoryNotFound, invalidContent, invalidLayer, invalidParameter, versionConflict, storageError, capabilityNotSupported, } from "./errors.js";
2
+ export { MemoryLayerSchema, MemoryMetadataSchema, MemoryStoreRequestSchema, RecallFilterSchema, MemoryRecallRequestSchema, MemoryUpdateRequestSchema, MemoryForgetRequestSchema, } from "./schema.js";
3
+ export { runConformanceSuite, runStoreTests, runRecallTests, runUpdateTests, runForgetTests, runVersioningTests, runErrorFormatTests, runCapabilitiesTests, } from "./conformance/index.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MemoryStoreRequest, MemoryStoreResponse, MemoryRecallRequest, MemoryRecallResponse, MemoryUpdateRequest, MemoryUpdateResponse, MemoryForgetRequest, MemoryForgetResponse, MemoryProviderCapabilities } from "./types.js";
2
+ export interface MemoryProvider {
3
+ store(request: MemoryStoreRequest): Promise<MemoryStoreResponse>;
4
+ recall(request: MemoryRecallRequest): Promise<MemoryRecallResponse>;
5
+ update(request: MemoryUpdateRequest): Promise<MemoryUpdateResponse>;
6
+ forget(request: MemoryForgetRequest): Promise<MemoryForgetResponse>;
7
+ capabilities(): MemoryProviderCapabilities;
8
+ }
9
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpE,YAAY,IAAI,0BAA0B,CAAC;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { z } from "zod";
2
+ export declare const MemoryLayerSchema: z.ZodEnum<{
3
+ episodic: "episodic";
4
+ semantic: "semantic";
5
+ procedural: "procedural";
6
+ }>;
7
+ export declare const MemoryMetadataSchema: z.ZodObject<{
8
+ source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
9
+ project: z.ZodOptional<z.ZodNullable<z.ZodString>>;
10
+ sessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
+ confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
12
+ }, z.core.$loose>;
13
+ export declare const MemoryStoreRequestSchema: z.ZodObject<{
14
+ content: z.ZodString;
15
+ layer: z.ZodOptional<z.ZodEnum<{
16
+ episodic: "episodic";
17
+ semantic: "semantic";
18
+ procedural: "procedural";
19
+ }>>;
20
+ metadata: z.ZodOptional<z.ZodObject<{
21
+ source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
22
+ project: z.ZodOptional<z.ZodNullable<z.ZodString>>;
23
+ sessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
24
+ confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
25
+ }, z.core.$loose>>;
26
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ ttl: z.ZodOptional<z.ZodNumber>;
28
+ }, z.core.$strip>;
29
+ export declare const RecallFilterSchema: z.ZodObject<{
30
+ layer: z.ZodOptional<z.ZodEnum<{
31
+ episodic: "episodic";
32
+ semantic: "semantic";
33
+ procedural: "procedural";
34
+ }>>;
35
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
36
+ createdAfter: z.ZodOptional<z.ZodString>;
37
+ createdBefore: z.ZodOptional<z.ZodString>;
38
+ memoryIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
39
+ }, z.core.$strip>;
40
+ export declare const MemoryRecallRequestSchema: z.ZodObject<{
41
+ query: z.ZodOptional<z.ZodString>;
42
+ filter: z.ZodOptional<z.ZodObject<{
43
+ layer: z.ZodOptional<z.ZodEnum<{
44
+ episodic: "episodic";
45
+ semantic: "semantic";
46
+ procedural: "procedural";
47
+ }>>;
48
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ createdAfter: z.ZodOptional<z.ZodString>;
50
+ createdBefore: z.ZodOptional<z.ZodString>;
51
+ memoryIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
52
+ }, z.core.$strip>>;
53
+ limit: z.ZodOptional<z.ZodNumber>;
54
+ asOf: z.ZodOptional<z.ZodString>;
55
+ includeVersionHistory: z.ZodOptional<z.ZodBoolean>;
56
+ }, z.core.$strip>;
57
+ export declare const MemoryUpdateRequestSchema: z.ZodObject<{
58
+ id: z.ZodString;
59
+ content: z.ZodOptional<z.ZodString>;
60
+ summary: z.ZodOptional<z.ZodString>;
61
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
62
+ metadata: z.ZodOptional<z.ZodObject<{
63
+ source: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
64
+ project: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
65
+ sessionId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
66
+ confidence: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
67
+ }, z.core.$loose>>;
68
+ createVersion: z.ZodOptional<z.ZodBoolean>;
69
+ }, z.core.$strip>;
70
+ export declare const MemoryForgetRequestSchema: z.ZodObject<{
71
+ id: z.ZodString;
72
+ reason: z.ZodOptional<z.ZodString>;
73
+ hard: z.ZodOptional<z.ZodBoolean>;
74
+ }, z.core.$strip>;
75
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;EAAiD,CAAC;AAEhF,eAAO,MAAM,oBAAoB;;;;;iBAOjB,CAAC;AAEjB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;iBAMnC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAM7B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBAMpC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;iBAOpC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;iBAIpC,CAAC"}
package/dist/schema.js ADDED
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ export const MemoryLayerSchema = z.enum(["episodic", "semantic", "procedural"]);
3
+ export const MemoryMetadataSchema = z
4
+ .object({
5
+ source: z.string().nullable().optional(),
6
+ project: z.string().nullable().optional(),
7
+ sessionId: z.string().nullable().optional(),
8
+ confidence: z.number().min(0).max(1).nullable().optional(),
9
+ })
10
+ .passthrough();
11
+ export const MemoryStoreRequestSchema = z.object({
12
+ content: z.string().min(1),
13
+ layer: MemoryLayerSchema.optional(),
14
+ metadata: MemoryMetadataSchema.optional(),
15
+ tags: z.array(z.string()).optional(),
16
+ ttl: z.number().int().positive().optional(),
17
+ });
18
+ export const RecallFilterSchema = z.object({
19
+ layer: MemoryLayerSchema.optional(),
20
+ tags: z.array(z.string()).optional(),
21
+ createdAfter: z.string().optional(),
22
+ createdBefore: z.string().optional(),
23
+ memoryIds: z.array(z.string()).optional(),
24
+ });
25
+ export const MemoryRecallRequestSchema = z.object({
26
+ query: z.string().optional(),
27
+ filter: RecallFilterSchema.optional(),
28
+ limit: z.number().int().min(1).max(100).optional(),
29
+ asOf: z.string().optional(),
30
+ includeVersionHistory: z.boolean().optional(),
31
+ });
32
+ export const MemoryUpdateRequestSchema = z.object({
33
+ id: z.string().min(1),
34
+ content: z.string().min(1).optional(),
35
+ summary: z.string().optional(),
36
+ tags: z.array(z.string()).optional(),
37
+ metadata: MemoryMetadataSchema.partial().optional(),
38
+ createVersion: z.boolean().optional(),
39
+ });
40
+ export const MemoryForgetRequestSchema = z.object({
41
+ id: z.string().min(1),
42
+ reason: z.string().optional(),
43
+ hard: z.boolean().optional(),
44
+ });
45
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ export type MemoryLayer = "episodic" | "semantic" | "procedural";
2
+ export interface MemoryMetadata {
3
+ source?: string | null;
4
+ project?: string | null;
5
+ sessionId?: string | null;
6
+ confidence?: number | null;
7
+ [key: string]: unknown;
8
+ }
9
+ export interface MemoryStoreRequest {
10
+ content: string;
11
+ layer?: MemoryLayer;
12
+ metadata?: MemoryMetadata;
13
+ tags?: string[];
14
+ ttl?: number;
15
+ }
16
+ export interface MemoryStoreResponse {
17
+ id: string;
18
+ layer: MemoryLayer;
19
+ version: number;
20
+ createdAt: string;
21
+ }
22
+ export interface RecallFilter {
23
+ layer?: MemoryLayer;
24
+ tags?: string[];
25
+ createdAfter?: string;
26
+ createdBefore?: string;
27
+ memoryIds?: string[];
28
+ }
29
+ export interface MemoryRecallRequest {
30
+ query?: string;
31
+ filter?: RecallFilter;
32
+ limit?: number;
33
+ asOf?: string;
34
+ includeVersionHistory?: boolean;
35
+ }
36
+ export interface RecalledMemory {
37
+ id: string;
38
+ content: string;
39
+ summary?: string;
40
+ layer: MemoryLayer;
41
+ version: number;
42
+ relevanceScore?: number;
43
+ accessCount: number;
44
+ tags: string[];
45
+ metadata?: MemoryMetadata;
46
+ createdAt: string;
47
+ updatedAt?: string;
48
+ lastAccessedAt?: string;
49
+ }
50
+ export interface MemoryRecallResponse {
51
+ memories: RecalledMemory[];
52
+ totalCount: number;
53
+ hasMore: boolean;
54
+ }
55
+ export interface MemoryUpdateRequest {
56
+ id: string;
57
+ content?: string;
58
+ summary?: string;
59
+ tags?: string[];
60
+ metadata?: Partial<MemoryMetadata>;
61
+ createVersion?: boolean;
62
+ }
63
+ export interface MemoryUpdateResponse {
64
+ id: string;
65
+ version: number;
66
+ previousVersion?: number;
67
+ updatedAt: string;
68
+ }
69
+ export interface MemoryForgetRequest {
70
+ id: string;
71
+ reason?: string;
72
+ hard?: boolean;
73
+ }
74
+ export interface MemoryForgetResponse {
75
+ id: string;
76
+ forgotten: boolean;
77
+ method: "soft" | "hard";
78
+ }
79
+ export interface MemoryEntry {
80
+ id: string;
81
+ layer: MemoryLayer;
82
+ content: string;
83
+ summary?: string | null;
84
+ accessCount: number;
85
+ lastAccessedAt?: string | null;
86
+ tags: string[];
87
+ metadata?: MemoryMetadata | null;
88
+ createdAt: string;
89
+ updatedAt?: string | null;
90
+ version: number;
91
+ supersedes?: string | null;
92
+ validFrom?: string | null;
93
+ deprecated: boolean;
94
+ deprecationReason?: string | null;
95
+ }
96
+ export interface VersionInfo {
97
+ version: number;
98
+ id: string;
99
+ supersedes?: string | null;
100
+ validFrom: string;
101
+ deprecated: boolean;
102
+ deprecationReason?: string | null;
103
+ }
104
+ export interface MemoryProviderCapabilities {
105
+ versioning: boolean;
106
+ semanticSearch: boolean;
107
+ layerPromotion: boolean;
108
+ temporalQuery: boolean;
109
+ ttl: boolean;
110
+ supportedLayers: MemoryLayer[];
111
+ }
112
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Protocol type definitions — MCP Memory Protocol Specification compliant
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,0EAA0E"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@knowledgine/mcp-memory-protocol",
3
+ "version": "0.3.0",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "import": "./dist/index.js",
8
+ "types": "./dist/index.d.ts"
9
+ }
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "dependencies": {
15
+ "zod": "^4.3.6"
16
+ },
17
+ "peerDependencies": {
18
+ "@modelcontextprotocol/sdk": "^1.0.0"
19
+ },
20
+ "peerDependenciesMeta": {
21
+ "@modelcontextprotocol/sdk": {
22
+ "optional": true
23
+ }
24
+ },
25
+ "devDependencies": {
26
+ "@modelcontextprotocol/sdk": "^1.27.1",
27
+ "typescript": "^5.7.0",
28
+ "vitest": "^3.0.0"
29
+ },
30
+ "license": "MIT",
31
+ "scripts": {
32
+ "build": "tsc --build tsconfig.build.json",
33
+ "test": "vitest",
34
+ "test:run": "vitest run"
35
+ }
36
+ }