@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
@@ -1,363 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { describe, it } from "node:test";
3
- import { dispatchXgImInboundReply, resolveDispatchDriver, supportsOfficialAssembledTurn, } from "./reply-dispatch-driver.js";
4
- const baseCfg = { session: { store: { type: "sqlite" } } };
5
- function makeLegacyRt() {
6
- const calls = [];
7
- return {
8
- calls,
9
- rt: {
10
- channel: {
11
- reply: {
12
- dispatchReplyWithBufferedBlockDispatcher: async (args) => {
13
- calls.push(args);
14
- return { beforeAgentRunBlocked: false };
15
- },
16
- dispatchReplyFromConfig: async (args) => {
17
- calls.push(["from-config", args]);
18
- return { fromConfig: true };
19
- },
20
- },
21
- },
22
- },
23
- };
24
- }
25
- function makeOfficialRt() {
26
- const calls = [];
27
- return {
28
- calls,
29
- rt: {
30
- channel: {
31
- reply: {
32
- dispatchReplyWithBufferedBlockDispatcher: async (args) => {
33
- calls.push(["buffered", args]);
34
- return { buffered: true };
35
- },
36
- dispatchReplyFromConfig: async (args) => {
37
- calls.push(["from-config", args]);
38
- return { fromConfig: true };
39
- },
40
- },
41
- session: {
42
- recordInboundSession: async (recordArgs) => {
43
- calls.push(["session-record", recordArgs]);
44
- },
45
- },
46
- inbound: {
47
- dispatchReply: async (args) => {
48
- calls.push(["turn", args]);
49
- return {
50
- admission: { kind: "dispatch" },
51
- dispatched: true,
52
- dispatchResult: { beforeAgentRunBlocked: false },
53
- };
54
- },
55
- },
56
- },
57
- },
58
- };
59
- }
60
- const baseParams = {
61
- ctx: { SessionKey: "agent:main:xg_cwork_im:g-1" },
62
- cfg: baseCfg,
63
- channel: "xg_cwork_im",
64
- accountId: "default",
65
- agentId: "main",
66
- routeSessionKey: "agent:main:xg_cwork_im:g-1",
67
- storePath: "sessions.json",
68
- replyOptions: { onAgentRunStart: () => { } },
69
- dispatcherOptions: {
70
- responsePrefix: "",
71
- onSkip: () => { },
72
- onError: () => { },
73
- deliver: async () => { },
74
- },
75
- logPrefix: "[default:main]",
76
- };
77
- describe("reply-dispatch-driver selection", () => {
78
- it("runtime 暴露 channel.inbound.dispatchReply 时 auto 选 official", () => {
79
- const { rt } = makeOfficialRt();
80
- const r = resolveDispatchDriver(rt, "auto");
81
- assert.equal(r.driver, "official");
82
- assert.equal(r.officialSupported, true);
83
- assert.equal(r.source, "auto");
84
- });
85
- it("runtime 未暴露时 auto 回退 legacy", () => {
86
- const { rt } = makeLegacyRt();
87
- const r = resolveDispatchDriver(rt, "auto");
88
- assert.equal(r.driver, "legacy");
89
- assert.equal(r.officialSupported, false);
90
- });
91
- it("显式 legacy 强制 legacy(回退开关)", () => {
92
- const { rt } = makeOfficialRt();
93
- const r = resolveDispatchDriver(rt, "legacy");
94
- assert.equal(r.driver, "legacy");
95
- assert.equal(r.source, "forced");
96
- });
97
- it("显式 official 即使 runtime 缺入口也标记 forced official(分发时再兜底 legacy)", () => {
98
- const { rt } = makeLegacyRt();
99
- const r = resolveDispatchDriver(rt, "official");
100
- assert.equal(r.driver, "official");
101
- assert.equal(r.officialSupported, false);
102
- });
103
- it("supportsOfficialAssembledTurn 识别入口", () => {
104
- assert.equal(supportsOfficialAssembledTurn(makeOfficialRt().rt), true);
105
- assert.equal(supportsOfficialAssembledTurn(makeLegacyRt().rt), false);
106
- assert.equal(supportsOfficialAssembledTurn({}), false);
107
- });
108
- });
109
- describe("dispatchXgImInboundReply branches", () => {
110
- it("legacy 驱动直接调 dispatchReplyWithBufferedBlockDispatcher(行为不变)", async () => {
111
- const { rt, calls } = makeLegacyRt();
112
- const result = await dispatchXgImInboundReply({
113
- ...baseParams,
114
- rt,
115
- driver: "legacy",
116
- });
117
- assert.deepEqual(result, { beforeAgentRunBlocked: false });
118
- assert.equal(calls.length, 1);
119
- const args = calls[0];
120
- assert.equal(args.ctx, baseParams.ctx);
121
- assert.equal(args.cfg, baseParams.cfg);
122
- assert.equal(args.replyOptions, baseParams.replyOptions);
123
- assert.equal(args.dispatcherOptions, baseParams.dispatcherOptions);
124
- });
125
- it("official 驱动走 assembled turn,把 deliver/onError 移入 delivery,去掉 dispatcherOptions 的 deliver/onError", async () => {
126
- const { rt, calls } = makeOfficialRt();
127
- const result = await dispatchXgImInboundReply({
128
- ...baseParams,
129
- rt,
130
- driver: "official",
131
- });
132
- assert.deepEqual(result, { beforeAgentRunBlocked: false });
133
- assert.equal(calls.length, 1);
134
- const [kind, args] = calls[0];
135
- assert.equal(kind, "turn");
136
- assert.equal(args.cfg, baseParams.cfg);
137
- assert.equal(args.channel, "xg_cwork_im");
138
- assert.equal(args.routeSessionKey, baseParams.routeSessionKey);
139
- assert.equal(args.storePath, "sessions.json");
140
- assert.equal(args.ctxPayload, baseParams.ctx);
141
- assert.equal(args.replyOptions, baseParams.replyOptions);
142
- const delivery = args.delivery;
143
- assert.equal(delivery.deliver, baseParams.dispatcherOptions.deliver);
144
- assert.equal(delivery.onError, baseParams.dispatcherOptions.onError);
145
- const dispatcher = args.dispatcherOptions;
146
- assert.equal("deliver" in dispatcher, false, "deliver 应移入 delivery");
147
- assert.equal("onError" in dispatcher, false, "onError 应移入 delivery");
148
- assert.equal(dispatcher.onSkip, baseParams.dispatcherOptions.onSkip);
149
- // record 由官方 turn 内部完成:recordInboundSession 为真函数且透传 record 事实
150
- assert.equal(typeof args.recordInboundSession, "function");
151
- assert.notEqual(args.recordInboundSession, undefined);
152
- });
153
- it("official 驱动提供 inboundRecord 时透传真 recordInboundSession + record 选项", async () => {
154
- const { rt, calls } = makeOfficialRt();
155
- const inboundRecord = {
156
- storePath: "records/agent-main.json",
157
- sessionKey: "agent:main:xg_cwork_im:g-1",
158
- updateLastRoute: { sessionKey: "agent:main", channel: "xg_cwork_im", to: "g-1", accountId: "default" },
159
- onRecordError: () => { },
160
- };
161
- const result = await dispatchXgImInboundReply({
162
- ...baseParams,
163
- rt,
164
- driver: "official",
165
- inboundRecord,
166
- });
167
- assert.deepEqual(result, { beforeAgentRunBlocked: false });
168
- assert.equal(calls.length, 1);
169
- const [kind, args] = calls[0];
170
- assert.equal(kind, "turn");
171
- assert.equal(args.storePath, inboundRecord.storePath, "storePath 应取 inboundRecord 的值");
172
- assert.equal(typeof args.recordInboundSession, "function");
173
- const record = args.record;
174
- assert.equal(record.sessionKey, inboundRecord.sessionKey);
175
- assert.equal(record.updateLastRoute, inboundRecord.updateLastRoute);
176
- assert.equal(record.onRecordError, inboundRecord.onRecordError);
177
- });
178
- it("official 驱动在 runtime 缺 session.recordInboundSession 时兜底 legacy", async () => {
179
- const rt = {
180
- channel: {
181
- reply: {
182
- dispatchReplyWithBufferedBlockDispatcher: async () => ({ beforeAgentRunBlocked: true }),
183
- },
184
- inbound: {
185
- dispatchReply: async () => ({ dispatched: true, dispatchResult: {} }),
186
- },
187
- // 无 session.recordInboundSession
188
- },
189
- };
190
- const result = await dispatchXgImInboundReply({
191
- ...baseParams,
192
- rt,
193
- driver: "official",
194
- });
195
- assert.deepEqual(result, { beforeAgentRunBlocked: true });
196
- });
197
- it("official 驱动 dispatchReply 返回非 dispatch 结果(drop/observeOnly)时归一为 undefined", async () => {
198
- const calls = [];
199
- const rt = {
200
- channel: {
201
- reply: {
202
- dispatchReplyWithBufferedBlockDispatcher: async () => ({}),
203
- },
204
- session: {
205
- recordInboundSession: async () => { },
206
- },
207
- inbound: {
208
- dispatchReply: async (args) => {
209
- calls.push(args);
210
- return { admission: { kind: "drop" }, dispatched: false };
211
- },
212
- },
213
- },
214
- };
215
- const result = await dispatchXgImInboundReply({
216
- ...baseParams,
217
- rt,
218
- driver: "official",
219
- });
220
- assert.equal(result, undefined);
221
- assert.equal(calls.length, 1);
222
- });
223
- it("official 驱动在 runtime 缺 assembled turn 时兜底 legacy 并告警", async () => {
224
- const { rt, calls } = makeLegacyRt();
225
- const result = await dispatchXgImInboundReply({
226
- ...baseParams,
227
- rt,
228
- driver: "official",
229
- });
230
- assert.deepEqual(result, { beforeAgentRunBlocked: false });
231
- assert.equal(calls.length, 1);
232
- });
233
- it("两个驱动都缺时抛错", async () => {
234
- await assert.rejects(dispatchXgImInboundReply({
235
- ...baseParams,
236
- rt: {},
237
- driver: "legacy",
238
- }), /dispatchReplyWithBufferedBlockDispatcher missing/);
239
- });
240
- it("legacy 驱动在有 configOverride 时注入 dispatchReplyFromConfig", async () => {
241
- const { rt, calls } = makeLegacyRt();
242
- const configOverride = {
243
- agents: { entries: { main: { sandbox: { docker: { binds: ["/nas:/workspace/nas:ro"] } } } } },
244
- };
245
- await dispatchXgImInboundReply({
246
- ...baseParams,
247
- rt,
248
- driver: "legacy",
249
- configOverride,
250
- });
251
- assert.equal(calls.length, 1);
252
- const args = calls[0];
253
- assert.equal(typeof args.dispatchReplyFromConfig, "function");
254
- const fromConfig = args.dispatchReplyFromConfig;
255
- await fromConfig({ cfg: baseParams.cfg, usePublishedModelRuntime: true });
256
- const wrapped = calls.find((entry) => Array.isArray(entry) && entry[0] === "from-config");
257
- assert.ok(wrapped);
258
- assert.equal(wrapped[1].configOverride, configOverride);
259
- });
260
- it("official 驱动在有 configOverride 时挂到 turn 级 dispatchReplyFromConfig(与 buffered 双挂)", async () => {
261
- const { rt, calls } = makeOfficialRt();
262
- const configOverride = {
263
- agents: { entries: { main: { sandbox: { docker: { binds: ["/nas:/workspace/nas:ro"] } } } } },
264
- };
265
- await dispatchXgImInboundReply({
266
- ...baseParams,
267
- rt,
268
- driver: "official",
269
- configOverride,
270
- });
271
- const turnCall = calls.find((entry) => Array.isArray(entry) && entry[0] === "turn");
272
- assert.ok(turnCall);
273
- const turnDispatch = turnCall[1].dispatchReplyFromConfig;
274
- assert.equal(typeof turnDispatch, "function", "turn 级应挂上包装后的 dispatchReplyFromConfig");
275
- await turnDispatch({ cfg: baseParams.cfg, usePublishedModelRuntime: true });
276
- const fromConfig = calls.find((entry) => Array.isArray(entry) && entry[0] === "from-config");
277
- assert.ok(fromConfig);
278
- assert.equal(fromConfig[1].configOverride, configOverride);
279
- // buffered 包装仍保留作非 routed 路径双保险
280
- const buffered = turnCall[1].dispatchReplyWithBufferedBlockDispatcher;
281
- assert.equal(typeof buffered, "function");
282
- await buffered({ ctx: baseParams.ctx, cfg: baseParams.cfg, dispatcherOptions: {} });
283
- const bufferedCall = calls.find((entry) => Array.isArray(entry) && entry[0] === "buffered");
284
- assert.ok(bufferedCall);
285
- assert.equal(typeof bufferedCall[1].dispatchReplyFromConfig, "function");
286
- });
287
- it("official 驱动无 configOverride 时不写 turn 级 dispatchReplyFromConfig", async () => {
288
- const { rt, calls } = makeOfficialRt();
289
- await dispatchXgImInboundReply({
290
- ...baseParams,
291
- rt,
292
- driver: "official",
293
- });
294
- const turnCall = calls.find((entry) => Array.isArray(entry) && entry[0] === "turn");
295
- assert.ok(turnCall);
296
- assert.equal("dispatchReplyFromConfig" in turnCall[1], false, "无 NAS 时不得覆盖 core 默认 dispatchReplyFromConfig");
297
- });
298
- it("legacy 驱动在有 configOverride 但 runtime 无 dispatchReplyFromConfig 时不抛错", async () => {
299
- const calls = [];
300
- const rt = {
301
- channel: {
302
- reply: {
303
- dispatchReplyWithBufferedBlockDispatcher: async (args) => {
304
- calls.push(args);
305
- return { beforeAgentRunBlocked: false };
306
- },
307
- // 故意不暴露 dispatchReplyFromConfig
308
- },
309
- },
310
- };
311
- const configOverride = {
312
- agents: { entries: { main: { sandbox: { docker: { binds: ["/nas:/workspace/nas:ro"] } } } } },
313
- };
314
- const result = await dispatchXgImInboundReply({
315
- ...baseParams,
316
- rt,
317
- driver: "legacy",
318
- configOverride,
319
- });
320
- assert.deepEqual(result, { beforeAgentRunBlocked: false });
321
- const args = calls[0];
322
- assert.equal("dispatchReplyFromConfig" in args, false, "无法包装时不得写入空壳");
323
- });
324
- it("configOverride 应用失败时回退到无 override 再试,不阻断回复", async () => {
325
- const fromConfigCalls = [];
326
- const warnings = [];
327
- const rt = {
328
- channel: {
329
- reply: {
330
- dispatchReplyWithBufferedBlockDispatcher: async (args) => {
331
- const fn = args.dispatchReplyFromConfig;
332
- assert.equal(typeof fn, "function");
333
- return fn({ cfg: baseParams.cfg });
334
- },
335
- dispatchReplyFromConfig: async (args) => {
336
- fromConfigCalls.push(args);
337
- if (args.configOverride) {
338
- throw new Error("simulated override reject");
339
- }
340
- return { beforeAgentRunBlocked: false, recovered: true };
341
- },
342
- },
343
- },
344
- };
345
- const configOverride = {
346
- agents: { entries: { main: { sandbox: { docker: { binds: ["/nas:/workspace/nas:ro"] } } } } },
347
- };
348
- const result = await dispatchXgImInboundReply({
349
- ...baseParams,
350
- rt,
351
- driver: "legacy",
352
- configOverride,
353
- warn: (message) => warnings.push(message),
354
- });
355
- assert.deepEqual(result, { beforeAgentRunBlocked: false, recovered: true });
356
- assert.equal(fromConfigCalls.length, 2, "先带 override 失败,再无 override 成功");
357
- assert.ok(fromConfigCalls[0].configOverride);
358
- assert.equal("configOverride" in fromConfigCalls[1], false);
359
- assert.equal(warnings.length, 1);
360
- assert.match(warnings[0], /configOverride apply failed/);
361
- });
362
- });
363
- //# sourceMappingURL=reply-dispatch-driver.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reply-dispatch-driver.test.js","sourceRoot":"","sources":["../../src/reply-dispatch-driver.test.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- /**
2
- * 回合内「生效模型 + 有效上下文预算」的进程级缓存。
3
- *
4
- * 背景:OpenClaw 在 `preserveRuntimeModel`(模型 fallback / live switch 等)场景下,
5
- * session entry 只写用量、不写 `model` / `contextTokens`,导致插件从 entry 读不到
6
- * 上下文窗口,前端用量圆环拿不到分母。
7
- *
8
- * 数据源:OpenClaw 的 `llm_output` hook 事件带 `contextTokenBudget`(解析后的有效
9
- * 上下文预算)、`contextWindowSource`、`provider` / `model` / `resolvedRef`,
10
- * 且发生在嵌入式 runner 回合结束时(早于 FINISHED),可作 entry 缺字段时的兜底。
11
- *
12
- * 进程级共享(getSharedMap):跨模块热重载存活,与 per-message-model-pending 同一套机制。
13
- */
14
- /** llm_output 事件中与用量圆环相关的字段(结构化子集,避免依赖宿主内部类型)。 */
15
- export interface RunModelContextInput {
16
- provider?: string;
17
- model?: string;
18
- resolvedRef?: string;
19
- contextTokenBudget?: number;
20
- contextWindowSource?: string;
21
- contextWindowReferenceTokens?: number;
22
- runId?: string;
23
- }
24
- export interface RunModelContext {
25
- provider?: string;
26
- model?: string;
27
- resolvedRef?: string;
28
- /** 解析后的有效上下文预算(圆环分母兜底)。 */
29
- contextTokenBudget?: number;
30
- contextWindowSource?: string;
31
- contextWindowReferenceTokens?: number;
32
- runId?: string;
33
- updatedAt: number;
34
- }
35
- /** 记录一次 llm_output(按 sessionKey 覆盖;空 sessionKey 忽略)。 */
36
- export declare function recordRunModelContext(sessionKey: string | undefined, input: RunModelContextInput): RunModelContext | undefined;
37
- /** 读取某 session 最近一次 llm_output 的模型上下文(过期返回 undefined)。 */
38
- export declare function readRunModelContext(sessionKey: string | undefined): RunModelContext | undefined;
39
- /** 清除某 session 的记录。 */
40
- export declare function clearRunModelContext(sessionKey: string | undefined): void;
41
- /** 插件卸载/重载时清空全部记录。 */
42
- export declare function clearAllRunModelContext(): void;
43
- /** 仅供测试:直接写入/读取内部 map 的条目数。 */
44
- export declare function __runModelContextSizeForTests(): number;
45
- //# sourceMappingURL=run-model-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-model-context.d.ts","sourceRoot":"","sources":["../../src/run-model-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB;AA4BD,wDAAwD;AACxD,wBAAgB,qBAAqB,CACjC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,oBAAoB,GAC5B,eAAe,GAAG,SAAS,CAyC7B;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAU/F;AAED,uBAAuB;AACvB,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAIzE;AAED,sBAAsB;AACtB,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,+BAA+B;AAC/B,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD"}
@@ -1,108 +0,0 @@
1
- /**
2
- * 回合内「生效模型 + 有效上下文预算」的进程级缓存。
3
- *
4
- * 背景:OpenClaw 在 `preserveRuntimeModel`(模型 fallback / live switch 等)场景下,
5
- * session entry 只写用量、不写 `model` / `contextTokens`,导致插件从 entry 读不到
6
- * 上下文窗口,前端用量圆环拿不到分母。
7
- *
8
- * 数据源:OpenClaw 的 `llm_output` hook 事件带 `contextTokenBudget`(解析后的有效
9
- * 上下文预算)、`contextWindowSource`、`provider` / `model` / `resolvedRef`,
10
- * 且发生在嵌入式 runner 回合结束时(早于 FINISHED),可作 entry 缺字段时的兜底。
11
- *
12
- * 进程级共享(getSharedMap):跨模块热重载存活,与 per-message-model-pending 同一套机制。
13
- */
14
- import { getSharedMap } from "./process-shared-store.js";
15
- /** 缓存条目上限(防御无界增长)。 */
16
- const MAX_ENTRIES = 500;
17
- /** 条目有效期:超过则视为过期(避免用上一轮/陈旧预算)。 */
18
- const TTL_MS = 10 * 60_000;
19
- const bySessionKey = getSharedMap("run-model-context");
20
- function nonEmpty(value) {
21
- if (typeof value !== "string")
22
- return undefined;
23
- const text = value.trim();
24
- return text.length > 0 ? text : undefined;
25
- }
26
- function positiveInt(value) {
27
- if (typeof value !== "number" || !Number.isFinite(value) || value <= 0)
28
- return undefined;
29
- return Math.round(value);
30
- }
31
- function pruneExpired(now) {
32
- for (const [key, entry] of bySessionKey) {
33
- if (now - entry.updatedAt > TTL_MS) {
34
- bySessionKey.delete(key);
35
- }
36
- }
37
- }
38
- /** 记录一次 llm_output(按 sessionKey 覆盖;空 sessionKey 忽略)。 */
39
- export function recordRunModelContext(sessionKey, input) {
40
- const key = nonEmpty(sessionKey);
41
- if (!key)
42
- return undefined;
43
- const provider = nonEmpty(input.provider);
44
- const model = nonEmpty(input.model);
45
- const resolvedRef = nonEmpty(input.resolvedRef);
46
- const contextTokenBudget = positiveInt(input.contextTokenBudget);
47
- const contextWindowSource = nonEmpty(input.contextWindowSource);
48
- const contextWindowReferenceTokens = positiveInt(input.contextWindowReferenceTokens);
49
- const runId = nonEmpty(input.runId);
50
- const now = Date.now();
51
- pruneExpired(now);
52
- if (!bySessionKey.has(key) && bySessionKey.size >= MAX_ENTRIES) {
53
- // 容量兜底:淘汰最旧一条。
54
- let oldestKey;
55
- let oldestAt = Number.POSITIVE_INFINITY;
56
- for (const [candidateKey, entry] of bySessionKey) {
57
- if (entry.updatedAt < oldestAt) {
58
- oldestAt = entry.updatedAt;
59
- oldestKey = candidateKey;
60
- }
61
- }
62
- if (oldestKey !== undefined) {
63
- bySessionKey.delete(oldestKey);
64
- }
65
- }
66
- const context = {
67
- ...(provider ? { provider } : {}),
68
- ...(model ? { model } : {}),
69
- ...(resolvedRef ? { resolvedRef } : {}),
70
- ...(contextTokenBudget != null ? { contextTokenBudget } : {}),
71
- ...(contextWindowSource ? { contextWindowSource } : {}),
72
- ...(contextWindowReferenceTokens != null ? { contextWindowReferenceTokens } : {}),
73
- ...(runId ? { runId } : {}),
74
- updatedAt: now,
75
- };
76
- bySessionKey.set(key, context);
77
- return context;
78
- }
79
- /** 读取某 session 最近一次 llm_output 的模型上下文(过期返回 undefined)。 */
80
- export function readRunModelContext(sessionKey) {
81
- const key = nonEmpty(sessionKey);
82
- if (!key)
83
- return undefined;
84
- const entry = bySessionKey.get(key);
85
- if (!entry)
86
- return undefined;
87
- if (Date.now() - entry.updatedAt > TTL_MS) {
88
- bySessionKey.delete(key);
89
- return undefined;
90
- }
91
- return entry;
92
- }
93
- /** 清除某 session 的记录。 */
94
- export function clearRunModelContext(sessionKey) {
95
- const key = nonEmpty(sessionKey);
96
- if (!key)
97
- return;
98
- bySessionKey.delete(key);
99
- }
100
- /** 插件卸载/重载时清空全部记录。 */
101
- export function clearAllRunModelContext() {
102
- bySessionKey.clear();
103
- }
104
- /** 仅供测试:直接写入/读取内部 map 的条目数。 */
105
- export function __runModelContextSizeForTests() {
106
- return bySessionKey.size;
107
- }
108
- //# sourceMappingURL=run-model-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-model-context.js","sourceRoot":"","sources":["../../src/run-model-context.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=run-model-context.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-model-context.test.d.ts","sourceRoot":"","sources":["../../src/run-model-context.test.ts"],"names":[],"mappings":""}
@@ -1,68 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { beforeEach, describe, it } from "node:test";
3
- import { __runModelContextSizeForTests, clearAllRunModelContext, clearRunModelContext, readRunModelContext, recordRunModelContext, } from "./run-model-context.js";
4
- describe("run-model-context", () => {
5
- beforeEach(() => {
6
- clearAllRunModelContext();
7
- });
8
- it("records and reads the latest llm_output context per session", () => {
9
- recordRunModelContext("session-1", {
10
- provider: "openai",
11
- model: "gpt-5.5",
12
- resolvedRef: "openai/gpt-5.5",
13
- contextTokenBudget: 200_000,
14
- contextWindowSource: "model",
15
- contextWindowReferenceTokens: 200_000,
16
- runId: "run-1",
17
- });
18
- const ctx = readRunModelContext("session-1");
19
- assert.ok(ctx);
20
- assert.equal(ctx.provider, "openai");
21
- assert.equal(ctx.model, "gpt-5.5");
22
- assert.equal(ctx.resolvedRef, "openai/gpt-5.5");
23
- assert.equal(ctx.contextTokenBudget, 200_000);
24
- assert.equal(ctx.contextWindowSource, "model");
25
- assert.equal(ctx.contextWindowReferenceTokens, 200_000);
26
- assert.equal(ctx.runId, "run-1");
27
- assert.equal(typeof ctx.updatedAt, "number");
28
- });
29
- it("overwrites the previous entry for the same session", () => {
30
- recordRunModelContext("session-1", { model: "a", contextTokenBudget: 100_000 });
31
- recordRunModelContext("session-1", { model: "b", contextTokenBudget: 128_000 });
32
- const ctx = readRunModelContext("session-1");
33
- assert.equal(ctx.model, "b");
34
- assert.equal(ctx.contextTokenBudget, 128_000);
35
- assert.equal(__runModelContextSizeForTests(), 1);
36
- });
37
- it("isolates sessions", () => {
38
- recordRunModelContext("session-1", { model: "a", contextTokenBudget: 100_000 });
39
- recordRunModelContext("session-2", { model: "b", contextTokenBudget: 200_000 });
40
- assert.equal(readRunModelContext("session-1").model, "a");
41
- assert.equal(readRunModelContext("session-2").model, "b");
42
- assert.equal(readRunModelContext("session-3"), undefined);
43
- });
44
- it("ignores empty session key and empty input", () => {
45
- assert.equal(recordRunModelContext("", { model: "a" }), undefined);
46
- assert.equal(recordRunModelContext(undefined, { model: "a" }), undefined);
47
- const recorded = recordRunModelContext("session-1", {});
48
- assert.ok(recorded);
49
- assert.equal(recorded.model, undefined);
50
- assert.equal(recorded.contextTokenBudget, undefined);
51
- });
52
- it("drops non-positive / non-finite context budgets", () => {
53
- recordRunModelContext("session-1", { contextTokenBudget: 0 });
54
- assert.equal(readRunModelContext("session-1").contextTokenBudget, undefined);
55
- recordRunModelContext("session-1", { contextTokenBudget: -5 });
56
- assert.equal(readRunModelContext("session-1").contextTokenBudget, undefined);
57
- recordRunModelContext("session-1", { contextTokenBudget: Number.NaN });
58
- assert.equal(readRunModelContext("session-1").contextTokenBudget, undefined);
59
- });
60
- it("clearRunModelContext removes a single session", () => {
61
- recordRunModelContext("session-1", { model: "a" });
62
- recordRunModelContext("session-2", { model: "b" });
63
- clearRunModelContext("session-1");
64
- assert.equal(readRunModelContext("session-1"), undefined);
65
- assert.equal(readRunModelContext("session-2").model, "b");
66
- });
67
- });
68
- //# sourceMappingURL=run-model-context.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-model-context.test.js","sourceRoot":"","sources":["../../src/run-model-context.test.ts"],"names":[],"mappings":"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"}