@lemoncat7/dsh-partner 2.8.7 → 2.21.5

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 (460) hide show
  1. package/README.md +6 -1
  2. package/docs/THIRD_PARTY_LICENSES.md +67 -0
  3. package/docs/blobfox-manifest.json +109 -0
  4. package/docs/character-cards-and-renewal.md +23 -0
  5. package/docs/chat-delivery.md +25 -0
  6. package/docs/licenses/Apache-2.0.txt +202 -0
  7. package/docs/natural-conversation-port.md +58 -0
  8. package/docs/qq-attention.md +51 -0
  9. package/docs/qq-channel.md +80 -0
  10. package/docs/releases/2.10.0.md +14 -0
  11. package/docs/releases/2.10.1.md +12 -0
  12. package/docs/releases/2.11.0.md +9 -0
  13. package/docs/releases/2.11.1.md +9 -0
  14. package/docs/releases/2.11.2.md +7 -0
  15. package/docs/releases/2.11.3.md +11 -0
  16. package/docs/releases/2.11.4.md +7 -0
  17. package/docs/releases/2.11.5.md +7 -0
  18. package/docs/releases/2.11.6.md +9 -0
  19. package/docs/releases/2.11.7.md +9 -0
  20. package/docs/releases/2.12.0.md +14 -0
  21. package/docs/releases/2.13.0.md +9 -0
  22. package/docs/releases/2.14.0.md +9 -0
  23. package/docs/releases/2.15.0.md +9 -0
  24. package/docs/releases/2.15.1.md +9 -0
  25. package/docs/releases/2.16.0.md +18 -0
  26. package/docs/releases/2.17.0.md +23 -0
  27. package/docs/releases/2.17.1.md +9 -0
  28. package/docs/releases/2.18.0.md +9 -0
  29. package/docs/releases/2.18.1.md +5 -0
  30. package/docs/releases/2.19.0.md +14 -0
  31. package/docs/releases/2.19.1.md +7 -0
  32. package/docs/releases/2.19.2.md +9 -0
  33. package/docs/releases/2.19.3.md +5 -0
  34. package/docs/releases/2.20.0.md +10 -0
  35. package/docs/releases/2.20.1.md +8 -0
  36. package/docs/releases/2.21.0.md +7 -0
  37. package/docs/releases/2.21.1.md +8 -0
  38. package/docs/releases/2.21.2.md +10 -0
  39. package/docs/releases/2.21.3.md +7 -0
  40. package/docs/releases/2.21.4.md +8 -0
  41. package/docs/releases/2.21.5.md +15 -0
  42. package/docs/releases/2.9.0.md +13 -0
  43. package/docs/releases/2.9.1.md +11 -0
  44. package/docs/releases/2.9.2.md +11 -0
  45. package/docs/storage-read-performance.md +35 -0
  46. package/docs/tool-entry-compatibility.md +11 -0
  47. package/lib/agent-runtime.d.ts +25 -2
  48. package/lib/agent-runtime.d.ts.map +1 -1
  49. package/lib/agent-runtime.js +498 -86
  50. package/lib/agent-runtime.js.map +1 -1
  51. package/lib/api/features/stickers-api.d.ts +5 -0
  52. package/lib/api/features/stickers-api.d.ts.map +1 -0
  53. package/lib/api/features/stickers-api.js +35 -0
  54. package/lib/api/features/stickers-api.js.map +1 -0
  55. package/lib/api.d.ts +3 -0
  56. package/lib/api.d.ts.map +1 -1
  57. package/lib/api.js +126 -26
  58. package/lib/api.js.map +1 -1
  59. package/lib/attachments/storage-admin.js +1 -1
  60. package/lib/attachments/storage-admin.js.map +1 -1
  61. package/lib/channel-message.d.ts +24 -0
  62. package/lib/channel-message.d.ts.map +1 -1
  63. package/lib/channel-message.js.map +1 -1
  64. package/lib/channels/delivery-policy.d.ts +3 -0
  65. package/lib/channels/delivery-policy.d.ts.map +1 -1
  66. package/lib/channels/delivery-policy.js +24 -3
  67. package/lib/channels/delivery-policy.js.map +1 -1
  68. package/lib/channels/direct/dispatcher.d.ts +2 -2
  69. package/lib/channels/direct/dispatcher.d.ts.map +1 -1
  70. package/lib/channels/direct/dispatcher.js +13 -4
  71. package/lib/channels/direct/dispatcher.js.map +1 -1
  72. package/lib/channels/direct/login.d.ts.map +1 -1
  73. package/lib/channels/direct/login.js +4 -0
  74. package/lib/channels/direct/login.js.map +1 -1
  75. package/lib/channels/direct/media.d.ts +2 -0
  76. package/lib/channels/direct/media.d.ts.map +1 -1
  77. package/lib/channels/direct/media.js +27 -23
  78. package/lib/channels/direct/media.js.map +1 -1
  79. package/lib/channels/direct/message-format.js +127 -127
  80. package/lib/channels/direct/message-format.js.map +1 -1
  81. package/lib/channels/direct/transport.d.ts +26 -3
  82. package/lib/channels/direct/transport.d.ts.map +1 -1
  83. package/lib/channels/direct/transport.js +31 -5
  84. package/lib/channels/direct/transport.js.map +1 -1
  85. package/lib/channels/manager.d.ts +34 -0
  86. package/lib/channels/manager.d.ts.map +1 -1
  87. package/lib/channels/manager.js +639 -135
  88. package/lib/channels/manager.js.map +1 -1
  89. package/lib/channels/notification-delivery.d.ts +4 -0
  90. package/lib/channels/notification-delivery.d.ts.map +1 -1
  91. package/lib/channels/notification-delivery.js +24 -10
  92. package/lib/channels/notification-delivery.js.map +1 -1
  93. package/lib/channels/notification-route.d.ts.map +1 -1
  94. package/lib/channels/notification-route.js +10 -4
  95. package/lib/channels/notification-route.js.map +1 -1
  96. package/lib/channels/notification-timeout.d.ts.map +1 -1
  97. package/lib/channels/notification-timeout.js +2 -0
  98. package/lib/channels/notification-timeout.js.map +1 -1
  99. package/lib/channels/outbound-media.d.ts.map +1 -1
  100. package/lib/channels/outbound-media.js +3 -1
  101. package/lib/channels/outbound-media.js.map +1 -1
  102. package/lib/channels/qq/action-catalog.d.ts +38 -0
  103. package/lib/channels/qq/action-catalog.d.ts.map +1 -0
  104. package/lib/channels/qq/action-catalog.js +2731 -0
  105. package/lib/channels/qq/action-catalog.js.map +1 -0
  106. package/lib/channels/qq/actions.d.ts +21 -0
  107. package/lib/channels/qq/actions.d.ts.map +1 -0
  108. package/lib/channels/qq/actions.js +226 -0
  109. package/lib/channels/qq/actions.js.map +1 -0
  110. package/lib/channels/qq/affection-adapter.d.ts +3 -0
  111. package/lib/channels/qq/affection-adapter.d.ts.map +1 -0
  112. package/lib/channels/qq/affection-adapter.js +16 -0
  113. package/lib/channels/qq/affection-adapter.js.map +1 -0
  114. package/lib/channels/qq/attention-classifier.d.ts +10 -0
  115. package/lib/channels/qq/attention-classifier.d.ts.map +1 -0
  116. package/lib/channels/qq/attention-classifier.js +62 -0
  117. package/lib/channels/qq/attention-classifier.js.map +1 -0
  118. package/lib/channels/qq/authority.d.ts +10 -0
  119. package/lib/channels/qq/authority.d.ts.map +1 -0
  120. package/lib/channels/qq/authority.js +50 -0
  121. package/lib/channels/qq/authority.js.map +1 -0
  122. package/lib/channels/qq/autonomy.d.ts +30 -0
  123. package/lib/channels/qq/autonomy.d.ts.map +1 -0
  124. package/lib/channels/qq/autonomy.js +88 -0
  125. package/lib/channels/qq/autonomy.js.map +1 -0
  126. package/lib/channels/qq/catalog.d.ts +14 -0
  127. package/lib/channels/qq/catalog.d.ts.map +1 -0
  128. package/lib/channels/qq/catalog.js +34 -0
  129. package/lib/channels/qq/catalog.js.map +1 -0
  130. package/lib/channels/qq/connection.d.ts +28 -0
  131. package/lib/channels/qq/connection.d.ts.map +1 -0
  132. package/lib/channels/qq/connection.js +200 -0
  133. package/lib/channels/qq/connection.js.map +1 -0
  134. package/lib/channels/qq/identity-binding.d.ts +14 -0
  135. package/lib/channels/qq/identity-binding.d.ts.map +1 -0
  136. package/lib/channels/qq/identity-binding.js +58 -0
  137. package/lib/channels/qq/identity-binding.js.map +1 -0
  138. package/lib/channels/qq/latency.d.ts +22 -0
  139. package/lib/channels/qq/latency.d.ts.map +1 -0
  140. package/lib/channels/qq/latency.js +21 -0
  141. package/lib/channels/qq/latency.js.map +1 -0
  142. package/lib/channels/qq/message.d.ts +6 -0
  143. package/lib/channels/qq/message.d.ts.map +1 -0
  144. package/lib/channels/qq/message.js +49 -0
  145. package/lib/channels/qq/message.js.map +1 -0
  146. package/lib/channels/qq/reply-rules.d.ts +30 -0
  147. package/lib/channels/qq/reply-rules.d.ts.map +1 -0
  148. package/lib/channels/qq/reply-rules.js +72 -0
  149. package/lib/channels/qq/reply-rules.js.map +1 -0
  150. package/lib/channels/qq/reply-tool.d.ts +6 -0
  151. package/lib/channels/qq/reply-tool.d.ts.map +1 -0
  152. package/lib/channels/qq/reply-tool.js +113 -0
  153. package/lib/channels/qq/reply-tool.js.map +1 -0
  154. package/lib/channels/qq/settings.d.ts +42 -0
  155. package/lib/channels/qq/settings.d.ts.map +1 -0
  156. package/lib/channels/qq/settings.js +68 -0
  157. package/lib/channels/qq/settings.js.map +1 -0
  158. package/lib/channels/qq/sticker-adapter.d.ts +5 -0
  159. package/lib/channels/qq/sticker-adapter.d.ts.map +1 -0
  160. package/lib/channels/qq/sticker-adapter.js +43 -0
  161. package/lib/channels/qq/sticker-adapter.js.map +1 -0
  162. package/lib/channels/qq/transport.d.ts +29 -0
  163. package/lib/channels/qq/transport.d.ts.map +1 -0
  164. package/lib/channels/qq/transport.js +187 -0
  165. package/lib/channels/qq/transport.js.map +1 -0
  166. package/lib/channels/reply-access.d.ts +25 -0
  167. package/lib/channels/reply-access.d.ts.map +1 -0
  168. package/lib/channels/reply-access.js +29 -0
  169. package/lib/channels/reply-access.js.map +1 -0
  170. package/lib/channels/reply-progress-controller.d.ts +1 -0
  171. package/lib/channels/reply-progress-controller.d.ts.map +1 -1
  172. package/lib/channels/reply-progress-controller.js +8 -0
  173. package/lib/channels/reply-progress-controller.js.map +1 -1
  174. package/lib/channels/weixin/connect.d.ts +3 -1
  175. package/lib/channels/weixin/connect.d.ts.map +1 -1
  176. package/lib/character/activity-tool.d.ts +7 -0
  177. package/lib/character/activity-tool.d.ts.map +1 -0
  178. package/lib/character/activity-tool.js +38 -0
  179. package/lib/character/activity-tool.js.map +1 -0
  180. package/lib/character/affection-adapter.d.ts +13 -0
  181. package/lib/character/affection-adapter.d.ts.map +1 -0
  182. package/lib/character/affection-adapter.js +13 -0
  183. package/lib/character/affection-adapter.js.map +1 -0
  184. package/lib/character/affection-context.d.ts +7 -0
  185. package/lib/character/affection-context.d.ts.map +1 -0
  186. package/lib/character/affection-context.js +33 -0
  187. package/lib/character/affection-context.js.map +1 -0
  188. package/lib/character/affection.d.ts +47 -0
  189. package/lib/character/affection.d.ts.map +1 -0
  190. package/lib/character/affection.js +41 -0
  191. package/lib/character/affection.js.map +1 -0
  192. package/lib/character/conversation-behavior.d.ts +10 -0
  193. package/lib/character/conversation-behavior.d.ts.map +1 -0
  194. package/lib/character/conversation-behavior.js +60 -0
  195. package/lib/character/conversation-behavior.js.map +1 -0
  196. package/lib/character/domain.d.ts +53 -0
  197. package/lib/character/domain.d.ts.map +1 -0
  198. package/lib/character/domain.js +124 -0
  199. package/lib/character/domain.js.map +1 -0
  200. package/lib/character/identity-guide.d.ts +4 -0
  201. package/lib/character/identity-guide.d.ts.map +1 -0
  202. package/lib/character/identity-guide.js +14 -0
  203. package/lib/character/identity-guide.js.map +1 -0
  204. package/lib/character/idle-contact.d.ts +42 -0
  205. package/lib/character/idle-contact.d.ts.map +1 -0
  206. package/lib/character/idle-contact.js +90 -0
  207. package/lib/character/idle-contact.js.map +1 -0
  208. package/lib/character/post-reply.d.ts +19 -0
  209. package/lib/character/post-reply.d.ts.map +1 -0
  210. package/lib/character/post-reply.js +33 -0
  211. package/lib/character/post-reply.js.map +1 -0
  212. package/lib/character/preview.d.ts +12 -0
  213. package/lib/character/preview.d.ts.map +1 -0
  214. package/lib/character/preview.js +74 -0
  215. package/lib/character/preview.js.map +1 -0
  216. package/lib/character/relationship-adapter.d.ts +18 -0
  217. package/lib/character/relationship-adapter.d.ts.map +1 -0
  218. package/lib/character/relationship-adapter.js +18 -0
  219. package/lib/character/relationship-adapter.js.map +1 -0
  220. package/lib/character/sleep-service.d.ts +35 -0
  221. package/lib/character/sleep-service.d.ts.map +1 -0
  222. package/lib/character/sleep-service.js +278 -0
  223. package/lib/character/sleep-service.js.map +1 -0
  224. package/lib/character/sleep.d.ts +43 -0
  225. package/lib/character/sleep.d.ts.map +1 -0
  226. package/lib/character/sleep.js +36 -0
  227. package/lib/character/sleep.js.map +1 -0
  228. package/lib/character/state-policy.d.ts +4 -0
  229. package/lib/character/state-policy.d.ts.map +1 -0
  230. package/lib/character/state-policy.js +14 -0
  231. package/lib/character/state-policy.js.map +1 -0
  232. package/lib/character/store.d.ts +8 -0
  233. package/lib/character/store.d.ts.map +1 -0
  234. package/lib/character/store.js +27 -0
  235. package/lib/character/store.js.map +1 -0
  236. package/lib/chat/conversation.d.ts +13 -0
  237. package/lib/chat/conversation.d.ts.map +1 -0
  238. package/lib/chat/conversation.js +36 -0
  239. package/lib/chat/conversation.js.map +1 -0
  240. package/lib/chat/protocol.d.ts +51 -0
  241. package/lib/chat/protocol.d.ts.map +1 -0
  242. package/lib/chat/protocol.js +90 -0
  243. package/lib/chat/protocol.js.map +1 -0
  244. package/lib/chat/sticker-adapter.d.ts +34 -0
  245. package/lib/chat/sticker-adapter.d.ts.map +1 -0
  246. package/lib/chat/sticker-adapter.js +30 -0
  247. package/lib/chat/sticker-adapter.js.map +1 -0
  248. package/lib/chat/sticker-builtins.d.ts +9 -0
  249. package/lib/chat/sticker-builtins.d.ts.map +1 -0
  250. package/lib/chat/sticker-builtins.js +243 -0
  251. package/lib/chat/sticker-builtins.js.map +1 -0
  252. package/lib/chat/sticker-import.d.ts +13 -0
  253. package/lib/chat/sticker-import.d.ts.map +1 -0
  254. package/lib/chat/sticker-import.js +27 -0
  255. package/lib/chat/sticker-import.js.map +1 -0
  256. package/lib/chat/stickers.d.ts +28 -0
  257. package/lib/chat/stickers.d.ts.map +1 -0
  258. package/lib/chat/stickers.js +113 -0
  259. package/lib/chat/stickers.js.map +1 -0
  260. package/lib/chat/tools.d.ts +8 -0
  261. package/lib/chat/tools.d.ts.map +1 -0
  262. package/lib/chat/tools.js +137 -0
  263. package/lib/chat/tools.js.map +1 -0
  264. package/lib/client-api.d.ts +25 -1
  265. package/lib/client-api.d.ts.map +1 -1
  266. package/lib/client-api.js.map +1 -1
  267. package/lib/client.d.ts.map +1 -1
  268. package/lib/client.js +7083 -2327
  269. package/lib/client.js.map +4 -4
  270. package/lib/collaboration/composition.d.ts +4 -0
  271. package/lib/collaboration/composition.d.ts.map +1 -1
  272. package/lib/collaboration/composition.js +36 -9
  273. package/lib/collaboration/composition.js.map +1 -1
  274. package/lib/collaboration/tool-discovery.d.ts +12 -0
  275. package/lib/collaboration/tool-discovery.d.ts.map +1 -0
  276. package/lib/collaboration/tool-discovery.js +148 -0
  277. package/lib/collaboration/tool-discovery.js.map +1 -0
  278. package/lib/companions/identity-tool.d.ts +176 -0
  279. package/lib/companions/identity-tool.d.ts.map +1 -0
  280. package/lib/companions/identity-tool.js +67 -0
  281. package/lib/companions/identity-tool.js.map +1 -0
  282. package/lib/companions/identity.d.ts +24 -0
  283. package/lib/companions/identity.d.ts.map +1 -0
  284. package/lib/companions/identity.js +49 -0
  285. package/lib/companions/identity.js.map +1 -0
  286. package/lib/companions/management-tool.d.ts +1 -1
  287. package/lib/companions/management-tool.d.ts.map +1 -1
  288. package/lib/companions/management-tool.js +4 -2
  289. package/lib/companions/management-tool.js.map +1 -1
  290. package/lib/companions/management.d.ts +21 -9
  291. package/lib/companions/management.d.ts.map +1 -1
  292. package/lib/companions/management.js +18 -4
  293. package/lib/companions/management.js.map +1 -1
  294. package/lib/companions/service.js +2 -0
  295. package/lib/companions/service.js.map +1 -1
  296. package/lib/companions/session-configuration.js +2 -2
  297. package/lib/companions/session-configuration.js.map +1 -1
  298. package/lib/concern-store.d.ts +1 -0
  299. package/lib/concern-store.d.ts.map +1 -1
  300. package/lib/concern-store.js +20 -7
  301. package/lib/concern-store.js.map +1 -1
  302. package/lib/context-renewal.d.ts +5 -0
  303. package/lib/context-renewal.d.ts.map +1 -0
  304. package/lib/context-renewal.js +30 -0
  305. package/lib/context-renewal.js.map +1 -0
  306. package/lib/daily-review.d.ts +9 -1
  307. package/lib/daily-review.d.ts.map +1 -1
  308. package/lib/daily-review.js +41 -12
  309. package/lib/daily-review.js.map +1 -1
  310. package/lib/domain.d.ts +45 -1
  311. package/lib/domain.d.ts.map +1 -1
  312. package/lib/domain.js +13 -1
  313. package/lib/domain.js.map +1 -1
  314. package/lib/execution/agent-support.d.ts +1 -1
  315. package/lib/execution/agent-support.d.ts.map +1 -1
  316. package/lib/execution/agent-support.js +14 -3
  317. package/lib/execution/agent-support.js.map +1 -1
  318. package/lib/execution/operation-tool-access.d.ts +13 -0
  319. package/lib/execution/operation-tool-access.d.ts.map +1 -0
  320. package/lib/execution/operation-tool-access.js +49 -0
  321. package/lib/execution/operation-tool-access.js.map +1 -0
  322. package/lib/execution/service.d.ts.map +1 -1
  323. package/lib/execution/service.js +2 -10
  324. package/lib/execution/service.js.map +1 -1
  325. package/lib/execution/tool-access-adapter.d.ts +23 -0
  326. package/lib/execution/tool-access-adapter.d.ts.map +1 -0
  327. package/lib/execution/tool-access-adapter.js +25 -0
  328. package/lib/execution/tool-access-adapter.js.map +1 -0
  329. package/lib/heartbeat.d.ts +1 -0
  330. package/lib/heartbeat.d.ts.map +1 -1
  331. package/lib/heartbeat.js +14 -2
  332. package/lib/heartbeat.js.map +1 -1
  333. package/lib/history-search.d.ts +6 -0
  334. package/lib/history-search.d.ts.map +1 -0
  335. package/lib/history-search.js +51 -0
  336. package/lib/history-search.js.map +1 -0
  337. package/lib/index.d.ts.map +1 -1
  338. package/lib/index.js +35 -1
  339. package/lib/index.js.map +1 -1
  340. package/lib/memory-domain.d.ts +4 -0
  341. package/lib/memory-domain.d.ts.map +1 -1
  342. package/lib/memory-prompt-context.js +2 -0
  343. package/lib/memory-prompt-context.js.map +1 -1
  344. package/lib/memory-reflection.d.ts.map +1 -1
  345. package/lib/memory-reflection.js +19 -3
  346. package/lib/memory-reflection.js.map +1 -1
  347. package/lib/memory-scope.d.ts +2 -1
  348. package/lib/memory-scope.d.ts.map +1 -1
  349. package/lib/memory-scope.js +3 -1
  350. package/lib/memory-scope.js.map +1 -1
  351. package/lib/memory-store.d.ts +20 -1
  352. package/lib/memory-store.d.ts.map +1 -1
  353. package/lib/memory-store.js +78 -27
  354. package/lib/memory-store.js.map +1 -1
  355. package/lib/notifications/service.d.ts.map +1 -1
  356. package/lib/notifications/service.js +3 -1
  357. package/lib/notifications/service.js.map +1 -1
  358. package/lib/observation-knowledge-entry.d.ts +2 -0
  359. package/lib/observation-knowledge-entry.d.ts.map +1 -0
  360. package/lib/observation-knowledge-entry.js +13 -0
  361. package/lib/observation-knowledge-entry.js.map +1 -0
  362. package/lib/observation-loop.d.ts.map +1 -1
  363. package/lib/observation-loop.js +3 -0
  364. package/lib/observation-loop.js.map +1 -1
  365. package/lib/scheduler/final-reply.d.ts +2 -0
  366. package/lib/scheduler/final-reply.d.ts.map +1 -1
  367. package/lib/storage/split-state.d.ts +1 -0
  368. package/lib/storage/split-state.d.ts.map +1 -1
  369. package/lib/storage/split-state.js +9 -2
  370. package/lib/storage/split-state.js.map +1 -1
  371. package/lib/storage/sqlite-schema.d.ts +7 -0
  372. package/lib/storage/sqlite-schema.d.ts.map +1 -0
  373. package/lib/storage/sqlite-schema.js +36 -0
  374. package/lib/storage/sqlite-schema.js.map +1 -0
  375. package/lib/store.d.ts.map +1 -1
  376. package/lib/store.js +7 -0
  377. package/lib/store.js.map +1 -1
  378. package/lib/ui/affection-panel.d.ts +10 -0
  379. package/lib/ui/affection-panel.d.ts.map +1 -0
  380. package/lib/ui/affection-panel.js +44 -0
  381. package/lib/ui/affection-panel.js.map +1 -0
  382. package/lib/ui/capability-editor.d.ts.map +1 -1
  383. package/lib/ui/capability-editor.js +1 -1
  384. package/lib/ui/capability-editor.js.map +1 -1
  385. package/lib/ui/channels-panel.d.ts.map +1 -1
  386. package/lib/ui/channels-panel.js +13 -9
  387. package/lib/ui/channels-panel.js.map +1 -1
  388. package/lib/ui/character-editor.d.ts +11 -0
  389. package/lib/ui/character-editor.d.ts.map +1 -0
  390. package/lib/ui/character-editor.js +110 -0
  391. package/lib/ui/character-editor.js.map +1 -0
  392. package/lib/ui/character-memory-editor.d.ts +9 -0
  393. package/lib/ui/character-memory-editor.d.ts.map +1 -0
  394. package/lib/ui/character-memory-editor.js +56 -0
  395. package/lib/ui/character-memory-editor.js.map +1 -0
  396. package/lib/ui/character-stepper.d.ts +16 -0
  397. package/lib/ui/character-stepper.d.ts.map +1 -0
  398. package/lib/ui/character-stepper.js +42 -0
  399. package/lib/ui/character-stepper.js.map +1 -0
  400. package/lib/ui/companion-draft.d.ts +5 -0
  401. package/lib/ui/companion-draft.d.ts.map +1 -1
  402. package/lib/ui/companion-draft.js +1 -1
  403. package/lib/ui/companion-draft.js.map +1 -1
  404. package/lib/ui/identity-editor.d.ts.map +1 -1
  405. package/lib/ui/identity-editor.js +19 -5
  406. package/lib/ui/identity-editor.js.map +1 -1
  407. package/lib/ui/idle-contact-editor.d.ts +8 -0
  408. package/lib/ui/idle-contact-editor.d.ts.map +1 -0
  409. package/lib/ui/idle-contact-editor.js +18 -0
  410. package/lib/ui/idle-contact-editor.js.map +1 -0
  411. package/lib/ui/memory/automation-settings.d.ts.map +1 -1
  412. package/lib/ui/memory/automation-settings.js +9 -2
  413. package/lib/ui/memory/automation-settings.js.map +1 -1
  414. package/lib/ui/memory/memory-panel.d.ts.map +1 -1
  415. package/lib/ui/memory/memory-panel.js +5 -3
  416. package/lib/ui/memory/memory-panel.js.map +1 -1
  417. package/lib/ui/push-draft.d.ts +7 -7
  418. package/lib/ui/qq-capability-settings.d.ts +9 -0
  419. package/lib/ui/qq-capability-settings.d.ts.map +1 -0
  420. package/lib/ui/qq-capability-settings.js +24 -0
  421. package/lib/ui/qq-capability-settings.js.map +1 -0
  422. package/lib/ui/qq-channel-settings.d.ts +13 -0
  423. package/lib/ui/qq-channel-settings.d.ts.map +1 -0
  424. package/lib/ui/qq-channel-settings.js +51 -0
  425. package/lib/ui/qq-channel-settings.js.map +1 -0
  426. package/lib/ui/qq-identity-binding.d.ts +9 -0
  427. package/lib/ui/qq-identity-binding.d.ts.map +1 -0
  428. package/lib/ui/qq-identity-binding.js +6 -0
  429. package/lib/ui/qq-identity-binding.js.map +1 -0
  430. package/lib/ui/qq-voice-reply-settings.d.ts +9 -0
  431. package/lib/ui/qq-voice-reply-settings.d.ts.map +1 -0
  432. package/lib/ui/qq-voice-reply-settings.js +23 -0
  433. package/lib/ui/qq-voice-reply-settings.js.map +1 -0
  434. package/lib/ui/role-reference-data.d.ts +3 -0
  435. package/lib/ui/role-reference-data.d.ts.map +1 -0
  436. package/lib/ui/role-reference-data.js +4 -0
  437. package/lib/ui/role-reference-data.js.map +1 -0
  438. package/lib/ui/role-reference.d.ts +3 -0
  439. package/lib/ui/role-reference.d.ts.map +1 -0
  440. package/lib/ui/role-reference.js +10 -0
  441. package/lib/ui/role-reference.js.map +1 -0
  442. package/lib/ui/settings-sections.d.ts +14 -0
  443. package/lib/ui/settings-sections.d.ts.map +1 -0
  444. package/lib/ui/settings-sections.js +18 -0
  445. package/lib/ui/settings-sections.js.map +1 -0
  446. package/lib/ui/sleep-editor.d.ts +10 -0
  447. package/lib/ui/sleep-editor.d.ts.map +1 -0
  448. package/lib/ui/sleep-editor.js +45 -0
  449. package/lib/ui/sleep-editor.js.map +1 -0
  450. package/lib/ui/sticker-import.d.ts +7 -0
  451. package/lib/ui/sticker-import.d.ts.map +1 -0
  452. package/lib/ui/sticker-import.js +65 -0
  453. package/lib/ui/sticker-import.js.map +1 -0
  454. package/lib/ui/sticker-library.d.ts +5 -0
  455. package/lib/ui/sticker-library.d.ts.map +1 -0
  456. package/lib/ui/sticker-library.js +55 -0
  457. package/lib/ui/sticker-library.js.map +1 -0
  458. package/lib/ui/workspace-components.js +2 -2
  459. package/lib/ui/workspace-components.js.map +1 -1
  460. package/package.json +53 -5
@@ -0,0 +1,49 @@
1
+ import { qqSettings, validQqId } from './settings.js';
2
+ export function qqId(value) {
3
+ const id = typeof value === 'number' && Number.isSafeInteger(value) ? String(value) : typeof value === 'string' ? value : '';
4
+ return validQqId(id) ? id : undefined;
5
+ }
6
+ /** Never interpret raw CQ text as an instruction to send or fetch a resource. */
7
+ export function oneBotMessage(raw, accountId, targetId = '', settings) {
8
+ const policy = qqSettings(settings);
9
+ if (!raw || raw.post_type !== 'message' || !['private', 'group'].includes(raw.message_type))
10
+ return;
11
+ const realSender = qqId(raw.user_id), groupId = raw.message_type === 'group' ? qqId(raw.group_id) : undefined;
12
+ if (!realSender || realSender === accountId || qqId(raw.self_id) !== accountId)
13
+ return;
14
+ if (raw.message_type === 'private' && (!policy.privateReplies || raw.sub_type !== 'friend' || targetId && targetId !== realSender))
15
+ return;
16
+ const mentioned = Array.isArray(raw.message) && raw.message.some((p) => p?.type === 'at' && String(p.data?.qq) === accountId);
17
+ const otherMention = Array.isArray(raw.message) && raw.message.some((p) => p?.type === 'at' && String(p.data?.qq) !== accountId);
18
+ const hasReply = Array.isArray(raw.message) && raw.message.some((p) => p?.type === 'reply');
19
+ const replyPart = Array.isArray(raw.message) ? raw.message.find((p) => p?.type === 'reply') : undefined;
20
+ const replyId = replyPart?.data?.id;
21
+ const replyToId = ['string', 'number'].includes(typeof replyId) && String(replyId).length <= 128 ? String(replyId) : undefined;
22
+ const autonomous = !!groupId && policy.autonomousGroupIds.includes(groupId);
23
+ if (raw.message_type === 'group') {
24
+ if (raw.anonymous || !groupId || !policy.groupReplies || !policy.groupIds.includes(groupId) || targetId && targetId !== `group:${groupId}`)
25
+ return;
26
+ if (policy.groupTrigger === 'mention' && !mentioned && !autonomous)
27
+ return;
28
+ }
29
+ const sender = groupId ? `group:${groupId}:${realSender}` : realSender;
30
+ const id = raw.message_id;
31
+ if (!['string', 'number'].includes(typeof id) || !String(id) || String(id).length > 128)
32
+ return;
33
+ const text = [], media = [];
34
+ if (typeof raw.message === 'string')
35
+ text.push(raw.message.slice(0, 100000));
36
+ else if (Array.isArray(raw.message))
37
+ for (const part of raw.message.slice(0, 128)) {
38
+ if (part?.type === 'text' && typeof part.data?.text === 'string')
39
+ text.push(part.data.text.slice(0, 100000));
40
+ else if (part?.type === 'face')
41
+ text.push(`[QQ 表情 ${String(part.data?.id ?? '').slice(0, 20)}]`);
42
+ else if (['image', 'record', 'video', 'file'].includes(part?.type)) {
43
+ const data = part.data ?? {};
44
+ media.push({ source: typeof data.url === 'string' ? data.url : '', ...(typeof data.name === 'string' ? { name: data.name } : {}), ...(typeof data.file_size === 'number' ? { size: data.file_size } : {}) });
45
+ }
46
+ }
47
+ return { ...(Number.isFinite(raw._partnerReceivedAt) ? { receivedAt: raw._partnerReceivedAt } : {}), senderName: String(raw.sender?.nickname || realSender).slice(0, 80), ...(groupId ? { qqGroup: { groupId, userId: realSender, senderName: String(raw.sender?.card || raw.sender?.nickname || realSender).slice(0, 80), mentioned, autonomous, ...(otherMention ? { otherMention: true } : {}), ...(hasReply ? { hasReply: true } : {}), ...(replyToId ? { replyToId } : {}) } } : {}), id: `qq:${accountId}:${sender}:${id}`, sender, targetId: groupId ? `group:${groupId}` : sender, text: text.join('').slice(0, 100000), ...(media.length ? { media } : {}), ...(Number.isFinite(raw.time) ? { timestamp: raw.time * 1000 } : {}) };
48
+ }
49
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/channels/qq/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,eAAe,CAAA;AAItE,MAAM,UAAU,IAAI,CAAC,KAAc;IACjC,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5H,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACvC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,GAAQ,EAAE,SAAiB,EAAE,QAAQ,GAAG,EAAE,EAAE,QAAqB;IAC7F,MAAM,MAAM,GAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAG,SAAS,IAAI,CAAC,CAAC,SAAS,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAM;IAChG,MAAM,UAAU,GAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAC,OAAO,GAAC,GAAG,CAAC,YAAY,KAAG,OAAO,CAAA,CAAC,CAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAA,SAAS,CAAA;IAClG,IAAI,CAAC,UAAU,IAAI,UAAU,KAAG,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAG,SAAS;QAAE,OAAM;IAClF,IAAI,GAAG,CAAC,YAAY,KAAG,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,QAAQ,KAAG,QAAQ,IAAI,QAAQ,IAAE,QAAQ,KAAG,UAAU,CAAC;QAAE,OAAM;IAClI,MAAM,SAAS,GAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAK,EAAC,EAAE,CAAA,CAAC,EAAE,IAAI,KAAG,IAAI,IAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAG,SAAS,CAAC,CAAA;IACrH,MAAM,YAAY,GAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAK,EAAC,EAAE,CAAA,CAAC,EAAE,IAAI,KAAG,IAAI,IAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAG,SAAS,CAAC,CAAA;IACxH,MAAM,QAAQ,GAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAK,EAAC,EAAE,CAAA,CAAC,EAAE,IAAI,KAAG,OAAO,CAAC,CAAA;IACvF,MAAM,SAAS,GAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA,CAAC,CAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAK,EAAC,EAAE,CAAA,CAAC,EAAE,IAAI,KAAG,OAAO,CAAC,CAAA,CAAC,CAAA,SAAS,CAAA;IACjG,MAAM,OAAO,GAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAA;IACjC,MAAM,SAAS,GAAC,CAAC,QAAQ,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,OAAO,CAAC,IAAE,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,IAAE,GAAG,CAAA,CAAC,CAAA,MAAM,CAAC,OAAO,CAAC,CAAA,CAAC,CAAA,SAAS,CAAA;IACnH,MAAM,UAAU,GAAC,CAAC,CAAC,OAAO,IAAE,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvE,IAAI,GAAG,CAAC,YAAY,KAAG,OAAO,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,IAAE,QAAQ,KAAG,SAAS,OAAO,EAAE;YAAE,OAAM;QAC9I,IAAI,MAAM,CAAC,YAAY,KAAG,SAAS,IAAE,CAAC,SAAS,IAAE,CAAC,UAAU;YAAC,OAAM;IACrE,CAAC;IACD,MAAM,MAAM,GAAC,OAAO,CAAA,CAAC,CAAA,SAAS,OAAO,IAAI,UAAU,EAAE,CAAA,CAAC,CAAA,UAAU,CAAA;IAChE,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAA;IACzB,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,OAAM;IAC/F,MAAM,IAAI,GAAa,EAAE,EAAE,KAAK,GAAkB,EAAE,CAAA;IACpD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;SACvE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAClF,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;iBACvG,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;iBAC3F,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAC9M,CAAC;QACH,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA,CAAC,CAAA,EAAC,UAAU,EAAC,GAAG,CAAC,kBAAkB,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAE,UAAU,EAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,OAAO,CAAA,CAAC,CAAA,EAAC,OAAO,EAAC,EAAC,OAAO,EAAC,MAAM,EAAC,UAAU,EAAC,UAAU,EAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,EAAC,SAAS,EAAC,UAAU,EAAC,GAAG,CAAC,YAAY,CAAA,CAAC,CAAA,EAAC,YAAY,EAAC,IAAI,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,GAAG,CAAC,QAAQ,CAAA,CAAC,CAAA,EAAC,QAAQ,EAAC,IAAI,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,GAAG,CAAC,SAAS,CAAA,CAAC,CAAA,EAAC,SAAS,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,EAAE,EAAE,MAAM,SAAS,IAAI,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAA,CAAC,CAAA,SAAS,OAAO,EAAE,CAAA,CAAC,CAAA,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACjpB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { DirectMessage } from '../direct/transport.js';
2
+ import type { AttentionPrediction } from './attention-classifier.js';
3
+ export interface ReplyScore {
4
+ reply: boolean;
5
+ score: number;
6
+ probability: number;
7
+ reasons: string[];
8
+ route: 'direct' | 'continuation' | 'semantic' | 'fallback' | 'other' | 'closing';
9
+ }
10
+ export interface ReplyScoreContext {
11
+ name: string;
12
+ owner: boolean;
13
+ affection: number;
14
+ recent?: {
15
+ at: number;
16
+ text: string;
17
+ };
18
+ now: number;
19
+ seed: string;
20
+ addresses?: readonly string[];
21
+ semantic?: AttentionPrediction;
22
+ }
23
+ export declare function topicSimilarity(left: string, right: string): number;
24
+ export declare const CONVERSATION_WINDOW_MS: number;
25
+ export declare function activeConversation(context: ReplyScoreContext): boolean;
26
+ export declare function conversationEnded(text: string): boolean;
27
+ /** Strong routing facts run before semantics. No random draw in a live conversation. */
28
+ export declare function routeGroupReply(event: DirectMessage, context: ReplyScoreContext): ReplyScore | undefined;
29
+ export declare function scoreGroupReply(event: DirectMessage, context: ReplyScoreContext): ReplyScore;
30
+ //# sourceMappingURL=reply-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-rules.d.ts","sourceRoot":"","sources":["../../../src/channels/qq/reply-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,WAAW,UAAU;IAAG,KAAK,EAAC,OAAO,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,WAAW,EAAC,MAAM,CAAC;IAAC,OAAO,EAAC,MAAM,EAAE,CAAC;IAAC,KAAK,EAAC,QAAQ,GAAC,cAAc,GAAC,UAAU,GAAC,UAAU,GAAC,OAAO,GAAC,SAAS,CAAA;CAAE;AACxK,MAAM,WAAW,iBAAiB;IAAG,IAAI,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,OAAO,CAAC;IAAC,SAAS,EAAC,MAAM,CAAC;IAAC,MAAM,CAAC,EAAC;QAAC,EAAE,EAAC,MAAM,CAAC;QAAA,IAAI,EAAC,MAAM,CAAA;KAAC,CAAC;IAAC,GAAG,EAAC,MAAM,CAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAC,SAAS,CAAC,EAAC,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAC,mBAAmB,CAAA;CAAE;AAE1M,wBAAgB,eAAe,CAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,GAAE,MAAM,CAK/D;AACD,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAC5C,wBAAgB,kBAAkB,CAAC,OAAO,EAAC,iBAAiB,GAAE,OAAO,CAGpE;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAC,MAAM,GAAE,OAAO,CAErD;AAMD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,iBAAiB,GAAE,UAAU,GAAC,SAAS,CAYlG;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,iBAAiB,GAAE,UAAU,CAexF"}
@@ -0,0 +1,72 @@
1
+ const normalized = (text) => text.slice(0, 1200).toLocaleLowerCase().replace(/[\s\p{P}\p{S}]/gu, '').slice(0, 160);
2
+ export function topicSimilarity(left, right) {
3
+ const grams = (text) => { const chars = Array.from(normalized(text)), out = new Set(); for (let i = 1; i < chars.length; i++)
4
+ out.add(chars[i - 1] + chars[i]); return out; };
5
+ const a = grams(left), b = grams(right);
6
+ if (!a.size || !b.size)
7
+ return 0;
8
+ let common = 0;
9
+ for (const gram of a)
10
+ if (b.has(gram))
11
+ common++;
12
+ return 2 * common / (a.size + b.size);
13
+ }
14
+ export const CONVERSATION_WINDOW_MS = 5 * 60_000;
15
+ export function activeConversation(context) {
16
+ const age = context.recent ? context.now - context.recent.at : Infinity;
17
+ return age >= 0 && age < CONVERSATION_WINDOW_MS;
18
+ }
19
+ export function conversationEnded(text) {
20
+ return /(?:别再?回复|不要(?:再|继续)?回复|不用(?:再)?回[复答]?|不用回答|先不聊|不聊了|暂停聊天|结束这个话题|让我安静|stop (?:talking|replying)|no reply (?:needed|required)|leave me alone)/iu.test(text);
21
+ }
22
+ function directAddress(text, name) {
23
+ if (!name || name.length < 2 || !text.startsWith(name))
24
+ return false;
25
+ const tail = text.slice(name.length);
26
+ return !tail || /^[\s,,::!!??、]/u.test(tail) || /^(?:你|人呢|在吗|在不在|出来|来一下|帮我|帮忙|能不能|可以|会不会)/u.test(tail);
27
+ }
28
+ /** Strong routing facts run before semantics. No random draw in a live conversation. */
29
+ export function routeGroupReply(event, context) {
30
+ const text = event.text.trim(), group = event.qqGroup;
31
+ const decide = (reply, route, reason) => ({ reply, route, score: reply ? 100 : 0, probability: reply ? 1 : 0, reasons: [reason] });
32
+ if (group?.mentioned)
33
+ return decide(true, 'direct', '明确 @ 伙伴');
34
+ if (group?.replyTo === 'self')
35
+ return decide(true, 'direct', '引用伙伴已确认发送的消息');
36
+ if (group?.otherMention || group?.replyTo === 'other')
37
+ return decide(false, 'other', '消息明确发给其他成员');
38
+ if (conversationEnded(text))
39
+ return decide(false, 'closing', '用户明确结束或暂停接话');
40
+ if (!group?.hasReply && directAddress(text, context.name.trim()))
41
+ return decide(true, 'direct', '直接叫到角色名字');
42
+ if (context.owner && !group?.hasReply && (context.addresses ?? []).some(name => directAddress(text, name)))
43
+ return decide(true, 'direct', '归属账号使用关系称呼呼唤');
44
+ // A successful delivered reply establishes one speaker's thread; another speaker does not erase it.
45
+ if (activeConversation(context))
46
+ return decide(true, 'continuation', '接续与此人的对话,不逐条抽签');
47
+ return undefined;
48
+ }
49
+ export function scoreGroupReply(event, context) {
50
+ const routed = routeGroupReply(event, context);
51
+ if (routed)
52
+ return routed;
53
+ const text = event.text.trim(), semantic = context.semantic;
54
+ const decide = (reply, route, reason, score = reply ? 100 : 0) => ({ reply, route, score, probability: reply ? 1 : 0, reasons: [reason] });
55
+ // Closing acknowledgements only suppress a NEW conversation, never an ongoing exchange.
56
+ if (!event.media?.length && /^(?:嗯{1,3}|好|好的|收到|ok|知道了|了解)[\s。.!!~~]*$/iu.test(text))
57
+ return decide(false, 'closing', '独立确认语,没有正在接续的对话');
58
+ if (semantic) {
59
+ const score = Math.round(semantic.confidence * 100);
60
+ if (['address', 'engage'].includes(semantic.label) && semantic.confidence >= .38)
61
+ return decide(true, 'semantic', '本地语义识别为呼唤或交流', score);
62
+ // An uncertain classification must never become a hard rejection. Guests also get this fallback.
63
+ if (semantic.confidence >= .72 && semantic.margin >= .35 && ['other', 'close', 'background'].includes(semantic.label))
64
+ return decide(false, 'semantic', `本地语义明确识别为 ${semantic.label}`, score);
65
+ }
66
+ if (event.media?.length)
67
+ return decide(true, 'fallback', '附件交给回复模型结合上下文判断');
68
+ if (text)
69
+ return decide(true, 'fallback', semantic ? '语义归属不确定,交给回复模型判断' : '本地语义暂不可用,保留消息进入回复流程');
70
+ return decide(false, 'fallback', '空消息');
71
+ }
72
+ //# sourceMappingURL=reply-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-rules.js","sourceRoot":"","sources":["../../../src/channels/qq/reply-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ToolDefinition } from '@deepseek-ai/dsh-tools';
2
+ import type { PartnerStore } from '../../store.js';
3
+ import type { QqActionCall } from './actions.js';
4
+ /** Conversation-only voice delivery: no target, file, URL or arbitrary API arguments. */
5
+ export declare function qqReplyTool(owner: string, store: PartnerStore, call: QqActionCall): ToolDefinition;
6
+ //# sourceMappingURL=reply-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-tool.d.ts","sourceRoot":"","sources":["../../../src/channels/qq/reply-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAKlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,cAAc,CAiFlG"}
@@ -0,0 +1,113 @@
1
+ import { channelReplyAllowed } from '../reply-access.js';
2
+ import { createHash } from 'node:crypto';
3
+ import { questionOrigin } from '../question-origin.js';
4
+ import { isIdleContactNotice } from '../../character/idle-contact.js';
5
+ import { qqSettings, qqGroupPeer } from './settings.js';
6
+ import { qqMediaUrl } from './transport.js';
7
+ /** Conversation-only voice delivery: no target, file, URL or arbitrary API arguments. */
8
+ export function qqReplyTool(owner, store, call) {
9
+ return {
10
+ name: 'partner_qq_reply',
11
+ description: '向当前 QQ 聊天对象回复语音。voices 查询当前可用音色;voice 把 text 转成语音并发送,成功后结束回合,不重复发文字。无需填写接收人;不能读取本地文件、转发到其他联系人或使用 QQ 空间/管理能力。语音是否可用由渠道的聊天回复设置控制。普通文字和表情仍使用 partner_chat_reply 或最终正文。',
12
+ parameters: { type: 'object', additionalProperties: false, required: ['action'], properties: {
13
+ action: { type: 'string', enum: ['voices', 'voice'] }, text: { type: 'string', minLength: 1, maxLength: 2000 }, character: { type: 'string', minLength: 1, maxLength: 200 },
14
+ } },
15
+ output: { schema: { type: 'object' }, render: (_args, value) => [{ type: 'text', text: JSON.stringify(value) }] },
16
+ presentCall: () => ({ card: 'generic', title: 'QQ 语音回复' }),
17
+ async execute(raw, exec) {
18
+ const args = raw;
19
+ if (!args || Object.keys(args).some(k => !['action', 'text', 'character'].includes(k)) || !['voices', 'voice'].includes(args.action))
20
+ throw Error('语音回复参数无效');
21
+ if (args.action === 'voice' && (typeof args.text !== 'string' || !args.text.trim() || args.text.length > 2000))
22
+ throw Error('请提供 1–2000 字的语音内容');
23
+ if (args.character !== undefined && (typeof args.character !== 'string' || !args.character.trim() || args.character.length > 200))
24
+ throw Error('音色标识无效');
25
+ const agent = exec.agent;
26
+ if (!agent)
27
+ throw Error('需要当前 QQ 会话');
28
+ const origin = () => {
29
+ const state = store.snapshot(), events = agent.session.snapshotEvents();
30
+ const latest = [...events].reverse().find(e => e.type === 'user/message' && (e.data.source.kind === 'user' || isIdleContactNotice(e)));
31
+ const route = latest && isIdleContactNotice(latest)
32
+ ? state.sessions.find(r => r.sessionId === agent.session.id && latest.type === 'user/message' && r.idleContactState?.messageId === latest.data.id)
33
+ : questionOrigin(agent.session.id, events, state.sessions);
34
+ return { state, route, messageId: latest?.type === 'user/message' ? latest.data.id : undefined };
35
+ };
36
+ const initial = origin(), route = initial.route;
37
+ const channel = initial.state.channels.find(c => c.id === route?.channelId && c.companionId === owner && c.platform === 'qq');
38
+ if (!route || route.companionId !== owner || !channel)
39
+ throw Error('只能回复本轮实际来自的 QQ 会话');
40
+ const group = qqGroupPeer(route.userId);
41
+ const guard = () => {
42
+ exec.signal.throwIfAborted();
43
+ const now = origin(), current = now.state.channels.find(c => c.id === channel.id), settings = qqSettings(current?.qq);
44
+ if (store.isCompanionRemoving(owner) || now.route?.id !== route.id || now.messageId !== initial.messageId || !current?.enabled || current.updatedAt !== channel.updatedAt || !settings.replyVoiceEnabled)
45
+ throw Error('语音回复已关闭,或当前对象/渠道配置已变化');
46
+ if (!channelReplyAllowed(now.state, channel.id, route.userId, group ? 'group:' + group.groupId : route.userId))
47
+ throw Error('当前联系人访问许可已撤回');
48
+ if (group ? !settings.groupReplies || !settings.groupIds.includes(group.groupId) : !settings.privateReplies)
49
+ throw Error('当前会话回复已关闭');
50
+ return settings;
51
+ };
52
+ const settings = guard();
53
+ const sourceGroup = group?.groupId || settings.replyVoiceGroupId || settings.groupIds[0];
54
+ if (!sourceGroup || !settings.groupIds.includes(sourceGroup))
55
+ throw Error('请在聊天回复中选择可用的 QQ 音色来源群');
56
+ const signal = AbortSignal.any([exec.signal, AbortSignal.timeout(60000)]);
57
+ const voices = async () => {
58
+ const result = await call(channel.id, 'get_ai_characters', { group_id: Number(sourceGroup), chat_type: 1 }, signal, () => { guard(); });
59
+ guard();
60
+ return Array.isArray(result) ? result.flatMap(row => Array.isArray(row?.characters) ? row.characters.filter((v) => typeof v.character_id === 'string' && typeof v.character_name === 'string').map((v) => ({ id: v.character_id, name: v.character_name })) : []).slice(0, 100) : [];
61
+ };
62
+ if (args.action === 'voices')
63
+ return { voices: await voices() };
64
+ if (typeof exec.concludeTurn !== 'function' || !exec.callId)
65
+ throw Error('当前宿主不支持语音回复终结');
66
+ const character = args.character?.trim() || settings.voiceCharacter || (await voices())[0]?.id;
67
+ if (!character)
68
+ throw Error('当前没有可用音色,请选择音色或改用文字');
69
+ const receiptId = createHash('sha256').update(JSON.stringify(['reply-voice', owner, agent.session.id, exec.callId])).digest('hex');
70
+ let previous;
71
+ await store.update(state => {
72
+ guard();
73
+ const current = state.channels.find(c => c.id === channel.id);
74
+ const log = current.qqActivity ??= [];
75
+ previous = log.find(r => r.id === receiptId)?.status;
76
+ if (!previous)
77
+ log.push({ id: receiptId, action: 'reply_voice', at: Date.now(), status: 'pending' });
78
+ });
79
+ if (previous) {
80
+ if (previous === 'confirmed')
81
+ exec.concludeTurn();
82
+ return { status: previous, resent: false };
83
+ }
84
+ try {
85
+ guard();
86
+ let result;
87
+ if (group)
88
+ result = await call(channel.id, 'send_group_ai_record', { group_id: Number(group.groupId), character, text: args.text.trim(), chat_type: 1 }, signal, () => { guard(); });
89
+ else {
90
+ const generated = await call(channel.id, 'get_ai_record', { group_id: Number(sourceGroup), character, text: args.text.trim(), chat_type: 1 }, signal, () => { guard(); });
91
+ if (typeof generated !== 'string')
92
+ throw Error('未取得生成语音');
93
+ // Only a trusted QQ-generated media URL, never a caller supplied file/URL.
94
+ const url = qqMediaUrl(generated).href;
95
+ guard();
96
+ result = await call(channel.id, 'send_private_msg', { user_id: Number(route.userId), message: [{ type: 'record', data: { file: url } }] }, signal, () => { guard(); });
97
+ }
98
+ if (!result || !['string', 'number'].includes(typeof result.message_id) || !String(result.message_id) || Number(result.message_id) === 0)
99
+ throw Error('QQ 未确认语音发送');
100
+ await store.update(state => { const receipt = state.channels.find(c => c.id === channel.id)?.qqActivity?.find(r => r.id === receiptId); if (receipt)
101
+ receipt.status = 'confirmed'; });
102
+ exec.concludeTurn();
103
+ return { status: 'confirmed', spokenText: args.text.trim(), messageId: String(result.message_id) };
104
+ }
105
+ catch {
106
+ await store.update(state => { const receipt = state.channels.find(c => c.id === channel.id)?.qqActivity?.find(r => r.id === receiptId); if (receipt && receipt.status !== 'confirmed')
107
+ receipt.status = 'unknown'; });
108
+ throw Error('语音未确认发送,请查看 QQ 实际结果;不要自动重复发送。');
109
+ }
110
+ },
111
+ };
112
+ }
113
+ //# sourceMappingURL=reply-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-tool.js","sourceRoot":"","sources":["../../../src/channels/qq/reply-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export interface QqSettings {
2
+ identityBinding: {
3
+ enabled: boolean;
4
+ qqIds?: string[]; /** Legacy single-account input. */
5
+ qqId?: string;
6
+ };
7
+ replyVoiceEnabled?: boolean;
8
+ replyVoiceGroupId?: string;
9
+ autonomousActions: boolean;
10
+ enabledActions: string[];
11
+ qzoneVisibility: 1 | 4 | 64;
12
+ voiceCharacter: string;
13
+ privateReplies: boolean;
14
+ groupReplies: boolean;
15
+ groupIds: string[];
16
+ mainSessionPeers: string[];
17
+ autonomousGroupIds: string[];
18
+ stickerSource: 'channel' | 'default';
19
+ groupTrigger: 'mention' | 'all';
20
+ mentionSender: boolean;
21
+ facesEnabled: boolean;
22
+ imagesEnabled: boolean;
23
+ }
24
+ export declare const DEFAULT_QQ_SETTINGS: QqSettings;
25
+ export declare function boundQqIds(value?: QqSettings['identityBinding']): string[];
26
+ export declare function qqSettings(value?: Partial<QqSettings>): QqSettings;
27
+ export declare function parseQqSettings(value: unknown): QqSettings;
28
+ export declare function validQqId(id: string): boolean;
29
+ export declare function qqGroupPeer(value: string): {
30
+ groupId: string;
31
+ userId: string;
32
+ } | undefined;
33
+ export declare function qqPeerLabel(value: string): string;
34
+ export declare function qqGroupRoute(route: {
35
+ userId: string;
36
+ channelId: string;
37
+ }, channels: readonly {
38
+ id: string;
39
+ platform?: string;
40
+ }[]): boolean;
41
+ export declare function qqSessionTarget(userId: string): string;
42
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/channels/qq/settings.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,mCAAmC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1G,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,aAAa,EAAE,SAAS,GAAG,SAAS,CAAA;IACpC,YAAY,EAAE,SAAS,GAAG,KAAK,CAAA;IAC/B,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;CACvB;AACD,eAAO,MAAM,mBAAmB,EAAE,UAAuY,CAAA;AACza,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,MAAM,EAAE,CAI1E;AACD,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAGlE;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CA2B1D;AACD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAwE;AACtH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG;IAAC,OAAO,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAA;CAAC,GAAC,SAAS,CAGnF;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAA4F;AAC9I,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAC,MAAM,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAA;CAAC,EAAE,QAAQ,EAAE,SAAS;IAAC,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,EAAC,MAAM,CAAA;CAAC,EAAE,GAAG,OAAO,CAEhI;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAC,MAAM,GAAE,MAAM,CAA8F"}
@@ -0,0 +1,68 @@
1
+ import { QQ_ACTION_MAP } from './action-catalog.js';
2
+ export const DEFAULT_QQ_SETTINGS = { replyVoiceEnabled: false, replyVoiceGroupId: '', identityBinding: { enabled: false, qqIds: [] }, autonomousActions: false, enabledActions: [], qzoneVisibility: 4, voiceCharacter: '', privateReplies: true, groupReplies: false, groupIds: [], mainSessionPeers: [], autonomousGroupIds: [], stickerSource: 'channel', groupTrigger: 'mention', mentionSender: true, facesEnabled: true, imagesEnabled: true };
3
+ export function boundQqIds(value) {
4
+ if (value?.enabled === false)
5
+ return [];
6
+ const ids = value?.qqIds ?? (value?.qqId ? [value.qqId] : []);
7
+ return Array.isArray(ids) ? [...new Set(ids.filter(id => typeof id === 'string' && validQqId(id.trim())).map(id => id.trim()))].slice(0, 100) : [];
8
+ }
9
+ export function qqSettings(value) {
10
+ const qqIds = boundQqIds(value?.identityBinding);
11
+ return { ...DEFAULT_QQ_SETTINGS, ...value, replyVoiceEnabled: value?.replyVoiceEnabled ?? Boolean(value?.autonomousActions && value?.enabledActions?.includes('send_group_ai_record')), replyVoiceGroupId: value?.replyVoiceGroupId ?? '', identityBinding: { enabled: qqIds.length > 0, qqIds }, enabledActions: [...(value?.enabledActions ?? [])], groupIds: [...(value?.groupIds ?? [])], mainSessionPeers: [...(value?.mainSessionPeers ?? [])], autonomousGroupIds: [...(value?.autonomousGroupIds ?? [])] };
12
+ }
13
+ export function parseQqSettings(value) {
14
+ if (!value || typeof value !== 'object' || Array.isArray(value))
15
+ throw Error('QQ 设置格式无效');
16
+ const v = value;
17
+ for (const key of ['privateReplies', 'groupReplies', 'mentionSender', 'facesEnabled', 'imagesEnabled'])
18
+ if (typeof v[key] !== 'boolean')
19
+ throw Error('QQ 开关设置无效');
20
+ if (v.groupTrigger !== 'mention' && v.groupTrigger !== 'all')
21
+ throw Error('请选择群聊触发方式');
22
+ if (!Array.isArray(v.groupIds) || v.groupIds.length > 100 || v.groupIds.some(id => typeof id !== 'string' || !validQqId(id)))
23
+ throw Error('群号列表无效(最多 100 个群)');
24
+ const peers = v.mainSessionPeers ?? [];
25
+ if (!Array.isArray(peers) || peers.length > 100 || peers.some(peer => typeof peer !== 'string' || !/^(private|group):[1-9]\d{4,15}$/.test(peer) || !validQqId(peer.split(':')[1])))
26
+ throw Error('主会话对象列表无效(最多 100 个用户或群)');
27
+ const autonomous = v.autonomousGroupIds ?? [];
28
+ if (!Array.isArray(autonomous) || autonomous.length > 100 || autonomous.some(id => !v.groupIds.includes(id)))
29
+ throw Error('自主回复白名单必须从已选群组中选择');
30
+ if (v.stickerSource !== undefined && v.stickerSource !== 'channel' && v.stickerSource !== 'default')
31
+ throw Error('请选择表情来源');
32
+ if (v.autonomousActions !== undefined && typeof v.autonomousActions !== 'boolean')
33
+ throw Error('自主能力开关无效');
34
+ const actions = v.enabledActions ?? [];
35
+ if (!Array.isArray(actions) || actions.length > 100 || actions.some(id => typeof id !== 'string' || !QQ_ACTION_MAP.has(id)))
36
+ throw Error('自主能力列表无效');
37
+ if (v.qzoneVisibility !== undefined && ![1, 4, 64].includes(v.qzoneVisibility))
38
+ throw Error('空间默认可见范围无效');
39
+ if (v.voiceCharacter !== undefined && (typeof v.voiceCharacter !== 'string' || v.voiceCharacter.length > 200))
40
+ throw Error('默认音色无效');
41
+ if (v.replyVoiceEnabled !== undefined && typeof v.replyVoiceEnabled !== 'boolean')
42
+ throw Error('语音回复开关无效');
43
+ if (v.replyVoiceGroupId !== undefined && (typeof v.replyVoiceGroupId !== 'string' || (v.replyVoiceGroupId !== '' && !v.groupIds.includes(v.replyVoiceGroupId))))
44
+ throw Error('语音来源群须在已接入群中');
45
+ const binding = v.identityBinding ?? { enabled: false, qqId: '' };
46
+ if (!binding || typeof binding !== 'object' || Array.isArray(binding))
47
+ throw Error('身份关系绑定格式无效');
48
+ const relation = binding;
49
+ if (relation.enabled !== undefined && typeof relation.enabled !== 'boolean')
50
+ throw Error('归属账号开关无效');
51
+ const rawIds = relation.qqIds ?? (typeof relation.qqId === 'string' ? (relation.qqId.trim() ? [relation.qqId.trim()] : []) : []);
52
+ if ((relation.qqId !== undefined && typeof relation.qqId !== 'string') || !Array.isArray(rawIds) || rawIds.length > 100 || rawIds.some(id => typeof id !== 'string' || (id.trim() !== '' && !validQqId(id.trim()))))
53
+ throw Error('请填写有效的归属 QQ 号,最多 100 个');
54
+ const qqIds = relation.enabled === false ? [] : [...new Set(rawIds.map(id => id.trim()).filter(Boolean))];
55
+ const enabled = qqIds.length > 0;
56
+ return { replyVoiceEnabled: v.replyVoiceEnabled ?? Boolean(v.autonomousActions && actions.includes('send_group_ai_record')), replyVoiceGroupId: v.replyVoiceGroupId ?? '', identityBinding: { enabled, qqIds }, autonomousActions: v.autonomousActions ?? false, enabledActions: [...new Set(actions)], qzoneVisibility: v.qzoneVisibility ?? 4, voiceCharacter: v.voiceCharacter ?? '', mainSessionPeers: [...new Set(peers)], autonomousGroupIds: [...new Set(autonomous)], stickerSource: v.stickerSource ?? 'channel', privateReplies: v.privateReplies, groupReplies: v.groupReplies, mentionSender: v.mentionSender, facesEnabled: v.facesEnabled, imagesEnabled: v.imagesEnabled, groupTrigger: v.groupTrigger, groupIds: [...new Set(v.groupIds)] };
57
+ }
58
+ export function validQqId(id) { return /^[1-9]\d{4,15}$/.test(id) && Number.isSafeInteger(Number(id)); }
59
+ export function qqGroupPeer(value) {
60
+ const m = /^group:(\d+):(\d+)$/.exec(value);
61
+ return m && validQqId(m[1]) && validQqId(m[2]) ? { groupId: m[1], userId: m[2] } : undefined;
62
+ }
63
+ export function qqPeerLabel(value) { const peer = qqGroupPeer(value); return peer ? `群 ${peer.groupId} · QQ ${peer.userId}` : value; }
64
+ export function qqGroupRoute(route, channels) {
65
+ return !!qqGroupPeer(route.userId) && channels.some(c => c.id === route.channelId && c.platform === 'qq');
66
+ }
67
+ export function qqSessionTarget(userId) { const group = qqGroupPeer(userId); return group ? `group:${group.groupId}` : `private:${userId}`; }
68
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/channels/qq/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { WeixinChannel } from '../../domain.js';
2
+ import type { StickerAdapter } from '../../chat/sticker-adapter.js';
3
+ import type { QqFace } from './catalog.js';
4
+ export declare function qqStickerAdapter(channel: WeixinChannel, fallback: StickerAdapter, catalog: () => Promise<QqFace[]>): StickerAdapter;
5
+ //# sourceMappingURL=sticker-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sticker-adapter.d.ts","sourceRoot":"","sources":["../../../src/channels/qq/sticker-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,+BAA+B,CAAA;AACpF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAG1C,wBAAgB,gBAAgB,CAAC,OAAO,EAAC,aAAa,EAAC,QAAQ,EAAC,cAAc,EAAC,OAAO,EAAC,MAAI,OAAO,CAAC,MAAM,EAAE,CAAC,GAAE,cAAc,CAmC3H"}
@@ -0,0 +1,43 @@
1
+ import { validEmojiPreview } from '../../chat/sticker-adapter.js';
2
+ import { qqSettings } from './settings.js';
3
+ export function qqStickerAdapter(channel, fallback, catalog) {
4
+ const policy = qqSettings(channel.qq);
5
+ const enabled = policy.stickerSource !== 'default';
6
+ const native = async () => enabled ? (await catalog().catch(() => [])).filter(f => f.kind === 'custom' ? policy.imagesEnabled : policy.facesEnabled) : [];
7
+ const terms = (s) => s.replace(/^\//, '').normalize('NFKC').toLowerCase().split(/[\s,,、;;]+/).filter(Boolean);
8
+ const score = (face, query) => terms(query).reduce((n, t) => n + (terms(face.name + ' ' + (face.tags ?? []).join(' ')).some(f => f.includes(t) || (f.length > 1 && t.includes(f))) ? 1 : 0), 0);
9
+ const key = (f) => (f.kind === 'custom' ? 'qq-custom-' : 'qq-face-') + f.id;
10
+ const item = (f) => ({ id: key(f), name: f.name.replace(/^\//, ''), tags: ['QQ原生表情', f.category, ...(f.tags ?? [])].slice(0, 8), mediaType: 'image/gif', size: 0 });
11
+ const resolve = (face) => ({ item: item(face), native: { provider: face.kind === 'custom' ? 'qq-custom' : 'qq', id: face.nativeId ?? face.id, channelId: channel.id, accountId: channel.accountId, label: face.name.replace(/^\//, ''), ...(validEmojiPreview(face.image ?? '') ? { previewUrl: face.image } : {}) } });
12
+ return {
13
+ async list(owner, query, signal) {
14
+ signal.throwIfAborted();
15
+ const faces = (await native()).map(f => ({ f, score: score(f, query) })).filter(e => !query.trim() || e.score > 0).sort((a, b) => b.score - a.score).slice(0, 48).map(e => item(e.f));
16
+ const defaults = policy.imagesEnabled ? await fallback.list(owner, query, signal) : [];
17
+ return [...faces, ...defaults.slice(0, 24)];
18
+ },
19
+ async resolve(owner, id, signal) {
20
+ signal.throwIfAborted();
21
+ if ((id.startsWith('qq-face-') || id.startsWith('qq-custom-'))) {
22
+ if (!enabled)
23
+ throw Error('QQ 原生表情已关闭,请重新查询默认表情库');
24
+ const face = (await native()).find(f => key(f) === id);
25
+ if (!face)
26
+ throw Error('QQ 表情目录已变化或不可用,请重新查询表情库');
27
+ return resolve(face);
28
+ }
29
+ const original = await fallback.resolve(owner, id, signal);
30
+ // Prefer native equivalents for familiar built-ins; preserve custom authored images.
31
+ if (enabled && id.startsWith('builtin-')) {
32
+ const query = [original.item.name, ...original.item.tags].join(' ');
33
+ const match = (await native()).map(f => ({ f, score: score(f, query) })).filter(e => e.score > 0).sort((a, b) => b.score - a.score)[0];
34
+ if (match)
35
+ return resolve(match.f);
36
+ }
37
+ if (!policy.imagesEnabled)
38
+ throw Error('QQ 图片与表情包发送已关闭');
39
+ return original;
40
+ }
41
+ };
42
+ }
43
+ //# sourceMappingURL=sticker-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sticker-adapter.js","sourceRoot":"","sources":["../../../src/channels/qq/sticker-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { OneBotConnection } from './connection.js';
2
+ import type { DirectBatch, DirectConfig, DirectMessage } from '../direct/transport.js';
3
+ import { type PartnerInboundAttachment, type PartnerOutboundAttachment } from '../../channel-message.js';
4
+ /** Only public QQ media hosts; never forward the OneBot token to media URLs. */
5
+ export declare function qqMediaUrl(source: string): URL;
6
+ export declare class OneBotTransport {
7
+ readonly config: DirectConfig;
8
+ private readonly expected?;
9
+ readonly connection: OneBotConnection;
10
+ constructor(config: DirectConfig, token: string, expected?: {
11
+ accountId: string;
12
+ peerId: string;
13
+ } | undefined, connection?: OneBotConnection);
14
+ validate(signal?: AbortSignal): Promise<{
15
+ accountId: string;
16
+ peerId: string;
17
+ }>;
18
+ poll(signal: AbortSignal, waitMs: number): Promise<DirectBatch>;
19
+ sendText(userId: string, text: string, signal?: AbortSignal, authorize?: () => void): Promise<void>;
20
+ private recipient;
21
+ sendAttachment(userId: string, file: PartnerOutboundAttachment, signal: AbortSignal, allowed: () => boolean): Promise<void>;
22
+ private sendAction;
23
+ private destination;
24
+ private mention;
25
+ sendCustomFace(userId: string, emojiId: string, signal: AbortSignal, authorize: () => void): Promise<void>;
26
+ sendFace(userId: string, faceId: string, signal: AbortSignal, authorize: () => void): Promise<void>;
27
+ receiveAttachments(message: DirectMessage, signal: AbortSignal, allowed: () => boolean, maxBytes?: number): Promise<PartnerInboundAttachment[]>;
28
+ }
29
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/channels/qq/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAe,MAAM,iBAAiB,CAAA;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtF,OAAO,EAA0C,KAAK,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEhJ,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAS9C;AAED,qBAAa,eAAe;IAEd,QAAQ,CAAC,MAAM,EAAE,YAAY;IAAiB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IADpF,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAA;gBAChB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAmB,QAAQ,CAAC,EAAE;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,YAAA,EAAE,UAAU,CAAC,EAAE,gBAAgB;IAIlJ,QAAQ,CAAC,MAAM,cAA6B,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC;IA0B3F,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAW/D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAY3F,SAAS;IAMjB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjI,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,OAAO;IAIT,cAAc,CAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,SAAS,EAAC,MAAI,IAAI,GAAE,OAAO,CAAC,IAAI,CAAC;IAQhG,QAAQ,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,SAAS,EAAC,MAAI,IAAI,GAAE,OAAO,CAAC,IAAI,CAAC;IAQzF,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,EAAE,QAAQ,SAA0B,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;CA2BvK"}