@coralai/sps-cli 0.74.0 → 0.75.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 (324) hide show
  1. package/dist/chat-protocol/index.d.ts +8 -8
  2. package/dist/chat-protocol/index.d.ts.map +1 -1
  3. package/dist/chat-protocol/index.js +3 -3
  4. package/dist/chat-protocol/index.js.map +1 -1
  5. package/dist/commands/agentRenderer.d.ts.map +1 -1
  6. package/dist/commands/agentRenderer.js.map +1 -1
  7. package/dist/commands/cardDashboard.js +1 -1
  8. package/dist/commands/cardDashboard.js.map +1 -1
  9. package/dist/commands/doctor.js +3 -3
  10. package/dist/commands/doctor.js.map +1 -1
  11. package/dist/commands/graphCommand.js +1 -1
  12. package/dist/commands/graphCommand.js.map +1 -1
  13. package/dist/commands/modelCommand.d.ts.map +1 -1
  14. package/dist/commands/modelCommand.js +3 -3
  15. package/dist/commands/modelCommand.js.map +1 -1
  16. package/dist/commands/pipelineRunner.js.map +1 -1
  17. package/dist/commands/pmCommand.js.map +1 -1
  18. package/dist/commands/projectInit.d.ts.map +1 -1
  19. package/dist/commands/projectInit.js +8 -9
  20. package/dist/commands/projectInit.js.map +1 -1
  21. package/dist/commands/prune.js +1 -1
  22. package/dist/commands/prune.js.map +1 -1
  23. package/dist/commands/reset.js +2 -2
  24. package/dist/commands/reset.js.map +1 -1
  25. package/dist/commands/setup.d.ts.map +1 -1
  26. package/dist/commands/setup.js +1 -1
  27. package/dist/commands/setup.js.map +1 -1
  28. package/dist/commands/skillCommand.js +1 -1
  29. package/dist/commands/skillCommand.js.map +1 -1
  30. package/dist/commands/status.js +1 -1
  31. package/dist/commands/status.js.map +1 -1
  32. package/dist/commands/stop.js +1 -1
  33. package/dist/commands/stop.js.map +1 -1
  34. package/dist/commands/workerDashboard.js +1 -1
  35. package/dist/commands/workerDashboard.js.map +1 -1
  36. package/dist/console/lib/artRunRequest.d.ts +13 -1
  37. package/dist/console/lib/artRunRequest.d.ts.map +1 -1
  38. package/dist/console/lib/artRunRequest.js.map +1 -1
  39. package/dist/console/lib/sessionConfig.d.ts.map +1 -1
  40. package/dist/console/lib/sessionConfig.js.map +1 -1
  41. package/dist/console/routes/artPipeline.d.ts.map +1 -1
  42. package/dist/console/routes/artPipeline.js +2 -2
  43. package/dist/console/routes/artPipeline.js.map +1 -1
  44. package/dist/console/routes/chat.d.ts.map +1 -1
  45. package/dist/console/routes/chat.js +15 -16
  46. package/dist/console/routes/chat.js.map +1 -1
  47. package/dist/console/routes/flow.d.ts.map +1 -1
  48. package/dist/console/routes/flow.js +1 -1
  49. package/dist/console/routes/flow.js.map +1 -1
  50. package/dist/console/routes/fs.d.ts.map +1 -1
  51. package/dist/console/routes/fs.js +0 -2
  52. package/dist/console/routes/fs.js.map +1 -1
  53. package/dist/console/routes/graph.d.ts.map +1 -1
  54. package/dist/console/routes/graph.js.map +1 -1
  55. package/dist/console/routes/logs.d.ts.map +1 -1
  56. package/dist/console/routes/logs.js +1 -1
  57. package/dist/console/routes/logs.js.map +1 -1
  58. package/dist/console/routes/mediaProviders.js.map +1 -1
  59. package/dist/console/routes/plugins.js +4 -4
  60. package/dist/console/routes/plugins.js.map +1 -1
  61. package/dist/console/routes/projectConfig.d.ts.map +1 -1
  62. package/dist/console/routes/projectConfig.js +3 -3
  63. package/dist/console/routes/projectConfig.js.map +1 -1
  64. package/dist/console/routes/projects.d.ts.map +1 -1
  65. package/dist/console/routes/projects.js.map +1 -1
  66. package/dist/console/routes/subagent.js +1 -1
  67. package/dist/console/routes/subagent.js.map +1 -1
  68. package/dist/console/routes/templates.js +1 -1
  69. package/dist/console/routes/templates.js.map +1 -1
  70. package/dist/console-assets/assets/ShowcasePage-DZ21PXog.js +121 -0
  71. package/dist/console-assets/assets/index-BN0kx67J.css +1 -0
  72. package/dist/console-assets/assets/index-DNsf7XS3.js +8657 -0
  73. package/dist/console-assets/index.html +2 -2
  74. package/dist/core/activityStream.js +1 -1
  75. package/dist/core/activityStream.js.map +1 -1
  76. package/dist/core/agents/DaemonBackend.d.ts.map +1 -1
  77. package/dist/core/agents/DaemonBackend.js.map +1 -1
  78. package/dist/core/agents/OpenAiAgentBackend.d.ts.map +1 -1
  79. package/dist/core/agents/OpenAiAgentBackend.js +2 -2
  80. package/dist/core/agents/OpenAiAgentBackend.js.map +1 -1
  81. package/dist/core/agents/configureProjectAgent.js +1 -1
  82. package/dist/core/agents/configureProjectAgent.js.map +1 -1
  83. package/dist/core/agents/modelSettingsFile.js +1 -1
  84. package/dist/core/agents/modelSettingsFile.js.map +1 -1
  85. package/dist/core/art/artRunLauncher.js +1 -1
  86. package/dist/core/art/artRunLauncher.js.map +1 -1
  87. package/dist/core/codegraph/CodeGraphService.js +1 -1
  88. package/dist/core/codegraph/CodeGraphService.js.map +1 -1
  89. package/dist/core/markerFile.d.ts +19 -0
  90. package/dist/core/markerFile.d.ts.map +1 -1
  91. package/dist/core/markerFile.js +1 -1
  92. package/dist/core/markerFile.js.map +1 -1
  93. package/dist/core/memory2/capture.js +1 -1
  94. package/dist/core/memory2/capture.js.map +1 -1
  95. package/dist/core/memory2/config.js +1 -1
  96. package/dist/core/memory2/config.js.map +1 -1
  97. package/dist/core/memory2/digest.d.ts.map +1 -1
  98. package/dist/core/memory2/digest.js +1 -2
  99. package/dist/core/memory2/digest.js.map +1 -1
  100. package/dist/core/memory2/external/importTranscript.js +1 -1
  101. package/dist/core/memory2/external/importTranscript.js.map +1 -1
  102. package/dist/core/memory2/ftsIndex.d.ts.map +1 -1
  103. package/dist/core/memory2/ftsIndex.js +1 -1
  104. package/dist/core/memory2/ftsIndex.js.map +1 -1
  105. package/dist/core/memory2/migrate.js +1 -1
  106. package/dist/core/memory2/migrate.js.map +1 -1
  107. package/dist/core/memory2/retrieve.d.ts +9 -0
  108. package/dist/core/memory2/retrieve.d.ts.map +1 -1
  109. package/dist/core/memory2/retrieve.js +1 -1
  110. package/dist/core/memory2/retrieve.js.map +1 -1
  111. package/dist/core/memory2/store.js +2 -2
  112. package/dist/core/memory2/store.js.map +1 -1
  113. package/dist/core/modelConfigBundle.d.ts.map +1 -1
  114. package/dist/core/modelConfigBundle.js.map +1 -1
  115. package/dist/core/paths.js +1 -1
  116. package/dist/core/paths.js.map +1 -1
  117. package/dist/core/processInspect.d.ts +17 -0
  118. package/dist/core/processInspect.d.ts.map +1 -1
  119. package/dist/core/processInspect.js +1 -1
  120. package/dist/core/processInspect.js.map +1 -1
  121. package/dist/core/projectPipelineAdapter.js +1 -1
  122. package/dist/core/projectPipelineAdapter.js.map +1 -1
  123. package/dist/core/queue.d.ts +15 -0
  124. package/dist/core/queue.d.ts.map +1 -1
  125. package/dist/core/queue.js +1 -1
  126. package/dist/core/queue.js.map +1 -1
  127. package/dist/core/runtimeSnapshot.d.ts +1 -1
  128. package/dist/core/runtimeSnapshot.d.ts.map +1 -1
  129. package/dist/core/runtimeSnapshot.js.map +1 -1
  130. package/dist/core/runtimeStore.d.ts +1 -1
  131. package/dist/core/runtimeStore.d.ts.map +1 -1
  132. package/dist/core/sessionContext.d.ts +1 -1
  133. package/dist/core/sessionContext.d.ts.map +1 -1
  134. package/dist/core/sessionContext.js.map +1 -1
  135. package/dist/core/skills/index.d.ts +3 -3
  136. package/dist/core/skills/index.d.ts.map +1 -1
  137. package/dist/core/skills/index.js +3 -3
  138. package/dist/core/skills/index.js.map +1 -1
  139. package/dist/core/skills/lint.d.ts +1 -1
  140. package/dist/core/skills/lint.d.ts.map +1 -1
  141. package/dist/core/skills/lint.js.map +1 -1
  142. package/dist/core/skills/match/embeddingRecall.d.ts.map +1 -1
  143. package/dist/core/skills/match/embeddingRecall.js.map +1 -1
  144. package/dist/core/skills/match/skillEnrich.js +1 -1
  145. package/dist/core/skills/match/skillEnrich.js.map +1 -1
  146. package/dist/core/skills/match/skillMatcher.d.ts.map +1 -1
  147. package/dist/core/skills/match/skillMatcher.js +10 -0
  148. package/dist/core/skills/match/skillMatcher.js.map +1 -1
  149. package/dist/core/skills/registration.js +1 -1
  150. package/dist/core/skills/registration.js.map +1 -1
  151. package/dist/core/state.d.ts +1 -1
  152. package/dist/core/state.d.ts.map +1 -1
  153. package/dist/core/templates/templatePackage.d.ts.map +1 -1
  154. package/dist/core/templates/templatePackage.js.map +1 -1
  155. package/dist/core/tts/DoubaoTts.js +1 -1
  156. package/dist/core/tts/DoubaoTts.js.map +1 -1
  157. package/dist/engines/MonitorEngine.d.ts.map +1 -1
  158. package/dist/engines/MonitorEngine.js.map +1 -1
  159. package/dist/im/adapters/feishuAdapter.d.ts +9 -0
  160. package/dist/im/adapters/feishuAdapter.d.ts.map +1 -1
  161. package/dist/im/adapters/feishuAdapter.js +1 -1
  162. package/dist/im/adapters/feishuAdapter.js.map +1 -1
  163. package/dist/im/chatBridge.d.ts +1 -1
  164. package/dist/im/chatBridge.d.ts.map +1 -1
  165. package/dist/im/chatBridge.js.map +1 -1
  166. package/dist/im/router.d.ts.map +1 -1
  167. package/dist/im/router.js +1 -1
  168. package/dist/im/router.js.map +1 -1
  169. package/dist/infra/filesystem.d.ts +12 -0
  170. package/dist/infra/filesystem.d.ts.map +1 -1
  171. package/dist/infra/filesystem.js +1 -1
  172. package/dist/infra/filesystem.js.map +1 -1
  173. package/dist/manager/runtime-coordinator.d.ts.map +1 -1
  174. package/dist/manager/runtime-coordinator.js.map +1 -1
  175. package/dist/manager/worker-manager.d.ts +1 -1
  176. package/dist/manager/worker-manager.d.ts.map +1 -1
  177. package/dist/openai-agent/agentFactory.d.ts.map +1 -1
  178. package/dist/openai-agent/agentFactory.js.map +1 -1
  179. package/dist/openai-agent/hooks.d.ts +10 -0
  180. package/dist/openai-agent/hooks.d.ts.map +1 -1
  181. package/dist/openai-agent/hooks.js +1 -1
  182. package/dist/openai-agent/hooks.js.map +1 -1
  183. package/dist/openai-agent/instructions.d.ts.map +1 -1
  184. package/dist/openai-agent/instructions.js.map +1 -1
  185. package/dist/openai-agent/interactions/broker.d.ts +1 -1
  186. package/dist/openai-agent/interactions/broker.d.ts.map +1 -1
  187. package/dist/openai-agent/interactions/broker.js.map +1 -1
  188. package/dist/openai-agent/mcp/managedMcp.d.ts.map +1 -1
  189. package/dist/openai-agent/mcp/managedMcp.js +1 -1
  190. package/dist/openai-agent/mcp/managedMcp.js.map +1 -1
  191. package/dist/openai-agent/memory/fileStore.js +2 -2
  192. package/dist/openai-agent/memory/fileStore.js.map +1 -1
  193. package/dist/openai-agent/protocolWriter.d.ts.map +1 -1
  194. package/dist/openai-agent/protocolWriter.js +1 -1
  195. package/dist/openai-agent/protocolWriter.js.map +1 -1
  196. package/dist/openai-agent/providerFactory.d.ts +1 -1
  197. package/dist/openai-agent/providerFactory.d.ts.map +1 -1
  198. package/dist/openai-agent/providerFactory.js.map +1 -1
  199. package/dist/openai-agent/request.d.ts.map +1 -1
  200. package/dist/openai-agent/request.js.map +1 -1
  201. package/dist/openai-agent/sandbox/productionDocker.d.ts.map +1 -1
  202. package/dist/openai-agent/sandbox/productionDocker.js +1 -1
  203. package/dist/openai-agent/sandbox/productionDocker.js.map +1 -1
  204. package/dist/openai-agent/storage/atomic.js +1 -1
  205. package/dist/openai-agent/storage/atomic.js.map +1 -1
  206. package/dist/openai-agent/storage/checkpoint.d.ts +1 -1
  207. package/dist/openai-agent/storage/checkpoint.d.ts.map +1 -1
  208. package/dist/openai-agent/storage/checkpoint.js.map +1 -1
  209. package/dist/openai-agent/storage/compactingSession.d.ts +16 -0
  210. package/dist/openai-agent/storage/compactingSession.d.ts.map +1 -1
  211. package/dist/openai-agent/storage/compactingSession.js.map +1 -1
  212. package/dist/openai-agent/storage/index.d.ts +1 -1
  213. package/dist/openai-agent/storage/index.d.ts.map +1 -1
  214. package/dist/openai-agent/storage/index.js +1 -1
  215. package/dist/openai-agent/storage/index.js.map +1 -1
  216. package/dist/openai-agent/storage/lock.js +4 -4
  217. package/dist/openai-agent/storage/lock.js.map +1 -1
  218. package/dist/openai-agent/storage/output.d.ts.map +1 -1
  219. package/dist/openai-agent/storage/output.js.map +1 -1
  220. package/dist/openai-agent/storage/session.d.ts.map +1 -1
  221. package/dist/openai-agent/storage/session.js +1 -1
  222. package/dist/openai-agent/storage/session.js.map +1 -1
  223. package/dist/openai-agent/storage/workerStorage.d.ts +3 -3
  224. package/dist/openai-agent/storage/workerStorage.d.ts.map +1 -1
  225. package/dist/openai-agent/storage/workerStorage.js +3 -3
  226. package/dist/openai-agent/storage/workerStorage.js.map +1 -1
  227. package/dist/openai-agent/storage/workspace.js +1 -1
  228. package/dist/openai-agent/storage/workspace.js.map +1 -1
  229. package/dist/openai-agent/tools/ledgerTools.d.ts +1 -1
  230. package/dist/openai-agent/tools/ledgerTools.d.ts.map +1 -1
  231. package/dist/plugin/manager.d.ts +16 -1
  232. package/dist/plugin/manager.d.ts.map +1 -1
  233. package/dist/plugin/manager.js +38 -3
  234. package/dist/plugin/manager.js.map +1 -1
  235. package/dist/providers/LLMClient.d.ts.map +1 -1
  236. package/dist/providers/LLMClient.js.map +1 -1
  237. package/dist/providers/MatrixNotifier.d.ts.map +1 -1
  238. package/dist/providers/MatrixNotifier.js.map +1 -1
  239. package/dist/providers/RuntimeSessionRuntime.d.ts +1 -1
  240. package/dist/providers/RuntimeSessionRuntime.d.ts.map +1 -1
  241. package/dist/providers/RuntimeSessionRuntime.js +4 -4
  242. package/dist/providers/RuntimeSessionRuntime.js.map +1 -1
  243. package/dist/providers/art/artDriver.d.ts.map +1 -1
  244. package/dist/providers/art/artDriver.js +1 -1
  245. package/dist/providers/art/artDriver.js.map +1 -1
  246. package/dist/providers/art/atlas.js +1 -1
  247. package/dist/providers/art/atlas.js.map +1 -1
  248. package/dist/providers/llm/codexAuth.d.ts +8 -0
  249. package/dist/providers/llm/codexAuth.d.ts.map +1 -1
  250. package/dist/providers/llm/codexAuth.js +1 -1
  251. package/dist/providers/llm/codexAuth.js.map +1 -1
  252. package/dist/providers/llm/providers.js +1 -1
  253. package/dist/providers/llm/providers.js.map +1 -1
  254. package/dist/providers/llm/workerTools.d.ts.map +1 -1
  255. package/dist/providers/llm/workerTools.js.map +1 -1
  256. package/dist/providers/media/adapters.d.ts.map +1 -1
  257. package/dist/providers/media/adapters.js +1 -1
  258. package/dist/providers/media/adapters.js.map +1 -1
  259. package/dist/providers/media/mediaProviders.js +1 -1
  260. package/dist/providers/media/mediaProviders.js.map +1 -1
  261. package/dist/providers/subagent/runSubAgent.js +3 -3
  262. package/dist/providers/subagent/runSubAgent.js.map +1 -1
  263. package/dist/runtime/agentd/client.d.ts +2 -2
  264. package/dist/runtime/agentd/client.d.ts.map +1 -1
  265. package/dist/runtime/agentd/main.d.ts +10 -1
  266. package/dist/runtime/agentd/main.d.ts.map +1 -1
  267. package/dist/runtime/agentd/main.js +3 -3
  268. package/dist/runtime/agentd/main.js.map +1 -1
  269. package/dist/runtime/agentd/protocol.d.ts +2 -2
  270. package/dist/runtime/agentd/protocol.d.ts.map +1 -1
  271. package/dist/runtime/agentd/server.d.ts +5 -0
  272. package/dist/runtime/agentd/server.d.ts.map +1 -1
  273. package/dist/runtime/agentd/server.js +1 -1
  274. package/dist/runtime/agentd/server.js.map +1 -1
  275. package/dist/runtime/backends/claude/inprocTools.d.ts +1 -1
  276. package/dist/runtime/backends/claude/inprocTools.d.ts.map +1 -1
  277. package/dist/runtime/backends/claude/inprocTools.js +10 -0
  278. package/dist/runtime/backends/claude/inprocTools.js.map +1 -1
  279. package/dist/runtime/backends/process/ExternalProcessBackend.d.ts +8 -2
  280. package/dist/runtime/backends/process/ExternalProcessBackend.d.ts.map +1 -1
  281. package/dist/runtime/backends/process/ExternalProcessBackend.js +2 -2
  282. package/dist/runtime/backends/process/ExternalProcessBackend.js.map +1 -1
  283. package/dist/runtime/contract/AgentBackend.d.ts +1 -1
  284. package/dist/runtime/contract/AgentBackend.d.ts.map +1 -1
  285. package/dist/runtime/contract/AgentBackend.js +5 -0
  286. package/dist/runtime/contract/AgentBackend.js.map +1 -1
  287. package/dist/runtime/contract/events.d.ts +1 -1
  288. package/dist/runtime/contract/events.d.ts.map +1 -1
  289. package/dist/runtime/contract/events.js +9 -0
  290. package/dist/runtime/contract/events.js.map +1 -1
  291. package/dist/runtime/contract/index.d.ts +5 -5
  292. package/dist/runtime/contract/index.d.ts.map +1 -1
  293. package/dist/runtime/contract/index.js +5 -0
  294. package/dist/runtime/contract/index.js.map +1 -1
  295. package/dist/runtime/contract/service.d.ts +2 -2
  296. package/dist/runtime/contract/service.d.ts.map +1 -1
  297. package/dist/runtime/index.d.ts +10 -10
  298. package/dist/runtime/index.d.ts.map +1 -1
  299. package/dist/runtime/index.js +11 -11
  300. package/dist/runtime/index.js.map +1 -1
  301. package/dist/runtime/runtime.d.ts +1 -1
  302. package/dist/runtime/runtime.d.ts.map +1 -1
  303. package/dist/runtime/runtime.js +2 -2
  304. package/dist/runtime/runtime.js.map +1 -1
  305. package/dist/runtime/service/AgentRuntime.d.ts +2 -2
  306. package/dist/runtime/service/AgentRuntime.d.ts.map +1 -1
  307. package/dist/runtime/service/AgentRuntime.js +9 -0
  308. package/dist/runtime/service/AgentRuntime.js.map +1 -1
  309. package/dist/runtime/service/backendFactory.d.ts +6 -0
  310. package/dist/runtime/service/backendFactory.d.ts.map +1 -1
  311. package/dist/runtime/service/backendFactory.js +6 -0
  312. package/dist/runtime/service/backendFactory.js.map +1 -1
  313. package/dist/runtime/versioning/VersionManager.d.ts.map +1 -1
  314. package/dist/runtime/versioning/VersionManager.js.map +1 -1
  315. package/dist/seams/im-builtin/client.js +402 -0
  316. package/dist/seams/memory-local/client.js +135 -0
  317. package/dist/server.d.ts +14 -14
  318. package/dist/server.d.ts.map +1 -1
  319. package/dist/server.js +19 -19
  320. package/dist/server.js.map +1 -1
  321. package/package.json +5 -4
  322. package/dist/console-assets/assets/ShowcasePage-Ds05miA3.js +0 -156
  323. package/dist/console-assets/assets/index-2lwFzkSf.js +0 -867
  324. package/dist/console-assets/assets/index-YoLvbHIG.css +0 -1
@@ -0,0 +1,402 @@
1
+ // 由 scripts/build-seam-clients.mjs 生成,勿手改。源码在 src/seams/im-builtin/client/
2
+ window.__SpsModuleLoader__.load({
3
+ id: "im",
4
+ contractVersion: 1,
5
+ factory: (require) => {
6
+ const module = { exports: {} };
7
+ const exports = module.exports;
8
+ "use strict";
9
+ var __defProp = Object.defineProperty;
10
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
+ var __getOwnPropNames = Object.getOwnPropertyNames;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+
27
+ // src/seams/im-builtin/client/index.tsx
28
+ var index_exports = {};
29
+ __export(index_exports, {
30
+ ChannelSection: () => ChannelSection
31
+ });
32
+ module.exports = __toCommonJS(index_exports);
33
+ var import_console_slots = require("@coralai/console-slots");
34
+ var import_console_ui = require("@coralai/console-ui");
35
+ var import_react_query = require("@tanstack/react-query");
36
+ var import_lucide_react = require("lucide-react");
37
+ var import_react = require("react");
38
+ var import_jsx_runtime = require("react/jsx-runtime");
39
+ var getChannels = () => (0, import_console_ui.apiGet)("/api/channels");
40
+ var saveChannels = (cfg) => (0, import_console_ui.apiPut)("/api/channels", cfg);
41
+ var CHANNEL_KINDS = ["telegram", "dingtalk", "matrix", "slack", "discord", "feishu"];
42
+ var KIND_LABEL = {
43
+ telegram: "Telegram",
44
+ dingtalk: "\u9489\u9489 (Stream)",
45
+ matrix: "Matrix",
46
+ slack: "Slack",
47
+ discord: "Discord",
48
+ feishu: "\u98DE\u4E66 / Lark"
49
+ };
50
+ var KIND_FIELDS = {
51
+ telegram: [
52
+ { key: "token", label: "Bot Token(@BotFather)", type: "password", placeholder: "123456:ABC-..." },
53
+ { key: "allowedChatIds", label: "\u5141\u8BB8\u7684 Chat ID(\u767D\u540D\u5355,\u7A7A=\u5168\u653E)", type: "list", placeholder: "\u9017\u53F7/\u6362\u884C\u5206\u9694" }
54
+ ],
55
+ dingtalk: [
56
+ { key: "clientId", label: "Client ID(AppKey)", type: "text" },
57
+ { key: "clientSecret", label: "Client Secret(AppSecret)", type: "password" },
58
+ { key: "allowedConversations", label: "\u5141\u8BB8\u7684\u4F1A\u8BDD ID(\u767D\u540D\u5355,\u7A7A=\u5168\u653E)", type: "list" }
59
+ ],
60
+ matrix: [
61
+ { key: "homeserver", label: "Homeserver URL", type: "text", placeholder: "https://matrix.org" },
62
+ { key: "accessToken", label: "Access Token", type: "password" },
63
+ { key: "allowedRooms", label: "\u5141\u8BB8\u7684 Room ID(\u767D\u540D\u5355,\u7A7A=\u5168\u653E)", type: "list" }
64
+ ],
65
+ slack: [
66
+ { key: "appToken", label: "App Token(xapp-,Socket Mode)", type: "password", placeholder: "xapp-..." },
67
+ { key: "botToken", label: "Bot Token(xoxb-)", type: "password", placeholder: "xoxb-..." },
68
+ { key: "allowedChannels", label: "\u5141\u8BB8\u7684 Channel(\u767D\u540D\u5355,\u7A7A=\u5168\u653E)", type: "list" }
69
+ ],
70
+ discord: [
71
+ { key: "token", label: "Bot Token", type: "password" },
72
+ { key: "allowedChannels", label: "\u5141\u8BB8\u7684 Channel ID(\u767D\u540D\u5355,\u7A7A=\u5168\u653E)", type: "list" }
73
+ ],
74
+ feishu: [
75
+ { key: "appId", label: "App ID", type: "text" },
76
+ { key: "appSecret", label: "App Secret", type: "password" },
77
+ { key: "verificationToken", label: "Verification Token", type: "text" },
78
+ { key: "encryptKey", label: "Encrypt Key(\u8BBE\u4E86\u5219\u4E8B\u4EF6 AES \u89E3\u5BC6)", type: "password" },
79
+ { key: "port", label: "\u672C\u673A\u76D1\u542C\u7AEF\u53E3(\u9ED8\u8BA4 9800)", type: "number", placeholder: "9800" },
80
+ { key: "path", label: "\u76D1\u542C\u8DEF\u5F84(\u9ED8\u8BA4 /feishu)", type: "text", placeholder: "/feishu" },
81
+ { key: "allowedChats", label: "\u5141\u8BB8\u7684 chat_id(\u767D\u540D\u5355,\u7A7A=\u5168\u653E)", type: "list" }
82
+ ]
83
+ };
84
+ function ChannelSection() {
85
+ const qc = (0, import_react_query.useQueryClient)();
86
+ const { alert } = (0, import_console_ui.useDialog)();
87
+ const q = (0, import_react_query.useQuery)({ queryKey: ["channels"], queryFn: getChannels });
88
+ const [draft, setDraft] = (0, import_react.useState)(null);
89
+ const [sel, setSel] = (0, import_react.useState)({ type: "console" });
90
+ (0, import_react.useEffect)(() => {
91
+ if (q.data && !draft) setDraft({ console: q.data.console ?? {}, adapters: q.data.adapters ?? [] });
92
+ }, [q.data, draft]);
93
+ const save = (0, import_react_query.useMutation)({
94
+ mutationFn: () => saveChannels(draft),
95
+ onSuccess: (saved) => {
96
+ setDraft({ console: saved.console ?? {}, adapters: saved.adapters ?? [] });
97
+ void qc.invalidateQueries({ queryKey: ["channels"] });
98
+ },
99
+ onError: (e) => void alert({ title: "\u4FDD\u5B58\u5931\u8D25", body: e instanceof Error ? e.message : String(e) })
100
+ });
101
+ if (!draft) {
102
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-sm sps-muted flex items-center gap-2", children: [
103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { size: 14, strokeWidth: 3, className: "animate-spin" }),
104
+ " \u52A0\u8F7D\u9891\u9053\u914D\u7F6E\u2026"
105
+ ] }) });
106
+ }
107
+ const adapters = draft.adapters ?? [];
108
+ const dirty = JSON.stringify(draft) !== JSON.stringify({ console: q.data?.console ?? {}, adapters: q.data?.adapters ?? [] });
109
+ const addAdapter = (kind) => {
110
+ const next = [...adapters, { kind, enabled: true }];
111
+ setDraft({ ...draft, adapters: next });
112
+ setSel({ type: "adapter", index: next.length - 1 });
113
+ };
114
+ const removeAdapter = (index) => {
115
+ const next = adapters.filter((_, i) => i !== index);
116
+ setDraft({ ...draft, adapters: next });
117
+ setSel({ type: "console" });
118
+ };
119
+ const patchAdapter = (index, patch) => {
120
+ const next = adapters.map((a, i) => i === index ? { ...a, ...patch } : a);
121
+ setDraft({ ...draft, adapters: next });
122
+ };
123
+ const patchConsole = (patch) => setDraft({ ...draft, console: { ...draft.console, ...patch } });
124
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { children: [
125
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-start justify-between gap-3 mb-1", children: [
126
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
127
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "sps-heading text-xl font-bold", children: "\u9891\u9053(IM \u7F51\u5173)" }),
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-xs sps-muted mt-1", children: [
129
+ "\u63A5\u5165 Telegram / \u9489\u9489 / \u98DE\u4E66 / Slack / Discord / Matrix\u3002\u5DE6\u4FA7\u9009\u9891\u9053,\u53F3\u4FA7\u6539\u8BBE\u7F6E\u3002\u4FDD\u5B58\u540E ",
130
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { className: "sps-mono", children: "sps im" }),
131
+ " \u91CD\u542F\u751F\u6548\u3002"
132
+ ] })
133
+ ] }),
134
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
135
+ "button",
136
+ {
137
+ className: "nb-btn nb-btn-primary shrink-0",
138
+ style: { padding: "8px 16px" },
139
+ type: "button",
140
+ disabled: !dirty || save.isPending,
141
+ onClick: () => save.mutate(),
142
+ "aria-label": "\u4FDD\u5B58\u9891\u9053\u914D\u7F6E",
143
+ children: [
144
+ save.isPending ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { size: 14, strokeWidth: 3, className: "animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Save, { size: 14, strokeWidth: 3 }),
145
+ " \u4FDD\u5B58"
146
+ ]
147
+ }
148
+ )
149
+ ] }),
150
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
151
+ "div",
152
+ {
153
+ className: "grid gap-5 mt-4",
154
+ style: { gridTemplateColumns: "minmax(0, 220px) minmax(0, 1fr)" },
155
+ children: [
156
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-2", children: [
157
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "rounded-2xl border sps-border sps-surface p-2 flex flex-col gap-1", children: [
158
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
159
+ ChannelListItem,
160
+ {
161
+ label: "console \u6865\u63A5",
162
+ sub: draft.console?.url || "\u672A\u914D\u7F6E",
163
+ active: sel.type === "console",
164
+ onClick: () => setSel({ type: "console" })
165
+ }
166
+ ),
167
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-px opacity-15 my-0.5", style: { background: "var(--color-text)" } }),
168
+ adapters.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs sps-muted px-2 py-1", children: "(\u65E0\u9891\u9053)" }),
169
+ adapters.map((a, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
170
+ ChannelListItem,
171
+ {
172
+ label: KIND_LABEL[a.kind] ?? a.kind,
173
+ sub: a.enabled === false ? "\u5DF2\u505C\u7528" : "\u542F\u7528",
174
+ active: sel.type === "adapter" && sel.index === i,
175
+ onClick: () => setSel({ type: "adapter", index: i })
176
+ },
177
+ i
178
+ ))
179
+ ] }),
180
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AddChannelMenu, { onAdd: addAdapter })
181
+ ] }),
182
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "border-2 bg-surface-input sps-border-strong rounded-xl p-4 sps-surface-input", children: (() => {
183
+ if (sel.type !== "adapter") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConsoleBridgeForm, { console: draft.console ?? {}, onChange: patchConsole });
184
+ const current = adapters[sel.index];
185
+ if (!current) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConsoleBridgeForm, { console: draft.console ?? {}, onChange: patchConsole });
186
+ const idx = sel.index;
187
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AdapterForm, { adapter: current, onChange: (p) => patchAdapter(idx, p), onRemove: () => removeAdapter(idx) });
188
+ })() })
189
+ ]
190
+ }
191
+ )
192
+ ] });
193
+ }
194
+ function AddChannelMenu({ onAdd }) {
195
+ const [open, setOpen] = (0, import_react.useState)(false);
196
+ const ref = (0, import_react.useRef)(null);
197
+ const listRef = (0, import_react.useRef)(null);
198
+ (0, import_react.useEffect)(() => {
199
+ const onDoc = (e) => {
200
+ if (!ref.current?.contains(e.target)) setOpen(false);
201
+ };
202
+ document.addEventListener("mousedown", onDoc);
203
+ return () => document.removeEventListener("mousedown", onDoc);
204
+ }, []);
205
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "relative", ref, children: [
206
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
207
+ "button",
208
+ {
209
+ type: "button",
210
+ className: "nb-btn nb-btn-primary w-full justify-center",
211
+ onClick: () => setOpen((v) => !v),
212
+ "aria-expanded": open,
213
+ "aria-label": "\u6DFB\u52A0\u9891\u9053",
214
+ children: [
215
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Plus, { size: 13, strokeWidth: 3 }),
216
+ " \u6DFB\u52A0\u9891\u9053",
217
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronDown, { size: 13, strokeWidth: 2.5, className: ["transition-transform", open ? "rotate-180" : ""].join(" ") })
218
+ ]
219
+ }
220
+ ),
221
+ open && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-2 min-w-full nb-card p-1 overflow-hidden sps-surface-menu", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: listRef, className: "overflow-y-auto", style: { maxHeight: "50vh" }, children: CHANNEL_KINDS.map((k, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_console_ui.AnimatedItem, { index: i, root: listRef, delay: 0.02, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
222
+ "button",
223
+ {
224
+ type: "button",
225
+ className: "dimension-menu-item w-full text-left px-4 py-2 text-sm font-semibold flex items-center gap-2",
226
+ onClick: () => {
227
+ onAdd(k);
228
+ setOpen(false);
229
+ },
230
+ "aria-label": `\u6DFB\u52A0 ${KIND_LABEL[k]} \u9891\u9053`,
231
+ children: [
232
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Plus, { size: 12, strokeWidth: 3, className: "shrink-0" }),
233
+ " ",
234
+ KIND_LABEL[k]
235
+ ]
236
+ }
237
+ ) }, k)) }) })
238
+ ] });
239
+ }
240
+ function ChannelListItem({ label, sub, active, onClick }) {
241
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
242
+ "button",
243
+ {
244
+ type: "button",
245
+ onClick,
246
+ "aria-pressed": active,
247
+ className: [
248
+ "dimension-menu-item flex-col items-start gap-0.5 px-3 py-2 text-left",
249
+ active ? "dimension-menu-item-active" : ""
250
+ ].join(" "),
251
+ children: [
252
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "font-bold text-sm", children: label }),
253
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs sps-muted truncate w-full sps-mono", children: sub })
254
+ ]
255
+ }
256
+ );
257
+ }
258
+ function ConsoleBridgeForm({
259
+ console: cfg,
260
+ onChange
261
+ }) {
262
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-4", children: [
263
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
264
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "sps-heading font-bold text-lg", children: "console \u6865\u63A5" }),
265
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs sps-muted mt-1", children: "IM \u7EAF\u6587\u672C\u6D88\u606F\u6865\u63A5\u5230\u9879\u76EE agent \u5BF9\u8BDD\u3002\u8BBE\u4E86 URL \u624D\u542F\u7528\u6865\u63A5;token \u4E3A console \u9274\u6743\u4EE4\u724C\u3002" })
266
+ ] }),
267
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex flex-col gap-1 text-sm font-bold", children: [
268
+ "Console URL",
269
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
270
+ "input",
271
+ {
272
+ className: "nb-input sps-mono text-sm",
273
+ value: cfg.url ?? "",
274
+ onChange: (e) => onChange({ url: e.target.value }),
275
+ placeholder: "http://localhost:4321",
276
+ spellCheck: false
277
+ }
278
+ )
279
+ ] }),
280
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex flex-col gap-1 text-sm font-bold", children: [
281
+ "Console Token(SPS_CONSOLE_TOKEN)",
282
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
283
+ "input",
284
+ {
285
+ className: "nb-input sps-mono text-sm",
286
+ type: "password",
287
+ value: cfg.token ?? "",
288
+ onChange: (e) => onChange({ token: e.target.value }),
289
+ placeholder: "\u9274\u6743\u4EE4\u724C(\u53EF\u7A7A)",
290
+ spellCheck: false
291
+ }
292
+ )
293
+ ] }),
294
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-1 text-sm font-bold", children: [
295
+ "\u5BF9\u8BDD\u540E\u7AEF",
296
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
297
+ import_console_ui.AnimatedSelect,
298
+ {
299
+ value: cfg.agentKind ?? "claude",
300
+ onChange: (v) => onChange({ agentKind: v }),
301
+ ariaLabel: "\u5BF9\u8BDD\u540E\u7AEF",
302
+ options: [
303
+ { value: "claude", label: "claude" },
304
+ { value: "openai", label: "openai" }
305
+ ]
306
+ }
307
+ )
308
+ ] })
309
+ ] });
310
+ }
311
+ function AdapterForm({
312
+ adapter,
313
+ onChange,
314
+ onRemove
315
+ }) {
316
+ const { confirm } = (0, import_console_ui.useDialog)();
317
+ const fields = KIND_FIELDS[adapter.kind] ?? [];
318
+ const enabled = adapter.enabled !== false;
319
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-4", children: [
320
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
321
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
322
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "sps-heading font-bold text-lg", children: KIND_LABEL[adapter.kind] ?? adapter.kind }),
323
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "sps-muted text-sm sps-mono", children: [
324
+ " \xB7 ",
325
+ adapter.kind
326
+ ] })
327
+ ] }),
328
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
329
+ "button",
330
+ {
331
+ className: "nb-btn nb-btn-danger shrink-0",
332
+ style: { padding: "4px 10px", fontSize: 12 },
333
+ type: "button",
334
+ onClick: async () => {
335
+ if (await confirm({ title: "\u5220\u9664\u9891\u9053", body: `\u5220\u9664 ${KIND_LABEL[adapter.kind] ?? adapter.kind} \u9891\u9053?`, danger: true })) onRemove();
336
+ },
337
+ "aria-label": "\u5220\u9664\u9891\u9053",
338
+ children: [
339
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Trash2, { size: 12, strokeWidth: 3 }),
340
+ " \u5220\u9664"
341
+ ]
342
+ }
343
+ )
344
+ ] }),
345
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex items-center gap-2 text-sm font-bold", children: [
346
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", checked: enabled, onChange: (e) => onChange({ enabled: e.target.checked }) }),
347
+ "\u542F\u7528\u6B64\u9891\u9053"
348
+ ] }),
349
+ fields.map((f) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AdapterField, { spec: f, value: adapter[f.key], onChange: (v) => onChange({ [f.key]: v }) }, f.key))
350
+ ] });
351
+ }
352
+ function AdapterField({ spec, value, onChange }) {
353
+ if (spec.type === "list") {
354
+ const arr = Array.isArray(value) ? value.map(String) : [];
355
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex flex-col gap-1 text-sm font-bold", children: [
356
+ spec.label,
357
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
358
+ "textarea",
359
+ {
360
+ className: "nb-input sps-mono text-sm",
361
+ rows: 2,
362
+ value: arr.join(", "),
363
+ onChange: (e) => {
364
+ const list = e.target.value.split(/[,\n]/).map((s) => s.trim()).filter(Boolean);
365
+ onChange(list.length ? list : void 0);
366
+ },
367
+ placeholder: spec.placeholder,
368
+ spellCheck: false
369
+ }
370
+ )
371
+ ] });
372
+ }
373
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex flex-col gap-1 text-sm font-bold", children: [
374
+ spec.label,
375
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
376
+ "input",
377
+ {
378
+ className: "nb-input sps-mono text-sm",
379
+ type: spec.type === "password" ? "password" : "text",
380
+ value: value == null ? "" : String(value),
381
+ onChange: (e) => {
382
+ const raw = e.target.value;
383
+ if (spec.type === "number") {
384
+ onChange(raw.trim() === "" ? void 0 : Number(raw));
385
+ } else {
386
+ onChange(raw === "" ? void 0 : raw);
387
+ }
388
+ },
389
+ placeholder: spec.placeholder,
390
+ spellCheck: false
391
+ }
392
+ )
393
+ ] });
394
+ }
395
+ (0, import_console_slots.registerSlot)("plugin.config", {
396
+ // 🔴 按**实现**匹配,不是按行 id
397
+ match: ({ name }) => name === "@coralai/sps-cli/seams/im-builtin",
398
+ render: () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChannelSection, {})
399
+ });
400
+
401
+ },
402
+ });
@@ -0,0 +1,135 @@
1
+ // 由 scripts/build-seam-clients.mjs 生成,勿手改。源码在 src/seams/memory-local/client/
2
+ window.__SpsModuleLoader__.load({
3
+ id: "memory",
4
+ contractVersion: 1,
5
+ factory: (require) => {
6
+ const module = { exports: {} };
7
+ const exports = module.exports;
8
+ "use strict";
9
+
10
+ // src/seams/memory-local/client/index.tsx
11
+ var import_console_slots = require("@coralai/console-slots");
12
+ var import_console_ui = require("@coralai/console-ui");
13
+ var import_react_query = require("@tanstack/react-query");
14
+ var import_lucide_react = require("lucide-react");
15
+ var import_react = require("react");
16
+ var import_jsx_runtime = require("react/jsx-runtime");
17
+ var MSG = {
18
+ zh: {
19
+ title: "\u8BB0\u5FC6\u540E\u7AEF",
20
+ desc: "\u5168\u5C40\u8BBE\u7F6E:worker \u7684\u8BB0\u5FC6\u8BFB\u5199\u8D70\u54EA\u4E2A\u540E\u7AEF\u3002\u6539\u52A8\u5BF9\u65B0\u6D3E\u53D1\u7684\u5361\u751F\u6548\u3002",
21
+ provider: "\u540E\u7AEF",
22
+ url: "\u81EA\u5B9A\u4E49\u5730\u5740",
23
+ urlPlaceholder: "http://127.0.0.1:3113",
24
+ save: "\u4FDD\u5B58",
25
+ saved: "\u5DF2\u4FDD\u5B58",
26
+ error: "\u4FDD\u5B58\u8BB0\u5FC6\u8BBE\u7F6E\u5931\u8D25"
27
+ },
28
+ en: {
29
+ title: "Memory backend",
30
+ desc: "Global: which backend worker memory reads and writes go through. Applies to newly dispatched cards.",
31
+ provider: "Backend",
32
+ url: "Custom URL",
33
+ urlPlaceholder: "http://127.0.0.1:3113",
34
+ save: "Save",
35
+ saved: "Saved",
36
+ error: "Failed to save memory setting"
37
+ }
38
+ };
39
+ function MemoryPanel() {
40
+ const m = (0, import_console_ui.useMessages)(MSG);
41
+ const qc = (0, import_react_query.useQueryClient)();
42
+ const { alert } = (0, import_console_ui.useDialog)();
43
+ const memQ = (0, import_react_query.useQuery)({
44
+ queryKey: ["system-memory"],
45
+ queryFn: () => (0, import_console_ui.apiGet)("/api/system/memory")
46
+ });
47
+ const [provider, setProvider] = (0, import_react.useState)(null);
48
+ const [url, setUrl] = (0, import_react.useState)(null);
49
+ (0, import_react.useEffect)(() => {
50
+ if (memQ.data && provider === null) {
51
+ setProvider(memQ.data.provider);
52
+ setUrl(memQ.data.url);
53
+ }
54
+ }, [memQ.data, provider]);
55
+ const curProvider = provider ?? memQ.data?.provider ?? "agentmemory";
56
+ const curUrl = url ?? memQ.data?.url ?? "";
57
+ const dirty = memQ.data != null && (curProvider !== memQ.data.provider || curProvider === "custom" && curUrl !== memQ.data.url);
58
+ const save = (0, import_react_query.useMutation)({
59
+ mutationFn: () => (0, import_console_ui.apiPut)("/api/system/memory", {
60
+ provider: curProvider,
61
+ url: curProvider === "custom" ? curUrl : ""
62
+ }),
63
+ onSuccess: () => {
64
+ void qc.invalidateQueries({ queryKey: ["system-memory"] });
65
+ void qc.invalidateQueries({ queryKey: ["system-env"] });
66
+ },
67
+ onError: (err) => void alert({ title: m.error, body: err instanceof Error ? err.message : String(err) })
68
+ });
69
+ const providers = memQ.data?.options ?? ["none", "builtin", "agentmemory", "custom"];
70
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { children: [
71
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
72
+ "h2",
73
+ {
74
+ className: "text-xl font-bold mb-1",
75
+ style: { fontFamily: "var(--font-heading)" },
76
+ children: m.title
77
+ }
78
+ ),
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs mb-3", style: { color: "var(--color-text-muted)" }, children: m.desc }),
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-3", style: { maxWidth: 448 }, children: [
81
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-1 text-sm", children: [
82
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-bold", children: m.provider }),
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
84
+ import_console_ui.AnimatedSelect,
85
+ {
86
+ value: curProvider,
87
+ onChange: setProvider,
88
+ ariaLabel: m.provider,
89
+ options: providers.map((p) => ({ value: p, label: p }))
90
+ }
91
+ )
92
+ ] }),
93
+ curProvider === "custom" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "flex flex-col gap-1 text-sm", children: [
94
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-bold", children: m.url }),
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
96
+ "input",
97
+ {
98
+ className: "nb-input text-xs",
99
+ style: { fontFamily: "var(--font-mono)" },
100
+ type: "text",
101
+ value: curUrl,
102
+ onChange: (e) => setUrl(e.target.value),
103
+ placeholder: m.urlPlaceholder,
104
+ spellCheck: false,
105
+ "aria-label": m.url
106
+ }
107
+ )
108
+ ] }),
109
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
110
+ "button",
111
+ {
112
+ className: "nb-btn nb-btn-primary",
113
+ style: { padding: "6px 12px", fontSize: 12 },
114
+ onClick: () => save.mutate(),
115
+ disabled: !dirty || save.isPending,
116
+ type: "button",
117
+ "aria-label": m.save,
118
+ children: [
119
+ save.isPending ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { size: 12, strokeWidth: 3, className: "animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Save, { size: 12, strokeWidth: 3 }),
120
+ save.isSuccess && !dirty ? m.saved : m.save
121
+ ]
122
+ }
123
+ ) })
124
+ ] })
125
+ ] });
126
+ }
127
+ (0, import_console_slots.registerSlot)("plugin.config", {
128
+ // 🔴 按**实现**匹配,不是按行 id:这一行换成别的记忆后端,这个面板就该消失
129
+ // —— 它配的是 memory-local 自己的东西。
130
+ match: ({ name }) => name === "@coralai/sps-cli/seams/memory-local",
131
+ render: () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MemoryPanel, {})
132
+ });
133
+
134
+ },
135
+ });
package/dist/server.d.ts CHANGED
@@ -6,11 +6,19 @@
6
6
  * Logger. Consumers wire these into their own Hono app. See exports map in
7
7
  * package.json (`@coralai/sps-cli/server`).
8
8
  */
9
- export { createContainer } from './services/container.js';
10
- export type { ServiceContainer, ContainerOptions, SystemMeta } from './services/container.js';
11
9
  export { createChatRoute, createChatStreamRoute } from './console/routes/chat.js';
10
+ export { readAgentsMd } from './core/agents/agentsMd.js';
11
+ export { type ConfigureProjectAgentOpts, configureProjectAgent, type ProjectAgentProvider, type ProjectAgentTarget, } from './core/agents/configureProjectAgent.js';
12
+ export { loadAgentsConfig } from './core/intel/agentsConfig.js';
13
+ export { RuntimeSession } from './core/intel/RuntimeSession.js';
12
14
  export { Logger } from './core/logger.js';
15
+ export { exportModelConfigBundle, type ImportSummary, importModelConfigBundle, isModelConfigBundle, type ModelConfigBundle, } from './core/modelConfigBundle.js';
16
+ export { type ConfigureProjectSkillsResult, configureProjectSkills } from './core/skills/configure.js';
17
+ export { type SkillMeta, SkillsManager, type SkillsManagerOpts } from './core/skills/index.js';
18
+ export type { GateOpts } from './core/skills/types.js';
13
19
  export { SseEventBus } from './infra/sseBus.js';
20
+ export { chatTools } from './providers/llm/chatTools.js';
21
+ export { createReviewerModel } from './providers/llm/modelFactory.js';
14
22
  /**
15
23
  * Agent 构造积木 —— 给嵌入方(如 gameforge)自己用 `@openai/agents` 跑对话回合
16
24
  * (集成交接 §7 选项 a)。复刻 console `streamOpenaiChat` 的最小集:
@@ -27,18 +35,10 @@ export { SseEventBus } from './infra/sseBus.js';
27
35
  * for await (const ev of r) { ... 把流事件翻成你的 UI 流 ... }
28
36
  */
29
37
  export { skillTools } from './providers/llm/skillTools.js';
30
- export { chatTools } from './providers/llm/chatTools.js';
31
38
  export { workerTools } from './providers/llm/workerTools.js';
32
- export { readAgentsMd } from './core/agents/agentsMd.js';
33
- export { createReviewerModel } from './providers/llm/modelFactory.js';
34
- export { loadAgentsConfig } from './core/intel/agentsConfig.js';
35
- export { RuntimeSession } from './core/intel/RuntimeSession.js';
36
- export { SkillsManager, type SkillsManagerOpts, type SkillMeta } from './core/skills/index.js';
37
- export { configureProjectSkills, type ConfigureProjectSkillsResult } from './core/skills/configure.js';
38
- export type { GateOpts } from './core/skills/types.js';
39
- export { configureProjectAgent, type ConfigureProjectAgentOpts, type ProjectAgentProvider, type ProjectAgentTarget, } from './core/agents/configureProjectAgent.js';
40
- export { exportModelConfigBundle, importModelConfigBundle, isModelConfigBundle, type ModelConfigBundle, type ImportSummary, } from './core/modelConfigBundle.js';
41
- export { runSubAgent, abortSubagentRun, SubAgentError, type SubAgentSpec, type SubAgentResult, type SubAgentUsage, type SubAgentToolCall, type SubAgentEvent, type SubAgentErrorKind, type SubAgentToolMode, } from './providers/subagent/runSubAgent.js';
39
+ export { type GenerateAssetInput, type GenerateAssetResult, generateAsset } from './providers/media/generateAsset.js';
42
40
  export { getSubagentRun, listSubagentRuns, type SubagentRunRecord, type SubagentRunStatus, } from './providers/subagent/runLedger.js';
43
- export { generateAsset, type GenerateAssetInput, type GenerateAssetResult } from './providers/media/generateAsset.js';
41
+ export { abortSubagentRun, runSubAgent, SubAgentError, type SubAgentErrorKind, type SubAgentEvent, type SubAgentResult, type SubAgentSpec, type SubAgentToolCall, type SubAgentToolMode, type SubAgentUsage, } from './providers/subagent/runSubAgent.js';
42
+ export type { ContainerOptions, ServiceContainer, SystemMeta } from './services/container.js';
43
+ export { createContainer } from './services/container.js';
44
44
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG/F,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AACvG,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EACL,KAAK,yBAAyB,EAC9B,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EACL,uBAAuB,EACvB,KAAK,aAAa,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,KAAK,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACvG,OAAO,EAAE,KAAK,SAAS,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACtH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/server.js CHANGED
@@ -6,10 +6,23 @@
6
6
  * Logger. Consumers wire these into their own Hono app. See exports map in
7
7
  * package.json (`@coralai/sps-cli/server`).
8
8
  */
9
- export { createContainer } from './services/container.js';
10
9
  export { createChatRoute, createChatStreamRoute } from './console/routes/chat.js';
10
+ export { readAgentsMd } from './core/agents/agentsMd.js';
11
+ // 项目级 agent 端点/模型(建项目之后也能改):平台只说"用哪个 provider/模型",
12
+ // 落 .claude/settings.local.json 还是 .sps/agent-providers.json 由 sps 按后端决定。
13
+ export { configureProjectAgent, } from './core/agents/configureProjectAgent.js';
14
+ export { loadAgentsConfig } from './core/intel/agentsConfig.js';
15
+ export { RuntimeSession } from './core/intel/RuntimeSession.js';
11
16
  export { Logger } from './core/logger.js';
17
+ // 模型配置包(0.65.27 CLI 功能的库形态):嵌入平台(coral)的导入口分流/双包导出用。
18
+ export { exportModelConfigBundle, importModelConfigBundle, isModelConfigBundle, } from './core/modelConfigBundle.js';
19
+ // 项目 skill 配置(建项目之后也能改):平台只说"这个项目用哪些技能",落到 .claude/skills 还是
20
+ // .sps/skills 由 sps 按后端决定 —— 收掉平台自写投影那类越界(见 core/skills/configure.ts)。
21
+ export { configureProjectSkills } from './core/skills/configure.js';
22
+ export { SkillsManager } from './core/skills/index.js';
12
23
  export { SseEventBus } from './infra/sseBus.js';
24
+ export { chatTools } from './providers/llm/chatTools.js';
25
+ export { createReviewerModel } from './providers/llm/modelFactory.js';
13
26
  /**
14
27
  * Agent 构造积木 —— 给嵌入方(如 gameforge)自己用 `@openai/agents` 跑对话回合
15
28
  * (集成交接 §7 选项 a)。复刻 console `streamOpenaiChat` 的最小集:
@@ -26,25 +39,12 @@ export { SseEventBus } from './infra/sseBus.js';
26
39
  * for await (const ev of r) { ... 把流事件翻成你的 UI 流 ... }
27
40
  */
28
41
  export { skillTools } from './providers/llm/skillTools.js';
29
- export { chatTools } from './providers/llm/chatTools.js';
30
42
  export { workerTools } from './providers/llm/workerTools.js';
31
- export { readAgentsMd } from './core/agents/agentsMd.js';
32
- export { createReviewerModel } from './providers/llm/modelFactory.js';
33
- export { loadAgentsConfig } from './core/intel/agentsConfig.js';
34
- export { RuntimeSession } from './core/intel/RuntimeSession.js';
35
- export { SkillsManager } from './core/skills/index.js';
36
- // 项目 skill 配置(建项目之后也能改):平台只说"这个项目用哪些技能",落到 .claude/skills 还是
37
- // .sps/skills 由 sps 按后端决定 —— 收掉平台自写投影那类越界(见 core/skills/configure.ts)。
38
- export { configureProjectSkills } from './core/skills/configure.js';
39
- // 项目级 agent 端点/模型(建项目之后也能改):平台只说"用哪个 provider/模型",
40
- // 落 .claude/settings.local.json 还是 .sps/agent-providers.json 由 sps 按后端决定。
41
- export { configureProjectAgent, } from './core/agents/configureProjectAgent.js';
42
- // 模型配置包(0.65.27 CLI 功能的库形态):嵌入平台(coral)的导入口分流/双包导出用。
43
- export { exportModelConfigBundle, importModelConfigBundle, isModelConfigBundle, } from './core/modelConfigBundle.js';
44
- // 轻 agent(subagent,一次性子 agent):平台(gameforge 审图等)直调,provider/密钥留 sps。
45
- // v2 契约见 docs/integration/subagent-contract.md(工具三态/多模态/结构化/中断/台账)。
46
- export { runSubAgent, abortSubagentRun, SubAgentError, } from './providers/subagent/runSubAgent.js';
47
- export { getSubagentRun, listSubagentRuns, } from './providers/subagent/runLedger.js';
48
43
  // 媒体生成引擎入口(图/视频/音乐/语音/3D):平台生图直调它,退役自持 SDK/密钥。
49
44
  export { generateAsset } from './providers/media/generateAsset.js';
45
+ export { getSubagentRun, listSubagentRuns, } from './providers/subagent/runLedger.js';
46
+ // 轻 agent(subagent,一次性子 agent):平台(gameforge 审图等)直调,provider/密钥留 sps。
47
+ // v2 契约见 docs/integration/subagent-contract.md(工具三态/多模态/结构化/中断/台账)。
48
+ export { abortSubagentRun, runSubAgent, SubAgentError, } from './providers/subagent/runSubAgent.js';
49
+ export { createContainer } from './services/container.js';
50
50
  //# sourceMappingURL=server.js.map