@zaofan/dsh-qqbot 0.9.6 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +400 -344
  2. package/README_EN.md +313 -281
  3. package/client/qqbot-settings.js +431 -10
  4. package/dist/channel-tools.d.ts +1 -1
  5. package/dist/channel-tools.d.ts.map +1 -1
  6. package/dist/channel-tools.js +166 -15
  7. package/dist/channel-tools.js.map +1 -1
  8. package/dist/commands/approve.d.ts +17 -0
  9. package/dist/commands/approve.d.ts.map +1 -0
  10. package/dist/commands/approve.js +24 -0
  11. package/dist/commands/approve.js.map +1 -0
  12. package/dist/commands/botplay.d.ts +15 -0
  13. package/dist/commands/botplay.d.ts.map +1 -0
  14. package/dist/commands/botplay.js +34 -0
  15. package/dist/commands/botplay.js.map +1 -0
  16. package/dist/commands/exit.d.ts +7 -0
  17. package/dist/commands/exit.d.ts.map +1 -0
  18. package/dist/commands/exit.js +85 -0
  19. package/dist/commands/exit.js.map +1 -0
  20. package/dist/commands/index.d.ts.map +1 -1
  21. package/dist/commands/index.js +14 -1
  22. package/dist/commands/index.js.map +1 -1
  23. package/dist/commands/outmode.d.ts +7 -3
  24. package/dist/commands/outmode.d.ts.map +1 -1
  25. package/dist/commands/outmode.js +19 -9
  26. package/dist/commands/outmode.js.map +1 -1
  27. package/dist/commands/permission.d.ts +18 -0
  28. package/dist/commands/permission.d.ts.map +1 -0
  29. package/dist/commands/permission.js +43 -0
  30. package/dist/commands/permission.js.map +1 -0
  31. package/dist/commands/session.d.ts +5 -1
  32. package/dist/commands/session.d.ts.map +1 -1
  33. package/dist/commands/session.js +51 -5
  34. package/dist/commands/session.js.map +1 -1
  35. package/dist/config.d.ts +73 -0
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js +89 -0
  38. package/dist/config.js.map +1 -1
  39. package/dist/features/approval-switch.d.ts +22 -0
  40. package/dist/features/approval-switch.d.ts.map +1 -0
  41. package/dist/features/approval-switch.js +10 -0
  42. package/dist/features/approval-switch.js.map +1 -0
  43. package/dist/features/botplay.d.ts +141 -0
  44. package/dist/features/botplay.d.ts.map +1 -0
  45. package/dist/features/botplay.js +558 -0
  46. package/dist/features/botplay.js.map +1 -0
  47. package/dist/features/extension-store.d.ts +27 -0
  48. package/dist/features/extension-store.d.ts.map +1 -0
  49. package/dist/features/extension-store.js +152 -0
  50. package/dist/features/extension-store.js.map +1 -0
  51. package/dist/features/group-hub.d.ts +40 -0
  52. package/dist/features/group-hub.d.ts.map +1 -0
  53. package/dist/features/group-hub.js +174 -0
  54. package/dist/features/group-hub.js.map +1 -0
  55. package/dist/features/group-join-request.d.ts.map +1 -1
  56. package/dist/features/group-join-request.js +35 -33
  57. package/dist/features/group-join-request.js.map +1 -1
  58. package/dist/features/qq-approval.d.ts.map +1 -1
  59. package/dist/features/qq-approval.js +3 -1
  60. package/dist/features/qq-approval.js.map +1 -1
  61. package/dist/features/scheduler.d.ts.map +1 -1
  62. package/dist/features/scheduler.js +2 -1
  63. package/dist/features/scheduler.js.map +1 -1
  64. package/dist/gateway/bootstrap.d.ts.map +1 -1
  65. package/dist/gateway/bootstrap.js +91 -11
  66. package/dist/gateway/bootstrap.js.map +1 -1
  67. package/dist/gateway/data-root.d.ts +15 -0
  68. package/dist/gateway/data-root.d.ts.map +1 -0
  69. package/dist/gateway/data-root.js +59 -0
  70. package/dist/gateway/data-root.js.map +1 -0
  71. package/dist/gateway/debounce.d.ts.map +1 -1
  72. package/dist/gateway/debounce.js +3 -2
  73. package/dist/gateway/debounce.js.map +1 -1
  74. package/dist/gateway/middleware-setup.d.ts +1 -1
  75. package/dist/gateway/middleware-setup.d.ts.map +1 -1
  76. package/dist/gateway/middleware-setup.js +42 -14
  77. package/dist/gateway/middleware-setup.js.map +1 -1
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +22 -2
  80. package/dist/index.js.map +1 -1
  81. package/dist/middleware/attachment.d.ts.map +1 -1
  82. package/dist/middleware/attachment.js +2 -1
  83. package/dist/middleware/attachment.js.map +1 -1
  84. package/dist/middleware/media-history.d.ts +2 -0
  85. package/dist/middleware/media-history.d.ts.map +1 -1
  86. package/dist/middleware/media-history.js +6 -1
  87. package/dist/middleware/media-history.js.map +1 -1
  88. package/dist/middleware/sticker-capture.d.ts.map +1 -1
  89. package/dist/middleware/sticker-capture.js +2 -2
  90. package/dist/middleware/sticker-capture.js.map +1 -1
  91. package/dist/model/model-resolver.d.ts +12 -0
  92. package/dist/model/model-resolver.d.ts.map +1 -1
  93. package/dist/model/model-resolver.js +24 -0
  94. package/dist/model/model-resolver.js.map +1 -1
  95. package/dist/model/prefs-store.d.ts +16 -0
  96. package/dist/model/prefs-store.d.ts.map +1 -1
  97. package/dist/model/prefs-store.js +48 -0
  98. package/dist/model/prefs-store.js.map +1 -1
  99. package/dist/session/session-manager.d.ts +41 -2
  100. package/dist/session/session-manager.d.ts.map +1 -1
  101. package/dist/session/session-manager.js +185 -21
  102. package/dist/session/session-manager.js.map +1 -1
  103. package/dist/transport/attachment.d.ts.map +1 -1
  104. package/dist/transport/attachment.js +2 -1
  105. package/dist/transport/attachment.js.map +1 -1
  106. package/dist/transport/inbound.d.ts.map +1 -1
  107. package/dist/transport/inbound.js +9 -1
  108. package/dist/transport/inbound.js.map +1 -1
  109. package/package.json +1 -1
  110. package/settings-host.js +177 -52
@@ -0,0 +1,152 @@
1
+ /**
2
+ * extension-store.ts — 用户扩展注册表(Phase 4 P4.1, 2026-09-08)
3
+ *
4
+ * 目的: 让用户/AI 能写【自定义斜杠命令】存在【插件包之外】的扩展目录,
5
+ * 插件 npm 升级只换"引擎"(node_modules), 扩展目录永不覆盖 —— 用户资产与代码分离。
6
+ *
7
+ * 扩展目录(每账号独立, 与表情包/定时同理念): {config.cwd}/.qqbot-extensions/commands/*.js
8
+ * 扩展文件格式(ESM, 与 SDK SlashCommand 对齐):
9
+ * export default {
10
+ * name: 'hello', // 或 name: ['hello','hi'](别名)
11
+ * description: '打招呼',
12
+ * usage: '/hello [名字]',
13
+ * handler: (ctx) => '你好呀~', // 返回 string 或 {kind:'noop'}
14
+ * };
15
+ *
16
+ * 加载策略: 启动时同步列目录 + 逐个动态 import(fail-soft: 坏文件跳过不拖垮插件);
17
+ * 注册接点: middleware-setup 把 loadExtensionCommands() 结果并入 buildCommandList →
18
+ * 群聊前置解析 cmdMap + SDK slash 都覆盖 → /命令 重启后即用(宿主有 /bot-restart 一键重启)。
19
+ * 热刷(不重启)留给 P4.2 dock 管理 UI。
20
+ */
21
+ import { readdirSync } from 'node:fs';
22
+ import { join, extname } from 'node:path';
23
+ import { pathToFileURL } from 'node:url';
24
+ /** 扩展命令目录名(相对 cwd) */
25
+ export const EXT_COMMANDS_SUBDIR = join('.qqbot-extensions', 'commands');
26
+ /** 扩展工具目录名(相对 cwd) */
27
+ export const EXT_TOOLS_SUBDIR = join('.qqbot-extensions', 'tools');
28
+ /** 扩展文件允许的扩展名 */
29
+ const ALLOWED_EXT = new Set(['.js', '.mjs', '.cjs']);
30
+ /** 归一化为 SDK SlashCommand: 支持 default 导出 或 具名 name/handler */
31
+ function normalizeModule(mod, file, logger) {
32
+ try {
33
+ const m = mod?.default ?? mod;
34
+ const obj = m;
35
+ if (!obj || typeof obj !== 'object') {
36
+ logger.warn(`[ext] ${file}: 导出不是对象, 跳过`);
37
+ return null;
38
+ }
39
+ const names = Array.isArray(obj.name) ? obj.name : [obj.name ?? ''];
40
+ const finalNames = [...names, ...(Array.isArray(obj.aliases) ? obj.aliases : [])].filter(Boolean);
41
+ if (finalNames.length === 0 || typeof obj.handler !== 'function') {
42
+ logger.warn(`[ext] ${file}: 缺 name 或 handler, 跳过`);
43
+ return null;
44
+ }
45
+ const cmd = {
46
+ name: finalNames.length > 1 ? finalNames : finalNames[0],
47
+ description: String(obj.description ?? '自定义扩展命令'),
48
+ handler: obj.handler,
49
+ };
50
+ if (obj.usage)
51
+ cmd.usage = obj.usage;
52
+ if (typeof obj.authorized === 'function')
53
+ cmd.authorized = obj.authorized;
54
+ return cmd;
55
+ }
56
+ catch (err) {
57
+ logger.warn(`[ext] ${file}: 归一化失败 ${err instanceof Error ? err.message : String(err)}`);
58
+ return null;
59
+ }
60
+ }
61
+ /**
62
+ * 扫描并加载扩展命令目录下的全部命令。
63
+ * fail-soft: 单个文件坏/抛错只记日志, 不影响其它扩展与插件本体。
64
+ */
65
+ export async function loadExtensionCommands(cwd, logger) {
66
+ const dir = cwd ? join(cwd, EXT_COMMANDS_SUBDIR) : join(process.cwd(), EXT_COMMANDS_SUBDIR);
67
+ let files = [];
68
+ try {
69
+ files = readdirSync(dir).filter((f) => ALLOWED_EXT.has(extname(f).toLowerCase()));
70
+ }
71
+ catch {
72
+ // 目录不存在 → 无扩展, 正常
73
+ return [];
74
+ }
75
+ const out = [];
76
+ for (const f of files.sort()) {
77
+ const abs = join(dir, f);
78
+ try {
79
+ // Windows 绝对路径必须转 file:// URL 再动态 import(带时间戳防模块缓存)
80
+ const url = pathToFileURL(abs).href + `?t=${Date.now()}`;
81
+ const mod = await import(url);
82
+ const cmd = normalizeModule(mod, f, logger);
83
+ if (cmd) {
84
+ out.push(cmd);
85
+ logger.info(`[ext] 已加载扩展命令: ${f} → /${Array.isArray(cmd.name) ? cmd.name.join('|') : cmd.name}`);
86
+ }
87
+ }
88
+ catch (err) {
89
+ logger.warn(`[ext] ${f} 加载失败(已跳过, 不影响其它): ${err instanceof Error ? err.message : String(err)}`);
90
+ }
91
+ }
92
+ return out;
93
+ }
94
+ /** 扩展目录路径(cwd 不存在时 undefined; dock/工具展示用) */
95
+ export function extensionCommandsDir(cwd) {
96
+ return cwd ? join(cwd, EXT_COMMANDS_SUBDIR) : join(process.cwd(), EXT_COMMANDS_SUBDIR);
97
+ }
98
+ /** 扩展工具目录路径(dock/工具展示用) */
99
+ export function extensionToolsDir(cwd) {
100
+ return cwd ? join(cwd, EXT_TOOLS_SUBDIR) : join(process.cwd(), EXT_TOOLS_SUBDIR);
101
+ }
102
+ function normalizeToolModule(mod, file, logger) {
103
+ try {
104
+ const m = mod?.default ?? mod;
105
+ const obj = m;
106
+ const name = String(obj?.name ?? '').trim();
107
+ if (!name || typeof obj?.run !== 'function') {
108
+ logger.warn(`[ext-tool] ${file}: 缺 name 或 run, 跳过`);
109
+ return null;
110
+ }
111
+ return {
112
+ file,
113
+ name,
114
+ description: String(obj.description ?? '用户扩展工具'),
115
+ inputSchema: obj.inputSchema ?? obj.parameters ?? {},
116
+ run: obj.run,
117
+ };
118
+ }
119
+ catch (err) {
120
+ logger.warn(`[ext-tool] ${file}: 归一化失败 ${err instanceof Error ? err.message : String(err)}`);
121
+ return null;
122
+ }
123
+ }
124
+ /** 扫描并加载扩展工具目录(P4.2; 由 channel-tools 在注册时调用) */
125
+ export async function loadExtensionTools(cwd, logger) {
126
+ const dir = cwd ? join(cwd, EXT_TOOLS_SUBDIR) : join(process.cwd(), EXT_TOOLS_SUBDIR);
127
+ let files = [];
128
+ try {
129
+ files = readdirSync(dir).filter((f) => ALLOWED_EXT.has(extname(f).toLowerCase()));
130
+ }
131
+ catch {
132
+ return [];
133
+ }
134
+ const out = [];
135
+ for (const f of files.sort()) {
136
+ const abs = join(dir, f);
137
+ try {
138
+ const url = pathToFileURL(abs).href + `?t=${Date.now()}`;
139
+ const mod = await import(url);
140
+ const def = normalizeToolModule(mod, f, logger);
141
+ if (def) {
142
+ out.push(def);
143
+ logger.info(`[ext-tool] 已加载扩展工具: ${f} → ${def.name}`);
144
+ }
145
+ }
146
+ catch (err) {
147
+ logger.warn(`[ext-tool] ${f} 加载失败(已跳过): ${err instanceof Error ? err.message : String(err)}`);
148
+ }
149
+ }
150
+ return out;
151
+ }
152
+ //# sourceMappingURL=extension-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-store.js","sourceRoot":"","sources":["../../src/features/extension-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { ImQQBotConfig } from '../config.js';
2
+ import type { Logger } from '../types.js';
3
+ import type { SessionManager } from '../session/index.js';
4
+ export interface HubNotice {
5
+ /** 事件类型(文案前缀/分类用) */
6
+ kind: 'join_request' | 'member_add' | 'add_robot';
7
+ /** 群 openid */
8
+ gid: string;
9
+ /** 群内成员/操作者 openid(有则给) */
10
+ memberOpenid?: string;
11
+ /** 昵称(join_request 有 username; member_add 事件不带) */
12
+ name?: string;
13
+ /** 额外说明(申请来源/验证/风险等) */
14
+ extra?: string;
15
+ }
16
+ /**
17
+ * 回合安全地把一条"模拟用户消息"append 进目标会话(web 流可见、不唤醒、不坏记录)。
18
+ * 优先级: ①agent.whenIdle() 空闲后 session.append; ②无 whenIdle 时 agent.inject(宿主回合安全)。
19
+ * @returns 'ok' | 'no-agent' | 'no-append' | 'busy' | 'fail'
20
+ */
21
+ export declare function safeAppendUserMessage(agent: unknown, text: string, logger: Logger): Promise<'ok' | 'no-agent' | 'no-append' | 'busy' | 'fail'>;
22
+ /**
23
+ * 群事件 → 群组管理器会话(hub)注入。hubSessionId 空/hubNotify=false → 'no-hub'。
24
+ * 会话寻址: manager.findBySessionId(hubSessionId)(宿主 QQ 会话 record, fork 后仍为当前 id)。
25
+ * @returns 'ok' | 'no-hub' | 'no-session' | 其它见 safeAppendUserMessage
26
+ */
27
+ export declare function notifyGroupHub(manager: SessionManager, config: ImQQBotConfig, logger: Logger, ev: HubNotice): Promise<string>;
28
+ /** GROUP_MEMBER_ADD: 新成员入群 → 记成员台账(事件无 username, 只落 openid)+ hub 通知 */
29
+ export declare function handleGroupMemberAddEvent(data: unknown, opts: {
30
+ config: ImQQBotConfig;
31
+ logger: Logger;
32
+ manager: SessionManager;
33
+ }): Promise<boolean>;
34
+ /** GROUP_ADD_ROBOT: 机器人被拉进新群 → 记群台账(known-chats group 首见)+ hub 通知 */
35
+ export declare function handleGroupAddRobotEvent(data: unknown, opts: {
36
+ config: ImQQBotConfig;
37
+ logger: Logger;
38
+ manager: SessionManager;
39
+ }): Promise<boolean>;
40
+ //# sourceMappingURL=group-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-hub.d.ts","sourceRoot":"","sources":["../../src/features/group-hub.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAM1D,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,IAAI,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC;IAClD,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,CA+C5D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED,uEAAuE;AACvE,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACvE,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED,qEAAqE;AACrE,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACvE,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * group-hub.ts — 群组管理器(Group Hub, M2, 2026-09-09)
3
+ *
4
+ * 需求(主人拍板): dock 把某"会话"设为群组管理器 → 该机器人各群的群事件
5
+ * (入群申请 / 新成员加入 / 机器人被拉群)汇总注入那一个会话, 主人一处看全部。
6
+ *
7
+ * 注入姿势(主人指正 + 底层考证, 见用户级记忆"agent 消息 API 语义"):
8
+ * - **LLM 回合进行中严禁 session.append** —— 会把 tool_calls↔tool 结果拆散/污染组包,
9
+ * 聊天记录坏(历史事故 INVALID_REQUEST insufficient tool messages)。
10
+ * - 安全序列 = agent.whenIdle() 等回合空闲(空闲立即返回) → session.append('user/message',
11
+ * createUserMessage source.kind='user', {surfaceOp:'append'})(web 流可见、不唤醒、
12
+ * 等效"用户发消息后点停止")。宿主 agent 无 whenIdle → 降级 agent.inject(回合安全, 不唤醒);
13
+ * 两者都无/等超时 → 放弃并返回原因(不硬塞)。
14
+ *
15
+ * 事件源(gateway/bootstrap rawEvent 分发, 见 group-join-request.ts 的 GROUP_JOIN_REQUEST):
16
+ * - GROUP_JOIN_REQUEST(intent 1<<24, 需 watchJoinRequests 订阅) → group-join-request.ts 处理,
17
+ * 本模块负责 hub 转发;
18
+ * - GROUP_MEMBER_ADD(同 intent 1<<24): 新成员入群 → 记成员台账 + hub;
19
+ * - GROUP_ADD_ROBOT(intent 1<<25, 基础订阅): 机器人被拉进群 → 记群台账 + hub。
20
+ */
21
+ import { createUserMessage } from '@deepseek-ai/dsh-llm';
22
+ import { join } from 'node:path';
23
+ import { appendGroupMember, appendLedger } from './chat-ledger.js';
24
+ /** 等待回合空闲的最长时间(宿主 whenIdle 正常秒回; 超时按 busy 放弃, 防止事件处理挂起) */
25
+ const IDLE_WAIT_MS = 8_000;
26
+ function tail(id, n = 6) {
27
+ return id && id.length > n ? '…' + id.slice(-n) : (id ?? '');
28
+ }
29
+ /**
30
+ * 回合安全地把一条"模拟用户消息"append 进目标会话(web 流可见、不唤醒、不坏记录)。
31
+ * 优先级: ①agent.whenIdle() 空闲后 session.append; ②无 whenIdle 时 agent.inject(宿主回合安全)。
32
+ * @returns 'ok' | 'no-agent' | 'no-append' | 'busy' | 'fail'
33
+ */
34
+ export async function safeAppendUserMessage(agent, text, logger) {
35
+ if (!agent)
36
+ return 'no-agent';
37
+ const a = agent;
38
+ let msg;
39
+ try {
40
+ msg = createUserMessage({
41
+ content: [{ type: 'text', text }],
42
+ source: { kind: 'user' },
43
+ });
44
+ }
45
+ catch {
46
+ return 'fail';
47
+ }
48
+ // ① 等回合空闲再 append(主人硬约束: 回合中 append 坏记录)
49
+ if (a.session && typeof a.session.append === 'function') {
50
+ if (typeof a.whenIdle === 'function') {
51
+ let idle = false;
52
+ try {
53
+ await Promise.race([
54
+ a.whenIdle().then(() => { idle = true; }),
55
+ new Promise((resolve) => setTimeout(resolve, IDLE_WAIT_MS)),
56
+ ]);
57
+ }
58
+ catch { /* whenIdle 异常按未空闲处理 */ }
59
+ if (!idle) {
60
+ logger.warn?.('[group-hub] 回合未在等待窗口内空闲, 放弃 append(避免坏聊天记录)');
61
+ return 'busy';
62
+ }
63
+ }
64
+ try {
65
+ a.session.append('user/message', msg, { surfaceOp: 'append' });
66
+ return 'ok';
67
+ }
68
+ catch (err) {
69
+ logger.warn?.(`[group-hub] session.append 失败: ${err instanceof Error ? err.message : String(err)}`);
70
+ return 'fail';
71
+ }
72
+ }
73
+ // ② 宿主回合安全注入(无 session.append 能力时)
74
+ if (typeof a.inject === 'function') {
75
+ try {
76
+ a.inject(msg);
77
+ return 'ok';
78
+ }
79
+ catch {
80
+ return 'fail';
81
+ }
82
+ }
83
+ return 'no-append';
84
+ }
85
+ /**
86
+ * 群事件 → 群组管理器会话(hub)注入。hubSessionId 空/hubNotify=false → 'no-hub'。
87
+ * 会话寻址: manager.findBySessionId(hubSessionId)(宿主 QQ 会话 record, fork 后仍为当前 id)。
88
+ * @returns 'ok' | 'no-hub' | 'no-session' | 其它见 safeAppendUserMessage
89
+ */
90
+ export async function notifyGroupHub(manager, config, logger, ev) {
91
+ const ga = config.groupAdmin;
92
+ if (!ga?.hubNotify || !ga.hubSessionId)
93
+ return 'no-hub';
94
+ try {
95
+ const rec = manager.findBySessionId(ga.hubSessionId);
96
+ if (!rec) {
97
+ logger.warn?.(`[group-hub] hub 会话未找到: ${ga.hubSessionId.slice(0, 8)}…(该会话可能已重建/换绑, 请在 dock 重新设置)`);
98
+ return 'no-session';
99
+ }
100
+ const gidShort = tail(ev.gid, 8);
101
+ const lines = [`【群管·${ev.kind === 'join_request' ? '入群申请' : ev.kind === 'member_add' ? '新成员入群' : '机器人被拉入群'}】群 ${gidShort}`];
102
+ if (ev.kind === 'join_request') {
103
+ lines.push(`申请人: ${ev.name ?? '(未知昵称)'}(${tail(ev.memberOpenid)})`);
104
+ if (ev.extra)
105
+ lines.push(ev.extra);
106
+ lines.push('可回复我处理(如: 查看入群申请 / 通过 / 拒绝)');
107
+ }
108
+ else if (ev.kind === 'member_add') {
109
+ lines.push(`新成员 openid: ${tail(ev.memberOpenid)}${ev.extra ? ' · ' + ev.extra : ''}`);
110
+ }
111
+ else {
112
+ lines.push(`操作者: ${tail(ev.memberOpenid)}${ev.extra ? ' · ' + ev.extra : ''}`);
113
+ lines.push('群台账已自动登记, 之后该群消息会持续累积。');
114
+ }
115
+ const r = await safeAppendUserMessage(rec.agent, lines.join('\n'), logger);
116
+ logger.info(`[group-hub] ${ev.kind} → hub(${ga.hubSessionId.slice(0, 8)}…) ${r}`);
117
+ return r;
118
+ }
119
+ catch (err) {
120
+ logger.warn?.(`[group-hub] 转发异常: ${err instanceof Error ? err.message : String(err)}`);
121
+ return 'fail';
122
+ }
123
+ }
124
+ /** GROUP_MEMBER_ADD: 新成员入群 → 记成员台账(事件无 username, 只落 openid)+ hub 通知 */
125
+ export async function handleGroupMemberAddEvent(data, opts) {
126
+ const { config, logger, manager } = opts;
127
+ const ev = (data ?? {});
128
+ const gid = ev.group_openid;
129
+ const mid = ev.member_openid;
130
+ if (!gid || !mid) {
131
+ logger.warn?.(`[group-hub] member_add 事件缺字段: ${JSON.stringify(ev).slice(0, 200)}`);
132
+ return false;
133
+ }
134
+ // 本地成员兜底名单与群消息同源: 记一条(名字留空, 之后群内发言会补上)
135
+ try {
136
+ const dataDir = joinDataDir(config);
137
+ appendGroupMember(dataDir, { ts: Date.now(), gid, mid, name: undefined });
138
+ }
139
+ catch { /* 台账失败不阻断 */ }
140
+ await notifyGroupHub(manager, config, logger, {
141
+ kind: 'member_add',
142
+ gid,
143
+ memberOpenid: mid,
144
+ extra: ev.user_openid ? `user_openid ${tail(ev.user_openid)}` : undefined,
145
+ });
146
+ return true;
147
+ }
148
+ /** GROUP_ADD_ROBOT: 机器人被拉进新群 → 记群台账(known-chats group 首见)+ hub 通知 */
149
+ export async function handleGroupAddRobotEvent(data, opts) {
150
+ const { config, logger, manager } = opts;
151
+ const ev = (data ?? {});
152
+ const gid = ev.group_openid;
153
+ if (!gid) {
154
+ logger.warn?.(`[group-hub] add_robot 事件缺 group_openid: ${JSON.stringify(ev).slice(0, 200)}`);
155
+ return false;
156
+ }
157
+ try {
158
+ const dataDir = joinDataDir(config);
159
+ appendLedger(dataDir, { ts: Date.now(), scope: 'group', id: gid, name: undefined });
160
+ }
161
+ catch { /* 台账失败不阻断 */ }
162
+ await notifyGroupHub(manager, config, logger, {
163
+ kind: 'add_robot',
164
+ gid,
165
+ memberOpenid: ev.op_member_openid,
166
+ });
167
+ return true;
168
+ }
169
+ /** 与 chat-ledger 同 dataDir(表情包目录)的取法: config.dataRoot/cwd + 表情包 */
170
+ function joinDataDir(config) {
171
+ const root = config.dataRoot || config.cwd || process.cwd();
172
+ return join(root, '表情包');
173
+ }
174
+ //# sourceMappingURL=group-hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-hub.js","sourceRoot":"","sources":["../../src/features/group-hub.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"group-join-request.d.ts","sourceRoot":"","sources":["../../src/features/group-join-request.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACzH,aAAa,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,gCAAgC;AAChC,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAuCD,+CAA+C;AAC/C,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,EAAE,EAAE,kBAAkB,GACrB,IAAI,CAUN;AAED,sCAAsC;AACtC,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,CAAC,EAAE,MAAM,GACX,kBAAkB,EAAE,CAItB;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE;IACJ,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;CACzB,GACA,OAAO,CAAC,OAAO,CAAC,CA2GlB"}
1
+ {"version":3,"file":"group-join-request.d.ts","sourceRoot":"","sources":["../../src/features/group-join-request.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACzH,aAAa,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,gCAAgC;AAChC,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAuCD,+CAA+C;AAC/C,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,EAAE,EAAE,kBAAkB,GACrB,IAAI,CAUN;AAED,sCAAsC;AACtC,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,CAAC,EAAE,MAAM,GACX,kBAAkB,EAAE,CAItB;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE;IACJ,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;CACzB,GACA,OAAO,CAAC,OAAO,CAAC,CA+GlB"}
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import { mkdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs';
21
21
  import { join } from 'node:path';
22
- import { createUserMessage } from '@deepseek-ai/dsh-llm';
22
+ import { notifyGroupHub, safeAppendUserMessage } from './group-hub.js';
23
23
  /** 内存去重(join_request_id)与群内提醒限频: 每群 5 分钟至多 1 条, 防风暴 */
24
24
  const recentIds = new Map();
25
25
  const lastGroupNotify = new Map();
@@ -122,23 +122,39 @@ export async function handleGroupJoinRequestEvent(data, opts) {
122
122
  };
123
123
  pushPendingJoinRequest(config.cwd, item);
124
124
  logger.info(`[group-join] 新入群申请: gid=${gid} user=${ev.username ?? '?'}(${mid.slice(0, 10)}…) src=${ev.apply_source ?? '?'}${ev.risk_tips ? ` risk=${ev.risk_tips}` : ''}`);
125
- // 通知策略(主人定稿 2026-09-05 21:10):
126
- // 要"模拟用户消息 + 模拟点停止" = 把申请直接 append 为该群 agent 的 session log 一条
125
+ // 通知策略(主人定稿 2026-09-05 21:10 + M2 2026-09-09 扩展):
126
+ // 要"模拟用户消息 + 模拟点停止" = 把申请 append 为目标会话的 session log 一条
127
127
  // user/message 事件(turn() 中让消息显示在 web 的那一步), 但【不 wake 不开回合】→
128
128
  // web 会话流能看到这条消息(像用户真发过), AI 却不会主动思考/回复(不撞 QQ 限流)。
129
- // 主人下次真人消息开新回合时, 这条 user/message 作为 log 历史被 deriveMessages 组装进
129
+ // 主人下条真人消息开新回合时, 这条 user/message 作为 log 历史被 deriveMessages 组装进
130
130
  // 上下文 → AI 自然看到申请并能接应"通过/拒绝"。
131
+ // 🔒 硬约束(M2 主人指正): LLM 回合进行中严禁 session.append(拆散 tool_calls 坏记录),
132
+ // 统一走 safeAppendUserMessage = whenIdle 等回合空闲再 append; 超时/无能力 → 兜底 QQ 卡。
133
+ const srcPart = ev.apply_source === 'invited'
134
+ ? `被邀请${ev.invited_by ? `(邀请人 ${ev.invited_by.slice(0, 10)}…)` : ''}`
135
+ : '主动申请';
136
+ const verifyPart = verify ? ` 验证「${verify}」` : '';
137
+ const riskPart = ev.risk_tips ? ` ⚠️${ev.risk_tips}` : '';
138
+ const summary = `[入群申请] ${ev.username ?? '(未知昵称)'}(${srcPart})${verifyPart}${riskPart}`;
139
+ // ① 群组管理器(hub): 配置了 hubSessionId → 群事件汇总注入该会话; 成功则群内不再打扰
140
+ const hubR = await notifyGroupHub(manager, config, logger, {
141
+ kind: 'join_request',
142
+ gid,
143
+ memberOpenid: mid,
144
+ name: ev.username,
145
+ extra: verify ? `验证「${verify}」` : (ev.apply_source === 'invited' ? '被邀请' : undefined),
146
+ });
147
+ if (hubR === 'ok') {
148
+ item.notified = true;
149
+ pushPendingJoinRequest(config.cwd, item);
150
+ logger.info(`[group-join] 已转发群组管理器(hub), 跳过群内提醒 gid=${gid}`);
151
+ return true;
152
+ }
153
+ // ② 无 hub / 转发未成功 → 原群内提醒(回合安全 append; busy/fail 兜底 QQ 静态卡)
131
154
  if (config.groupAdmin?.notifyInGroup !== false) {
132
155
  const last = lastGroupNotify.get(gid) ?? 0;
133
156
  if (now - last >= GROUP_NOTIFY_MIN_GAP_MS) {
134
157
  lastGroupNotify.set(gid, now);
135
- const userPart = ev.username ?? '(未知昵称)';
136
- const srcPart = ev.apply_source === 'invited'
137
- ? `被邀请${ev.invited_by ? `(邀请人 ${ev.invited_by.slice(0, 10)}…)` : ''}`
138
- : '主动申请';
139
- const verifyPart = verify ? ` 验证「${verify}」` : '';
140
- const riskPart = ev.risk_tips ? ` ⚠️${ev.risk_tips}` : '';
141
- const summary = `[入群申请] ${userPart}(${srcPart})${verifyPart}${riskPart}`;
142
158
  // 有活跃会话直接用; 没有(空闲被回收)→ getOrCreate 恢复/重建会话(不触发回合, 只保证 log 存在)
143
159
  let record = manager.findByPeer('group', gid);
144
160
  if (!record) {
@@ -151,29 +167,15 @@ export async function handleGroupJoinRequestEvent(data, opts) {
151
167
  logger.warn(`[group-join] getOrCreate 失败: ${err instanceof Error ? err.message : String(err)}`);
152
168
  }
153
169
  }
154
- const sess = record?.agent?.session;
155
- if (sess && typeof sess.append === 'function') {
156
- try {
157
- // 与 turn() 同款: session.append('user/message', msg, {surfaceOp:'append'}) → web 可见;
158
- // 不调 send/followup → 不 wakeDriver → AI 不触发回合(等效用户发消息后点停止)。
159
- const msg = createUserMessage({
160
- content: [{ type: 'text', text: summary }],
161
- source: { kind: 'user' },
162
- });
163
- sess.append('user/message', msg, { surfaceOp: 'append' });
164
- item.notified = true;
165
- pushPendingJoinRequest(config.cwd, item);
166
- logger.info(`[group-join] 已 append user/message 到会话 log(不唤醒, 模拟用户消息+停止) gid=${gid}`);
167
- return true;
168
- }
169
- catch (err) {
170
- logger.warn(`[group-join] append 失败: ${err instanceof Error ? err.message : String(err)}`);
171
- }
172
- }
173
- else {
174
- logger.warn(`[group-join] 会话无 append 能力, 兜底发 QQ 卡片 gid=${gid}`);
170
+ const safeR = await safeAppendUserMessage(record?.agent, summary, logger);
171
+ if (safeR === 'ok') {
172
+ item.notified = true;
173
+ pushPendingJoinRequest(config.cwd, item);
174
+ logger.info(`[group-join] 已 append user/message 到会话 log(不唤醒, 模拟用户消息+停止) gid=${gid}`);
175
+ return true;
175
176
  }
176
- // 兜底: 无会话/append 不可用 → 发一条静态群消息提醒(不静默丢)
177
+ logger.warn(`[group-join] 群内 append ${safeR}, 兜底发 QQ 卡片 gid=${gid}`);
178
+ // 兜底: 无会话/append 不可用/回合忙 → 发一条静态群消息提醒(不静默丢)
177
179
  try {
178
180
  const target = { scope: 'group', targetId: gid };
179
181
  await sender.sendMarkdown(target, `${summary}\n\n主人可回复让我查看/审批(如: 查看入群申请)。`);
@@ -1 +1 @@
1
- {"version":3,"file":"group-join-request.js","sourceRoot":"","sources":["../../src/features/group-join-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group-join-request.js","sourceRoot":"","sources":["../../src/features/group-join-request.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"qq-approval.d.ts","sourceRoot":"","sources":["../../src/features/qq-approval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qq-approval.d.ts","sourceRoot":"","sources":["../../src/features/qq-approval.ts"],"names":[],"mappings":"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"}
@@ -95,7 +95,9 @@ export class QqApprovalController {
95
95
  reason ? `原因:${reason}` : '',
96
96
  '',
97
97
  `仅本次有效,${seconds} 秒后自动拒绝。`,
98
- '(按钮不可用时请回复 `/approve|/deny + 验证码`)',
98
+ '',
99
+ `🔑 验证码:\`${code}\``,
100
+ '(点上方按钮最快; 按钮不可用时回复 `/approve ' + code + '` 或 `/deny ' + code + '`)',
99
101
  ].filter(Boolean).join('\n');
100
102
  try {
101
103
  // ① 按钮卡片优先: 按钮仅发起者本人可点(permission.specify_user_ids = 发起者 openid)