@downcity/plugins 1.0.252 → 1.0.254

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 (67) hide show
  1. package/bin/memory/Action.d.ts +27 -36
  2. package/bin/memory/Action.d.ts.map +1 -1
  3. package/bin/memory/Action.js +71 -311
  4. package/bin/memory/Action.js.map +1 -1
  5. package/bin/memory/Index.d.ts +3 -1
  6. package/bin/memory/Index.d.ts.map +1 -1
  7. package/bin/memory/Index.js +3 -1
  8. package/bin/memory/Index.js.map +1 -1
  9. package/bin/memory/MemoryPlugin.d.ts +20 -37
  10. package/bin/memory/MemoryPlugin.d.ts.map +1 -1
  11. package/bin/memory/MemoryPlugin.js +231 -233
  12. package/bin/memory/MemoryPlugin.js.map +1 -1
  13. package/bin/memory/adapters/FileMemoryStorageAdapter.d.ts +43 -0
  14. package/bin/memory/adapters/FileMemoryStorageAdapter.d.ts.map +1 -0
  15. package/bin/memory/adapters/FileMemoryStorageAdapter.js +163 -0
  16. package/bin/memory/adapters/FileMemoryStorageAdapter.js.map +1 -0
  17. package/bin/memory/providers/BuiltinMemoryProvider.d.ts +63 -0
  18. package/bin/memory/providers/BuiltinMemoryProvider.d.ts.map +1 -0
  19. package/bin/memory/providers/BuiltinMemoryProvider.js +772 -0
  20. package/bin/memory/providers/BuiltinMemoryProvider.js.map +1 -0
  21. package/bin/memory/runtime/SystemProvider.d.ts +7 -12
  22. package/bin/memory/runtime/SystemProvider.d.ts.map +1 -1
  23. package/bin/memory/runtime/SystemProvider.js +30 -89
  24. package/bin/memory/runtime/SystemProvider.js.map +1 -1
  25. package/bin/memory/types/BuiltinMemoryProvider.d.ts +88 -0
  26. package/bin/memory/types/BuiltinMemoryProvider.d.ts.map +1 -0
  27. package/bin/memory/types/BuiltinMemoryProvider.js +9 -0
  28. package/bin/memory/types/BuiltinMemoryProvider.js.map +1 -0
  29. package/bin/memory/types/Memory.d.ts +249 -408
  30. package/bin/memory/types/Memory.d.ts.map +1 -1
  31. package/bin/memory/types/Memory.js +4 -4
  32. package/bin/memory/types/MemoryStorage.d.ts +35 -0
  33. package/bin/memory/types/MemoryStorage.d.ts.map +1 -0
  34. package/bin/memory/types/MemoryStorage.js +10 -0
  35. package/bin/memory/types/MemoryStorage.js.map +1 -0
  36. package/bin/memory.d.ts +6 -2
  37. package/bin/memory.d.ts.map +1 -1
  38. package/bin/memory.js +3 -1
  39. package/bin/memory.js.map +1 -1
  40. package/package.json +4 -3
  41. package/scripts/memory-plugin.test.mjs +227 -0
  42. package/scripts/plugin-subpaths.test.mjs +8 -0
  43. package/src/memory/Action.ts +106 -377
  44. package/src/memory/Index.ts +6 -1
  45. package/src/memory/MemoryPlugin.ts +254 -246
  46. package/src/memory/adapters/FileMemoryStorageAdapter.ts +197 -0
  47. package/src/memory/providers/BuiltinMemoryProvider.ts +905 -0
  48. package/src/memory/runtime/SystemProvider.ts +32 -95
  49. package/src/memory/types/BuiltinMemoryProvider.ts +121 -0
  50. package/src/memory/types/Memory.ts +322 -456
  51. package/src/memory/types/MemoryStorage.ts +44 -0
  52. package/src/memory.ts +48 -24
  53. package/bin/memory/runtime/Search.d.ts +0 -19
  54. package/bin/memory/runtime/Search.d.ts.map +0 -1
  55. package/bin/memory/runtime/Search.js +0 -262
  56. package/bin/memory/runtime/Search.js.map +0 -1
  57. package/bin/memory/runtime/Store.d.ts +0 -42
  58. package/bin/memory/runtime/Store.d.ts.map +0 -1
  59. package/bin/memory/runtime/Store.js +0 -94
  60. package/bin/memory/runtime/Store.js.map +0 -1
  61. package/bin/memory/runtime/Writer.d.ts +0 -61
  62. package/bin/memory/runtime/Writer.d.ts.map +0 -1
  63. package/bin/memory/runtime/Writer.js +0 -274
  64. package/bin/memory/runtime/Writer.js.map +0 -1
  65. package/src/memory/runtime/Search.ts +0 -327
  66. package/src/memory/runtime/Store.ts +0 -158
  67. package/src/memory/runtime/Writer.ts +0 -351
@@ -1 +1 @@
1
- {"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../src/memory/types/Memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../src/memory/types/Memory.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Memory Plugin 类型定义。
2
+ * Memory Plugin 的公开领域协议。
3
3
  *
4
4
  * 关键点(中文)
5
- * - MemoryPlugin agent 暴露“记忆能力”,内部使用 LLM Wiki 方式组织知识。
6
- * - `wiki` 是整理后的知识层,`source` 是原始证据层,`working` 是会话局部层。
7
- * - LLM 能力只通过 constructor 注入,plugin 自身不绑定具体模型或服务。
5
+ * - MemoryPlugin 只依赖 MemoryProvider,不感知文件、数据库或远程服务。
6
+ * - 所有公开结果使用稳定 memory_id citation,不暴露物理存储路径。
7
+ * - Provider 负责记忆形成、存储、召回、修订与删除的完整语义。
8
8
  */
9
9
  export {};
10
10
  //# sourceMappingURL=Memory.js.map
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Builtin Memory Provider 使用的低层存储 Adapter 协议。
3
+ *
4
+ * 关键点(中文)
5
+ * - Adapter 只处理 Provider 内部的逻辑 key 与文本,不表达 Memory 领域语义。
6
+ * - 文件、SQLite、对象存储或远程 KV 都可以实现该协议。
7
+ * - MemoryPlugin 和 Agent SDK 不得直接依赖本接口。
8
+ */
9
+ /** 存储 Adapter 返回的文本条目。 */
10
+ export interface MemoryStorageEntry {
11
+ /** Provider 内部使用的稳定逻辑 key。 */
12
+ key: string;
13
+ /** 当前条目的完整 UTF-8 文本。 */
14
+ content: string;
15
+ }
16
+ /** Builtin Memory Provider 的最小文本存储能力。 */
17
+ export interface MemoryStorageAdapter {
18
+ /** 当前存储实现的稳定名称。 */
19
+ readonly name: string;
20
+ /** 初始化存储根与必要结构。 */
21
+ initialize(): Promise<void>;
22
+ /** 判断指定逻辑 key 是否存在。 */
23
+ has(key: string): Promise<boolean>;
24
+ /** 读取指定逻辑 key;不存在时返回空。 */
25
+ read(key: string): Promise<string | null>;
26
+ /** 原子创建或替换指定逻辑 key 的完整内容。 */
27
+ write(key: string, content: string): Promise<void>;
28
+ /** 列出指定逻辑前缀下的全部文本条目。 */
29
+ list(prefix: string): Promise<MemoryStorageEntry[]>;
30
+ /** 删除指定逻辑 key;不存在时保持幂等。 */
31
+ delete(key: string): Promise<void>;
32
+ /** 释放 Adapter 持有的资源。 */
33
+ dispose(): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=MemoryStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryStorage.d.ts","sourceRoot":"","sources":["../../../src/memory/types/MemoryStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,mBAAmB;IACnB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,uBAAuB;IACvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC,0BAA0B;IAC1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE1C,6BAA6B;IAC7B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,wBAAwB;IACxB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEpD,2BAA2B;IAC3B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,wBAAwB;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Builtin Memory Provider 使用的低层存储 Adapter 协议。
3
+ *
4
+ * 关键点(中文)
5
+ * - Adapter 只处理 Provider 内部的逻辑 key 与文本,不表达 Memory 领域语义。
6
+ * - 文件、SQLite、对象存储或远程 KV 都可以实现该协议。
7
+ * - MemoryPlugin 和 Agent SDK 不得直接依赖本接口。
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=MemoryStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryStorage.js","sourceRoot":"","sources":["../../../src/memory/types/MemoryStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
package/bin/memory.d.ts CHANGED
@@ -1,8 +1,12 @@
1
1
  /**
2
2
  * `@downcity/plugins/memory` 独立公开入口。
3
3
  *
4
- * 关键点(中文):只汇总 MemoryPlugin 及其存取、检索与 Wiki 能力协议类型。
4
+ * 关键点(中文):汇总 provider-neutral MemoryPlugin、Provider 与内建 Adapter。
5
5
  */
6
6
  export { MemoryPlugin } from "./memory/MemoryPlugin.js";
7
- export type { MemoryActionPayload, MemoryDefaults, MemoryDigestHandler, MemoryDigestHandlerInput, MemoryDigestHandlerOutput, MemoryDigestPayload, MemoryDigestResponse, MemoryPluginOptions, MemoryReadPayload, MemoryReadResponse, MemoryRememberPayload, MemoryRememberResponse, MemoryReviseHandler, MemoryReviseHandlerInput, MemoryReviseHandlerOutput, MemoryRevisePayload, MemoryReviseResponse, MemorySearchMode, MemorySearchPayload, MemorySearchResponse, MemorySearchResultItem, MemorySourceStat, MemorySourceType, MemoryStatusResponse, MemoryWikiPageDraft, } from "./memory/types/Memory.js";
7
+ export { BuiltinMemoryProvider } from "./memory/providers/BuiltinMemoryProvider.js";
8
+ export { FileMemoryStorageAdapter, get_default_file_memory_root_path, } from "./memory/adapters/FileMemoryStorageAdapter.js";
9
+ export type { MemoryActionPayload, MemoryDigestInput, MemoryDigestResult, MemoryForgetInput, MemoryForgetResult, MemoryPluginOptions, MemoryProvider, MemoryProviderCapabilities, MemoryProviderInitializeInput, MemoryProviderState, MemoryReadInput, MemoryReadResult, MemoryRecallInput, MemoryRecallItem, MemoryRecallResult, MemoryRecord, MemoryRememberInput, MemoryRememberResult, MemoryReviseInput, MemoryReviseResult, MemoryScope, MemorySourceReference, MemoryStatusResult, MemorySystemContextInput, MemorySystemContextItem, MemorySystemContextResult, MemoryType, } from "./memory/types/Memory.js";
10
+ export type { BuiltinMemoryDigestHandler, BuiltinMemoryDigestHandlerInput, BuiltinMemoryDigestHandlerOutput, BuiltinMemoryProjectionDraft, BuiltinMemoryProviderOptions, BuiltinMemoryReviseHandler, BuiltinMemoryReviseHandlerInput, BuiltinMemoryReviseHandlerOutput, BuiltinMemoryStorageFactory, DefaultFileMemoryRootInput, FileMemoryStorageAdapterOptions, } from "./memory/types/BuiltinMemoryProvider.js";
11
+ export type { MemoryStorageAdapter, MemoryStorageEntry, } from "./memory/types/MemoryStorage.js";
8
12
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EACL,wBAAwB,EACxB,iCAAiC,GAClC,MAAM,+CAA+C,CAAC;AACvD,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,0BAA0B,EAC1B,6BAA6B,EAC7B,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,UAAU,GACX,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,EAC3B,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,yCAAyC,CAAC;AACjD,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
package/bin/memory.js CHANGED
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * `@downcity/plugins/memory` 独立公开入口。
3
3
  *
4
- * 关键点(中文):只汇总 MemoryPlugin 及其存取、检索与 Wiki 能力协议类型。
4
+ * 关键点(中文):汇总 provider-neutral MemoryPlugin、Provider 与内建 Adapter。
5
5
  */
6
6
  export { MemoryPlugin } from "./memory/MemoryPlugin.js";
7
+ export { BuiltinMemoryProvider } from "./memory/providers/BuiltinMemoryProvider.js";
8
+ export { FileMemoryStorageAdapter, get_default_file_memory_root_path, } from "./memory/adapters/FileMemoryStorageAdapter.js";
7
9
  //# sourceMappingURL=memory.js.map
package/bin/memory.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EACL,wBAAwB,EACxB,iCAAiC,GAClC,MAAM,+CAA+C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/plugins",
3
- "version": "1.0.252",
3
+ "version": "1.0.254",
4
4
  "type": "module",
5
5
  "description": "Downcity 内建 plugin 集合包",
6
6
  "main": "./bin/index.js",
@@ -48,8 +48,8 @@
48
48
  }
49
49
  },
50
50
  "dependencies": {
51
- "@downcity/agent": "^1.1.335",
52
- "@downcity/shell": "^0.1.170",
51
+ "@downcity/agent": "^1.1.338",
52
+ "@downcity/shell": "^0.1.172",
53
53
  "ai": "^6.0.193",
54
54
  "better-sqlite3": "^12.10.0",
55
55
  "commander": "^15.0.0",
@@ -79,6 +79,7 @@
79
79
  "test:chat-config": "pnpm build && node --test scripts/chat-channel-config.test.mjs",
80
80
  "test:chat-storage": "pnpm build && node --test scripts/chat-storage.test.mjs",
81
81
  "test:exports": "pnpm build && node --test scripts/plugin-subpaths.test.mjs",
82
+ "test:memory": "pnpm build && node --test scripts/memory-plugin.test.mjs",
82
83
  "test:skill": "pnpm build && node --test scripts/skill-plugin.test.mjs",
83
84
  "test:sound": "pnpm build && node --test scripts/sound-plugin.test.mjs",
84
85
  "test:web": "pnpm build && node --test scripts/web-plugin.test.mjs"
@@ -0,0 +1,227 @@
1
+ /**
2
+ * MemoryPlugin Provider 与本地 Adapter 回归测试。
3
+ *
4
+ * 关键点(中文)
5
+ * - MemoryPlugin 只委托 Provider,不读取 Workspace 文件。
6
+ * - Builtin Provider 只公开 memory_id/citation,不泄漏物理路径。
7
+ * - File Adapter 始终把逻辑 key 限制在独占根目录。
8
+ */
9
+
10
+ import assert from "node:assert/strict";
11
+ import fs from "node:fs/promises";
12
+ import os from "node:os";
13
+ import path from "node:path";
14
+ import test from "node:test";
15
+ import {
16
+ BuiltinMemoryProvider,
17
+ FileMemoryStorageAdapter,
18
+ MemoryPlugin,
19
+ get_default_file_memory_root_path,
20
+ } from "@downcity/plugins/memory";
21
+
22
+ /** 创建测试使用的最小 Agent scope。 */
23
+ function create_scope(workspace_path, session_id) {
24
+ return {
25
+ agent_id: "memory_test_agent",
26
+ workspace_id: workspace_path,
27
+ ...(session_id ? { session_id } : {}),
28
+ };
29
+ }
30
+
31
+ test("Builtin Provider 把 Memory 数据写入独立 Adapter 根而不是 Workspace", async (context) => {
32
+ const temporary_root = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-memory-"));
33
+ context.after(async () => await fs.rm(temporary_root, { recursive: true, force: true }));
34
+ const workspace_path = path.join(temporary_root, "workspace");
35
+ const memory_root = path.join(temporary_root, "agent-data", "memory");
36
+ await fs.mkdir(workspace_path, { recursive: true });
37
+ const provider = new BuiltinMemoryProvider({
38
+ storage: new FileMemoryStorageAdapter({ root_path: memory_root }),
39
+ });
40
+ await provider.initialize({ agent_id: "memory_test_agent" });
41
+
42
+ const remembered = await provider.remember({
43
+ scope: create_scope(workspace_path),
44
+ content: "The user prefers concise answers.",
45
+ topic: "user-preferences",
46
+ memory_type: "preference",
47
+ source: "explicit user statement",
48
+ });
49
+ assert.equal(remembered.memory_id, "wiki/user-preferences");
50
+ assert.equal(remembered.mode, "created");
51
+ assert.equal(await fs.stat(path.join(memory_root, "wiki", "user-preferences.md")).then(() => true), true);
52
+ assert.equal(await fs.access(path.join(workspace_path, ".downcity", "memory")).then(() => true).catch(() => false), false);
53
+
54
+ const recalled = await provider.recall({
55
+ scope: create_scope(workspace_path),
56
+ query: "concise answers",
57
+ min_score: 0.1,
58
+ });
59
+ assert.equal(recalled.items[0]?.memory.memory_id, "wiki/user-preferences");
60
+ assert.deepEqual(recalled.items[0]?.memory.scope, { agent_id: "memory_test_agent" });
61
+ assert.match(recalled.items[0]?.memory.citation || "", /^memory:\/\/builtin\//);
62
+ assert.equal(JSON.stringify(recalled).includes(memory_root), false);
63
+
64
+ const read = await provider.read({
65
+ scope: create_scope(workspace_path),
66
+ memory_id: remembered.memory_id,
67
+ });
68
+ assert.match(read.memory?.content || "", /concise answers/);
69
+ assert.deepEqual(read.memory?.scope, { agent_id: "memory_test_agent" });
70
+
71
+ await provider.remember({
72
+ scope: create_scope(workspace_path, "session-that-must-not-own-memory"),
73
+ content: "The user also prefers structured results.",
74
+ topic: "user-preferences",
75
+ memory_type: "preference",
76
+ source: "second explicit user statement",
77
+ });
78
+ const updated_read = await provider.read({
79
+ scope: create_scope(workspace_path),
80
+ memory_id: remembered.memory_id,
81
+ });
82
+ assert.equal(updated_read.memory?.source_refs.length, 2);
83
+ assert.deepEqual(updated_read.memory?.scope, { agent_id: "memory_test_agent" });
84
+
85
+ await assert.rejects(provider.read({
86
+ scope: { agent_id: "another_agent" },
87
+ memory_id: remembered.memory_id,
88
+ }), /does not match initialized Provider/);
89
+ await assert.rejects(provider.digest({
90
+ scope: create_scope(workspace_path, "empty-session"),
91
+ session_id: "empty-session",
92
+ transcript: "",
93
+ message_count: 0,
94
+ }), /requires transcript content/);
95
+
96
+ const revised = await provider.revise({
97
+ scope: create_scope(workspace_path),
98
+ memory_id: remembered.memory_id,
99
+ instruction: "Add the latest preference.",
100
+ evidence: "The user also prefers structured results.",
101
+ });
102
+ assert.equal(revised.mode, "appended");
103
+ assert.match(revised.evidence_id || "", /^evidence\/manual\//);
104
+ const revised_read = await provider.read({
105
+ scope: create_scope(workspace_path),
106
+ memory_id: remembered.memory_id,
107
+ });
108
+ assert.match(revised_read.memory?.content || "", /structured results/);
109
+ assert.equal(revised_read.memory?.source_refs.length, 3);
110
+
111
+ const forgotten = await provider.forget({
112
+ scope: create_scope(workspace_path),
113
+ memory_id: remembered.memory_id,
114
+ });
115
+ assert.equal(forgotten.forgotten, true);
116
+ assert.equal((await provider.read({
117
+ scope: create_scope(workspace_path),
118
+ memory_id: remembered.memory_id,
119
+ })).memory, null);
120
+ await provider.dispose();
121
+ });
122
+
123
+ test("File Adapter 拒绝目录穿越并由 Memory Plugin 定义默认路径", async (context) => {
124
+ const temporary_root = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-memory-key-"));
125
+ context.after(async () => await fs.rm(temporary_root, { recursive: true, force: true }));
126
+ const adapter = new FileMemoryStorageAdapter({ root_path: temporary_root });
127
+ await adapter.initialize();
128
+ await assert.rejects(adapter.write("../outside.md", "blocked"), /Invalid Memory storage key/);
129
+ await assert.rejects(adapter.read("wiki/../../outside.md"), /Invalid Memory storage key/);
130
+ if (process.platform !== "win32") {
131
+ const outside_root = path.join(path.dirname(temporary_root), `${path.basename(temporary_root)}-outside`);
132
+ await fs.mkdir(outside_root, { recursive: true });
133
+ context.after(async () => await fs.rm(outside_root, { recursive: true, force: true }));
134
+ await fs.symlink(outside_root, path.join(temporary_root, "linked"), "dir");
135
+ await assert.rejects(
136
+ adapter.write("linked/outside.md", "blocked"),
137
+ /contains symbolic link/,
138
+ );
139
+ }
140
+ const provider = new BuiltinMemoryProvider({ storage: adapter });
141
+ await provider.initialize({ agent_id: "memory_test_agent" });
142
+ await assert.rejects(provider.read({
143
+ scope: { agent_id: "memory_test_agent" },
144
+ memory_id: "wiki/invalid.name",
145
+ }), /Invalid memory_id/);
146
+ assert.equal(
147
+ get_default_file_memory_root_path({
148
+ platform_root_path: "/platform-root",
149
+ agent_id: "memory_test_agent",
150
+ }),
151
+ path.join("/platform-root", "agents", "memory_test_agent", "memory"),
152
+ );
153
+ await provider.dispose();
154
+ });
155
+
156
+ test("Builtin Provider 在 initialize 阶段按 Agent 延迟创建 Adapter", async (context) => {
157
+ const temporary_root = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-memory-factory-"));
158
+ context.after(async () => await fs.rm(temporary_root, { recursive: true, force: true }));
159
+ const initialized_agents = [];
160
+ const provider = new BuiltinMemoryProvider({
161
+ create_storage(input) {
162
+ initialized_agents.push(input.agent_id);
163
+ return new FileMemoryStorageAdapter({
164
+ root_path: path.join(temporary_root, input.agent_id),
165
+ });
166
+ },
167
+ });
168
+ assert.deepEqual(initialized_agents, []);
169
+ await provider.initialize({ agent_id: "memory_test_agent" });
170
+ assert.deepEqual(initialized_agents, ["memory_test_agent"]);
171
+ await provider.dispose();
172
+ await provider.initialize({ agent_id: "memory_test_agent" });
173
+ assert.deepEqual(initialized_agents, ["memory_test_agent", "memory_test_agent"]);
174
+ await provider.dispose();
175
+ });
176
+
177
+ test("MemoryPlugin 将公开 Action 委托给唯一 Provider", async () => {
178
+ const calls = [];
179
+ const provider = {
180
+ name: "test-provider",
181
+ capabilities: {
182
+ remember: true,
183
+ recall: true,
184
+ read: true,
185
+ revise: true,
186
+ forget: true,
187
+ digest: true,
188
+ system_context: true,
189
+ },
190
+ async initialize(input) { calls.push(["initialize", input]); },
191
+ async status() { return { provider: this.name, state: "ready", capabilities: this.capabilities }; },
192
+ async recall(input) { calls.push(["recall", input]); return { provider: this.name, items: [] }; },
193
+ async read(input) { calls.push(["read", input]); return { memory_id: input.memory_id, memory: null }; },
194
+ async remember(input) { calls.push(["remember", input]); return { memory_id: "remote:1", mode: "created" }; },
195
+ async digest(input) { calls.push(["digest", input]); return { memory_ids: [], message_count: input.message_count, mode: "archived" }; },
196
+ async revise(input) { calls.push(["revise", input]); return { memory_id: input.memory_id, mode: "revised" }; },
197
+ async forget(input) { calls.push(["forget", input]); return { memory_id: input.memory_id, forgotten: true }; },
198
+ async system_context() { return { items: [] }; },
199
+ async dispose() { calls.push(["dispose"]); },
200
+ };
201
+ const plugin = new MemoryPlugin({ provider });
202
+ const plugin_context = {
203
+ agent_id: "memory_test_agent",
204
+ workspace_path: "/workspace",
205
+ };
206
+ await plugin.lifecycle.start(plugin_context);
207
+ const result = await plugin.actions.remember.execute({
208
+ context: plugin_context,
209
+ input: {
210
+ content: "Remember this",
211
+ topic: "test",
212
+ memory_type: "fact",
213
+ },
214
+ plugin_name: "memory",
215
+ action_name: "remember",
216
+ });
217
+ assert.equal(result.success, true);
218
+ assert.equal(result.data.memory_id, "remote:1");
219
+ assert.deepEqual(calls[0], ["initialize", {
220
+ agent_id: "memory_test_agent",
221
+ }]);
222
+ assert.equal(calls[1][0], "remember");
223
+ assert.equal(calls[1][1].scope.agent_id, "memory_test_agent");
224
+ assert.equal("files" in plugin_context, false);
225
+ await plugin.lifecycle.stop(plugin_context);
226
+ assert.equal(calls.at(-1)[0], "dispose");
227
+ });
@@ -48,3 +48,11 @@ test("根入口不再导出默认内建集合工厂", async () => {
48
48
  assert.equal("createBuiltinPlugins" in plugin_module, false);
49
49
  assert.equal("BUILTIN_PLUGIN_CLASSES" in plugin_module, false);
50
50
  });
51
+
52
+ test("memory 子路径导出 Provider 与 Storage Adapter", async () => {
53
+ const memory_module = await import("@downcity/plugins/memory");
54
+ assert.equal(typeof memory_module.MemoryPlugin, "function");
55
+ assert.equal(typeof memory_module.BuiltinMemoryProvider, "function");
56
+ assert.equal(typeof memory_module.FileMemoryStorageAdapter, "function");
57
+ assert.equal(typeof memory_module.get_default_file_memory_root_path, "function");
58
+ });