@xgjktech/xg_cwork_im 1.19.26 → 1.19.27
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.
- package/README.md +489 -490
- package/dist/index.js +1 -1
- package/dist/src/account-connection.d.ts +37 -0
- package/dist/src/account-connection.d.ts.map +1 -0
- package/dist/src/account-connection.js +548 -0
- package/dist/src/account-connection.js.map +1 -0
- package/dist/src/account-reconciler.d.ts +64 -0
- package/dist/src/account-reconciler.d.ts.map +1 -0
- package/dist/src/account-reconciler.js +314 -0
- package/dist/src/account-reconciler.js.map +1 -0
- package/dist/src/account-reconciler.test.d.ts +2 -0
- package/dist/src/account-reconciler.test.d.ts.map +1 -0
- package/dist/src/account-reconciler.test.js +166 -0
- package/dist/src/account-reconciler.test.js.map +1 -0
- package/dist/src/action-run-event.d.ts +20 -0
- package/dist/src/action-run-event.d.ts.map +1 -0
- package/dist/src/action-run-event.js +62 -0
- package/dist/src/action-run-event.js.map +1 -0
- package/dist/src/action-run-event.test.d.ts +2 -0
- package/dist/src/action-run-event.test.d.ts.map +1 -0
- package/dist/src/action-run-event.test.js +83 -0
- package/dist/src/action-run-event.test.js.map +1 -0
- package/dist/src/action-store-access.d.ts +29 -0
- package/dist/src/action-store-access.d.ts.map +1 -0
- package/dist/src/action-store-access.js +81 -0
- package/dist/src/action-store-access.js.map +1 -0
- package/dist/src/action-store-lifecycle.test.d.ts +2 -0
- package/dist/src/action-store-lifecycle.test.d.ts.map +1 -0
- package/dist/src/action-store-lifecycle.test.js +195 -0
- package/dist/src/action-store-lifecycle.test.js.map +1 -0
- package/dist/src/active-cron-context-store.d.ts +20 -0
- package/dist/src/active-cron-context-store.d.ts.map +1 -0
- package/dist/src/active-cron-context-store.js +73 -0
- package/dist/src/active-cron-context-store.js.map +1 -0
- package/dist/src/active-round-registry.d.ts +35 -0
- package/dist/src/active-round-registry.d.ts.map +1 -0
- package/dist/src/active-round-registry.js +85 -0
- package/dist/src/active-round-registry.js.map +1 -0
- package/dist/src/active-round-registry.test.d.ts +2 -0
- package/dist/src/active-round-registry.test.d.ts.map +1 -0
- package/dist/src/active-round-registry.test.js +62 -0
- package/dist/src/active-round-registry.test.js.map +1 -0
- package/dist/src/agent-context-types.d.ts +205 -0
- package/dist/src/agent-context-types.d.ts.map +1 -0
- package/dist/src/agent-context-types.js +132 -0
- package/dist/src/agent-context-types.js.map +1 -0
- package/dist/src/agent-context-types.test.d.ts +2 -0
- package/dist/src/agent-context-types.test.d.ts.map +1 -0
- package/dist/src/agent-context-types.test.js +123 -0
- package/dist/src/agent-context-types.test.js.map +1 -0
- package/dist/src/agent-stream-client-registry.d.ts +8 -0
- package/dist/src/agent-stream-client-registry.d.ts.map +1 -0
- package/dist/src/agent-stream-client-registry.js +19 -0
- package/dist/src/agent-stream-client-registry.js.map +1 -0
- package/dist/src/apply-sync-mapping.d.ts +15 -0
- package/dist/src/apply-sync-mapping.d.ts.map +1 -0
- package/dist/src/apply-sync-mapping.js +98 -0
- package/dist/src/apply-sync-mapping.js.map +1 -0
- package/dist/src/assistant-item-delivery.d.ts +27 -0
- package/dist/src/assistant-item-delivery.d.ts.map +1 -0
- package/dist/src/assistant-item-delivery.js +134 -0
- package/dist/src/assistant-item-delivery.js.map +1 -0
- package/dist/src/assistant-item-delivery.test.d.ts +2 -0
- package/dist/src/assistant-item-delivery.test.d.ts.map +1 -0
- package/dist/src/assistant-item-delivery.test.js +116 -0
- package/dist/src/assistant-item-delivery.test.js.map +1 -0
- package/dist/src/assistant-item-sink.d.ts +17 -0
- package/dist/src/assistant-item-sink.d.ts.map +1 -0
- package/dist/src/assistant-item-sink.js +34 -0
- package/dist/src/assistant-item-sink.js.map +1 -0
- package/dist/src/auth.d.ts +32 -0
- package/dist/src/auth.d.ts.map +1 -0
- package/dist/src/auth.js +70 -0
- package/dist/src/auth.js.map +1 -0
- package/dist/src/auto-model-router.d.ts +36 -0
- package/dist/src/auto-model-router.d.ts.map +1 -0
- package/dist/src/auto-model-router.js +60 -0
- package/dist/src/auto-model-router.js.map +1 -0
- package/dist/src/auto-model-router.test.d.ts +2 -0
- package/dist/src/auto-model-router.test.d.ts.map +1 -0
- package/dist/src/auto-model-router.test.js +99 -0
- package/dist/src/auto-model-router.test.js.map +1 -0
- package/dist/src/block-streaming-config.test.d.ts +2 -0
- package/dist/src/block-streaming-config.test.d.ts.map +1 -0
- package/dist/src/block-streaming-config.test.js +91 -0
- package/dist/src/block-streaming-config.test.js.map +1 -0
- package/dist/src/build-project-prompt.d.ts +40 -0
- package/dist/src/build-project-prompt.d.ts.map +1 -0
- package/dist/src/build-project-prompt.js +183 -0
- package/dist/src/build-project-prompt.js.map +1 -0
- package/dist/src/build-project-prompt.test.d.ts +2 -0
- package/dist/src/build-project-prompt.test.d.ts.map +1 -0
- package/dist/src/build-project-prompt.test.js +100 -0
- package/dist/src/build-project-prompt.test.js.map +1 -0
- package/dist/src/channel-config.d.ts +716 -0
- package/dist/src/channel-config.d.ts.map +1 -0
- package/dist/src/channel-config.js +405 -0
- package/dist/src/channel-config.js.map +1 -0
- package/dist/src/channel-config.test.d.ts +2 -0
- package/dist/src/channel-config.test.d.ts.map +1 -0
- package/dist/src/channel-config.test.js +113 -0
- package/dist/src/channel-config.test.js.map +1 -0
- package/dist/src/channel-disabled-account.test.d.ts +2 -0
- package/dist/src/channel-disabled-account.test.d.ts.map +1 -0
- package/dist/src/channel-disabled-account.test.js +44 -0
- package/dist/src/channel-disabled-account.test.js.map +1 -0
- package/dist/src/channel-log.d.ts +17 -0
- package/dist/src/channel-log.d.ts.map +1 -0
- package/dist/src/channel-log.js +45 -0
- package/dist/src/channel-log.js.map +1 -0
- package/dist/src/channel.d.ts +17 -0
- package/dist/src/channel.d.ts.map +1 -0
- package/dist/src/channel.js +272 -0
- package/dist/src/channel.js.map +1 -0
- package/dist/src/connection/account-connection.d.ts.map +1 -1
- package/dist/src/connection/account-connection.js +0 -3
- package/dist/src/connection/account-connection.js.map +1 -1
- package/dist/src/connection/connection.d.ts +6 -0
- package/dist/src/connection/connection.d.ts.map +1 -1
- package/dist/src/connection/connection.js +6 -0
- package/dist/src/connection/connection.js.map +1 -1
- package/dist/src/connection/connection.test.js +17 -1
- package/dist/src/connection/connection.test.js.map +1 -1
- package/dist/src/connection-workspace-event.test.d.ts +2 -0
- package/dist/src/connection-workspace-event.test.d.ts.map +1 -0
- package/dist/src/connection-workspace-event.test.js +74 -0
- package/dist/src/connection-workspace-event.test.js.map +1 -0
- package/dist/src/connection.d.ts +110 -0
- package/dist/src/connection.d.ts.map +1 -0
- package/dist/src/connection.js +463 -0
- package/dist/src/connection.js.map +1 -0
- package/dist/src/connection.test.d.ts +2 -0
- package/dist/src/connection.test.d.ts.map +1 -0
- package/dist/src/connection.test.js +110 -0
- package/dist/src/connection.test.js.map +1 -0
- package/dist/src/cron-appkey-binding-store.d.ts +29 -0
- package/dist/src/cron-appkey-binding-store.d.ts.map +1 -0
- package/dist/src/cron-appkey-binding-store.js +239 -0
- package/dist/src/cron-appkey-binding-store.js.map +1 -0
- package/dist/src/cron-appkey-binding-store.test.d.ts +2 -0
- package/dist/src/cron-appkey-binding-store.test.d.ts.map +1 -0
- package/dist/src/cron-appkey-binding-store.test.js +387 -0
- package/dist/src/cron-appkey-binding-store.test.js.map +1 -0
- package/dist/src/deliver-text.d.ts +30 -0
- package/dist/src/deliver-text.d.ts.map +1 -0
- package/dist/src/deliver-text.js +88 -0
- package/dist/src/deliver-text.js.map +1 -0
- package/dist/src/deliver-text.test.d.ts +2 -0
- package/dist/src/deliver-text.test.d.ts.map +1 -0
- package/dist/src/deliver-text.test.js +117 -0
- package/dist/src/deliver-text.test.js.map +1 -0
- package/dist/src/delivery/compaction-notice-text.d.ts +12 -0
- package/dist/src/delivery/compaction-notice-text.d.ts.map +1 -0
- package/dist/src/delivery/compaction-notice-text.js +48 -0
- package/dist/src/delivery/compaction-notice-text.js.map +1 -0
- package/dist/src/delivery/compaction-notice-text.test.d.ts +2 -0
- package/dist/src/delivery/compaction-notice-text.test.d.ts.map +1 -0
- package/dist/src/delivery/compaction-notice-text.test.js +23 -0
- package/dist/src/delivery/compaction-notice-text.test.js.map +1 -0
- package/dist/src/dispatch-mentioned-reply.d.ts +47 -0
- package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -0
- package/dist/src/dispatch-mentioned-reply.js +997 -0
- package/dist/src/dispatch-mentioned-reply.js.map +1 -0
- package/dist/src/gateway-session-queue.d.ts +37 -0
- package/dist/src/gateway-session-queue.d.ts.map +1 -0
- package/dist/src/gateway-session-queue.js +86 -0
- package/dist/src/gateway-session-queue.js.map +1 -0
- package/dist/src/group-history-tool.d.ts +31 -0
- package/dist/src/group-history-tool.d.ts.map +1 -0
- package/dist/src/group-history-tool.js +177 -0
- package/dist/src/group-history-tool.js.map +1 -0
- package/dist/src/im-tool-progress.d.ts +4 -0
- package/dist/src/im-tool-progress.d.ts.map +1 -0
- package/dist/src/im-tool-progress.js +87 -0
- package/dist/src/im-tool-progress.js.map +1 -0
- package/dist/src/inbound/dispatch-mentioned-reply.d.ts.map +1 -1
- package/dist/src/inbound/dispatch-mentioned-reply.js +5 -3
- package/dist/src/inbound/dispatch-mentioned-reply.js.map +1 -1
- package/dist/src/inbound-archive.d.ts +4 -0
- package/dist/src/inbound-archive.d.ts.map +1 -0
- package/dist/src/inbound-archive.js +105 -0
- package/dist/src/inbound-archive.js.map +1 -0
- package/dist/src/inbound-attachment-meta.d.ts +13 -0
- package/dist/src/inbound-attachment-meta.d.ts.map +1 -0
- package/dist/src/inbound-attachment-meta.js +39 -0
- package/dist/src/inbound-attachment-meta.js.map +1 -0
- package/dist/src/inbound-chat-type.d.ts +33 -0
- package/dist/src/inbound-chat-type.d.ts.map +1 -0
- package/dist/src/inbound-chat-type.js +52 -0
- package/dist/src/inbound-chat-type.js.map +1 -0
- package/dist/src/inbound-display.d.ts +41 -0
- package/dist/src/inbound-display.d.ts.map +1 -0
- package/dist/src/inbound-display.js +170 -0
- package/dist/src/inbound-display.js.map +1 -0
- package/dist/src/inbound-file-download.d.ts +15 -0
- package/dist/src/inbound-file-download.d.ts.map +1 -0
- package/dist/src/inbound-file-download.js +48 -0
- package/dist/src/inbound-file-download.js.map +1 -0
- package/dist/src/inbound-input-media.d.ts +43 -0
- package/dist/src/inbound-input-media.d.ts.map +1 -0
- package/dist/src/inbound-input-media.js +230 -0
- package/dist/src/inbound-input-media.js.map +1 -0
- package/dist/src/inbound-media-local.d.ts +49 -0
- package/dist/src/inbound-media-local.d.ts.map +1 -0
- package/dist/src/inbound-media-local.js +194 -0
- package/dist/src/inbound-media-local.js.map +1 -0
- package/dist/src/inbound-model.d.ts +39 -0
- package/dist/src/inbound-model.d.ts.map +1 -0
- package/dist/src/inbound-model.js +66 -0
- package/dist/src/inbound-model.js.map +1 -0
- package/dist/src/inbound-model.test.d.ts +2 -0
- package/dist/src/inbound-model.test.d.ts.map +1 -0
- package/dist/src/inbound-model.test.js +88 -0
- package/dist/src/inbound-model.test.js.map +1 -0
- package/dist/src/inbound-terminal-delivery.d.ts +77 -0
- package/dist/src/inbound-terminal-delivery.d.ts.map +1 -0
- package/dist/src/inbound-terminal-delivery.js +251 -0
- package/dist/src/inbound-terminal-delivery.js.map +1 -0
- package/dist/src/inbound-terminal-state.d.ts +68 -0
- package/dist/src/inbound-terminal-state.d.ts.map +1 -0
- package/dist/src/inbound-terminal-state.js +185 -0
- package/dist/src/inbound-terminal-state.js.map +1 -0
- package/dist/src/inbound-terminal-state.test.d.ts +2 -0
- package/dist/src/inbound-terminal-state.test.d.ts.map +1 -0
- package/dist/src/inbound-terminal-state.test.js +224 -0
- package/dist/src/inbound-terminal-state.test.js.map +1 -0
- package/dist/src/interrupt-round.d.ts +9 -0
- package/dist/src/interrupt-round.d.ts.map +1 -0
- package/dist/src/interrupt-round.js +44 -0
- package/dist/src/interrupt-round.js.map +1 -0
- package/dist/src/interrupt-round.test.d.ts +2 -0
- package/dist/src/interrupt-round.test.d.ts.map +1 -0
- package/dist/src/interrupt-round.test.js +133 -0
- package/dist/src/interrupt-round.test.js.map +1 -0
- package/dist/src/item-event-guard.d.ts +28 -0
- package/dist/src/item-event-guard.d.ts.map +1 -0
- package/dist/src/item-event-guard.js +22 -0
- package/dist/src/item-event-guard.js.map +1 -0
- package/dist/src/item-event-guard.test.d.ts +2 -0
- package/dist/src/item-event-guard.test.d.ts.map +1 -0
- package/dist/src/item-event-guard.test.js +55 -0
- package/dist/src/item-event-guard.test.js.map +1 -0
- package/dist/src/nas-site.d.ts +16 -0
- package/dist/src/nas-site.d.ts.map +1 -0
- package/dist/src/nas-site.js +17 -0
- package/dist/src/nas-site.js.map +1 -0
- package/dist/src/nas-volumes.d.ts +53 -0
- package/dist/src/nas-volumes.d.ts.map +1 -0
- package/dist/src/nas-volumes.js +417 -0
- package/dist/src/nas-volumes.js.map +1 -0
- package/dist/src/nas-volumes.test.d.ts +2 -0
- package/dist/src/nas-volumes.test.d.ts.map +1 -0
- package/dist/src/nas-volumes.test.js +261 -0
- package/dist/src/nas-volumes.test.js.map +1 -0
- package/dist/src/per-message-fallback-notice.d.ts +43 -0
- package/dist/src/per-message-fallback-notice.d.ts.map +1 -0
- package/dist/src/per-message-fallback-notice.js +93 -0
- package/dist/src/per-message-fallback-notice.js.map +1 -0
- package/dist/src/per-message-fallback-notice.test.d.ts +2 -0
- package/dist/src/per-message-fallback-notice.test.d.ts.map +1 -0
- package/dist/src/per-message-fallback-notice.test.js +47 -0
- package/dist/src/per-message-fallback-notice.test.js.map +1 -0
- package/dist/src/per-message-model-pending.d.ts +52 -0
- package/dist/src/per-message-model-pending.d.ts.map +1 -0
- package/dist/src/per-message-model-pending.js +134 -0
- package/dist/src/per-message-model-pending.js.map +1 -0
- package/dist/src/plan/plan-core-adapter.d.ts +26 -1
- package/dist/src/plan/plan-core-adapter.d.ts.map +1 -1
- package/dist/src/plan/plan-core-adapter.js +67 -5
- package/dist/src/plan/plan-core-adapter.js.map +1 -1
- package/dist/src/plan/plan-core-adapter.test.js +76 -1
- package/dist/src/plan/plan-core-adapter.test.js.map +1 -1
- package/dist/src/plan/plan-stat-event.d.ts +2 -0
- package/dist/src/plan/plan-stat-event.d.ts.map +1 -1
- package/dist/src/plan/plan-stat-event.js +12 -2
- package/dist/src/plan/plan-stat-event.js.map +1 -1
- package/dist/src/plan-blocked-notice.d.ts +14 -0
- package/dist/src/plan-blocked-notice.d.ts.map +1 -0
- package/dist/src/plan-blocked-notice.js +41 -0
- package/dist/src/plan-blocked-notice.js.map +1 -0
- package/dist/src/plan-blocked-notice.test.d.ts +2 -0
- package/dist/src/plan-blocked-notice.test.d.ts.map +1 -0
- package/dist/src/plan-blocked-notice.test.js +96 -0
- package/dist/src/plan-blocked-notice.test.js.map +1 -0
- package/dist/src/plan-core-adapter.d.ts +54 -0
- package/dist/src/plan-core-adapter.d.ts.map +1 -0
- package/dist/src/plan-core-adapter.js +104 -0
- package/dist/src/plan-core-adapter.js.map +1 -0
- package/dist/src/plan-core-adapter.test.d.ts +2 -0
- package/dist/src/plan-core-adapter.test.d.ts.map +1 -0
- package/dist/src/plan-core-adapter.test.js +183 -0
- package/dist/src/plan-core-adapter.test.js.map +1 -0
- package/dist/src/plan-core-db.d.ts +22 -0
- package/dist/src/plan-core-db.d.ts.map +1 -0
- package/dist/src/plan-core-db.js +91 -0
- package/dist/src/plan-core-db.js.map +1 -0
- package/dist/src/plan-core-db.test.d.ts +2 -0
- package/dist/src/plan-core-db.test.d.ts.map +1 -0
- package/dist/src/plan-core-db.test.js +115 -0
- package/dist/src/plan-core-db.test.js.map +1 -0
- package/dist/src/plan-core-snapshot.d.ts +23 -0
- package/dist/src/plan-core-snapshot.d.ts.map +1 -0
- package/dist/src/plan-core-snapshot.js +66 -0
- package/dist/src/plan-core-snapshot.js.map +1 -0
- package/dist/src/plan-core-snapshot.test.d.ts +2 -0
- package/dist/src/plan-core-snapshot.test.d.ts.map +1 -0
- package/dist/src/plan-core-snapshot.test.js +157 -0
- package/dist/src/plan-core-snapshot.test.js.map +1 -0
- package/dist/src/plan-event-subscription.d.ts +36 -0
- package/dist/src/plan-event-subscription.d.ts.map +1 -0
- package/dist/src/plan-event-subscription.js +57 -0
- package/dist/src/plan-event-subscription.js.map +1 -0
- package/dist/src/plan-event-subscription.test.d.ts +2 -0
- package/dist/src/plan-event-subscription.test.d.ts.map +1 -0
- package/dist/src/plan-event-subscription.test.js +167 -0
- package/dist/src/plan-event-subscription.test.js.map +1 -0
- package/dist/src/plan-stat-event.d.ts +17 -0
- package/dist/src/plan-stat-event.d.ts.map +1 -0
- package/dist/src/plan-stat-event.js +41 -0
- package/dist/src/plan-stat-event.js.map +1 -0
- package/dist/src/plan-stat-event.test.d.ts +2 -0
- package/dist/src/plan-stat-event.test.d.ts.map +1 -0
- package/dist/src/plan-stat-event.test.js +131 -0
- package/dist/src/plan-stat-event.test.js.map +1 -0
- package/dist/src/plan-store-access.d.ts +25 -0
- package/dist/src/plan-store-access.d.ts.map +1 -0
- package/dist/src/plan-store-access.js +100 -0
- package/dist/src/plan-store-access.js.map +1 -0
- package/dist/src/plan-store-access.test.d.ts +2 -0
- package/dist/src/plan-store-access.test.d.ts.map +1 -0
- package/dist/src/plan-store-access.test.js +207 -0
- package/dist/src/plan-store-access.test.js.map +1 -0
- package/dist/src/plan-tool-middleware.d.ts +19 -0
- package/dist/src/plan-tool-middleware.d.ts.map +1 -0
- package/dist/src/plan-tool-middleware.js +63 -0
- package/dist/src/plan-tool-middleware.js.map +1 -0
- package/dist/src/plan-tool-middleware.test.d.ts +2 -0
- package/dist/src/plan-tool-middleware.test.d.ts.map +1 -0
- package/dist/src/plan-tool-middleware.test.js +103 -0
- package/dist/src/plan-tool-middleware.test.js.map +1 -0
- package/dist/src/plan-tool-result.d.ts +18 -0
- package/dist/src/plan-tool-result.d.ts.map +1 -0
- package/dist/src/plan-tool-result.js +77 -0
- package/dist/src/plan-tool-result.js.map +1 -0
- package/dist/src/plan-tool-result.test.d.ts +2 -0
- package/dist/src/plan-tool-result.test.d.ts.map +1 -0
- package/dist/src/plan-tool-result.test.js +129 -0
- package/dist/src/plan-tool-result.test.js.map +1 -0
- package/dist/src/plan-ws-registry.d.ts +15 -0
- package/dist/src/plan-ws-registry.d.ts.map +1 -0
- package/dist/src/plan-ws-registry.js +39 -0
- package/dist/src/plan-ws-registry.js.map +1 -0
- package/dist/src/plan-ws-registry.test.d.ts +2 -0
- package/dist/src/plan-ws-registry.test.d.ts.map +1 -0
- package/dist/src/plan-ws-registry.test.js +61 -0
- package/dist/src/plan-ws-registry.test.js.map +1 -0
- package/dist/src/plugin/channel-config.d.ts +0 -32
- package/dist/src/plugin/channel-config.d.ts.map +1 -1
- package/dist/src/plugin/channel-config.js +0 -12
- package/dist/src/plugin/channel-config.js.map +1 -1
- package/dist/src/plugin/channel-config.test.js +0 -15
- package/dist/src/plugin/channel-config.test.js.map +1 -1
- package/dist/src/plugin/types.d.ts +0 -15
- package/dist/src/plugin/types.d.ts.map +1 -1
- package/dist/src/plugin/types.js.map +1 -1
- package/dist/src/plugin-dispose.d.ts +22 -0
- package/dist/src/plugin-dispose.d.ts.map +1 -0
- package/dist/src/plugin-dispose.js +66 -0
- package/dist/src/plugin-dispose.js.map +1 -0
- package/dist/src/process-shared-store.d.ts +48 -0
- package/dist/src/process-shared-store.d.ts.map +1 -0
- package/dist/src/process-shared-store.js +89 -0
- package/dist/src/process-shared-store.js.map +1 -0
- package/dist/src/process-shared-store.test.d.ts +2 -0
- package/dist/src/process-shared-store.test.d.ts.map +1 -0
- package/dist/src/process-shared-store.test.js +60 -0
- package/dist/src/process-shared-store.test.js.map +1 -0
- package/dist/src/project-path-normalize.d.ts +30 -0
- package/dist/src/project-path-normalize.d.ts.map +1 -0
- package/dist/src/project-path-normalize.js +101 -0
- package/dist/src/project-path-normalize.js.map +1 -0
- package/dist/src/recommended-system-prompt.d.ts +3 -0
- package/dist/src/recommended-system-prompt.d.ts.map +1 -0
- package/dist/src/recommended-system-prompt.js +8 -0
- package/dist/src/recommended-system-prompt.js.map +1 -0
- package/dist/src/register-exec-env-hook.d.ts +44 -0
- package/dist/src/register-exec-env-hook.d.ts.map +1 -0
- package/dist/src/register-exec-env-hook.js +473 -0
- package/dist/src/register-exec-env-hook.js.map +1 -0
- package/dist/src/register-exec-env-hook.test.d.ts +2 -0
- package/dist/src/register-exec-env-hook.test.d.ts.map +1 -0
- package/dist/src/register-exec-env-hook.test.js +189 -0
- package/dist/src/register-exec-env-hook.test.js.map +1 -0
- package/dist/src/register-group-prompt-hook.d.ts +17 -0
- package/dist/src/register-group-prompt-hook.d.ts.map +1 -0
- package/dist/src/register-group-prompt-hook.js +45 -0
- package/dist/src/register-group-prompt-hook.js.map +1 -0
- package/dist/src/register-group-prompt-hook.test.d.ts +2 -0
- package/dist/src/register-group-prompt-hook.test.d.ts.map +1 -0
- package/dist/src/register-group-prompt-hook.test.js +60 -0
- package/dist/src/register-group-prompt-hook.test.js.map +1 -0
- package/dist/src/register-per-message-model-hook.d.ts +14 -0
- package/dist/src/register-per-message-model-hook.d.ts.map +1 -0
- package/dist/src/register-per-message-model-hook.js +48 -0
- package/dist/src/register-per-message-model-hook.js.map +1 -0
- package/dist/src/register-per-message-model-hook.test.d.ts +2 -0
- package/dist/src/register-per-message-model-hook.test.d.ts.map +1 -0
- package/dist/src/register-per-message-model-hook.test.js +208 -0
- package/dist/src/register-per-message-model-hook.test.js.map +1 -0
- package/dist/src/register-run-model-context-hook.d.ts +11 -0
- package/dist/src/register-run-model-context-hook.d.ts.map +1 -0
- package/dist/src/register-run-model-context-hook.js +23 -0
- package/dist/src/register-run-model-context-hook.js.map +1 -0
- package/dist/src/reply-dispatch-driver.d.ts +89 -0
- package/dist/src/reply-dispatch-driver.d.ts.map +1 -0
- package/dist/src/reply-dispatch-driver.js +294 -0
- package/dist/src/reply-dispatch-driver.js.map +1 -0
- package/dist/src/reply-dispatch-driver.test.d.ts +2 -0
- package/dist/src/reply-dispatch-driver.test.d.ts.map +1 -0
- package/dist/src/reply-dispatch-driver.test.js +363 -0
- package/dist/src/reply-dispatch-driver.test.js.map +1 -0
- package/dist/src/resolve-inbound-group-prompt.d.ts +37 -0
- package/dist/src/resolve-inbound-group-prompt.d.ts.map +1 -0
- package/dist/src/resolve-inbound-group-prompt.js +57 -0
- package/dist/src/resolve-inbound-group-prompt.js.map +1 -0
- package/dist/src/resource-file.d.ts +119 -0
- package/dist/src/resource-file.d.ts.map +1 -0
- package/dist/src/resource-file.js +533 -0
- package/dist/src/resource-file.js.map +1 -0
- package/dist/src/resource-file.test.d.ts +2 -0
- package/dist/src/resource-file.test.d.ts.map +1 -0
- package/dist/src/resource-file.test.js +64 -0
- package/dist/src/resource-file.test.js.map +1 -0
- package/dist/src/run-model-context.d.ts +45 -0
- package/dist/src/run-model-context.d.ts.map +1 -0
- package/dist/src/run-model-context.js +108 -0
- package/dist/src/run-model-context.js.map +1 -0
- package/dist/src/run-model-context.test.d.ts +2 -0
- package/dist/src/run-model-context.test.d.ts.map +1 -0
- package/dist/src/run-model-context.test.js +68 -0
- package/dist/src/run-model-context.test.js.map +1 -0
- package/dist/src/run-usage-session.d.ts +13 -0
- package/dist/src/run-usage-session.d.ts.map +1 -0
- package/dist/src/run-usage-session.js +41 -0
- package/dist/src/run-usage-session.js.map +1 -0
- package/dist/src/run-usage.d.ts +67 -0
- package/dist/src/run-usage.d.ts.map +1 -0
- package/dist/src/run-usage.js +119 -0
- package/dist/src/run-usage.js.map +1 -0
- package/dist/src/run-usage.test.d.ts +2 -0
- package/dist/src/run-usage.test.d.ts.map +1 -0
- package/dist/src/run-usage.test.js +178 -0
- package/dist/src/run-usage.test.js.map +1 -0
- package/dist/src/send-file-event.d.ts +26 -0
- package/dist/src/send-file-event.d.ts.map +1 -0
- package/dist/src/send-file-event.js +33 -0
- package/dist/src/send-file-event.js.map +1 -0
- package/dist/src/send-file-event.test.d.ts +2 -0
- package/dist/src/send-file-event.test.d.ts.map +1 -0
- package/dist/src/send-file-event.test.js +86 -0
- package/dist/src/send-file-event.test.js.map +1 -0
- package/dist/src/send-file-tool.d.ts +81 -0
- package/dist/src/send-file-tool.d.ts.map +1 -0
- package/dist/src/send-file-tool.js +363 -0
- package/dist/src/send-file-tool.js.map +1 -0
- package/dist/src/send-file-tool.test.d.ts +2 -0
- package/dist/src/send-file-tool.test.d.ts.map +1 -0
- package/dist/src/send-file-tool.test.js +176 -0
- package/dist/src/send-file-tool.test.js.map +1 -0
- package/dist/src/send-group-message-tool.d.ts +17 -0
- package/dist/src/send-group-message-tool.d.ts.map +1 -0
- package/dist/src/send-group-message-tool.js +82 -0
- package/dist/src/send-group-message-tool.js.map +1 -0
- package/dist/src/send-service.d.ts +83 -0
- package/dist/src/send-service.d.ts.map +1 -0
- package/dist/src/send-service.js +324 -0
- package/dist/src/send-service.js.map +1 -0
- package/dist/src/send-service.test.d.ts +2 -0
- package/dist/src/send-service.test.d.ts.map +1 -0
- package/dist/src/send-service.test.js +40 -0
- package/dist/src/send-service.test.js.map +1 -0
- package/dist/src/session-env-store.d.ts +55 -0
- package/dist/src/session-env-store.d.ts.map +1 -0
- package/dist/src/session-env-store.js +328 -0
- package/dist/src/session-env-store.js.map +1 -0
- package/dist/src/session-env-store.test.d.ts +2 -0
- package/dist/src/session-env-store.test.d.ts.map +1 -0
- package/dist/src/session-env-store.test.js +151 -0
- package/dist/src/session-env-store.test.js.map +1 -0
- package/dist/src/session-group-prompt.d.ts +34 -0
- package/dist/src/session-group-prompt.d.ts.map +1 -0
- package/dist/src/session-group-prompt.js +101 -0
- package/dist/src/session-group-prompt.js.map +1 -0
- package/dist/src/session-group-prompt.test.d.ts +2 -0
- package/dist/src/session-group-prompt.test.d.ts.map +1 -0
- package/dist/src/session-group-prompt.test.js +72 -0
- package/dist/src/session-group-prompt.test.js.map +1 -0
- package/dist/src/session-im-context.d.ts +15 -0
- package/dist/src/session-im-context.d.ts.map +1 -0
- package/dist/src/session-im-context.js +54 -0
- package/dist/src/session-im-context.js.map +1 -0
- package/dist/src/session-model-fallback.d.ts +13 -0
- package/dist/src/session-model-fallback.d.ts.map +1 -0
- package/dist/src/session-model-fallback.js +24 -0
- package/dist/src/session-model-fallback.js.map +1 -0
- package/dist/src/subagent-monitor.d.ts +45 -0
- package/dist/src/subagent-monitor.d.ts.map +1 -0
- package/dist/src/subagent-monitor.js +498 -0
- package/dist/src/subagent-monitor.js.map +1 -0
- package/dist/src/subagent-monitor.test.d.ts +2 -0
- package/dist/src/subagent-monitor.test.d.ts.map +1 -0
- package/dist/src/subagent-monitor.test.js +335 -0
- package/dist/src/subagent-monitor.test.js.map +1 -0
- package/dist/src/sync-mapping-types.d.ts +220 -0
- package/dist/src/sync-mapping-types.d.ts.map +1 -0
- package/dist/src/sync-mapping-types.js +55 -0
- package/dist/src/sync-mapping-types.js.map +1 -0
- package/dist/src/sync-service-client.d.ts +29 -0
- package/dist/src/sync-service-client.d.ts.map +1 -0
- package/dist/src/sync-service-client.js +72 -0
- package/dist/src/sync-service-client.js.map +1 -0
- package/dist/src/thinking-ws-progress.d.ts +24 -0
- package/dist/src/thinking-ws-progress.d.ts.map +1 -0
- package/dist/src/thinking-ws-progress.js +45 -0
- package/dist/src/thinking-ws-progress.js.map +1 -0
- package/dist/src/thinking-ws-progress.test.d.ts +2 -0
- package/dist/src/thinking-ws-progress.test.d.ts.map +1 -0
- package/dist/src/thinking-ws-progress.test.js +38 -0
- package/dist/src/thinking-ws-progress.test.js.map +1 -0
- package/dist/src/tool-event-adapter.d.ts +31 -0
- package/dist/src/tool-event-adapter.d.ts.map +1 -0
- package/dist/src/tool-event-adapter.js +83 -0
- package/dist/src/tool-event-adapter.js.map +1 -0
- package/dist/src/tool-event-adapter.test.d.ts +2 -0
- package/dist/src/tool-event-adapter.test.d.ts.map +1 -0
- package/dist/src/tool-event-adapter.test.js +93 -0
- package/dist/src/tool-event-adapter.test.js.map +1 -0
- package/dist/src/tool-json-result.d.ts +14 -0
- package/dist/src/tool-json-result.d.ts.map +1 -0
- package/dist/src/tool-json-result.js +20 -0
- package/dist/src/tool-json-result.js.map +1 -0
- package/dist/src/turn/turn-agent-event-subscription.d.ts.map +1 -1
- package/dist/src/turn/turn-agent-event-subscription.js +66 -2
- package/dist/src/turn/turn-agent-event-subscription.js.map +1 -1
- package/dist/src/turn/turn-agent-event-subscription.test.js +114 -1
- package/dist/src/turn/turn-agent-event-subscription.test.js.map +1 -1
- package/dist/src/turn-agent-event-subscription.d.ts +29 -0
- package/dist/src/turn-agent-event-subscription.d.ts.map +1 -0
- package/dist/src/turn-agent-event-subscription.js +289 -0
- package/dist/src/turn-agent-event-subscription.js.map +1 -0
- package/dist/src/turn-agent-event-subscription.test.d.ts +2 -0
- package/dist/src/turn-agent-event-subscription.test.d.ts.map +1 -0
- package/dist/src/turn-agent-event-subscription.test.js +165 -0
- package/dist/src/turn-agent-event-subscription.test.js.map +1 -0
- package/dist/src/turn-deliver-buffer.d.ts +60 -0
- package/dist/src/turn-deliver-buffer.d.ts.map +1 -0
- package/dist/src/turn-deliver-buffer.js +133 -0
- package/dist/src/turn-deliver-buffer.js.map +1 -0
- package/dist/src/turn-deliver-buffer.test.d.ts +2 -0
- package/dist/src/turn-deliver-buffer.test.d.ts.map +1 -0
- package/dist/src/turn-deliver-buffer.test.js +184 -0
- package/dist/src/turn-deliver-buffer.test.js.map +1 -0
- package/dist/src/turn-end-controller.d.ts +61 -0
- package/dist/src/turn-end-controller.d.ts.map +1 -0
- package/dist/src/turn-end-controller.js +239 -0
- package/dist/src/turn-end-controller.js.map +1 -0
- package/dist/src/turn-end-controller.test.d.ts +2 -0
- package/dist/src/turn-end-controller.test.d.ts.map +1 -0
- package/dist/src/turn-end-controller.test.js +97 -0
- package/dist/src/turn-end-controller.test.js.map +1 -0
- package/dist/src/types.d.ts +433 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +32 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/user-facing-errors.d.ts +32 -0
- package/dist/src/user-facing-errors.d.ts.map +1 -0
- package/dist/src/user-facing-errors.js +120 -0
- package/dist/src/user-facing-errors.js.map +1 -0
- package/dist/src/user-facing-errors.test.d.ts +2 -0
- package/dist/src/user-facing-errors.test.d.ts.map +1 -0
- package/dist/src/user-facing-errors.test.js +102 -0
- package/dist/src/user-facing-errors.test.js.map +1 -0
- package/dist/src/workspace-event-protocol.d.ts +3 -0
- package/dist/src/workspace-event-protocol.d.ts.map +1 -0
- package/dist/src/workspace-event-protocol.js +3 -0
- package/dist/src/workspace-event-protocol.js.map +1 -0
- package/dist/src/workspace-event-scheduler.d.ts +54 -0
- package/dist/src/workspace-event-scheduler.d.ts.map +1 -0
- package/dist/src/workspace-event-scheduler.js +131 -0
- package/dist/src/workspace-event-scheduler.js.map +1 -0
- package/dist/src/workspace-event-scheduler.test.d.ts +2 -0
- package/dist/src/workspace-event-scheduler.test.d.ts.map +1 -0
- package/dist/src/workspace-event-scheduler.test.js +157 -0
- package/dist/src/workspace-event-scheduler.test.js.map +1 -0
- package/dist/src/workspace-event.d.ts +28 -0
- package/dist/src/workspace-event.d.ts.map +1 -0
- package/dist/src/workspace-event.js +674 -0
- package/dist/src/workspace-event.js.map +1 -0
- package/dist/src/workspace-event.test.d.ts +2 -0
- package/dist/src/workspace-event.test.d.ts.map +1 -0
- package/dist/src/workspace-event.test.js +265 -0
- package/dist/src/workspace-event.test.js.map +1 -0
- package/dist/src/ws-inbound-schema.d.ts +14 -0
- package/dist/src/ws-inbound-schema.d.ts.map +1 -0
- package/dist/src/ws-inbound-schema.js +68 -0
- package/dist/src/ws-inbound-schema.js.map +1 -0
- package/dist/src/ws-inbound-schema.test.d.ts +2 -0
- package/dist/src/ws-inbound-schema.test.d.ts.map +1 -0
- package/dist/src/ws-inbound-schema.test.js +58 -0
- package/dist/src/ws-inbound-schema.test.js.map +1 -0
- package/dist/src/ws-run-event-unmapped.d.ts +10 -0
- package/dist/src/ws-run-event-unmapped.d.ts.map +1 -0
- package/dist/src/ws-run-event-unmapped.js +16 -0
- package/dist/src/ws-run-event-unmapped.js.map +1 -0
- package/dist/src/ws-run-event-unmapped.test.d.ts +2 -0
- package/dist/src/ws-run-event-unmapped.test.d.ts.map +1 -0
- package/dist/src/ws-run-event-unmapped.test.js +15 -0
- package/dist/src/ws-run-event-unmapped.test.js.map +1 -0
- package/package.json +82 -82
- package/dist/src/inbound/inbound-url-rewrite.d.ts +0 -32
- package/dist/src/inbound/inbound-url-rewrite.d.ts.map +0 -1
- package/dist/src/inbound/inbound-url-rewrite.js +0 -94
- package/dist/src/inbound/inbound-url-rewrite.js.map +0 -1
- package/dist/src/inbound/inbound-url-rewrite.test.d.ts +0 -2
- package/dist/src/inbound/inbound-url-rewrite.test.d.ts.map +0 -1
- package/dist/src/inbound/inbound-url-rewrite.test.js +0 -90
- package/dist/src/inbound/inbound-url-rewrite.test.js.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 插件卸载/重载时的统一拆解入口。
|
|
3
|
+
*
|
|
4
|
+
* 语义(跨模块共享改造后):
|
|
5
|
+
* - 真卸载 / gateway_stop:`disposePluginModule()`(skipConnections=false)——连同进程级共享的
|
|
6
|
+
* account-reconciler 一起 stopAll,并清空全部共享内存态(连接/流客户端/会话上下文/轮次/去重/env/
|
|
7
|
+
* subagent 监控)。由 index.ts 的 gateway_stop 钩子触发,且用 once 闸门保证只执行一次。
|
|
8
|
+
* - 插件热重载 / registry 代际交替:cleanup 以 `disposePluginModule({ skipConnections: true,
|
|
9
|
+
* skipPlanResources: true })` 调用——只收尾可安全代际清理的句柄,保留动作读库与 plan-ws 路由,
|
|
10
|
+
* **绝不 stopAll、绝不清理共享连接/内存态**。连接只在 AccountReconciler(配置 diff,账号级)
|
|
11
|
+
* 与 gateway_stop(进程停机)处拆解,避免 OpenClaw runtime 代际交替误拆全部 WebSocket。
|
|
12
|
+
*/
|
|
13
|
+
export interface DisposePluginModuleOptions {
|
|
14
|
+
/** 注册表代际交替(热重载)场景:只收尾独占句柄,跳过共享连接与共享内存态。 */
|
|
15
|
+
skipConnections?: boolean;
|
|
16
|
+
/** 注册表代际交替时保留计划读库、动作读库句柄与计划 WS 路由——这些资源仍被代际交替后
|
|
17
|
+
* 可能继续调用的旧中间件读取路径使用,清空会令反查在打开数据库前即失败;gateway_stop 使用默认 false 完整清理。 */
|
|
18
|
+
skipPlanResources?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** skipConnections=false(gateway_stop)时停连接+清共享态;true(cleanup)只收尾独占句柄。 */
|
|
21
|
+
export declare function disposePluginModule(options?: DisposePluginModuleOptions): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=plugin-dispose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-dispose.d.ts","sourceRoot":"","sources":["../../src/plugin-dispose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqBH,MAAM,WAAW,0BAA0B;IACvC,2CAA2C;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;2EACuE;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,yEAAyE;AACzE,wBAAsB,mBAAmB,CACrC,OAAO,GAAE,0BAA+B,GACzC,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 插件卸载/重载时的统一拆解入口。
|
|
3
|
+
*
|
|
4
|
+
* 语义(跨模块共享改造后):
|
|
5
|
+
* - 真卸载 / gateway_stop:`disposePluginModule()`(skipConnections=false)——连同进程级共享的
|
|
6
|
+
* account-reconciler 一起 stopAll,并清空全部共享内存态(连接/流客户端/会话上下文/轮次/去重/env/
|
|
7
|
+
* subagent 监控)。由 index.ts 的 gateway_stop 钩子触发,且用 once 闸门保证只执行一次。
|
|
8
|
+
* - 插件热重载 / registry 代际交替:cleanup 以 `disposePluginModule({ skipConnections: true,
|
|
9
|
+
* skipPlanResources: true })` 调用——只收尾可安全代际清理的句柄,保留动作读库与 plan-ws 路由,
|
|
10
|
+
* **绝不 stopAll、绝不清理共享连接/内存态**。连接只在 AccountReconciler(配置 diff,账号级)
|
|
11
|
+
* 与 gateway_stop(进程停机)处拆解,避免 OpenClaw runtime 代际交替误拆全部 WebSocket。
|
|
12
|
+
*/
|
|
13
|
+
import { accountReconciler } from "./account-reconciler.js";
|
|
14
|
+
import { disposeAssistantItemSinks } from "./assistant-item-sink.js";
|
|
15
|
+
import { disposeActiveCronContextStore } from "./active-cron-context-store.js";
|
|
16
|
+
import { clearStreamClients } from "./agent-stream-client-registry.js";
|
|
17
|
+
import { disposeActiveRoundRegistry } from "./active-round-registry.js";
|
|
18
|
+
import { disposeActionStore } from "./action-store-access.js";
|
|
19
|
+
import { clearAllTokenCache } from "./auth.js";
|
|
20
|
+
import { disposeCronAppKeyBindingStore } from "./cron-appkey-binding-store.js";
|
|
21
|
+
import { disposeGlobalTerminalSent } from "./inbound-terminal-state.js";
|
|
22
|
+
import { clearSessionNasVolumeStates } from "./nas-volumes.js";
|
|
23
|
+
import { clearAllPendingPerMessageModel } from "./per-message-model-pending.js";
|
|
24
|
+
import { disposeSessionEnvStore } from "./session-env-store.js";
|
|
25
|
+
import { disposePlanWsRegistry } from "./plan-ws-registry.js";
|
|
26
|
+
import { disposeSessionImContext } from "./session-im-context.js";
|
|
27
|
+
import { clearAllSessionGroupPrompts } from "./session-group-prompt.js";
|
|
28
|
+
import { disposeSubagentMonitor } from "./subagent-monitor.js";
|
|
29
|
+
import { disposeTurnAgentEvents } from "./turn-agent-event-subscription.js";
|
|
30
|
+
import { disposeTurnEndController } from "./turn-end-controller.js";
|
|
31
|
+
/** skipConnections=false(gateway_stop)时停连接+清共享态;true(cleanup)只收尾独占句柄。 */
|
|
32
|
+
export async function disposePluginModule(options = {}) {
|
|
33
|
+
const { skipConnections = false } = options;
|
|
34
|
+
const { skipPlanResources = false } = options;
|
|
35
|
+
if (skipConnections) {
|
|
36
|
+
console.log(`[xg_cwork_im] [reload] disposePluginModule skipConnections=true ` +
|
|
37
|
+
`skipPlanResources=${skipPlanResources} (registry cycle)`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// gateway_stop:停共享连接 + 清空共享热路径内存态(含 subagent 监控 maps/ticker)。
|
|
41
|
+
await accountReconciler.stopAll("gateway-stop");
|
|
42
|
+
disposeSubagentMonitor();
|
|
43
|
+
disposeTurnAgentEvents();
|
|
44
|
+
disposeAssistantItemSinks();
|
|
45
|
+
disposeTurnEndController();
|
|
46
|
+
clearStreamClients();
|
|
47
|
+
disposeSessionImContext();
|
|
48
|
+
clearAllSessionGroupPrompts();
|
|
49
|
+
disposeActiveRoundRegistry();
|
|
50
|
+
disposeGlobalTerminalSent();
|
|
51
|
+
clearAllPendingPerMessageModel();
|
|
52
|
+
clearSessionNasVolumeStates();
|
|
53
|
+
disposeSessionEnvStore();
|
|
54
|
+
disposeActiveCronContextStore();
|
|
55
|
+
disposeCronAppKeyBindingStore();
|
|
56
|
+
}
|
|
57
|
+
// 动作读库与 plan-ws 路由可能被代际交替后仍在调用的旧中间件/旧发送路径继续使用:旧 cleanup 绝不能清空
|
|
58
|
+
// 它们的配置/句柄——action 若被清空,getActionById 会在打开数据库之前就因 stateDir 缺失而失败,
|
|
59
|
+
// 表现为「反查不到 action,跳过 ACTION_DISPATCH 发送」;gateway_stop(skipPlanResources=false)仍完整释放。
|
|
60
|
+
if (!skipPlanResources) {
|
|
61
|
+
disposeActionStore();
|
|
62
|
+
disposePlanWsRegistry();
|
|
63
|
+
}
|
|
64
|
+
clearAllTokenCache();
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=plugin-dispose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-dispose.js","sourceRoot":"","sources":["../../src/plugin-dispose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAUpE,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,UAAsC,EAAE;IAExC,MAAM,EAAE,eAAe,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,EAAE,iBAAiB,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC9C,IAAI,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CACP,kEAAkE;YAC9D,qBAAqB,iBAAiB,mBAAmB,CAChE,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,8DAA8D;QAC9D,MAAM,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAChD,sBAAsB,EAAE,CAAC;QACzB,sBAAsB,EAAE,CAAC;QACzB,yBAAyB,EAAE,CAAC;QAC5B,wBAAwB,EAAE,CAAC;QAC3B,kBAAkB,EAAE,CAAC;QACrB,uBAAuB,EAAE,CAAC;QAC1B,2BAA2B,EAAE,CAAC;QAC9B,0BAA0B,EAAE,CAAC;QAC7B,yBAAyB,EAAE,CAAC;QAC5B,8BAA8B,EAAE,CAAC;QACjC,2BAA2B,EAAE,CAAC;QAC9B,sBAAsB,EAAE,CAAC;QACzB,6BAA6B,EAAE,CAAC;QAChC,6BAA6B,EAAE,CAAC;IACpC,CAAC;IACD,8DAA8D;IAC9D,kEAAkE;IAClE,qFAAqF;IACrF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,kBAAkB,EAAE,CAAC;QACrB,qBAAqB,EAAE,CAAC;IAC5B,CAAC;IACD,kBAAkB,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进程级共享存储(跨插件模块重载实例存活)。
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw 热重载插件时会重新 import 插件模块 → 新模块作用域里的「模块级单例」与旧实例不互通,
|
|
5
|
+
* 旧模块由 registerRuntimeLifecycle cleanup 拆解。为了做到「WebSocket 连接与 runtime 不随模块
|
|
6
|
+
* 重建」,把必须在重载后仍存活的状态放到 globalThis(Symbol key),任何一代模块实例读写同一份。
|
|
7
|
+
*
|
|
8
|
+
* 用途:
|
|
9
|
+
* - 模块代际(epoch):模块每次(重)import 时取号,register() 后 cleanup 据此判断「是否已有更新的
|
|
10
|
+
* 模块实例接管」,接管时不再拆连接。
|
|
11
|
+
* - runtime 持有:每次 register() 把最新 PluginRuntime 写入,连接派发时按需现取,避免绑定旧代际。
|
|
12
|
+
* - 通用 namespace:后续状态迁移(reconciler 等)统一放这里。
|
|
13
|
+
*/
|
|
14
|
+
export interface ProcessSharedStore {
|
|
15
|
+
/** 模块代际计数:每个模块实例在顶层(重)import 时递增取号(仅用于观测重载)。 */
|
|
16
|
+
moduleEpoch: number;
|
|
17
|
+
/** register() 序列:每次 register() 自增(仅观测用,不再作为 teardown 判定依据)。 */
|
|
18
|
+
registerSeq: number;
|
|
19
|
+
/** 当前生效的插件 runtime(每次 register() 覆盖)。 */
|
|
20
|
+
runtime: unknown;
|
|
21
|
+
/** 进程级共享命名空间(连接/reconciler 等状态)。 */
|
|
22
|
+
namespace: Record<string, unknown>;
|
|
23
|
+
/** gateway_stop 全量 teardown 只执行一次的闸门。 */
|
|
24
|
+
fullTeardownDone: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** 模块实例顶层调用一次:领取一个全局单调递增的代际号(仅观测用)。 */
|
|
27
|
+
export declare function nextModuleEpoch(): number;
|
|
28
|
+
/** 读取当前最大的模块代际号。 */
|
|
29
|
+
export declare function currentModuleEpoch(): number;
|
|
30
|
+
/** register() 时调用:领取本次 register 的全局序列号。 */
|
|
31
|
+
export declare function nextRegisterSeq(): number;
|
|
32
|
+
/** 读取当前最大的 register 序列号。 */
|
|
33
|
+
export declare function currentRegisterSeq(): number;
|
|
34
|
+
/** 全量 teardown(gateway_stop)幂等闸门:首次调用返回 true,其后返回 false。 */
|
|
35
|
+
export declare function requestFullTeardownOnce(): boolean;
|
|
36
|
+
/** 出现新的 register() 时复位 teardown 闸门(允许下次停机再次 teardown)。 */
|
|
37
|
+
export declare function resetFullTeardownGate(): void;
|
|
38
|
+
/** register() 时写入最新 runtime(连接派发按需现取)。 */
|
|
39
|
+
export declare function setSharedRuntime(rt: unknown): void;
|
|
40
|
+
/** 读取当前最新 runtime。 */
|
|
41
|
+
export declare function getSharedRuntime<T = unknown>(): T | undefined;
|
|
42
|
+
/** 进程级 getOrCreate:跨模块重载共享单例(如 account-reconciler)。 */
|
|
43
|
+
export declare function getOrCreateShared<T>(key: string, factory: () => T): T;
|
|
44
|
+
/** 进程级共享 Map:跨模块重载共享状态(旧连接派发写入 / 新模块 hooks 读取同一份)。 */
|
|
45
|
+
export declare function getSharedMap<K, V>(key: string): Map<K, V>;
|
|
46
|
+
/** 仅供测试:整表重置(避免测试文件间串状态)。 */
|
|
47
|
+
export declare function __resetProcessSharedStoreForTests(): void;
|
|
48
|
+
//# sourceMappingURL=process-shared-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-shared-store.d.ts","sourceRoot":"","sources":["../../src/process-shared-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,kBAAkB;IAC/B,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,yCAAyC;IACzC,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAkBD,uCAAuC;AACvC,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,oBAAoB;AACpB,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,4BAA4B;AAC5B,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4DAA4D;AAC5D,wBAAgB,uBAAuB,IAAI,OAAO,CAKjD;AAED,0DAA0D;AAC1D,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,sBAAsB;AACtB,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,SAAS,CAE7D;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAMrE;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAEzD;AAED,6BAA6B;AAC7B,wBAAgB,iCAAiC,IAAI,IAAI,CAKxD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进程级共享存储(跨插件模块重载实例存活)。
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw 热重载插件时会重新 import 插件模块 → 新模块作用域里的「模块级单例」与旧实例不互通,
|
|
5
|
+
* 旧模块由 registerRuntimeLifecycle cleanup 拆解。为了做到「WebSocket 连接与 runtime 不随模块
|
|
6
|
+
* 重建」,把必须在重载后仍存活的状态放到 globalThis(Symbol key),任何一代模块实例读写同一份。
|
|
7
|
+
*
|
|
8
|
+
* 用途:
|
|
9
|
+
* - 模块代际(epoch):模块每次(重)import 时取号,register() 后 cleanup 据此判断「是否已有更新的
|
|
10
|
+
* 模块实例接管」,接管时不再拆连接。
|
|
11
|
+
* - runtime 持有:每次 register() 把最新 PluginRuntime 写入,连接派发时按需现取,避免绑定旧代际。
|
|
12
|
+
* - 通用 namespace:后续状态迁移(reconciler 等)统一放这里。
|
|
13
|
+
*/
|
|
14
|
+
const STORE_KEY = Symbol.for("xg.im.processSharedStore");
|
|
15
|
+
function ensureStore() {
|
|
16
|
+
const g = globalThis;
|
|
17
|
+
if (Object.hasOwn(g, STORE_KEY)) {
|
|
18
|
+
return g[STORE_KEY];
|
|
19
|
+
}
|
|
20
|
+
const created = {
|
|
21
|
+
moduleEpoch: 0,
|
|
22
|
+
registerSeq: 0,
|
|
23
|
+
runtime: undefined,
|
|
24
|
+
namespace: {},
|
|
25
|
+
fullTeardownDone: false,
|
|
26
|
+
};
|
|
27
|
+
g[STORE_KEY] = created;
|
|
28
|
+
return created;
|
|
29
|
+
}
|
|
30
|
+
/** 模块实例顶层调用一次:领取一个全局单调递增的代际号(仅观测用)。 */
|
|
31
|
+
export function nextModuleEpoch() {
|
|
32
|
+
const store = ensureStore();
|
|
33
|
+
store.moduleEpoch += 1;
|
|
34
|
+
return store.moduleEpoch;
|
|
35
|
+
}
|
|
36
|
+
/** 读取当前最大的模块代际号。 */
|
|
37
|
+
export function currentModuleEpoch() {
|
|
38
|
+
return ensureStore().moduleEpoch;
|
|
39
|
+
}
|
|
40
|
+
/** register() 时调用:领取本次 register 的全局序列号。 */
|
|
41
|
+
export function nextRegisterSeq() {
|
|
42
|
+
const store = ensureStore();
|
|
43
|
+
store.registerSeq += 1;
|
|
44
|
+
return store.registerSeq;
|
|
45
|
+
}
|
|
46
|
+
/** 读取当前最大的 register 序列号。 */
|
|
47
|
+
export function currentRegisterSeq() {
|
|
48
|
+
return ensureStore().registerSeq;
|
|
49
|
+
}
|
|
50
|
+
/** 全量 teardown(gateway_stop)幂等闸门:首次调用返回 true,其后返回 false。 */
|
|
51
|
+
export function requestFullTeardownOnce() {
|
|
52
|
+
const store = ensureStore();
|
|
53
|
+
if (store.fullTeardownDone)
|
|
54
|
+
return false;
|
|
55
|
+
store.fullTeardownDone = true;
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
/** 出现新的 register() 时复位 teardown 闸门(允许下次停机再次 teardown)。 */
|
|
59
|
+
export function resetFullTeardownGate() {
|
|
60
|
+
ensureStore().fullTeardownDone = false;
|
|
61
|
+
}
|
|
62
|
+
/** register() 时写入最新 runtime(连接派发按需现取)。 */
|
|
63
|
+
export function setSharedRuntime(rt) {
|
|
64
|
+
ensureStore().runtime = rt;
|
|
65
|
+
}
|
|
66
|
+
/** 读取当前最新 runtime。 */
|
|
67
|
+
export function getSharedRuntime() {
|
|
68
|
+
return ensureStore().runtime;
|
|
69
|
+
}
|
|
70
|
+
/** 进程级 getOrCreate:跨模块重载共享单例(如 account-reconciler)。 */
|
|
71
|
+
export function getOrCreateShared(key, factory) {
|
|
72
|
+
const ns = ensureStore().namespace;
|
|
73
|
+
if (!Object.hasOwn(ns, key)) {
|
|
74
|
+
ns[key] = factory();
|
|
75
|
+
}
|
|
76
|
+
return ns[key];
|
|
77
|
+
}
|
|
78
|
+
/** 进程级共享 Map:跨模块重载共享状态(旧连接派发写入 / 新模块 hooks 读取同一份)。 */
|
|
79
|
+
export function getSharedMap(key) {
|
|
80
|
+
return getOrCreateShared(`map:${key}`, () => new Map());
|
|
81
|
+
}
|
|
82
|
+
/** 仅供测试:整表重置(避免测试文件间串状态)。 */
|
|
83
|
+
export function __resetProcessSharedStoreForTests() {
|
|
84
|
+
const g = globalThis;
|
|
85
|
+
if (Object.hasOwn(g, STORE_KEY)) {
|
|
86
|
+
delete g[STORE_KEY];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=process-shared-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-shared-store.js","sourceRoot":"","sources":["../../src/process-shared-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAezD,SAAS,WAAW;IAChB,MAAM,CAAC,GAAG,UAA0C,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,SAAS,CAAuB,CAAC;IAC9C,CAAC;IACD,MAAM,OAAO,GAAuB;QAChC,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,KAAK;KAC1B,CAAC;IACF,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,eAAe;IAC3B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,EAAE,CAAC,WAAW,CAAC;AACrC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,eAAe;IAC3B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,EAAE,CAAC,WAAW,CAAC;AACrC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,uBAAuB;IACnC,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACzC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,qBAAqB;IACjC,WAAW,EAAE,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC3C,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,gBAAgB,CAAC,EAAW;IACxC,WAAW,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,gBAAgB;IAC5B,OAAO,WAAW,EAAE,CAAC,OAAwB,CAAC;AAClD,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAI,GAAW,EAAE,OAAgB;IAC9D,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,SAAS,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1B,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,CAAM,CAAC;AACxB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAO,GAAW;IAC1C,OAAO,iBAAiB,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAQ,CAAC,CAAC;AAClE,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,iCAAiC;IAC7C,MAAM,CAAC,GAAG,UAA0C,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-shared-store.test.d.ts","sourceRoot":"","sources":["../../src/process-shared-store.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { beforeEach, describe, it } from "node:test";
|
|
3
|
+
import { __resetProcessSharedStoreForTests, currentModuleEpoch, currentRegisterSeq, getOrCreateShared, getSharedMap, nextModuleEpoch, nextRegisterSeq, requestFullTeardownOnce, resetFullTeardownGate, } from "./process-shared-store.js";
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
__resetProcessSharedStoreForTests();
|
|
6
|
+
});
|
|
7
|
+
describe("process-shared-store: module epoch / register seq", () => {
|
|
8
|
+
it("moduleEpoch and registerSeq are monotonic per claim (observability only)", () => {
|
|
9
|
+
assert.equal(nextModuleEpoch(), 1);
|
|
10
|
+
assert.equal(nextModuleEpoch(), 2);
|
|
11
|
+
assert.equal(currentModuleEpoch(), 2);
|
|
12
|
+
assert.equal(nextRegisterSeq(), 1);
|
|
13
|
+
assert.equal(nextRegisterSeq(), 2);
|
|
14
|
+
assert.equal(currentRegisterSeq(), 2);
|
|
15
|
+
});
|
|
16
|
+
it("registerSeq is NOT used to decide teardown (must never gate stopAll on 'no later register')", () => {
|
|
17
|
+
// Registry 代际交替可能在批量 register 的尾端触发 cleanup,而无更晚 register;
|
|
18
|
+
// 该情形绝不能导出「全量 teardown」结论。这里验证 registerSeq 仅单调计数。
|
|
19
|
+
const last = nextRegisterSeq();
|
|
20
|
+
nextRegisterSeq();
|
|
21
|
+
assert.ok(currentRegisterSeq() > last);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
describe("process-shared-store: cross-module singleton via getOrCreateShared", () => {
|
|
25
|
+
it("getOrCreateShared returns the same instance for the same key", () => {
|
|
26
|
+
const a = getOrCreateShared("x", () => new Map());
|
|
27
|
+
const b = getOrCreateShared("x", () => new Map());
|
|
28
|
+
assert.equal(a, b);
|
|
29
|
+
});
|
|
30
|
+
it("getSharedMap returns the same map for the same key (old/new module read/write one copy)", () => {
|
|
31
|
+
const a = getSharedMap("shared-map");
|
|
32
|
+
const b = getSharedMap("shared-map");
|
|
33
|
+
assert.equal(a, b);
|
|
34
|
+
a.set("k", 1);
|
|
35
|
+
assert.equal(b.get("k"), 1);
|
|
36
|
+
});
|
|
37
|
+
it("distinct keys produce distinct instances", () => {
|
|
38
|
+
const a = getOrCreateShared("k1", () => new Map());
|
|
39
|
+
const b = getOrCreateShared("k2", () => new Map());
|
|
40
|
+
assert.notEqual(a, b);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe("process-shared-store: full teardown once-gate (gateway_stop)", () => {
|
|
44
|
+
it("requestFullTeardownOnce returns true only once until reset", () => {
|
|
45
|
+
assert.equal(requestFullTeardownOnce(), true);
|
|
46
|
+
assert.equal(requestFullTeardownOnce(), false);
|
|
47
|
+
assert.equal(requestFullTeardownOnce(), false);
|
|
48
|
+
});
|
|
49
|
+
it("a new register resets the gate so a later stop can teardown again", () => {
|
|
50
|
+
assert.equal(requestFullTeardownOnce(), true);
|
|
51
|
+
resetFullTeardownGate();
|
|
52
|
+
assert.equal(requestFullTeardownOnce(), true);
|
|
53
|
+
});
|
|
54
|
+
it("repeated gateway_stop handlers (one per register) collapse to a single teardown", () => {
|
|
55
|
+
const handlers = [requestFullTeardownOnce, requestFullTeardownOnce, requestFullTeardownOnce];
|
|
56
|
+
const results = handlers.map((h) => h());
|
|
57
|
+
assert.deepEqual(results, [true, false, false]);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=process-shared-store.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-shared-store.test.js","sourceRoot":"","sources":["../../src/process-shared-store.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EACH,iCAAiC,EACjC,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,qBAAqB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,UAAU,CAAC,GAAG,EAAE;IACZ,iCAAiC,EAAE,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAChF,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;QACnG,2DAA2D;QAC3D,kDAAkD;QAClD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,eAAe,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAChF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;QAC/F,MAAM,CAAC,GAAG,YAAY,CAAiB,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,YAAY,CAAiB,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;IAC1E,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,qBAAqB,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACvF,MAAM,QAAQ,GAAG,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;QAC7F,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目目录映射:路径规范化与宿主绝对路径求解。
|
|
3
|
+
*/
|
|
4
|
+
/** IM 信令 / 项目配置中 localRoot.kind 的合法取值(仅此两种) */
|
|
5
|
+
export declare const LOCAL_ROOT_KINDS: readonly ["workspace_relative", "host_absolute"];
|
|
6
|
+
export type LocalRootKind = (typeof LOCAL_ROOT_KINDS)[number];
|
|
7
|
+
export interface LocalRootSpec {
|
|
8
|
+
kind: LocalRootKind;
|
|
9
|
+
path: string;
|
|
10
|
+
}
|
|
11
|
+
/** 知识库目录 fileId(IM 信令 remoteRootFolderId → 同步服务 remoteRootFileId) */
|
|
12
|
+
export declare function normalizeRemoteRootFolderId(raw: string): string;
|
|
13
|
+
/** 知识库逻辑路径:去掉首部 `/`,统一为正斜杠分段 */
|
|
14
|
+
export declare function normalizeRemoteRootFolderPath(raw: string): string;
|
|
15
|
+
export interface ResolvedRemoteRoot {
|
|
16
|
+
/** 写入同步服务 body 的 remoteRootFileId */
|
|
17
|
+
remoteRootFileId?: string;
|
|
18
|
+
remoteRootFolderPath?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 解析 upsert 远端根:remoteRootFolderId 优先;两者都填时 id 决定同步根,path 仍透传供 upload 前缀。
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveRemoteRootForSync(params: {
|
|
24
|
+
remoteRootFolderId?: string;
|
|
25
|
+
remoteRootFolderPath?: string;
|
|
26
|
+
}): ResolvedRemoteRoot;
|
|
27
|
+
/** 规范化 workspace 相对段(去 ./、前导 /、尾部 /,禁止 ..) */
|
|
28
|
+
export declare function normalizeWorkspaceRelativeSegment(userPath: string): string;
|
|
29
|
+
export declare function resolveLocalAbsolutePath(localRoot: LocalRootSpec, workspaceHostRoot: string | undefined): string;
|
|
30
|
+
//# sourceMappingURL=project-path-normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-path-normalize.d.ts","sourceRoot":"","sources":["../../src/project-path-normalize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,kDAAmD,CAAC;AACjF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAUD,qEAAqE;AACrE,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,gCAAgC;AAChC,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED,MAAM,WAAW,kBAAkB;IAC/B,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC,GAAG,kBAAkB,CAerB;AAED,8CAA8C;AAC9C,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkB1E;AAED,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,aAAa,EACxB,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACtC,MAAM,CAuBR"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目目录映射:路径规范化与宿主绝对路径求解。
|
|
3
|
+
*/
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
/** workspace_relative 每段:ASCII 安全名,或含 Unicode 字母/数字的目录名(如中文路径) */
|
|
6
|
+
const ASCII_SEGMENT = /^[a-zA-Z0-9_\-][a-zA-Z0-9_\-/.]*$/;
|
|
7
|
+
/** 禁止出现在路径段内的字符(路径穿越、Windows 非法字符等) */
|
|
8
|
+
const UNSAFE_SEGMENT_CHAR = /[\0-\x1f\\:*?"<>|]/;
|
|
9
|
+
/** IM 信令 / 项目配置中 localRoot.kind 的合法取值(仅此两种) */
|
|
10
|
+
export const LOCAL_ROOT_KINDS = ["workspace_relative", "host_absolute"];
|
|
11
|
+
function isValidWorkspaceSegment(seg) {
|
|
12
|
+
if (!seg || seg === "." || seg === "..")
|
|
13
|
+
return false;
|
|
14
|
+
if (UNSAFE_SEGMENT_CHAR.test(seg))
|
|
15
|
+
return false;
|
|
16
|
+
if (ASCII_SEGMENT.test(seg))
|
|
17
|
+
return true;
|
|
18
|
+
// 中文等 Unicode 目录名:至少含一个字母或数字
|
|
19
|
+
return /[\p{L}\p{N}]/u.test(seg);
|
|
20
|
+
}
|
|
21
|
+
/** 知识库目录 fileId(IM 信令 remoteRootFolderId → 同步服务 remoteRootFileId) */
|
|
22
|
+
export function normalizeRemoteRootFolderId(raw) {
|
|
23
|
+
const id = raw.trim();
|
|
24
|
+
if (!id)
|
|
25
|
+
throw new Error("remoteRootFolderId 不能为空");
|
|
26
|
+
return id;
|
|
27
|
+
}
|
|
28
|
+
/** 知识库逻辑路径:去掉首部 `/`,统一为正斜杠分段 */
|
|
29
|
+
export function normalizeRemoteRootFolderPath(raw) {
|
|
30
|
+
let p = raw.trim().replace(/\\/g, "/");
|
|
31
|
+
while (p.startsWith("/"))
|
|
32
|
+
p = p.slice(1);
|
|
33
|
+
p = p.replace(/\/+$/, "");
|
|
34
|
+
if (!p)
|
|
35
|
+
throw new Error("remoteRootFolderPath 不能为空");
|
|
36
|
+
return p;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 解析 upsert 远端根:remoteRootFolderId 优先;两者都填时 id 决定同步根,path 仍透传供 upload 前缀。
|
|
40
|
+
*/
|
|
41
|
+
export function resolveRemoteRootForSync(params) {
|
|
42
|
+
const idRaw = params.remoteRootFolderId?.trim();
|
|
43
|
+
if (idRaw) {
|
|
44
|
+
const remoteRootFileId = normalizeRemoteRootFolderId(idRaw);
|
|
45
|
+
const pathRaw = params.remoteRootFolderPath?.trim();
|
|
46
|
+
return {
|
|
47
|
+
remoteRootFileId,
|
|
48
|
+
...(pathRaw ? { remoteRootFolderPath: normalizeRemoteRootFolderPath(pathRaw) } : {}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const pathRaw = params.remoteRootFolderPath?.trim();
|
|
52
|
+
if (!pathRaw) {
|
|
53
|
+
throw new Error("remoteRootFolderId 与 remoteRootFolderPath 至少填一个");
|
|
54
|
+
}
|
|
55
|
+
return { remoteRootFolderPath: normalizeRemoteRootFolderPath(pathRaw) };
|
|
56
|
+
}
|
|
57
|
+
/** 规范化 workspace 相对段(去 ./、前导 /、尾部 /,禁止 ..) */
|
|
58
|
+
export function normalizeWorkspaceRelativeSegment(userPath) {
|
|
59
|
+
let p = userPath.trim().replace(/\\/g, "/");
|
|
60
|
+
while (p.startsWith("./"))
|
|
61
|
+
p = p.slice(2);
|
|
62
|
+
while (p.startsWith("/"))
|
|
63
|
+
p = p.slice(1);
|
|
64
|
+
p = p.replace(/\/+$/, "");
|
|
65
|
+
if (!p)
|
|
66
|
+
throw new Error("localRoot.path 不能为空");
|
|
67
|
+
const parts = p.split("/").filter(Boolean);
|
|
68
|
+
for (const seg of parts) {
|
|
69
|
+
if (seg === "..")
|
|
70
|
+
throw new Error("路径不能包含 ..");
|
|
71
|
+
}
|
|
72
|
+
const invalidSeg = parts.find((seg) => !isValidWorkspaceSegment(seg));
|
|
73
|
+
if (invalidSeg) {
|
|
74
|
+
throw new Error(`路径含有非法字符: ${userPath}`);
|
|
75
|
+
}
|
|
76
|
+
return parts.join("/");
|
|
77
|
+
}
|
|
78
|
+
export function resolveLocalAbsolutePath(localRoot, workspaceHostRoot) {
|
|
79
|
+
const p = localRoot.path.trim();
|
|
80
|
+
if (!p)
|
|
81
|
+
throw new Error("localRoot.path 不能为空");
|
|
82
|
+
if (localRoot.kind === "host_absolute") {
|
|
83
|
+
const abs = path.resolve(p);
|
|
84
|
+
if (!path.isAbsolute(abs)) {
|
|
85
|
+
throw new Error("host_absolute 时 localRoot.path 必须是绝对路径");
|
|
86
|
+
}
|
|
87
|
+
return abs;
|
|
88
|
+
}
|
|
89
|
+
if (!workspaceHostRoot?.trim()) {
|
|
90
|
+
throw new Error("workspace_relative 需要可用的 Agent workspace 宿主根目录");
|
|
91
|
+
}
|
|
92
|
+
const rel = normalizeWorkspaceRelativeSegment(p);
|
|
93
|
+
const root = path.resolve(workspaceHostRoot.trim());
|
|
94
|
+
const joined = path.resolve(root, rel);
|
|
95
|
+
const relCheck = path.relative(root, joined);
|
|
96
|
+
if (relCheck.startsWith("..") || path.isAbsolute(relCheck)) {
|
|
97
|
+
throw new Error("localRoot.path 逃出 workspace 根目录");
|
|
98
|
+
}
|
|
99
|
+
return joined;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=project-path-normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-path-normalize.js","sourceRoot":"","sources":["../../src/project-path-normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommended-system-prompt.d.ts","sourceRoot":"","sources":["../../src/recommended-system-prompt.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,eAAO,MAAM,uCAAuC,QAMa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** 建议复制到 `channels.xg_cwork_im.systemPrompt`。 */
|
|
2
|
+
export const XG_IM_RECOMMENDED_CHANNEL_SYSTEM_PROMPT = "当用户要求生成、返回或发送文件(报告、HTML、PDF、图片等)时,必须使用 `xg_cwork_im_send_file` 工具发送,不要用 `MEDIA:<路径>`。" +
|
|
3
|
+
"步骤:1) 先在当前 Agent workspace 内创建具体文件;2) 确认路径存在且是普通文件而非目录;" +
|
|
4
|
+
"3) 调用 `xg_cwork_im_send_file`,`path` 传 workspace 相对路径(可带 ./ 或 /workspace/ 前缀),可用 `caption` 附说明、`fileName` 指定展示名。" +
|
|
5
|
+
"不要传 groupId 或账户(由会话上下文自动决定),不要传 URL、宿主机绝对路径、workspace 外或 .. 路径,也不要复制到 /tmp/openclaw。" +
|
|
6
|
+
"只有工具返回 `ok:true` 后才能告诉用户文件已发送;返回 `ok:false` 时按 `code` 修正文件或路径后重试,不得谎称已发送。" +
|
|
7
|
+
"纯文本回复照常直接回复即可;`xg_cwork_im_send_group_message` 只发纯文本、不能发附件。";
|
|
8
|
+
//# sourceMappingURL=recommended-system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommended-system-prompt.js","sourceRoot":"","sources":["../../src/recommended-system-prompt.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,CAAC,MAAM,uCAAuC,GAChD,uFAAuF;IACvF,yDAAyD;IACzD,kHAAkH;IAClH,sFAAsF;IACtF,2EAA2E;IAC3E,6DAA6D,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* before_tool_call:把当前会话的 per-user 环境变量注入 exec 子进程。
|
|
3
|
+
*
|
|
4
|
+
* - XG_OPENAPI_APP_KEY ← session-env-store(最后触发者,已持久化)
|
|
5
|
+
* - XG_OPENAPI_BASE_URL ← 插件配置 baseUrl(每次 exec 直读,重启/配置变更即生效,不持久化)
|
|
6
|
+
*
|
|
7
|
+
* 只在 exec 工具调用时生效(toolName 恒为 "exec"),注入方式为改写
|
|
8
|
+
* event.params.env(优先级低于 resolve_exec_env 的 pluginEnv,但本插件
|
|
9
|
+
* 不注册 resolve_exec_env,因此 params.env 即最终生效值)。不碰 process.env。
|
|
10
|
+
*
|
|
11
|
+
* 当本次会注入 XG_OPENAPI_APP_KEY 时,额外剥掉 params.command 行首对该变量的
|
|
12
|
+
* Shell 赋值 / `env` 前缀,避免 shell -c 在启动时覆盖已注入的值。
|
|
13
|
+
*/
|
|
14
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk/channel-plugin-common";
|
|
15
|
+
export declare const XG_OPENAPI_BASE_URL = "XG_OPENAPI_BASE_URL";
|
|
16
|
+
export type CronSessionRef = {
|
|
17
|
+
agentId: string;
|
|
18
|
+
jobId: string;
|
|
19
|
+
runId: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Strip leading shell / `env` assignments of XG_OPENAPI_APP_KEY from an exec command.
|
|
23
|
+
* Only touches the command prefix; does not search the rest of the string.
|
|
24
|
+
*/
|
|
25
|
+
export declare function stripLeadingXgOpenApiAppKeyAssignments(command: string): {
|
|
26
|
+
command: string;
|
|
27
|
+
stripped: boolean;
|
|
28
|
+
};
|
|
29
|
+
type SessionTargetRef = {
|
|
30
|
+
agentId: string;
|
|
31
|
+
sessionKey: string;
|
|
32
|
+
};
|
|
33
|
+
export declare function parseCronSessionTarget(sessionTarget: string | undefined): SessionTargetRef | undefined;
|
|
34
|
+
/** Return true only for the supported CLI/API forms that create a Cron job. */
|
|
35
|
+
export declare function isCronCreateCommand(command: string | undefined): boolean;
|
|
36
|
+
/** Extract the authoritative job id from native Cron or CLI results. */
|
|
37
|
+
export declare function extractCronJobIdFromResult(result: unknown): string | undefined;
|
|
38
|
+
/** Parse the stable portion of an OpenClaw Cron run session key. */
|
|
39
|
+
export declare function parseCronSessionKey(sessionKey: string | undefined): CronSessionRef | undefined;
|
|
40
|
+
export declare function registerExecEnvHook(api: OpenClawPluginApi): void;
|
|
41
|
+
/** Register automatic binding when a Cron job is created from an IM session. */
|
|
42
|
+
export declare function registerCronAppKeyBindingHook(api: OpenClawPluginApi): void;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=register-exec-env-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-exec-env-hook.d.ts","sourceRoot":"","sources":["../../src/register-exec-env-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAqBnF,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAe/E;;;GAGG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,MAAM,GAAG;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACrB,CAeA;AAsBD,KAAK,gBAAgB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AA0BhE,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAMtG;AAgJD,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKxE;AA0CD,wEAAwE;AACxE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkB9E;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAkB9F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CA2DhE;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CA4G1E"}
|