@xgjktech/xg_cwork_im 1.19.39 → 1.19.41

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 (604) hide show
  1. package/README.md +4 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/connection/account-connection.d.ts.map +1 -1
  6. package/dist/src/connection/account-connection.js +12 -3
  7. package/dist/src/connection/account-connection.js.map +1 -1
  8. package/dist/src/mcp/gateway-mcp-connection.d.ts +29 -0
  9. package/dist/src/mcp/gateway-mcp-connection.d.ts.map +1 -0
  10. package/dist/src/mcp/gateway-mcp-connection.js +112 -0
  11. package/dist/src/mcp/gateway-mcp-connection.js.map +1 -0
  12. package/dist/src/mcp/register-gateway-mcp-resolvers.d.ts +8 -0
  13. package/dist/src/mcp/register-gateway-mcp-resolvers.d.ts.map +1 -0
  14. package/dist/src/mcp/register-gateway-mcp-resolvers.js +53 -0
  15. package/dist/src/mcp/register-gateway-mcp-resolvers.js.map +1 -0
  16. package/dist/src/mcp/register-gateway-mcp-resolvers.test.d.ts +2 -0
  17. package/dist/src/mcp/register-gateway-mcp-resolvers.test.d.ts.map +1 -0
  18. package/dist/src/mcp/register-gateway-mcp-resolvers.test.js +99 -0
  19. package/dist/src/mcp/register-gateway-mcp-resolvers.test.js.map +1 -0
  20. package/dist/src/mcp/requester-appkey-store.d.ts +19 -0
  21. package/dist/src/mcp/requester-appkey-store.d.ts.map +1 -0
  22. package/dist/src/mcp/requester-appkey-store.js +66 -0
  23. package/dist/src/mcp/requester-appkey-store.js.map +1 -0
  24. package/dist/src/mcp/requester-appkey-store.test.d.ts +2 -0
  25. package/dist/src/mcp/requester-appkey-store.test.d.ts.map +1 -0
  26. package/dist/src/mcp/requester-appkey-store.test.js +43 -0
  27. package/dist/src/mcp/requester-appkey-store.test.js.map +1 -0
  28. package/dist/src/plugin/channel-config.d.ts +97 -0
  29. package/dist/src/plugin/channel-config.d.ts.map +1 -1
  30. package/dist/src/plugin/channel-config.js +25 -4
  31. package/dist/src/plugin/channel-config.js.map +1 -1
  32. package/dist/src/plugin/channel-config.test.js +20 -0
  33. package/dist/src/plugin/channel-config.test.js.map +1 -1
  34. package/dist/src/plugin/types.d.ts +32 -1
  35. package/dist/src/plugin/types.d.ts.map +1 -1
  36. package/dist/src/plugin/types.js.map +1 -1
  37. package/dist/src/turn/turn-agent-event-subscription.d.ts.map +1 -1
  38. package/dist/src/turn/turn-agent-event-subscription.js +7 -1
  39. package/dist/src/turn/turn-agent-event-subscription.js.map +1 -1
  40. package/package.json +1 -1
  41. package/dist/src/account-connection.d.ts +0 -37
  42. package/dist/src/account-connection.d.ts.map +0 -1
  43. package/dist/src/account-connection.js +0 -548
  44. package/dist/src/account-connection.js.map +0 -1
  45. package/dist/src/account-reconciler.d.ts +0 -64
  46. package/dist/src/account-reconciler.d.ts.map +0 -1
  47. package/dist/src/account-reconciler.js +0 -314
  48. package/dist/src/account-reconciler.js.map +0 -1
  49. package/dist/src/account-reconciler.test.d.ts +0 -2
  50. package/dist/src/account-reconciler.test.d.ts.map +0 -1
  51. package/dist/src/account-reconciler.test.js +0 -166
  52. package/dist/src/account-reconciler.test.js.map +0 -1
  53. package/dist/src/action-run-event.d.ts +0 -20
  54. package/dist/src/action-run-event.d.ts.map +0 -1
  55. package/dist/src/action-run-event.js +0 -62
  56. package/dist/src/action-run-event.js.map +0 -1
  57. package/dist/src/action-run-event.test.d.ts +0 -2
  58. package/dist/src/action-run-event.test.d.ts.map +0 -1
  59. package/dist/src/action-run-event.test.js +0 -83
  60. package/dist/src/action-run-event.test.js.map +0 -1
  61. package/dist/src/action-store-access.d.ts +0 -29
  62. package/dist/src/action-store-access.d.ts.map +0 -1
  63. package/dist/src/action-store-access.js +0 -81
  64. package/dist/src/action-store-access.js.map +0 -1
  65. package/dist/src/action-store-lifecycle.test.d.ts +0 -2
  66. package/dist/src/action-store-lifecycle.test.d.ts.map +0 -1
  67. package/dist/src/action-store-lifecycle.test.js +0 -195
  68. package/dist/src/action-store-lifecycle.test.js.map +0 -1
  69. package/dist/src/active-cron-context-store.d.ts +0 -20
  70. package/dist/src/active-cron-context-store.d.ts.map +0 -1
  71. package/dist/src/active-cron-context-store.js +0 -73
  72. package/dist/src/active-cron-context-store.js.map +0 -1
  73. package/dist/src/active-round-registry.d.ts +0 -35
  74. package/dist/src/active-round-registry.d.ts.map +0 -1
  75. package/dist/src/active-round-registry.js +0 -85
  76. package/dist/src/active-round-registry.js.map +0 -1
  77. package/dist/src/active-round-registry.test.d.ts +0 -2
  78. package/dist/src/active-round-registry.test.d.ts.map +0 -1
  79. package/dist/src/active-round-registry.test.js +0 -62
  80. package/dist/src/active-round-registry.test.js.map +0 -1
  81. package/dist/src/agent-context-types.d.ts +0 -205
  82. package/dist/src/agent-context-types.d.ts.map +0 -1
  83. package/dist/src/agent-context-types.js +0 -132
  84. package/dist/src/agent-context-types.js.map +0 -1
  85. package/dist/src/agent-context-types.test.d.ts +0 -2
  86. package/dist/src/agent-context-types.test.d.ts.map +0 -1
  87. package/dist/src/agent-context-types.test.js +0 -123
  88. package/dist/src/agent-context-types.test.js.map +0 -1
  89. package/dist/src/agent-stream-client-registry.d.ts +0 -8
  90. package/dist/src/agent-stream-client-registry.d.ts.map +0 -1
  91. package/dist/src/agent-stream-client-registry.js +0 -19
  92. package/dist/src/agent-stream-client-registry.js.map +0 -1
  93. package/dist/src/apply-sync-mapping.d.ts +0 -15
  94. package/dist/src/apply-sync-mapping.d.ts.map +0 -1
  95. package/dist/src/apply-sync-mapping.js +0 -98
  96. package/dist/src/apply-sync-mapping.js.map +0 -1
  97. package/dist/src/assistant-item-delivery.d.ts +0 -27
  98. package/dist/src/assistant-item-delivery.d.ts.map +0 -1
  99. package/dist/src/assistant-item-delivery.js +0 -134
  100. package/dist/src/assistant-item-delivery.js.map +0 -1
  101. package/dist/src/assistant-item-delivery.test.d.ts +0 -2
  102. package/dist/src/assistant-item-delivery.test.d.ts.map +0 -1
  103. package/dist/src/assistant-item-delivery.test.js +0 -116
  104. package/dist/src/assistant-item-delivery.test.js.map +0 -1
  105. package/dist/src/assistant-item-sink.d.ts +0 -17
  106. package/dist/src/assistant-item-sink.d.ts.map +0 -1
  107. package/dist/src/assistant-item-sink.js +0 -34
  108. package/dist/src/assistant-item-sink.js.map +0 -1
  109. package/dist/src/auth.d.ts +0 -32
  110. package/dist/src/auth.d.ts.map +0 -1
  111. package/dist/src/auth.js +0 -70
  112. package/dist/src/auth.js.map +0 -1
  113. package/dist/src/auto-model-router.d.ts +0 -36
  114. package/dist/src/auto-model-router.d.ts.map +0 -1
  115. package/dist/src/auto-model-router.js +0 -60
  116. package/dist/src/auto-model-router.js.map +0 -1
  117. package/dist/src/auto-model-router.test.d.ts +0 -2
  118. package/dist/src/auto-model-router.test.d.ts.map +0 -1
  119. package/dist/src/auto-model-router.test.js +0 -99
  120. package/dist/src/auto-model-router.test.js.map +0 -1
  121. package/dist/src/block-streaming-config.test.d.ts +0 -2
  122. package/dist/src/block-streaming-config.test.d.ts.map +0 -1
  123. package/dist/src/block-streaming-config.test.js +0 -91
  124. package/dist/src/block-streaming-config.test.js.map +0 -1
  125. package/dist/src/build-project-prompt.d.ts +0 -40
  126. package/dist/src/build-project-prompt.d.ts.map +0 -1
  127. package/dist/src/build-project-prompt.js +0 -183
  128. package/dist/src/build-project-prompt.js.map +0 -1
  129. package/dist/src/build-project-prompt.test.d.ts +0 -2
  130. package/dist/src/build-project-prompt.test.d.ts.map +0 -1
  131. package/dist/src/build-project-prompt.test.js +0 -100
  132. package/dist/src/build-project-prompt.test.js.map +0 -1
  133. package/dist/src/channel-config.d.ts +0 -716
  134. package/dist/src/channel-config.d.ts.map +0 -1
  135. package/dist/src/channel-config.js +0 -405
  136. package/dist/src/channel-config.js.map +0 -1
  137. package/dist/src/channel-config.test.d.ts +0 -2
  138. package/dist/src/channel-config.test.d.ts.map +0 -1
  139. package/dist/src/channel-config.test.js +0 -113
  140. package/dist/src/channel-config.test.js.map +0 -1
  141. package/dist/src/channel-disabled-account.test.d.ts +0 -2
  142. package/dist/src/channel-disabled-account.test.d.ts.map +0 -1
  143. package/dist/src/channel-disabled-account.test.js +0 -44
  144. package/dist/src/channel-disabled-account.test.js.map +0 -1
  145. package/dist/src/channel-log.d.ts +0 -17
  146. package/dist/src/channel-log.d.ts.map +0 -1
  147. package/dist/src/channel-log.js +0 -45
  148. package/dist/src/channel-log.js.map +0 -1
  149. package/dist/src/channel.d.ts +0 -17
  150. package/dist/src/channel.d.ts.map +0 -1
  151. package/dist/src/channel.js +0 -272
  152. package/dist/src/channel.js.map +0 -1
  153. package/dist/src/connection-workspace-event.test.d.ts +0 -2
  154. package/dist/src/connection-workspace-event.test.d.ts.map +0 -1
  155. package/dist/src/connection-workspace-event.test.js +0 -74
  156. package/dist/src/connection-workspace-event.test.js.map +0 -1
  157. package/dist/src/connection.d.ts +0 -110
  158. package/dist/src/connection.d.ts.map +0 -1
  159. package/dist/src/connection.js +0 -463
  160. package/dist/src/connection.js.map +0 -1
  161. package/dist/src/connection.test.d.ts +0 -2
  162. package/dist/src/connection.test.d.ts.map +0 -1
  163. package/dist/src/connection.test.js +0 -110
  164. package/dist/src/connection.test.js.map +0 -1
  165. package/dist/src/cron-appkey-binding-store.d.ts +0 -29
  166. package/dist/src/cron-appkey-binding-store.d.ts.map +0 -1
  167. package/dist/src/cron-appkey-binding-store.js +0 -239
  168. package/dist/src/cron-appkey-binding-store.js.map +0 -1
  169. package/dist/src/cron-appkey-binding-store.test.d.ts +0 -2
  170. package/dist/src/cron-appkey-binding-store.test.d.ts.map +0 -1
  171. package/dist/src/cron-appkey-binding-store.test.js +0 -387
  172. package/dist/src/cron-appkey-binding-store.test.js.map +0 -1
  173. package/dist/src/deliver-text.d.ts +0 -30
  174. package/dist/src/deliver-text.d.ts.map +0 -1
  175. package/dist/src/deliver-text.js +0 -88
  176. package/dist/src/deliver-text.js.map +0 -1
  177. package/dist/src/deliver-text.test.d.ts +0 -2
  178. package/dist/src/deliver-text.test.d.ts.map +0 -1
  179. package/dist/src/deliver-text.test.js +0 -117
  180. package/dist/src/deliver-text.test.js.map +0 -1
  181. package/dist/src/dispatch-mentioned-reply.d.ts +0 -47
  182. package/dist/src/dispatch-mentioned-reply.d.ts.map +0 -1
  183. package/dist/src/dispatch-mentioned-reply.js +0 -997
  184. package/dist/src/dispatch-mentioned-reply.js.map +0 -1
  185. package/dist/src/gateway-session-queue.d.ts +0 -37
  186. package/dist/src/gateway-session-queue.d.ts.map +0 -1
  187. package/dist/src/gateway-session-queue.js +0 -86
  188. package/dist/src/gateway-session-queue.js.map +0 -1
  189. package/dist/src/group-history-tool.d.ts +0 -31
  190. package/dist/src/group-history-tool.d.ts.map +0 -1
  191. package/dist/src/group-history-tool.js +0 -177
  192. package/dist/src/group-history-tool.js.map +0 -1
  193. package/dist/src/im-tool-progress.d.ts +0 -4
  194. package/dist/src/im-tool-progress.d.ts.map +0 -1
  195. package/dist/src/im-tool-progress.js +0 -87
  196. package/dist/src/im-tool-progress.js.map +0 -1
  197. package/dist/src/inbound-archive.d.ts +0 -4
  198. package/dist/src/inbound-archive.d.ts.map +0 -1
  199. package/dist/src/inbound-archive.js +0 -105
  200. package/dist/src/inbound-archive.js.map +0 -1
  201. package/dist/src/inbound-attachment-meta.d.ts +0 -13
  202. package/dist/src/inbound-attachment-meta.d.ts.map +0 -1
  203. package/dist/src/inbound-attachment-meta.js +0 -39
  204. package/dist/src/inbound-attachment-meta.js.map +0 -1
  205. package/dist/src/inbound-chat-type.d.ts +0 -33
  206. package/dist/src/inbound-chat-type.d.ts.map +0 -1
  207. package/dist/src/inbound-chat-type.js +0 -52
  208. package/dist/src/inbound-chat-type.js.map +0 -1
  209. package/dist/src/inbound-display.d.ts +0 -41
  210. package/dist/src/inbound-display.d.ts.map +0 -1
  211. package/dist/src/inbound-display.js +0 -170
  212. package/dist/src/inbound-display.js.map +0 -1
  213. package/dist/src/inbound-file-download.d.ts +0 -15
  214. package/dist/src/inbound-file-download.d.ts.map +0 -1
  215. package/dist/src/inbound-file-download.js +0 -48
  216. package/dist/src/inbound-file-download.js.map +0 -1
  217. package/dist/src/inbound-input-media.d.ts +0 -43
  218. package/dist/src/inbound-input-media.d.ts.map +0 -1
  219. package/dist/src/inbound-input-media.js +0 -230
  220. package/dist/src/inbound-input-media.js.map +0 -1
  221. package/dist/src/inbound-media-local.d.ts +0 -49
  222. package/dist/src/inbound-media-local.d.ts.map +0 -1
  223. package/dist/src/inbound-media-local.js +0 -194
  224. package/dist/src/inbound-media-local.js.map +0 -1
  225. package/dist/src/inbound-model.d.ts +0 -39
  226. package/dist/src/inbound-model.d.ts.map +0 -1
  227. package/dist/src/inbound-model.js +0 -66
  228. package/dist/src/inbound-model.js.map +0 -1
  229. package/dist/src/inbound-model.test.d.ts +0 -2
  230. package/dist/src/inbound-model.test.d.ts.map +0 -1
  231. package/dist/src/inbound-model.test.js +0 -88
  232. package/dist/src/inbound-model.test.js.map +0 -1
  233. package/dist/src/inbound-terminal-delivery.d.ts +0 -77
  234. package/dist/src/inbound-terminal-delivery.d.ts.map +0 -1
  235. package/dist/src/inbound-terminal-delivery.js +0 -251
  236. package/dist/src/inbound-terminal-delivery.js.map +0 -1
  237. package/dist/src/inbound-terminal-state.d.ts +0 -68
  238. package/dist/src/inbound-terminal-state.d.ts.map +0 -1
  239. package/dist/src/inbound-terminal-state.js +0 -185
  240. package/dist/src/inbound-terminal-state.js.map +0 -1
  241. package/dist/src/inbound-terminal-state.test.d.ts +0 -2
  242. package/dist/src/inbound-terminal-state.test.d.ts.map +0 -1
  243. package/dist/src/inbound-terminal-state.test.js +0 -224
  244. package/dist/src/inbound-terminal-state.test.js.map +0 -1
  245. package/dist/src/interrupt-round.d.ts +0 -9
  246. package/dist/src/interrupt-round.d.ts.map +0 -1
  247. package/dist/src/interrupt-round.js +0 -44
  248. package/dist/src/interrupt-round.js.map +0 -1
  249. package/dist/src/interrupt-round.test.d.ts +0 -2
  250. package/dist/src/interrupt-round.test.d.ts.map +0 -1
  251. package/dist/src/interrupt-round.test.js +0 -133
  252. package/dist/src/interrupt-round.test.js.map +0 -1
  253. package/dist/src/item-event-guard.d.ts +0 -28
  254. package/dist/src/item-event-guard.d.ts.map +0 -1
  255. package/dist/src/item-event-guard.js +0 -22
  256. package/dist/src/item-event-guard.js.map +0 -1
  257. package/dist/src/item-event-guard.test.d.ts +0 -2
  258. package/dist/src/item-event-guard.test.d.ts.map +0 -1
  259. package/dist/src/item-event-guard.test.js +0 -55
  260. package/dist/src/item-event-guard.test.js.map +0 -1
  261. package/dist/src/nas-site.d.ts +0 -16
  262. package/dist/src/nas-site.d.ts.map +0 -1
  263. package/dist/src/nas-site.js +0 -17
  264. package/dist/src/nas-site.js.map +0 -1
  265. package/dist/src/nas-volumes.d.ts +0 -53
  266. package/dist/src/nas-volumes.d.ts.map +0 -1
  267. package/dist/src/nas-volumes.js +0 -417
  268. package/dist/src/nas-volumes.js.map +0 -1
  269. package/dist/src/nas-volumes.test.d.ts +0 -2
  270. package/dist/src/nas-volumes.test.d.ts.map +0 -1
  271. package/dist/src/nas-volumes.test.js +0 -261
  272. package/dist/src/nas-volumes.test.js.map +0 -1
  273. package/dist/src/per-message-fallback-notice.d.ts +0 -43
  274. package/dist/src/per-message-fallback-notice.d.ts.map +0 -1
  275. package/dist/src/per-message-fallback-notice.js +0 -93
  276. package/dist/src/per-message-fallback-notice.js.map +0 -1
  277. package/dist/src/per-message-fallback-notice.test.d.ts +0 -2
  278. package/dist/src/per-message-fallback-notice.test.d.ts.map +0 -1
  279. package/dist/src/per-message-fallback-notice.test.js +0 -47
  280. package/dist/src/per-message-fallback-notice.test.js.map +0 -1
  281. package/dist/src/per-message-model-pending.d.ts +0 -52
  282. package/dist/src/per-message-model-pending.d.ts.map +0 -1
  283. package/dist/src/per-message-model-pending.js +0 -134
  284. package/dist/src/per-message-model-pending.js.map +0 -1
  285. package/dist/src/plan-blocked-notice.d.ts +0 -14
  286. package/dist/src/plan-blocked-notice.d.ts.map +0 -1
  287. package/dist/src/plan-blocked-notice.js +0 -41
  288. package/dist/src/plan-blocked-notice.js.map +0 -1
  289. package/dist/src/plan-blocked-notice.test.d.ts +0 -2
  290. package/dist/src/plan-blocked-notice.test.d.ts.map +0 -1
  291. package/dist/src/plan-blocked-notice.test.js +0 -96
  292. package/dist/src/plan-blocked-notice.test.js.map +0 -1
  293. package/dist/src/plan-core-adapter.d.ts +0 -54
  294. package/dist/src/plan-core-adapter.d.ts.map +0 -1
  295. package/dist/src/plan-core-adapter.js +0 -104
  296. package/dist/src/plan-core-adapter.js.map +0 -1
  297. package/dist/src/plan-core-adapter.test.d.ts +0 -2
  298. package/dist/src/plan-core-adapter.test.d.ts.map +0 -1
  299. package/dist/src/plan-core-adapter.test.js +0 -183
  300. package/dist/src/plan-core-adapter.test.js.map +0 -1
  301. package/dist/src/plan-core-db.d.ts +0 -22
  302. package/dist/src/plan-core-db.d.ts.map +0 -1
  303. package/dist/src/plan-core-db.js +0 -91
  304. package/dist/src/plan-core-db.js.map +0 -1
  305. package/dist/src/plan-core-db.test.d.ts +0 -2
  306. package/dist/src/plan-core-db.test.d.ts.map +0 -1
  307. package/dist/src/plan-core-db.test.js +0 -115
  308. package/dist/src/plan-core-db.test.js.map +0 -1
  309. package/dist/src/plan-core-snapshot.d.ts +0 -23
  310. package/dist/src/plan-core-snapshot.d.ts.map +0 -1
  311. package/dist/src/plan-core-snapshot.js +0 -66
  312. package/dist/src/plan-core-snapshot.js.map +0 -1
  313. package/dist/src/plan-core-snapshot.test.d.ts +0 -2
  314. package/dist/src/plan-core-snapshot.test.d.ts.map +0 -1
  315. package/dist/src/plan-core-snapshot.test.js +0 -157
  316. package/dist/src/plan-core-snapshot.test.js.map +0 -1
  317. package/dist/src/plan-event-subscription.d.ts +0 -36
  318. package/dist/src/plan-event-subscription.d.ts.map +0 -1
  319. package/dist/src/plan-event-subscription.js +0 -57
  320. package/dist/src/plan-event-subscription.js.map +0 -1
  321. package/dist/src/plan-event-subscription.test.d.ts +0 -2
  322. package/dist/src/plan-event-subscription.test.d.ts.map +0 -1
  323. package/dist/src/plan-event-subscription.test.js +0 -167
  324. package/dist/src/plan-event-subscription.test.js.map +0 -1
  325. package/dist/src/plan-stat-event.d.ts +0 -17
  326. package/dist/src/plan-stat-event.d.ts.map +0 -1
  327. package/dist/src/plan-stat-event.js +0 -41
  328. package/dist/src/plan-stat-event.js.map +0 -1
  329. package/dist/src/plan-stat-event.test.d.ts +0 -2
  330. package/dist/src/plan-stat-event.test.d.ts.map +0 -1
  331. package/dist/src/plan-stat-event.test.js +0 -131
  332. package/dist/src/plan-stat-event.test.js.map +0 -1
  333. package/dist/src/plan-tool-middleware.d.ts +0 -19
  334. package/dist/src/plan-tool-middleware.d.ts.map +0 -1
  335. package/dist/src/plan-tool-middleware.js +0 -63
  336. package/dist/src/plan-tool-middleware.js.map +0 -1
  337. package/dist/src/plan-tool-middleware.test.d.ts +0 -2
  338. package/dist/src/plan-tool-middleware.test.d.ts.map +0 -1
  339. package/dist/src/plan-tool-middleware.test.js +0 -103
  340. package/dist/src/plan-tool-middleware.test.js.map +0 -1
  341. package/dist/src/plan-tool-result.d.ts +0 -18
  342. package/dist/src/plan-tool-result.d.ts.map +0 -1
  343. package/dist/src/plan-tool-result.js +0 -77
  344. package/dist/src/plan-tool-result.js.map +0 -1
  345. package/dist/src/plan-tool-result.test.d.ts +0 -2
  346. package/dist/src/plan-tool-result.test.d.ts.map +0 -1
  347. package/dist/src/plan-tool-result.test.js +0 -129
  348. package/dist/src/plan-tool-result.test.js.map +0 -1
  349. package/dist/src/plan-ws-registry.d.ts +0 -15
  350. package/dist/src/plan-ws-registry.d.ts.map +0 -1
  351. package/dist/src/plan-ws-registry.js +0 -39
  352. package/dist/src/plan-ws-registry.js.map +0 -1
  353. package/dist/src/plan-ws-registry.test.d.ts +0 -2
  354. package/dist/src/plan-ws-registry.test.d.ts.map +0 -1
  355. package/dist/src/plan-ws-registry.test.js +0 -61
  356. package/dist/src/plan-ws-registry.test.js.map +0 -1
  357. package/dist/src/plugin-dispose.d.ts +0 -22
  358. package/dist/src/plugin-dispose.d.ts.map +0 -1
  359. package/dist/src/plugin-dispose.js +0 -66
  360. package/dist/src/plugin-dispose.js.map +0 -1
  361. package/dist/src/process-shared-store.d.ts +0 -48
  362. package/dist/src/process-shared-store.d.ts.map +0 -1
  363. package/dist/src/process-shared-store.js +0 -89
  364. package/dist/src/process-shared-store.js.map +0 -1
  365. package/dist/src/process-shared-store.test.d.ts +0 -2
  366. package/dist/src/process-shared-store.test.d.ts.map +0 -1
  367. package/dist/src/process-shared-store.test.js +0 -60
  368. package/dist/src/process-shared-store.test.js.map +0 -1
  369. package/dist/src/project-path-normalize.d.ts +0 -30
  370. package/dist/src/project-path-normalize.d.ts.map +0 -1
  371. package/dist/src/project-path-normalize.js +0 -101
  372. package/dist/src/project-path-normalize.js.map +0 -1
  373. package/dist/src/recommended-system-prompt.d.ts +0 -3
  374. package/dist/src/recommended-system-prompt.d.ts.map +0 -1
  375. package/dist/src/recommended-system-prompt.js +0 -8
  376. package/dist/src/recommended-system-prompt.js.map +0 -1
  377. package/dist/src/register-exec-env-hook.d.ts +0 -44
  378. package/dist/src/register-exec-env-hook.d.ts.map +0 -1
  379. package/dist/src/register-exec-env-hook.js +0 -473
  380. package/dist/src/register-exec-env-hook.js.map +0 -1
  381. package/dist/src/register-exec-env-hook.test.d.ts +0 -2
  382. package/dist/src/register-exec-env-hook.test.d.ts.map +0 -1
  383. package/dist/src/register-exec-env-hook.test.js +0 -189
  384. package/dist/src/register-exec-env-hook.test.js.map +0 -1
  385. package/dist/src/register-group-prompt-hook.d.ts +0 -17
  386. package/dist/src/register-group-prompt-hook.d.ts.map +0 -1
  387. package/dist/src/register-group-prompt-hook.js +0 -45
  388. package/dist/src/register-group-prompt-hook.js.map +0 -1
  389. package/dist/src/register-group-prompt-hook.test.d.ts +0 -2
  390. package/dist/src/register-group-prompt-hook.test.d.ts.map +0 -1
  391. package/dist/src/register-group-prompt-hook.test.js +0 -60
  392. package/dist/src/register-group-prompt-hook.test.js.map +0 -1
  393. package/dist/src/register-per-message-model-hook.d.ts +0 -14
  394. package/dist/src/register-per-message-model-hook.d.ts.map +0 -1
  395. package/dist/src/register-per-message-model-hook.js +0 -48
  396. package/dist/src/register-per-message-model-hook.js.map +0 -1
  397. package/dist/src/register-per-message-model-hook.test.d.ts +0 -2
  398. package/dist/src/register-per-message-model-hook.test.d.ts.map +0 -1
  399. package/dist/src/register-per-message-model-hook.test.js +0 -208
  400. package/dist/src/register-per-message-model-hook.test.js.map +0 -1
  401. package/dist/src/register-run-model-context-hook.d.ts +0 -11
  402. package/dist/src/register-run-model-context-hook.d.ts.map +0 -1
  403. package/dist/src/register-run-model-context-hook.js +0 -23
  404. package/dist/src/register-run-model-context-hook.js.map +0 -1
  405. package/dist/src/reply-dispatch-driver.d.ts +0 -89
  406. package/dist/src/reply-dispatch-driver.d.ts.map +0 -1
  407. package/dist/src/reply-dispatch-driver.js +0 -294
  408. package/dist/src/reply-dispatch-driver.js.map +0 -1
  409. package/dist/src/reply-dispatch-driver.test.d.ts +0 -2
  410. package/dist/src/reply-dispatch-driver.test.d.ts.map +0 -1
  411. package/dist/src/reply-dispatch-driver.test.js +0 -363
  412. package/dist/src/reply-dispatch-driver.test.js.map +0 -1
  413. package/dist/src/resolve-inbound-group-prompt.d.ts +0 -37
  414. package/dist/src/resolve-inbound-group-prompt.d.ts.map +0 -1
  415. package/dist/src/resolve-inbound-group-prompt.js +0 -57
  416. package/dist/src/resolve-inbound-group-prompt.js.map +0 -1
  417. package/dist/src/resource-file.d.ts +0 -119
  418. package/dist/src/resource-file.d.ts.map +0 -1
  419. package/dist/src/resource-file.js +0 -533
  420. package/dist/src/resource-file.js.map +0 -1
  421. package/dist/src/resource-file.test.d.ts +0 -2
  422. package/dist/src/resource-file.test.d.ts.map +0 -1
  423. package/dist/src/resource-file.test.js +0 -64
  424. package/dist/src/resource-file.test.js.map +0 -1
  425. package/dist/src/run-model-context.d.ts +0 -45
  426. package/dist/src/run-model-context.d.ts.map +0 -1
  427. package/dist/src/run-model-context.js +0 -108
  428. package/dist/src/run-model-context.js.map +0 -1
  429. package/dist/src/run-model-context.test.d.ts +0 -2
  430. package/dist/src/run-model-context.test.d.ts.map +0 -1
  431. package/dist/src/run-model-context.test.js +0 -68
  432. package/dist/src/run-model-context.test.js.map +0 -1
  433. package/dist/src/run-usage-session.d.ts +0 -13
  434. package/dist/src/run-usage-session.d.ts.map +0 -1
  435. package/dist/src/run-usage-session.js +0 -41
  436. package/dist/src/run-usage-session.js.map +0 -1
  437. package/dist/src/run-usage.d.ts +0 -67
  438. package/dist/src/run-usage.d.ts.map +0 -1
  439. package/dist/src/run-usage.js +0 -119
  440. package/dist/src/run-usage.js.map +0 -1
  441. package/dist/src/run-usage.test.d.ts +0 -2
  442. package/dist/src/run-usage.test.d.ts.map +0 -1
  443. package/dist/src/run-usage.test.js +0 -178
  444. package/dist/src/run-usage.test.js.map +0 -1
  445. package/dist/src/send-file-event.d.ts +0 -26
  446. package/dist/src/send-file-event.d.ts.map +0 -1
  447. package/dist/src/send-file-event.js +0 -33
  448. package/dist/src/send-file-event.js.map +0 -1
  449. package/dist/src/send-file-event.test.d.ts +0 -2
  450. package/dist/src/send-file-event.test.d.ts.map +0 -1
  451. package/dist/src/send-file-event.test.js +0 -86
  452. package/dist/src/send-file-event.test.js.map +0 -1
  453. package/dist/src/send-file-tool.d.ts +0 -81
  454. package/dist/src/send-file-tool.d.ts.map +0 -1
  455. package/dist/src/send-file-tool.js +0 -363
  456. package/dist/src/send-file-tool.js.map +0 -1
  457. package/dist/src/send-file-tool.test.d.ts +0 -2
  458. package/dist/src/send-file-tool.test.d.ts.map +0 -1
  459. package/dist/src/send-file-tool.test.js +0 -176
  460. package/dist/src/send-file-tool.test.js.map +0 -1
  461. package/dist/src/send-group-message-tool.d.ts +0 -17
  462. package/dist/src/send-group-message-tool.d.ts.map +0 -1
  463. package/dist/src/send-group-message-tool.js +0 -82
  464. package/dist/src/send-group-message-tool.js.map +0 -1
  465. package/dist/src/send-service.d.ts +0 -83
  466. package/dist/src/send-service.d.ts.map +0 -1
  467. package/dist/src/send-service.js +0 -324
  468. package/dist/src/send-service.js.map +0 -1
  469. package/dist/src/send-service.test.d.ts +0 -2
  470. package/dist/src/send-service.test.d.ts.map +0 -1
  471. package/dist/src/send-service.test.js +0 -40
  472. package/dist/src/send-service.test.js.map +0 -1
  473. package/dist/src/session-env-store.d.ts +0 -55
  474. package/dist/src/session-env-store.d.ts.map +0 -1
  475. package/dist/src/session-env-store.js +0 -328
  476. package/dist/src/session-env-store.js.map +0 -1
  477. package/dist/src/session-env-store.test.d.ts +0 -2
  478. package/dist/src/session-env-store.test.d.ts.map +0 -1
  479. package/dist/src/session-env-store.test.js +0 -151
  480. package/dist/src/session-env-store.test.js.map +0 -1
  481. package/dist/src/session-group-prompt.d.ts +0 -34
  482. package/dist/src/session-group-prompt.d.ts.map +0 -1
  483. package/dist/src/session-group-prompt.js +0 -101
  484. package/dist/src/session-group-prompt.js.map +0 -1
  485. package/dist/src/session-group-prompt.test.d.ts +0 -2
  486. package/dist/src/session-group-prompt.test.d.ts.map +0 -1
  487. package/dist/src/session-group-prompt.test.js +0 -72
  488. package/dist/src/session-group-prompt.test.js.map +0 -1
  489. package/dist/src/session-im-context.d.ts +0 -15
  490. package/dist/src/session-im-context.d.ts.map +0 -1
  491. package/dist/src/session-im-context.js +0 -54
  492. package/dist/src/session-im-context.js.map +0 -1
  493. package/dist/src/session-model-fallback.d.ts +0 -13
  494. package/dist/src/session-model-fallback.d.ts.map +0 -1
  495. package/dist/src/session-model-fallback.js +0 -24
  496. package/dist/src/session-model-fallback.js.map +0 -1
  497. package/dist/src/subagent-monitor.d.ts +0 -45
  498. package/dist/src/subagent-monitor.d.ts.map +0 -1
  499. package/dist/src/subagent-monitor.js +0 -498
  500. package/dist/src/subagent-monitor.js.map +0 -1
  501. package/dist/src/subagent-monitor.test.d.ts +0 -2
  502. package/dist/src/subagent-monitor.test.d.ts.map +0 -1
  503. package/dist/src/subagent-monitor.test.js +0 -335
  504. package/dist/src/subagent-monitor.test.js.map +0 -1
  505. package/dist/src/sync-mapping-types.d.ts +0 -220
  506. package/dist/src/sync-mapping-types.d.ts.map +0 -1
  507. package/dist/src/sync-mapping-types.js +0 -55
  508. package/dist/src/sync-mapping-types.js.map +0 -1
  509. package/dist/src/sync-service-client.d.ts +0 -29
  510. package/dist/src/sync-service-client.d.ts.map +0 -1
  511. package/dist/src/sync-service-client.js +0 -72
  512. package/dist/src/sync-service-client.js.map +0 -1
  513. package/dist/src/thinking-ws-progress.d.ts +0 -24
  514. package/dist/src/thinking-ws-progress.d.ts.map +0 -1
  515. package/dist/src/thinking-ws-progress.js +0 -45
  516. package/dist/src/thinking-ws-progress.js.map +0 -1
  517. package/dist/src/thinking-ws-progress.test.d.ts +0 -2
  518. package/dist/src/thinking-ws-progress.test.d.ts.map +0 -1
  519. package/dist/src/thinking-ws-progress.test.js +0 -38
  520. package/dist/src/thinking-ws-progress.test.js.map +0 -1
  521. package/dist/src/tool-event-adapter.d.ts +0 -31
  522. package/dist/src/tool-event-adapter.d.ts.map +0 -1
  523. package/dist/src/tool-event-adapter.js +0 -83
  524. package/dist/src/tool-event-adapter.js.map +0 -1
  525. package/dist/src/tool-event-adapter.test.d.ts +0 -2
  526. package/dist/src/tool-event-adapter.test.d.ts.map +0 -1
  527. package/dist/src/tool-event-adapter.test.js +0 -93
  528. package/dist/src/tool-event-adapter.test.js.map +0 -1
  529. package/dist/src/tool-json-result.d.ts +0 -14
  530. package/dist/src/tool-json-result.d.ts.map +0 -1
  531. package/dist/src/tool-json-result.js +0 -20
  532. package/dist/src/tool-json-result.js.map +0 -1
  533. package/dist/src/turn-agent-event-subscription.d.ts +0 -29
  534. package/dist/src/turn-agent-event-subscription.d.ts.map +0 -1
  535. package/dist/src/turn-agent-event-subscription.js +0 -289
  536. package/dist/src/turn-agent-event-subscription.js.map +0 -1
  537. package/dist/src/turn-agent-event-subscription.test.d.ts +0 -2
  538. package/dist/src/turn-agent-event-subscription.test.d.ts.map +0 -1
  539. package/dist/src/turn-agent-event-subscription.test.js +0 -165
  540. package/dist/src/turn-agent-event-subscription.test.js.map +0 -1
  541. package/dist/src/turn-deliver-buffer.d.ts +0 -60
  542. package/dist/src/turn-deliver-buffer.d.ts.map +0 -1
  543. package/dist/src/turn-deliver-buffer.js +0 -133
  544. package/dist/src/turn-deliver-buffer.js.map +0 -1
  545. package/dist/src/turn-deliver-buffer.test.d.ts +0 -2
  546. package/dist/src/turn-deliver-buffer.test.d.ts.map +0 -1
  547. package/dist/src/turn-deliver-buffer.test.js +0 -184
  548. package/dist/src/turn-deliver-buffer.test.js.map +0 -1
  549. package/dist/src/turn-end-controller.d.ts +0 -61
  550. package/dist/src/turn-end-controller.d.ts.map +0 -1
  551. package/dist/src/turn-end-controller.js +0 -239
  552. package/dist/src/turn-end-controller.js.map +0 -1
  553. package/dist/src/turn-end-controller.test.d.ts +0 -2
  554. package/dist/src/turn-end-controller.test.d.ts.map +0 -1
  555. package/dist/src/turn-end-controller.test.js +0 -97
  556. package/dist/src/turn-end-controller.test.js.map +0 -1
  557. package/dist/src/types.d.ts +0 -433
  558. package/dist/src/types.d.ts.map +0 -1
  559. package/dist/src/types.js +0 -32
  560. package/dist/src/types.js.map +0 -1
  561. package/dist/src/user-facing-errors.d.ts +0 -32
  562. package/dist/src/user-facing-errors.d.ts.map +0 -1
  563. package/dist/src/user-facing-errors.js +0 -120
  564. package/dist/src/user-facing-errors.js.map +0 -1
  565. package/dist/src/user-facing-errors.test.d.ts +0 -2
  566. package/dist/src/user-facing-errors.test.d.ts.map +0 -1
  567. package/dist/src/user-facing-errors.test.js +0 -102
  568. package/dist/src/user-facing-errors.test.js.map +0 -1
  569. package/dist/src/workspace-event-protocol.d.ts +0 -3
  570. package/dist/src/workspace-event-protocol.d.ts.map +0 -1
  571. package/dist/src/workspace-event-protocol.js +0 -3
  572. package/dist/src/workspace-event-protocol.js.map +0 -1
  573. package/dist/src/workspace-event-scheduler.d.ts +0 -54
  574. package/dist/src/workspace-event-scheduler.d.ts.map +0 -1
  575. package/dist/src/workspace-event-scheduler.js +0 -131
  576. package/dist/src/workspace-event-scheduler.js.map +0 -1
  577. package/dist/src/workspace-event-scheduler.test.d.ts +0 -2
  578. package/dist/src/workspace-event-scheduler.test.d.ts.map +0 -1
  579. package/dist/src/workspace-event-scheduler.test.js +0 -157
  580. package/dist/src/workspace-event-scheduler.test.js.map +0 -1
  581. package/dist/src/workspace-event.d.ts +0 -28
  582. package/dist/src/workspace-event.d.ts.map +0 -1
  583. package/dist/src/workspace-event.js +0 -674
  584. package/dist/src/workspace-event.js.map +0 -1
  585. package/dist/src/workspace-event.test.d.ts +0 -2
  586. package/dist/src/workspace-event.test.d.ts.map +0 -1
  587. package/dist/src/workspace-event.test.js +0 -265
  588. package/dist/src/workspace-event.test.js.map +0 -1
  589. package/dist/src/ws-inbound-schema.d.ts +0 -14
  590. package/dist/src/ws-inbound-schema.d.ts.map +0 -1
  591. package/dist/src/ws-inbound-schema.js +0 -68
  592. package/dist/src/ws-inbound-schema.js.map +0 -1
  593. package/dist/src/ws-inbound-schema.test.d.ts +0 -2
  594. package/dist/src/ws-inbound-schema.test.d.ts.map +0 -1
  595. package/dist/src/ws-inbound-schema.test.js +0 -58
  596. package/dist/src/ws-inbound-schema.test.js.map +0 -1
  597. package/dist/src/ws-run-event-unmapped.d.ts +0 -10
  598. package/dist/src/ws-run-event-unmapped.d.ts.map +0 -1
  599. package/dist/src/ws-run-event-unmapped.js +0 -16
  600. package/dist/src/ws-run-event-unmapped.js.map +0 -1
  601. package/dist/src/ws-run-event-unmapped.test.d.ts +0 -2
  602. package/dist/src/ws-run-event-unmapped.test.d.ts.map +0 -1
  603. package/dist/src/ws-run-event-unmapped.test.js +0 -15
  604. package/dist/src/ws-run-event-unmapped.test.js.map +0 -1
@@ -1,28 +0,0 @@
1
- /**
2
- * `onItemEvent` 条目过滤:已由专用回调覆盖的条目(工具、Reasoning)不再进入
3
- * RUN_EVENT 兜底,避免把内部诊断标识 `unmapped:*` 展示给最终用户。
4
- */
5
- export interface ItemEventPayload {
6
- toolCallId?: string;
7
- kind?: string;
8
- title?: string;
9
- name?: string;
10
- phase?: string;
11
- status?: string;
12
- }
13
- export type ItemEventGuardResult = {
14
- suppress: true;
15
- reason: "tool" | "reasoning";
16
- } | {
17
- suppress: false;
18
- kind: string;
19
- title: string;
20
- };
21
- /**
22
- * 判断 `onItemEvent` 条目是否应被抑制:
23
- * - 工具类(`toolCallId` 或 `kind=tool`)已由 onToolStart/onToolResult 覆盖;
24
- * - Reasoning 条目(`kind=analysis` 且 `title=reasoning`)已由
25
- * onReasoningStream/onReasoningEnd 覆盖,同一条目 start/end 各触发一次,禁止重复投递。
26
- */
27
- export declare function resolveItemEventGuard(p: ItemEventPayload): ItemEventGuardResult;
28
- //# sourceMappingURL=item-event-guard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-event-guard.d.ts","sourceRoot":"","sources":["../../src/item-event-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAC1B;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,GAChD;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,gBAAgB,GAAG,oBAAoB,CAU/E"}
@@ -1,22 +0,0 @@
1
- /**
2
- * `onItemEvent` 条目过滤:已由专用回调覆盖的条目(工具、Reasoning)不再进入
3
- * RUN_EVENT 兜底,避免把内部诊断标识 `unmapped:*` 展示给最终用户。
4
- */
5
- /**
6
- * 判断 `onItemEvent` 条目是否应被抑制:
7
- * - 工具类(`toolCallId` 或 `kind=tool`)已由 onToolStart/onToolResult 覆盖;
8
- * - Reasoning 条目(`kind=analysis` 且 `title=reasoning`)已由
9
- * onReasoningStream/onReasoningEnd 覆盖,同一条目 start/end 各触发一次,禁止重复投递。
10
- */
11
- export function resolveItemEventGuard(p) {
12
- if (p.toolCallId || p.kind === "tool") {
13
- return { suppress: true, reason: "tool" };
14
- }
15
- const kind = String(p.kind ?? "").trim().toLowerCase();
16
- const title = String(p.title ?? "").trim().toLowerCase();
17
- if (kind === "analysis" && title === "reasoning") {
18
- return { suppress: true, reason: "reasoning" };
19
- }
20
- return { suppress: false, kind, title };
21
- }
22
- //# sourceMappingURL=item-event-guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-event-guard.js","sourceRoot":"","sources":["../../src/item-event-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,CAAmB;IACrD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACpC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzD,IAAI,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=item-event-guard.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-event-guard.test.d.ts","sourceRoot":"","sources":["../../src/item-event-guard.test.ts"],"names":[],"mappings":""}
@@ -1,55 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { describe, it } from "node:test";
3
- import { resolveItemEventGuard } from "./item-event-guard.js";
4
- describe("item-event-guard", () => {
5
- it("suppresses reasoning item start (phase=start)", () => {
6
- const r = resolveItemEventGuard({
7
- kind: "analysis",
8
- title: "Reasoning",
9
- phase: "start",
10
- status: "running",
11
- });
12
- assert.equal(r.suppress, true);
13
- assert.equal(r.reason, "reasoning");
14
- });
15
- it("suppresses reasoning item end (phase=end)", () => {
16
- const r = resolveItemEventGuard({
17
- kind: "analysis",
18
- title: "Reasoning",
19
- phase: "end",
20
- status: "completed",
21
- });
22
- assert.equal(r.suppress, true);
23
- assert.equal(r.reason, "reasoning");
24
- });
25
- it("suppresses tool-call items even when title is reasoning", () => {
26
- const r = resolveItemEventGuard({
27
- toolCallId: "call_123",
28
- kind: "analysis",
29
- title: "Reasoning",
30
- });
31
- assert.equal(r.suppress, true);
32
- assert.equal(r.reason, "tool");
33
- });
34
- it("suppresses kind=tool items", () => {
35
- const r = resolveItemEventGuard({ kind: "tool", title: "Web search" });
36
- assert.equal(r.suppress, true);
37
- assert.equal(r.reason, "tool");
38
- });
39
- it("matches reasoning case-insensitively with surrounding whitespace", () => {
40
- const r = resolveItemEventGuard({ kind: " ANALYSIS ", title: " reasoning " });
41
- assert.equal(r.suppress, true);
42
- });
43
- it("keeps supported user-facing progress events (not suppressed)", () => {
44
- const r = resolveItemEventGuard({
45
- kind: "search",
46
- title: "Web search",
47
- phase: "start",
48
- status: "running",
49
- });
50
- assert.equal(r.suppress, false);
51
- assert.equal(r.kind, "search");
52
- assert.equal(r.title, "web search");
53
- });
54
- });
55
- //# sourceMappingURL=item-event-guard.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-event-guard.test.js","sourceRoot":"","sources":["../../src/item-event-guard.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,GAAG,qBAAqB,CAAC;YAC5B,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,SAAS;SACpB,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,qBAAqB,CAAC;YAC5B,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,WAAW;SACtB,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,qBAAqB,CAAC;YAC5B,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,WAAW;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,qBAAqB,CAAC;YAC5B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,SAAS;SACpB,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { XgImConfig } from "./types.js";
2
- /**
3
- * 当前没有显式配置 NAS 站点时使用的站点编码。
4
- *
5
- * 站点编码是给 IM 客户端和后续下载路由使用的稳定业务标识,不是主机名、IP、URL,
6
- * 也不能用于推导或暴露 NAS 的宿主机真实挂载路径。
7
- */
8
- export declare const DEFAULT_NAS_SITE_CODE = "SZ_PRIMARY";
9
- /**
10
- * 读取当前 OpenClaw 服务所挂载 NAS 的站点编码。
11
- *
12
- * 配置路径:channels.xg_cwork_im.nasSiteCode
13
- * 未配置时:SZ_PRIMARY
14
- */
15
- export declare function resolveNasSiteCode(config: Pick<XgImConfig, "nasSiteCode">): string;
16
- //# sourceMappingURL=nas-site.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nas-site.d.ts","sourceRoot":"","sources":["../../src/nas-site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,MAAM,CAElF"}
@@ -1,17 +0,0 @@
1
- /**
2
- * 当前没有显式配置 NAS 站点时使用的站点编码。
3
- *
4
- * 站点编码是给 IM 客户端和后续下载路由使用的稳定业务标识,不是主机名、IP、URL,
5
- * 也不能用于推导或暴露 NAS 的宿主机真实挂载路径。
6
- */
7
- export const DEFAULT_NAS_SITE_CODE = "SZ_PRIMARY";
8
- /**
9
- * 读取当前 OpenClaw 服务所挂载 NAS 的站点编码。
10
- *
11
- * 配置路径:channels.xg_cwork_im.nasSiteCode
12
- * 未配置时:SZ_PRIMARY
13
- */
14
- export function resolveNasSiteCode(config) {
15
- return config.nasSiteCode?.trim() || DEFAULT_NAS_SITE_CODE;
16
- }
17
- //# sourceMappingURL=nas-site.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nas-site.js","sourceRoot":"","sources":["../../src/nas-site.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAuC;IACtE,OAAO,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,qBAAqB,CAAC;AAC/D,CAAC"}
@@ -1,53 +0,0 @@
1
- /**
2
- * 会话级 NAS 目录声明:路径规范化、安全校验、幂等指纹与 OpenClaw sandbox bind 注入。
3
- */
4
- import type { OpenClawConfig } from "openclaw/plugin-sdk/core";
5
- import type { NasVolume } from "./agent-context-types.js";
6
- import type { XgImConfig } from "./types.js";
7
- export interface NormalizedNasVolume {
8
- /** 已解析软链接后的宿主机真实目录。 */
9
- realDir: string;
10
- /** 相对 Agent workspace 的 POSIX 路径。 */
11
- dockerDir: string;
12
- /** 容器内绝对路径。 */
13
- sandboxDir: string;
14
- mode: "ro" | "rw";
15
- }
16
- /** 将 IM 的 dockerDir 规范为不带 /workspace 前缀的 workspace 相对路径。 */
17
- export declare function normalizeNasDockerDir(raw: string): string;
18
- export declare function nasVolumeSandboxDir(dockerDir: string): string;
19
- /** Prompt 使用的轻量规范化;真实路径与白名单在 dispatch 前再次校验。 */
20
- export declare function normalizeNasVolumesForPrompt(volumes: NasVolume[] | undefined): Array<{
21
- dockerDir: string;
22
- sandboxDir: string;
23
- mode: "ro" | "rw";
24
- }>;
25
- /**
26
- * 将 IM 下发的 NAS 逻辑目录解析为当前宿主机上的真实目录,仅用于目录浏览和文件读取。
27
- *
28
- * 与会话 sandbox bind 的解析不同,本方法绝不会创建缺失目录:工作区浏览只能反映磁盘
29
- * 当前状态,不能因为一次查询而改变 NAS 内容。返回前会解析符号链接并再次确认目标仍在
30
- * 配置的 hostRoot 内。
31
- */
32
- export declare function resolveNasVolumeHostDirectoryForRead(rawDir: string, config: XgImConfig): Promise<string>;
33
- export declare function validateAndNormalizeNasVolumes(volumes: NasVolume[], config: XgImConfig): NormalizedNasVolume[];
34
- export declare function nasVolumeSpecHash(volumes: NormalizedNasVolume[]): string;
35
- /**
36
- * 将本会话期望的 NAS mounts 注入本轮 cfg,并产出 published runtime 所需的 configOverride。
37
- * 重复传入相同声明是幂等的;同一 session 改绑则拒绝。
38
- */
39
- export declare function resolveNasVolumeDispatchConfig(args: {
40
- cfg: OpenClawConfig;
41
- config: XgImConfig;
42
- agentId: string;
43
- sessionKey: string;
44
- volumes?: NasVolume[];
45
- }): {
46
- cfg: OpenClawConfig;
47
- configOverride?: OpenClawConfig;
48
- specHash?: string;
49
- reused: boolean;
50
- };
51
- /** 测试与 Gateway 停止时使用。 */
52
- export declare function clearSessionNasVolumeStates(): void;
53
- //# sourceMappingURL=nas-volumes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nas-volumes.d.ts","sourceRoot":"","sources":["../../src/nas-volumes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,MAAM,WAAW,mBAAmB;IAChC,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACrB;AAqED,4DAA4D;AAC5D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBzD;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,gDAAgD;AAChD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,KAAK,CAAC;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACrB,CAAC,CAMD;AAiGD;;;;;;GAMG;AACH,wBAAsB,oCAAoC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA+D9G;AAcD,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,SAAS,EAAE,EACpB,MAAM,EAAE,UAAU,GACnB,mBAAmB,EAAE,CAcvB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAKxE;AAuGD;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACjD,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACzB,GAAG;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CA2C/F;AAED,yBAAyB;AACzB,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD"}
@@ -1,417 +0,0 @@
1
- /**
2
- * 会话级 NAS 目录声明:路径规范化、安全校验、幂等指纹与 OpenClaw sandbox bind 注入。
3
- */
4
- import { createHash } from "node:crypto";
5
- import { existsSync, mkdirSync, realpathSync, statSync } from "node:fs";
6
- import { realpath, stat } from "node:fs/promises";
7
- import path from "node:path";
8
- import { getSharedMap } from "./process-shared-store.js";
9
- const SANDBOX_WORKSPACE_ROOT = "/workspace";
10
- /** 缓存仅用于短期复用同一会话声明;硬上限防止长期运行时随历史会话无限增长。 */
11
- const SESSION_NAS_VOLUME_STATE_MAX_ENTRIES = 2_000;
12
- const SESSION_NAS_VOLUME_STATE_TTL_MS = 2 * 60 * 60 * 1_000;
13
- const SESSION_NAS_VOLUME_STATE_PRUNE_INTERVAL_MS = 60 * 1_000;
14
- const sessionVolumeStates = getSharedMap("nas-volume-states");
15
- let lastSessionVolumeStatePruneAt = 0;
16
- function pruneSessionNasVolumeStates(now, force = false) {
17
- if (!force &&
18
- sessionVolumeStates.size <= SESSION_NAS_VOLUME_STATE_MAX_ENTRIES &&
19
- now - lastSessionVolumeStatePruneAt < SESSION_NAS_VOLUME_STATE_PRUNE_INTERVAL_MS) {
20
- return;
21
- }
22
- lastSessionVolumeStatePruneAt = now;
23
- for (const [key, state] of sessionVolumeStates) {
24
- if (now - state.lastSeenAt >= SESSION_NAS_VOLUME_STATE_TTL_MS) {
25
- sessionVolumeStates.delete(key);
26
- }
27
- }
28
- while (sessionVolumeStates.size > SESSION_NAS_VOLUME_STATE_MAX_ENTRIES) {
29
- const oldestKey = sessionVolumeStates.keys().next().value;
30
- if (oldestKey == null)
31
- break;
32
- sessionVolumeStates.delete(oldestKey);
33
- }
34
- }
35
- function isInsideOrEqual(root, target) {
36
- const relative = path.relative(root, target);
37
- return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
38
- }
39
- function bindContainerTarget(bind) {
40
- const parts = bind.split(":");
41
- for (let index = parts.length - 1; index >= 0; index -= 1) {
42
- const candidate = parts[index].trim().replace(/\\/g, "/");
43
- if (candidate.startsWith("/"))
44
- return path.posix.normalize(candidate);
45
- }
46
- return undefined;
47
- }
48
- function assertNoExistingBindTargetConflicts(existingBinds, incomingBinds) {
49
- for (const incoming of incomingBinds) {
50
- const incomingTarget = bindContainerTarget(incoming);
51
- if (!incomingTarget)
52
- continue;
53
- for (const existing of existingBinds) {
54
- if (existing === incoming)
55
- continue;
56
- const existingTarget = bindContainerTarget(existing);
57
- if (!existingTarget)
58
- continue;
59
- if (incomingTarget === existingTarget ||
60
- incomingTarget.startsWith(`${existingTarget}/`) ||
61
- existingTarget.startsWith(`${incomingTarget}/`)) {
62
- throw new Error(`NAS_VOLUME_TARGET_CONFLICT: dockerDir 与已有 sandbox bind 目标冲突: ${incomingTarget}, ${existingTarget}`);
63
- }
64
- }
65
- }
66
- }
67
- /** 将 IM 的 dockerDir 规范为不带 /workspace 前缀的 workspace 相对路径。 */
68
- export function normalizeNasDockerDir(raw) {
69
- let value = raw.trim().replace(/\\/g, "/");
70
- if (value === "/workspace" || value === "/workspace/") {
71
- throw new Error("nasVolumes.dockerDir 不能指向 workspace 根目录");
72
- }
73
- if (value.startsWith("/workspace/"))
74
- value = value.slice("/workspace/".length);
75
- while (value.startsWith("./"))
76
- value = value.slice(2);
77
- while (value.startsWith("/"))
78
- value = value.slice(1);
79
- value = value.replace(/\/+$/, "");
80
- if (!value)
81
- throw new Error("nasVolumes.dockerDir 不能为空");
82
- const parts = value.split("/");
83
- for (const part of parts) {
84
- if (!part || part === "." || part === "..") {
85
- throw new Error(`nasVolumes.dockerDir 含非法路径段: ${raw}`);
86
- }
87
- if (/[\0-\x1f:*?"<>|]/.test(part)) {
88
- throw new Error(`nasVolumes.dockerDir 含非法字符: ${raw}`);
89
- }
90
- }
91
- return parts.join("/");
92
- }
93
- export function nasVolumeSandboxDir(dockerDir) {
94
- return `${SANDBOX_WORKSPACE_ROOT}/${normalizeNasDockerDir(dockerDir)}`;
95
- }
96
- /** Prompt 使用的轻量规范化;真实路径与白名单在 dispatch 前再次校验。 */
97
- export function normalizeNasVolumesForPrompt(volumes) {
98
- if (!volumes?.length)
99
- return [];
100
- return volumes.map((volume) => {
101
- const dockerDir = normalizeNasDockerDir(volume.dockerDir);
102
- return { dockerDir, sandboxDir: nasVolumeSandboxDir(dockerDir), mode: volume.mode };
103
- });
104
- }
105
- function normalizeAllowedRoots(config) {
106
- const mappings = config.nasVolumeRootMappings ?? [];
107
- if (mappings.length === 0) {
108
- throw new Error("NAS_VOLUME_ROOTS_NOT_CONFIGURED: channels.xg_cwork_im.nasVolumeRootMappings 未配置");
109
- }
110
- return mappings.map((mapping) => {
111
- const logicalRoot = normalizeLogicalRoot(mapping.logicalRoot);
112
- const hostRoot = mapping.hostRoot.trim();
113
- if (!path.isAbsolute(hostRoot)) {
114
- throw new Error(`NAS_VOLUME_ROOT_INVALID: hostRoot 必须是宿主机绝对路径: ${hostRoot}`);
115
- }
116
- const configuredRoot = path.resolve(hostRoot);
117
- const realRoot = realpathSync(configuredRoot);
118
- if (!statSync(realRoot).isDirectory()) {
119
- throw new Error(`NAS_VOLUME_ROOT_INVALID: hostRoot 不是目录: ${hostRoot}`);
120
- }
121
- return { logicalRoot, configuredRoot, realRoot };
122
- }).sort((left, right) => right.logicalRoot.length - left.logicalRoot.length);
123
- }
124
- function normalizeLogicalRoot(raw) {
125
- const value = raw.trim().replace(/\\/g, "/");
126
- if (!value.startsWith("/")) {
127
- throw new Error(`NAS_VOLUME_ROOT_INVALID: logicalRoot 必须是绝对逻辑路径: ${raw}`);
128
- }
129
- const normalized = path.posix.normalize(value).replace(/\/+$/, "") || "/";
130
- if (normalized === "/") {
131
- throw new Error("NAS_VOLUME_ROOT_INVALID: logicalRoot 不能是根目录 /");
132
- }
133
- return normalized;
134
- }
135
- function nearestExistingAncestor(target) {
136
- let current = target;
137
- while (!existsSync(current)) {
138
- const parent = path.dirname(current);
139
- if (parent === current)
140
- break;
141
- current = parent;
142
- }
143
- return current;
144
- }
145
- /**
146
- * 业务目录允许按需创建,但创建前后都必须确认路径仍位于已存在的白名单根内。
147
- */
148
- function ensureNasSourceDirectory(rawDir, allowedRoots) {
149
- const logicalDir = path.posix.normalize(rawDir.trim().replace(/\\/g, "/"));
150
- if (!logicalDir.startsWith("/")) {
151
- throw new Error(`NAS_VOLUME_SOURCE_INVALID: realDir 必须是绝对逻辑路径: ${rawDir}`);
152
- }
153
- const allowed = allowedRoots.find((root) => logicalDir !== root.logicalRoot && logicalDir.startsWith(`${root.logicalRoot}/`));
154
- if (!allowed) {
155
- throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 未匹配允许的 logicalRoot: ${rawDir}`);
156
- }
157
- const target = path.resolve(allowed.configuredRoot, ...path.posix.relative(allowed.logicalRoot, logicalDir).split("/"));
158
- if (!isInsideOrEqual(allowed.configuredRoot, target) || target === allowed.configuredRoot) {
159
- throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 越出映射根目录: ${rawDir}`);
160
- }
161
- if (!existsSync(target)) {
162
- const existingAncestor = realpathSync(nearestExistingAncestor(target));
163
- if (!isInsideOrEqual(allowed.realRoot, existingAncestor)) {
164
- throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 的父目录越出允许根: ${rawDir}`);
165
- }
166
- mkdirSync(target, { recursive: true });
167
- }
168
- const realDir = realpathSync(target);
169
- if (realDir === allowed.realRoot || !isInsideOrEqual(allowed.realRoot, realDir)) {
170
- throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 不在允许根的业务子目录内: ${rawDir}`);
171
- }
172
- if (!statSync(realDir).isDirectory()) {
173
- throw new Error(`NAS_VOLUME_SOURCE_INVALID: realDir 不是目录: ${rawDir}`);
174
- }
175
- const colonIndex = realDir.indexOf(":");
176
- const isWindowsDrivePrefix = process.platform === "win32" && colonIndex === 1 && /^[A-Za-z]:[\\/]/.test(realDir);
177
- if (colonIndex >= 0 && !isWindowsDrivePrefix) {
178
- throw new Error(`NAS_VOLUME_SOURCE_INVALID: realDir 含 Docker bind 不支持的冒号: ${rawDir}`);
179
- }
180
- return realDir;
181
- }
182
- /**
183
- * 将 IM 下发的 NAS 逻辑目录解析为当前宿主机上的真实目录,仅用于目录浏览和文件读取。
184
- *
185
- * 与会话 sandbox bind 的解析不同,本方法绝不会创建缺失目录:工作区浏览只能反映磁盘
186
- * 当前状态,不能因为一次查询而改变 NAS 内容。返回前会解析符号链接并再次确认目标仍在
187
- * 配置的 hostRoot 内。
188
- */
189
- export async function resolveNasVolumeHostDirectoryForRead(rawDir, config) {
190
- const mappings = config.nasVolumeRootMappings ?? [];
191
- if (mappings.length === 0) {
192
- throw new Error("NAS_VOLUME_ROOTS_NOT_CONFIGURED: channels.xg_cwork_im.nasVolumeRootMappings 未配置");
193
- }
194
- const logicalDir = path.posix.normalize(rawDir.trim().replace(/\\/g, "/"));
195
- if (!logicalDir.startsWith("/")) {
196
- throw new Error(`NAS_VOLUME_SOURCE_INVALID: realDir 必须是绝对逻辑路径: ${rawDir}`);
197
- }
198
- // 只选择当前 realDir 命中的最长逻辑根;其他站点未挂载时不应阻断本次读取。
199
- const matched = mappings
200
- .map((mapping) => {
201
- try {
202
- return { mapping, logicalRoot: normalizeLogicalRoot(mapping.logicalRoot) };
203
- }
204
- catch {
205
- return undefined;
206
- }
207
- })
208
- .filter((item) => Boolean(item))
209
- .filter((item) => logicalDir === item.logicalRoot || logicalDir.startsWith(`${item.logicalRoot}/`))
210
- .sort((left, right) => right.logicalRoot.length - left.logicalRoot.length)[0];
211
- if (!matched) {
212
- throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 未匹配允许的 logicalRoot: ${rawDir}`);
213
- }
214
- const hostRoot = matched.mapping.hostRoot.trim();
215
- if (!path.isAbsolute(hostRoot)) {
216
- throw new Error(`NAS_VOLUME_ROOT_INVALID: hostRoot 必须是宿主机绝对路径: ${hostRoot}`);
217
- }
218
- const configuredRoot = path.resolve(hostRoot);
219
- const realRoot = await realpath(configuredRoot);
220
- if (!(await stat(realRoot)).isDirectory()) {
221
- throw new Error(`NAS_VOLUME_ROOT_INVALID: hostRoot 不是目录: ${hostRoot}`);
222
- }
223
- const allowed = {
224
- logicalRoot: matched.logicalRoot,
225
- configuredRoot,
226
- realRoot,
227
- };
228
- const target = path.resolve(allowed.configuredRoot, ...path.posix.relative(allowed.logicalRoot, logicalDir).split("/"));
229
- if (!isInsideOrEqual(allowed.configuredRoot, target)) {
230
- throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 越出映射根目录: ${rawDir}`);
231
- }
232
- let realDir;
233
- try {
234
- realDir = await realpath(target);
235
- }
236
- catch {
237
- throw new Error(`NAS_VOLUME_SOURCE_NOT_FOUND: realDir 对应目录不存在: ${rawDir}`);
238
- }
239
- if (!isInsideOrEqual(allowed.realRoot, realDir)) {
240
- throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 不在允许根的业务子目录内: ${rawDir}`);
241
- }
242
- if (!(await stat(realDir)).isDirectory()) {
243
- throw new Error(`NAS_VOLUME_SOURCE_INVALID: realDir 不是目录: ${rawDir}`);
244
- }
245
- return realDir;
246
- }
247
- function assertNonOverlappingTargets(volumes) {
248
- for (let i = 0; i < volumes.length; i += 1) {
249
- for (let j = i + 1; j < volumes.length; j += 1) {
250
- const left = volumes[i].dockerDir;
251
- const right = volumes[j].dockerDir;
252
- if (left === right || left.startsWith(`${right}/`) || right.startsWith(`${left}/`)) {
253
- throw new Error(`NAS_VOLUME_TARGET_CONFLICT: dockerDir 不能重复或嵌套: ${left}, ${right}`);
254
- }
255
- }
256
- }
257
- }
258
- export function validateAndNormalizeNasVolumes(volumes, config) {
259
- const allowedRoots = normalizeAllowedRoots(config);
260
- const normalized = volumes.map((volume) => {
261
- const realDir = ensureNasSourceDirectory(volume.realDir.trim(), allowedRoots);
262
- const dockerDir = normalizeNasDockerDir(volume.dockerDir);
263
- return {
264
- realDir,
265
- dockerDir,
266
- sandboxDir: nasVolumeSandboxDir(dockerDir),
267
- mode: volume.mode,
268
- };
269
- });
270
- assertNonOverlappingTargets(normalized);
271
- return normalized;
272
- }
273
- export function nasVolumeSpecHash(volumes) {
274
- const stable = [...volumes]
275
- .sort((left, right) => left.dockerDir.localeCompare(right.dockerDir))
276
- .map(({ realDir, dockerDir, mode }) => ({ realDir, dockerDir, mode }));
277
- return createHash("sha256").update(JSON.stringify(stable)).digest("hex");
278
- }
279
- function readStringBinds(docker) {
280
- return Array.isArray(docker?.binds)
281
- ? docker.binds.filter((entry) => typeof entry === "string")
282
- : [];
283
- }
284
- function agentEntryRecord(agents, agentId) {
285
- const entries = agents.entries;
286
- if (!entries || typeof entries !== "object" || Array.isArray(entries))
287
- return undefined;
288
- const entry = entries[agentId];
289
- if (!entry || typeof entry !== "object" || Array.isArray(entry))
290
- return undefined;
291
- return entry;
292
- }
293
- function effectiveSandboxScope(cfg, agentId) {
294
- const agents = cfg.agents;
295
- const defaults = agents?.defaults;
296
- const defaultSandbox = defaults?.sandbox;
297
- const entry = agents ? agentEntryRecord(agents, agentId) : undefined;
298
- const agentSandbox = entry?.sandbox;
299
- return agentSandbox?.scope ?? defaultSandbox?.scope;
300
- }
301
- /**
302
- * 将 NAS binds 写入 agents.entries[agentId].sandbox.docker(OpenClaw 2026.9.3+)。
303
- * 同时产出供 published runtime 使用的最小 configOverride(applyMergePatch 对数组整段替换,
304
- * 因此 binds 必须是「已有 + NAS」合并结果)。
305
- */
306
- function injectDockerBinds(cfg, agentId, binds) {
307
- const cfgRecord = cfg;
308
- const agents = cfgRecord.agents ?? {};
309
- const defaults = agents.defaults ?? {};
310
- const defaultSandbox = defaults.sandbox ?? {};
311
- const defaultDocker = defaultSandbox.docker ?? {};
312
- const entriesRaw = agents.entries && typeof agents.entries === "object" && !Array.isArray(agents.entries)
313
- ? agents.entries
314
- : {};
315
- const existingEntry = agentEntryRecord(agents, agentId) ?? {};
316
- const entrySandbox = existingEntry.sandbox ?? {};
317
- const entryDocker = entrySandbox.docker ?? {};
318
- const defaultBinds = readStringBinds(defaultDocker);
319
- const entryBinds = readStringBinds(entryDocker);
320
- // 最终 sandbox binds = defaults ∪ entry;冲突检测必须覆盖两侧。
321
- assertNoExistingBindTargetConflicts([...defaultBinds, ...entryBinds], binds);
322
- const mergedEntryBinds = [...new Set([...entryBinds, ...binds])];
323
- // 仅改挂载相关字段;不要把 image/network/env 等一并打进 override,
324
- // 否则 applyMergePatch 会用请求快照覆盖 published runtime 里可能更新过的值。
325
- const nasDockerPatch = {
326
- binds: mergedEntryBinds,
327
- // OpenClaw 默认禁止 workspace 子路径和 workspace 外来源;本插件已在上方执行真实路径白名单校验。
328
- dangerouslyAllowExternalBindSources: true,
329
- dangerouslyAllowReservedContainerTargets: true,
330
- };
331
- const nextDocker = {
332
- ...entryDocker,
333
- ...nasDockerPatch,
334
- };
335
- const nextEntry = {
336
- ...existingEntry,
337
- sandbox: {
338
- ...entrySandbox,
339
- docker: nextDocker,
340
- },
341
- };
342
- const nextCfg = {
343
- ...cfgRecord,
344
- agents: {
345
- ...agents,
346
- entries: {
347
- ...entriesRaw,
348
- [agentId]: nextEntry,
349
- },
350
- },
351
- };
352
- // published runtime 只吃 configOverride;只 patch binds/安全开关。
353
- const configOverride = {
354
- agents: {
355
- entries: {
356
- [agentId]: {
357
- sandbox: {
358
- docker: nasDockerPatch,
359
- },
360
- },
361
- },
362
- },
363
- };
364
- return { cfg: nextCfg, configOverride };
365
- }
366
- /**
367
- * 将本会话期望的 NAS mounts 注入本轮 cfg,并产出 published runtime 所需的 configOverride。
368
- * 重复传入相同声明是幂等的;同一 session 改绑则拒绝。
369
- */
370
- export function resolveNasVolumeDispatchConfig(args) {
371
- const stateKey = `${args.agentId}\0${args.sessionKey}`;
372
- const now = Date.now();
373
- pruneSessionNasVolumeStates(now);
374
- let prior = sessionVolumeStates.get(stateKey);
375
- if (prior && now - prior.lastSeenAt >= SESSION_NAS_VOLUME_STATE_TTL_MS) {
376
- sessionVolumeStates.delete(stateKey);
377
- prior = undefined;
378
- }
379
- let binds;
380
- let specHash;
381
- if (args.volumes?.length) {
382
- const normalized = validateAndNormalizeNasVolumes(args.volumes, args.config);
383
- specHash = nasVolumeSpecHash(normalized);
384
- binds = normalized.map((volume) => `${volume.realDir}:${volume.sandboxDir}:${volume.mode}`);
385
- if (prior && prior.specHash !== specHash) {
386
- throw new Error("NAS_VOLUME_SESSION_CONFLICT: 当前会话已绑定另一组 NAS 目录,请创建新会话");
387
- }
388
- }
389
- else if (prior) {
390
- binds = prior.binds;
391
- specHash = prior.specHash;
392
- }
393
- else {
394
- return { cfg: args.cfg, reused: false };
395
- }
396
- if (effectiveSandboxScope(args.cfg, args.agentId) !== "session") {
397
- throw new Error("NAS_VOLUME_SANDBOX_SCOPE_INVALID: NAS 挂载要求 sandbox.scope=session");
398
- }
399
- // 先完成无状态的配置注入与冲突校验,失败时不得污染会话缓存。
400
- const injected = injectDockerBinds(args.cfg, args.agentId, binds);
401
- // delete + set 让 Map 插入顺序同时承担 LRU 顺序;达到硬上限时淘汰最久未使用项。
402
- sessionVolumeStates.delete(stateKey);
403
- sessionVolumeStates.set(stateKey, { specHash, binds, lastSeenAt: now });
404
- pruneSessionNasVolumeStates(now, sessionVolumeStates.size > SESSION_NAS_VOLUME_STATE_MAX_ENTRIES);
405
- return {
406
- cfg: injected.cfg,
407
- configOverride: injected.configOverride,
408
- specHash,
409
- reused: prior?.specHash === specHash,
410
- };
411
- }
412
- /** 测试与 Gateway 停止时使用。 */
413
- export function clearSessionNasVolumeStates() {
414
- sessionVolumeStates.clear();
415
- lastSessionVolumeStatePruneAt = 0;
416
- }
417
- //# sourceMappingURL=nas-volumes.js.map