botmux 2.107.0 → 2.108.0
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.en.md +17 -14
- package/README.md +19 -14
- package/dist/adapters/backend/sandbox.d.ts +3 -1
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +19 -3
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +16 -1
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +24 -15
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +75 -43
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/cli/genius.d.ts.map +1 -1
- package/dist/adapters/cli/genius.js +9 -15
- package/dist/adapters/cli/genius.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts +73 -0
- package/dist/adapters/cli/grok.d.ts.map +1 -0
- package/dist/adapters/cli/grok.js +298 -0
- package/dist/adapters/cli/grok.js.map +1 -0
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
- package/dist/adapters/cli/oh-my-pi.js +133 -12
- package/dist/adapters/cli/oh-my-pi.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +3 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +8 -4
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +8 -4
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +18 -16
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/adapters/hook-installer.d.ts +5 -4
- package/dist/adapters/hook-installer.d.ts.map +1 -1
- package/dist/adapters/hook-installer.js +42 -0
- package/dist/adapters/hook-installer.js.map +1 -1
- package/dist/cli/send-dispatch.d.ts +21 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +159 -0
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli/session-list-liveness.d.ts +22 -0
- package/dist/cli/session-list-liveness.d.ts.map +1 -0
- package/dist/cli/session-list-liveness.js +22 -0
- package/dist/cli/session-list-liveness.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +182 -33
- package/dist/cli.js.map +1 -1
- package/dist/core/ask-types.d.ts +4 -0
- package/dist/core/ask-types.d.ts.map +1 -1
- package/dist/core/ask-types.js +10 -0
- package/dist/core/ask-types.js.map +1 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +35 -13
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +89 -16
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +6 -2
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +6 -5
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +11 -8
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/maintenance.d.ts +11 -8
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +45 -20
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/per-bot-env.d.ts.map +1 -1
- package/dist/core/per-bot-env.js +4 -0
- package/dist/core/per-bot-env.js.map +1 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +4 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
- package/dist/core/skills/cli-admin-command.js +8 -2
- package/dist/core/skills/cli-admin-command.js.map +1 -1
- package/dist/core/skills/im-command.d.ts.map +1 -1
- package/dist/core/skills/im-command.js +3 -1
- package/dist/core/skills/im-command.js.map +1 -1
- package/dist/core/skills/sources.d.ts +33 -1
- package/dist/core/skills/sources.d.ts.map +1 -1
- package/dist/core/skills/sources.js +97 -0
- package/dist/core/skills/sources.js.map +1 -1
- package/dist/core/skills/types.d.ts +8 -0
- package/dist/core/skills/types.d.ts.map +1 -1
- package/dist/core/terminal-url.d.ts.map +1 -1
- package/dist/core/terminal-url.js +12 -2
- package/dist/core/terminal-url.js.map +1 -1
- package/dist/core/terminal-write-auth.d.ts +34 -0
- package/dist/core/terminal-write-auth.d.ts.map +1 -0
- package/dist/core/terminal-write-auth.js +76 -0
- package/dist/core/terminal-write-auth.js.map +1 -0
- package/dist/core/tmux-recovery.d.ts +11 -0
- package/dist/core/tmux-recovery.d.ts.map +1 -0
- package/dist/core/tmux-recovery.js +19 -0
- package/dist/core/tmux-recovery.js.map +1 -0
- package/dist/core/types.d.ts +10 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/update-check.d.ts +2 -2
- package/dist/core/update-check.js +2 -2
- package/dist/core/worker-pool.d.ts +3 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +70 -3
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +15 -8
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +1 -1
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +7 -2
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +3 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +3 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +39 -13
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/history-senders.d.ts +37 -0
- package/dist/dashboard/history-senders.d.ts.map +1 -0
- package/dist/dashboard/history-senders.js +60 -0
- package/dist/dashboard/history-senders.js.map +1 -0
- package/dist/dashboard/roles-batch.d.ts +31 -0
- package/dist/dashboard/roles-batch.d.ts.map +1 -0
- package/dist/dashboard/roles-batch.js +87 -0
- package/dist/dashboard/roles-batch.js.map +1 -0
- package/dist/dashboard/settings-card-model.d.ts +4 -2
- package/dist/dashboard/settings-card-model.d.ts.map +1 -1
- package/dist/dashboard/settings-card-model.js +13 -5
- package/dist/dashboard/settings-card-model.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +4 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +6 -1
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/skill-install-request.d.ts +4 -0
- package/dist/dashboard/skill-install-request.d.ts.map +1 -1
- package/dist/dashboard/skill-install-request.js +11 -1
- package/dist/dashboard/skill-install-request.js.map +1 -1
- package/dist/dashboard/trigger-api.d.ts +9 -1
- package/dist/dashboard/trigger-api.d.ts.map +1 -1
- package/dist/dashboard/trigger-api.js +48 -10
- package/dist/dashboard/trigger-api.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +286 -271
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +26 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +1408 -12
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +91 -4
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +43 -2141
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts +6 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +261 -306
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/connectors-page.d.ts +4 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +228 -48
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/dashboard-api.d.ts +9 -0
- package/dist/dashboard/web/dashboard-api.d.ts.map +1 -0
- package/dist/dashboard/web/dashboard-api.js +18 -0
- package/dist/dashboard/web/dashboard-api.js.map +1 -0
- package/dist/dashboard/web/dashboard-components.d.ts +92 -0
- package/dist/dashboard/web/dashboard-components.d.ts.map +1 -0
- package/dist/dashboard/web/dashboard-components.js +250 -0
- package/dist/dashboard/web/dashboard-components.js.map +1 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +30 -183
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/floating-scrollbars.d.ts +2 -0
- package/dist/dashboard/web/floating-scrollbars.d.ts.map +1 -0
- package/dist/dashboard/web/floating-scrollbars.js +264 -0
- package/dist/dashboard/web/floating-scrollbars.js.map +1 -0
- package/dist/dashboard/web/groups-api.d.ts +36 -0
- package/dist/dashboard/web/groups-api.d.ts.map +1 -0
- package/dist/dashboard/web/groups-api.js +44 -0
- package/dist/dashboard/web/groups-api.js.map +1 -0
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +746 -15
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/groups.d.ts +51 -18
- package/dist/dashboard/web/groups.d.ts.map +1 -1
- package/dist/dashboard/web/groups.js +145 -1096
- package/dist/dashboard/web/groups.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +545 -255
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/insights-page.d.ts.map +1 -1
- package/dist/dashboard/web/insights-page.js +1047 -14
- package/dist/dashboard/web/insights-page.js.map +1 -1
- package/dist/dashboard/web/insights.d.ts +177 -7
- package/dist/dashboard/web/insights.d.ts.map +1 -1
- package/dist/dashboard/web/insights.js +187 -1926
- package/dist/dashboard/web/insights.js.map +1 -1
- package/dist/dashboard/web/legacy-workflow-page.d.ts +3 -0
- package/dist/dashboard/web/legacy-workflow-page.d.ts.map +1 -0
- package/dist/dashboard/web/legacy-workflow-page.js +717 -0
- package/dist/dashboard/web/legacy-workflow-page.js.map +1 -0
- package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
- package/dist/dashboard/web/monitor-room.js +10 -8
- package/dist/dashboard/web/monitor-room.js.map +1 -1
- package/dist/dashboard/web/monitoring-page.d.ts.map +1 -1
- package/dist/dashboard/web/monitoring-page.js +188 -14
- package/dist/dashboard/web/monitoring-page.js.map +1 -1
- package/dist/dashboard/web/office-page.d.ts.map +1 -1
- package/dist/dashboard/web/office-page.js +11 -23
- package/dist/dashboard/web/office-page.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +141 -147
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/overview.d.ts +0 -1
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +3 -275
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +1 -6
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +0 -21
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/role-batch.d.ts +9 -0
- package/dist/dashboard/web/role-batch.d.ts.map +1 -0
- package/dist/dashboard/web/role-batch.js +42 -0
- package/dist/dashboard/web/role-batch.js.map +1 -0
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +538 -13
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard/web/roles.d.ts +98 -1
- package/dist/dashboard/web/roles.d.ts.map +1 -1
- package/dist/dashboard/web/roles.js +117 -903
- package/dist/dashboard/web/roles.js.map +1 -1
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
- package/dist/dashboard/web/schedules-page.js +82 -24
- package/dist/dashboard/web/schedules-page.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +67 -0
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -0
- package/dist/dashboard/web/sessions-kanban.js +481 -0
- package/dist/dashboard/web/sessions-kanban.js.map +1 -0
- package/dist/dashboard/web/sessions-page.d.ts +4 -0
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +1633 -18
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +45 -4
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +53 -2535
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +0 -2
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +127 -117
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts +10 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +235 -93
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation-page.js +446 -28
- package/dist/dashboard/web/team-federation-page.js.map +1 -1
- package/dist/dashboard/web/team-federation.d.ts +91 -2
- package/dist/dashboard/web/team-federation.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation.js +87 -474
- package/dist/dashboard/web/team-federation.js.map +1 -1
- package/dist/dashboard/web/theme-menu.d.ts +1 -0
- package/dist/dashboard/web/theme-menu.d.ts.map +1 -1
- package/dist/dashboard/web/theme-menu.js +79 -20
- package/dist/dashboard/web/theme-menu.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +1 -2
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +8 -20
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard/web/v3-api.d.ts +16 -0
- package/dist/dashboard/web/v3-api.d.ts.map +1 -0
- package/dist/dashboard/web/v3-api.js +21 -0
- package/dist/dashboard/web/v3-api.js.map +1 -0
- package/dist/dashboard/web/v3-components.d.ts +2 -0
- package/dist/dashboard/web/v3-components.d.ts.map +1 -0
- package/dist/dashboard/web/v3-components.js +290 -0
- package/dist/dashboard/web/v3-components.js.map +1 -0
- package/dist/dashboard/web/v3-model.d.ts +80 -0
- package/dist/dashboard/web/v3-model.d.ts.map +1 -0
- package/dist/dashboard/web/v3-model.js +240 -0
- package/dist/dashboard/web/v3-model.js.map +1 -0
- package/dist/dashboard/web/v3-page.d.ts.map +1 -1
- package/dist/dashboard/web/v3-page.js +2 -22
- package/dist/dashboard/web/v3-page.js.map +1 -1
- package/dist/dashboard/web/v3-terminal.d.ts +14 -0
- package/dist/dashboard/web/v3-terminal.d.ts.map +1 -1
- package/dist/dashboard/web/v3-terminal.js +31 -19
- package/dist/dashboard/web/v3-terminal.js.map +1 -1
- package/dist/dashboard/web/webhook-logs-page.d.ts +16 -0
- package/dist/dashboard/web/webhook-logs-page.d.ts.map +1 -0
- package/dist/dashboard/web/webhook-logs-page.js +195 -0
- package/dist/dashboard/web/webhook-logs-page.js.map +1 -0
- package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards-page.js +18 -23
- package/dist/dashboard/web/whiteboards-page.js.map +1 -1
- package/dist/dashboard/web/workflow-version-switch.d.ts +8 -0
- package/dist/dashboard/web/workflow-version-switch.d.ts.map +1 -0
- package/dist/dashboard/web/workflow-version-switch.js +9 -0
- package/dist/dashboard/web/workflow-version-switch.js.map +1 -0
- package/dist/dashboard/web/workflows.d.ts +272 -1
- package/dist/dashboard/web/workflows.d.ts.map +1 -1
- package/dist/dashboard/web/workflows.js +211 -1397
- package/dist/dashboard/web/workflows.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +92 -39
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -65
- package/dist/dashboard-web/brand-logo.png +0 -0
- package/dist/dashboard-web/chunks/bot-defaults-page-HSQ6HR3R.js +1 -0
- package/dist/dashboard-web/chunks/chunk-6TPODDDC.js +1 -0
- package/dist/dashboard-web/chunks/chunk-73EJP2MO.js +1 -0
- package/dist/dashboard-web/chunks/chunk-BRTZFELS.js +1 -0
- package/dist/dashboard-web/chunks/chunk-EVK77ASG.js +1 -0
- package/dist/dashboard-web/chunks/chunk-R3FXBFQH.js +1 -0
- package/dist/dashboard-web/chunks/chunk-VRLL7SNU.js +1 -0
- package/dist/dashboard-web/chunks/chunk-XCPSHD3G.js +37 -0
- package/dist/dashboard-web/chunks/chunk-XJ7BGPJH.js +1 -0
- package/dist/dashboard-web/chunks/chunk-YVRWYGXR.js +1 -0
- package/dist/dashboard-web/chunks/chunk-ZJING6FY.js +66 -0
- package/dist/dashboard-web/chunks/connectors-page-ODUA5UCW.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-OYX5M6NK.js +8 -0
- package/dist/dashboard-web/chunks/insights-page-YCQO6OCR.js +22 -0
- package/dist/dashboard-web/chunks/legacy-workflow-page-XJAUNONP.js +2 -0
- package/dist/dashboard-web/chunks/{monitor-room-RFX4HPS5.js → monitor-room-WTZNYAFV.js} +17 -15
- package/dist/dashboard-web/chunks/monitoring-page-R6LJUK7G.js +2 -0
- package/dist/dashboard-web/chunks/office-page-4OXK3GNR.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-4MVEJY6U.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-NQDW27VV.js +1 -0
- package/dist/dashboard-web/chunks/schedules-page-JRNKYHOX.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-LF7UVI7B.js +3 -0
- package/dist/dashboard-web/chunks/settings-page-WGW7KQQS.js +2 -0
- package/dist/dashboard-web/chunks/skills-page-AMD4XP3T.js +3 -0
- package/dist/dashboard-web/chunks/team-federation-page-SYG3K4GG.js +1 -0
- package/dist/dashboard-web/chunks/v3-page-6NFFWNUK.js +94 -0
- package/dist/dashboard-web/chunks/whiteboards-page-FBRUK2AS.js +1 -0
- package/dist/dashboard-web/favicon.png +0 -0
- package/dist/dashboard-web/index.html +5 -69
- package/dist/dashboard-web/style.css +18835 -7211
- package/dist/dashboard.js +150 -32
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +2 -2
- package/dist/global-config.d.ts.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +3 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +3 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +7 -5
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +10 -7
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +25 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +84 -0
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/platform/binding.d.ts +9 -0
- package/dist/platform/binding.d.ts.map +1 -1
- package/dist/platform/binding.js +14 -0
- package/dist/platform/binding.js.map +1 -1
- package/dist/platform/tunnel-client.d.ts.map +1 -1
- package/dist/platform/tunnel-client.js +9 -0
- package/dist/platform/tunnel-client.js.map +1 -1
- package/dist/services/bot-config-store.d.ts +1 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +11 -5
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/file-bridge-path.d.ts +8 -0
- package/dist/services/file-bridge-path.d.ts.map +1 -0
- package/dist/services/file-bridge-path.js +75 -0
- package/dist/services/file-bridge-path.js.map +1 -0
- package/dist/services/grok-paths.d.ts +27 -0
- package/dist/services/grok-paths.d.ts.map +1 -0
- package/dist/services/grok-paths.js +106 -0
- package/dist/services/grok-paths.js.map +1 -0
- package/dist/services/grok-transcript.d.ts +67 -0
- package/dist/services/grok-transcript.d.ts.map +1 -0
- package/dist/services/grok-transcript.js +630 -0
- package/dist/services/grok-transcript.js.map +1 -0
- package/dist/services/hermes-session-filter.d.ts +28 -0
- package/dist/services/hermes-session-filter.d.ts.map +1 -0
- package/dist/services/hermes-session-filter.js +53 -0
- package/dist/services/hermes-session-filter.js.map +1 -0
- package/dist/services/hermes-transcript.d.ts +3 -0
- package/dist/services/hermes-transcript.d.ts.map +1 -1
- package/dist/services/hermes-transcript.js +20 -2
- package/dist/services/hermes-transcript.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts +3 -0
- package/dist/services/resumable-session-discovery.d.ts.map +1 -1
- package/dist/services/resumable-session-discovery.js +6 -1
- package/dist/services/resumable-session-discovery.js.map +1 -1
- package/dist/services/skill-registry-store.d.ts +9 -0
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +304 -1
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +29 -0
- package/dist/services/structured-bridge-clis.d.ts.map +1 -0
- package/dist/services/structured-bridge-clis.js +76 -0
- package/dist/services/structured-bridge-clis.js.map +1 -0
- package/dist/services/trigger-log-store.d.ts +59 -0
- package/dist/services/trigger-log-store.d.ts.map +1 -1
- package/dist/services/trigger-log-store.js +81 -10
- package/dist/services/trigger-log-store.js.map +1 -1
- package/dist/services/usage-ledger.d.ts +4 -1
- package/dist/services/usage-ledger.d.ts.map +1 -1
- package/dist/services/usage-ledger.js +48 -10
- package/dist/services/usage-ledger.js.map +1 -1
- package/dist/services/webhook-audit.d.ts +10 -0
- package/dist/services/webhook-audit.d.ts.map +1 -0
- package/dist/services/webhook-audit.js +116 -0
- package/dist/services/webhook-audit.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +2 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-tmux.d.ts +26 -12
- package/dist/setup/ensure-tmux.d.ts.map +1 -1
- package/dist/setup/ensure-tmux.js +85 -18
- package/dist/setup/ensure-tmux.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +14 -1
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/injection-mode.d.ts +16 -0
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +25 -0
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/global-install.d.ts +22 -0
- package/dist/utils/global-install.d.ts.map +1 -0
- package/dist/utils/global-install.js +106 -0
- package/dist/utils/global-install.js.map +1 -0
- package/dist/utils/install-diagnostics.d.ts +1 -1
- package/dist/utils/install-diagnostics.d.ts.map +1 -1
- package/dist/utils/install-diagnostics.js +6 -4
- package/dist/utils/install-diagnostics.js.map +1 -1
- package/dist/utils/install-info.d.ts +2 -0
- package/dist/utils/install-info.d.ts.map +1 -1
- package/dist/utils/install-info.js +10 -4
- package/dist/utils/install-info.js.map +1 -1
- package/dist/worker.js +293 -172
- package/dist/worker.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +10 -10
- package/dist/workflows/events/schema.d.ts +28 -28
- package/package.json +8 -7
- package/dist/dashboard/web/connectors.d.ts +0 -2
- package/dist/dashboard/web/connectors.d.ts.map +0 -1
- package/dist/dashboard/web/connectors.js +0 -2
- package/dist/dashboard/web/connectors.js.map +0 -1
- package/dist/dashboard/web/office.d.ts +0 -2
- package/dist/dashboard/web/office.d.ts.map +0 -1
- package/dist/dashboard/web/office.js +0 -2
- package/dist/dashboard/web/office.js.map +0 -1
- package/dist/dashboard/web/schedules.d.ts +0 -2
- package/dist/dashboard/web/schedules.d.ts.map +0 -1
- package/dist/dashboard/web/schedules.js +0 -2
- package/dist/dashboard/web/schedules.js.map +0 -1
- package/dist/dashboard/web/settings.d.ts +0 -2
- package/dist/dashboard/web/settings.d.ts.map +0 -1
- package/dist/dashboard/web/settings.js +0 -2
- package/dist/dashboard/web/settings.js.map +0 -1
- package/dist/dashboard/web/skills.d.ts +0 -2
- package/dist/dashboard/web/skills.d.ts.map +0 -1
- package/dist/dashboard/web/skills.js +0 -2
- package/dist/dashboard/web/skills.js.map +0 -1
- package/dist/dashboard/web/skin-intro.d.ts +0 -4
- package/dist/dashboard/web/skin-intro.d.ts.map +0 -1
- package/dist/dashboard/web/skin-intro.js +0 -49
- package/dist/dashboard/web/skin-intro.js.map +0 -1
- package/dist/dashboard/web/v3.d.ts +0 -3
- package/dist/dashboard/web/v3.d.ts.map +0 -1
- package/dist/dashboard/web/v3.js +0 -539
- package/dist/dashboard/web/v3.js.map +0 -1
- package/dist/dashboard/web/whiteboards.d.ts +0 -2
- package/dist/dashboard/web/whiteboards.d.ts.map +0 -1
- package/dist/dashboard/web/whiteboards.js +0 -2
- package/dist/dashboard/web/whiteboards.js.map +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-OCIHPGEU.js +0 -438
- package/dist/dashboard-web/chunks/chunk-3N2PPQVD.js +0 -1
- package/dist/dashboard-web/chunks/chunk-3UJYRR2Q.js +0 -37
- package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +0 -1
- package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
- package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +0 -54
- package/dist/dashboard-web/chunks/chunk-LXIK7OUJ.js +0 -1
- package/dist/dashboard-web/chunks/chunk-PE6W3C2C.js +0 -1
- package/dist/dashboard-web/chunks/chunk-QW54DWU3.js +0 -325
- package/dist/dashboard-web/chunks/connectors-IGETYWCP.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-MYBS4ZYJ.js +0 -207
- package/dist/dashboard-web/chunks/insights-page-UPA32V2S.js +0 -309
- package/dist/dashboard-web/chunks/monitoring-page-7T3BESZ2.js +0 -1
- package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-LJSBCQW4.js +0 -1
- package/dist/dashboard-web/chunks/roles-page-ESURTVQH.js +0 -98
- package/dist/dashboard-web/chunks/schedules-LML2ISOT.js +0 -1
- package/dist/dashboard-web/chunks/sessions-YB73XOTU.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-MCO5QR7Z.js +0 -1
- package/dist/dashboard-web/chunks/settings-page-OSDKNVS3.js +0 -2
- package/dist/dashboard-web/chunks/skills-page-PXBZJ6P6.js +0 -2
- package/dist/dashboard-web/chunks/team-federation-page-TTPVHFPX.js +0 -10
- package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +0 -149
- package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +0 -1
- package/dist/dashboard-web/chunks/workflows-FCPM4S4D.js +0 -184
- package/dist/dashboard-web/skins/bluearchive-hero.webp +0 -0
- package/dist/dashboard-web/skins/dragonball-goku.webp +0 -0
- package/dist/dashboard-web/skins/dragonball-wukong.webp +0 -0
- package/dist/dashboard-web/skins/genshin-breeze.webp +0 -0
- package/dist/dashboard-web/skins/ikun-hero.webp +0 -0
- package/dist/dashboard-web/skins/prts-priestess.webp +0 -0
- package/dist/dashboard-web/skins/zzz-hero.webp +0 -0
- package/dist/dashboard-web/skins/zzz-pattern.svg +0 -25
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import{a as pe,b as ue}from"./chunk-5E3MJJL4.js";import{b as de}from"./chunk-PE6W3C2C.js";import"./chunk-LXIK7OUJ.js";import{o as e,p as i,s as se,y as ie}from"./chunk-3UJYRR2Q.js";import{a as Me,b as le,c as ce}from"./chunk-JTSE5VP6.js";import{c as X}from"./chunk-7SZRL6FY.js";var W=X(Me(),1);var S={chats:[],bots:[]},Te=/^[A-Za-z0-9._-]{1,64}$/,he=(d,a)=>`${d}\0${a}`,J=[],Y=new Map,ee=new Map,fe=!1;function ve(d){return Te.test(d)&&d!=="."&&d!==".."}function me(d){let a=String(d??"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return ve(a)?a:"profile"}async function O(){S=await(await fetch("/api/groups")).json()}async function Ce(){return(await fetch("/api/groups")).json()}async function Ae(){let a=await(await fetch("/api/role-profiles")).json().catch(()=>({})),b=Array.isArray(a.profiles)?a.profiles:[],I=await Promise.all(b.map(async E=>{try{let A=await(await fetch(`/api/role-profiles/${encodeURIComponent(E.profileId)}`)).json().catch(()=>({}));return[E.profileId,Array.isArray(A.entries)?A.entries:[]]}catch{return[E.profileId,[]]}})),T=new Map,j=new Set;await Promise.all((S.chats??[]).flatMap(E=>(E.memberBots??[]).filter(k=>k?.inChat&&k?.larkAppId).map(async k=>{let A=he(k.larkAppId,E.chatId);if(!j.has(A)){j.add(A);try{let l=await(await fetch(`/api/roles/${encodeURIComponent(k.larkAppId)}/${encodeURIComponent(E.chatId)}`)).json().catch(()=>({})),F=l?.hasEffectiveRole??l?.hasRole,z="effectiveContent"in l?l.effectiveContent:l.content;T.set(A,{content:F?String(z??""):null,source:l?.effectiveSource??(l?.hasRole?"chat":"none")})}catch{T.set(A,null)}}}))),J=b,Y=new Map(I),ee=T}async function He(){let a=await(await fetch("/api/role-profiles")).json().catch(()=>({}));return Array.isArray(a.profiles)?a.profiles:[]}function Be(d,a){if(a.size===0)return!0;let b=d?.memberBots??[];for(let I of a)if(!b.some(T=>T.larkAppId===I&&T.inChat))return!1;return!0}function ge(d,a){return d.filter(b=>!a||!a.has(b.larkAppId)).map(b=>`
|
|
2
|
-
<label class="checkbox-row">
|
|
3
|
-
<input type="checkbox" name="bot" value="${i(b.larkAppId)}">
|
|
4
|
-
${i(b.botName??b.larkAppId)} <small>(${i(b.larkAppId)})</small>
|
|
5
|
-
</label>
|
|
6
|
-
`).join("")}function Re(d,a,b){let I=String(d??"").trim();if(!I)return"";if(b)return`<p class="hint-warn">${i(e("groups.roleProfileBootstrapFailed",{name:I,reason:String(b)}))}</p>`;let T=typeof a=="string"&&a.trim()?a.trim():"";return T?`<p class="hint-ok">${i(e("groups.roleProfileBootstrapSent",{name:I,messageId:T}))}</p>`:`<p class="hint-ok">${i(e("groups.roleProfileBootstrapDone",{name:I}))}</p>`}function xe(d){let a=Array.isArray(d)?d:[];if(!a.length)return'<p class="hint-warn">\u6CA1\u6709\u8FD4\u56DE\u6DFB\u52A0\u7ED3\u679C\u3002</p>';let b=a.filter(E=>!!E?.ok).length,I=a.length-b,T=I?"hint-warn":"hint-ok",j=a.map(E=>{let k=String(E?.id??"?");return E?.ok?`<li><code>${i(k)}</code>: OK</li>`:`<li><code>${i(k)}</code>: failed (${i(String(E?.error??"unknown"))})</li>`}).join("");return`<div class="${T}">
|
|
7
|
-
<strong>\u6DFB\u52A0\u7ED3\u679C\uFF1A\u6210\u529F ${b}/${a.length}${I?`\uFF0C\u5931\u8D25 ${I}`:""}</strong>
|
|
8
|
-
<ul>${j}</ul>
|
|
9
|
-
</div>`}function ye(d){let a=!1,b=new Set,I=new Map,T=(t,s)=>{let f=window.setTimeout(()=>{b.delete(f),a||t()},s);return b.add(f),f},j=t=>new Promise(s=>{let f=window.setTimeout(()=>{b.delete(f),I.delete(f),s()},t);b.add(f),I.set(f,s)}),E=d.querySelector("#g-head"),k=d.querySelector("#g-body"),A=d.querySelector("#g-filters"),U=d.querySelector("#g-refresh"),l=d.querySelector("#g-drawer");U.onclick=async()=>{U.disabled=!0;try{if(await O(),a)return;B(),x()}finally{a||(U.disabled=!1)}};let F=d.querySelector("#g-create");F.onclick=()=>{$e()};let z=d.querySelector("#g-loading"),be=d.querySelector("#g-table-wrap");(async()=>{try{await O()}finally{if(a)return;z.remove(),be.hidden=!1,B(),x()}})();async function x(){try{await Ae()}catch{J=[],Y=new Map,ee=new Map}finally{if(a)return;fe=!0,B()}}function H(t,s){t.innerHTML=s}function N(t,s){return`<p class="hint-warn"><strong>${i(t)}</strong><br><small>${i(String(s??"unknown"))}</small></p>`}function V(t,s){t&&(t.disabled=!1,t.textContent=s)}async function $e(){let t=S.bots;if(t.length===0){alert(e("groups.noBotsOnline"));return}let s=[];try{s=(await(await fetch("/api/role-profiles")).json()).profiles??[]}catch{}if(a)return;l.innerHTML=`
|
|
10
|
-
<article>
|
|
11
|
-
<header><h3>${e("groups.createTitle")}</h3></header>
|
|
12
|
-
<p>${e("groups.createHelp")}</p>
|
|
13
|
-
<form id="g-createform">
|
|
14
|
-
<label class="form-row">
|
|
15
|
-
<span>${e("groups.name")}</span>
|
|
16
|
-
<input type="text" name="name" placeholder="${e("groups.namePlaceholder")}" maxlength="60">
|
|
17
|
-
</label>
|
|
18
|
-
<label class="form-row">
|
|
19
|
-
<span>${e("groups.bindDir")}</span>
|
|
20
|
-
<input type="text" name="bindWorkingDir" placeholder="e.g. ~/projects/botmux">
|
|
21
|
-
<small>${e("groups.bindDirHelp")}</small>
|
|
22
|
-
</label>
|
|
23
|
-
<label class="form-row">
|
|
24
|
-
<span>${e("groups.roleProfile")}</span>
|
|
25
|
-
<select name="roleProfileId">
|
|
26
|
-
<option value="">${e("groups.roleProfileNone")}</option>
|
|
27
|
-
${s.map(o=>`<option value="${i(o.profileId)}">${i(o.profileId)}</option>`).join("")}
|
|
28
|
-
</select>
|
|
29
|
-
<small>${e("groups.roleProfileHelp")}</small>
|
|
30
|
-
</label>
|
|
31
|
-
<fieldset>
|
|
32
|
-
<legend>${e("groups.botPicker")}</legend>
|
|
33
|
-
${ge(t)}
|
|
34
|
-
</fieldset>
|
|
35
|
-
<div data-create-status aria-live="polite"></div>
|
|
36
|
-
<div class="actions">
|
|
37
|
-
<button type="submit" class="primary">${e("groups.createSubmit")}</button>
|
|
38
|
-
<button type="button" id="g-create-cancel">${e("groups.cancel")}</button>
|
|
39
|
-
</div>
|
|
40
|
-
</form>
|
|
41
|
-
</article>`,l.showModal(),l.querySelector("#g-create-cancel").onclick=()=>l.close(),l.querySelector("#g-createform").onsubmit=async o=>{o.preventDefault();let r=new FormData(o.target),m=(r.get("name")??"").trim(),c=(r.get("bindWorkingDir")??"").trim(),p=(r.get("roleProfileId")??"").trim(),h=r.getAll("bot"),y=l.querySelector("[data-create-status]");if(h.length===0){H(y,N("\u8BF7\u9009\u62E9 bot","\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u521B\u5EFA\u7FA4\u804A\u3002"));return}let u=o.target.querySelector("button[type=submit]");u&&(u.disabled=!0,u.textContent="Creating..."),H(y,"");try{let w=await fetch("/api/groups/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:m||void 0,larkAppIds:h,bindWorkingDir:c||void 0,roleProfileId:p||void 0})}),g=await w.json().catch(()=>({ok:!1,error:`HTTP ${w.status}`}));if(a)return;if(g.ok&&g.chatId){we(g);let L=Array.isArray(g.invalidBotIds)?g.invalidBotIds:[],C=h.filter(D=>!L.includes(D)),q=new Set(C);typeof g.creator=="string"&&g.creator&&q.add(g.creator),f(g.chatId,m||g.chatId,C,g.creator),B(),x(),n(g.chatId,q).catch(()=>{})}else H(y,N("\u521B\u5EFA\u5931\u8D25",g.error??`HTTP ${w.status}`)),V(u,e("groups.createSubmit"))}catch(w){H(y,N("\u7F51\u7EDC\u9519\u8BEF",w)),V(u,e("groups.createSubmit"))}};function f(o,r,m,c){let p=new Set(m);c&&p.add(c);let h=S.bots.map(u=>({larkAppId:u.larkAppId,botName:u.botName,inChat:p.has(u.larkAppId),oncallChat:null})),y={chatId:o,name:r,ownerId:c??null,memberBots:h};S.chats=[y,...S.chats.filter(u=>u.chatId!==o)]}async function n(o,r){let m=[600,1200,1200,1200,1200,1200];for(let c of m){if(await j(c),a)return;let p;try{p=await Ce()}catch{continue}if(a)return;let h=(p.chats??[]).find(y=>y.chatId===o);if(h&&Be(h,r)){S=p,B(),x();return}}}}function we(t){let s=String(t.chatId),f=typeof t.shareLink=="string"&&t.shareLink?t.shareLink:`https://applink.feishu.cn/client/chat/open?openChatId=${encodeURIComponent(s)}`,n=t.invalidBotIds??[],o=t.invalidUserIds??[],r=t.autoInvitedOpenId,m=!!t.autoInviteRejected,c=t.ownerTransferredTo,p=t.transferError,h=t.notifyMessageId,y=t.notifyError,u=Array.isArray(t.oncallBindings)?t.oncallBindings:[],w=u.filter(M=>M?.ok).length,g=u.filter(M=>!M?.ok),L=u.length>0?g.length===0?`<p class="hint-ok">\u5DF2\u7ED1\u5B9A\u76EE\u5F55\uFF1A<code>${i(t.bindResolvedPath??"")}</code>\uFF08${w}/${u.length} bots\uFF09</p>`:`<p class="hint-warn">\u76EE\u5F55\u7ED1\u5B9A\u90E8\u5206\u5931\u8D25\uFF1A\u6210\u529F ${w}/${u.length}\u3002${g.map(M=>`<br><code>${i(M.larkAppId??"?")}</code>: ${i(M.error??"unknown")}`).join("")}</p>`:"",C;if(r){let M=c?"<br><small>\u7FA4\u4E3B\u5DF2\u4ECE\u673A\u5668\u4EBA\u8F6C\u8BA9\u7ED9\u4F60\u3002</small>":p?`<br><small class="hint-warn-inline">\u26A0 \u81EA\u52A8\u8F6C\u8BA9\u7FA4\u4E3B\u5931\u8D25\uFF08${i(p)}\uFF09\uFF0C\u4F60\u73B0\u5728\u662F\u6210\u5458\u4F46\u7FA4\u4E3B\u4ECD\u662F\u673A\u5668\u4EBA\u3002</small>`:"",K=h?`<br><small>\u673A\u5668\u4EBA\u5DF2\u5728\u7FA4\u91CC @ \u4E86\u4F60\uFF08\u6D88\u606F id <code>${i(h)}</code>\uFF09\uFF0C\u770B\u98DE\u4E66\u901A\u77E5\u5C31\u80FD\u8FDB\u7FA4\u3002</small>`:y?`<br><small class="hint-warn-inline">\u26A0 \u81EA\u52A8 @ \u901A\u77E5\u5931\u8D25\uFF08${i(y)}\uFF09\uFF0C\u65B0\u7FA4\u53EF\u80FD\u4E0D\u4F1A\u4E3B\u52A8\u51FA\u73B0\u5728\u4F60\u4FA7\u8FB9\u680F\uFF0C\u5EFA\u8BAE\u4ECE\u4E0B\u9762\u6309\u94AE\u8DF3\u8FDB\u53BB\u3002</small>`:"";C=`<p class="hint-ok">\u5DF2\u81EA\u52A8\u9080\u8BF7\u4F60\uFF08<code>${i(r)}</code>\uFF09\u4F5C\u4E3A\u6210\u5458\u3002${M}${K}</p>`}else m?C='<p class="hint-warn">\u98DE\u4E66\u62D2\u7EDD\u4E86\u81EA\u52A8\u9080\u8BF7\uFF08\u4F60\u7684 open_id \u5728\u521B\u5EFA\u8005 bot \u7684 scope \u4E0B\u4E0D\u53EF\u7528\uFF09\u3002<strong>\u4F60\u76EE\u524D\u4E0D\u662F\u65B0\u7FA4\u6210\u5458</strong>\uFF0C\u9700\u8981\u8BA9\u7FA4\u91CC\u7684\u67D0\u4E2A\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u6765\u3002</p>':C='<p class="hint-warn">\u6CA1\u5728 dashboard \u7F13\u5B58\u91CC\u627E\u5230 ownerOpenId\uFF0C<strong>\u6CA1\u6709\u81EA\u52A8\u9080\u8BF7\u4F60</strong>\u3002\u70B9\u5F00\u4E0B\u9762\u94FE\u63A5\u524D\uFF0C\u5148\u8BA9\u7FA4\u91CC\u4EFB\u4E00\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u53BB\u3002</p>';let q=[n.length?`<li>\u65E0\u6548 bot id: <code>${n.map(i).join(", ")}</code></li>`:"",o.length?`<li>\u65E0\u6548\u7528\u6237 open_id: <code>${o.map(i).join(", ")}</code></li>`:""].filter(Boolean).join(""),D=Re(typeof t.roleProfileId=="string"?t.roleProfileId:"",t.roleProfileBootstrapMessageId,t.roleProfileBootstrapError);l.innerHTML=`
|
|
42
|
-
<article>
|
|
43
|
-
<header><h3>${e("groups.successTitle")}</h3></header>
|
|
44
|
-
<p><b>chatId:</b> <code>${i(s)}</code> <button type="button" data-copy="${i(s)}">${e("sessions.copy")}</button></p>
|
|
45
|
-
<p><b>\u521B\u5EFA\u8005:</b> <code>${i(t.creator??"?")}</code></p>
|
|
46
|
-
${C}
|
|
47
|
-
${L}
|
|
48
|
-
${D}
|
|
49
|
-
${q?`<ul>${q}</ul>`:""}
|
|
50
|
-
<div class="actions">
|
|
51
|
-
<a class="btn-link primary" href="${f}" target="_blank" rel="noopener">${e("groups.openGroup")}</a>
|
|
52
|
-
<button type="button" id="g-create-close">${e("sessions.dismiss")}</button>
|
|
53
|
-
</div>
|
|
54
|
-
</article>`,l.querySelectorAll("[data-copy]").forEach(M=>{M.onclick=()=>{navigator.clipboard.writeText(M.dataset.copy??""),M.textContent=e("sessions.copied"),T(()=>{M.textContent=e("sessions.copy")},800)}}),l.querySelector("#g-create-close").onclick=()=>l.close()}function ke(t){if(!J.length||!fe)return"";let s=new Map;for(let r of t.memberBots??[])r?.inChat&&s.set(r.larkAppId,ee.get(he(r.larkAppId,t.chatId))??null);if(!pe(s))return"";let n=ue(t.memberBots??[],J,Y,s)[0];if(!n)return`<div class="g-profile-status muted">${e("groups.profileStatusUnmatched")}</div>`;let o=n.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return`<div class="g-profile-status ${n.kind}">
|
|
55
|
-
${i(e(o,{name:n.profileId,matched:n.matched,total:n.total,chat:n.chatMatched}))}
|
|
56
|
-
</div>`}function Ie(){E.innerHTML=`<tr>
|
|
57
|
-
<th>${e("groups.chat")}</th>
|
|
58
|
-
${S.bots.map(t=>`<th>${i(t.botName??t.larkAppId)}</th>`).join("")}
|
|
59
|
-
<th>${e("groups.actions")}</th>
|
|
60
|
-
</tr>`}function B(){Ie();let t=new FormData(A),s=(t.get("q")??"").toLowerCase(),f=!!t.get("missing"),n=S.chats.filter(o=>!s||(o.name??"").toLowerCase().includes(s)||o.chatId.toLowerCase().includes(s)||(o.ownerId??"").toLowerCase().includes(s)).filter(o=>!f||o.memberBots.some(r=>!r.inChat));if(n.length===0){k.innerHTML=`<tr><td colspan="${S.bots.length+2}" class="empty">${e("groups.empty")}</td></tr>`;return}k.innerHTML=n.map(o=>`<tr data-chat="${i(o.chatId)}">
|
|
61
|
-
<td>
|
|
62
|
-
<div class="g-chat-cell">
|
|
63
|
-
${se({chatId:o.chatId,name:o.name,avatarUrl:o.avatar,size:"sm"})}
|
|
64
|
-
<div class="g-chat-meta">
|
|
65
|
-
<strong>${i(o.name??o.chatId)}</strong><br>
|
|
66
|
-
<small><code>${i(o.chatId)}</code></small>
|
|
67
|
-
${ke(o)}
|
|
68
|
-
</div>
|
|
69
|
-
</div>
|
|
70
|
-
</td>
|
|
71
|
-
${S.bots.map(r=>{let m=o.memberBots.find(h=>h.larkAppId===r.larkAppId),c=m?m.error?"!":m.inChat?"\u2713":"\u2717":"?";return`<td class="${m?m.error?"cell-error":m.inChat?"cell-in":"cell-out":"cell-unknown"}" title="${i(m?.error??"")}">${c}</td>`}).join("")}
|
|
72
|
-
<td>
|
|
73
|
-
<button class="add-bots" type="button">${e("groups.addBots")}</button>
|
|
74
|
-
<button class="save-profile" type="button">${e("groups.saveAsProfile")}</button>
|
|
75
|
-
<button class="manage-chat" type="button">${e("groups.manage")}</button>
|
|
76
|
-
</td>
|
|
77
|
-
</tr>`).join("")}let te=async t=>{let s=t.target.closest("button.add-bots");if(!s)return;let n=s.closest("tr[data-chat]").dataset.chat,o=S.chats.find(c=>c.chatId===n);if(!o)return;let r=new Set(o.memberBots.filter(c=>c.inChat).map(c=>c.larkAppId));if(!S.bots.filter(c=>!r.has(c.larkAppId)).length){alert("All configured bots are already in this chat.");return}l.innerHTML=`
|
|
78
|
-
<article>
|
|
79
|
-
<header><h3>${e("groups.addBots")} \xB7 ${i(o.name??o.chatId)}</h3></header>
|
|
80
|
-
<p>${e("groups.createHelp")}</p>
|
|
81
|
-
<form id="g-addform">
|
|
82
|
-
${ge(S.bots,r)}
|
|
83
|
-
<div data-add-status aria-live="polite"></div>
|
|
84
|
-
<div class="actions">
|
|
85
|
-
<button type="submit" class="primary">${e("groups.addBots")}</button>
|
|
86
|
-
<button type="button" id="g-cancel">${e("groups.cancel")}</button>
|
|
87
|
-
</div>
|
|
88
|
-
</form>
|
|
89
|
-
</article>`,l.showModal(),l.querySelector("#g-cancel").onclick=()=>l.close(),l.querySelector("#g-addform").onsubmit=async c=>{c.preventDefault();let h=new FormData(c.target).getAll("bot"),y=l.querySelector("[data-add-status]");if(h.length===0){H(y,N("\u8BF7\u9009\u62E9 bot","\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u6DFB\u52A0\u3002"));return}let u=c.target.querySelector("button[type=submit]");u&&(u.disabled=!0,u.textContent="Adding..."),H(y,"");try{let g=await(await fetch(`/api/groups/${encodeURIComponent(n)}/add-bots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:h})})).json();if(a)return;if(g.error==="no_proxy_bot")H(y,N("\u65E0\u6CD5\u6DFB\u52A0 bot","\u5F53\u524D\u7FA4\u91CC\u6CA1\u6709\u53EF\u4EE3\u7406\u64CD\u4F5C\u7684 bot\u3002\u8BF7\u5148\u5728\u98DE\u4E66\u91CC\u624B\u52A8\u62C9\u5165\u4E00\u4E2A bot\uFF0C\u7136\u540E\u91CD\u8BD5\u3002"));else if(g.result){let L=xe(g.result);H(y,L);try{if(await O(),a)return;B(),x()}catch(C){a||H(y,`${L}${N("\u5237\u65B0\u5931\u8D25",`\u6DFB\u52A0\u7ED3\u679C\u5DF2\u8FD4\u56DE\uFF0C\u4F46\u5237\u65B0\u7FA4\u7EC4\u5217\u8868\u5931\u8D25\uFF1A${C}`)}`)}}else H(y,N("\u54CD\u5E94\u5F02\u5E38",JSON.stringify(g)))}catch(w){H(y,N("\u7F51\u7EDC\u9519\u8BEF",w))}finally{a||V(u,e("groups.addBots"))}}};k.addEventListener("click",te);let oe=async t=>{let s=t.target.closest("button.save-profile");if(!s)return;let n=s.closest("tr[data-chat]").dataset.chat,o=S.chats.find(r=>r.chatId===n);o&&await Pe(o,s)};k.addEventListener("click",oe);async function Pe(t,s){let f=me(t.name??""),n=f==="profile"?me(t.chatId):f;s.disabled=!0;let o=s.textContent;s.textContent=e("groups.saveProfileSaving");try{let[r,m]=await Promise.all([Se(t),He()]);if(a)return;Ee(t,n,r,m)}finally{a||(s.disabled=!1,s.textContent=o)}}async function Se(t){let s=(t.memberBots??[]).filter(n=>n?.inChat&&n?.larkAppId);return await Promise.all(s.map(async n=>{try{let r=await(await fetch(`/api/roles/${encodeURIComponent(n.larkAppId)}/${encodeURIComponent(t.chatId)}`)).json().catch(()=>({})),m=r?.hasEffectiveRole??r?.hasRole,c="effectiveContent"in r?r.effectiveContent:r.content,p=m?String(c??"").trim():"",h=r?.effectiveSource==="chat"||r?.effectiveSource==="team"?r.effectiveSource:null;return{larkAppId:n.larkAppId,botName:n.botName,content:p,status:p?h??"chat":"empty"}}catch{return{larkAppId:n.larkAppId,botName:n.botName,content:"",status:"error"}}}))}function Ee(t,s,f,n){let o=[...n].sort((v,P)=>v.profileId.localeCompare(P.profileId)),r=o.map((v,P)=>`
|
|
90
|
-
<button type="button"
|
|
91
|
-
class="g-save-profile-pick ${P===0?"selected":""}"
|
|
92
|
-
data-profile-id="${i(v.profileId)}"
|
|
93
|
-
aria-pressed="${P===0?"true":"false"}">
|
|
94
|
-
<span>${i(v.profileId)}</span>
|
|
95
|
-
<small>${i(e("groups.saveProfileExistingMeta",{count:v.entryCount??0}))}</small>
|
|
96
|
-
</button>`).join(""),m=o.length>0,c=f.filter(v=>v.status==="empty").length,p=f.filter(v=>v.status==="error").length,h=f.length>0&&p===0,y=f.map(v=>`
|
|
97
|
-
<div class="g-save-profile-entry ${v.status==="error"?"error":""}">
|
|
98
|
-
<div>
|
|
99
|
-
<strong>${i(v.botName??v.larkAppId)}</strong>
|
|
100
|
-
<code>${i(v.larkAppId)}</code>
|
|
101
|
-
</div>
|
|
102
|
-
<span class="g-save-profile-entry-status ${v.status==="error"?"error":"ok"}">
|
|
103
|
-
${e(v.status==="error"?"groups.saveProfileStatus.error":"groups.saveProfileStatus.entry")}
|
|
104
|
-
</span>
|
|
105
|
-
</div>`).join("");l.innerHTML=`
|
|
106
|
-
<article class="g-save-profile-dialog">
|
|
107
|
-
<header>
|
|
108
|
-
<h3>${e("groups.saveProfileTitle")}</h3>
|
|
109
|
-
<p>${i(e("groups.saveProfileIntro",{name:t.name??t.chatId,count:f.length}))}</p>
|
|
110
|
-
</header>
|
|
111
|
-
<form id="g-save-profile-form">
|
|
112
|
-
<section class="g-save-profile-panel">
|
|
113
|
-
<div class="g-save-profile-section-head">
|
|
114
|
-
<span>${e("groups.saveProfileScope")}</span>
|
|
115
|
-
<small>${e("groups.saveProfileScopeHelp")}</small>
|
|
116
|
-
</div>
|
|
117
|
-
<div class="g-save-profile-stats">
|
|
118
|
-
<span>${e("groups.saveProfileBotCount")} <strong>${f.length}</strong></span>
|
|
119
|
-
${p?`<span class="warn">${e("groups.saveProfileLoadFailed")} <strong>${p}</strong></span>`:""}
|
|
120
|
-
</div>
|
|
121
|
-
<div class="g-save-profile-entry-list">
|
|
122
|
-
${y||`<div class="g-save-profile-empty">${e("groups.saveProfileNoRoles")}</div>`}
|
|
123
|
-
</div>
|
|
124
|
-
</section>
|
|
125
|
-
|
|
126
|
-
<div class="form-row">
|
|
127
|
-
<span>${e("groups.saveProfileMode")}</span>
|
|
128
|
-
<div class="g-save-profile-switch" role="tablist" aria-label="${e("groups.saveProfileMode")}">
|
|
129
|
-
<button type="button" class="active" data-save-profile-mode="new">${e("groups.saveProfileNew")}</button>
|
|
130
|
-
<button type="button" data-save-profile-mode="overwrite" ${m?"":"disabled"}>${e("groups.saveProfileOverwrite")}</button>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
<label class="form-row" data-profile-mode-row="new">
|
|
134
|
-
<span>${e("groups.saveProfileIdLabel")}</span>
|
|
135
|
-
<input type="text" name="profileId" value="${i(s)}" maxlength="64" autocomplete="off">
|
|
136
|
-
<small>${e("groups.saveProfileInvalid")}</small>
|
|
137
|
-
</label>
|
|
138
|
-
<div class="form-row" data-profile-mode-row="overwrite" hidden>
|
|
139
|
-
<span>${e("groups.saveProfileExistingLabel")}</span>
|
|
140
|
-
${m?`<div class="g-save-profile-picker">${r}</div>`:`<div class="g-save-profile-summary warn">${e("groups.saveProfileExistingEmpty")}</div>`}
|
|
141
|
-
<small>${e("groups.saveProfileOverwriteHelp")}</small>
|
|
142
|
-
</div>
|
|
143
|
-
<div class="g-save-profile-target">
|
|
144
|
-
<span>${e("groups.saveProfileTarget")}</span>
|
|
145
|
-
<code data-save-profile-target>${i(s)}</code>
|
|
146
|
-
<small data-save-profile-target-mode>${e("groups.saveProfileTargetNew")}</small>
|
|
147
|
-
</div>
|
|
148
|
-
<div class="g-save-profile-summary ${h?"":"warn"}">
|
|
149
|
-
${p?i(e("groups.saveProfileFailedLoadSummary",{count:p})):f.length?i(c?e("groups.saveProfileEntrySummaryWithEmpty",{count:f.length,emptyCount:c}):e("groups.saveProfileEntrySummary",{count:f.length})):i(e("groups.saveProfileNoRoles"))}
|
|
150
|
-
</div>
|
|
151
|
-
<div class="g-save-profile-status" data-save-profile-status></div>
|
|
152
|
-
<div class="actions">
|
|
153
|
-
<button type="submit" class="primary" ${h?"":"disabled"}>${e("groups.saveProfileSubmit")}</button>
|
|
154
|
-
<button type="button" id="g-save-profile-cancel">${e("groups.cancel")}</button>
|
|
155
|
-
</div>
|
|
156
|
-
</form>
|
|
157
|
-
</article>`,l.showModal();let u=l.querySelector("#g-save-profile-form"),w=[...l.querySelectorAll("[data-profile-mode-row]")],g=l.querySelector("[data-save-profile-status]"),L=u.querySelector("button[type=submit]"),C=[...u.querySelectorAll("[data-save-profile-mode]")],q=[...u.querySelectorAll("[data-profile-id]")],D=u.querySelector("input[name=profileId]"),M=u.querySelector("[data-save-profile-target]"),K=u.querySelector("[data-save-profile-target-mode]"),R="new",G=o[0]?.profileId??"";function re(){return R==="overwrite"?G:D.value.trim()}function _(){for(let v of w)v.hidden=v.dataset.profileModeRow!==R;for(let v of C){let P=v.dataset.saveProfileMode===R;v.classList.toggle("active",P),v.setAttribute("aria-pressed",String(P))}for(let v of q){let P=v.dataset.profileId===G;v.classList.toggle("selected",P),v.setAttribute("aria-pressed",String(P))}L.textContent=R==="overwrite"?e("groups.saveProfileOverwriteSubmit"):e("groups.saveProfileSubmit"),L.disabled=!h||R==="overwrite"&&!G,M.textContent=re()||"-",K.textContent=R==="overwrite"?e("groups.saveProfileTargetOverwrite"):e("groups.saveProfileTargetNew"),g.textContent="",g.className="g-save-profile-status"}C.forEach(v=>{v.addEventListener("click",()=>{let P=v.dataset.saveProfileMode==="overwrite"?"overwrite":"new";P==="overwrite"&&!m||(R=P,_())})}),q.forEach(v=>{v.addEventListener("click",()=>{G=v.dataset.profileId??"",R="overwrite",_()})}),D.addEventListener("input",_),_(),l.querySelector("#g-save-profile-cancel").onclick=()=>l.close(),u.onsubmit=async v=>{if(v.preventDefault(),!h)return;let P=re();if(!ve(P)){g.textContent=e("groups.saveProfileInvalid"),g.className="g-save-profile-status error";return}L.disabled=!0,L.textContent=e("groups.saveProfileSaving"),g.textContent=e("groups.saveProfileSaving"),g.className="g-save-profile-status";try{let Z=await Promise.all(f.map(async ae=>(await fetch(`/api/role-profiles/${encodeURIComponent(P)}/${encodeURIComponent(ae.larkAppId)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:ae.content,allowEmpty:!0})})).ok));if(a)return;let Q=Z.filter(Boolean).length;if(Q!==f.length){g.textContent=e("groups.saveProfileFailed",{saved:Q,total:f.length}),g.className="g-save-profile-status error",L.disabled=!1,L.textContent=R==="overwrite"?e("groups.saveProfileOverwriteSubmit"):e("groups.saveProfileSubmit");return}if(g.textContent=e("groups.saveProfileDone",{name:P,count:Q}),g.className="g-save-profile-status ok",await x(),a)return;T(()=>l.close(),700)}catch(Z){g.textContent=String(Z),g.className="g-save-profile-status error",L.disabled=!1,L.textContent=R==="overwrite"?e("groups.saveProfileOverwriteSubmit"):e("groups.saveProfileSubmit")}}}let ne=async t=>{let s=t.target.closest("button.manage-chat");if(!s)return;let n=s.closest("tr[data-chat]").dataset.chat,o=S.chats.find(r=>r.chatId===n);o&&Le(o)};k.addEventListener("click",ne);function Le(t){let s=t.memberBots.filter(n=>n.inChat),f=typeof t.ownerId=="string"?t.ownerId:"";l.innerHTML=`
|
|
158
|
-
<article>
|
|
159
|
-
<header><h3>${e("groups.manageTitle",{name:t.name??t.chatId})}</h3></header>
|
|
160
|
-
<p><b>chatId:</b> <code>${i(t.chatId)}</code></p>
|
|
161
|
-
<p><b>${e("groups.owner")}:</b> <code>${i(t.ownerId??e("common.unknown"))}</code></p>
|
|
162
|
-
|
|
163
|
-
<fieldset>
|
|
164
|
-
<legend>${e("groups.oncall")}</legend>
|
|
165
|
-
<p><small>${e("groups.oncallHelp")}</small></p>
|
|
166
|
-
${s.length===0?'<p class="empty">\u6CA1\u6709\u673A\u5668\u4EBA\u5728\u7FA4\u91CC</p>':s.map(n=>{let o=!!n.oncallChat,r=n.oncallChat?.workingDir??"";return`
|
|
167
|
-
<div class="oncall-row" data-bot="${i(n.larkAppId)}">
|
|
168
|
-
<label class="checkbox-row">
|
|
169
|
-
<input type="checkbox" data-action="toggle" ${o?"checked":""}>
|
|
170
|
-
<strong>${i(n.botName??n.larkAppId)}</strong>
|
|
171
|
-
<small>(${i(n.larkAppId)})</small>
|
|
172
|
-
</label>
|
|
173
|
-
<div class="oncall-row-body">
|
|
174
|
-
<input type="text" data-input="workingDir" placeholder="e.g. /root/iserver/botmux"
|
|
175
|
-
value="${i(r)}" ${o?"":"disabled"}>
|
|
176
|
-
<button type="button" data-action="save">${e("groups.save")}</button>
|
|
177
|
-
<span class="oncall-status" data-status></span>
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
|
180
|
-
`}).join("")}
|
|
181
|
-
</fieldset>
|
|
182
|
-
|
|
183
|
-
<fieldset>
|
|
184
|
-
<legend>${e("groups.leaveTitle")}</legend>
|
|
185
|
-
${s.length===0?'<p class="empty">\u6CA1\u6709\u673A\u5668\u4EBA\u5728\u7FA4\u91CC</p>':s.map(n=>`
|
|
186
|
-
<label class="checkbox-row">
|
|
187
|
-
<input type="checkbox" name="leave-bot" value="${i(n.larkAppId)}">
|
|
188
|
-
${i(n.botName??n.larkAppId)}
|
|
189
|
-
<small>${n.larkAppId===f?"\xB7 \u7FA4\u4E3B":""}</small>
|
|
190
|
-
</label>
|
|
191
|
-
`).join("")}
|
|
192
|
-
</fieldset>
|
|
193
|
-
|
|
194
|
-
<div class="actions">
|
|
195
|
-
<button id="g-leave-btn" type="button" ${s.length===0?"disabled":""}>${e("groups.leaveSelected")}</button>
|
|
196
|
-
<button id="g-disband-btn" type="button" class="contrast" ${s.length===0?"disabled":""}>${e("groups.disband")}</button>
|
|
197
|
-
</div>
|
|
198
|
-
<p class="hint-warn"><small>${e("groups.dangerHint")}</small></p>
|
|
199
|
-
<form method="dialog"><button>${e("sessions.dismiss")}</button></form>
|
|
200
|
-
</article>`,l.showModal(),l.querySelectorAll(".oncall-row").forEach(n=>{let o=n.dataset.bot,r=n.querySelector("input[data-action=toggle]"),m=n.querySelector("input[data-input=workingDir]"),c=n.querySelector("button[data-action=save]"),p=n.querySelector("[data-status]");r.addEventListener("change",()=>{m.disabled=!r.checked,r.checked&&m.focus()}),c.addEventListener("click",async()=>{p.textContent="",p.className="oncall-status";let h=r.checked,y=m.value.trim();if(h&&!y){p.textContent=e("groups.needWorkingDir"),p.classList.add("hint-warn-inline");return}c.disabled=!0;try{let u=`/api/groups/${encodeURIComponent(t.chatId)}/oncall/${encodeURIComponent(o)}`,w=h?await fetch(u,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({workingDir:y})}):await fetch(u,{method:"DELETE"}),g=await w.json().catch(()=>({}));if(a)return;if(w.ok&&g.ok){p.textContent=h?`\u2713 \u5DF2\u7ED1\u5B9A \u2192 ${g.resolvedPath??y}`:"\u2713 \u5DF2\u89E3\u7ED1",p.classList.add("hint-ok");try{if(await O(),a)return;B(),x()}catch{}}else p.textContent=`\u2717 ${g.error??w.status}`,p.classList.add("hint-warn-inline")}catch(u){p.textContent=`\u2717 ${u?.message??u}`,p.classList.add("hint-warn-inline")}finally{c.disabled=!1}})}),l.querySelector("#g-leave-btn").onclick=async()=>{let n=[...l.querySelectorAll("input[name=leave-bot]:checked")].map(o=>o.value);if(n.length===0){alert("\u81F3\u5C11\u9009\u4E00\u4E2A\u673A\u5668\u4EBA");return}if(confirm(`\u786E\u5B9A\u8BA9 ${n.length} \u4E2A\u673A\u5668\u4EBA\u9000\u51FA\u7FA4\u804A\uFF1F\u8BE5 bot \u5728\u6B64\u7FA4\u7684\u4F1A\u8BDD\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))try{let r=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/leave`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:n})})).json();if(a)return;let m=(r.result??[]).map(c=>{if(!c.ok)return`${c.larkAppId}: \u5931\u8D25 (${c.error??"unknown"})`;let p=c.closedSessions??[],h=p.filter(w=>!w.ok).length,y=p.length-h,u=p.length===0?"":h===0?`\uFF08\u5173\u95ED ${y} \u4E2A\u4F1A\u8BDD\uFF09`:`\uFF08\u5173\u95ED ${y} \u4E2A\uFF0C${h} \u4E2A\u5931\u8D25\uFF09`;return`${c.larkAppId}: OK${u}`}).join(`
|
|
201
|
-
`);if(alert(m||`Unexpected: ${JSON.stringify(r)}`),await O(),a)return;B(),x()}catch(o){alert("Network error: "+o)}finally{a||l.close()}},l.querySelector("#g-disband-btn").onclick=async()=>{if(s.length===0||!confirm(`\u786E\u5B9A\u89E3\u6563\u7FA4\u804A\u300C${t.name??t.chatId}\u300D\uFF1F\u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\uFF0C\u672C\u7FA4\u6240\u6709\u673A\u5668\u4EBA\u4F1A\u8BDD\u4E5F\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))return;let n=[...s].sort((r,m)=>(m.larkAppId===f?1:0)-(r.larkAppId===f?1:0)),o=[];for(let r of n)try{let m=await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/disband`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppId:r.larkAppId})}),c=await m.json();if(a)return;if(c.ok){let p=c.closedSessions??[],h=p.filter(w=>!w.ok).length,y=p.length-h,u=p.length===0?"":h===0?`
|
|
202
|
-
\u5173\u95ED\u4E86 ${y} \u4E2A\u4F1A\u8BDD\u3002`:`
|
|
203
|
-
\u5173\u95ED\u4E86 ${y} \u4E2A\u4F1A\u8BDD\uFF0C${h} \u4E2A\u4F1A\u8BDD\u5173\u95ED\u5931\u8D25\u3002`;if(alert(`\u5DF2\u89E3\u6563\uFF08\u7531 ${r.botName??r.larkAppId} \u6267\u884C\uFF09${u}`),await O(),a)return;B(),x(),l.close();return}o.push(`${r.botName??r.larkAppId}: ${c.error??m.status}`)}catch(m){o.push(`${r.botName??r.larkAppId}: ${m}`)}alert(`\u6240\u6709\u5728\u7FA4\u673A\u5668\u4EBA\u5747\u65E0\u6CD5\u89E3\u6563\uFF1A
|
|
204
|
-
${o.join(`
|
|
205
|
-
`)}
|
|
206
|
-
|
|
207
|
-
\u5EFA\u8BAE\u6539\u7528\u300C\u9000\u51FA\u7FA4\u804A\u300D\u3002`)}}return A.addEventListener("input",B),()=>{a=!0;for(let t of b)window.clearTimeout(t);b.clear();for(let t of I.values())t();I.clear(),U.onclick=null,F.onclick=null,A.removeEventListener("input",B),k.removeEventListener("click",te),k.removeEventListener("click",oe),k.removeEventListener("click",ne),l.open&&l.close(),l.replaceChildren()}}var $=X(ce(),1);function Ne(d){return(0,$.jsx)("span",{style:{display:"contents"},dangerouslySetInnerHTML:{__html:d.html}})}function qe(){let d=de(),a=(0,W.useRef)(null);return(0,W.useEffect)(()=>{if(a.current)return ye(a.current)},[]),(0,$.jsxs)("section",{className:"page",ref:a,children:[(0,$.jsx)("div",{className:"page-heading",children:(0,$.jsxs)("div",{children:[(0,$.jsx)("p",{className:"eyebrow",children:d("nav.groups")}),(0,$.jsx)("h1",{children:d("groups.title")}),(0,$.jsx)("p",{children:d("groups.subtitle")})]})}),(0,$.jsxs)("form",{id:"g-filters",className:"filters",children:[(0,$.jsx)("input",{type:"search",name:"q",placeholder:d("groups.search")}),(0,$.jsxs)("label",{children:[(0,$.jsx)("input",{type:"checkbox",name:"missing"})," ",d("groups.missingOnly")]}),(0,$.jsx)("button",{type:"button",id:"g-refresh",children:d("groups.refresh")}),(0,$.jsx)("button",{type:"button",id:"g-create",className:"primary",children:d("groups.create")})]}),(0,$.jsx)("div",{id:"g-loading",children:(0,$.jsx)(Ne,{html:ie()})}),(0,$.jsx)("div",{className:"table-scroll matrix-scroll",id:"g-table-wrap",hidden:!0,children:(0,$.jsxs)("table",{children:[(0,$.jsx)("thead",{id:"g-head"}),(0,$.jsx)("tbody",{id:"g-body"})]})}),(0,$.jsx)("dialog",{id:"g-drawer"})]})}function We(d){return le(d,(0,$.jsx)(qe,{}))}export{We as renderGroupsPage};
|