@xgjktech/xg_cwork_im 1.19.42 → 1.19.43

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 (370) hide show
  1. package/README.md +492 -492
  2. package/dist/src/account-connection.d.ts +1 -1
  3. package/dist/src/account-connection.d.ts.map +1 -1
  4. package/dist/src/account-connection.js +25 -136
  5. package/dist/src/account-connection.js.map +1 -1
  6. package/dist/src/account-reconciler.d.ts +8 -17
  7. package/dist/src/account-reconciler.d.ts.map +1 -1
  8. package/dist/src/account-reconciler.js +11 -31
  9. package/dist/src/account-reconciler.js.map +1 -1
  10. package/dist/src/account-reconciler.test.js +1 -19
  11. package/dist/src/account-reconciler.test.js.map +1 -1
  12. package/dist/src/action-store-access.d.ts +0 -2
  13. package/dist/src/action-store-access.d.ts.map +1 -1
  14. package/dist/src/action-store-access.js +0 -7
  15. package/dist/src/action-store-access.js.map +1 -1
  16. package/dist/src/active-round-registry.d.ts +0 -6
  17. package/dist/src/active-round-registry.d.ts.map +1 -1
  18. package/dist/src/active-round-registry.js +2 -27
  19. package/dist/src/active-round-registry.js.map +1 -1
  20. package/dist/src/agent-stream-client-registry.d.ts +0 -2
  21. package/dist/src/agent-stream-client-registry.d.ts.map +1 -1
  22. package/dist/src/agent-stream-client-registry.js +1 -6
  23. package/dist/src/agent-stream-client-registry.js.map +1 -1
  24. package/dist/src/apply-sync-mapping.d.ts +1 -1
  25. package/dist/src/apply-sync-mapping.d.ts.map +1 -1
  26. package/dist/src/auth.d.ts +0 -2
  27. package/dist/src/auth.d.ts.map +1 -1
  28. package/dist/src/auth.js +0 -4
  29. package/dist/src/auth.js.map +1 -1
  30. package/dist/src/block-streaming-config.test.js +1 -7
  31. package/dist/src/block-streaming-config.test.js.map +1 -1
  32. package/dist/src/build-project-prompt.test.js +18 -18
  33. package/dist/src/channel-config.d.ts +17 -83
  34. package/dist/src/channel-config.d.ts.map +1 -1
  35. package/dist/src/channel-config.js +13 -46
  36. package/dist/src/channel-config.js.map +1 -1
  37. package/dist/src/channel-config.test.js +1 -58
  38. package/dist/src/channel-config.test.js.map +1 -1
  39. package/dist/src/channel.d.ts +3 -4
  40. package/dist/src/channel.d.ts.map +1 -1
  41. package/dist/src/channel.js +4 -127
  42. package/dist/src/channel.js.map +1 -1
  43. package/dist/src/connection.d.ts +0 -28
  44. package/dist/src/connection.d.ts.map +1 -1
  45. package/dist/src/connection.js +78 -155
  46. package/dist/src/connection.js.map +1 -1
  47. package/dist/src/deliver-text.test.js +22 -22
  48. package/dist/src/delivery/deliver-text.test.js +22 -22
  49. package/dist/src/delivery/turn-deliver-buffer.test.js +25 -25
  50. package/dist/src/dispatch-mentioned-reply.d.ts +2 -7
  51. package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
  52. package/dist/src/dispatch-mentioned-reply.js +68 -243
  53. package/dist/src/dispatch-mentioned-reply.js.map +1 -1
  54. package/dist/src/gateway-session-queue.d.ts +6 -2
  55. package/dist/src/gateway-session-queue.d.ts.map +1 -1
  56. package/dist/src/gateway-session-queue.js +21 -78
  57. package/dist/src/gateway-session-queue.js.map +1 -1
  58. package/dist/src/group-history-tool.d.ts +1 -1
  59. package/dist/src/group-history-tool.d.ts.map +1 -1
  60. package/dist/src/inbound-display.d.ts.map +1 -1
  61. package/dist/src/inbound-display.js +1 -2
  62. package/dist/src/inbound-display.js.map +1 -1
  63. package/dist/src/inbound-input-media.d.ts +1 -1
  64. package/dist/src/inbound-input-media.d.ts.map +1 -1
  65. package/dist/src/inbound-media-local.d.ts +1 -1
  66. package/dist/src/inbound-media-local.d.ts.map +1 -1
  67. package/dist/src/inbound-model.d.ts +0 -9
  68. package/dist/src/inbound-model.d.ts.map +1 -1
  69. package/dist/src/inbound-model.js +0 -26
  70. package/dist/src/inbound-model.js.map +1 -1
  71. package/dist/src/inbound-model.test.js +1 -23
  72. package/dist/src/inbound-model.test.js.map +1 -1
  73. package/dist/src/inbound-terminal-state.d.ts +0 -2
  74. package/dist/src/inbound-terminal-state.d.ts.map +1 -1
  75. package/dist/src/inbound-terminal-state.js +2 -7
  76. package/dist/src/inbound-terminal-state.js.map +1 -1
  77. package/dist/src/modified-file-push-tracker.d.ts +24 -0
  78. package/dist/src/modified-file-push-tracker.d.ts.map +1 -0
  79. package/dist/src/modified-file-push-tracker.js +125 -0
  80. package/dist/src/modified-file-push-tracker.js.map +1 -0
  81. package/dist/src/nas-volumes.d.ts +2 -12
  82. package/dist/src/nas-volumes.d.ts.map +1 -1
  83. package/dist/src/nas-volumes.js +37 -147
  84. package/dist/src/nas-volumes.js.map +1 -1
  85. package/dist/src/nas-volumes.test.js +7 -39
  86. package/dist/src/nas-volumes.test.js.map +1 -1
  87. package/dist/src/per-message-model-pending.d.ts +3 -38
  88. package/dist/src/per-message-model-pending.d.ts.map +1 -1
  89. package/dist/src/per-message-model-pending.js +7 -96
  90. package/dist/src/per-message-model-pending.js.map +1 -1
  91. package/dist/src/plan/action-dispatch-event-compat.test.d.ts +2 -0
  92. package/dist/src/plan/action-dispatch-event-compat.test.d.ts.map +1 -0
  93. package/dist/src/plan/action-dispatch-event-compat.test.js +81 -0
  94. package/dist/src/plan/action-dispatch-event-compat.test.js.map +1 -0
  95. package/dist/src/plan/action-store-lifecycle.test.js +5 -5
  96. package/dist/src/plan/plan-core-db.test.js +9 -9
  97. package/dist/src/plan/plan-core-snapshot.test.js +9 -9
  98. package/dist/src/plan-event-subscription.d.ts +1 -1
  99. package/dist/src/plan-event-subscription.d.ts.map +1 -1
  100. package/dist/src/plan-stat-event.d.ts +15 -4
  101. package/dist/src/plan-stat-event.d.ts.map +1 -1
  102. package/dist/src/plan-stat-event.js +37 -4
  103. package/dist/src/plan-stat-event.js.map +1 -1
  104. package/dist/src/plan-stat-event.test.js +118 -1
  105. package/dist/src/plan-stat-event.test.js.map +1 -1
  106. package/dist/src/plan-store-access.d.ts +23 -0
  107. package/dist/src/plan-store-access.d.ts.map +1 -0
  108. package/dist/src/plan-store-access.js +96 -0
  109. package/dist/src/plan-store-access.js.map +1 -0
  110. package/dist/src/plan-store-access.test.d.ts +2 -0
  111. package/dist/src/plan-store-access.test.d.ts.map +1 -0
  112. package/dist/src/plan-store-access.test.js +207 -0
  113. package/dist/src/plan-store-access.test.js.map +1 -0
  114. package/dist/src/plan-tool-middleware.d.ts +11 -3
  115. package/dist/src/plan-tool-middleware.d.ts.map +1 -1
  116. package/dist/src/plan-tool-middleware.js +60 -11
  117. package/dist/src/plan-tool-middleware.js.map +1 -1
  118. package/dist/src/plan-tool-middleware.test.js +603 -83
  119. package/dist/src/plan-tool-middleware.test.js.map +1 -1
  120. package/dist/src/plan-ws-registry.d.ts +0 -4
  121. package/dist/src/plan-ws-registry.d.ts.map +1 -1
  122. package/dist/src/plan-ws-registry.js +0 -12
  123. package/dist/src/plan-ws-registry.js.map +1 -1
  124. package/dist/src/plan-ws-registry.test.js +1 -19
  125. package/dist/src/plan-ws-registry.test.js.map +1 -1
  126. package/dist/src/progress-display.d.ts +77 -0
  127. package/dist/src/progress-display.d.ts.map +1 -0
  128. package/dist/src/progress-display.js +420 -0
  129. package/dist/src/progress-display.js.map +1 -0
  130. package/dist/src/register-per-message-model-hook.d.ts +2 -10
  131. package/dist/src/register-per-message-model-hook.d.ts.map +1 -1
  132. package/dist/src/register-per-message-model-hook.js +6 -32
  133. package/dist/src/register-per-message-model-hook.js.map +1 -1
  134. package/dist/src/resolve-inbound-group-prompt.d.ts +1 -17
  135. package/dist/src/resolve-inbound-group-prompt.d.ts.map +1 -1
  136. package/dist/src/resolve-inbound-group-prompt.js +2 -16
  137. package/dist/src/resolve-inbound-group-prompt.js.map +1 -1
  138. package/dist/src/run-usage-session.d.ts +1 -4
  139. package/dist/src/run-usage-session.d.ts.map +1 -1
  140. package/dist/src/run-usage-session.js +1 -13
  141. package/dist/src/run-usage-session.js.map +1 -1
  142. package/dist/src/run-usage.d.ts +0 -15
  143. package/dist/src/run-usage.d.ts.map +1 -1
  144. package/dist/src/run-usage.js +4 -30
  145. package/dist/src/run-usage.js.map +1 -1
  146. package/dist/src/run-usage.test.js +11 -99
  147. package/dist/src/run-usage.test.js.map +1 -1
  148. package/dist/src/send-file-tool.d.ts +1 -1
  149. package/dist/src/send-file-tool.d.ts.map +1 -1
  150. package/dist/src/send-group-message-tool.d.ts +1 -1
  151. package/dist/src/send-group-message-tool.d.ts.map +1 -1
  152. package/dist/src/session/build-project-prompt.test.js +18 -18
  153. package/dist/src/session-im-context.d.ts +0 -2
  154. package/dist/src/session-im-context.d.ts.map +1 -1
  155. package/dist/src/session-im-context.js +2 -11
  156. package/dist/src/session-im-context.js.map +1 -1
  157. package/dist/src/subagent-delivery-phase.d.ts +10 -0
  158. package/dist/src/subagent-delivery-phase.d.ts.map +1 -0
  159. package/dist/src/subagent-delivery-phase.js +4 -0
  160. package/dist/src/subagent-delivery-phase.js.map +1 -0
  161. package/dist/src/subagent-delivery-phase.test.d.ts +2 -0
  162. package/dist/src/subagent-delivery-phase.test.d.ts.map +1 -0
  163. package/dist/src/subagent-delivery-phase.test.js +12 -0
  164. package/dist/src/subagent-delivery-phase.test.js.map +1 -0
  165. package/dist/src/subagent-monitor.d.ts +1 -14
  166. package/dist/src/subagent-monitor.d.ts.map +1 -1
  167. package/dist/src/subagent-monitor.js +36 -164
  168. package/dist/src/subagent-monitor.js.map +1 -1
  169. package/dist/src/subagent-monitor.test.js +0 -121
  170. package/dist/src/subagent-monitor.test.js.map +1 -1
  171. package/dist/src/tool-json-result.d.ts +1 -1
  172. package/dist/src/tool-json-result.d.ts.map +1 -1
  173. package/dist/src/turn/turn-agent-event-subscription.d.ts.map +1 -1
  174. package/dist/src/turn/turn-agent-event-subscription.js +14 -0
  175. package/dist/src/turn/turn-agent-event-subscription.js.map +1 -1
  176. package/dist/src/turn-deliver-buffer.test.js +25 -25
  177. package/dist/src/types.d.ts +1 -48
  178. package/dist/src/types.d.ts.map +1 -1
  179. package/dist/src/types.js.map +1 -1
  180. package/dist/src/workspace/nas-volumes.test.js +3 -2
  181. package/dist/src/workspace/nas-volumes.test.js.map +1 -1
  182. package/dist/src/ws-inbound-schema.d.ts.map +1 -1
  183. package/dist/src/ws-inbound-schema.js +0 -1
  184. package/dist/src/ws-inbound-schema.js.map +1 -1
  185. package/openclaw.plugin.json +30 -30
  186. package/package.json +83 -83
  187. package/dist/src/action-store-lifecycle.test.d.ts +0 -2
  188. package/dist/src/action-store-lifecycle.test.d.ts.map +0 -1
  189. package/dist/src/action-store-lifecycle.test.js +0 -195
  190. package/dist/src/action-store-lifecycle.test.js.map +0 -1
  191. package/dist/src/active-cron-context-store.d.ts +0 -20
  192. package/dist/src/active-cron-context-store.d.ts.map +0 -1
  193. package/dist/src/active-cron-context-store.js +0 -73
  194. package/dist/src/active-cron-context-store.js.map +0 -1
  195. package/dist/src/assistant-item-delivery.d.ts +0 -27
  196. package/dist/src/assistant-item-delivery.d.ts.map +0 -1
  197. package/dist/src/assistant-item-delivery.js +0 -134
  198. package/dist/src/assistant-item-delivery.js.map +0 -1
  199. package/dist/src/assistant-item-delivery.test.d.ts +0 -2
  200. package/dist/src/assistant-item-delivery.test.d.ts.map +0 -1
  201. package/dist/src/assistant-item-delivery.test.js +0 -116
  202. package/dist/src/assistant-item-delivery.test.js.map +0 -1
  203. package/dist/src/assistant-item-sink.d.ts +0 -17
  204. package/dist/src/assistant-item-sink.d.ts.map +0 -1
  205. package/dist/src/assistant-item-sink.js +0 -34
  206. package/dist/src/assistant-item-sink.js.map +0 -1
  207. package/dist/src/connection-workspace-event.test.d.ts +0 -2
  208. package/dist/src/connection-workspace-event.test.d.ts.map +0 -1
  209. package/dist/src/connection-workspace-event.test.js +0 -74
  210. package/dist/src/connection-workspace-event.test.js.map +0 -1
  211. package/dist/src/connection.test.d.ts +0 -2
  212. package/dist/src/connection.test.d.ts.map +0 -1
  213. package/dist/src/connection.test.js +0 -110
  214. package/dist/src/connection.test.js.map +0 -1
  215. package/dist/src/cron-appkey-binding-store.d.ts +0 -29
  216. package/dist/src/cron-appkey-binding-store.d.ts.map +0 -1
  217. package/dist/src/cron-appkey-binding-store.js +0 -239
  218. package/dist/src/cron-appkey-binding-store.js.map +0 -1
  219. package/dist/src/cron-appkey-binding-store.test.d.ts +0 -2
  220. package/dist/src/cron-appkey-binding-store.test.d.ts.map +0 -1
  221. package/dist/src/cron-appkey-binding-store.test.js +0 -387
  222. package/dist/src/cron-appkey-binding-store.test.js.map +0 -1
  223. package/dist/src/nas-site.d.ts +0 -16
  224. package/dist/src/nas-site.d.ts.map +0 -1
  225. package/dist/src/nas-site.js +0 -17
  226. package/dist/src/nas-site.js.map +0 -1
  227. package/dist/src/plan-core-adapter.d.ts +0 -54
  228. package/dist/src/plan-core-adapter.d.ts.map +0 -1
  229. package/dist/src/plan-core-adapter.js +0 -104
  230. package/dist/src/plan-core-adapter.js.map +0 -1
  231. package/dist/src/plan-core-adapter.test.d.ts +0 -2
  232. package/dist/src/plan-core-adapter.test.d.ts.map +0 -1
  233. package/dist/src/plan-core-adapter.test.js +0 -183
  234. package/dist/src/plan-core-adapter.test.js.map +0 -1
  235. package/dist/src/plan-core-db.d.ts +0 -22
  236. package/dist/src/plan-core-db.d.ts.map +0 -1
  237. package/dist/src/plan-core-db.js +0 -91
  238. package/dist/src/plan-core-db.js.map +0 -1
  239. package/dist/src/plan-core-db.test.d.ts +0 -2
  240. package/dist/src/plan-core-db.test.d.ts.map +0 -1
  241. package/dist/src/plan-core-db.test.js +0 -115
  242. package/dist/src/plan-core-db.test.js.map +0 -1
  243. package/dist/src/plan-core-snapshot.d.ts +0 -23
  244. package/dist/src/plan-core-snapshot.d.ts.map +0 -1
  245. package/dist/src/plan-core-snapshot.js +0 -66
  246. package/dist/src/plan-core-snapshot.js.map +0 -1
  247. package/dist/src/plan-core-snapshot.test.d.ts +0 -2
  248. package/dist/src/plan-core-snapshot.test.d.ts.map +0 -1
  249. package/dist/src/plan-core-snapshot.test.js +0 -157
  250. package/dist/src/plan-core-snapshot.test.js.map +0 -1
  251. package/dist/src/plugin-dispose.d.ts +0 -22
  252. package/dist/src/plugin-dispose.d.ts.map +0 -1
  253. package/dist/src/plugin-dispose.js +0 -66
  254. package/dist/src/plugin-dispose.js.map +0 -1
  255. package/dist/src/process-shared-store.d.ts +0 -48
  256. package/dist/src/process-shared-store.d.ts.map +0 -1
  257. package/dist/src/process-shared-store.js +0 -89
  258. package/dist/src/process-shared-store.js.map +0 -1
  259. package/dist/src/process-shared-store.test.d.ts +0 -2
  260. package/dist/src/process-shared-store.test.d.ts.map +0 -1
  261. package/dist/src/process-shared-store.test.js +0 -60
  262. package/dist/src/process-shared-store.test.js.map +0 -1
  263. package/dist/src/register-exec-env-hook.d.ts +0 -44
  264. package/dist/src/register-exec-env-hook.d.ts.map +0 -1
  265. package/dist/src/register-exec-env-hook.js +0 -473
  266. package/dist/src/register-exec-env-hook.js.map +0 -1
  267. package/dist/src/register-exec-env-hook.test.d.ts +0 -2
  268. package/dist/src/register-exec-env-hook.test.d.ts.map +0 -1
  269. package/dist/src/register-exec-env-hook.test.js +0 -189
  270. package/dist/src/register-exec-env-hook.test.js.map +0 -1
  271. package/dist/src/register-group-prompt-hook.d.ts +0 -17
  272. package/dist/src/register-group-prompt-hook.d.ts.map +0 -1
  273. package/dist/src/register-group-prompt-hook.js +0 -45
  274. package/dist/src/register-group-prompt-hook.js.map +0 -1
  275. package/dist/src/register-group-prompt-hook.test.d.ts +0 -2
  276. package/dist/src/register-group-prompt-hook.test.d.ts.map +0 -1
  277. package/dist/src/register-group-prompt-hook.test.js +0 -60
  278. package/dist/src/register-group-prompt-hook.test.js.map +0 -1
  279. package/dist/src/register-per-message-model-hook.test.d.ts +0 -2
  280. package/dist/src/register-per-message-model-hook.test.d.ts.map +0 -1
  281. package/dist/src/register-per-message-model-hook.test.js +0 -208
  282. package/dist/src/register-per-message-model-hook.test.js.map +0 -1
  283. package/dist/src/register-run-model-context-hook.d.ts +0 -11
  284. package/dist/src/register-run-model-context-hook.d.ts.map +0 -1
  285. package/dist/src/register-run-model-context-hook.js +0 -23
  286. package/dist/src/register-run-model-context-hook.js.map +0 -1
  287. package/dist/src/reply-dispatch-driver.d.ts +0 -89
  288. package/dist/src/reply-dispatch-driver.d.ts.map +0 -1
  289. package/dist/src/reply-dispatch-driver.js +0 -294
  290. package/dist/src/reply-dispatch-driver.js.map +0 -1
  291. package/dist/src/reply-dispatch-driver.test.d.ts +0 -2
  292. package/dist/src/reply-dispatch-driver.test.d.ts.map +0 -1
  293. package/dist/src/reply-dispatch-driver.test.js +0 -363
  294. package/dist/src/reply-dispatch-driver.test.js.map +0 -1
  295. package/dist/src/run-model-context.d.ts +0 -45
  296. package/dist/src/run-model-context.d.ts.map +0 -1
  297. package/dist/src/run-model-context.js +0 -108
  298. package/dist/src/run-model-context.js.map +0 -1
  299. package/dist/src/run-model-context.test.d.ts +0 -2
  300. package/dist/src/run-model-context.test.d.ts.map +0 -1
  301. package/dist/src/run-model-context.test.js +0 -68
  302. package/dist/src/run-model-context.test.js.map +0 -1
  303. package/dist/src/session-env-store.d.ts +0 -55
  304. package/dist/src/session-env-store.d.ts.map +0 -1
  305. package/dist/src/session-env-store.js +0 -328
  306. package/dist/src/session-env-store.js.map +0 -1
  307. package/dist/src/session-env-store.test.d.ts +0 -2
  308. package/dist/src/session-env-store.test.d.ts.map +0 -1
  309. package/dist/src/session-env-store.test.js +0 -151
  310. package/dist/src/session-env-store.test.js.map +0 -1
  311. package/dist/src/session-group-prompt.d.ts +0 -34
  312. package/dist/src/session-group-prompt.d.ts.map +0 -1
  313. package/dist/src/session-group-prompt.js +0 -101
  314. package/dist/src/session-group-prompt.js.map +0 -1
  315. package/dist/src/session-group-prompt.test.d.ts +0 -2
  316. package/dist/src/session-group-prompt.test.d.ts.map +0 -1
  317. package/dist/src/session-group-prompt.test.js +0 -72
  318. package/dist/src/session-group-prompt.test.js.map +0 -1
  319. package/dist/src/session-model-fallback.d.ts +0 -13
  320. package/dist/src/session-model-fallback.d.ts.map +0 -1
  321. package/dist/src/session-model-fallback.js +0 -24
  322. package/dist/src/session-model-fallback.js.map +0 -1
  323. package/dist/src/tool-event-adapter.d.ts +0 -31
  324. package/dist/src/tool-event-adapter.d.ts.map +0 -1
  325. package/dist/src/tool-event-adapter.js +0 -83
  326. package/dist/src/tool-event-adapter.js.map +0 -1
  327. package/dist/src/tool-event-adapter.test.d.ts +0 -2
  328. package/dist/src/tool-event-adapter.test.d.ts.map +0 -1
  329. package/dist/src/tool-event-adapter.test.js +0 -93
  330. package/dist/src/tool-event-adapter.test.js.map +0 -1
  331. package/dist/src/turn-agent-event-subscription.d.ts +0 -29
  332. package/dist/src/turn-agent-event-subscription.d.ts.map +0 -1
  333. package/dist/src/turn-agent-event-subscription.js +0 -289
  334. package/dist/src/turn-agent-event-subscription.js.map +0 -1
  335. package/dist/src/turn-agent-event-subscription.test.d.ts +0 -2
  336. package/dist/src/turn-agent-event-subscription.test.d.ts.map +0 -1
  337. package/dist/src/turn-agent-event-subscription.test.js +0 -165
  338. package/dist/src/turn-agent-event-subscription.test.js.map +0 -1
  339. package/dist/src/turn-end-controller.d.ts +0 -61
  340. package/dist/src/turn-end-controller.d.ts.map +0 -1
  341. package/dist/src/turn-end-controller.js +0 -239
  342. package/dist/src/turn-end-controller.js.map +0 -1
  343. package/dist/src/turn-end-controller.test.d.ts +0 -2
  344. package/dist/src/turn-end-controller.test.d.ts.map +0 -1
  345. package/dist/src/turn-end-controller.test.js +0 -97
  346. package/dist/src/turn-end-controller.test.js.map +0 -1
  347. package/dist/src/workspace-event-protocol.d.ts +0 -3
  348. package/dist/src/workspace-event-protocol.d.ts.map +0 -1
  349. package/dist/src/workspace-event-protocol.js +0 -3
  350. package/dist/src/workspace-event-protocol.js.map +0 -1
  351. package/dist/src/workspace-event-scheduler.d.ts +0 -54
  352. package/dist/src/workspace-event-scheduler.d.ts.map +0 -1
  353. package/dist/src/workspace-event-scheduler.js +0 -131
  354. package/dist/src/workspace-event-scheduler.js.map +0 -1
  355. package/dist/src/workspace-event-scheduler.test.d.ts +0 -2
  356. package/dist/src/workspace-event-scheduler.test.d.ts.map +0 -1
  357. package/dist/src/workspace-event-scheduler.test.js +0 -157
  358. package/dist/src/workspace-event-scheduler.test.js.map +0 -1
  359. package/dist/src/workspace-event.d.ts +0 -28
  360. package/dist/src/workspace-event.d.ts.map +0 -1
  361. package/dist/src/workspace-event.js +0 -674
  362. package/dist/src/workspace-event.js.map +0 -1
  363. package/dist/src/workspace-event.test.d.ts +0 -2
  364. package/dist/src/workspace-event.test.d.ts.map +0 -1
  365. package/dist/src/workspace-event.test.js +0 -265
  366. package/dist/src/workspace-event.test.js.map +0 -1
  367. package/dist/src/ws-inbound-schema.test.d.ts +0 -2
  368. package/dist/src/ws-inbound-schema.test.d.ts.map +0 -1
  369. package/dist/src/ws-inbound-schema.test.js +0 -58
  370. package/dist/src/ws-inbound-schema.test.js.map +0 -1
package/package.json CHANGED
@@ -1,83 +1,83 @@
1
- {
2
- "name": "@xgjktech/xg_cwork_im",
3
- "version": "1.19.42",
4
- "description": "XG CWork IM channel plugin for OpenClaw",
5
- "keywords": [
6
- "bot",
7
- "channel",
8
- "openclaw",
9
- "xg_cwork_im",
10
- "im"
11
- ],
12
- "license": "MIT",
13
- "type": "module",
14
- "main": "dist/index.js",
15
- "types": "dist/index.d.ts",
16
- "engines": {
17
- "node": ">=22.19.0"
18
- },
19
- "files": [
20
- ".npmrc",
21
- "dist/**/*",
22
- "openclaw.plugin.json"
23
- ],
24
- "scripts": {
25
- "build": "tsc -p tsconfig.json",
26
- "type-check": "tsc -p tsconfig.json --noEmit",
27
- "lint": "tsc -p tsconfig.json --noEmit",
28
- "test": "npm run build && node --test dist/src/**/*.test.js",
29
- "install:prod": "npm install --omit=dev",
30
- "prepublishOnly": "npm run build"
31
- },
32
- "dependencies": {
33
- "@sinclair/typebox": "^0.32.0",
34
- "@xgjktech/xg-openclaw-shared": "^0.2.2",
35
- "adm-zip": "^0.6.0",
36
- "axios": "^1.6.0",
37
- "re2js": "^2.8.6",
38
- "tar": "^7.5.22",
39
- "ws": "^8.17.0",
40
- "zod": "^3.22.0"
41
- },
42
- "devDependencies": {
43
- "@types/node": "^22.19.0",
44
- "@types/ws": "^8.5.10",
45
- "openclaw": "2026.9.2",
46
- "typescript": "^5.3.0"
47
- },
48
- "peerDependencies": {
49
- "openclaw": ">=2026.9.2"
50
- },
51
- "peerDependenciesMeta": {
52
- "openclaw": {
53
- "optional": true
54
- }
55
- },
56
- "openclaw": {
57
- "extensions": [
58
- "./dist/index.js"
59
- ],
60
- "channels": [
61
- "xg_cwork_im"
62
- ],
63
- "installDependencies": false,
64
- "channel": {
65
- "id": "xg_cwork_im",
66
- "label": "XG CWork IM",
67
- "selectionLabel": "XG CWork IM (工作说说)",
68
- "blurb": "工作说说 IM 机器人 Channel 插件,通过 WebSocket 长连接接收消息。",
69
- "aliases": [
70
- "xg_cwork_im",
71
- "im"
72
- ]
73
- },
74
- "install": {
75
- "localPath": ".",
76
- "defaultChoice": "local",
77
- "minHostVersion": ">=2026.9.2"
78
- },
79
- "compat": {
80
- "pluginApi": ">=2026.9.2"
81
- }
82
- }
83
- }
1
+ {
2
+ "name": "@xgjktech/xg_cwork_im",
3
+ "version": "1.19.43",
4
+ "description": "XG CWork IM channel plugin for OpenClaw",
5
+ "keywords": [
6
+ "bot",
7
+ "channel",
8
+ "openclaw",
9
+ "xg_cwork_im",
10
+ "im"
11
+ ],
12
+ "license": "MIT",
13
+ "type": "module",
14
+ "main": "dist/index.js",
15
+ "types": "dist/index.d.ts",
16
+ "engines": {
17
+ "node": ">=22.19.0"
18
+ },
19
+ "files": [
20
+ ".npmrc",
21
+ "dist/**/*",
22
+ "openclaw.plugin.json"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "type-check": "tsc -p tsconfig.json --noEmit",
27
+ "lint": "tsc -p tsconfig.json --noEmit",
28
+ "test": "npm run build && node --test dist/src/**/*.test.js",
29
+ "install:prod": "npm install --omit=dev",
30
+ "prepublishOnly": "npm run build"
31
+ },
32
+ "dependencies": {
33
+ "@sinclair/typebox": "^0.32.0",
34
+ "@xgjktech/xg-openclaw-shared": "^0.2.2",
35
+ "adm-zip": "^0.6.0",
36
+ "axios": "^1.6.0",
37
+ "re2js": "^2.8.6",
38
+ "tar": "^7.5.22",
39
+ "ws": "^8.17.0",
40
+ "zod": "^3.22.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^22.19.0",
44
+ "@types/ws": "^8.5.10",
45
+ "openclaw": "2026.9.2",
46
+ "typescript": "^5.3.0"
47
+ },
48
+ "peerDependencies": {
49
+ "openclaw": ">=2026.9.2"
50
+ },
51
+ "peerDependenciesMeta": {
52
+ "openclaw": {
53
+ "optional": true
54
+ }
55
+ },
56
+ "openclaw": {
57
+ "extensions": [
58
+ "./dist/index.js"
59
+ ],
60
+ "channels": [
61
+ "xg_cwork_im"
62
+ ],
63
+ "installDependencies": false,
64
+ "channel": {
65
+ "id": "xg_cwork_im",
66
+ "label": "XG CWork IM",
67
+ "selectionLabel": "XG CWork IM (工作说说)",
68
+ "blurb": "工作说说 IM 机器人 Channel 插件,通过 WebSocket 长连接接收消息。",
69
+ "aliases": [
70
+ "xg_cwork_im",
71
+ "im"
72
+ ]
73
+ },
74
+ "install": {
75
+ "localPath": ".",
76
+ "defaultChoice": "local",
77
+ "minHostVersion": ">=2026.9.2"
78
+ },
79
+ "compat": {
80
+ "pluginApi": ">=2026.9.2"
81
+ }
82
+ }
83
+ }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=action-store-lifecycle.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action-store-lifecycle.test.d.ts","sourceRoot":"","sources":["../../src/action-store-lifecycle.test.ts"],"names":[],"mappings":""}
@@ -1,195 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { mkdtempSync, rmSync } from "node:fs";
3
- import { tmpdir } from "node:os";
4
- import { join } from "node:path";
5
- import { DatabaseSync } from "node:sqlite";
6
- import { after, afterEach, describe, it } from "node:test";
7
- import { resolvePlanDbPath } from "@xgjktech/xg-openclaw-shared";
8
- import { disposeActionStore, getActionById, setActionStateDir } from "./action-store-access.js";
9
- import { disposePluginModule } from "./plugin-dispose.js";
10
- import { createPlanToolResultMiddleware } from "./plan-tool-middleware.js";
11
- /**
12
- * 动作读库生命周期集成测试(RT-186 根因回归):
13
- * 覆盖「真实 SQLite + 原始读函数(getActionById) + 中间件 + disposePluginModule cleanup」的组合,
14
- * 钉住热重载 cleanup 必须保留动作读库配置/句柄,只有 gateway_stop 完整清理才清空。
15
- */
16
- const tempDirs = [];
17
- function makeTempStateDir() {
18
- const dir = mkdtempSync(join(tmpdir(), "xg-action-store-lifecycle-"));
19
- tempDirs.push(dir);
20
- return dir;
21
- }
22
- function makeAction(eventId, overrides = {}) {
23
- return {
24
- eventId,
25
- event: "action_dispatch",
26
- action: "form_fill",
27
- target: "page://order-detail",
28
- version: 1,
29
- status: "completed",
30
- scopeControl: { activeSessionOnly: true },
31
- payload: { data: { id: eventId } },
32
- timestamp: "2026-09-07T17:00:00.000+08:00",
33
- origin: { channel: "xg_cwork_im", to: "g-2096919016395612162" },
34
- ...overrides,
35
- };
36
- }
37
- /** 模拟 harness-tools 的 SqliteActionStore.set:独立连接写同一份 plans.sqlite 的 actions 表。 */
38
- function writeAction(stateDir, action) {
39
- const db = new DatabaseSync(resolvePlanDbPath(stateDir));
40
- try {
41
- db.exec(`
42
- CREATE TABLE IF NOT EXISTS actions (
43
- event_id TEXT PRIMARY KEY,
44
- doc TEXT NOT NULL
45
- ) STRICT;
46
- `);
47
- db.prepare("INSERT INTO actions (event_id, doc) VALUES (?, ?)").run(action.eventId, JSON.stringify(action));
48
- }
49
- finally {
50
- db.close();
51
- }
52
- }
53
- /** 与 plan-tool-middleware.test.ts 相同的 event 形状,仅取 xg_action_dispatch 分支所需字段。 */
54
- function makeActionToolEvent(toolCallId, eventId) {
55
- return {
56
- toolCallId,
57
- toolName: "xg_action_dispatch",
58
- args: {},
59
- result: { details: { ok: true, eventId }, content: [] },
60
- };
61
- }
62
- /** 注入真实 getActionById 的中间件探针,记录实际发送的动作。 */
63
- class DispatchProbe {
64
- sent = [];
65
- handler;
66
- deps;
67
- constructor() {
68
- this.deps = {
69
- getActionById: (eventId) => getActionById(eventId),
70
- sendActionRunEvent: (action) => {
71
- this.sent.push(action);
72
- },
73
- };
74
- this.handler = createPlanToolResultMiddleware(this.deps);
75
- }
76
- }
77
- /** 静音 disposePluginModule 的过程日志,并收集 warn 便于断言 stateDir 缺失告警。 */
78
- async function runDisposeQuietly(options = {}) {
79
- const originalLog = console.log;
80
- const originalWarn = console.warn;
81
- const warns = [];
82
- console.log = () => { };
83
- console.warn = (...args) => {
84
- warns.push(args.map(String).join(" "));
85
- };
86
- try {
87
- await disposePluginModule(options);
88
- }
89
- finally {
90
- console.log = originalLog;
91
- console.warn = originalWarn;
92
- }
93
- return warns;
94
- }
95
- function captureWarnLines(fn) {
96
- const originalWarn = console.warn;
97
- const warns = [];
98
- console.warn = (...args) => {
99
- warns.push(args.map(String).join(" "));
100
- };
101
- try {
102
- fn();
103
- }
104
- finally {
105
- console.warn = originalWarn;
106
- }
107
- return warns;
108
- }
109
- afterEach(() => {
110
- disposeActionStore();
111
- });
112
- after(() => {
113
- for (const dir of tempDirs) {
114
- rmSync(dir, { recursive: true, force: true });
115
- }
116
- });
117
- describe("动作读库生命周期: 基线(回归 1/5)", () => {
118
- it("真实 SQLite 写入 action 后,中间件能按 eventId 反查并恰好发送一次", () => {
119
- const stateDir = makeTempStateDir();
120
- setActionStateDir(stateDir);
121
- const action = makeAction("evt-baseline-1");
122
- writeAction(stateDir, action);
123
- const probe = new DispatchProbe();
124
- probe.handler(makeActionToolEvent("call-baseline-1", action.eventId), { runtime: "openclaw" });
125
- assert.equal(probe.sent.length, 1);
126
- assert.deepEqual(probe.sent[0], action);
127
- });
128
- it("写库前 stateDir 未设置 → getActionById 返回 undefined 并告警,不抛", () => {
129
- const warns = captureWarnLines(() => {
130
- assert.equal(getActionById("evt-missing-config"), undefined);
131
- });
132
- assert.equal(warns.length, 1);
133
- assert.ok(warns[0].includes("stateDir 未设置"));
134
- });
135
- });
136
- describe("动作读库生命周期: registry cleanup 保留动作读库(回归 2/3/4/5)", () => {
137
- it("skipConnections=true + skipPlanResources=true 的 cleanup 后,新写入 action 仍可反查并发送", async () => {
138
- const stateDir = makeTempStateDir();
139
- setActionStateDir(stateDir);
140
- writeAction(stateDir, makeAction("evt-before-cleanup"));
141
- assert.ok(getActionById("evt-before-cleanup"), "cleanup 前基线读取应成功");
142
- const warns = await runDisposeQuietly({ skipConnections: true, skipPlanResources: true });
143
- writeAction(stateDir, makeAction("evt-after-cleanup"));
144
- const postAction = getActionById("evt-after-cleanup");
145
- assert.ok(postAction, "cleanup 后动作读库必须保留,反查应成功");
146
- assert.equal(postAction.eventId, "evt-after-cleanup");
147
- assert.equal(warns.filter((line) => line.includes("stateDir 未设置")).length, 0, "热重载 cleanup 后不应出现 stateDir 未设置告警");
148
- const probe = new DispatchProbe();
149
- probe.handler(makeActionToolEvent("call-after-cleanup", "evt-after-cleanup"), { runtime: "openclaw" });
150
- assert.equal(probe.sent.length, 1, "cleanup 后中间件应仍能反查并恰好发送一次");
151
- assert.equal(probe.sent[0].eventId, "evt-after-cleanup");
152
- probe.handler(makeActionToolEvent("call-before-cleanup", "evt-before-cleanup"), { runtime: "openclaw" });
153
- assert.equal(probe.sent.length, 2, "cleanup 前写入的旧 action 也应仍可反查并发送");
154
- });
155
- it("连续多次 registry cleanup 后仍正常,不出现 stateDir 未设置", async () => {
156
- const stateDir = makeTempStateDir();
157
- setActionStateDir(stateDir);
158
- for (let i = 0; i < 3; i += 1) {
159
- writeAction(stateDir, makeAction(`evt-round-${i}`));
160
- const warns = await runDisposeQuietly({ skipConnections: true, skipPlanResources: true });
161
- const action = getActionById(`evt-round-${i}`);
162
- assert.ok(action, `第 ${i + 1} 次 cleanup 后反查应成功`);
163
- assert.equal(warns.filter((line) => line.includes("stateDir 未设置")).length, 0, `第 ${i + 1} 次 cleanup 后不应出现 stateDir 未设置告警`);
164
- }
165
- });
166
- });
167
- describe("动作读库生命周期: gateway_stop 完整清理仍清空(回归 6)", () => {
168
- it("disposePluginModule() 默认完整清理后,动作读库被关闭且 stateDir 清空", async () => {
169
- const stateDir = makeTempStateDir();
170
- setActionStateDir(stateDir);
171
- const action = makeAction("evt-full-teardown");
172
- writeAction(stateDir, action);
173
- assert.ok(getActionById(action.eventId), "完整清理前反查应成功");
174
- await runDisposeQuietly();
175
- const warns = captureWarnLines(() => {
176
- assert.equal(getActionById(action.eventId), undefined, "完整清理后读库配置已清空,反查应失败");
177
- });
178
- assert.equal(warns.length, 1);
179
- assert.ok(warns[0].includes("stateDir 未设置"), "完整清理后应重新告警 stateDir 未设置");
180
- });
181
- });
182
- describe("动作读库生命周期: 更换 stateDir 读取新库并释放旧句柄(回归 7)", () => {
183
- it("setActionStateDir 切到新目录后读新库,旧库记录不可再读", () => {
184
- const dirA = makeTempStateDir();
185
- setActionStateDir(dirA);
186
- writeAction(dirA, makeAction("evt-dir-a"));
187
- assert.ok(getActionById("evt-dir-a"), "旧目录记录应可读");
188
- const dirB = makeTempStateDir();
189
- setActionStateDir(dirB);
190
- writeAction(dirB, makeAction("evt-dir-b"));
191
- assert.ok(getActionById("evt-dir-b"), "切到新目录后应读取新库");
192
- assert.equal(getActionById("evt-dir-a"), undefined, "旧目录记录不在新库中,反查应为 undefined");
193
- });
194
- });
195
- //# sourceMappingURL=action-store-lifecycle.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action-store-lifecycle.test.js","sourceRoot":"","sources":["../../src/action-store-lifecycle.test.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export declare const DEFAULT_ACTIVE_CRON_TTL_MS: number;
2
- export type ActiveCronContext = {
3
- agentId: string;
4
- sessionKey: string;
5
- jobId: string;
6
- expiresAt: number;
7
- };
8
- export declare function setActiveCronContext(input: {
9
- agentId: string;
10
- sessionKey: string;
11
- jobId: string;
12
- ttlMs?: number;
13
- now?: number;
14
- }): ActiveCronContext | undefined;
15
- export declare function getActiveCronContexts(agentId: string, sessionKey: string, now?: number): ActiveCronContext[];
16
- /** Remove a finished Job from every exact Session mapping. */
17
- export declare function removeActiveCronContext(jobId: string, agentId?: string): void;
18
- export declare function disposeActiveCronContextStore(): void;
19
- export declare function __resetActiveCronContextStoreForTests(): void;
20
- //# sourceMappingURL=active-cron-context-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"active-cron-context-store.d.ts","sourceRoot":"","sources":["../../src/active-cron-context-store.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AA8BF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,iBAAiB,GAAG,SAAS,CAkBhC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,iBAAiB,EAAE,CAKhH;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAS7E;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED,wBAAgB,qCAAqC,IAAI,IAAI,CAE5D"}
@@ -1,73 +0,0 @@
1
- /** Process-shared active Cron context for sessionTarget=session:agent:... jobs. */
2
- import { getOrCreateShared } from "./process-shared-store.js";
3
- export const DEFAULT_ACTIVE_CRON_TTL_MS = 30 * 60 * 1000;
4
- function getStore() {
5
- return getOrCreateShared("active-cron-context", () => ({
6
- bySession: new Map(),
7
- }));
8
- }
9
- function sessionMapKey(agentId, sessionKey) {
10
- return `${agentId.trim().toLowerCase()}\u0000${sessionKey}`;
11
- }
12
- function isUsableIdentity(value) {
13
- return typeof value === "string" && value.trim().length > 0 && !/[\0\r\n]/.test(value);
14
- }
15
- function pruneExpired(now = Date.now()) {
16
- const store = getStore();
17
- for (const [mapKey, jobs] of store.bySession) {
18
- for (const [jobId, context] of jobs) {
19
- if (context.expiresAt <= now)
20
- jobs.delete(jobId);
21
- }
22
- if (jobs.size === 0)
23
- store.bySession.delete(mapKey);
24
- }
25
- }
26
- export function setActiveCronContext(input) {
27
- if (!isUsableIdentity(input.agentId) || !isUsableIdentity(input.sessionKey) || !isUsableIdentity(input.jobId))
28
- return undefined;
29
- const now = input.now ?? Date.now();
30
- pruneExpired(now);
31
- const requestedTtl = typeof input.ttlMs === "number" && Number.isFinite(input.ttlMs) && input.ttlMs > 0
32
- ? input.ttlMs
33
- : DEFAULT_ACTIVE_CRON_TTL_MS;
34
- const context = {
35
- agentId: input.agentId.trim(),
36
- sessionKey: input.sessionKey,
37
- jobId: input.jobId.trim(),
38
- expiresAt: now + requestedTtl,
39
- };
40
- const mapKey = sessionMapKey(context.agentId, context.sessionKey);
41
- const jobs = getStore().bySession.get(mapKey) ?? new Map();
42
- jobs.set(context.jobId, context);
43
- getStore().bySession.set(mapKey, jobs);
44
- return { ...context };
45
- }
46
- export function getActiveCronContexts(agentId, sessionKey, now = Date.now()) {
47
- if (!isUsableIdentity(agentId) || !isUsableIdentity(sessionKey))
48
- return [];
49
- pruneExpired(now);
50
- const jobs = getStore().bySession.get(sessionMapKey(agentId, sessionKey));
51
- return jobs ? [...jobs.values()].map((context) => ({ ...context })) : [];
52
- }
53
- /** Remove a finished Job from every exact Session mapping. */
54
- export function removeActiveCronContext(jobId, agentId) {
55
- if (!isUsableIdentity(jobId))
56
- return;
57
- const normalizedAgentId = agentId?.trim().toLowerCase();
58
- const store = getStore();
59
- for (const [mapKey, jobs] of store.bySession) {
60
- if (normalizedAgentId && !mapKey.startsWith(`${normalizedAgentId}\u0000`))
61
- continue;
62
- jobs.delete(jobId.trim());
63
- if (jobs.size === 0)
64
- store.bySession.delete(mapKey);
65
- }
66
- }
67
- export function disposeActiveCronContextStore() {
68
- getStore().bySession.clear();
69
- }
70
- export function __resetActiveCronContextStoreForTests() {
71
- disposeActiveCronContextStore();
72
- }
73
- //# sourceMappingURL=active-cron-context-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"active-cron-context-store.js","sourceRoot":"","sources":["../../src/active-cron-context-store.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAazD,SAAS,QAAQ;IACb,OAAO,iBAAiB,CAAyB,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3E,SAAS,EAAE,IAAI,GAAG,EAA0C;KAC/D,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,UAAkB;IACtD,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAClC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,SAAS,IAAI,GAAG;gBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAMpC;IACG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChI,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;QACnG,CAAC,CAAC,KAAK,CAAC,KAAK;QACb,CAAC,CAAC,0BAA0B,CAAC;IACjC,MAAM,OAAO,GAAsB;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAC7B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QACzB,SAAS,EAAE,GAAG,GAAG,YAAY;KAChC,CAAC;IACF,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAA6B,CAAC;IACtF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,UAAkB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACvF,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3E,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,OAAgB;IACnE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO;IACrC,MAAM,iBAAiB,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,iBAAiB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,iBAAiB,QAAQ,CAAC;YAAE,SAAS;QACpF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B;IACzC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,qCAAqC;IACjD,6BAA6B,EAAE,CAAC;AACpC,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * 订阅 OpenClaw `assistant` 流,按「每条 assistant 消息(item)」逐条投递 IM。
3
- *
4
- * 与 block reply 分块路径不同:
5
- * - 直接用 item 的完整 text(累计快照),不做分块拼接,天然保留段内换行;
6
- * - 每条 assistant 消息一条 IM 消息(中间不同 item 也发);
7
- * - 不含 commentary(带 phase 的模型里 commentary 走 item/preamble,不会进 assistant);
8
- * - item 边界 = itemId 变化;最后一条在整轮 lifecycle 终态时 flush。
9
- *
10
- * 实际 HTTP 发送由 dispatch 注册的 sink 完成(持有 config/token/reply/终态/去重状态)。
11
- */
12
- type AssistantItemEventData = {
13
- text?: unknown;
14
- delta?: unknown;
15
- replace?: unknown;
16
- phase?: unknown;
17
- itemId?: unknown;
18
- };
19
- /** 处理一条 assistant agent event:累积当前 item,itemId 变化时把上一条交给 sink。 */
20
- export declare function handleAssistantItemEvent(sessionKey: string, data: AssistantItemEventData): void;
21
- /** flush 当前 item(整轮终态 / dispatch 收尾调用;返回 Promise 供收尾 await)。 */
22
- export declare function flushAssistantItem(sessionKey: string): Promise<void>;
23
- /** 清理会话状态(dispatch 结束时调用;清掉去重基线,避免跨轮误抑制)。 */
24
- export declare function resetAssistantItem(sessionKey: string): void;
25
- export declare function disposeAssistantItemDelivery(): void;
26
- export {};
27
- //# sourceMappingURL=assistant-item-delivery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assistant-item-delivery.d.ts","sourceRoot":"","sources":["../../src/assistant-item-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,KAAK,sBAAsB,GAAG;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAoFF,kEAAkE;AAClE,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAoB/F;AAED,gEAAgE;AAChE,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1E;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAK3D;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAInD"}
@@ -1,134 +0,0 @@
1
- /**
2
- * 订阅 OpenClaw `assistant` 流,按「每条 assistant 消息(item)」逐条投递 IM。
3
- *
4
- * 与 block reply 分块路径不同:
5
- * - 直接用 item 的完整 text(累计快照),不做分块拼接,天然保留段内换行;
6
- * - 每条 assistant 消息一条 IM 消息(中间不同 item 也发);
7
- * - 不含 commentary(带 phase 的模型里 commentary 走 item/preamble,不会进 assistant);
8
- * - item 边界 = itemId 变化;最后一条在整轮 lifecycle 终态时 flush。
9
- *
10
- * 实际 HTTP 发送由 dispatch 注册的 sink 完成(持有 config/token/reply/终态/去重状态)。
11
- */
12
- import { getAssistantItemSink } from "./assistant-item-sink.js";
13
- import { getSharedMap } from "./process-shared-store.js";
14
- const currentBySession = getSharedMap("assistant-item-current");
15
- const lastSentBySession = getSharedMap("assistant-item-last-sent");
16
- /** 每会话「在途 HTTP 发送」Promise 链:串行化同一会话的多条 item,并让收尾方 await 到全部在途发送。 */
17
- const inFlightBySession = getSharedMap("assistant-item-inflight");
18
- function isXgImGroupSessionKey(sessionKey) {
19
- return sessionKey.startsWith("agent:") && sessionKey.includes(":xg_cwork_im:group:");
20
- }
21
- function normalizeComparable(text) {
22
- return text.replace(/\s+/g, " ").trim();
23
- }
24
- function readString(value) {
25
- return typeof value === "string" ? value : "";
26
- }
27
- /** 计算 item 的最新累计正文:优先接受增长型快照,其次 append delta。 */
28
- function resolveItemText(params) {
29
- const { prevText, text, delta, replace } = params;
30
- if (replace) {
31
- return text;
32
- }
33
- if (!prevText) {
34
- return text || prevText;
35
- }
36
- if (text && text.startsWith(prevText)) {
37
- return text;
38
- }
39
- if (delta) {
40
- return `${prevText}${delta}`;
41
- }
42
- return text || prevText;
43
- }
44
- function flushItem(sessionKey, state) {
45
- currentBySession.delete(sessionKey);
46
- const text = state.text.trim();
47
- if (!text)
48
- return Promise.resolve();
49
- const sink = getAssistantItemSink(sessionKey);
50
- if (!sink)
51
- return Promise.resolve();
52
- const comparable = normalizeComparable(text);
53
- if (!comparable)
54
- return Promise.resolve();
55
- if (lastSentBySession.get(sessionKey) === comparable)
56
- return Promise.resolve();
57
- lastSentBySession.set(sessionKey, comparable);
58
- // 串到本会话的在途链上:既保证同一会话多条 item 的顺序发送,也让收尾方
59
- // (flushAssistantItem)能 await 到「item 边界 / lifecycle 触发但未 await」的在途发送,
60
- // 避免终态判定与 WS FINISHED 抢在正文 HTTP 完成之前。
61
- // 无在途前驱时同步触发 sink(保持既有「立即发出」语义),有前驱时才排队。
62
- const invoke = () => {
63
- try {
64
- return Promise.resolve(sink(state.itemId, text));
65
- }
66
- catch (err) {
67
- console.warn(`[xg_cwork_im] [assistant-item] sink failed: ${String(err)}`);
68
- return Promise.resolve();
69
- }
70
- };
71
- const previous = inFlightBySession.get(sessionKey);
72
- const run = (previous ? previous.catch(() => { }).then(invoke) : invoke())
73
- .catch((err) => {
74
- console.warn(`[xg_cwork_im] [assistant-item] sink failed: ${String(err)}`);
75
- })
76
- .finally(() => {
77
- if (inFlightBySession.get(sessionKey) === run) {
78
- inFlightBySession.delete(sessionKey);
79
- }
80
- });
81
- inFlightBySession.set(sessionKey, run);
82
- return run;
83
- }
84
- /** 处理一条 assistant agent event:累积当前 item,itemId 变化时把上一条交给 sink。 */
85
- export function handleAssistantItemEvent(sessionKey, data) {
86
- if (!sessionKey || !isXgImGroupSessionKey(sessionKey))
87
- return;
88
- const phase = readString(data.phase);
89
- if (phase === "commentary")
90
- return;
91
- const itemId = readString(data.itemId);
92
- if (!itemId)
93
- return;
94
- const text = readString(data.text);
95
- const delta = readString(data.delta);
96
- const replace = data.replace === true;
97
- const current = currentBySession.get(sessionKey);
98
- if (current && current.itemId !== itemId) {
99
- void flushItem(sessionKey, current);
100
- }
101
- const base = currentBySession.get(sessionKey);
102
- const prevText = base?.itemId === itemId ? base.text : "";
103
- currentBySession.set(sessionKey, {
104
- itemId,
105
- text: resolveItemText({ prevText, text, delta, replace }),
106
- });
107
- }
108
- /** flush 当前 item(整轮终态 / dispatch 收尾调用;返回 Promise 供收尾 await)。 */
109
- export async function flushAssistantItem(sessionKey) {
110
- const current = currentBySession.get(sessionKey);
111
- if (current) {
112
- await flushItem(sessionKey, current);
113
- }
114
- // 当前 item 之外,可能还有 item 边界 / lifecycle 触发的在途发送未被 await,
115
- // 必须一并等到,收尾判定才不会漏掉这批业务回复。
116
- const inFlight = inFlightBySession.get(sessionKey);
117
- if (inFlight) {
118
- await inFlight;
119
- }
120
- }
121
- /** 清理会话状态(dispatch 结束时调用;清掉去重基线,避免跨轮误抑制)。 */
122
- export function resetAssistantItem(sessionKey) {
123
- if (!sessionKey)
124
- return;
125
- currentBySession.delete(sessionKey);
126
- lastSentBySession.delete(sessionKey);
127
- inFlightBySession.delete(sessionKey);
128
- }
129
- export function disposeAssistantItemDelivery() {
130
- currentBySession.clear();
131
- lastSentBySession.clear();
132
- inFlightBySession.clear();
133
- }
134
- //# sourceMappingURL=assistant-item-delivery.js.map