clawcenter 0.1.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 (122) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +180 -0
  3. package/bin/clawcenter.js +2 -0
  4. package/dist/center/commands/system-commands.d.ts +15 -0
  5. package/dist/center/commands/system-commands.d.ts.map +1 -0
  6. package/dist/center/commands/system-commands.js +363 -0
  7. package/dist/center/commands/system-commands.js.map +1 -0
  8. package/dist/center/dispatcher.d.ts +32 -0
  9. package/dist/center/dispatcher.d.ts.map +1 -0
  10. package/dist/center/dispatcher.js +264 -0
  11. package/dist/center/dispatcher.js.map +1 -0
  12. package/dist/center/hub.d.ts +16 -0
  13. package/dist/center/hub.d.ts.map +1 -0
  14. package/dist/center/hub.js +214 -0
  15. package/dist/center/hub.js.map +1 -0
  16. package/dist/center/router/engine.d.ts +35 -0
  17. package/dist/center/router/engine.d.ts.map +1 -0
  18. package/dist/center/router/engine.js +106 -0
  19. package/dist/center/router/engine.js.map +1 -0
  20. package/dist/center/router/hashtag.d.ts +15 -0
  21. package/dist/center/router/hashtag.d.ts.map +1 -0
  22. package/dist/center/router/hashtag.js +21 -0
  23. package/dist/center/router/hashtag.js.map +1 -0
  24. package/dist/center/wechat/api.d.ts +131 -0
  25. package/dist/center/wechat/api.d.ts.map +1 -0
  26. package/dist/center/wechat/api.js +205 -0
  27. package/dist/center/wechat/api.js.map +1 -0
  28. package/dist/center/wechat/cdn.d.ts +13 -0
  29. package/dist/center/wechat/cdn.d.ts.map +1 -0
  30. package/dist/center/wechat/cdn.js +100 -0
  31. package/dist/center/wechat/cdn.js.map +1 -0
  32. package/dist/center/wechat/connector.d.ts +51 -0
  33. package/dist/center/wechat/connector.d.ts.map +1 -0
  34. package/dist/center/wechat/connector.js +253 -0
  35. package/dist/center/wechat/connector.js.map +1 -0
  36. package/dist/center/wechat/login.d.ts +13 -0
  37. package/dist/center/wechat/login.d.ts.map +1 -0
  38. package/dist/center/wechat/login.js +81 -0
  39. package/dist/center/wechat/login.js.map +1 -0
  40. package/dist/core/agents/adapter.d.ts +43 -0
  41. package/dist/core/agents/adapter.d.ts.map +1 -0
  42. package/dist/core/agents/adapter.js +2 -0
  43. package/dist/core/agents/adapter.js.map +1 -0
  44. package/dist/core/agents/claude-code.d.ts +19 -0
  45. package/dist/core/agents/claude-code.d.ts.map +1 -0
  46. package/dist/core/agents/claude-code.js +138 -0
  47. package/dist/core/agents/claude-code.js.map +1 -0
  48. package/dist/core/agents/claude-sdk.d.ts +17 -0
  49. package/dist/core/agents/claude-sdk.d.ts.map +1 -0
  50. package/dist/core/agents/claude-sdk.js +85 -0
  51. package/dist/core/agents/claude-sdk.js.map +1 -0
  52. package/dist/core/agents/codebuddy.d.ts +19 -0
  53. package/dist/core/agents/codebuddy.d.ts.map +1 -0
  54. package/dist/core/agents/codebuddy.js +352 -0
  55. package/dist/core/agents/codebuddy.js.map +1 -0
  56. package/dist/core/agents/codex.d.ts +18 -0
  57. package/dist/core/agents/codex.d.ts.map +1 -0
  58. package/dist/core/agents/codex.js +300 -0
  59. package/dist/core/agents/codex.js.map +1 -0
  60. package/dist/core/agents/cursor-agent.d.ts +19 -0
  61. package/dist/core/agents/cursor-agent.d.ts.map +1 -0
  62. package/dist/core/agents/cursor-agent.js +253 -0
  63. package/dist/core/agents/cursor-agent.js.map +1 -0
  64. package/dist/core/agents/http-agent.d.ts +17 -0
  65. package/dist/core/agents/http-agent.d.ts.map +1 -0
  66. package/dist/core/agents/http-agent.js +91 -0
  67. package/dist/core/agents/http-agent.js.map +1 -0
  68. package/dist/core/agents/manager.d.ts +45 -0
  69. package/dist/core/agents/manager.d.ts.map +1 -0
  70. package/dist/core/agents/manager.js +245 -0
  71. package/dist/core/agents/manager.js.map +1 -0
  72. package/dist/core/agents/openclaw.d.ts +19 -0
  73. package/dist/core/agents/openclaw.d.ts.map +1 -0
  74. package/dist/core/agents/openclaw.js +173 -0
  75. package/dist/core/agents/openclaw.js.map +1 -0
  76. package/dist/core/agents/opencode.d.ts +19 -0
  77. package/dist/core/agents/opencode.d.ts.map +1 -0
  78. package/dist/core/agents/opencode.js +175 -0
  79. package/dist/core/agents/opencode.js.map +1 -0
  80. package/dist/core/agents/worker-agent.d.ts +24 -0
  81. package/dist/core/agents/worker-agent.d.ts.map +1 -0
  82. package/dist/core/agents/worker-agent.js +40 -0
  83. package/dist/core/agents/worker-agent.js.map +1 -0
  84. package/dist/core/api/routes.d.ts +6 -0
  85. package/dist/core/api/routes.d.ts.map +1 -0
  86. package/dist/core/api/routes.js +238 -0
  87. package/dist/core/api/routes.js.map +1 -0
  88. package/dist/core/db/schema.d.ts +3 -0
  89. package/dist/core/db/schema.d.ts.map +1 -0
  90. package/dist/core/db/schema.js +97 -0
  91. package/dist/core/db/schema.js.map +1 -0
  92. package/dist/core/db/store.d.ts +167 -0
  93. package/dist/core/db/store.d.ts.map +1 -0
  94. package/dist/core/db/store.js +469 -0
  95. package/dist/core/db/store.js.map +1 -0
  96. package/dist/index.d.ts +2 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +70 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/logger.d.ts +6 -0
  101. package/dist/logger.d.ts.map +1 -0
  102. package/dist/logger.js +22 -0
  103. package/dist/logger.js.map +1 -0
  104. package/dist/server.d.ts +28 -0
  105. package/dist/server.d.ts.map +1 -0
  106. package/dist/server.js +158 -0
  107. package/dist/server.js.map +1 -0
  108. package/dist/tui/App.d.ts +78 -0
  109. package/dist/tui/App.d.ts.map +1 -0
  110. package/dist/tui/App.js +106 -0
  111. package/dist/tui/App.js.map +1 -0
  112. package/dist/tui/index.d.ts +7 -0
  113. package/dist/tui/index.d.ts.map +1 -0
  114. package/dist/tui/index.js +12 -0
  115. package/dist/tui/index.js.map +1 -0
  116. package/dist/worker/client.d.ts +28 -0
  117. package/dist/worker/client.d.ts.map +1 -0
  118. package/dist/worker/client.js +142 -0
  119. package/dist/worker/client.js.map +1 -0
  120. package/package.json +74 -0
  121. package/web/dist/assets/index-Bvq27OV5.js +60 -0
  122. package/web/dist/index.html +63 -0
@@ -0,0 +1,363 @@
1
+ export function isSystemCommand(text) {
2
+ return text.trim().startsWith("/");
3
+ }
4
+ export async function handleSystemCommand(ctx) {
5
+ const trimmed = ctx.text.trim();
6
+ const spaceIdx = trimmed.indexOf(" ");
7
+ const command = (spaceIdx === -1 ? trimmed : trimmed.slice(0, spaceIdx)).toLowerCase();
8
+ const args = spaceIdx === -1 ? "" : trimmed.slice(spaceIdx + 1).trim();
9
+ switch (command) {
10
+ case "/help":
11
+ return handleHelp();
12
+ case "/agents":
13
+ return handleAgents(ctx);
14
+ case "/status":
15
+ return handleStatus(ctx);
16
+ case "/switch":
17
+ return handleSwitch(ctx, args);
18
+ case "/model":
19
+ return handleModel(ctx, args);
20
+ case "/clear":
21
+ return handleClear(ctx, args);
22
+ case "/echo":
23
+ return handleEcho(args);
24
+ case "/session":
25
+ return handleSession(ctx, args);
26
+ case "/sessions":
27
+ return handleSessions(ctx);
28
+ default:
29
+ return { reply: `未知命令: ${command}\n输入 /help 查看可用命令。` };
30
+ }
31
+ }
32
+ function handleHelp() {
33
+ return {
34
+ reply: [
35
+ "📋 可用命令:",
36
+ "",
37
+ "/help 显示此帮助",
38
+ "/agents 列出可用 Agent",
39
+ "/status 查看系统状态",
40
+ "/switch <名称> 切换默认 Agent",
41
+ "/model 查看/切换模型",
42
+ "/session 管理当前 Agent 的会话",
43
+ "/session new [名称] 新建会话",
44
+ "/session <编号> 切换到指定会话",
45
+ "/session rename <名称> 重命名当前会话",
46
+ "/session delete <编号> 删除会话",
47
+ "/sessions 查看所有会话(全局)",
48
+ "/clear 清空当前会话上下文",
49
+ "/echo <文本> 回显测试",
50
+ "",
51
+ "使用 #agent-name 可将消息发送给指定 Agent。",
52
+ "引用回复某条 Agent 消息可继续与该 Agent 对话。",
53
+ ].join("\n"),
54
+ };
55
+ }
56
+ function handleAgents(ctx) {
57
+ const allowed = ctx.store.getAllowedAgents(ctx.wechatAccountId, ctx.fromUserId);
58
+ const defaultAgent = ctx.store.getDefaultAgent(ctx.wechatAccountId, ctx.fromUserId);
59
+ const sticky = ctx.store.getStickyRoute(ctx.wechatAccountId, ctx.fromUserId);
60
+ if (allowed.length === 0) {
61
+ return { reply: "暂无可用 Agent,请联系管理员配置权限。" };
62
+ }
63
+ const lines = ["可用 Agent:"];
64
+ for (const agentId of allowed) {
65
+ const agent = ctx.store.getAgent(agentId);
66
+ if (!agent)
67
+ continue;
68
+ const adapter = ctx.agentManager.getAdapter(agentId);
69
+ const status = adapter?.status === "running" ? "🟢" : "⚪";
70
+ const isDefault = agentId === defaultAgent ? " [默认]" : "";
71
+ const isCurrent = agentId === sticky ? " ← 当前" : "";
72
+ lines.push(`${status} ${agent.display_name} (#${agentId})${isDefault}${isCurrent}`);
73
+ }
74
+ return { reply: lines.join("\n") };
75
+ }
76
+ function handleStatus(ctx) {
77
+ const stats = ctx.store.getStats();
78
+ const accounts = ctx.store.listWechatAccounts();
79
+ const agents = ctx.store.listAgents();
80
+ const lines = [
81
+ "📊 系统状态:",
82
+ "",
83
+ `微信账号: ${accounts.length}`,
84
+ ];
85
+ for (const acc of accounts) {
86
+ lines.push(` ${acc.status === "connected" ? "🟢" : "🔴"} ${acc.name}`);
87
+ }
88
+ lines.push("", `Agent: ${agents.length}`);
89
+ for (const agent of agents) {
90
+ const adapter = ctx.agentManager.getAdapter(agent.id);
91
+ const status = adapter?.status === "running" ? "🟢" : adapter?.status === "error" ? "🔴" : "⚪";
92
+ const node = agent.node_id !== "local" ? ` (${agent.node_id})` : "";
93
+ lines.push(` ${status} ${agent.display_name} (#${agent.id})${node}`);
94
+ }
95
+ lines.push("", `会话数: ${stats.sessions}`, `今日消息: ${stats.messages_today}`);
96
+ return { reply: lines.join("\n") };
97
+ }
98
+ function handleSwitch(ctx, args) {
99
+ const agentId = args.trim().replace(/^#/, "");
100
+ if (!agentId) {
101
+ return { reply: "用法: /switch <agent-name>\n示例: /switch claude" };
102
+ }
103
+ const agent = ctx.store.getAgent(agentId);
104
+ if (!agent) {
105
+ return { reply: `Agent "${agentId}" 未找到。` };
106
+ }
107
+ const allowed = ctx.store.isAgentAllowed(ctx.wechatAccountId, ctx.fromUserId, agentId);
108
+ if (!allowed) {
109
+ return { reply: `你没有权限访问 Agent "${agentId}"。` };
110
+ }
111
+ ctx.store.setStickyRoute(ctx.wechatAccountId, ctx.fromUserId, agentId);
112
+ return { reply: `✅ 已切换到 ${agent.display_name} (#${agentId})` };
113
+ }
114
+ async function handleModel(ctx, args) {
115
+ const sticky = ctx.store.getStickyRoute(ctx.wechatAccountId, ctx.fromUserId);
116
+ const defaultAgent = ctx.store.getDefaultAgent(ctx.wechatAccountId, ctx.fromUserId);
117
+ const agentId = sticky || defaultAgent;
118
+ if (!agentId) {
119
+ return { reply: "请先使用 /switch <agent> 选择一个 Agent。" };
120
+ }
121
+ const adapter = ctx.agentManager.getAdapter(agentId);
122
+ if (!adapter) {
123
+ return { reply: `Agent "${agentId}" 未找到。` };
124
+ }
125
+ if (!adapter.supportsModelSwitch) {
126
+ return { reply: `当前 Agent #${agentId} (${adapter.type}) 不支持切换模型。` };
127
+ }
128
+ const trimmedArgs = args.trim();
129
+ if (!trimmedArgs) {
130
+ const currentModel = adapter.getModel() ?? "(默认)";
131
+ return {
132
+ reply: [
133
+ `🤖 当前 Agent: ${adapter.displayName} (#${agentId})`,
134
+ `📌 当前模型: ${currentModel}`,
135
+ "",
136
+ "用法:",
137
+ " /model list 查看可用 Provider",
138
+ " /model list <name> 查看某 Provider 的模型",
139
+ " /model <model-name> 切换模型",
140
+ ].join("\n"),
141
+ };
142
+ }
143
+ if (trimmedArgs === "list" || trimmedArgs.startsWith("list ")) {
144
+ const provider = trimmedArgs.slice(4).trim() || undefined;
145
+ try {
146
+ const models = await adapter.listModels(provider);
147
+ if (models.length === 0) {
148
+ return { reply: provider ? `Provider "${provider}" 没有可用模型。` : "未获取到可用模型列表。" };
149
+ }
150
+ const currentModel = adapter.getModel();
151
+ if (provider) {
152
+ const lines = [`📋 ${provider} 可用模型:`];
153
+ for (const m of models) {
154
+ const shortName = m.id.includes("/") ? m.id.substring(m.id.indexOf("/") + 1) : m.id;
155
+ const marker = m.id === currentModel ? " ← 当前" : "";
156
+ lines.push(` ${m.id === currentModel ? "→" : " "} ${shortName}${marker}`);
157
+ }
158
+ lines.push("", `切换: /model ${models[0].id}`);
159
+ return { reply: lines.join("\n") };
160
+ }
161
+ const grouped = new Map();
162
+ for (const m of models) {
163
+ const list = grouped.get(m.provider) ?? [];
164
+ list.push(m);
165
+ grouped.set(m.provider, list);
166
+ }
167
+ const lines = [
168
+ `🤖 Agent: ${adapter.displayName} (#${agentId})`,
169
+ `📌 当前模型: ${currentModel ?? "(默认)"}`,
170
+ "",
171
+ "可用 Provider:",
172
+ ];
173
+ for (const [prov, provModels] of grouped) {
174
+ const hasCurrent = provModels.some((m) => m.id === currentModel);
175
+ lines.push(` ${hasCurrent ? "★" : " "} ${prov} (${provModels.length} models)`);
176
+ }
177
+ lines.push("", "使用 /model list <provider> 查看具体模型");
178
+ return { reply: lines.join("\n") };
179
+ }
180
+ catch (err) {
181
+ return { reply: `获取模型列表失败: ${err.message}` };
182
+ }
183
+ }
184
+ const modelName = trimmedArgs;
185
+ try {
186
+ ctx.agentManager.setAgentModel(agentId, modelName);
187
+ return { reply: `✅ 已将 ${adapter.displayName} (#${agentId}) 的模型切换为: ${modelName}` };
188
+ }
189
+ catch (err) {
190
+ return { reply: `切换模型失败: ${err.message}` };
191
+ }
192
+ }
193
+ function handleClear(ctx, args) {
194
+ const arg = args.trim().replace(/^#/, "");
195
+ if (arg === "all") {
196
+ const sessions = ctx.store.listSessions().filter((s) => s.wechat_id === ctx.wechatAccountId && s.user_id === ctx.fromUserId);
197
+ for (const session of sessions) {
198
+ ctx.store.clearSession(session.id);
199
+ }
200
+ return { reply: `✅ 已清空所有会话历史` };
201
+ }
202
+ if (arg) {
203
+ const sessions = ctx.store.listSessions(arg).filter((s) => s.wechat_id === ctx.wechatAccountId && s.user_id === ctx.fromUserId);
204
+ for (const session of sessions) {
205
+ ctx.store.clearSession(session.id);
206
+ }
207
+ return { reply: `✅ 已清空 #${arg} 的会话历史` };
208
+ }
209
+ const agentId = ctx.store.getStickyRoute(ctx.wechatAccountId, ctx.fromUserId)
210
+ ?? ctx.store.getDefaultAgent(ctx.wechatAccountId, ctx.fromUserId);
211
+ if (!agentId) {
212
+ return { reply: "⚠️ 请先用 /switch <agent> 选择一个 Agent" };
213
+ }
214
+ const session = ctx.store.getOrCreateSession(ctx.wechatAccountId, ctx.fromUserId, agentId);
215
+ ctx.store.clearSession(session.id);
216
+ const agent = ctx.store.getAgent(agentId);
217
+ return { reply: `✅ 已清空 ${agent?.display_name ?? agentId} 的当前会话` };
218
+ }
219
+ function handleEcho(args) {
220
+ const message = args.trim() || "(空)";
221
+ return { reply: message };
222
+ }
223
+ function formatTimeAgo(ms) {
224
+ const seconds = Math.round(ms / 1000);
225
+ if (seconds < 60)
226
+ return "刚刚";
227
+ const minutes = Math.round(seconds / 60);
228
+ if (minutes < 60)
229
+ return `${minutes}分钟前`;
230
+ const hours = Math.round(minutes / 60);
231
+ if (hours < 24)
232
+ return `${hours}小时前`;
233
+ const days = Math.round(hours / 24);
234
+ return `${days}天前`;
235
+ }
236
+ function handleSession(ctx, args) {
237
+ const agentId = ctx.store.getStickyRoute(ctx.wechatAccountId, ctx.fromUserId)
238
+ ?? ctx.store.getDefaultAgent(ctx.wechatAccountId, ctx.fromUserId);
239
+ if (!agentId) {
240
+ return { reply: "⚠️ 请先用 /switch <agent> 选择一个 Agent" };
241
+ }
242
+ const agent = ctx.store.getAgent(agentId);
243
+ const agentName = agent?.display_name ?? agentId;
244
+ const trimmed = args.trim();
245
+ if (!trimmed || trimmed === "list") {
246
+ return sessionList(ctx, agentId, agentName);
247
+ }
248
+ if (trimmed.startsWith("new")) {
249
+ const label = trimmed.slice(3).trim() || undefined;
250
+ return sessionNew(ctx, agentId, agentName, label);
251
+ }
252
+ if (trimmed.startsWith("rename ")) {
253
+ const label = trimmed.slice(7).trim();
254
+ return sessionRename(ctx, agentId, label);
255
+ }
256
+ if (trimmed.startsWith("delete ")) {
257
+ const numStr = trimmed.slice(7).trim();
258
+ const num = parseInt(numStr, 10);
259
+ if (isNaN(num) || num < 1) {
260
+ return { reply: "⚠️ 用法: /session delete <编号>" };
261
+ }
262
+ return sessionDelete(ctx, agentId, agentName, num);
263
+ }
264
+ const num = parseInt(trimmed, 10);
265
+ if (!isNaN(num) && num >= 1) {
266
+ return sessionSwitch(ctx, agentId, agentName, num);
267
+ }
268
+ return {
269
+ reply: [
270
+ `📋 ${agentName} 会话管理:`,
271
+ "",
272
+ "/session 列出会话",
273
+ "/session new [名称] 新建会话",
274
+ "/session <编号> 切换会话",
275
+ "/session rename <名称> 重命名当前会话",
276
+ "/session delete <编号> 删除会话",
277
+ ].join("\n"),
278
+ };
279
+ }
280
+ function sessionList(ctx, agentId, agentName) {
281
+ const sessions = ctx.store.listUserAgentSessions(ctx.wechatAccountId, ctx.fromUserId, agentId);
282
+ if (sessions.length === 0) {
283
+ return { reply: `${agentName} 暂无会话。发送消息即可自动创建。` };
284
+ }
285
+ const now = Date.now();
286
+ const lines = [`📋 ${agentName} 会话列表:`];
287
+ for (let i = 0; i < sessions.length; i++) {
288
+ const s = sessions[i];
289
+ const label = s.label ? `[${s.label}]` : "[未命名]";
290
+ const active = s.is_active ? " ← 当前" : "";
291
+ const ago = formatTimeAgo(now - s.last_active);
292
+ lines.push(` ${i + 1}. ${label} — ${s.message_count}条消息, ${ago}${active}`);
293
+ }
294
+ lines.push("", "💡 /session <编号> 切换 | /session new 新建");
295
+ return { reply: lines.join("\n") };
296
+ }
297
+ function sessionNew(ctx, agentId, agentName, label) {
298
+ ctx.store.createNewSession(ctx.wechatAccountId, ctx.fromUserId, agentId, label);
299
+ const labelStr = label ? `「${label}」` : "";
300
+ return { reply: `✅ 已为 ${agentName} 新建会话${labelStr}并切换` };
301
+ }
302
+ function sessionSwitch(ctx, agentId, agentName, num) {
303
+ const sessions = ctx.store.listUserAgentSessions(ctx.wechatAccountId, ctx.fromUserId, agentId);
304
+ if (num < 1 || num > sessions.length) {
305
+ return { reply: `⚠️ 编号超出范围,当前共 ${sessions.length} 个会话` };
306
+ }
307
+ const target = sessions[num - 1];
308
+ if (target.is_active) {
309
+ const label = target.label ? `「${target.label}」` : `#${num}`;
310
+ return { reply: `已经在会话 ${label} 中` };
311
+ }
312
+ ctx.store.switchActiveSession(ctx.wechatAccountId, ctx.fromUserId, agentId, target.id);
313
+ const label = target.label ? `「${target.label}」` : `#${num}`;
314
+ return { reply: `✅ 已切换到 ${agentName} 会话 ${label}` };
315
+ }
316
+ function sessionRename(ctx, agentId, label) {
317
+ if (!label) {
318
+ return { reply: "⚠️ 用法: /session rename <名称>" };
319
+ }
320
+ const session = ctx.store.getOrCreateSession(ctx.wechatAccountId, ctx.fromUserId, agentId);
321
+ ctx.store.renameSession(session.id, label);
322
+ return { reply: `✅ 当前会话已命名为「${label}」` };
323
+ }
324
+ function sessionDelete(ctx, agentId, agentName, num) {
325
+ const sessions = ctx.store.listUserAgentSessions(ctx.wechatAccountId, ctx.fromUserId, agentId);
326
+ if (num < 1 || num > sessions.length) {
327
+ return { reply: `⚠️ 编号超出范围,当前共 ${sessions.length} 个会话` };
328
+ }
329
+ const target = sessions[num - 1];
330
+ const result = ctx.store.deleteSession(target.id);
331
+ if (!result.ok) {
332
+ return { reply: `⚠️ ${result.error}` };
333
+ }
334
+ const label = target.label ? `「${target.label}」` : `#${num}`;
335
+ return { reply: `✅ 已删除 ${agentName} 会话 ${label}` };
336
+ }
337
+ function handleSessions(ctx) {
338
+ const sessions = ctx.store.listSessions().filter((s) => s.wechat_id === ctx.wechatAccountId && s.user_id === ctx.fromUserId);
339
+ if (sessions.length === 0) {
340
+ return { reply: "暂无活跃会话。" };
341
+ }
342
+ const now = Date.now();
343
+ const grouped = new Map();
344
+ for (const s of sessions) {
345
+ const list = grouped.get(s.agent_id) ?? [];
346
+ list.push(s);
347
+ grouped.set(s.agent_id, list);
348
+ }
349
+ const lines = ["📋 所有会话概览:"];
350
+ for (const [aid, agentSessions] of grouped) {
351
+ const agent = ctx.store.getAgent(aid);
352
+ const name = agent?.display_name ?? aid;
353
+ lines.push(`\n${name} (${agentSessions.length}个会话):`);
354
+ for (const s of agentSessions) {
355
+ const label = s.label ? `[${s.label}]` : "[未命名]";
356
+ const active = s.is_active ? " ← 当前" : "";
357
+ const ago = formatTimeAgo(now - s.last_active);
358
+ lines.push(` • ${label} — ${s.message_count}条消息, ${ago}${active}`);
359
+ }
360
+ }
361
+ return { reply: lines.join("\n") };
362
+ }
363
+ //# sourceMappingURL=system-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-commands.js","sourceRoot":"","sources":["../../../src/center/commands/system-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { Store } from "../core/db/store.js";
3
+ import type { AgentManager } from "../core/agents/manager.js";
4
+ import { WechatConnector } from "./wechat/connector.js";
5
+ export interface DispatcherEvents {
6
+ log: (entry: LogEntry) => void;
7
+ }
8
+ export interface LogEntry {
9
+ time: number;
10
+ type: "inbound" | "outbound" | "system" | "error" | "info" | "thinking";
11
+ wechatId: string;
12
+ userId?: string;
13
+ agentId?: string;
14
+ text: string;
15
+ }
16
+ export declare class Dispatcher extends EventEmitter {
17
+ private store;
18
+ private agentManager;
19
+ private router;
20
+ private connectors;
21
+ constructor(store: Store, agentManager: AgentManager);
22
+ getConnector(wechatId: string): WechatConnector | undefined;
23
+ listConnectors(): WechatConnector[];
24
+ startConnector(wechatId: string): Promise<void>;
25
+ stopConnector(wechatId: string): Promise<void>;
26
+ stopAll(): Promise<void>;
27
+ /** Start all connected WeChat accounts */
28
+ startAllConnectors(): Promise<void>;
29
+ private handleMessage;
30
+ private emitLog;
31
+ }
32
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/center/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAuB,MAAM,uBAAuB,CAAC;AAE7E,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAsC;gBAE5C,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY;IASpD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI3D,cAAc,IAAI,eAAe,EAAE;IAI7B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC/C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,0CAA0C;IACpC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;YAa3B,aAAa;IAyL3B,OAAO,CAAC,OAAO;CAGhB"}