@coralai/sps-cli 0.89.21 → 0.90.1
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/agents/ClaudeSdkBackend.d.ts +9 -0
- package/dist/core/agents/ClaudeSdkBackend.d.ts.map +1 -1
- package/dist/core/agents/ClaudeSdkBackend.js +5 -0
- package/dist/core/agents/ClaudeSdkBackend.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/agents-builtin/index.d.ts.map +1 -1
- package/dist/seams/agents-builtin/index.js +66 -51
- package/dist/seams/agents-builtin/index.js.map +1 -1
- package/dist/seams/memory/index.d.ts +91 -28
- package/dist/seams/memory/index.d.ts.map +1 -1
- package/dist/seams/memory/index.js +113 -9
- package/dist/seams/memory/index.js.map +1 -1
- package/dist/seams/memory/optional.d.ts +43 -0
- package/dist/seams/memory/optional.d.ts.map +1 -0
- package/dist/seams/memory/optional.js +32 -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/agents-builtin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,OAAO,EAAW,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/agents-builtin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,OAAO,EAAW,MAAM,qBAAqB,CAAC;AAQ5D,6CAA6C;AAC7C,eAAO,MAAM,QAAQ,uBAAa,CAAC;AACnC,eAAO,MAAM,WAAW,uGAC2C,CAAC;AA8EpE,eAAO,MAAM,IAAI,uBAAuB,CAAC;AACzC,eAAO,MAAM,MAAM,UAAW,CAAC;AAE/B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAKxC"}
|
|
@@ -2,69 +2,84 @@ import { ClaudeSdkBackend } from '../../core/agents/ClaudeSdkBackend.js';
|
|
|
2
2
|
import { DaemonBackend } from '../../core/agents/DaemonBackend.js';
|
|
3
3
|
import { OpenAiAgentBackend } from '../../core/agents/OpenAiAgentBackend.js';
|
|
4
4
|
import { AGENTS } from '../agents/index.js';
|
|
5
|
+
import { memoryOf } from '../memory/optional.js';
|
|
5
6
|
/** 插件页展示用。**由插件自己声明** —— 前端写死的表对第三方永远是空的。 */
|
|
6
7
|
export const category = 'Agent 后端';
|
|
7
8
|
export const description = '内建四个后端:claude-sdk / claude-daemon / openai-sdk / openai-daemon。';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
id: 'openai-daemon',
|
|
23
|
-
summary: 'openai/codex 走共享 daemon;provider 传输按 providerId 推导',
|
|
24
|
-
create: (ctx) => {
|
|
25
|
-
const providerId = ctx.providerId ?? 'official';
|
|
26
|
-
const transport = ctx.providerTransport ??
|
|
27
|
-
(providerId === 'codex'
|
|
28
|
-
? 'codex'
|
|
29
|
-
: providerId === 'official'
|
|
30
|
-
? 'responses'
|
|
31
|
-
: 'chat_completions');
|
|
32
|
-
return new DaemonBackend({
|
|
33
|
-
backend: 'openai',
|
|
9
|
+
/**
|
|
10
|
+
* 🔴 收 `host`(Cordis ctx)而不是模块级常量:`claude-sdk` 要问 `sps.memory`
|
|
11
|
+
* 有没有自带的 claude 插件目录,而 `BackendCtx` 里没有装配上下文 ——
|
|
12
|
+
* 加到 `BackendCtx` 上会把一个 claude 专属的需要摊给所有后端。
|
|
13
|
+
*/
|
|
14
|
+
function builtins(host) {
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
id: 'claude-daemon',
|
|
18
|
+
summary: '人才市场:委托共享 daemon(与 chat 同宿主,统一并发/监控)',
|
|
19
|
+
create: (ctx) => new DaemonBackend({
|
|
20
|
+
backend: 'claude',
|
|
34
21
|
sessionName: ctx.sessionName,
|
|
35
22
|
cwd: ctx.cwd,
|
|
36
23
|
project: ctx.project,
|
|
37
24
|
resumeSessionId: ctx.resumeSessionId,
|
|
38
25
|
extraEnv: ctx.extraEnv,
|
|
39
|
-
|
|
40
|
-
providerId,
|
|
41
|
-
model: ctx.modelName,
|
|
42
|
-
transport,
|
|
43
|
-
...(ctx.providerBaseUrl ? { baseUrl: ctx.providerBaseUrl } : {}),
|
|
44
|
-
},
|
|
45
|
-
});
|
|
26
|
+
}),
|
|
46
27
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
28
|
+
{
|
|
29
|
+
id: 'openai-daemon',
|
|
30
|
+
summary: 'openai/codex 走共享 daemon;provider 传输按 providerId 推导',
|
|
31
|
+
create: (ctx) => {
|
|
32
|
+
const providerId = ctx.providerId ?? 'official';
|
|
33
|
+
const transport = ctx.providerTransport ??
|
|
34
|
+
(providerId === 'codex'
|
|
35
|
+
? 'codex'
|
|
36
|
+
: providerId === 'official'
|
|
37
|
+
? 'responses'
|
|
38
|
+
: 'chat_completions');
|
|
39
|
+
return new DaemonBackend({
|
|
40
|
+
backend: 'openai',
|
|
41
|
+
sessionName: ctx.sessionName,
|
|
42
|
+
cwd: ctx.cwd,
|
|
43
|
+
project: ctx.project,
|
|
44
|
+
resumeSessionId: ctx.resumeSessionId,
|
|
45
|
+
extraEnv: ctx.extraEnv,
|
|
46
|
+
provider: {
|
|
47
|
+
providerId,
|
|
48
|
+
model: ctx.modelName,
|
|
49
|
+
transport,
|
|
50
|
+
...(ctx.providerBaseUrl ? { baseUrl: ctx.providerBaseUrl } : {}),
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'openai-sdk',
|
|
57
|
+
summary: '进程内 @openai/agents SDK',
|
|
58
|
+
create: (ctx) => new OpenAiAgentBackend({
|
|
59
|
+
model: ctx.makeModel(),
|
|
60
|
+
cwd: ctx.cwd,
|
|
61
|
+
project: ctx.project,
|
|
62
|
+
sessionFile: ctx.sessionFile,
|
|
63
|
+
}),
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: 'claude-sdk',
|
|
67
|
+
summary: '进程内 claude-agent-sdk',
|
|
68
|
+
create: (bctx) => new ClaudeSdkBackend({
|
|
69
|
+
model: bctx.modelName,
|
|
70
|
+
cwd: bctx.cwd,
|
|
71
|
+
project: bctx.project,
|
|
72
|
+
// 记忆后端可自带一个 claude 插件(hooks 做自动召回)。
|
|
73
|
+
// 🔴 没装记忆插件 ⇒ `[]` ⇒ 不传 plugins 参数 ⇒ 零残留。
|
|
74
|
+
claudePlugins: memoryOf(host)?.workerPlugins() ?? [],
|
|
75
|
+
}),
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
}
|
|
64
79
|
export const name = 'sps-agents-builtin';
|
|
65
80
|
export const inject = [AGENTS];
|
|
66
81
|
export function apply(ctx) {
|
|
67
|
-
for (const f of
|
|
82
|
+
for (const f of builtins(ctx)) {
|
|
68
83
|
// effect 作用域:插件卸载时这些后端跟着注销,不会留下"注册着但代码已不在"的条目。
|
|
69
84
|
ctx.effect(() => ctx[AGENTS].register(f));
|
|
70
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/agents-builtin/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EAAE,MAAM,EAA4B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/agents-builtin/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,103 @@
|
|
|
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
|
+
/**
|
|
93
|
+
* 要注入 worker 的 Claude Code 插件目录(绝对路径)。默认没有。
|
|
94
|
+
*
|
|
95
|
+
* 🔴 宿主**只拿路径,不解析目录内容** —— hooks.json / .mcp.json 是
|
|
96
|
+
* claude 运行时的格式,和"sps 不解析 claude transcript"同源:
|
|
97
|
+
* 一旦宿主开始读它,换个 claude 版本就要跟着改。
|
|
98
|
+
*/
|
|
99
|
+
workerPlugins(): string[];
|
|
100
|
+
promoteEntry(from: ScopeRef, id: string, to: ScopeRef, opts: {
|
|
50
101
|
move?: boolean;
|
|
51
102
|
}): MemoryEntry | null;
|
|
52
103
|
}
|
|
@@ -55,4 +106,16 @@ declare module '@deepseek-ai/cordis' {
|
|
|
55
106
|
'sps.memory': MemorySeam;
|
|
56
107
|
}
|
|
57
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* 识别"写入被脱敏规则丢弃" —— 不是真错误,是一种被拒绝。
|
|
111
|
+
*
|
|
112
|
+
* 🔴 **必须按契约码判,不能用 `instanceof`**:后端是独立的 npm 包,
|
|
113
|
+
* 它的异常类不在宿主这边,跨包 `instanceof` 恒为 false ——
|
|
114
|
+
* 症状是脱敏拒绝被当成内部错误抛给用户(500 而不是 422)。
|
|
115
|
+
*
|
|
116
|
+
* @returns 命中的规则名;不是脱敏错误则 `null`。
|
|
117
|
+
*/
|
|
118
|
+
export declare function asRedacted(err: unknown): {
|
|
119
|
+
reasons: string[];
|
|
120
|
+
} | null;
|
|
58
121
|
//# 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;;;;;;OAMG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB,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,91 @@ 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
|
+
/**
|
|
88
|
+
* 要注入 worker 的 Claude Code 插件目录(绝对路径)。默认没有。
|
|
89
|
+
*
|
|
90
|
+
* 🔴 宿主**只拿路径,不解析目录内容** —— hooks.json / .mcp.json 是
|
|
91
|
+
* claude 运行时的格式,和"sps 不解析 claude transcript"同源:
|
|
92
|
+
* 一旦宿主开始读它,换个 claude 版本就要跟着改。
|
|
93
|
+
*/
|
|
94
|
+
workerPlugins() {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
promoteEntry(from, id, to, opts) {
|
|
98
|
+
const e = this.readEntry(from, id);
|
|
99
|
+
if (!e)
|
|
100
|
+
return null;
|
|
101
|
+
const saved = this.saveEntry(to, {
|
|
102
|
+
title: e.title,
|
|
103
|
+
body: e.body,
|
|
104
|
+
category: e.category,
|
|
105
|
+
tags: e.tags,
|
|
106
|
+
salience: e.salience,
|
|
107
|
+
source: e.source,
|
|
108
|
+
...(e.project ? { project: e.project } : {}),
|
|
109
|
+
});
|
|
110
|
+
if (opts.move)
|
|
111
|
+
this.deleteEntry(from, id);
|
|
112
|
+
return saved;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 识别"写入被脱敏规则丢弃" —— 不是真错误,是一种被拒绝。
|
|
117
|
+
*
|
|
118
|
+
* 🔴 **必须按契约码判,不能用 `instanceof`**:后端是独立的 npm 包,
|
|
119
|
+
* 它的异常类不在宿主这边,跨包 `instanceof` 恒为 false ——
|
|
120
|
+
* 症状是脱敏拒绝被当成内部错误抛给用户(500 而不是 422)。
|
|
121
|
+
*
|
|
122
|
+
* @returns 命中的规则名;不是脱敏错误则 `null`。
|
|
123
|
+
*/
|
|
124
|
+
export function asRedacted(err) {
|
|
125
|
+
if (!err || typeof err !== 'object')
|
|
126
|
+
return null;
|
|
127
|
+
if (err.code !== MEMORY_REDACTED_CODE)
|
|
128
|
+
return null;
|
|
129
|
+
const r = err.reasons;
|
|
130
|
+
return { reasons: Array.isArray(r) ? r : [] };
|
|
27
131
|
}
|
|
28
132
|
//# 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;;;;;;OAMG;IACH,aAAa;QACX,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,43 @@
|
|
|
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
|
+
* 🔴 **要惰性读,别在 apply 里读一次存起来。** 可选能力不声明 inject,
|
|
17
|
+
* 而 Cordis 不保证两个无依赖关系的插件谁先装 —— apply 时记忆可能还没到。
|
|
18
|
+
* 正确做法是在**真正要用的那一刻**调 `memoryOf()`(如后端工厂的 `create` 里),
|
|
19
|
+
* 那时装配早已完成。
|
|
20
|
+
*
|
|
21
|
+
* 🔴 **别在调用点各写各的判断** —— 那是"靠每个消费方记得",本仓为这种形状
|
|
22
|
+
* 付过多次代价。要么走 `memoryOf()` 拿到 null 后显式处理,
|
|
23
|
+
* 要么走 `withMemory()` 表达"没有就跳过"。
|
|
24
|
+
*/
|
|
25
|
+
import type { Context as PluginContext } from '@deepseek-ai/cordis';
|
|
26
|
+
import type { ScopeRef } from '../../core/memory2/types.js';
|
|
27
|
+
import type { MemorySeam } from './index.js';
|
|
28
|
+
/**
|
|
29
|
+
* 取记忆后端。**没装记忆插件时返回 null** —— 这不是错误,是一种正常状态。
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ 后端装了但自己关着(`enabled()` 为 false)时**仍返回实例** ——
|
|
32
|
+
* "没装后端"和"后端关着"是两件事,合并成一个读数会让排错时分不清。
|
|
33
|
+
* 需要区分的调用点自己问 `enabled()`。
|
|
34
|
+
*/
|
|
35
|
+
export declare function memoryOf(app: PluginContext): MemorySeam | null;
|
|
36
|
+
/** 记忆可用(装了 **且** 后端自己没关)时才做事;否则返回 `undefined`。 */
|
|
37
|
+
export declare function withMemory<T>(app: PluginContext, fn: (mem: MemorySeam) => T): T | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* 注入块。**没有记忆能力时返回空串** —— 与"有后端但没有记忆"同一个读数,
|
|
40
|
+
* 因为对派活方来说处置完全一样:不 prepend。
|
|
41
|
+
*/
|
|
42
|
+
export declare function memoryInjection(app: PluginContext, refs: ScopeRef[]): string;
|
|
43
|
+
//# 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;;;;;;;;;;;;;;;;;;;;;;;GAuBG;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,CAQ9D;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,32 @@
|
|
|
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
|
+
// 🔴 必须走 `reflect.get` —— 直接 `app['sps.memory']` 在**插件的 apply 上下文**里
|
|
11
|
+
// 会抛 `cannot get property "sps.memory" without inject`。
|
|
12
|
+
// (在根 ctx 上读只是返回 undefined,所以只在插件里踩得到:
|
|
13
|
+
// 2026-08-27 实测,单元测试全绿而 agents-builtin 一装就炸。)
|
|
14
|
+
// reflect.get 的原话是 "Read a service from the store without the inject
|
|
15
|
+
// requirement" —— 这正是"可选能力"需要的读法。
|
|
16
|
+
return app.reflect.get('sps.memory') ?? null;
|
|
17
|
+
}
|
|
18
|
+
/** 记忆可用(装了 **且** 后端自己没关)时才做事;否则返回 `undefined`。 */
|
|
19
|
+
export function withMemory(app, fn) {
|
|
20
|
+
const mem = memoryOf(app);
|
|
21
|
+
if (!mem || !mem.enabled())
|
|
22
|
+
return undefined;
|
|
23
|
+
return fn(mem);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 注入块。**没有记忆能力时返回空串** —— 与"有后端但没有记忆"同一个读数,
|
|
27
|
+
* 因为对派活方来说处置完全一样:不 prepend。
|
|
28
|
+
*/
|
|
29
|
+
export function memoryInjection(app, refs) {
|
|
30
|
+
return withMemory(app, (m) => buildMemoryInjection(m, refs)) ?? '';
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=optional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/seams/memory/optional.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIpE;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAkB;IACzC,qEAAqE;IACrE,2DAA2D;IAC3D,0CAA0C;IAC1C,kDAAkD;IAClD,wEAAwE;IACxE,qCAAqC;IACrC,OAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAA4B,IAAI,IAAI,CAAC;AAC3E,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';
|