@coralai/sps-cli 0.89.21 → 0.90.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/assembly/base.yml +0 -7
- package/dist/commands/agentCommand.d.ts.map +1 -1
- package/dist/commands/agentCommand.js +2 -1
- package/dist/commands/agentCommand.js.map +1 -1
- package/dist/commands/cardDashboard.js +1 -1
- package/dist/commands/cardDashboard.js.map +1 -1
- package/dist/commands/cardMarkComplete.d.ts +24 -0
- package/dist/commands/cardMarkComplete.d.ts.map +1 -1
- package/dist/commands/cardMarkComplete.js +1 -1
- package/dist/commands/cardMarkComplete.js.map +1 -1
- package/dist/commands/cardMarkStarted.d.ts +23 -0
- package/dist/commands/cardMarkStarted.d.ts.map +1 -1
- package/dist/commands/cardMarkStarted.js +1 -1
- package/dist/commands/cardMarkStarted.js.map +1 -1
- package/dist/commands/hookCommand.js +1 -1
- package/dist/commands/hookCommand.js.map +1 -1
- package/dist/commands/memoryCommand.d.ts.map +1 -1
- package/dist/commands/memoryCommand.js +45 -34
- package/dist/commands/memoryCommand.js.map +1 -1
- package/dist/commands/pipelineTick.js +1 -1
- package/dist/commands/pipelineTick.js.map +1 -1
- package/dist/commands/qaTick.js +1 -1
- package/dist/commands/qaTick.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +3 -2
- package/dist/commands/tick.js.map +1 -1
- package/dist/commands/workerLaunch.js +1 -1
- package/dist/commands/workerLaunch.js.map +1 -1
- package/dist/console/index.js +3 -3
- package/dist/console/index.js.map +1 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +1 -1
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/help.js +1 -1
- package/dist/console/routes/help.js.map +1 -1
- package/dist/console/routes/projectConfig.js +1 -1
- package/dist/console/routes/projectConfig.js.map +1 -1
- package/dist/core/memory2/capture.d.ts +15 -12
- package/dist/core/memory2/capture.d.ts.map +1 -1
- package/dist/core/memory2/capture.js +32 -22
- package/dist/core/memory2/capture.js.map +1 -1
- package/dist/core/memory2/config.d.ts +3 -7
- package/dist/core/memory2/config.d.ts.map +1 -1
- package/dist/core/memory2/config.js +3 -13
- package/dist/core/memory2/config.js.map +1 -1
- package/dist/core/memory2/digest.d.ts +20 -14
- package/dist/core/memory2/digest.d.ts.map +1 -1
- package/dist/core/memory2/digest.js +15 -44
- package/dist/core/memory2/digest.js.map +1 -1
- package/dist/core/memory2/fakeStore.d.ts +26 -0
- package/dist/core/memory2/fakeStore.d.ts.map +1 -0
- package/dist/core/memory2/fakeStore.js +36 -0
- package/dist/core/memory2/fakeStore.js.map +1 -0
- package/dist/core/memory2/inject.d.ts +21 -2
- package/dist/core/memory2/inject.d.ts.map +1 -1
- package/dist/core/memory2/inject.js +4 -18
- package/dist/core/memory2/inject.js.map +1 -1
- package/dist/core/memory2/types.d.ts +8 -47
- package/dist/core/memory2/types.d.ts.map +1 -1
- package/dist/core/memory2/types.js +10 -10
- package/dist/core/memory2/types.js.map +1 -1
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +1 -1
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/engines/StageEngine.d.ts.map +1 -1
- package/dist/engines/StageEngine.js +4 -2
- package/dist/engines/StageEngine.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts +1 -1
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.js +12 -10
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
- package/dist/providers/mcp/spsMcpServer.js +124 -116
- package/dist/providers/mcp/spsMcpServer.js.map +1 -1
- package/dist/providers/media/mediaProviders.js +1 -1
- package/dist/providers/media/mediaProviders.js.map +1 -1
- package/dist/seams/memory/index.d.ts +83 -28
- package/dist/seams/memory/index.d.ts.map +1 -1
- package/dist/seams/memory/index.js +103 -9
- package/dist/seams/memory/index.js.map +1 -1
- package/dist/seams/memory/optional.d.ts +38 -0
- package/dist/seams/memory/optional.d.ts.map +1 -0
- package/dist/seams/memory/optional.js +26 -0
- package/dist/seams/memory/optional.js.map +1 -0
- package/dist/services/MemoryService.d.ts +1 -2
- package/dist/services/MemoryService.d.ts.map +1 -1
- package/dist/services/MemoryService.js +67 -25
- package/dist/services/MemoryService.js.map +1 -1
- package/dist/services/SystemService.d.ts +6 -0
- package/dist/services/SystemService.d.ts.map +1 -1
- package/dist/services/SystemService.js +6 -0
- package/dist/services/SystemService.js.map +1 -1
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +1 -0
- package/dist/services/container.js.map +1 -1
- package/dist/services/executors.d.ts.map +1 -1
- package/dist/services/executors.js +1 -1
- package/dist/services/executors.js.map +1 -1
- package/dist/services/promptPreview.d.ts.map +1 -1
- package/dist/services/promptPreview.js +2 -1
- package/dist/services/promptPreview.js.map +1 -1
- package/docs/help/02-commands.md +2 -2
- package/docs/help/05-api.md +2 -2
- package/package.json +2 -1
- package/dist/core/memory2/claudeMdRule.d.ts +0 -7
- package/dist/core/memory2/claudeMdRule.d.ts.map +0 -1
- package/dist/core/memory2/claudeMdRule.js +0 -73
- package/dist/core/memory2/claudeMdRule.js.map +0 -1
- package/dist/core/memory2/ftsIndex.d.ts +0 -8
- package/dist/core/memory2/ftsIndex.d.ts.map +0 -1
- package/dist/core/memory2/ftsIndex.js +0 -172
- package/dist/core/memory2/ftsIndex.js.map +0 -1
- package/dist/core/memory2/gc.d.ts +0 -9
- package/dist/core/memory2/gc.d.ts.map +0 -1
- package/dist/core/memory2/gc.js +0 -45
- package/dist/core/memory2/gc.js.map +0 -1
- package/dist/core/memory2/lock.d.ts +0 -12
- package/dist/core/memory2/lock.d.ts.map +0 -1
- package/dist/core/memory2/lock.js +0 -61
- package/dist/core/memory2/lock.js.map +0 -1
- package/dist/core/memory2/migrate.d.ts +0 -12
- package/dist/core/memory2/migrate.d.ts.map +0 -1
- package/dist/core/memory2/migrate.js +0 -119
- package/dist/core/memory2/migrate.js.map +0 -1
- package/dist/core/memory2/recallResult.d.ts +0 -19
- package/dist/core/memory2/recallResult.d.ts.map +0 -1
- package/dist/core/memory2/recallResult.js +0 -33
- package/dist/core/memory2/recallResult.js.map +0 -1
- package/dist/core/memory2/redact.d.ts +0 -21
- package/dist/core/memory2/redact.d.ts.map +0 -1
- package/dist/core/memory2/redact.js +0 -116
- package/dist/core/memory2/redact.js.map +0 -1
- package/dist/core/memory2/retrieve.d.ts +0 -29
- package/dist/core/memory2/retrieve.d.ts.map +0 -1
- package/dist/core/memory2/retrieve.js +0 -79
- package/dist/core/memory2/retrieve.js.map +0 -1
- package/dist/core/memory2/store.d.ts +0 -35
- package/dist/core/memory2/store.d.ts.map +0 -1
- package/dist/core/memory2/store.js +0 -240
- package/dist/core/memory2/store.js.map +0 -1
- package/dist/seams/memory-local/client.js +0 -135
- package/dist/seams/memory-local/index.d.ts +0 -34
- package/dist/seams/memory-local/index.d.ts.map +0 -1
- package/dist/seams/memory-local/index.js +0 -58
- package/dist/seams/memory-local/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaProviders.js","sourceRoot":"","sources":["../../../src/providers/media/mediaProviders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"mediaProviders.js","sourceRoot":"","sources":["../../../src/providers/media/mediaProviders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,95 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module seams/memory
|
|
3
|
-
* @description **记忆 seam 的服务定义** ——
|
|
3
|
+
* @description **记忆 seam 的服务定义** —— 后端只负责**数据面**,实现在 `memory-*`。
|
|
4
4
|
*
|
|
5
5
|
* @layer seam
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* 类型:今天仍是**甲 · 工厂型**(装配档 `base.yml` 一行 `name` 选实现)。
|
|
8
|
+
* ⚠️ 已拍板迁**乙 · 注册表型**(见 docs/design/34-memory-as-plugin.md §3、§7),但**尚未落地** ——
|
|
9
|
+
* 迁移要动装配、配置落点、控制台三处。**在那之前别把这里写成"乙型"**:
|
|
10
|
+
* 注释与事实不符正是本仓反复付过代价的形状。
|
|
9
11
|
*
|
|
10
12
|
* 🔴 **seam 只管"哪个后端",不管"这个后端开不开"。**
|
|
11
|
-
* memory2
|
|
12
|
-
* 在 seam 上再造一个 `memory-none`,就有了两处能关掉记忆的地方 ——
|
|
13
|
-
* 而且排错时"到底是谁关的"要翻两个地方。
|
|
13
|
+
* 后端自己的开关(memory2 的 `SPS_MEMORY_MODE=none`)由后端的 `enabled()` 表达。
|
|
14
|
+
* 在 seam 上再造一个 `memory-none`,就有了两处能关掉记忆的地方 —— 两处判据必漂。
|
|
14
15
|
* (与 notifier 一致:seam 选 Matrix,MatrixNotifier 自己读 MATRIX_* 并自我降级。)
|
|
15
16
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* ## 契约的分界:数据面归后端,机制归本体
|
|
18
|
+
*
|
|
19
|
+
* 判据是那条产品形态规则 —— **跨后端都成立的是机制,某后端才知道的是领域**:
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* 机制(留在 core/memory2,收 seam 参数) 捕获缓冲与去重 / 结论段抽取 / LLM 蒸馏 /
|
|
23
|
+
* 注入块文案 / digest 预算
|
|
24
|
+
* 领域(后端实现) 条目存在哪、怎么检索、怎么增删
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* ⚠️ 2026-08-27 瘦身前契约有 13 个抽象方法,其中 6 个经不起"换个后端还成立吗"这一问:
|
|
28
|
+
* `captureStart/BindUnsub/Note/Flush/Discard` 是一次执行的**缓冲生命周期**
|
|
29
|
+
* (`captureBindUnsub` 甚至只是替调用方保管一个退订回调),`buildInjection` 是
|
|
30
|
+
* **注入块的文案**。它们跨后端完全一样 ⇒ 是机制,不该要求每个后端各写一遍。
|
|
31
|
+
*
|
|
32
|
+
* 🔴 同一次瘦身补上了 `recall` —— 在此之前**记忆最核心的读路根本不走 seam**:
|
|
33
|
+
* MCP 的 `memory_recall`、`/api/memory/recall`、`sps memory recall/search`
|
|
34
|
+
* 三处都直连 `core/memory2/recallResult`。症状会是**换了后端,检索还在读本地
|
|
35
|
+
* markdown** —— 和本文件原先警告的"读走 seam、写还直连"是同一个病的两半。
|
|
19
36
|
*/
|
|
37
|
+
import { type MemoryGcStats, type MemoryMigrateStats, type MemoryRecallHit as RecallHit } from '@coralai/sps-plugin-api';
|
|
20
38
|
import { type Context, Service } from '@deepseek-ai/cordis';
|
|
21
|
-
import type { WorkerOutputEvent } from '../../core/agents/AgentBackend.js';
|
|
22
|
-
import type { CaptureOutcome } from '../../core/memory2/capture.js';
|
|
23
39
|
import type { MemoryEntry, SaveInput, ScopeRef } from '../../core/memory2/types.js';
|
|
24
40
|
/** 服务名。加 `sps.` 前缀 —— Cordis 是扁平命名空间。 */
|
|
25
41
|
export declare const MEMORY = "sps.memory";
|
|
42
|
+
/** 检索入参。后端可以忽略自己不支持的项(如 tags),但不得因此报错。 */
|
|
43
|
+
export interface RecallOpts {
|
|
44
|
+
tags?: string[];
|
|
45
|
+
limit?: number;
|
|
46
|
+
}
|
|
26
47
|
export declare abstract class MemorySeam extends Service {
|
|
27
48
|
constructor(ctx: Context);
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
*
|
|
31
|
-
* 🔴 返回空串是契约的一部分,不是"失败" —— 实现不要用抛错表达"没有记忆"。
|
|
32
|
-
*/
|
|
33
|
-
abstract buildInjection(refs: ScopeRef[]): string;
|
|
34
|
-
abstract captureStart(project: string, cardId: string): void;
|
|
35
|
-
/** 绑一个取消订阅函数;flush/discard 时由实现负责调用。 */
|
|
36
|
-
abstract captureBindUnsub(project: string, cardId: string, unsub: () => void): void;
|
|
37
|
-
abstract captureNote(project: string, cardId: string, ev: WorkerOutputEvent): void;
|
|
38
|
-
/** 落盘并结束这次捕获。 */
|
|
39
|
-
abstract captureFlush(project: string, cardId: string): CaptureOutcome;
|
|
40
|
-
/** 丢弃这次捕获(卡失败/取消时用),**不落盘**。 */
|
|
41
|
-
abstract captureDiscard(project: string, cardId: string): void;
|
|
49
|
+
/** 检索。`RecallHit.id` 带 `<backend>:` 前缀,调用方据此知道回哪读全文。 */
|
|
50
|
+
abstract recall(refs: ScopeRef[], query: string, opts?: RecallOpts): Promise<RecallHit[]>;
|
|
42
51
|
abstract listEntries(ref: ScopeRef): MemoryEntry[];
|
|
43
52
|
abstract readEntry(ref: ScopeRef, id: string): MemoryEntry | null;
|
|
44
53
|
abstract listAllScopes(): ScopeRef[];
|
|
45
54
|
abstract saveEntry(ref: ScopeRef, input: SaveInput): MemoryEntry;
|
|
46
55
|
abstract deleteEntry(ref: ScopeRef, id: string): boolean;
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
56
|
+
/**
|
|
57
|
+
* 后端当前是否可用。**返回 false 不是错误** —— 调用方据此静默跳过,
|
|
58
|
+
* 而不是让记忆的开关状态变成一次异常。
|
|
59
|
+
*/
|
|
60
|
+
enabled(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* 记一次"被真正读了全文"。默认不记 —— 一个没有排序反馈机制的后端
|
|
63
|
+
* 不该被迫实现它,而它缺席只影响排序质量,不影响正确性。
|
|
64
|
+
*/
|
|
65
|
+
bumpUses(_ref: ScopeRef, _id: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* 重建该作用域的派生产物(如本地实现的 `MEMORY.md`)。
|
|
68
|
+
* 默认无派生产物 ⇒ 空实现。批量写入后由调用方调一次,不是每条都调。
|
|
69
|
+
*/
|
|
70
|
+
reindex(_ref: ScopeRef): void;
|
|
71
|
+
/**
|
|
72
|
+
* 跨作用域提升。默认用 read + save + delete 组合 ——
|
|
73
|
+
* 后端有原子实现时再覆盖(默认实现在 move 且 delete 失败时会留下副本)。
|
|
74
|
+
*/
|
|
75
|
+
/**
|
|
76
|
+
* 宿主写完记忆配置后调一次,让长命进程无需重启即读到新值。
|
|
77
|
+
* 后端不缓存配置 ⇒ 默认空实现。
|
|
78
|
+
*/
|
|
79
|
+
reloadConfig(): void;
|
|
80
|
+
/** 后端支持哪些维护操作。默认都不支持。 */
|
|
81
|
+
readonly supports: {
|
|
82
|
+
gc?: boolean;
|
|
83
|
+
migrate?: boolean;
|
|
84
|
+
};
|
|
85
|
+
/** 回收一个作用域。`supports.gc` 为假时宿主不会调它。 */
|
|
86
|
+
gc(_ref: ScopeRef): Promise<MemoryGcStats>;
|
|
87
|
+
/** 迁移后端自己的历史结构。`supports.migrate` 为假时宿主不会调它。 */
|
|
88
|
+
migrate(_target: {
|
|
89
|
+
project?: string;
|
|
90
|
+
all?: boolean;
|
|
91
|
+
}): MemoryMigrateStats;
|
|
92
|
+
promoteEntry(from: ScopeRef, id: string, to: ScopeRef, opts: {
|
|
50
93
|
move?: boolean;
|
|
51
94
|
}): MemoryEntry | null;
|
|
52
95
|
}
|
|
@@ -55,4 +98,16 @@ declare module '@deepseek-ai/cordis' {
|
|
|
55
98
|
'sps.memory': MemorySeam;
|
|
56
99
|
}
|
|
57
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* 识别"写入被脱敏规则丢弃" —— 不是真错误,是一种被拒绝。
|
|
103
|
+
*
|
|
104
|
+
* 🔴 **必须按契约码判,不能用 `instanceof`**:后端是独立的 npm 包,
|
|
105
|
+
* 它的异常类不在宿主这边,跨包 `instanceof` 恒为 false ——
|
|
106
|
+
* 症状是脱敏拒绝被当成内部错误抛给用户(500 而不是 422)。
|
|
107
|
+
*
|
|
108
|
+
* @returns 命中的规则名;不是脱敏错误则 `null`。
|
|
109
|
+
*/
|
|
110
|
+
export declare function asRedacted(err: unknown): {
|
|
111
|
+
reasons: string[];
|
|
112
|
+
} | null;
|
|
58
113
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/memory/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,IAAI,SAAS,EAClC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEpF,yCAAyC;AACzC,eAAO,MAAM,MAAM,eAAe,CAAC;AAEnC,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8BAAsB,UAAW,SAAQ,OAAO;gBAClC,GAAG,EAAE,OAAO;IASxB,wDAAwD;IACxD,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAEzF,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE;IAClD,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IACjE,QAAQ,CAAC,aAAa,IAAI,QAAQ,EAAE;IAEpC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW;IAChE,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxD;;;OAGG;IACH,OAAO,IAAI,OAAO;IAIlB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAE3C;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAE7B;;;OAGG;IACH;;;OAGG;IACH,YAAY,IAAI,IAAI;IAQpB,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAM;IAE5D,uCAAuC;IACvC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1C,gDAAgD;IAChD,OAAO,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,kBAAkB;IAIzE,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,WAAW,GAAG,IAAI;CAerG;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,UAAU,CAAC;KAC1B;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAKrE"}
|
|
@@ -1,22 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module seams/memory
|
|
3
|
-
* @description **记忆 seam 的服务定义** ——
|
|
3
|
+
* @description **记忆 seam 的服务定义** —— 后端只负责**数据面**,实现在 `memory-*`。
|
|
4
4
|
*
|
|
5
5
|
* @layer seam
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* 类型:今天仍是**甲 · 工厂型**(装配档 `base.yml` 一行 `name` 选实现)。
|
|
8
|
+
* ⚠️ 已拍板迁**乙 · 注册表型**(见 docs/design/34-memory-as-plugin.md §3、§7),但**尚未落地** ——
|
|
9
|
+
* 迁移要动装配、配置落点、控制台三处。**在那之前别把这里写成"乙型"**:
|
|
10
|
+
* 注释与事实不符正是本仓反复付过代价的形状。
|
|
9
11
|
*
|
|
10
12
|
* 🔴 **seam 只管"哪个后端",不管"这个后端开不开"。**
|
|
11
|
-
* memory2
|
|
12
|
-
* 在 seam 上再造一个 `memory-none`,就有了两处能关掉记忆的地方 ——
|
|
13
|
-
* 而且排错时"到底是谁关的"要翻两个地方。
|
|
13
|
+
* 后端自己的开关(memory2 的 `SPS_MEMORY_MODE=none`)由后端的 `enabled()` 表达。
|
|
14
|
+
* 在 seam 上再造一个 `memory-none`,就有了两处能关掉记忆的地方 —— 两处判据必漂。
|
|
14
15
|
* (与 notifier 一致:seam 选 Matrix,MatrixNotifier 自己读 MATRIX_* 并自我降级。)
|
|
15
16
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* ## 契约的分界:数据面归后端,机制归本体
|
|
18
|
+
*
|
|
19
|
+
* 判据是那条产品形态规则 —— **跨后端都成立的是机制,某后端才知道的是领域**:
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* 机制(留在 core/memory2,收 seam 参数) 捕获缓冲与去重 / 结论段抽取 / LLM 蒸馏 /
|
|
23
|
+
* 注入块文案 / digest 预算
|
|
24
|
+
* 领域(后端实现) 条目存在哪、怎么检索、怎么增删
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* ⚠️ 2026-08-27 瘦身前契约有 13 个抽象方法,其中 6 个经不起"换个后端还成立吗"这一问:
|
|
28
|
+
* `captureStart/BindUnsub/Note/Flush/Discard` 是一次执行的**缓冲生命周期**
|
|
29
|
+
* (`captureBindUnsub` 甚至只是替调用方保管一个退订回调),`buildInjection` 是
|
|
30
|
+
* **注入块的文案**。它们跨后端完全一样 ⇒ 是机制,不该要求每个后端各写一遍。
|
|
31
|
+
*
|
|
32
|
+
* 🔴 同一次瘦身补上了 `recall` —— 在此之前**记忆最核心的读路根本不走 seam**:
|
|
33
|
+
* MCP 的 `memory_recall`、`/api/memory/recall`、`sps memory recall/search`
|
|
34
|
+
* 三处都直连 `core/memory2/recallResult`。症状会是**换了后端,检索还在读本地
|
|
35
|
+
* markdown** —— 和本文件原先警告的"读走 seam、写还直连"是同一个病的两半。
|
|
19
36
|
*/
|
|
37
|
+
import { MEMORY_REDACTED_CODE, } from '@coralai/sps-plugin-api';
|
|
20
38
|
import { Service } from '@deepseek-ai/cordis';
|
|
21
39
|
/** 服务名。加 `sps.` 前缀 —— Cordis 是扁平命名空间。 */
|
|
22
40
|
export const MEMORY = 'sps.memory';
|
|
@@ -24,5 +42,81 @@ export class MemorySeam extends Service {
|
|
|
24
42
|
constructor(ctx) {
|
|
25
43
|
super(ctx, MEMORY);
|
|
26
44
|
}
|
|
45
|
+
// ══ 可选:有默认实现,后端有更好做法才覆盖 ═════════════════════
|
|
46
|
+
/**
|
|
47
|
+
* 后端当前是否可用。**返回 false 不是错误** —— 调用方据此静默跳过,
|
|
48
|
+
* 而不是让记忆的开关状态变成一次异常。
|
|
49
|
+
*/
|
|
50
|
+
enabled() {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 记一次"被真正读了全文"。默认不记 —— 一个没有排序反馈机制的后端
|
|
55
|
+
* 不该被迫实现它,而它缺席只影响排序质量,不影响正确性。
|
|
56
|
+
*/
|
|
57
|
+
bumpUses(_ref, _id) { }
|
|
58
|
+
/**
|
|
59
|
+
* 重建该作用域的派生产物(如本地实现的 `MEMORY.md`)。
|
|
60
|
+
* 默认无派生产物 ⇒ 空实现。批量写入后由调用方调一次,不是每条都调。
|
|
61
|
+
*/
|
|
62
|
+
reindex(_ref) { }
|
|
63
|
+
/**
|
|
64
|
+
* 跨作用域提升。默认用 read + save + delete 组合 ——
|
|
65
|
+
* 后端有原子实现时再覆盖(默认实现在 move 且 delete 失败时会留下副本)。
|
|
66
|
+
*/
|
|
67
|
+
/**
|
|
68
|
+
* 宿主写完记忆配置后调一次,让长命进程无需重启即读到新值。
|
|
69
|
+
* 后端不缓存配置 ⇒ 默认空实现。
|
|
70
|
+
*/
|
|
71
|
+
reloadConfig() { }
|
|
72
|
+
// ── 维护能力(可选) ──
|
|
73
|
+
//
|
|
74
|
+
// 🔴 **能力查询式**,不是"调了才知道":宿主先看 `supports`,再决定要不要
|
|
75
|
+
// 给用户这个入口。从异常里推断"这个后端不支持"会把"不支持"和"执行失败"
|
|
76
|
+
// 混成一个读数,而两者的处置完全不同。
|
|
77
|
+
/** 后端支持哪些维护操作。默认都不支持。 */
|
|
78
|
+
supports = {};
|
|
79
|
+
/** 回收一个作用域。`supports.gc` 为假时宿主不会调它。 */
|
|
80
|
+
gc(_ref) {
|
|
81
|
+
return Promise.resolve({ purged: 0, deduped: 0, kept: 0 });
|
|
82
|
+
}
|
|
83
|
+
/** 迁移后端自己的历史结构。`supports.migrate` 为假时宿主不会调它。 */
|
|
84
|
+
migrate(_target) {
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
promoteEntry(from, id, to, opts) {
|
|
88
|
+
const e = this.readEntry(from, id);
|
|
89
|
+
if (!e)
|
|
90
|
+
return null;
|
|
91
|
+
const saved = this.saveEntry(to, {
|
|
92
|
+
title: e.title,
|
|
93
|
+
body: e.body,
|
|
94
|
+
category: e.category,
|
|
95
|
+
tags: e.tags,
|
|
96
|
+
salience: e.salience,
|
|
97
|
+
source: e.source,
|
|
98
|
+
...(e.project ? { project: e.project } : {}),
|
|
99
|
+
});
|
|
100
|
+
if (opts.move)
|
|
101
|
+
this.deleteEntry(from, id);
|
|
102
|
+
return saved;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 识别"写入被脱敏规则丢弃" —— 不是真错误,是一种被拒绝。
|
|
107
|
+
*
|
|
108
|
+
* 🔴 **必须按契约码判,不能用 `instanceof`**:后端是独立的 npm 包,
|
|
109
|
+
* 它的异常类不在宿主这边,跨包 `instanceof` 恒为 false ——
|
|
110
|
+
* 症状是脱敏拒绝被当成内部错误抛给用户(500 而不是 422)。
|
|
111
|
+
*
|
|
112
|
+
* @returns 命中的规则名;不是脱敏错误则 `null`。
|
|
113
|
+
*/
|
|
114
|
+
export function asRedacted(err) {
|
|
115
|
+
if (!err || typeof err !== 'object')
|
|
116
|
+
return null;
|
|
117
|
+
if (err.code !== MEMORY_REDACTED_CODE)
|
|
118
|
+
return null;
|
|
119
|
+
const r = err.reasons;
|
|
120
|
+
return { reasons: Array.isArray(r) ? r : [] };
|
|
27
121
|
}
|
|
28
122
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/memory/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EACL,oBAAoB,GAIrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG5D,yCAAyC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC;AAQnC,MAAM,OAAgB,UAAW,SAAQ,OAAO;IAC9C,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrB,CAAC;IAiBD,+CAA+C;IAE/C;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAc,EAAE,GAAW,IAAS,CAAC;IAE9C;;;OAGG;IACH,OAAO,CAAC,IAAc,IAAS,CAAC;IAEhC;;;OAGG;IACH;;;OAGG;IACH,YAAY,KAAU,CAAC;IAEvB,iBAAiB;IACjB,EAAE;IACF,gDAAgD;IAChD,2CAA2C;IAC3C,wBAAwB;IAExB,yBAAyB;IAChB,QAAQ,GAAwC,EAAE,CAAC;IAE5D,uCAAuC;IACvC,EAAE,CAAC,IAAc;QACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,OAA4C;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,YAAY,CAAC,IAAc,EAAE,EAAU,EAAE,EAAY,EAAE,IAAwB;QAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;YAC/B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,IAAK,GAA0B,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,CAAC,GAAI,GAA6B,CAAC,OAAO,CAAC;IACjD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module seams/memory/optional
|
|
3
|
+
* @description **记忆是可选能力** —— 没装记忆插件时,sps 一切照常,只是没有记忆。
|
|
4
|
+
*
|
|
5
|
+
* @layer seam
|
|
6
|
+
*
|
|
7
|
+
* 🔴 为什么不给一个内置兜底实现:那样"没装插件"会变成"偷偷用了另一个后端",
|
|
8
|
+
* 而用户看到的是记忆能用 —— 直到换机器/换部署才发现两边记的东西不一样。
|
|
9
|
+
* **没有就是没有**,是比悄悄降级更容易排错的行为。
|
|
10
|
+
*
|
|
11
|
+
* ⚠️ 为什么不用 Cordis 的 `inject`:它**没有 optional 语义** ——
|
|
12
|
+
* 声明了 inject 而服务缺席 ⇒ 消费方 PENDING,整条链起不来。
|
|
13
|
+
* 而不声明 inject 直接读未注册的服务 ⇒ 返回 `undefined`,不抛错(实测)。
|
|
14
|
+
* ⇒ 可选能力只能走"运行时探测",这个文件就是那道统一的探测口。
|
|
15
|
+
*
|
|
16
|
+
* 🔴 **别在调用点各写各的判断** —— 那是"靠每个消费方记得",本仓为这种形状
|
|
17
|
+
* 付过多次代价。要么走 `memoryOf()` 拿到 null 后显式处理,
|
|
18
|
+
* 要么走 `withMemory()` 表达"没有就跳过"。
|
|
19
|
+
*/
|
|
20
|
+
import type { Context as PluginContext } from '@deepseek-ai/cordis';
|
|
21
|
+
import type { ScopeRef } from '../../core/memory2/types.js';
|
|
22
|
+
import type { MemorySeam } from './index.js';
|
|
23
|
+
/**
|
|
24
|
+
* 取记忆后端。**没装记忆插件时返回 null** —— 这不是错误,是一种正常状态。
|
|
25
|
+
*
|
|
26
|
+
* ⚠️ 后端装了但自己关着(`enabled()` 为 false)时**仍返回实例** ——
|
|
27
|
+
* "没装后端"和"后端关着"是两件事,合并成一个读数会让排错时分不清。
|
|
28
|
+
* 需要区分的调用点自己问 `enabled()`。
|
|
29
|
+
*/
|
|
30
|
+
export declare function memoryOf(app: PluginContext): MemorySeam | null;
|
|
31
|
+
/** 记忆可用(装了 **且** 后端自己没关)时才做事;否则返回 `undefined`。 */
|
|
32
|
+
export declare function withMemory<T>(app: PluginContext, fn: (mem: MemorySeam) => T): T | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* 注入块。**没有记忆能力时返回空串** —— 与"有后端但没有记忆"同一个读数,
|
|
35
|
+
* 因为对派活方来说处置完全一样:不 prepend。
|
|
36
|
+
*/
|
|
37
|
+
export declare function memoryInjection(app: PluginContext, refs: ScopeRef[]): string;
|
|
38
|
+
//# sourceMappingURL=optional.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../../src/seams/memory/optional.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,GAAG,IAAI,CAE9D;AAED,kDAAkD;AAClD,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAI3F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAE5E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { buildMemoryInjection } from '../../core/memory2/inject.js';
|
|
2
|
+
/**
|
|
3
|
+
* 取记忆后端。**没装记忆插件时返回 null** —— 这不是错误,是一种正常状态。
|
|
4
|
+
*
|
|
5
|
+
* ⚠️ 后端装了但自己关着(`enabled()` 为 false)时**仍返回实例** ——
|
|
6
|
+
* "没装后端"和"后端关着"是两件事,合并成一个读数会让排错时分不清。
|
|
7
|
+
* 需要区分的调用点自己问 `enabled()`。
|
|
8
|
+
*/
|
|
9
|
+
export function memoryOf(app) {
|
|
10
|
+
return app['sps.memory'] ?? null;
|
|
11
|
+
}
|
|
12
|
+
/** 记忆可用(装了 **且** 后端自己没关)时才做事;否则返回 `undefined`。 */
|
|
13
|
+
export function withMemory(app, fn) {
|
|
14
|
+
const mem = memoryOf(app);
|
|
15
|
+
if (!mem || !mem.enabled())
|
|
16
|
+
return undefined;
|
|
17
|
+
return fn(mem);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 注入块。**没有记忆能力时返回空串** —— 与"有后端但没有记忆"同一个读数,
|
|
21
|
+
* 因为对派活方来说处置完全一样:不 prepend。
|
|
22
|
+
*/
|
|
23
|
+
export function memoryInjection(app, refs) {
|
|
24
|
+
return withMemory(app, (m) => buildMemoryInjection(m, refs)) ?? '';
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=optional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/seams/memory/optional.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIpE;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAkB;IACzC,OAAQ,GAAyD,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,UAAU,CAAI,GAAkB,EAAE,EAA0B;IAC1E,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QAAE,OAAO,SAAS,CAAC;IAC7C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAkB,EAAE,IAAgB;IAClE,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC"}
|
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
* @layer services
|
|
7
7
|
* @boundedContext memory
|
|
8
8
|
*/
|
|
9
|
+
import type { MemoryGcStats as GcStats, MemoryRecallHit as RecallHit } from '@coralai/sps-plugin-api';
|
|
9
10
|
import type { Context as PluginContext } from '@deepseek-ai/cordis';
|
|
10
|
-
import { type RecallHit } from '../core/memory2/recallResult.js';
|
|
11
|
-
import { type GcStats } from '../core/memory2/gc.js';
|
|
12
11
|
import { type MemoryEntry, type ScopeRef } from '../core/memory2/types.js';
|
|
13
12
|
import { type DomainError } from '../shared/errors.js';
|
|
14
13
|
import { type Result } from '../shared/result.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryService.d.ts","sourceRoot":"","sources":["../../src/services/MemoryService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"MemoryService.d.ts","sourceRoot":"","sources":["../../src/services/MemoryService.ts"],"names":[],"mappings":"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"}
|