@zaofan/dsh-qqbot 1.10.9 → 1.10.11

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 (69) hide show
  1. package/README.md +86 -2
  2. package/README_EN.md +31 -0
  3. package/client/qqbot-settings.js +6313 -6196
  4. package/dist/channel-tools.d.ts +0 -12
  5. package/dist/channel-tools.d.ts.map +1 -1
  6. package/dist/channel-tools.js +202 -20
  7. package/dist/channel-tools.js.map +1 -1
  8. package/dist/config.d.ts +18 -0
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +11 -0
  11. package/dist/config.js.map +1 -1
  12. package/dist/features/botplay.d.ts.map +1 -1
  13. package/dist/features/botplay.js +6 -2
  14. package/dist/features/botplay.js.map +1 -1
  15. package/dist/features/ext-capabilities.d.ts +2 -0
  16. package/dist/features/ext-capabilities.d.ts.map +1 -1
  17. package/dist/features/ext-capabilities.js +6 -0
  18. package/dist/features/ext-capabilities.js.map +1 -1
  19. package/dist/features/ext-outbound.d.ts +238 -0
  20. package/dist/features/ext-outbound.d.ts.map +1 -0
  21. package/dist/features/ext-outbound.js +518 -0
  22. package/dist/features/ext-outbound.js.map +1 -0
  23. package/dist/features/ext-reload.d.ts +19 -0
  24. package/dist/features/ext-reload.d.ts.map +1 -1
  25. package/dist/features/ext-reload.js +40 -0
  26. package/dist/features/ext-reload.js.map +1 -1
  27. package/dist/features/msg-history.d.ts +78 -0
  28. package/dist/features/msg-history.d.ts.map +1 -0
  29. package/dist/features/msg-history.js +312 -0
  30. package/dist/features/msg-history.js.map +1 -0
  31. package/dist/features/msg-recent.d.ts +72 -0
  32. package/dist/features/msg-recent.d.ts.map +1 -0
  33. package/dist/features/msg-recent.js +131 -0
  34. package/dist/features/msg-recent.js.map +1 -0
  35. package/dist/features/qq-user-questions.d.ts +6 -0
  36. package/dist/features/qq-user-questions.d.ts.map +1 -1
  37. package/dist/features/qq-user-questions.js +17 -3
  38. package/dist/features/qq-user-questions.js.map +1 -1
  39. package/dist/gateway/bootstrap.d.ts.map +1 -1
  40. package/dist/gateway/bootstrap.js +83 -4
  41. package/dist/gateway/bootstrap.js.map +1 -1
  42. package/dist/gateway/middleware-setup.d.ts.map +1 -1
  43. package/dist/gateway/middleware-setup.js +55 -0
  44. package/dist/gateway/middleware-setup.js.map +1 -1
  45. package/dist/session/session-manager.d.ts.map +1 -1
  46. package/dist/session/session-manager.js +5 -2
  47. package/dist/session/session-manager.js.map +1 -1
  48. package/dist/transport/inbound.d.ts.map +1 -1
  49. package/dist/transport/inbound.js +90 -4
  50. package/dist/transport/inbound.js.map +1 -1
  51. package/dist/transport/msg-content-cache.d.ts +50 -0
  52. package/dist/transport/msg-content-cache.d.ts.map +1 -1
  53. package/dist/transport/msg-content-cache.js +58 -14
  54. package/dist/transport/msg-content-cache.js.map +1 -1
  55. package/dist/transport/outbound-buffer.d.ts +31 -1
  56. package/dist/transport/outbound-buffer.d.ts.map +1 -1
  57. package/dist/transport/outbound-buffer.js +49 -1
  58. package/dist/transport/outbound-buffer.js.map +1 -1
  59. package/dist/transport/outbound.d.ts.map +1 -1
  60. package/dist/transport/outbound.js +20 -0
  61. package/dist/transport/outbound.js.map +1 -1
  62. package/examples/ext-commands//344/274/232/350/257/235/345/210/227/350/241/250.mjs +756 -742
  63. package/examples/ext-commands//345/224/244/351/206/222.mjs +71 -0
  64. package/examples/ext-commands//345/255/220/344/274/232/350/257/235.mjs +16 -5
  65. package/examples/ext-outbound/README.md +139 -0
  66. package/examples/ext-outbound/sticker-semantic.mjs +524 -0
  67. package/examples/ext-tools/sticker_auto.mjs +260 -0
  68. package/examples/ext-tools/vote.mjs +534 -323
  69. package/package.json +144 -144
@@ -0,0 +1,238 @@
1
+ import type { Logger } from '../types.js';
2
+ /** 出站扩展子目录名(与 inbound / hooks / tools / botplay 并列的第六套) */
3
+ export declare const EXT_OUTBOUND_SUBDIR = "outbound";
4
+ /** 其他扩展取"出站操控器"的全局键(Symbol.for ⇒ 跨模块实例单例,同 ext-inbound 的 HANDLER_KEY 手法) */
5
+ export declare const OUTBOUND_API_KEY: unique symbol;
6
+ /** 一次出站的载体(正文 + 元信息),扩展可读写 `text` */
7
+ export interface OutboundCtx {
8
+ /** 本条出站正文(扩展可读;改它请用 rewrite()) */
9
+ text: string;
10
+ /** 解析后的段(rich-media.parseOutbound 的结果;拿不到时是空数组) */
11
+ segments: unknown[];
12
+ /** 这条出站是什么 */
13
+ kind: 'text' | 'markdown' | 'media' | 'card' | 'forward' | 'other';
14
+ /** 回复目标(被动回复优先靠它自带的 msgId) */
15
+ target: {
16
+ scope?: string;
17
+ peerId?: string;
18
+ msgId?: string;
19
+ } | null;
20
+ /** 本回合 id(同一回合的所有正文块共享;没有回合概念时是空串) */
21
+ turnId: string;
22
+ /** 本回合内的第几个正文块(从 0 起) */
23
+ chunkIndex: number;
24
+ /** **是否本回合最后一个正文块** —— 示范(按正文配表情包)就看它,避免每块都配一张 */
25
+ isLastChunk: boolean;
26
+ /** 当前发送器(发媒体/文本用) */
27
+ sender: unknown;
28
+ /** 数据根 */
29
+ dataRoot: string;
30
+ /** 主人 openid 白名单 */
31
+ owners: string[];
32
+ /** 带 token 的官方 API 调用 */
33
+ apiCall?: unknown;
34
+ /** 插件自己的 cordis Context(能力包里的 kernel) */
35
+ kernel?: unknown;
36
+ /** 插件 logger */
37
+ logger: Logger;
38
+ /** 改写本条出站正文;返回 false = 已经消灭了(改也没意义) */
39
+ rewrite(newText: string): boolean;
40
+ /** 消灭本条出站(**之后不要调 next()**,否则引擎会记 warn);返回 false = 已熔断/被拒 */
41
+ annihilate(reason: string): boolean;
42
+ /**
43
+ * ★★ 2026-10-16 主人定的架构:**丢后台** ★★
44
+ *
45
+ * 出站链与"正文发送"唯一的联系就是**读一眼内容**;任何"选图/算分/发媒体"这类重活
46
+ * **一律丢到后台独立跑**,绝不 await、绝不阻塞正文 —— 正文该多快就多快,
47
+ * 图片是**事后补发**的(走 `ctx.sendMedia` 的"先被动后主动"独立通道)。
48
+ *
49
+ * 用法(扩展里):
50
+ * ```js
51
+ * ctx.background(async () => {
52
+ * const kw = await 选图耗时逻辑(ctx.text);
53
+ * await ctx.sendMedia({ path });
54
+ * });
55
+ * return next(); // ← 立刻放行正文,不等上面跑完
56
+ * ```
57
+ */
58
+ /**
59
+ * ★★ 2026-10-16:**这一趟是哪个阶段**(主人实测指出:一段回复有多段正文,
60
+ * 每段都各走一次 `sendRichOutbound` ⇒ "第一段"根本不是回合最后一块)★★
61
+ * · `'send'` = 正文**发送前**(挂载点在 `sendRichOutbound` 入口)—— 只做**改写/消灭**
62
+ * 这类必须同步生效的事;**配图不要放这里**。
63
+ * · `'turnEnd'` = **回合真正结束**(挂载点在 `outbound.ts` 的 `turn/end`:flush 之后、
64
+ * 与 passive 收尾同一时机)—— 这里 `text` 就是 `turnBlocks.last`,
65
+ * **是这一回合权威的最后一块正文**,且正文早发完了,配图随便慢。
66
+ */
67
+ phase: 'send' | 'turnEnd';
68
+ background(task: () => unknown): void;
69
+ /** 额外发一条媒体(**先被动后主动**);返回是否成功 */
70
+ sendMedia(input: {
71
+ path?: string;
72
+ url?: string;
73
+ text?: string;
74
+ }): Promise<boolean>;
75
+ /** 额外发一条文本(**先被动后主动**);返回是否成功 */
76
+ send(text: string, opts?: {
77
+ adaptive?: boolean;
78
+ }): Promise<boolean>;
79
+ /** 审计/诊断一行(走 logger.debug + 落盘审计,最坏也只是丢日志,绝不抛) */
80
+ note(msg: string): void;
81
+ emit?: (text: string) => unknown;
82
+ markdown?: (text: string) => unknown;
83
+ image?: (url: string) => unknown;
84
+ media?: (kind: string, source: string, text?: string) => unknown;
85
+ store?: {
86
+ load: (k: string) => unknown;
87
+ save: (k: string, v: unknown) => unknown;
88
+ };
89
+ identity?: {
90
+ user?: unknown;
91
+ owners?: string[];
92
+ peer?: unknown;
93
+ };
94
+ api?: (path: string) => Promise<unknown>;
95
+ appendSilent?: (text: string) => unknown;
96
+ appendWake?: (text: string) => unknown;
97
+ }
98
+ /** 出站中间件签名:与 inbound 的 `(ctx, next)` 对称 */
99
+ export type OutboundMiddleware = (ctx: OutboundCtx, next: () => Promise<void>) => unknown;
100
+ /** 一个已装载的出站扩展 */
101
+ export interface OutboundExtension {
102
+ /** 文件名(含扩展名) */
103
+ file: string;
104
+ /** 绝对路径 */
105
+ path: string;
106
+ /** 展示名:模块导出的 `name` 优先,否则去扩展名的文件名 */
107
+ name: string;
108
+ /** 中间件 */
109
+ middleware: OutboundMiddleware;
110
+ /** 可选:`dispose()` */
111
+ dispose?: () => unknown;
112
+ }
113
+ /** 一次装载的汇总 */
114
+ export interface OutboundLoadResult {
115
+ total: number;
116
+ skipped: number;
117
+ /** 按文件名升序(直接交给 runOutboundChain) */
118
+ middleware: OutboundMiddleware[];
119
+ extensions: OutboundExtension[];
120
+ files: string[];
121
+ }
122
+ export interface LoadOutboundOptions {
123
+ dataRoot: string;
124
+ logger: Logger;
125
+ }
126
+ /** 跑链的入参(除正文外都可缺,缺了对应能力降级) */
127
+ export interface RunOutboundOptions {
128
+ dataRoot?: string;
129
+ owners?: string[];
130
+ sender?: unknown;
131
+ target?: unknown;
132
+ turnId?: string;
133
+ chunkIndex?: number;
134
+ isLastChunk?: boolean;
135
+ kind?: OutboundCtx['kind'];
136
+ segments?: unknown[];
137
+ apiCall?: unknown;
138
+ kernel?: unknown;
139
+ logger?: Logger;
140
+ /** ★ 2026-10-16:'send'(正文发送前,默认)或 'turnEnd'(回合结束,可做配图) */
141
+ phase?: 'send' | 'turnEnd';
142
+ }
143
+ export declare function outboundExtensionsDir(dataRoot: string): string;
144
+ /** 配置出站扩展的数据根与日志器(插件启动时调一次;热刷时复用) */
145
+ export declare function configureOutboundExtensions(opts: {
146
+ dataRoot: string;
147
+ logger: Logger;
148
+ }): void;
149
+ /** 重新装载(供热刷用):没配置过则安静返回空结果 */
150
+ export declare function reloadOutboundExtensions(): Promise<OutboundLoadResult>;
151
+ /**
152
+ * 扫描 `{dataRoot}/.qqbot-extensions/outbound/*.mjs` 并装载。
153
+ *
154
+ * 目录不存在 / 为空 → 返回空结果、**不打日志**;
155
+ * 单文件失败 → 只 warn 并继续;本函数**永不抛出**。
156
+ * 重新调用 = 热重载(`loaded` 整体替换)。
157
+ */
158
+ export declare function loadOutboundExtensions(opts: LoadOutboundOptions): Promise<OutboundLoadResult>;
159
+ /** 当前已装载的出站扩展(诊断用) */
160
+ export declare function listOutboundExtensions(): OutboundExtension[];
161
+ /** 改文件 + tools_reload = 复位通道 */
162
+ export declare function resetOutboundBreaker(name?: string): void;
163
+ /** 当前是否正在跑出站链(其他扩展可用于"别在我发消息时又触发我") */
164
+ export declare function outboundActive(): boolean;
165
+ /** 最近一次出站的 ctx(其他扩展可用它拿 target 往同一个会话补发) */
166
+ export declare function lastOutboundCtx(): OutboundCtx | null;
167
+ /**
168
+ * 构造一条出站的 ctx(**导出**出来,方便其他扩展/工具直接造一条去发)。
169
+ */
170
+ export declare function makeOutboundCtx(initialText: string, opts?: RunOutboundOptions, state?: {
171
+ text: string;
172
+ killed: boolean;
173
+ reason: string;
174
+ }): OutboundCtx;
175
+ /** 一条出站的执行结果 */
176
+ export interface OutboundRunResult {
177
+ /** 最终要发的正文(可能被扩展改写) */
178
+ text: string;
179
+ /** 是否被消灭(调用方应**跳过发送**) */
180
+ killed: boolean;
181
+ /** 消灭原因(诊断用) */
182
+ reason: string;
183
+ /** 跑过的扩展数 */
184
+ ran: number;
185
+ }
186
+ /**
187
+ * 依次跑出站链(文件名升序,与 inbound 同款"链式 + 幂等 next")。
188
+ *
189
+ * 语义(**与 inbound 对齐**):
190
+ * · `next()` **幂等**:误调两次只算第一次;
191
+ * · `next()` 一定被 await(扩展忘 await 时引擎替它 await);
192
+ * · 扩展**不调 next() 且没 annihilate** ⇒ 引擎替它放行(防新手卡死链)+ 记 warn;
193
+ * · `annihilate()` 之后**即便又调了 next() 也不再往下走**。
194
+ */
195
+ export declare function runOutboundChain(text: string, opts?: RunOutboundOptions): Promise<OutboundRunResult>;
196
+ /**
197
+ * ★★ 回合结束钩子(2026-10-16 主人定)★★
198
+ *
199
+ * 挂载点:`transport/outbound.ts` 的 `turn/end` —— 在 `buffer.flush()` 之后、
200
+ * 与 passive 收尾(`maybeResendLastBlock`)**同一时机**。传进来的 `lastText`
201
+ * 就是 `turnBlocks.last`,**是这一回合权威的最后一块正文**。
202
+ *
203
+ * 为什么需要它:一段 assistant 回复可能包含"正文 → 工具调用 → 正文"多段,
204
+ * 每段都各走一次 `sendRichOutbound`。若把配图挂在入口(phase='send'),
205
+ * 第一段就会被当成本回合正文拿去判定 —— **错得离谱**(主人 2026-10-16 实测抓到)。
206
+ *
207
+ * 扩展怎么写:在 `onOutbound(ctx, next)` 里判 `ctx.phase === 'turnEnd'` ⇒ 做配图;
208
+ * `phase === 'send'` ⇒ 只做改写/消灭(或直接 `next()`)。
209
+ */
210
+ export declare function runOutboundTurnEnd(lastText: string, opts?: RunOutboundOptions): Promise<OutboundRunResult>;
211
+ /**
212
+ * 直接经"先被动后主动"通道发一条东西。
213
+ *
214
+ * ⚠️ 这条通道**不跑出站扩展链**(否则自己发的又会被自己拦,形成回环);
215
+ * 要走链请用 {@link runOutboundChain}。
216
+ */
217
+ export declare function sendViaOutboundChannel(payload: {
218
+ text?: string;
219
+ path?: string;
220
+ url?: string;
221
+ kind?: string;
222
+ }, opts?: RunOutboundOptions, sendOpts?: {
223
+ adaptive?: boolean;
224
+ }): Promise<boolean>;
225
+ /**
226
+ * 其他扩展获取"出站操控器"的入口(`globalThis[OUTBOUND_API_KEY]`)。
227
+ *
228
+ * 用法(任何扩展里):
229
+ * ```js
230
+ * const ob = globalThis[Symbol.for('im-qqbot.outbound')];
231
+ * await ob?.send('补一句', { adaptive: true });
232
+ * await ob?.sendMedia({ path: 'D:/pics/a.png' });
233
+ * const target = ob?.last()?.target; // 往"刚才那个会话"发
234
+ * const scores = await ob?.embed('正文', ['标签A', '标签B']); // 本地小模型语义分(可为 null)
235
+ * ```
236
+ */
237
+ export declare function installOutboundApi(): void;
238
+ //# sourceMappingURL=ext-outbound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext-outbound.d.ts","sourceRoot":"","sources":["../../src/features/ext-outbound.ts"],"names":[],"mappings":"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"}