@tencent-connect/dsh-qqbot 0.4.0 → 0.5.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 (216) hide show
  1. package/.orange-ci.yml +2 -68
  2. package/CHANGELOG.md +56 -0
  3. package/CHANGELOG_EN.md +95 -0
  4. package/README.md +119 -18
  5. package/README_EN.md +107 -17
  6. package/cordis.patch.yml +1 -1
  7. package/cordis.yml +46 -3
  8. package/dist/commands/help.d.ts +6 -7
  9. package/dist/commands/help.d.ts.map +1 -1
  10. package/dist/commands/help.js +23 -7
  11. package/dist/commands/help.js.map +1 -1
  12. package/dist/commands/index.d.ts +7 -5
  13. package/dist/commands/index.d.ts.map +1 -1
  14. package/dist/commands/index.js +12 -12
  15. package/dist/commands/index.js.map +1 -1
  16. package/dist/commands/misc.d.ts +10 -8
  17. package/dist/commands/misc.d.ts.map +1 -1
  18. package/dist/commands/misc.js +45 -8
  19. package/dist/commands/misc.js.map +1 -1
  20. package/dist/commands/model.d.ts +3 -4
  21. package/dist/commands/model.d.ts.map +1 -1
  22. package/dist/commands/model.js +8 -7
  23. package/dist/commands/model.js.map +1 -1
  24. package/dist/commands/preset.d.ts +8 -0
  25. package/dist/commands/preset.d.ts.map +1 -0
  26. package/dist/commands/preset.js +52 -0
  27. package/dist/commands/preset.js.map +1 -0
  28. package/dist/commands/session.d.ts +11 -7
  29. package/dist/commands/session.d.ts.map +1 -1
  30. package/dist/commands/session.js +29 -13
  31. package/dist/commands/session.js.map +1 -1
  32. package/dist/commands/status.d.ts +3 -4
  33. package/dist/commands/status.d.ts.map +1 -1
  34. package/dist/commands/status.js +2 -1
  35. package/dist/commands/status.js.map +1 -1
  36. package/dist/commands/types.d.ts +9 -2
  37. package/dist/commands/types.d.ts.map +1 -1
  38. package/dist/config.d.ts +40 -0
  39. package/dist/config.d.ts.map +1 -1
  40. package/dist/config.js +45 -9
  41. package/dist/config.js.map +1 -1
  42. package/dist/features/answer-parser.d.ts +9 -0
  43. package/dist/features/answer-parser.d.ts.map +1 -0
  44. package/dist/features/answer-parser.js +23 -0
  45. package/dist/features/answer-parser.js.map +1 -0
  46. package/dist/features/approval-channel.d.ts +76 -0
  47. package/dist/features/approval-channel.d.ts.map +1 -0
  48. package/dist/features/approval-channel.js +142 -0
  49. package/dist/features/approval-channel.js.map +1 -0
  50. package/dist/features/approval-renderer.d.ts +18 -0
  51. package/dist/features/approval-renderer.d.ts.map +1 -0
  52. package/dist/features/approval-renderer.js +52 -0
  53. package/dist/features/approval-renderer.js.map +1 -0
  54. package/dist/features/button-utils.d.ts +33 -0
  55. package/dist/features/button-utils.d.ts.map +1 -0
  56. package/dist/features/button-utils.js +27 -0
  57. package/dist/features/button-utils.js.map +1 -0
  58. package/dist/features/history-store.d.ts.map +1 -1
  59. package/dist/features/history-store.js +0 -1
  60. package/dist/features/history-store.js.map +1 -1
  61. package/dist/features/question-channel.d.ts +96 -0
  62. package/dist/features/question-channel.d.ts.map +1 -0
  63. package/dist/features/question-channel.js +234 -0
  64. package/dist/features/question-channel.js.map +1 -0
  65. package/dist/features/question-renderer.d.ts +20 -0
  66. package/dist/features/question-renderer.d.ts.map +1 -0
  67. package/dist/features/question-renderer.js +70 -0
  68. package/dist/features/question-renderer.js.map +1 -0
  69. package/dist/gateway/bootstrap.d.ts +3 -3
  70. package/dist/gateway/bootstrap.d.ts.map +1 -1
  71. package/dist/gateway/bootstrap.js +84 -8
  72. package/dist/gateway/bootstrap.js.map +1 -1
  73. package/dist/gateway/index.d.ts +2 -2
  74. package/dist/gateway/index.js +2 -2
  75. package/dist/gateway/middleware-setup.d.ts +3 -3
  76. package/dist/gateway/middleware-setup.d.ts.map +1 -1
  77. package/dist/gateway/middleware-setup.js +9 -7
  78. package/dist/gateway/middleware-setup.js.map +1 -1
  79. package/dist/index.d.ts +4 -3
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +44 -25
  82. package/dist/index.js.map +1 -1
  83. package/dist/media/media-cleaner.d.ts +19 -0
  84. package/dist/media/media-cleaner.d.ts.map +1 -0
  85. package/dist/media/media-cleaner.js +81 -0
  86. package/dist/media/media-cleaner.js.map +1 -0
  87. package/dist/media/send-file-tool.d.ts +35 -0
  88. package/dist/media/send-file-tool.d.ts.map +1 -0
  89. package/dist/media/send-file-tool.js +150 -0
  90. package/dist/media/send-file-tool.js.map +1 -0
  91. package/dist/media/vision-tool.d.ts +16 -0
  92. package/dist/media/vision-tool.d.ts.map +1 -0
  93. package/dist/media/vision-tool.js +241 -0
  94. package/dist/media/vision-tool.js.map +1 -0
  95. package/dist/middleware/attachment.d.ts +3 -3
  96. package/dist/middleware/attachment.d.ts.map +1 -1
  97. package/dist/middleware/attachment.js +17 -4
  98. package/dist/middleware/attachment.js.map +1 -1
  99. package/dist/middleware/question-answer.d.ts +10 -0
  100. package/dist/middleware/question-answer.d.ts.map +1 -0
  101. package/dist/middleware/question-answer.js +19 -0
  102. package/dist/middleware/question-answer.js.map +1 -0
  103. package/dist/model/index.d.ts +4 -4
  104. package/dist/model/index.js +3 -3
  105. package/dist/model/model-resolver.d.ts +27 -13
  106. package/dist/model/model-resolver.d.ts.map +1 -1
  107. package/dist/model/model-resolver.js +82 -27
  108. package/dist/model/model-resolver.js.map +1 -1
  109. package/dist/model/prefs-store.d.ts +6 -1
  110. package/dist/model/prefs-store.d.ts.map +1 -1
  111. package/dist/model/prefs-store.js +25 -1
  112. package/dist/model/prefs-store.js.map +1 -1
  113. package/dist/model/settings-reader.d.ts +1 -1
  114. package/dist/session/idle-evictor.d.ts +2 -2
  115. package/dist/session/idle-evictor.d.ts.map +1 -1
  116. package/dist/session/idle-evictor.js +1 -1
  117. package/dist/session/idle-evictor.js.map +1 -1
  118. package/dist/session/index.d.ts +3 -3
  119. package/dist/session/index.d.ts.map +1 -1
  120. package/dist/session/index.js +2 -2
  121. package/dist/session/session-manager.d.ts +67 -9
  122. package/dist/session/session-manager.d.ts.map +1 -1
  123. package/dist/session/session-manager.js +216 -20
  124. package/dist/session/session-manager.js.map +1 -1
  125. package/dist/session/types.d.ts +47 -1
  126. package/dist/session/types.d.ts.map +1 -1
  127. package/dist/setup/bind-routes.d.ts +78 -0
  128. package/dist/setup/bind-routes.d.ts.map +1 -0
  129. package/dist/setup/bind-routes.js +311 -0
  130. package/dist/setup/bind-routes.js.map +1 -0
  131. package/dist/setup/binding-service.d.ts +86 -0
  132. package/dist/setup/binding-service.d.ts.map +1 -0
  133. package/dist/setup/binding-service.js +175 -0
  134. package/dist/setup/binding-service.js.map +1 -0
  135. package/dist/setup/index.d.ts +50 -0
  136. package/dist/setup/index.d.ts.map +1 -0
  137. package/dist/setup/index.js +98 -0
  138. package/dist/setup/index.js.map +1 -0
  139. package/dist/setup/persist.d.ts +41 -0
  140. package/dist/setup/persist.d.ts.map +1 -0
  141. package/dist/setup/persist.js +201 -0
  142. package/dist/setup/persist.js.map +1 -0
  143. package/dist/setup/presenters.d.ts +40 -0
  144. package/dist/setup/presenters.d.ts.map +1 -0
  145. package/dist/setup/presenters.js +84 -0
  146. package/dist/setup/presenters.js.map +1 -0
  147. package/dist/setup/qr-svg.d.ts +8 -0
  148. package/dist/setup/qr-svg.d.ts.map +1 -0
  149. package/dist/setup/qr-svg.js +20 -0
  150. package/dist/setup/qr-svg.js.map +1 -0
  151. package/dist/shared/bind-protocol.d.ts +42 -0
  152. package/dist/shared/bind-protocol.d.ts.map +1 -0
  153. package/dist/shared/bind-protocol.js +19 -0
  154. package/dist/shared/bind-protocol.js.map +1 -0
  155. package/dist/shared/index.d.ts +3 -3
  156. package/dist/shared/index.d.ts.map +1 -1
  157. package/dist/shared/index.js +3 -3
  158. package/dist/shared/index.js.map +1 -1
  159. package/dist/shared/send-helper.js +1 -1
  160. package/dist/shared/utils.d.ts +10 -3
  161. package/dist/shared/utils.d.ts.map +1 -1
  162. package/dist/shared/utils.js +47 -6
  163. package/dist/shared/utils.js.map +1 -1
  164. package/dist/transport/attachment.d.ts +18 -7
  165. package/dist/transport/attachment.d.ts.map +1 -1
  166. package/dist/transport/attachment.js +77 -30
  167. package/dist/transport/attachment.js.map +1 -1
  168. package/dist/transport/inbound.d.ts +5 -4
  169. package/dist/transport/inbound.d.ts.map +1 -1
  170. package/dist/transport/inbound.js +120 -80
  171. package/dist/transport/inbound.js.map +1 -1
  172. package/dist/transport/index.d.ts +4 -4
  173. package/dist/transport/index.js +4 -4
  174. package/dist/transport/msgid-cache.d.ts +23 -0
  175. package/dist/transport/msgid-cache.d.ts.map +1 -0
  176. package/dist/transport/msgid-cache.js +57 -0
  177. package/dist/transport/msgid-cache.js.map +1 -0
  178. package/dist/transport/outbound-buffer.d.ts +9 -6
  179. package/dist/transport/outbound-buffer.d.ts.map +1 -1
  180. package/dist/transport/outbound-buffer.js +5 -5
  181. package/dist/transport/outbound-buffer.js.map +1 -1
  182. package/dist/transport/outbound.d.ts +9 -9
  183. package/dist/transport/outbound.d.ts.map +1 -1
  184. package/dist/transport/outbound.js +7 -7
  185. package/dist/transport/outbound.js.map +1 -1
  186. package/dist/transport/reply-limiter.d.ts +31 -0
  187. package/dist/transport/reply-limiter.d.ts.map +1 -0
  188. package/dist/transport/reply-limiter.js +50 -0
  189. package/dist/transport/reply-limiter.js.map +1 -0
  190. package/dist/transport/reply-target.d.ts +29 -0
  191. package/dist/transport/reply-target.d.ts.map +1 -0
  192. package/dist/transport/reply-target.js +55 -0
  193. package/dist/transport/reply-target.js.map +1 -0
  194. package/dist/transport/streaming-writer.d.ts +3 -3
  195. package/dist/transport/streaming-writer.d.ts.map +1 -1
  196. package/dist/transport/streaming-writer.js +1 -1
  197. package/dist/transport/streaming-writer.js.map +1 -1
  198. package/dist/transport/tool-presenter.d.ts +0 -1
  199. package/dist/transport/tool-presenter.d.ts.map +1 -1
  200. package/dist/transport/tool-presenter.js +0 -1
  201. package/dist/transport/tool-presenter.js.map +1 -1
  202. package/dist/types.d.ts +9 -15
  203. package/dist/types.d.ts.map +1 -1
  204. package/docs/assets/qqchannel.jpg +0 -0
  205. package/docs/assets/qqgroup.jpg +0 -0
  206. package/docs/assets/qrcode.png +0 -0
  207. package/lib/client.js +996 -0
  208. package/lib/client.js.map +1 -0
  209. package/package.json +44 -7
  210. package/pnpm-workspace.yaml +1 -0
  211. package/tsconfig.client.json +19 -0
  212. package/tsdown.client.config.ts +58 -0
  213. package/dist/setup.d.ts +0 -24
  214. package/dist/setup.d.ts.map +0 -1
  215. package/dist/setup.js +0 -170
  216. package/dist/setup.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { chunkMarkdownText } from '../transport/chunker.js';
1
+ import { chunkMarkdownText } from "../transport/chunker.js";
2
2
  /**
3
3
  * 分块发送 markdown(长内容自动切分)
4
4
  */
@@ -1,3 +1,5 @@
1
+ /** 插件版本号(从 package.json 读取,供 help/version 等展示真实版本) */
2
+ export declare const PLUGIN_VERSION: string;
1
3
  /**
2
4
  * 构造 User-Agent 头
3
5
  *
@@ -5,10 +7,15 @@
5
7
  */
6
8
  export declare function buildUserAgent(): string;
7
9
  /**
8
- * 从插件安装路径推导 profile 目录(node_modules 的父目录)
10
+ * 从插件安装路径推导 profile 目录
9
11
  *
10
- * 逐级向上查找名为 node_modules 的目录并返回其父目录。
11
- * 用 basename/dirname 而非字符串分隔符匹配,兼容 Windows(\)与 pnpm 嵌套结构。
12
+ * 主策略:逐级向上探测 profile 标志文件(cordis.patch.yml / pnpm-workspace.yaml)。
13
+ * Desktop profile 使用 pnpm workspace 布局(profiles/desktop/dependencies/
14
+ * node_modules/.pnpm/<pkg>/node_modules/...),插件嵌套于多级 node_modules,
15
+ * 仅按 node_modules 匹配会命中内层目录而返回错误位置。
16
+ *
17
+ * 兜底:无标志文件时沿用旧启发式(名为 node_modules 的目录的父目录),
18
+ * 覆盖 CLI profile 的浅层 npm 布局与未写入过 patch 的全新 profile。
12
19
  *
13
20
  * @param baseDir - 起始目录,缺省为插件根(可注入便于测试)
14
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AA2BA;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAoB,GAAG,MAAM,GAAG,IAAI,CAS1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AAcA,sDAAsD;AACtD,eAAO,MAAM,cAAc,QAAsB,CAAC;AAYlD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAoB,GAAG,MAAM,GAAG,IAAI,CAwB1E;AAuBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtD"}
@@ -3,15 +3,15 @@
3
3
  *
4
4
  * 纯函数与常量,供插件入口与其他模块复用。
5
5
  */
6
- import { readFileSync } from 'node:fs';
6
+ import { existsSync, readFileSync } from 'node:fs';
7
7
  import os from 'node:os';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { basename, dirname, resolve } from 'node:path';
10
10
  const __filename = fileURLToPath(import.meta.url);
11
11
  const __dirname = dirname(__filename);
12
12
  const PLUGIN_ROOT = resolve(__dirname, '../..');
13
- /** 插件版本号(从 package.json 读取) */
14
- const PLUGIN_VERSION = readPluginVersion();
13
+ /** 插件版本号(从 package.json 读取,供 help/version 等展示真实版本) */
14
+ export const PLUGIN_VERSION = readPluginVersion();
15
15
  function readPluginVersion() {
16
16
  try {
17
17
  const pkgPath = resolve(PLUGIN_ROOT, 'package.json');
@@ -31,14 +31,32 @@ export function buildUserAgent() {
31
31
  return `dsh-qqbot/${PLUGIN_VERSION} (Node/${process.versions.node}; ${os.platform()})`;
32
32
  }
33
33
  /**
34
- * 从插件安装路径推导 profile 目录(node_modules 的父目录)
34
+ * 从插件安装路径推导 profile 目录
35
35
  *
36
- * 逐级向上查找名为 node_modules 的目录并返回其父目录。
37
- * 用 basename/dirname 而非字符串分隔符匹配,兼容 Windows(\)与 pnpm 嵌套结构。
36
+ * 主策略:逐级向上探测 profile 标志文件(cordis.patch.yml / pnpm-workspace.yaml)。
37
+ * Desktop profile 使用 pnpm workspace 布局(profiles/desktop/dependencies/
38
+ * node_modules/.pnpm/<pkg>/node_modules/...),插件嵌套于多级 node_modules,
39
+ * 仅按 node_modules 匹配会命中内层目录而返回错误位置。
40
+ *
41
+ * 兜底:无标志文件时沿用旧启发式(名为 node_modules 的目录的父目录),
42
+ * 覆盖 CLI profile 的浅层 npm 布局与未写入过 patch 的全新 profile。
38
43
  *
39
44
  * @param baseDir - 起始目录,缺省为插件根(可注入便于测试)
40
45
  */
41
46
  export function getProfileDir(baseDir = PLUGIN_ROOT) {
47
+ // 主策略:跨过 node_modules 边界后,优先命中 cordis.patch.yml(凭据写入
48
+ // 目标),其次 pnpm-workspace.yaml。跨越守卫是关键——插件包自身随包携带
49
+ // cordis.patch.yml(dsh.bundle.patch 分发物)、源码 checkout 根也有同名
50
+ // 仓库文件,二者都会让「从 PLUGIN_ROOT 起步的探测」命中插件自己;只有
51
+ // 位于 node_modules 之上的目录才可能是拥有该插件的 profile。
52
+ const byPatch = findProfileAncestor(baseDir, (dir) => existsSync(resolve(dir, 'cordis.patch.yml')) ? dir : null);
53
+ if (byPatch !== null)
54
+ return byPatch;
55
+ const byWorkspace = findProfileAncestor(baseDir, (dir) => existsSync(resolve(dir, 'pnpm-workspace.yaml')) ? dir : null);
56
+ if (byWorkspace !== null)
57
+ return byWorkspace;
58
+ // 兜底:npm 浅层布局 / 尚未写入任何标志文件的全新 profile
59
+ // (第一个 node_modules 目录的父目录,与旧版行为一致)
42
60
  let dir = baseDir;
43
61
  for (let i = 0; i < 32; i++) {
44
62
  if (basename(dir) === 'node_modules')
@@ -50,6 +68,29 @@ export function getProfileDir(baseDir = PLUGIN_ROOT) {
50
68
  }
51
69
  return null;
52
70
  }
71
+ /**
72
+ * 沿目录树向上探测 profile 候选:仅接受「已经跨过至少一个名为
73
+ * node_modules 的路径组件」之后命中的目录(兼容 Windows 分隔符与
74
+ * pnpm 嵌套结构;dev 源码 checkout 不跨边界 → 返回 null → 环境变量引导)。
75
+ */
76
+ function findProfileAncestor(baseDir, probe) {
77
+ let crossedNodeModules = false;
78
+ let dir = baseDir;
79
+ for (let i = 0; i < 32; i++) {
80
+ if (basename(dir) === 'node_modules')
81
+ crossedNodeModules = true;
82
+ if (crossedNodeModules) {
83
+ const hit = probe(dir);
84
+ if (hit !== null)
85
+ return hit;
86
+ }
87
+ const parent = dirname(dir);
88
+ if (parent === dir)
89
+ break;
90
+ dir = parent;
91
+ }
92
+ return null;
93
+ }
53
94
  /**
54
95
  * 解析环境变量占位配置
55
96
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAEhD,+BAA+B;AAC/B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;AAE3C,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC9E,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,aAAa,cAAc,UAAU,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC;AACzF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB,WAAW;IACzD,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,cAAc;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAc;IAC5D,IAAI,WAAW,IAAI,WAAW,KAAK,cAAc,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5F,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAW;IAC5C,IAAI,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,IAAI,IAAI,GAAG,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1D,IAAI,IAAI,GAAG,SAAS;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/D,IAAI,IAAI,GAAG,UAAU;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;IACnE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,29 @@
1
- import type { Logger, RawAttachment } from '../types.js';
1
+ import type { Logger, RawAttachment } from '../types.ts';
2
+ import type { MediaConfig } from '../config.ts';
2
3
  /** 下载结果 */
3
4
  export interface DownloadedFile {
4
5
  /** 原始文件名(用于与消息附件关联) */
5
6
  filename: string;
7
+ /** 附件类型 */
8
+ contentType: 'image' | 'video' | 'file';
6
9
  /** 本地绝对路径 */
7
10
  localPath: string;
8
- /** 相对 cwd 的显示路径(@提及 / 工具访问用) */
9
- displayPath: string;
10
11
  }
12
+ /** 附件归类(QQ 网关的 content_type 是 MIME 类型,如 image/png、video/mp4、audio/silk) */
13
+ export type MediaKind = 'image' | 'video' | 'voice' | 'file';
14
+ /** 是否为图片(兼容裸值 'image' 与 MIME 'image/png') */
15
+ export declare function isImageContentType(contentType?: string): boolean;
16
+ /** 是否为视频(兼容裸值 'video' 与 MIME 'video/mp4') */
17
+ export declare function isVideoContentType(contentType?: string): boolean;
18
+ /** 是否为语音(兼容裸值 'voice' 与 MIME 'audio/silk') */
19
+ export declare function isVoiceContentType(contentType?: string): boolean;
20
+ /** 归类附件 content_type 为统一类型 */
21
+ export declare function classifyContentType(contentType?: string): MediaKind;
11
22
  /**
12
- * 下载消息中的 file 附件到本地
23
+ * 下载消息中的富媒体附件(image/video/file)到本地
13
24
  *
14
- * 下载目录为 {cwd}/.qqbot/{messageId},用 messageId 隔离跨消息重名。
15
- * 下载失败不返回(由调用方回退描述),下载成功仅保留路径供模型用工具读取。
25
+ * 下载目录固定为 ~/.dsh-qqbot/media,文件名用时间戳+随机数防重名。
26
+ * 下载失败不阻断(由调用方回退描述)。
16
27
  */
17
- export declare function downloadFileAttachments(attachments: RawAttachment[] | undefined, cwd: string, messageId: string, logger: Logger): Promise<DownloadedFile[]>;
28
+ export declare function downloadMediaAttachments(attachments: RawAttachment[] | undefined, media: MediaConfig, logger: Logger): Promise<DownloadedFile[]>;
18
29
  //# sourceMappingURL=attachment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAOzD,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAkED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,EACxC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,EAAE,CAAC,CAgC3B"}
1
+ {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQhD,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7D,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAKnE;AA0FD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,EACxC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,EAAE,CAAC,CAmC3B"}
@@ -1,22 +1,69 @@
1
1
  /**
2
- * 附件下载 — 将 QQ 文件附件安全下载到本地
2
+ * 富媒体下载 — 将 QQ 图片/视频/file 附件安全下载到本地
3
3
  *
4
- * 下载后仅通过 @路径 提示模型,由模型通过 tool-bash / tool-fs 自行读取,
5
- * 不内联内容(避免 token 浪费与上下文污染)。
4
+ * 下载后仅通过本地绝对路径提示模型,由模型通过 qqbot_describe_image / ffmpeg / tool-fs 等工具自行分析,
5
+ *
6
+ * 下载目录固定为 ~/.dsh-qqbot/media,
7
+ * 文件名用时间戳+随机数防重名,不依赖 agent cwd,便于 qqbot_describe_image / tool-fs 等工具稳定访问。
6
8
  */
7
9
  import { mkdirSync, writeFileSync } from 'node:fs';
8
- import { basename, join } from 'node:path';
10
+ import { basename, extname, join, sep } from 'node:path';
11
+ import { randomBytes } from 'node:crypto';
9
12
  import * as dns from 'node:dns';
10
- /** 下载大小上限(超过则跳过下载,仅保留路径提示) */
11
- const MAX_DOWNLOAD_BYTES = 20 * 1024 * 1024;
13
+ import { MEDIA_ROOT } from "../media/media-cleaner.js";
14
+ /** 默认富媒体下载大小上限(MB),可被 media.maxMB 覆盖 */
15
+ const DEFAULT_MAX_MB = 200;
12
16
  /** 下载超时(毫秒) */
13
- const DOWNLOAD_TIMEOUT_MS = 15_000;
14
- /** 文件名净化:去路径、过滤危险字符,防止路径穿越 */
17
+ const DOWNLOAD_TIMEOUT_MS = 120_000;
18
+ /** 是否为图片(兼容裸值 'image' 与 MIME 'image/png') */
19
+ export function isImageContentType(contentType) {
20
+ return contentType === 'image' || contentType?.startsWith('image/') === true;
21
+ }
22
+ /** 是否为视频(兼容裸值 'video' 与 MIME 'video/mp4') */
23
+ export function isVideoContentType(contentType) {
24
+ return contentType === 'video' || contentType?.startsWith('video/') === true;
25
+ }
26
+ /** 是否为语音(兼容裸值 'voice' 与 MIME 'audio/silk') */
27
+ export function isVoiceContentType(contentType) {
28
+ return contentType === 'voice' || contentType?.startsWith('audio/') === true;
29
+ }
30
+ /** 归类附件 content_type 为统一类型 */
31
+ export function classifyContentType(contentType) {
32
+ if (isImageContentType(contentType))
33
+ return 'image';
34
+ if (isVideoContentType(contentType))
35
+ return 'video';
36
+ if (isVoiceContentType(contentType))
37
+ return 'voice';
38
+ return 'file';
39
+ }
40
+ /** 处理 `//` 开头的协议相对 URL(补 https:) */
41
+ function normalizeUrl(url) {
42
+ return url.startsWith('//') ? `https:${url}` : url;
43
+ }
44
+ /** 文件名净化:去路径、移除非法字符(保留中文等 Unicode 字符),防止路径穿越 */
15
45
  function sanitizeFilename(name) {
16
46
  const base = basename(name.replace(/\\/g, '/'));
17
- const safe = base.replace(/[^a-zA-Z0-9._-]/g, '_');
47
+ // 仅替换文件系统非法字符(Windows 保留字符 + 控制字符),保留中文/空格等
48
+ // normalize NFC:统一 Unicode 规范化,避免 macOS(NFD) 与 Linux/Windows(NFC) 存储差异导致路径对不上
49
+ const safe = base
50
+ .replace(/[<>:"|?*\x00-\x1f]/g, '_')
51
+ .trim()
52
+ .normalize('NFC');
18
53
  return safe || 'attachment';
19
54
  }
55
+ /** 统一路径分隔符为 `/`(POSIX),Node fs 在 Windows 也接受正斜杠,保证注入路径跨平台一致 */
56
+ function toPosixPath(p) {
57
+ return p.split(sep).join('/');
58
+ }
59
+ /** 防重名:文件名 + 时间戳 + 随机数 */
60
+ function uniqueFilename(name) {
61
+ const base = sanitizeFilename(name);
62
+ const ext = extname(base);
63
+ const stem = basename(base, ext);
64
+ const rand = randomBytes(4).toString('hex');
65
+ return `${stem}_${Date.now()}_${rand}${ext}`;
66
+ }
20
67
  /** 字节数格式化 */
21
68
  function formatSize(bytes) {
22
69
  if (bytes >= 1024 * 1024)
@@ -53,7 +100,7 @@ async function assertSafeHostname(hostname) {
53
100
  }
54
101
  /** 安全下载:仅 HTTPS + SSRF 防护 + 大小上限 + 超时,返回下载字节数 */
55
102
  async function download(url, destPath, maxBytes) {
56
- const parsed = new URL(url);
103
+ const parsed = new URL(normalizeUrl(url));
57
104
  if (parsed.protocol !== 'https:') {
58
105
  throw new Error(`Only HTTPS allowed: ${parsed.protocol}`);
59
106
  }
@@ -69,37 +116,37 @@ async function download(url, destPath, maxBytes) {
69
116
  return buf.length;
70
117
  }
71
118
  /**
72
- * 下载消息中的 file 附件到本地
119
+ * 下载消息中的富媒体附件(image/video/file)到本地
73
120
  *
74
- * 下载目录为 {cwd}/.qqbot/{messageId},用 messageId 隔离跨消息重名。
75
- * 下载失败不返回(由调用方回退描述),下载成功仅保留路径供模型用工具读取。
121
+ * 下载目录固定为 ~/.dsh-qqbot/media,文件名用时间戳+随机数防重名。
122
+ * 下载失败不阻断(由调用方回退描述)。
76
123
  */
77
- export async function downloadFileAttachments(attachments, cwd, messageId, logger) {
78
- const files = (attachments ?? []).filter(a => a.content_type === 'file' && a.url);
79
- if (files.length === 0)
124
+ export async function downloadMediaAttachments(attachments, media, logger) {
125
+ if (!media.enabled)
126
+ return [];
127
+ const targets = (attachments ?? []).filter(a => classifyContentType(a.content_type) !== 'voice' && a.url);
128
+ if (targets.length === 0)
80
129
  return [];
81
- const dir = join(cwd, '.qqbot', messageId);
82
- mkdirSync(dir, { recursive: true });
130
+ mkdirSync(MEDIA_ROOT, { recursive: true });
131
+ const maxBytes = (media.maxMB ?? DEFAULT_MAX_MB) * 1024 * 1024;
83
132
  const results = [];
84
- for (const file of files) {
85
- const safeName = sanitizeFilename(file.filename);
86
- const localPath = join(dir, safeName);
87
- const displayPath = `.qqbot/${messageId}/${safeName}`;
88
- if (file.size > MAX_DOWNLOAD_BYTES) {
89
- logger.debug(`im-qqbot: skip download (${file.size}B too large): ${file.filename}`);
90
- results.push({ filename: file.filename, localPath, displayPath });
91
- continue;
133
+ for (const att of targets) {
134
+ const contentType = classifyContentType(att.content_type);
135
+ const localPath = toPosixPath(join(MEDIA_ROOT, uniqueFilename(att.filename)));
136
+ if (att.size > maxBytes) {
137
+ logger.debug(`im-qqbot: skip download (${att.size}B too large): ${att.filename}`);
138
+ continue; // 超限不下载,由 buildDynamicCtx 回退为描述
92
139
  }
93
140
  let bytes;
94
141
  try {
95
- bytes = await download(file.url, localPath, MAX_DOWNLOAD_BYTES);
142
+ bytes = await download(att.url, localPath, maxBytes);
96
143
  }
97
144
  catch (err) {
98
- logger.warn(`im-qqbot: download failed: ${file.filename} — ${err instanceof Error ? err.message : String(err)}`);
145
+ logger.warn(`im-qqbot: download failed: ${att.filename} — ${err instanceof Error ? err.message : String(err)}`);
99
146
  continue; // 下载失败不加入结果,由 buildDynamicCtx 回退为描述
100
147
  }
101
- logger.debug(`im-qqbot: attachment downloaded: ${file.filename} (${formatSize(bytes)}) → ${displayPath}`);
102
- results.push({ filename: file.filename, localPath, displayPath });
148
+ logger.debug(`im-qqbot: attachment downloaded: ${att.filename} (${formatSize(bytes)}) → ${localPath}`);
149
+ results.push({ filename: att.filename, contentType, localPath });
103
150
  }
104
151
  return results;
105
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import type { SessionManager } from '../session/index.js';
2
- import type { ImQQBotConfig } from '../config.js';
3
- import type { Logger } from '../types.js';
1
+ import type { SessionManager } from '../session/index.ts';
2
+ import type { ImQQBotConfig } from '../config.ts';
3
+ import type { Logger } from '../types.ts';
4
+ import type { MiddlewareContext } from '@tencent-connect/qqbot-nodejs';
4
5
  /**
5
6
  * 处理 QQ 入站消息(已经过 SDK 中间件链)
6
7
  */
7
- export declare function handleInbound(rawMsg: unknown, manager: SessionManager, config: ImQQBotConfig, logger: Logger, state?: Record<string, unknown>): Promise<void>;
8
+ export declare function handleInbound(ctx: MiddlewareContext, manager: SessionManager, config: ImQQBotConfig, logger: Logger): Promise<void>;
8
9
  //# sourceMappingURL=inbound.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../src/transport/inbound.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAa,MAAM,EAA8B,MAAM,aAAa,CAAC;AA+DjF;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
1
+ {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../src/transport/inbound.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAa,MAAM,EAAgD,MAAM,aAAa,CAAC;AAQnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA8DvE;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA0Df"}