@coralai/sps-cli 0.66.7 → 0.67.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 (282) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/assembly/art.yml +6 -0
  3. package/assembly/base.yml +72 -0
  4. package/assembly/cli.yml +4 -0
  5. package/assembly/console.yml +4 -0
  6. package/assembly/daemon.yml +4 -0
  7. package/dist/commands/agentCommand.d.ts +22 -1
  8. package/dist/commands/agentCommand.d.ts.map +1 -1
  9. package/dist/commands/agentCommand.js +14 -15
  10. package/dist/commands/agentCommand.js.map +1 -1
  11. package/dist/commands/cardAdd.d.ts +14 -1
  12. package/dist/commands/cardAdd.d.ts.map +1 -1
  13. package/dist/commands/cardAdd.js +32 -14
  14. package/dist/commands/cardAdd.js.map +1 -1
  15. package/dist/commands/cardInsert.d.ts +19 -1
  16. package/dist/commands/cardInsert.d.ts.map +1 -1
  17. package/dist/commands/cardInsert.js +5 -18
  18. package/dist/commands/cardInsert.js.map +1 -1
  19. package/dist/commands/consoleCommand.d.ts +20 -1
  20. package/dist/commands/consoleCommand.d.ts.map +1 -1
  21. package/dist/commands/consoleCommand.js +5 -2
  22. package/dist/commands/consoleCommand.js.map +1 -1
  23. package/dist/commands/imCommand.d.ts +9 -1
  24. package/dist/commands/imCommand.d.ts.map +1 -1
  25. package/dist/commands/imCommand.js +2 -9
  26. package/dist/commands/imCommand.js.map +1 -1
  27. package/dist/commands/memoryCommand.d.ts +11 -1
  28. package/dist/commands/memoryCommand.d.ts.map +1 -1
  29. package/dist/commands/memoryCommand.js +12 -18
  30. package/dist/commands/memoryCommand.js.map +1 -1
  31. package/dist/commands/monitorTick.d.ts +24 -1
  32. package/dist/commands/monitorTick.d.ts.map +1 -1
  33. package/dist/commands/monitorTick.js +8 -4
  34. package/dist/commands/monitorTick.js.map +1 -1
  35. package/dist/commands/openaiAgent.d.ts +2 -1
  36. package/dist/commands/openaiAgent.d.ts.map +1 -1
  37. package/dist/commands/openaiAgent.js +7 -3
  38. package/dist/commands/openaiAgent.js.map +1 -1
  39. package/dist/commands/pipelineTick.d.ts +4 -1
  40. package/dist/commands/pipelineTick.d.ts.map +1 -1
  41. package/dist/commands/pipelineTick.js +11 -7
  42. package/dist/commands/pipelineTick.js.map +1 -1
  43. package/dist/commands/pluginCommand.d.ts +2 -0
  44. package/dist/commands/pluginCommand.d.ts.map +1 -0
  45. package/dist/commands/pluginCommand.js +160 -0
  46. package/dist/commands/pluginCommand.js.map +1 -0
  47. package/dist/commands/qaTick.d.ts +4 -1
  48. package/dist/commands/qaTick.d.ts.map +1 -1
  49. package/dist/commands/qaTick.js +11 -7
  50. package/dist/commands/qaTick.js.map +1 -1
  51. package/dist/commands/schedulerTick.d.ts +24 -1
  52. package/dist/commands/schedulerTick.d.ts.map +1 -1
  53. package/dist/commands/schedulerTick.js +5 -23
  54. package/dist/commands/schedulerTick.js.map +1 -1
  55. package/dist/commands/tick.d.ts +25 -2
  56. package/dist/commands/tick.d.ts.map +1 -1
  57. package/dist/commands/tick.js +39 -16
  58. package/dist/commands/tick.js.map +1 -1
  59. package/dist/commands/workerLaunch.d.ts +4 -1
  60. package/dist/commands/workerLaunch.d.ts.map +1 -1
  61. package/dist/commands/workerLaunch.js +11 -7
  62. package/dist/commands/workerLaunch.js.map +1 -1
  63. package/dist/console/index.d.ts +21 -0
  64. package/dist/console/index.d.ts.map +1 -1
  65. package/dist/console/index.js +8 -4
  66. package/dist/console/index.js.map +1 -1
  67. package/dist/console/routes/capabilities.d.ts +3 -0
  68. package/dist/console/routes/capabilities.d.ts.map +1 -1
  69. package/dist/console/routes/capabilities.js +2 -21
  70. package/dist/console/routes/capabilities.js.map +1 -1
  71. package/dist/console/routes/cards.d.ts +19 -0
  72. package/dist/console/routes/cards.d.ts.map +1 -1
  73. package/dist/console/routes/cards.js +1 -1
  74. package/dist/console/routes/cards.js.map +1 -1
  75. package/dist/console/routes/mcpTools.d.ts +2 -1
  76. package/dist/console/routes/mcpTools.d.ts.map +1 -1
  77. package/dist/console/routes/mcpTools.js +3 -8
  78. package/dist/console/routes/mcpTools.js.map +1 -1
  79. package/dist/console/routes/plugins.d.ts +20 -0
  80. package/dist/console/routes/plugins.d.ts.map +1 -0
  81. package/dist/console/routes/plugins.js +185 -0
  82. package/dist/console/routes/plugins.js.map +1 -0
  83. package/dist/console/routes/tts.d.ts +2 -1
  84. package/dist/console/routes/tts.d.ts.map +1 -1
  85. package/dist/console/routes/tts.js +2 -3
  86. package/dist/console/routes/tts.js.map +1 -1
  87. package/dist/console-assets/assets/{ShowcasePage-CkqOu-1n.js → ShowcasePage-3ekOTV_g.js} +1 -1
  88. package/dist/console-assets/assets/{index-DCKXZKta.css → index-Dd7MTFgX.css} +1 -1
  89. package/dist/console-assets/assets/{index-BugtIQfO.js → index-o3svZ9mC.js} +224 -214
  90. package/dist/console-assets/index.html +2 -2
  91. package/dist/core/agents/resolveBackend.d.ts +0 -5
  92. package/dist/core/agents/resolveBackend.d.ts.map +1 -1
  93. package/dist/core/agents/resolveBackend.js +6 -52
  94. package/dist/core/agents/resolveBackend.js.map +1 -1
  95. package/dist/core/art/artRunService.d.ts +13 -1
  96. package/dist/core/art/artRunService.d.ts.map +1 -1
  97. package/dist/core/art/artRunService.js +1 -0
  98. package/dist/core/art/artRunService.js.map +1 -1
  99. package/dist/core/mcpToolCatalog.d.ts +14 -1
  100. package/dist/core/mcpToolCatalog.d.ts.map +1 -1
  101. package/dist/core/mcpToolCatalog.js +7 -11
  102. package/dist/core/mcpToolCatalog.js.map +1 -1
  103. package/dist/core/tools/ToolCardExecutor.d.ts +12 -2
  104. package/dist/core/tools/ToolCardExecutor.d.ts.map +1 -1
  105. package/dist/core/tools/ToolCardExecutor.js.map +1 -1
  106. package/dist/daemon/daemonClient.d.ts +8 -2
  107. package/dist/daemon/daemonClient.d.ts.map +1 -1
  108. package/dist/daemon/daemonClient.js +9 -0
  109. package/dist/daemon/daemonClient.js.map +1 -1
  110. package/dist/daemon/sessionDaemon.d.ts +7 -2
  111. package/dist/daemon/sessionDaemon.d.ts.map +1 -1
  112. package/dist/daemon/sessionDaemon.js +49 -10
  113. package/dist/daemon/sessionDaemon.js.map +1 -1
  114. package/dist/engines/StageEngine.d.ts +6 -1
  115. package/dist/engines/StageEngine.d.ts.map +1 -1
  116. package/dist/engines/StageEngine.js +10 -7
  117. package/dist/engines/StageEngine.js.map +1 -1
  118. package/dist/im/IMGatewayManager.d.ts +12 -0
  119. package/dist/im/IMGatewayManager.d.ts.map +1 -1
  120. package/dist/im/IMGatewayManager.js +10 -18
  121. package/dist/im/IMGatewayManager.js.map +1 -1
  122. package/dist/main.js +69 -23
  123. package/dist/main.js.map +1 -1
  124. package/dist/manager/makeBackendFactory.d.ts +12 -0
  125. package/dist/manager/makeBackendFactory.d.ts.map +1 -1
  126. package/dist/manager/makeBackendFactory.js +3 -2
  127. package/dist/manager/makeBackendFactory.js.map +1 -1
  128. package/dist/manager/worker-manager-impl.d.ts +19 -0
  129. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  130. package/dist/manager/worker-manager-impl.js +15 -15
  131. package/dist/manager/worker-manager-impl.js.map +1 -1
  132. package/dist/openai-agent/memory/v2Bridge.d.ts +28 -2
  133. package/dist/openai-agent/memory/v2Bridge.d.ts.map +1 -1
  134. package/dist/openai-agent/memory/v2Bridge.js +4 -20
  135. package/dist/openai-agent/memory/v2Bridge.js.map +1 -1
  136. package/dist/openai-agent/runWorker.d.ts +8 -6
  137. package/dist/openai-agent/runWorker.d.ts.map +1 -1
  138. package/dist/openai-agent/runWorker.js +5 -4
  139. package/dist/openai-agent/runWorker.js.map +1 -1
  140. package/dist/openai-agent/sandbox/execution.d.ts +10 -2
  141. package/dist/openai-agent/sandbox/execution.d.ts.map +1 -1
  142. package/dist/openai-agent/sandbox/execution.js +9 -6
  143. package/dist/openai-agent/sandbox/execution.js.map +1 -1
  144. package/dist/plugin/assembly.d.ts +37 -0
  145. package/dist/plugin/assembly.d.ts.map +1 -0
  146. package/dist/plugin/assembly.js +95 -0
  147. package/dist/plugin/assembly.js.map +1 -0
  148. package/dist/plugin/context.d.ts +101 -0
  149. package/dist/plugin/context.d.ts.map +1 -0
  150. package/dist/plugin/context.js +187 -0
  151. package/dist/plugin/context.js.map +1 -0
  152. package/dist/plugin/hot.d.ts +34 -0
  153. package/dist/plugin/hot.d.ts.map +1 -0
  154. package/dist/plugin/hot.js +62 -0
  155. package/dist/plugin/hot.js.map +1 -0
  156. package/dist/plugin/layers.d.ts +40 -0
  157. package/dist/plugin/layers.d.ts.map +1 -0
  158. package/dist/plugin/layers.js +101 -0
  159. package/dist/plugin/layers.js.map +1 -0
  160. package/dist/plugin/manager.d.ts +80 -0
  161. package/dist/plugin/manager.d.ts.map +1 -0
  162. package/dist/plugin/manager.js +202 -0
  163. package/dist/plugin/manager.js.map +1 -0
  164. package/dist/plugin/run.d.ts +53 -0
  165. package/dist/plugin/run.d.ts.map +1 -0
  166. package/dist/plugin/run.js +72 -0
  167. package/dist/plugin/run.js.map +1 -0
  168. package/dist/providers/MarkdownTaskBackend.d.ts +7 -0
  169. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
  170. package/dist/providers/MarkdownTaskBackend.js +17 -0
  171. package/dist/providers/MarkdownTaskBackend.js.map +1 -1
  172. package/dist/providers/art/artGen.d.ts +18 -3
  173. package/dist/providers/art/artGen.d.ts.map +1 -1
  174. package/dist/providers/art/artGen.js +15 -15
  175. package/dist/providers/art/artGen.js.map +1 -1
  176. package/dist/providers/art/artRunChild.d.ts +2 -1
  177. package/dist/providers/art/artRunChild.d.ts.map +1 -1
  178. package/dist/providers/art/artRunChild.js +15 -8
  179. package/dist/providers/art/artRunChild.js.map +1 -1
  180. package/dist/providers/llm/chatTools.d.ts +10 -1
  181. package/dist/providers/llm/chatTools.d.ts.map +1 -1
  182. package/dist/providers/llm/chatTools.js +4 -4
  183. package/dist/providers/llm/chatTools.js.map +1 -1
  184. package/dist/providers/mcp/spsMcpServer.d.ts +3 -0
  185. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
  186. package/dist/providers/mcp/spsMcpServer.js +34 -32
  187. package/dist/providers/mcp/spsMcpServer.js.map +1 -1
  188. package/dist/providers/mcp/spsMcpStdio.js +12 -1
  189. package/dist/providers/mcp/spsMcpStdio.js.map +1 -1
  190. package/dist/providers/media/generateAsset.d.ts +11 -0
  191. package/dist/providers/media/generateAsset.d.ts.map +1 -1
  192. package/dist/providers/media/generateAsset.js +2 -3
  193. package/dist/providers/media/generateAsset.js.map +1 -1
  194. package/dist/providers/registry.d.ts +0 -4
  195. package/dist/providers/registry.d.ts.map +1 -1
  196. package/dist/providers/registry.js +1 -14
  197. package/dist/providers/registry.js.map +1 -1
  198. package/dist/seams/agents/index.d.ts +49 -0
  199. package/dist/seams/agents/index.d.ts.map +1 -0
  200. package/dist/seams/agents/index.js +54 -0
  201. package/dist/seams/agents/index.js.map +1 -0
  202. package/dist/seams/agents-builtin/index.d.ts +19 -0
  203. package/dist/seams/agents-builtin/index.d.ts.map +1 -0
  204. package/dist/seams/agents-builtin/index.js +69 -0
  205. package/dist/seams/agents-builtin/index.js.map +1 -0
  206. package/dist/seams/capabilities/index.d.ts +39 -0
  207. package/dist/seams/capabilities/index.d.ts.map +1 -0
  208. package/dist/seams/capabilities/index.js +47 -0
  209. package/dist/seams/capabilities/index.js.map +1 -0
  210. package/dist/seams/capabilities-art/index.d.ts +14 -0
  211. package/dist/seams/capabilities-art/index.d.ts.map +1 -0
  212. package/dist/seams/capabilities-art/index.js +9 -0
  213. package/dist/seams/capabilities-art/index.js.map +1 -0
  214. package/dist/seams/im/index.d.ts +28 -0
  215. package/dist/seams/im/index.d.ts.map +1 -0
  216. package/dist/seams/im/index.js +36 -0
  217. package/dist/seams/im/index.js.map +1 -0
  218. package/dist/seams/im-builtin/index.d.ts +13 -0
  219. package/dist/seams/im-builtin/index.d.ts.map +1 -0
  220. package/dist/seams/im-builtin/index.js +25 -0
  221. package/dist/seams/im-builtin/index.js.map +1 -0
  222. package/dist/seams/media/index.d.ts +30 -0
  223. package/dist/seams/media/index.d.ts.map +1 -0
  224. package/dist/seams/media/index.js +38 -0
  225. package/dist/seams/media/index.js.map +1 -0
  226. package/dist/seams/media-builtin/index.d.ts +13 -0
  227. package/dist/seams/media-builtin/index.d.ts.map +1 -0
  228. package/dist/seams/media-builtin/index.js +10 -0
  229. package/dist/seams/media-builtin/index.js.map +1 -0
  230. package/dist/seams/memory/index.d.ts +58 -0
  231. package/dist/seams/memory/index.d.ts.map +1 -0
  232. package/dist/seams/memory/index.js +28 -0
  233. package/dist/seams/memory/index.js.map +1 -0
  234. package/dist/seams/memory-local/index.d.ts +31 -0
  235. package/dist/seams/memory-local/index.d.ts.map +1 -0
  236. package/dist/seams/memory-local/index.js +55 -0
  237. package/dist/seams/memory-local/index.js.map +1 -0
  238. package/dist/seams/notifier/index.d.ts +37 -0
  239. package/dist/seams/notifier/index.d.ts.map +1 -0
  240. package/dist/seams/notifier/index.js +30 -0
  241. package/dist/seams/notifier/index.js.map +1 -0
  242. package/dist/seams/notifier-matrix/index.d.ts +17 -0
  243. package/dist/seams/notifier-matrix/index.d.ts.map +1 -0
  244. package/dist/seams/notifier-matrix/index.js +8 -0
  245. package/dist/seams/notifier-matrix/index.js.map +1 -0
  246. package/dist/seams/notifier-none/index.d.ts +18 -0
  247. package/dist/seams/notifier-none/index.d.ts.map +1 -0
  248. package/dist/seams/notifier-none/index.js +14 -0
  249. package/dist/seams/notifier-none/index.js.map +1 -0
  250. package/dist/seams/repo/index.d.ts +38 -0
  251. package/dist/seams/repo/index.d.ts.map +1 -0
  252. package/dist/seams/repo/index.js +43 -0
  253. package/dist/seams/repo/index.js.map +1 -0
  254. package/dist/seams/repo-builtin/index.d.ts +14 -0
  255. package/dist/seams/repo-builtin/index.d.ts.map +1 -0
  256. package/dist/seams/repo-builtin/index.js +14 -0
  257. package/dist/seams/repo-builtin/index.js.map +1 -0
  258. package/dist/seams/tools/index.d.ts +83 -0
  259. package/dist/seams/tools/index.d.ts.map +1 -0
  260. package/dist/seams/tools/index.js +67 -0
  261. package/dist/seams/tools/index.js.map +1 -0
  262. package/dist/services/CardService.d.ts +8 -0
  263. package/dist/services/CardService.d.ts.map +1 -1
  264. package/dist/services/CardService.js +16 -3
  265. package/dist/services/CardService.js.map +1 -1
  266. package/dist/services/MemoryService.d.ts +12 -0
  267. package/dist/services/MemoryService.d.ts.map +1 -1
  268. package/dist/services/MemoryService.js +14 -18
  269. package/dist/services/MemoryService.js.map +1 -1
  270. package/dist/services/container.d.ts +20 -1
  271. package/dist/services/container.d.ts.map +1 -1
  272. package/dist/services/container.js +10 -3
  273. package/dist/services/container.js.map +1 -1
  274. package/dist/services/executors.d.ts +4 -0
  275. package/dist/services/executors.d.ts.map +1 -1
  276. package/dist/services/executors.js +27 -5
  277. package/dist/services/executors.js.map +1 -1
  278. package/dist/services/promptPreview.d.ts +14 -1
  279. package/dist/services/promptPreview.d.ts.map +1 -1
  280. package/dist/services/promptPreview.js +4 -3
  281. package/dist/services/promptPreview.js.map +1 -1
  282. package/package.json +16 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEtE,yCAAyC;AACzC,eAAO,MAAM,MAAM,eAAe,CAAC;AAEnC,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC;CACvC;AAED,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0C;gBAEnD,GAAG,EAAE,OAAO;IAIxB;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAU5C,sDAAsD;IACtD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,YAAY;IAUjD,IAAI,IAAI,MAAM,EAAE;CAGjB;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,oBAAoB,CAAC;KACpC;CACF"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @module seams/agents
3
+ * @description **agent 后端注册表 seam** —— 插件把 agent 后端注册进来,派活时按名字取。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**乙 · 注册表型**(见 docs/design/plugin-architecture.md §3c)。
8
+ * 判据是「换实现是**项目决定**」——"这个项目用 claude 还是 openai",不是部署级选一个。
9
+ *
10
+ * 🔴 **这是仓库北极星那句话的机制化**:
11
+ * > 换一个 agent 后端时,上层编排代码应几乎不用改。
12
+ * 今天它是一条**纪律**(`resolveBackend` 里一个手写 switch,加实现要改内核代码);
13
+ * 做成注册表之后它是**结构**:写一个包 → `sps plugin add` → 项目配置里写名字。
14
+ *
15
+ * 🔴 **取不到时要列出有哪些。** "agent 配错了"是最难查的一类 ——
16
+ * 症状是"卡片永远不动",而真因只是配置里一个拼错的名字。
17
+ */
18
+ import { Service } from '@deepseek-ai/cordis';
19
+ /** 服务名。加 `sps.` 前缀 —— Cordis 是扁平命名空间。 */
20
+ export const AGENTS = 'sps.agents';
21
+ export default class AgentBackendRegistry extends Service {
22
+ byId = new Map();
23
+ constructor(ctx) {
24
+ super(ctx, AGENTS);
25
+ }
26
+ /**
27
+ * 注册一个后端。**返回注销函数**,调用方应当包进 `ctx.effect`。
28
+ *
29
+ * 🔴 重名**抛错**不是覆盖:静默覆盖会让"这个项目到底跑在哪个后端上"无从判断,
30
+ * 而那正是排查 worker 行为异常时第一个要确认的事。
31
+ */
32
+ register(f) {
33
+ if (this.byId.has(f.id)) {
34
+ throw new Error(`agent 后端 id 重复:${f.id}(已有注册者;请改名或先卸载那个插件)`);
35
+ }
36
+ this.byId.set(f.id, f);
37
+ return () => {
38
+ if (this.byId.get(f.id) === f)
39
+ this.byId.delete(f.id);
40
+ };
41
+ }
42
+ /** 按 id 造一个后端。**取不到就抛,并列出有哪些** —— 别让配置错误表现成"卡片不动"。 */
43
+ create(id, ctx) {
44
+ const f = this.byId.get(id);
45
+ if (!f) {
46
+ throw new Error(`未注册的 agent 后端:${id}。已注册的有:${this.list().join(', ') || '(一个都没有)'}`);
47
+ }
48
+ return f.create(ctx);
49
+ }
50
+ list() {
51
+ return [...this.byId.keys()].sort();
52
+ }
53
+ }
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI5D,yCAAyC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC;AAUnC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IACtC,IAAI,GAAG,IAAI,GAAG,EAA+B,CAAC;IAE/D,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,CAAsB;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,MAAM,CAAC,EAAU,EAAE,GAAe;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CACb,iBAAiB,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CACnE,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @module seams/agents-builtin
3
+ * @description 把 sps 内建的四个 agent 后端注册进 `sps.agents`。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 🔴 **这里替代了 `resolveBackend` 的那个 switch。** 那个 switch 的问题不是写法,
8
+ * 是**加一个后端必须改内核代码** —— 而"换 agent 后端上层不改"正是北极星那句话。
9
+ * 现在加后端 = 写一个包 + 装配档一行。
10
+ *
11
+ * ⚠️ 构造细节(provider 传输选择等)原样保留在各 factory 里,没有趁机重写 ——
12
+ * 这一步只搬**选择方式**,不动**构造逻辑**。两件事混在一次改动里,
13
+ * 出问题时分不清是搬错了还是改错了。
14
+ */
15
+ import { type Context } from '@deepseek-ai/cordis';
16
+ export declare const name = "sps-agents-builtin";
17
+ export declare const inject: string[];
18
+ export declare function apply(ctx: Context): void;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAoE5D,eAAO,MAAM,IAAI,uBAAuB,CAAC;AACzC,eAAO,MAAM,MAAM,UAAW,CAAC;AAE/B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAKxC"}
@@ -0,0 +1,69 @@
1
+ import { ClaudeSdkBackend } from '../../core/agents/ClaudeSdkBackend.js';
2
+ import { DaemonBackend } from '../../core/agents/DaemonBackend.js';
3
+ import { OpenAiAgentBackend } from '../../core/agents/OpenAiAgentBackend.js';
4
+ import { AGENTS } from '../agents/index.js';
5
+ const BUILTIN = [
6
+ {
7
+ id: 'claude-daemon',
8
+ summary: '人才市场:委托共享 daemon(与 chat 同宿主,统一并发/监控)',
9
+ create: (ctx) => new DaemonBackend({
10
+ backend: 'claude',
11
+ sessionName: ctx.sessionName,
12
+ cwd: ctx.cwd,
13
+ project: ctx.project,
14
+ resumeSessionId: ctx.resumeSessionId,
15
+ extraEnv: ctx.extraEnv,
16
+ }),
17
+ },
18
+ {
19
+ id: 'openai-daemon',
20
+ summary: 'openai/codex 走共享 daemon;provider 传输按 providerId 推导',
21
+ create: (ctx) => {
22
+ const providerId = ctx.providerId ?? 'official';
23
+ const transport = ctx.providerTransport ??
24
+ (providerId === 'codex'
25
+ ? 'codex'
26
+ : providerId === 'official'
27
+ ? 'responses'
28
+ : 'chat_completions');
29
+ return new DaemonBackend({
30
+ backend: 'openai',
31
+ sessionName: ctx.sessionName,
32
+ cwd: ctx.cwd,
33
+ project: ctx.project,
34
+ resumeSessionId: ctx.resumeSessionId,
35
+ extraEnv: ctx.extraEnv,
36
+ provider: {
37
+ providerId,
38
+ model: ctx.modelName,
39
+ transport,
40
+ ...(ctx.providerBaseUrl ? { baseUrl: ctx.providerBaseUrl } : {}),
41
+ },
42
+ });
43
+ },
44
+ },
45
+ {
46
+ id: 'openai-sdk',
47
+ summary: '进程内 @openai/agents SDK',
48
+ create: (ctx) => new OpenAiAgentBackend({
49
+ model: ctx.makeModel(),
50
+ cwd: ctx.cwd,
51
+ project: ctx.project,
52
+ sessionFile: ctx.sessionFile,
53
+ }),
54
+ },
55
+ {
56
+ id: 'claude-sdk',
57
+ summary: '进程内 claude-agent-sdk',
58
+ create: (ctx) => new ClaudeSdkBackend({ model: ctx.modelName, cwd: ctx.cwd, project: ctx.project }),
59
+ },
60
+ ];
61
+ export const name = 'sps-agents-builtin';
62
+ export const inject = [AGENTS];
63
+ export function apply(ctx) {
64
+ for (const f of BUILTIN) {
65
+ // effect 作用域:插件卸载时这些后端跟着注销,不会留下"注册着但代码已不在"的条目。
66
+ ctx.effect(() => ctx[AGENTS].register(f));
67
+ }
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAEtE,MAAM,OAAO,GAA0B;IACrC;QACE,EAAE,EAAE,eAAe;QACnB,OAAO,EAAE,sCAAsC;QAC/C,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE,CAC1B,IAAI,aAAa,CAAC;YAChB,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC;KACL;IACD;QACE,EAAE,EAAE,eAAe;QACnB,OAAO,EAAE,oDAAoD;QAC7D,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE;YAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC;YAChD,MAAM,SAAS,GACb,GAAG,CAAC,iBAAiB;gBACrB,CAAC,UAAU,KAAK,OAAO;oBACrB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,UAAU,KAAK,UAAU;wBACzB,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC5B,OAAO,IAAI,aAAa,CAAC;gBACvB,OAAO,EAAE,QAAQ;gBACjB,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,QAAQ,EAAE;oBACR,UAAU;oBACV,KAAK,EAAE,GAAG,CAAC,SAAS;oBACpB,SAAS;oBACT,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE;aACF,CAAC,CAAC;QACL,CAAC;KACF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,wBAAwB;QACjC,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE,CAC1B,IAAI,kBAAkB,CAAC;YACrB,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE;YACtB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC;KACL;IACD;QACE,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,sBAAsB;QAC/B,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE,CAC1B,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;KACrF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,oBAAoB,CAAC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AAE/B,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,+CAA+C;QAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @module seams/capabilities
3
+ * @description **工具卡能力注册表 seam** —— 插件把能力注册进来,工具卡按 id 调。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**乙 · 注册表型**。它本来就是注册表(`core/tools/registry`),
8
+ * 这一层只是把它**变成一个可被插件写入的服务**。
9
+ *
10
+ * 🔴 **改的是"谁能往里加",不是注册表本身。**
11
+ * 之前每跑一张工具卡就 `new CapabilityRegistry(artCapabilities())` —— 一个**每次重建、
12
+ * 只装内建**的注册表,插件根本插不进去。现在它是进程级服务,装配档决定谁往里注册。
13
+ *
14
+ * ⚠️ **script 层能力从这里进**:`Capability.source` 已经预留了
15
+ * `{ kind: 'script', template, script }`。那条路一直被 template.json 未落地挡着;
16
+ * 插件化之后它的载体就是这个注册表 —— 一个模板包插件把自己的脚本能力注册进来。
17
+ */
18
+ import { type Context, Service } from '@deepseek-ai/cordis';
19
+ import type { Capability } from '../../core/tools/registry.js';
20
+ export declare const CAPABILITIES = "sps.capabilities";
21
+ export default class CapabilitySeam extends Service {
22
+ private readonly byId;
23
+ constructor(ctx: Context);
24
+ /**
25
+ * 注册一个能力。**返回注销函数**,调用方包进 `ctx.effect`。
26
+ *
27
+ * 🔴 重名**抛错**不是覆盖 —— 静默覆盖会让"我调的是哪一个 art.resize"无从判断
28
+ * (与 `core/tools/registry` 原本的判据一致)。
29
+ */
30
+ register(cap: Capability): () => void;
31
+ get(id: string): Capability | undefined;
32
+ list(): Capability[];
33
+ }
34
+ declare module '@deepseek-ai/cordis' {
35
+ interface Context {
36
+ 'sps.capabilities': CapabilitySeam;
37
+ }
38
+ }
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;gBAE1C,GAAG,EAAE,OAAO;IAIxB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,IAAI;IAQrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvC,IAAI,IAAI,UAAU,EAAE;CAGrB;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @module seams/capabilities
3
+ * @description **工具卡能力注册表 seam** —— 插件把能力注册进来,工具卡按 id 调。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**乙 · 注册表型**。它本来就是注册表(`core/tools/registry`),
8
+ * 这一层只是把它**变成一个可被插件写入的服务**。
9
+ *
10
+ * 🔴 **改的是"谁能往里加",不是注册表本身。**
11
+ * 之前每跑一张工具卡就 `new CapabilityRegistry(artCapabilities())` —— 一个**每次重建、
12
+ * 只装内建**的注册表,插件根本插不进去。现在它是进程级服务,装配档决定谁往里注册。
13
+ *
14
+ * ⚠️ **script 层能力从这里进**:`Capability.source` 已经预留了
15
+ * `{ kind: 'script', template, script }`。那条路一直被 template.json 未落地挡着;
16
+ * 插件化之后它的载体就是这个注册表 —— 一个模板包插件把自己的脚本能力注册进来。
17
+ */
18
+ import { Service } from '@deepseek-ai/cordis';
19
+ export const CAPABILITIES = 'sps.capabilities';
20
+ export default class CapabilitySeam extends Service {
21
+ byId = new Map();
22
+ constructor(ctx) {
23
+ super(ctx, CAPABILITIES);
24
+ }
25
+ /**
26
+ * 注册一个能力。**返回注销函数**,调用方包进 `ctx.effect`。
27
+ *
28
+ * 🔴 重名**抛错**不是覆盖 —— 静默覆盖会让"我调的是哪一个 art.resize"无从判断
29
+ * (与 `core/tools/registry` 原本的判据一致)。
30
+ */
31
+ register(cap) {
32
+ if (this.byId.has(cap.id))
33
+ throw new Error(`能力 id 重复:${cap.id}`);
34
+ this.byId.set(cap.id, cap);
35
+ return () => {
36
+ if (this.byId.get(cap.id) === cap)
37
+ this.byId.delete(cap.id);
38
+ };
39
+ }
40
+ get(id) {
41
+ return this.byId.get(id);
42
+ }
43
+ list() {
44
+ return [...this.byId.values()].sort((a, b) => a.id.localeCompare(b.id));
45
+ }
46
+ }
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IAChC,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEtD,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,GAAe;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @module seams/capabilities-art
3
+ * @description 把十个内建 art 能力注册进 `sps.capabilities`。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * ⚠️ 能力本身(取参/围栏/落盘)不动,仍在 `core/tools/artCapabilities` ——
8
+ * 这一步只搬**注册方式**。
9
+ */
10
+ import type { Context } from '@deepseek-ai/cordis';
11
+ export declare const name = "sps-capabilities-art";
12
+ export declare const inject: string[];
13
+ export declare function apply(ctx: Context): void;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/capabilities-art/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,eAAO,MAAM,IAAI,yBAAyB,CAAC;AAC3C,eAAO,MAAM,MAAM,UAAiB,CAAC;AAErC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAExC"}
@@ -0,0 +1,9 @@
1
+ import { artCapabilities } from '../../core/tools/artCapabilities.js';
2
+ import { CAPABILITIES } from '../capabilities/index.js';
3
+ export const name = 'sps-capabilities-art';
4
+ export const inject = [CAPABILITIES];
5
+ export function apply(ctx) {
6
+ for (const cap of artCapabilities())
7
+ ctx.effect(() => ctx[CAPABILITIES].register(cap));
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/capabilities-art/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,MAAM,IAAI,GAAG,sBAAsB,CAAC;AAC3C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC;AAErC,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE;QAAE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @module seams/im
3
+ * @description **IM 平台适配器注册表 seam** —— telegram / 钉钉 / matrix / slack …
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**乙 · 注册表型**。与 `sps.media` 同一条判据:
8
+ * 🔴 **seam 在 adapter,不在实例。**
9
+ * "配了哪几个机器人、各自什么 token"是**数据**,落 `~/.coral/im/config.json`
10
+ * (含密,0600,已有测试锁着);而"支持哪些平台"是一张写死在
11
+ * `IMGatewayManager.REGISTRY` 里的表 —— 加一个平台必须改内核。痛在这儿。
12
+ */
13
+ import { type Context, Service } from '@deepseek-ai/cordis';
14
+ import type { IMAdapterFactory } from '../../im/IMAdapter.js';
15
+ export declare const IM = "sps.im";
16
+ export default class IMAdapterRegistry extends Service {
17
+ private readonly byKind;
18
+ constructor(ctx: Context);
19
+ register(kind: string, factory: IMAdapterFactory): () => void;
20
+ get(kind: string): IMAdapterFactory | undefined;
21
+ list(): string[];
22
+ }
23
+ declare module '@deepseek-ai/cordis' {
24
+ interface Context {
25
+ 'sps.im': IMAdapterRegistry;
26
+ }
27
+ }
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/im/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,eAAO,MAAM,EAAE,WAAW,CAAC;AAE3B,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,OAAO;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAElD,GAAG,EAAE,OAAO;IAIxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAQ7D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/C,IAAI,IAAI,MAAM,EAAE;CAGjB;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,QAAQ,EAAE,iBAAiB,CAAC;KAC7B;CACF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @module seams/im
3
+ * @description **IM 平台适配器注册表 seam** —— telegram / 钉钉 / matrix / slack …
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**乙 · 注册表型**。与 `sps.media` 同一条判据:
8
+ * 🔴 **seam 在 adapter,不在实例。**
9
+ * "配了哪几个机器人、各自什么 token"是**数据**,落 `~/.coral/im/config.json`
10
+ * (含密,0600,已有测试锁着);而"支持哪些平台"是一张写死在
11
+ * `IMGatewayManager.REGISTRY` 里的表 —— 加一个平台必须改内核。痛在这儿。
12
+ */
13
+ import { Service } from '@deepseek-ai/cordis';
14
+ export const IM = 'sps.im';
15
+ export default class IMAdapterRegistry extends Service {
16
+ byKind = new Map();
17
+ constructor(ctx) {
18
+ super(ctx, IM);
19
+ }
20
+ register(kind, factory) {
21
+ if (this.byKind.has(kind))
22
+ throw new Error(`IM 平台 kind 重复:${kind}`);
23
+ this.byKind.set(kind, factory);
24
+ return () => {
25
+ if (this.byKind.get(kind) === factory)
26
+ this.byKind.delete(kind);
27
+ };
28
+ }
29
+ get(kind) {
30
+ return this.byKind.get(kind);
31
+ }
32
+ list() {
33
+ return [...this.byKind.keys()].sort();
34
+ }
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/im/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC;AAE3B,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,OAAO;IACnC,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE9D,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,OAAyB;QAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module seams/im-builtin
3
+ * @description 内建的六个 IM 平台注册进 `sps.im`。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * ⚠️ 适配器实现不动,仍在 `im/adapters/` —— 这一步只搬**注册方式**。
8
+ */
9
+ import type { Context } from '@deepseek-ai/cordis';
10
+ export declare const name = "sps-im-builtin";
11
+ export declare const inject: string[];
12
+ export declare function apply(ctx: Context): void;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/im-builtin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAUnD,eAAO,MAAM,IAAI,mBAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,UAAO,CAAC;AAa3B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAIxC"}
@@ -0,0 +1,25 @@
1
+ import { DingTalkAdapter } from '../../im/adapters/dingtalkAdapter.js';
2
+ import { DiscordAdapter } from '../../im/adapters/discordAdapter.js';
3
+ import { FeishuAdapter } from '../../im/adapters/feishuAdapter.js';
4
+ import { MatrixAdapter } from '../../im/adapters/matrixAdapter.js';
5
+ import { SlackAdapter } from '../../im/adapters/slackAdapter.js';
6
+ import { TelegramAdapter } from '../../im/adapters/telegramAdapter.js';
7
+ import { IM } from '../im/index.js';
8
+ export const name = 'sps-im-builtin';
9
+ export const inject = [IM];
10
+ // biome-ignore-start lint/suspicious/noExplicitAny: 各适配器的 cfg 形状不同,原样沿用既有写法
11
+ const BUILT_IN = {
12
+ telegram: (cfg) => new TelegramAdapter(cfg),
13
+ dingtalk: (cfg) => new DingTalkAdapter(cfg),
14
+ matrix: (cfg) => new MatrixAdapter(cfg),
15
+ slack: (cfg) => new SlackAdapter(cfg),
16
+ discord: (cfg) => new DiscordAdapter(cfg),
17
+ feishu: (cfg) => new FeishuAdapter(cfg),
18
+ };
19
+ // biome-ignore-end lint/suspicious/noExplicitAny: 见上
20
+ export function apply(ctx) {
21
+ for (const [kind, factory] of Object.entries(BUILT_IN)) {
22
+ ctx.effect(() => ctx[IM].register(kind, factory));
23
+ }
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/im-builtin/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,MAAM,CAAC,MAAM,IAAI,GAAG,gBAAgB,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;AAE3B,4EAA4E;AAC5E,MAAM,QAAQ,GAAqC;IACjD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,GAAU,CAAC;IAClD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,GAAU,CAAC;IAClD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,GAAU,CAAC;IAC9C,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAU,CAAC;IAC5C,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,GAAU,CAAC;IAChD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,GAAU,CAAC;CAC/C,CAAC;AACF,qDAAqD;AAErD,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @module seams/media
3
+ * @description **媒体适配器注册表 seam** —— 生图/生视频/TTS 各家厂商的调用适配。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**乙 · 注册表型**。
8
+ *
9
+ * 🔴 **seam 的位置在 adapter,不在 provider。**
10
+ * provider(端点 + 密钥 + 能力)本来就是**数据**,存在 `~/.coral/media-providers.json`,
11
+ * 加一个 = 改配置。而 `ADAPTERS` 是一张**写死的表** ——
12
+ * 加一个新厂商(Replicate / Luma…)必须改内核代码。**痛在这儿,seam 就该在这儿。**
13
+ * 看错位置的话,会把一个已经可配置的东西再包一层,却没解决真正卡人的那一格。
14
+ */
15
+ import { type Context, Service } from '@deepseek-ai/cordis';
16
+ import type { MediaAdapter } from '../../providers/media/adapters.js';
17
+ export declare const MEDIA = "sps.media";
18
+ export default class MediaAdapterRegistry extends Service {
19
+ private readonly byId;
20
+ constructor(ctx: Context);
21
+ register(id: string, adapter: MediaAdapter): () => void;
22
+ get(id: string): MediaAdapter | undefined;
23
+ list(): string[];
24
+ }
25
+ declare module '@deepseek-ai/cordis' {
26
+ interface Context {
27
+ 'sps.media': MediaAdapterRegistry;
28
+ }
29
+ }
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/media/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,eAAO,MAAM,KAAK,cAAc,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;gBAE5C,GAAG,EAAE,OAAO;IAIxB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAQvD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzC,IAAI,IAAI,MAAM,EAAE;CAGjB;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,WAAW,EAAE,oBAAoB,CAAC;KACnC;CACF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @module seams/media
3
+ * @description **媒体适配器注册表 seam** —— 生图/生视频/TTS 各家厂商的调用适配。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**乙 · 注册表型**。
8
+ *
9
+ * 🔴 **seam 的位置在 adapter,不在 provider。**
10
+ * provider(端点 + 密钥 + 能力)本来就是**数据**,存在 `~/.coral/media-providers.json`,
11
+ * 加一个 = 改配置。而 `ADAPTERS` 是一张**写死的表** ——
12
+ * 加一个新厂商(Replicate / Luma…)必须改内核代码。**痛在这儿,seam 就该在这儿。**
13
+ * 看错位置的话,会把一个已经可配置的东西再包一层,却没解决真正卡人的那一格。
14
+ */
15
+ import { Service } from '@deepseek-ai/cordis';
16
+ export const MEDIA = 'sps.media';
17
+ export default class MediaAdapterRegistry extends Service {
18
+ byId = new Map();
19
+ constructor(ctx) {
20
+ super(ctx, MEDIA);
21
+ }
22
+ register(id, adapter) {
23
+ if (this.byId.has(id))
24
+ throw new Error(`媒体适配器 id 重复:${id}`);
25
+ this.byId.set(id, adapter);
26
+ return () => {
27
+ if (this.byId.get(id) === adapter)
28
+ this.byId.delete(id);
29
+ };
30
+ }
31
+ get(id) {
32
+ return this.byId.get(id);
33
+ }
34
+ list() {
35
+ return [...this.byId.keys()].sort();
36
+ }
37
+ }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/media/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IACtC,IAAI,GAAG,IAAI,GAAG,EAAwB,CAAC;IAExD,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,EAAU,EAAE,OAAqB;QACxC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module seams/media-builtin
3
+ * @description 把内建的十个媒体适配器注册进 `sps.media`。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * ⚠️ 适配器实现不动,仍在 `providers/media/adapters` —— 这一步只搬**注册方式**。
8
+ */
9
+ import type { Context } from '@deepseek-ai/cordis';
10
+ export declare const name = "sps-media-builtin";
11
+ export declare const inject: string[];
12
+ export declare function apply(ctx: Context): void;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/media-builtin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,eAAO,MAAM,IAAI,sBAAsB,CAAC;AACxC,eAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAIxC"}
@@ -0,0 +1,10 @@
1
+ import { ADAPTERS } from '../../providers/media/adapters.js';
2
+ import { MEDIA } from '../media/index.js';
3
+ export const name = 'sps-media-builtin';
4
+ export const inject = [MEDIA];
5
+ export function apply(ctx) {
6
+ for (const [id, adapter] of Object.entries(ADAPTERS)) {
7
+ ctx.effect(() => ctx[MEDIA].register(id, adapter));
8
+ }
9
+ }
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/media-builtin/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AACxC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;AAE9B,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @module seams/memory
3
+ * @description **记忆 seam 的服务定义** —— 读路契约在这里,实现在 `memory-*`。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**甲 · 工厂型**(见 docs/design/plugin-architecture.md §3c)。
8
+ * 判据是「换实现是**部署决定**」——"这台节点的记忆走本地 markdown 还是别的后端"。
9
+ *
10
+ * 🔴 **seam 只管"哪个后端",不管"这个后端开不开"。**
11
+ * memory2 自己有 `SPS_MEMORY_MODE=none` 这个开关,那是**后端的配置**。
12
+ * 在 seam 上再造一个 `memory-none`,就有了两处能关掉记忆的地方 —— 两处判据必漂,
13
+ * 而且排错时"到底是谁关的"要翻两个地方。
14
+ * (与 notifier 一致:seam 选 Matrix,MatrixNotifier 自己读 MATRIX_* 并自我降级。)
15
+ *
16
+ * ⚠️ **今天只有一个实现**,而且是有意的:`external` / `local+external` 的适配器
17
+ * memory2 里明确标了 YAGNI(无已接外部后端)。造第二个实现只为"证明能换",
18
+ * 等于造一条没有东西会跑的路径。可换性由用例上的替身证明,不由多发一个包证明。
19
+ */
20
+ 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
+ import type { MemoryEntry, SaveInput, ScopeRef } from '../../core/memory2/types.js';
24
+ /** 服务名。加 `sps.` 前缀 —— Cordis 是扁平命名空间。 */
25
+ export declare const MEMORY = "sps.memory";
26
+ export declare abstract class MemorySeam extends Service {
27
+ constructor(ctx: Context);
28
+ /**
29
+ * 拼 `<memory>` 注入块;**没有记忆时返回空串**(派活方据此决定要不要 prepend)。
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;
42
+ abstract listEntries(ref: ScopeRef): MemoryEntry[];
43
+ abstract readEntry(ref: ScopeRef, id: string): MemoryEntry | null;
44
+ abstract listAllScopes(): ScopeRef[];
45
+ abstract saveEntry(ref: ScopeRef, input: SaveInput): MemoryEntry;
46
+ abstract deleteEntry(ref: ScopeRef, id: string): boolean;
47
+ /** 记一次"被用到" —— 检索排序要用。 */
48
+ abstract bumpUses(ref: ScopeRef, id: string): void;
49
+ abstract promoteEntry(from: ScopeRef, id: string, to: ScopeRef, opts: {
50
+ move?: boolean;
51
+ }): MemoryEntry | null;
52
+ }
53
+ declare module '@deepseek-ai/cordis' {
54
+ interface Context {
55
+ 'sps.memory': MemorySeam;
56
+ }
57
+ }
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEpF,yCAAyC;AACzC,eAAO,MAAM,MAAM,eAAe,CAAC;AAEnC,8BAAsB,UAAW,SAAQ,OAAO;gBAClC,GAAG,EAAE,OAAO;IAMxB;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM;IAWjD,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAC5D,wCAAwC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI;IACnF,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,GAAG,IAAI;IAClF,iBAAiB;IACjB,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IACtE,gCAAgC;IAChC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI9D,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;IAQpC,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;IACxD,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAClD,QAAQ,CAAC,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;CAC9G;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,UAAU,CAAC;KAC1B;CACF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @module seams/memory
3
+ * @description **记忆 seam 的服务定义** —— 读路契约在这里,实现在 `memory-*`。
4
+ *
5
+ * @layer seam
6
+ *
7
+ * 类型:**甲 · 工厂型**(见 docs/design/plugin-architecture.md §3c)。
8
+ * 判据是「换实现是**部署决定**」——"这台节点的记忆走本地 markdown 还是别的后端"。
9
+ *
10
+ * 🔴 **seam 只管"哪个后端",不管"这个后端开不开"。**
11
+ * memory2 自己有 `SPS_MEMORY_MODE=none` 这个开关,那是**后端的配置**。
12
+ * 在 seam 上再造一个 `memory-none`,就有了两处能关掉记忆的地方 —— 两处判据必漂,
13
+ * 而且排错时"到底是谁关的"要翻两个地方。
14
+ * (与 notifier 一致:seam 选 Matrix,MatrixNotifier 自己读 MATRIX_* 并自我降级。)
15
+ *
16
+ * ⚠️ **今天只有一个实现**,而且是有意的:`external` / `local+external` 的适配器
17
+ * memory2 里明确标了 YAGNI(无已接外部后端)。造第二个实现只为"证明能换",
18
+ * 等于造一条没有东西会跑的路径。可换性由用例上的替身证明,不由多发一个包证明。
19
+ */
20
+ import { Service } from '@deepseek-ai/cordis';
21
+ /** 服务名。加 `sps.` 前缀 —— Cordis 是扁平命名空间。 */
22
+ export const MEMORY = 'sps.memory';
23
+ export class MemorySeam extends Service {
24
+ constructor(ctx) {
25
+ super(ctx, MEMORY);
26
+ }
27
+ }
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAK5D,yCAAyC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC;AAEnC,MAAM,OAAgB,UAAW,SAAQ,OAAO;IAC9C,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrB,CAAC;CA8CF"}