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,438 +0,0 @@
|
|
|
1
|
-
import{b as Pe}from"./chunk-PE6W3C2C.js";import{a as Ce}from"./chunk-LXIK7OUJ.js";import{o as e,p as d,r as Bt,t as He,y as Ot}from"./chunk-3UJYRR2Q.js";import{a as fa,b as Ie,c as qe}from"./chunk-JTSE5VP6.js";import{c as re}from"./chunk-7SZRL6FY.js";var Jt=re(fa(),1);var ba=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function Re(i){let r=i.trim();if(!r)return{targets:[],invalid:[]};if(r.startsWith("[")){let g;try{g=JSON.parse(r)}catch{return{targets:[],invalid:[r]}}if(!Array.isArray(g))return{targets:[],invalid:[r]};let $=[],x=[];for(let h of g){if(!h||typeof h!="object"||Array.isArray(h)){x.push(JSON.stringify(h));continue}let T=h,q={};for(let B of["openId","unionId","email","name"]){let v=T[B];typeof v=="string"&&v.trim()&&(q[B]=v.trim())}typeof T.userId=="string"&&T.userId.trim()&&(q.userId=T.userId.trim()),q.openId||q.unionId||q.email||q.userId?$.push(q):x.push(JSON.stringify(h))}return{targets:$,invalid:x}}let u=[],y=[];for(let g of r.split(/\r?\n/)){let $=g.indexOf("#"),x=$>=0?g.slice($+1).trim():"",h=($>=0?g.slice(0,$):g).trim();if(!h)continue;let T=x||void 0;h.startsWith("ou_")?u.push({openId:h,name:T}):h.startsWith("on_")?u.push({unionId:h,name:T}):ba.test(h)?u.push({email:h,name:T}):y.push(h)}return{targets:u,invalid:y}}function Ae(i){let r=Array.isArray(i?.targets)?i.targets:Array.isArray(i)?i:[],u=[];for(let y of r){if(!y||typeof y!="object")continue;let g=String(y.email??y.openId??y.unionId??y.userId??"").trim();if(!g)continue;let $=typeof y.name=="string"?y.name.trim():"";u.push($&&$!==g?`${g} # ${$}`:g)}return u.join(`
|
|
2
|
-
`)}var L={bots:[]},ut=null,de=[{id:"claude-code",label:"Claude"},{id:"codex",label:"Codex"},{id:"traex",label:"traex"}],je=!1,Gt="glm-5.1",ue=[],ct=null;function ce(i,r){return typeof i?.cliId=="string"&&i.cliId?i.cliId:r}function ma(i){document.querySelector(".feishu-login-overlay")?.remove();let r=document.createElement("div");r.className="feishu-login-overlay",r.innerHTML=`
|
|
3
|
-
<div class="feishu-login-modal" role="dialog" aria-modal="true">
|
|
4
|
-
<button type="button" class="feishu-login-close" data-close aria-label="${d(e("feishuLogin.close"))}">\u2715</button>
|
|
5
|
-
<h3 class="feishu-login-title">${d(e("feishuLogin.title"))}</h3>
|
|
6
|
-
<p class="feishu-login-hint" data-hint>${d(e("feishuLogin.starting"))}</p>
|
|
7
|
-
<div class="feishu-login-qr" data-qr></div>
|
|
8
|
-
<div class="feishu-login-actions">
|
|
9
|
-
<button type="button" class="primary" data-retry hidden>${d(e("feishuLogin.retry"))}</button>
|
|
10
|
-
</div>
|
|
11
|
-
</div>`,document.body.appendChild(r);let u=r.querySelector("[data-hint]"),y=r.querySelector("[data-qr]"),g=r.querySelector("[data-retry]"),$=null,x=()=>{$!==null&&(window.clearInterval($),$=null)},h=()=>{x(),r.remove()};r.addEventListener("click",v=>{let M=v.target;(M===r||M.closest("[data-close]"))&&h()});function T(v){return v?v.status==="awaiting_scan"&&v.qrDataUrl?(y.innerHTML=`<img class="qr-image" src="${v.qrDataUrl}" alt="${d(e("feishuLogin.qrAlt"))}">`,u.textContent=v.message||e("feishuLogin.scanHint"),g.hidden=!0,"active"):v.status==="starting"?(u.textContent=v.message||e("feishuLogin.starting"),"active"):v.status==="success"?(x(),y.innerHTML="",u.textContent=e("feishuLogin.success"),window.setTimeout(()=>{h(),i()},900),"done"):(x(),y.innerHTML="",u.textContent=e("feishuLogin.failed",{reason:v.message||v.reason||""}),g.hidden=!1,"done"):"active"}async function q(){try{let M=await(await fetch("/api/feishu-login/status")).json().catch(()=>({}));T(M.login)}catch{}}async function B(){x(),u.textContent=e("feishuLogin.starting"),y.innerHTML="",g.hidden=!0;let v="active";try{let yt=await(await fetch("/api/feishu-login/start",{method:"POST"})).json().catch(()=>({}));v=T(yt.login)}catch(M){u.textContent=e("feishuLogin.failed",{reason:M?.message??String(M)}),g.hidden=!1;return}v==="active"&&$===null&&($=window.setInterval(()=>{q()},1500))}g.addEventListener("click",()=>{B()}),B()}var dt=new Map;function Ne(i){let r=null;for(let u of Ce.sessions.values())u.larkAppId!==i||!u.cliId||(!r||Number(u.lastMessageAt??0)>Number(r.lastMessageAt??0))&&(r=u);return r?.cliId??""}async function Be(){if(!je){je=!0;try{let i=await fetch("/api/cli-options"),r=await i.json().catch(()=>({}));i.ok&&Array.isArray(r?.options)&&(de=r.options.filter(u=>u&&typeof u.id=="string"&&typeof u.label=="string"),typeof r.ttadkModelDefault=="string"&&r.ttadkModelDefault.trim()&&(Gt=r.ttadkModelDefault.trim()),Array.isArray(r.ttadkModelSuggestions)&&(ue=r.ttadkModelSuggestions.filter(u=>typeof u=="string")))}catch{}}}function ga(i,r){let u=typeof i?.agentSelectionKey=="string"&&i.agentSelectionKey?i.agentSelectionKey:"";return u||ce(i,r)||"claude-code"}function Wt(i){return de.find(r=>r.id===i)}function We(i){let r=i.name&&i.name.trim()||i.input||"",u=i.ok?"#16a34a":"#dc2626",y=i.ok?"":` \xB7 ${e("botDefaults.substituteUnresolved")}`;return`<span style="display:inline-flex;align-items:center;gap:4px;padding:2px 9px;margin:0 6px 6px 0;border-radius:12px;font-size:12px;line-height:1.6;border:1px solid ${u}40;color:${u};background:${u}14"><span>${i.ok?"\u2713":"\u2717"}</span><span>${d(r)}${d(y)}</span></span>`}function ya(i){return(Array.isArray(i?.targets)?i.targets:[]).map(u=>We({ok:!0,name:typeof u?.name=="string"&&u.name||u?.email||u?.openId||u?.unionId||u?.userId,input:u?.email||u?.openId})).join("")}function ha(i){return!Array.isArray(i)||i.length===0?"":i.map(r=>We({ok:r?.ok===!0,name:r?.name,input:r?.input})).join("")}function va(i){return Array.isArray(i)?i.map(r=>{let u=String(r?.input??"").trim();return u?r?.ok&&typeof r?.name=="string"&&r.name.trim()?`${u} # ${r.name.trim()}`:u:""}).filter(Boolean).join(`
|
|
12
|
-
`):""}function Sa(i){return i?.gateway==="ttadk"&&i.acceptsModel!==!1?ue:[]}function $a(i,r){let u=ga(i,r),y=de.map(M=>`<option value="${d(M.id)}" ${M.id===u?"selected":""}>${d(M.label)}\uFF08${d(M.id)}\uFF09</option>`).join(""),g=typeof i?.model=="string"?i.model:"",$=Sa(Wt(u)),x=Wt(u)?.gateway==="ttadk"&&Wt(u)?.acceptsModel===!1,h=i?.skillInjectionSupport==="dynamic"?"dynamic":i?.skillInjectionSupport==="global"?"global":"none",T=i?.skillInjection==="global"||i?.skillInjection==="prompt"||i?.skillInjection==="off"?i.skillInjection:"",q=i?.skillInjectionDefault==="global"||i?.skillInjectionDefault==="off"?i.skillInjectionDefault:"prompt",B=T||q,v=h==="none"?"":h==="dynamic"?`<div class="bd-row">
|
|
13
|
-
<label>
|
|
14
|
-
<span>${e("botDefaults.skillInjection")}</span>
|
|
15
|
-
<select data-input="skillInjection" disabled>
|
|
16
|
-
<option value="dynamic" selected>${d(e("botDefaults.skillInjectionDynamic"))}</option>
|
|
17
|
-
</select>
|
|
18
|
-
</label>
|
|
19
|
-
<small class="bd-help">${e("botDefaults.skillInjectionHelpDynamic")}</small>
|
|
20
|
-
</div>`:`<div class="bd-row">
|
|
21
|
-
<label>
|
|
22
|
-
<span>${e("botDefaults.skillInjection")}</span>
|
|
23
|
-
<select data-input="skillInjection">
|
|
24
|
-
<option value="dynamic" disabled>${d(e("botDefaults.skillInjectionDynamicUnsupported"))}</option>
|
|
25
|
-
<option value="prompt" ${B==="prompt"?"selected":""}>${d(e("botDefaults.skillInjectionPrompt"))}</option>
|
|
26
|
-
<option value="global" ${B==="global"?"selected":""}>${d(e("botDefaults.skillInjectionGlobal"))}</option>
|
|
27
|
-
<option value="off" ${B==="off"?"selected":""}>${d(e("botDefaults.skillInjectionOff"))}</option>
|
|
28
|
-
</select>
|
|
29
|
-
</label>
|
|
30
|
-
<small class="bd-help">${e("botDefaults.skillInjectionHelp")}</small>
|
|
31
|
-
<div class="actions">
|
|
32
|
-
<span class="oncall-status" data-skill-injection-status></span>
|
|
33
|
-
</div>
|
|
34
|
-
</div>`;return`<section class="bd-section">
|
|
35
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionAgent")}</h3>
|
|
36
|
-
<div class="bd-row">
|
|
37
|
-
<label>
|
|
38
|
-
<span>${e("botDefaults.agentCli")}</span>
|
|
39
|
-
<select data-input="agentCliId">${y}</select>
|
|
40
|
-
</label>
|
|
41
|
-
</div>
|
|
42
|
-
<div class="bd-row">
|
|
43
|
-
<label>
|
|
44
|
-
<span>${e("botDefaults.agentModel")}</span>
|
|
45
|
-
<input type="text" data-input="agentModel" list="agent-model-suggestions-${d(i.larkAppId)}"
|
|
46
|
-
placeholder="${d(e("botDefaults.agentModelPlaceholder"))}"
|
|
47
|
-
value="${d(g)}" ${x?"disabled":""}>
|
|
48
|
-
<datalist id="agent-model-suggestions-${d(i.larkAppId)}">
|
|
49
|
-
${$.map(M=>`<option value="${d(M)}"></option>`).join("")}
|
|
50
|
-
</datalist>
|
|
51
|
-
</label>
|
|
52
|
-
<small class="bd-help">${e("botDefaults.agentHelp")}</small>
|
|
53
|
-
<div class="actions">
|
|
54
|
-
<button type="button" class="primary" data-action="save-agent">${e("botDefaults.agentSave")}</button>
|
|
55
|
-
<span class="oncall-status" data-agent-status></span>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
${v}
|
|
59
|
-
</section>`}async function Oe(){try{let i=await fetch("/api/bots"),r=await i.json().catch(()=>({}));if(!i.ok){ut=r?.error?`HTTP ${i.status}: ${r.error}${r.path?` (${r.path})`:""}`:`HTTP ${i.status}`,L={bots:[]};return}if(!r||!Array.isArray(r.bots)){ut="unexpected response shape (no `bots` array)",L={bots:[]};return}ut=null,L=r}catch(i){ut=i?.message??String(i),L={bots:[]}}}function Ge(i){if(!i)return"\u2014";let r=new Date(i);return Number.isNaN(r.getTime())?"\u2014":r.toLocaleString()}function Je(i){let r=i.querySelector("#bd-list"),u=i.querySelector("#bd-roster"),y=i.querySelector("#bd-filters"),g=i.querySelector("#bd-refresh"),$=!1,x=!1;g.onclick=async()=>{g.disabled=!0;try{dt.clear(),await Promise.all([Oe(),Be()]),nt()}finally{$||(g.disabled=!1)}};let h=t=>{let a=t.target.closest(".toggle-tx small, small.bd-help");a&&(t.preventDefault(),a.classList.toggle("open"))};r.addEventListener("click",h),r.innerHTML=Ot(),(async()=>(await Promise.all([Oe(),Be()]),x=!0,nt(),await He(),nt()))();function T(){let a=(new FormData(y).get("q")??"").toLowerCase(),p=L.bots.filter(m=>!a||(m.botName??"").toLowerCase().includes(a)||(m.larkAppId??"").toLowerCase().includes(a));if(ut){u.innerHTML="",r.innerHTML=`<p class="hint-warn">\u65E0\u6CD5\u52A0\u8F7D bot \u5217\u8868\uFF1A${d(ut)}<br>\u5E38\u89C1\u539F\u56E0\uFF1Adashboard / daemon \u8FDB\u7A0B\u8FD8\u5728\u8DD1\u65E7\u4EE3\u7801\uFF0C\u6267\u884C <code>botmux restart</code> \u540E\u5237\u65B0\u3002</p>`;return}if(p.length===0){u.innerHTML="",r.innerHTML=`<p class="empty">${e("botDefaults.empty")}</p>`;return}(!ct||!p.some(m=>m.larkAppId===ct))&&(ct=p[0].larkAppId),u.innerHTML=p.map(q).join(""),u.querySelectorAll(".bd-roster-item").forEach(m=>{m.onclick=()=>{ct=m.dataset.appid,nt()}});let f=p.find(m=>m.larkAppId===ct);r.innerHTML=B(f),la()}function q(t){let a=t.botName??t.larkAppId,p=ce(t,Ne(t.larkAppId)),f=t.defaultOncall?.enabled?'<span class="bd-roster-flag">oncall</span>':"";return`<div class="bd-roster-item${t.larkAppId===ct?" on":""}" data-appid="${d(t.larkAppId)}" role="button" tabindex="0">
|
|
60
|
-
${Bt({name:a,larkAppId:t.larkAppId,size:"sm"})}
|
|
61
|
-
<div class="bd-roster-tx">
|
|
62
|
-
<b>${d(a)}</b>
|
|
63
|
-
<span>${d(p||t.larkAppId.slice(0,14))}</span>
|
|
64
|
-
</div>
|
|
65
|
-
${f}
|
|
66
|
-
</div>`}function B(t){if(t.error)return`<article class="bd-card bd-profile" data-appid="${d(t.larkAppId)}">
|
|
67
|
-
<header class="bd-profile-head">
|
|
68
|
-
${Bt({name:t.botName??t.larkAppId,larkAppId:t.larkAppId})}
|
|
69
|
-
<div class="bd-profile-id"><strong>${d(t.botName??t.larkAppId)}</strong>
|
|
70
|
-
<code>${d(t.larkAppId)}</code></div>
|
|
71
|
-
</header>
|
|
72
|
-
<p class="hint-warn-inline">\u67E5\u8BE2\u5931\u8D25\uFF1A${d(t.error)}</p>
|
|
73
|
-
</article>`;let a=t.defaultOncall??{enabled:!1,workingDir:"",since:0},p=a.enabled?"oncall":t.defaultWorkingDir?"default":"off",f=t.defaultWorkingDir||a.workingDir||"",m=t.botName??t.larkAppId,D=ce(t,Ne(t.larkAppId));return`<article class="bd-card bd-profile" data-appid="${d(t.larkAppId)}">
|
|
74
|
-
<header class="bd-profile-head">
|
|
75
|
-
${Bt({name:m,larkAppId:t.larkAppId,dot:"ok"})}
|
|
76
|
-
<div class="bd-profile-id">
|
|
77
|
-
<span class="bd-name-row" data-name-row>
|
|
78
|
-
<strong data-bot-name>${d(m)}</strong>
|
|
79
|
-
<button type="button" class="bd-name-edit" data-action="edit-bot-name"
|
|
80
|
-
title="${d(e("botDefaults.renameTitle"))}" aria-label="${d(e("botDefaults.renameTitle"))}">
|
|
81
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"/></svg>
|
|
82
|
-
</button>
|
|
83
|
-
</span>
|
|
84
|
-
<span class="bd-name-editor" data-name-editor hidden>
|
|
85
|
-
<input type="text" class="bd-name-input" data-input="botRename" maxlength="64" value="${d(m)}">
|
|
86
|
-
<button type="button" class="primary" data-action="save-bot-name">${e("botDefaults.renameSave")}</button>
|
|
87
|
-
<button type="button" data-action="cancel-bot-name">${e("botDefaults.renameCancel")}</button>
|
|
88
|
-
</span>
|
|
89
|
-
${D?`<span class="mate-role">${d(D)}</span>`:""}
|
|
90
|
-
<code>${d(t.larkAppId)}</code>
|
|
91
|
-
<small class="bd-name-status oncall-status" data-name-status></small>
|
|
92
|
-
<button type="button" class="bd-feishu-login" data-action="feishu-login" hidden>${e("feishuLogin.entry")}</button>
|
|
93
|
-
</div>
|
|
94
|
-
<div class="bd-profile-meta bd-meta">
|
|
95
|
-
<small class="bd-meta-ok">\u25CF ${e("botDefaults.metaOnline")}</small>
|
|
96
|
-
<small data-oncall-since>${e("botDefaults.lastEnabled")}: ${d(Ge(a.since??0))}</small>
|
|
97
|
-
<small>${e("botDefaults.autobound",{count:t.autoboundChatCount??0})}</small>
|
|
98
|
-
</div>
|
|
99
|
-
</header>
|
|
100
|
-
<div class="bd-body bd-grid">
|
|
101
|
-
<section class="bd-tile">
|
|
102
|
-
${$a(t,D)}
|
|
103
|
-
<section class="bd-section">
|
|
104
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionWorkingDir")}</h3>
|
|
105
|
-
<div class="bd-row">
|
|
106
|
-
<label>
|
|
107
|
-
<span>${e("botDefaults.workingDirMode")}</span>
|
|
108
|
-
<select data-input="workingDirMode">
|
|
109
|
-
<option value="off" ${p==="off"?"selected":""}>${d(e("botDefaults.workingDirModeOff"))}</option>
|
|
110
|
-
<option value="default" ${p==="default"?"selected":""}>${d(e("botDefaults.workingDirModeDefault"))}</option>
|
|
111
|
-
<option value="oncall" ${p==="oncall"?"selected":""}>${d(e("botDefaults.workingDirModeOncall"))}</option>
|
|
112
|
-
</select>
|
|
113
|
-
</label>
|
|
114
|
-
<small class="bd-help">${e("botDefaults.workingDirModeHelp")}</small>
|
|
115
|
-
</div>
|
|
116
|
-
<div class="bd-row" data-wd-dir-row ${p==="off"?"hidden":""}>
|
|
117
|
-
<label>
|
|
118
|
-
<span>${e("botDefaults.workingDirField")}</span>
|
|
119
|
-
<input type="text" data-input="workingDir" placeholder="e.g. /root/iserver/botmux"
|
|
120
|
-
value="${d(f)}">
|
|
121
|
-
</label>
|
|
122
|
-
</div>
|
|
123
|
-
<label class="toggle-row" data-wd-worktree-row ${p==="default"?"":"hidden"}>
|
|
124
|
-
<input type="checkbox" data-input="autoWorktree" ${t.defaultWorkingDirAutoWorktree?"checked":""}>
|
|
125
|
-
<span class="switch" aria-hidden="true"></span>
|
|
126
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoWorktree")}</strong>
|
|
127
|
-
<small>${e("botDefaults.autoWorktreeHelp")}</small></span>
|
|
128
|
-
</label>
|
|
129
|
-
<div class="actions">
|
|
130
|
-
<button type="button" class="primary" data-action="save-working-dir">${e("botDefaults.save")}</button>
|
|
131
|
-
<span class="oncall-status" data-status></span>
|
|
132
|
-
</div>
|
|
133
|
-
${aa(t)}
|
|
134
|
-
</section>
|
|
135
|
-
${ta(t)}
|
|
136
|
-
</section>
|
|
137
|
-
<section class="bd-tile">${v(t)}</section>
|
|
138
|
-
<section class="bd-tile">${ze(t)}${Ke(t)}${_e(t)}${Ve(t)}${Ze(t)}${Xe(t)}${Ye(t)}</section>
|
|
139
|
-
<section class="bd-tile">${Fe(t)}${Qe(t)}${Ue(t)}</section>
|
|
140
|
-
<section class="bd-tile">${ea(t)}</section>
|
|
141
|
-
</div>
|
|
142
|
-
</article>`}function v(t){let a=typeof t.teamRole=="string";return`<section class="bd-section">
|
|
143
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionRole")}</h3>
|
|
144
|
-
<p class="bd-section-note">${e("botDefaults.roleHelp")}</p>
|
|
145
|
-
<textarea data-input="teamRole" rows="6"
|
|
146
|
-
placeholder="${d(e("botDefaults.rolePlaceholder"))}"
|
|
147
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px"${a?"":" disabled"}>${a?d(t.teamRole):""}</textarea>
|
|
148
|
-
<div class="actions">
|
|
149
|
-
<button type="button" class="primary" data-action="save-role"${a?"":" disabled"}>${e("botDefaults.roleSave")}</button>
|
|
150
|
-
<button type="button" data-action="delete-role"${a?"":" disabled"}>${e("botDefaults.roleDelete")}</button>
|
|
151
|
-
<span class="oncall-status" data-role-status></span>
|
|
152
|
-
</div>
|
|
153
|
-
<div class="bd-profile-roles" data-profile-roles>
|
|
154
|
-
<h4 class="bd-subsection-title">${e("botDefaults.profileRoles")}</h4>
|
|
155
|
-
<p class="bd-section-note">${e("botDefaults.profileRolesHelp")}</p>
|
|
156
|
-
<div class="bd-profile-role-list" data-profile-role-list>${M(t.larkAppId)}</div>
|
|
157
|
-
</div>
|
|
158
|
-
</section>`}function M(t){let a=dt.get(t);return!a||a.loading?Ot():a.error?`<p class="hint-warn-inline">${d(e("botDefaults.profileRolesLoadFailed",{error:a.error}))}</p>`:a.items.length===0?`<p class="empty">${e("botDefaults.profileRolesEmpty")}</p>`:a.items.map(p=>`
|
|
159
|
-
<details class="bd-profile-role-entry" data-profile-id="${d(p.profileId)}">
|
|
160
|
-
<summary><code>${d(p.profileId)}</code></summary>
|
|
161
|
-
<div class="bd-profile-role-content" data-profile-role-body="${d(p.profileId)}">
|
|
162
|
-
${yt(p)}
|
|
163
|
-
</div>
|
|
164
|
-
</details>
|
|
165
|
-
`).join("")}function yt(t){return t.loading?Ot():t.error?`<p class="hint-warn-inline">${d(e("botDefaults.profileRoleDetailLoadFailed",{error:t.error}))}</p>`:t.loaded?`<pre>${d(t.content??"")}</pre>`:`<p class="empty">${e("botDefaults.profileRoleClickToLoad")}</p>`}function pe(t){return t==null?e("botDefaults.brandStateDefault"):t.trim()===""?e("botDefaults.brandStateOff"):e("botDefaults.brandStateCustom")}function Ue(t){let a=t.brandLabel??null;return`<section class="bd-section">
|
|
166
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionBrand")}</h3>
|
|
167
|
-
<div class="bd-row bd-brand">
|
|
168
|
-
<label>
|
|
169
|
-
<span>${e("botDefaults.brandLabel")}</span>
|
|
170
|
-
<input type="text" data-input="brandLabel"
|
|
171
|
-
placeholder="${d(e("botDefaults.brandLabelPlaceholder"))}"
|
|
172
|
-
value="${d(a??"")}">
|
|
173
|
-
</label>
|
|
174
|
-
<small data-brand-state>${d(pe(a))}</small>
|
|
175
|
-
<small class="bd-help">${e("botDefaults.brandLabelHelp")}</small>
|
|
176
|
-
<div class="actions">
|
|
177
|
-
<button type="button" class="primary" data-action="save-brand">${e("botDefaults.brandSave")}</button>
|
|
178
|
-
<button type="button" data-action="reset-brand">${e("botDefaults.brandReset")}</button>
|
|
179
|
-
<span class="oncall-status" data-brand-status></span>
|
|
180
|
-
</div>
|
|
181
|
-
</div>
|
|
182
|
-
</section>`}function Fe(t){let a=t.disableStreamingCard===!0,p=t.silentTurnReactions===!0,f=t.writableTerminalLinkInCard===!0,m=t.privateCard===!0;return`<section class="bd-section">
|
|
183
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionCard")}</h3>
|
|
184
|
-
<label class="toggle-row">
|
|
185
|
-
<input type="checkbox" data-action="toggle-disable-streaming" ${a?"checked":""}>
|
|
186
|
-
<span class="switch" aria-hidden="true"></span>
|
|
187
|
-
<span class="toggle-tx"><strong>${e("botDefaults.disableStreaming")}</strong>
|
|
188
|
-
<small>${e("botDefaults.disableStreamingHelp")}</small></span>
|
|
189
|
-
</label>
|
|
190
|
-
<label class="toggle-row">
|
|
191
|
-
<input type="checkbox" data-action="toggle-silent-reactions" ${p?"checked":""} ${a?"":"disabled"}>
|
|
192
|
-
<span class="switch" aria-hidden="true"></span>
|
|
193
|
-
<span class="toggle-tx"><strong>${e("botDefaults.silentTurnReactions")}</strong>
|
|
194
|
-
<small>${e("botDefaults.silentTurnReactionsHelp")}</small></span>
|
|
195
|
-
</label>
|
|
196
|
-
<label class="toggle-row">
|
|
197
|
-
<input type="checkbox" data-action="toggle-writable-link" ${f?"checked":""} ${a?"disabled":""}>
|
|
198
|
-
<span class="switch" aria-hidden="true"></span>
|
|
199
|
-
<span class="toggle-tx"><strong>${e("botDefaults.writableLink")}</strong>
|
|
200
|
-
<small>${e("botDefaults.writableLinkHelp")}</small></span>
|
|
201
|
-
</label>
|
|
202
|
-
<label class="toggle-row">
|
|
203
|
-
<input type="checkbox" data-action="toggle-private-card" ${m?"checked":""}>
|
|
204
|
-
<span class="switch" aria-hidden="true"></span>
|
|
205
|
-
<span class="toggle-tx"><strong>${e("botDefaults.privateCard")}</strong>
|
|
206
|
-
<small>${e("botDefaults.privateCardHelp")}</small></span>
|
|
207
|
-
</label>
|
|
208
|
-
<div class="actions">
|
|
209
|
-
<small data-card-pref-moot class="hint-warn-inline" ${a?"":"hidden"}>${e("botDefaults.writableLinkMoot")}</small>
|
|
210
|
-
<span class="oncall-status" data-card-pref-status></span>
|
|
211
|
-
</div>
|
|
212
|
-
</section>`}function _e(t){let a=t.botToBotSameDir!==!1;return`<section class="bd-section">
|
|
213
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionCrossBot")}</h3>
|
|
214
|
-
<label class="toggle-row">
|
|
215
|
-
<input type="checkbox" data-action="toggle-cross-bot-samedir" ${a?"checked":""}>
|
|
216
|
-
<span class="switch" aria-hidden="true"></span>
|
|
217
|
-
<span class="toggle-tx"><strong>${e("botDefaults.botToBotSameDir")}</strong>
|
|
218
|
-
<small>${e("botDefaults.botToBotSameDirHelp")}</small></span>
|
|
219
|
-
</label>
|
|
220
|
-
<div class="actions"><span class="oncall-status" data-crossbot-status></span></div>
|
|
221
|
-
</section>`}function Qe(t){let a=t.summaryRange??{limit:50,sinceHours:24},p=Number.isInteger(a.limit)&&a.limit>=0?a.limit:50,f=Number.isInteger(a.sinceHours)&&a.sinceHours>=0?a.sinceHours:24;return`<section class="bd-section">
|
|
222
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSummaryTrigger")}</h3>
|
|
223
|
-
<div class="bd-row bd-summary-limits">
|
|
224
|
-
<label>
|
|
225
|
-
<span>${e("botDefaults.summaryLimit")}</span>
|
|
226
|
-
<input type="number" min="0" step="1" data-input="summaryLimit" value="${p}">
|
|
227
|
-
</label>
|
|
228
|
-
<label>
|
|
229
|
-
<span>${e("botDefaults.summarySinceHours")}</span>
|
|
230
|
-
<input type="number" min="0" step="1" data-input="summarySinceHours" value="${f}">
|
|
231
|
-
</label>
|
|
232
|
-
</div>
|
|
233
|
-
<small class="bd-help">${e("botDefaults.summaryLimitHelp")}</small>
|
|
234
|
-
<div class="actions">
|
|
235
|
-
<button type="button" class="primary" data-action="save-summary-trigger">${e("botDefaults.summarySave")}</button>
|
|
236
|
-
<span class="oncall-status" data-summary-trigger-status></span>
|
|
237
|
-
</div>
|
|
238
|
-
</section>`}function ze(t){let a=t.p2pMode==="chat"?"chat":"thread",p=t.regularGroupReplyMode==="new-topic"||t.regularGroupReplyMode==="shared"||t.regularGroupReplyMode==="chat-topic"?t.regularGroupReplyMode:"chat",f=t.regularGroupMentionMode==="topic"||t.regularGroupMentionMode==="never"||t.regularGroupMentionMode==="ambient"?t.regularGroupMentionMode:"always",m=t.docSubscribeDefaultMode==="all"?"all":"mention-only",D=(k,H)=>`<option value="${k}" ${p===k?"selected":""}>${d(H)}</option>`,W=(k,H)=>`<option value="${k}" ${f===k?"selected":""}>${d(H)}</option>`,J=(k,H)=>`<option value="${k}" ${m===k?"selected":""}>${d(H)}</option>`;return`<section class="bd-section">
|
|
239
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSessionMode")}</h3>
|
|
240
|
-
<div class="bd-row">
|
|
241
|
-
<label>
|
|
242
|
-
<span>${e("botDefaults.p2pMode")}</span>
|
|
243
|
-
<select data-input="p2pMode">
|
|
244
|
-
<option value="thread" ${a==="chat"?"":"selected"}>${d(e("botDefaults.p2pThread"))}</option>
|
|
245
|
-
<option value="chat" ${a==="chat"?"selected":""}>${d(e("botDefaults.p2pChat"))}</option>
|
|
246
|
-
</select>
|
|
247
|
-
</label>
|
|
248
|
-
<small class="bd-help">${e("botDefaults.p2pHelp")}</small>
|
|
249
|
-
<div class="actions">
|
|
250
|
-
<span class="oncall-status" data-p2p-status></span>
|
|
251
|
-
</div>
|
|
252
|
-
</div>
|
|
253
|
-
<div class="bd-row">
|
|
254
|
-
<label>
|
|
255
|
-
<span>${e("botDefaults.regularGroupMode")}</span>
|
|
256
|
-
<select data-input="regularGroupMode">
|
|
257
|
-
${D("chat",e("botDefaults.regularGroupModeChat"))}
|
|
258
|
-
${D("chat-topic",e("botDefaults.regularGroupModeChatTopic"))}
|
|
259
|
-
${D("new-topic",e("botDefaults.regularGroupModeNewTopic"))}
|
|
260
|
-
${D("shared",e("botDefaults.regularGroupModeShared"))}
|
|
261
|
-
</select>
|
|
262
|
-
</label>
|
|
263
|
-
<small class="bd-help">${e("botDefaults.regularGroupModeHelp")}</small>
|
|
264
|
-
<div class="actions">
|
|
265
|
-
<span class="oncall-status" data-regular-group-status></span>
|
|
266
|
-
</div>
|
|
267
|
-
</div>
|
|
268
|
-
<div class="bd-row">
|
|
269
|
-
<label>
|
|
270
|
-
<span>${e("botDefaults.mentionMode")}</span>
|
|
271
|
-
<select data-input="regularGroupMentionMode">
|
|
272
|
-
${W("always",e("botDefaults.mentionModeAlways"))}
|
|
273
|
-
${W("topic",e("botDefaults.mentionModeTopic"))}
|
|
274
|
-
${W("never",e("botDefaults.mentionModeNever"))}
|
|
275
|
-
${W("ambient",e("botDefaults.mentionModeAmbient"))}
|
|
276
|
-
</select>
|
|
277
|
-
</label>
|
|
278
|
-
<small class="bd-help">${e("botDefaults.mentionModeHelp")}</small>
|
|
279
|
-
<div class="actions">
|
|
280
|
-
<span class="oncall-status" data-mention-mode-status></span>
|
|
281
|
-
</div>
|
|
282
|
-
</div>
|
|
283
|
-
<div class="bd-row">
|
|
284
|
-
<label>
|
|
285
|
-
<span>${e("botDefaults.docSubscribeMode")}</span>
|
|
286
|
-
<select data-input="docSubscribeDefaultMode">
|
|
287
|
-
${J("mention-only",e("botDefaults.docSubscribeModeMention"))}
|
|
288
|
-
${J("all",e("botDefaults.docSubscribeModeAll"))}
|
|
289
|
-
</select>
|
|
290
|
-
</label>
|
|
291
|
-
<small class="bd-help">${e("botDefaults.docSubscribeModeHelp")}</small>
|
|
292
|
-
<div class="actions">
|
|
293
|
-
<span class="oncall-status" data-doc-subscribe-mode-status></span>
|
|
294
|
-
</div>
|
|
295
|
-
</div>
|
|
296
|
-
</section>`}function Ke(t){let a=t.substituteMode&&typeof t.substituteMode=="object"?t.substituteMode:null,p=a?.enabled===!0,f=a?.disclosure==="none"?"none":"prefix";return`<section class="bd-section">
|
|
297
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSubstitute")}</h3>
|
|
298
|
-
<label class="toggle-row">
|
|
299
|
-
<input type="checkbox" data-action="toggle-substitute-mode" ${p?"checked":""}>
|
|
300
|
-
<span class="switch" aria-hidden="true"></span>
|
|
301
|
-
<span class="toggle-tx"><strong>${e("botDefaults.substituteEnabled")}</strong>
|
|
302
|
-
<small>${e("botDefaults.substituteHelp")}</small></span>
|
|
303
|
-
</label>
|
|
304
|
-
<div class="bd-row">
|
|
305
|
-
<label>
|
|
306
|
-
<span>${e("botDefaults.substituteDisclosure")}</span>
|
|
307
|
-
<select data-input="substituteDisclosure">
|
|
308
|
-
<option value="prefix" ${f==="prefix"?"selected":""}>${d(e("botDefaults.substituteDisclosurePrefix"))}</option>
|
|
309
|
-
<option value="none" ${f==="none"?"selected":""}>${d(e("botDefaults.substituteDisclosureNone"))}</option>
|
|
310
|
-
</select>
|
|
311
|
-
</label>
|
|
312
|
-
</div>
|
|
313
|
-
<textarea data-input="substituteTargets" rows="5"
|
|
314
|
-
placeholder="${d(e("botDefaults.substituteTargetsPlaceholder"))}"
|
|
315
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${d(Ae(a))}</textarea>
|
|
316
|
-
<small class="bd-help">${e("botDefaults.substituteTargetsHelp")}</small>
|
|
317
|
-
<div class="substitute-chips" data-substitute-chips style="margin:6px 0 0">${ya(a)}</div>
|
|
318
|
-
<div class="actions">
|
|
319
|
-
<button type="button" class="primary" data-action="save-substitute-mode">${e("botDefaults.substituteSave")}</button>
|
|
320
|
-
<button type="button" data-action="off-substitute-mode">${e("botDefaults.substituteOff")}</button>
|
|
321
|
-
<span class="oncall-status" data-substitute-status></span>
|
|
322
|
-
</div>
|
|
323
|
-
</section>`}function fe(t){return t==null?e("botDefaults.maxLiveWorkersStateDefault"):e("botDefaults.maxLiveWorkersStateOn",{count:t})}function Ve(t){let a=typeof t.maxLiveWorkers=="number"?t.maxLiveWorkers:null;return`<div class="bd-subsection">
|
|
324
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionSessionCap")}</h4>
|
|
325
|
-
<div class="bd-row bd-quota">
|
|
326
|
-
<label>
|
|
327
|
-
<span>${e("botDefaults.maxLiveWorkers")}</span>
|
|
328
|
-
<input type="number" min="1" step="1" data-input="maxLiveWorkers"
|
|
329
|
-
placeholder="${d(e("botDefaults.maxLiveWorkersPlaceholder"))}"
|
|
330
|
-
value="${a??""}">
|
|
331
|
-
</label>
|
|
332
|
-
<small data-session-cap-state>${d(fe(a))}</small>
|
|
333
|
-
<small class="bd-help">${e("botDefaults.maxLiveWorkersHelp")}</small>
|
|
334
|
-
<div class="actions">
|
|
335
|
-
<button type="button" class="primary" data-action="save-session-cap">${e("botDefaults.maxLiveWorkersSave")}</button>
|
|
336
|
-
<button type="button" data-action="off-session-cap">${e("botDefaults.maxLiveWorkersOff")}</button>
|
|
337
|
-
<span class="oncall-status" data-session-cap-status></span>
|
|
338
|
-
</div>
|
|
339
|
-
</div>
|
|
340
|
-
</div>`}function Ze(t){let a=typeof t.startupCommands=="string"?t.startupCommands:"";return`<div class="bd-subsection">
|
|
341
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionStartupCommands")}</h4>
|
|
342
|
-
<p class="bd-section-note">${e("botDefaults.startupCommandsHelp")}</p>
|
|
343
|
-
<textarea data-input="startupCommands" rows="3"
|
|
344
|
-
placeholder="${d(e("botDefaults.startupCommandsPlaceholder"))}"
|
|
345
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${d(a)}</textarea>
|
|
346
|
-
<div class="actions">
|
|
347
|
-
<button type="button" class="primary" data-action="save-startup-commands">${e("botDefaults.startupCommandsSave")}</button>
|
|
348
|
-
<span class="oncall-status" data-startup-commands-status></span>
|
|
349
|
-
</div>
|
|
350
|
-
</div>`}function Xe(t){let a=typeof t.launchShell=="string"?t.launchShell:"";return`<div class="bd-subsection">
|
|
351
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionLaunchShell")}</h4>
|
|
352
|
-
<p class="bd-section-note">${e("botDefaults.launchShellHelp")}</p>
|
|
353
|
-
<input type="text" data-input="launchShell"
|
|
354
|
-
placeholder="${d(e("botDefaults.launchShellPlaceholder"))}"
|
|
355
|
-
value="${d(a)}"
|
|
356
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">
|
|
357
|
-
<div class="actions">
|
|
358
|
-
<button type="button" class="primary" data-action="save-launch-shell">${e("botDefaults.launchShellSave")}</button>
|
|
359
|
-
<span class="oncall-status" data-launch-shell-status></span>
|
|
360
|
-
</div>
|
|
361
|
-
</div>`}function Ye(t){let a=typeof t.env=="string"?t.env:"";return`<div class="bd-subsection">
|
|
362
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionEnv")}</h4>
|
|
363
|
-
<p class="bd-section-note">${e("botDefaults.envHelp")}</p>
|
|
364
|
-
<textarea data-input="env" rows="5"
|
|
365
|
-
placeholder="${d(e("botDefaults.envPlaceholder"))}"
|
|
366
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${d(a)}</textarea>
|
|
367
|
-
<div class="actions">
|
|
368
|
-
<button type="button" class="primary" data-action="save-env">${e("botDefaults.envSave")}</button>
|
|
369
|
-
<span class="oncall-status" data-env-status></span>
|
|
370
|
-
</div>
|
|
371
|
-
</div>`}function ta(t){let a=t.sandbox===!0;return`<section class="bd-section">
|
|
372
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSandbox")}</h3>
|
|
373
|
-
<label class="toggle-row">
|
|
374
|
-
<input type="checkbox" data-action="toggle-sandbox" ${a?"checked":""}>
|
|
375
|
-
<span class="switch" aria-hidden="true"></span>
|
|
376
|
-
<span class="toggle-tx"><strong>${e("botDefaults.sandboxToggle")}</strong>
|
|
377
|
-
<small>${e("botDefaults.sandboxHelp")}</small></span>
|
|
378
|
-
</label>
|
|
379
|
-
<div class="actions">
|
|
380
|
-
<span class="oncall-status" data-sandbox-status></span>
|
|
381
|
-
</div>
|
|
382
|
-
</section>`}function be(t){return t==null?e("botDefaults.quotaStateOff"):e("botDefaults.quotaStateOn",{count:t})}function ea(t){let a=t.restrictGrantCommands===!0,p=t.autoGrantRequestCards!==!1,f=typeof t.messageQuotaDefaultLimit=="number"?t.messageQuotaDefaultLimit:null;return`<section class="bd-section">
|
|
383
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionGrant")}</h3>
|
|
384
|
-
<label class="toggle-row">
|
|
385
|
-
<input type="checkbox" data-action="toggle-auto-grant-card" ${p?"checked":""}>
|
|
386
|
-
<span class="switch" aria-hidden="true"></span>
|
|
387
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoGrantCard")}</strong>
|
|
388
|
-
<small>${e("botDefaults.autoGrantCardHelp")}</small></span>
|
|
389
|
-
</label>
|
|
390
|
-
<label class="toggle-row">
|
|
391
|
-
<input type="checkbox" data-action="toggle-restrict-grant" ${a?"checked":""}>
|
|
392
|
-
<span class="switch" aria-hidden="true"></span>
|
|
393
|
-
<span class="toggle-tx"><strong>${e("botDefaults.restrictGrant")}</strong>
|
|
394
|
-
<small>${e("botDefaults.restrictGrantHelp")}</small></span>
|
|
395
|
-
</label>
|
|
396
|
-
<div class="bd-row bd-quota">
|
|
397
|
-
<label>
|
|
398
|
-
<span>${e("botDefaults.quotaDefault")}</span>
|
|
399
|
-
<input type="number" min="1" step="1" data-input="quotaLimit"
|
|
400
|
-
placeholder="${d(e("botDefaults.quotaPlaceholder"))}"
|
|
401
|
-
value="${f??""}">
|
|
402
|
-
</label>
|
|
403
|
-
<small data-quota-state>${d(be(f))}</small>
|
|
404
|
-
<small class="bd-help">${e("botDefaults.quotaHelp")}</small>
|
|
405
|
-
<div class="actions">
|
|
406
|
-
<button type="button" class="primary" data-action="save-quota">${e("botDefaults.quotaSave")}</button>
|
|
407
|
-
<button type="button" data-action="off-quota">${e("botDefaults.quotaOff")}</button>
|
|
408
|
-
<span class="oncall-status" data-grant-status></span>
|
|
409
|
-
</div>
|
|
410
|
-
</div>
|
|
411
|
-
</section>`}function aa(t){let a=t.autoStartOnGroupJoin===!0,p=t.autoStartOnNewTopic===!0,f=typeof t.autoStartOnGroupJoinPrompt=="string"?t.autoStartOnGroupJoinPrompt:"";return`<div class="bd-subsection">
|
|
412
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionAutoStart")}</h4>
|
|
413
|
-
<label class="toggle-row">
|
|
414
|
-
<input type="checkbox" data-action="toggle-auto-join" ${a?"checked":""}>
|
|
415
|
-
<span class="switch" aria-hidden="true"></span>
|
|
416
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoStartJoin")}</strong>
|
|
417
|
-
<small>${e("botDefaults.autoStartJoinHelp")}</small></span>
|
|
418
|
-
</label>
|
|
419
|
-
<div class="bd-row">
|
|
420
|
-
<label>
|
|
421
|
-
<span>${e("botDefaults.autoStartJoinPrompt")}</span>
|
|
422
|
-
<textarea data-input="autoJoinPrompt" rows="3"
|
|
423
|
-
placeholder="${d(e("botDefaults.autoStartJoinPromptPlaceholder"))}">${d(f)}</textarea>
|
|
424
|
-
</label>
|
|
425
|
-
<div class="actions">
|
|
426
|
-
<button type="button" class="primary" data-action="save-auto-join-prompt">${e("botDefaults.autoStartJoinPromptSave")}</button>
|
|
427
|
-
</div>
|
|
428
|
-
</div>
|
|
429
|
-
<label class="toggle-row">
|
|
430
|
-
<input type="checkbox" data-action="toggle-auto-topic" ${p?"checked":""}>
|
|
431
|
-
<span class="switch" aria-hidden="true"></span>
|
|
432
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoStartTopic")}</strong>
|
|
433
|
-
<small>${e("botDefaults.autoStartTopicHelp")}</small></span>
|
|
434
|
-
</label>
|
|
435
|
-
<div class="actions">
|
|
436
|
-
<span class="oncall-status" data-auto-start-status></span>
|
|
437
|
-
</div>
|
|
438
|
-
</div>`}function me(t){return r.querySelector(`.bd-card[data-appid="${CSS.escape(t)}"]`)}function Ut(t,a){let p=t?.querySelector("[data-profile-role-list]");p&&(p.innerHTML=M(a),sa(t,a))}async function na(t,a){let p=dt.get(t);if(p?.loaded||p?.loading){Ut(a,t);return}p={loaded:!1,loading:!0,items:[]},dt.set(t,p),Ut(a,t);try{let f=await fetch("/api/role-profiles"),m=await f.json().catch(()=>({}));if(!f.ok)throw new Error(m?.error??String(f.status));let D=Array.isArray(m.profiles)?m.profiles:[];p.items=D.filter(W=>(W.botEntries??[]).some(J=>J?.larkAppId===t&&J?.hasEntry)).map(W=>({profileId:String(W.profileId)})),p.loaded=!0}catch(f){p.error=f?.message??String(f),p.loaded=!0}finally{p.loading=!1,Ut(me(t),t)}}function sa(t,a){t.querySelectorAll("details.bd-profile-role-entry[data-profile-id]").forEach(p=>{p.addEventListener("toggle",()=>{if(!p.open)return;let f=p.dataset.profileId;f&&oa(a,f)})})}async function oa(t,a){let f=dt.get(t)?.items.find(m=>m.profileId===a);if(!(!f||f.loaded||f.loading)){f.loading=!0,ge(t,a);try{let m=await fetch(`/api/role-profiles/${encodeURIComponent(a)}/${encodeURIComponent(t)}`),D=await m.json().catch(()=>({}));if(!m.ok)throw new Error(D?.error??String(m.status));f.content=D?.hasEntry?String(D.content??""):"",f.loaded=!0}catch(m){f.error=m?.message??String(m)}finally{f.loading=!1,ge(t,a)}}}function ge(t,a){let f=dt.get(t)?.items.find(D=>D.profileId===a);if(!f)return;let m=me(t)?.querySelector(`[data-profile-role-body="${CSS.escape(a)}"]`);m&&(m.innerHTML=yt(f))}function la(){r.querySelectorAll(".bd-card").forEach(t=>{let a=t.dataset.appid;na(a,t);let p=t.querySelector("select[data-input=workingDirMode]"),f=t.querySelector("input[data-input=workingDir]"),m=t.querySelector("[data-wd-dir-row]"),D=t.querySelector("[data-wd-worktree-row]"),W=t.querySelector("input[data-input=autoWorktree]"),J=t.querySelector("button[data-action=save-working-dir]"),k=t.querySelector("[data-status]");if(!p||!f||!J||!k)return;let H=t.querySelector("select[data-input=agentCliId]"),E=t.querySelector("input[data-input=agentModel]"),ht=t.querySelector("button[data-action=save-agent]"),F=t.querySelector("[data-agent-status]");function ye(){if(!H||!E)return;let n=t.querySelector(`#agent-model-suggestions-${CSS.escape(a)}`),o=Wt(H.value),s=o?.gateway==="ttadk",c=s&&o.acceptsModel!==!1;if(s&&!c){n&&(n.innerHTML=""),E.value="",E.disabled=!0,E.placeholder=e("botOnboarding.modelTtadkCocoPlaceholder");return}E.disabled=!1,c?(n&&(n.innerHTML=ue.map(l=>`<option value="${d(l)}"></option>`).join("")),E.placeholder=e("botOnboarding.modelTtadkPlaceholder").replace("{model}",Gt),E.value.trim()||(E.value=Gt)):(n&&(n.innerHTML=""),E.placeholder=e("botDefaults.agentModelPlaceholder"),E.value.trim()===Gt&&(E.value=""))}H&&E&&ht&&F&&(H.addEventListener("change",ye),ht.addEventListener("click",async()=>{F.textContent="",F.className="oncall-status",ht.disabled=!0,H.disabled=!0,E.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/agent`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({cliId:H.value,model:E.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){F.textContent=`\u2713 ${e("botDefaults.agentSaved")}`,F.classList.add("hint-ok");let s=L.bots.find(c=>c.larkAppId===a);s&&(s.cliId=o.cliId,s.wrapperCli=o.wrapperCli??null,s.model=o.model??"",s.agentSelectionKey=o.selectionKey??H.value)}else F.textContent=`\u2717 ${o.error??n.status}`,F.classList.add("hint-warn-inline")}catch(n){F.textContent=`\u2717 ${n?.message??n}`,F.classList.add("hint-warn-inline")}finally{ht.disabled=!1,H.disabled=!1,E.disabled=!1,ye()}})),p.addEventListener("change",()=>{let n=p.value==="off";m&&(m.hidden=n),D&&(D.hidden=p.value!=="default"),n||f.focus()}),J.addEventListener("click",async()=>{k.textContent="",k.className="oncall-status";let n=p.value,o=f.value.trim();if(n!=="off"&&!o){k.textContent=e("botDefaults.required"),k.classList.add("hint-warn-inline");return}let s=n==="default"&&!!W?.checked;J.disabled=!0;try{let c=await fetch(`/api/bots/${encodeURIComponent(a)}/working-dir-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({mode:n,workingDir:o,autoWorktree:s})}),l=await c.json().catch(()=>({}));if(c.ok&&l.ok){let b=l.resolvedPath?` \u2192 ${l.resolvedPath}`:"";k.textContent=`\u2713 ${e("botDefaults.workingDirSaved")}${b}`,k.classList.add("hint-ok");let S=L.bots.find(at=>at.larkAppId===a);S&&(l.defaultOncall&&(S.defaultOncall=l.defaultOncall),S.defaultWorkingDir=l.defaultWorkingDir??null,S.defaultWorkingDirAutoWorktree=l.defaultWorkingDirAutoWorktree===!0);let N=t.querySelector("[data-oncall-since]");N&&l.defaultOncall?.since!=null&&(N.textContent=`${e("botDefaults.lastEnabled")}: ${Ge(l.defaultOncall.since)}`)}else k.textContent=`\u2717 ${l.error??c.status}`,k.classList.add("hint-warn-inline")}catch(c){k.textContent=`\u2717 ${c?.message??c}`,k.classList.add("hint-warn-inline")}finally{J.disabled=!1}});let vt=t.querySelector("input[data-input=brandLabel]"),Ft=t.querySelector("button[data-action=save-brand]"),_t=t.querySelector("button[data-action=reset-brand]"),_=t.querySelector("[data-brand-status]"),he=t.querySelector("[data-brand-state]");async function ve(n,o){if(_){_.textContent="",_.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/brand-label`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({brandLabel:n})}),c=await s.json().catch(()=>({}));if(s.ok&&c.ok){let l=c.brandLabel??null;_.textContent="\u2713",_.classList.add("hint-ok"),vt&&(vt.value=l??""),he&&(he.textContent=pe(l));let b=L.bots.find(S=>S.larkAppId===a);b&&(b.brandLabel=l)}else _.textContent=`\u2717 ${c.error??s.status}`,_.classList.add("hint-warn-inline")}catch(s){_.textContent=`\u2717 ${s?.message??s}`,_.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}vt&&Ft&&Ft.addEventListener("click",()=>ve(vt.value,Ft)),_t&&_t.addEventListener("click",()=>ve(null,_t));let Se=t.querySelector("[data-name-row]"),$e=t.querySelector("[data-name-editor]"),Qt=t.querySelector("[data-bot-name]"),U=t.querySelector("input[data-input=botRename]"),Le=t.querySelector("button[data-action=edit-bot-name]"),st=t.querySelector("button[data-action=save-bot-name]"),ot=t.querySelector("button[data-action=cancel-bot-name]"),w=t.querySelector("[data-name-status]"),Q=t.querySelector("button[data-action=feishu-login]");function St(n){!Se||!$e||(Se.hidden=n,$e.hidden=!n,n&&U&&(U.value=Qt?.textContent??"",U.focus(),U.select()))}function ia(n,o){let c=["no_session","session_expired","no_access","unsupported_brand"].includes(n)?e(`botDefaults.renameWarn.${n}`):o||n;return e("botDefaults.renameLocalOnly",{reason:c})}async function zt(){if(!U||!w)return;let n=U.value.trim();if(!n){w.textContent=`\u2717 ${e("botDefaults.renameEmpty")}`,w.className="bd-name-status oncall-status hint-warn-inline";return}U.disabled=!0,st&&(st.disabled=!0),ot&&(ot.disabled=!0),w.className="bd-name-status oncall-status",w.textContent=`\u23F3 ${e("botDefaults.renaming")}`;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/rename`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({name:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){let c=typeof s.botName=="string"&&s.botName?s.botName:n,l=L.bots.find(S=>S.larkAppId===a);l&&(l.botName=c,s.mode==="feishu"?(l.larkBotName=n,l.displayName=null):l.displayName=n),Qt&&(Qt.textContent=c);let b=u.querySelector(`.bd-roster-item[data-appid="${CSS.escape(a)}"] .bd-roster-tx b`);if(b&&(b.textContent=c),St(!1),s.mode==="feishu")w.textContent=`\u2713 ${e("botDefaults.renameOkFeishu")}`,w.classList.add("hint-ok"),Q&&(Q.hidden=!0);else{w.textContent=`\u26A0 ${ia(String(s.warning??""),s.message)}`,w.classList.add("hint-warn-inline"),typeof s.message=="string"&&s.message&&(w.title=s.message);let S=s.warning==="no_session"||s.warning==="session_expired";Q&&(Q.hidden=!S)}}else w.textContent=`\u2717 ${e("botDefaults.renameFailed",{error:String(s.error??o.status)})}`,w.classList.add("hint-warn-inline")}catch(o){w.textContent=`\u2717 ${e("botDefaults.renameFailed",{error:o?.message??String(o)})}`,w.classList.add("hint-warn-inline")}finally{U.disabled=!1,st&&(st.disabled=!1),ot&&(ot.disabled=!1)}}Le&&Le.addEventListener("click",()=>{w&&(w.textContent="",w.className="bd-name-status oncall-status"),Q&&(Q.hidden=!0),St(!0)}),Q&&Q.addEventListener("click",()=>{ma(()=>{Q.hidden=!0,zt()})}),ot&&ot.addEventListener("click",()=>St(!1)),st&&st.addEventListener("click",()=>{zt()}),U&&U.addEventListener("keydown",n=>{n.key==="Enter"?(n.preventDefault(),zt()):n.key==="Escape"&&St(!1)});let lt=t.querySelector("input[data-action=toggle-disable-streaming]"),Y=t.querySelector("input[data-action=toggle-silent-reactions]"),tt=t.querySelector("input[data-action=toggle-writable-link]"),$t=t.querySelector("input[data-action=toggle-private-card]"),ra=t.querySelector("[data-card-pref-status]"),ke=t.querySelector("[data-card-pref-moot]");async function O(n,o,s=ra){if(s){s.textContent="",s.className="oncall-status",o.disabled=!0;try{let c=await fetch(`/api/bots/${encodeURIComponent(a)}/card-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),l=await c.json().catch(()=>({}));if(c.ok&&l.ok){s.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,s.classList.add("hint-ok");let b=L.bots.find(S=>S.larkAppId===a);b&&(b.disableStreamingCard=l.disableStreamingCard,b.silentTurnReactions=l.silentTurnReactions,b.writableTerminalLinkInCard=l.writableTerminalLinkInCard,b.privateCard=l.privateCard,b.botToBotSameDir=l.botToBotSameDir,b.autoStartOnGroupJoin=l.autoStartOnGroupJoin,b.autoStartOnGroupJoinPrompt=l.autoStartOnGroupJoinPrompt,b.autoStartOnNewTopic=l.autoStartOnNewTopic,b.regularGroupReplyMode=l.regularGroupReplyMode,b.regularGroupMentionMode=l.regularGroupMentionMode,b.docSubscribeDefaultMode=l.docSubscribeDefaultMode)}else s.textContent=`\u2717 ${l.error??c.status}`,s.classList.add("hint-warn-inline")}catch(c){s.textContent=`\u2717 ${c?.message??c}`,s.classList.add("hint-warn-inline")}finally{o===tt?o.disabled=!!lt?.checked:o===Y?o.disabled=!lt?.checked:o.disabled=!1}}}lt&<.addEventListener("change",()=>{let n=lt.checked;tt&&(tt.disabled=n),Y&&(Y.disabled=!n),ke&&(ke.hidden=!n),O({disableStreamingCard:n},lt)}),Y&&Y.addEventListener("change",()=>{O({silentTurnReactions:Y.checked},Y)}),tt&&tt.addEventListener("change",()=>{O({writableTerminalLinkInCard:tt.checked},tt)}),$t&&$t.addEventListener("change",()=>{O({privateCard:$t.checked},$t)});let Lt=t.querySelector("input[data-action=toggle-cross-bot-samedir]"),ca=t.querySelector("[data-crossbot-status]");Lt&&Lt.addEventListener("change",()=>{O({botToBotSameDir:Lt.checked},Lt,ca)});let Kt=t.querySelector("input[data-input=summaryLimit]"),Vt=t.querySelector("input[data-input=summarySinceHours]"),kt=t.querySelector("button[data-action=save-summary-trigger]"),G=t.querySelector("[data-summary-trigger-status]");function De(n,o){let s=n.value.trim();return s===""?o:/^(0|[1-9]\d*)$/.test(s)?Number(s):null}Kt&&Vt&&kt&&kt.addEventListener("click",async()=>{if(!G)return;G.textContent="",G.className="oncall-status";let n=De(Kt,50),o=De(Vt,24);if(n==null||o==null){G.textContent=`\u2717 ${e("botDefaults.summaryNumberInvalid")}`,G.classList.add("hint-warn-inline");return}kt.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/summary-range`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({limit:n,sinceHours:o})}),c=await s.json().catch(()=>({}));if(s.ok&&c.ok){G.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,G.classList.add("hint-ok");let l=c.summaryRange??{limit:n,sinceHours:o};Kt.value=String(Number.isInteger(l.limit)&&l.limit>=0?l.limit:n),Vt.value=String(Number.isInteger(l.sinceHours)&&l.sinceHours>=0?l.sinceHours:o);let b=L.bots.find(S=>S.larkAppId===a);b&&(b.summaryRange=l)}else G.textContent=`\u2717 ${c.error??s.status}`,G.classList.add("hint-warn-inline")}catch(s){G.textContent=`\u2717 ${s?.message??s}`,G.classList.add("hint-warn-inline")}finally{kt.disabled=!1}});let et=t.querySelector("input[data-action=toggle-sandbox]"),P=t.querySelector("[data-sandbox-status]");et&&et.addEventListener("change",async()=>{let n=et.checked;P&&(P.textContent="",P.className="oncall-status"),et.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/sandbox`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){P&&(P.textContent=`\u2713 ${e("botDefaults.sandboxSaved")}`,P.classList.add("hint-ok"));let c=L.bots.find(l=>l.larkAppId===a);c&&(c.sandbox=s.sandbox===!0)}else P&&(P.textContent=`\u2717 ${s.error??o.status}`,P.classList.add("hint-warn-inline")),et.checked=!n}catch(o){P&&(P.textContent=`\u2717 ${o?.message??o}`,P.classList.add("hint-warn-inline")),et.checked=!n}finally{et.disabled=!1}});let Dt=t.querySelector("input[data-action=toggle-auto-join]"),Mt=t.querySelector("input[data-action=toggle-auto-topic]"),Me=t.querySelector("textarea[data-input=autoJoinPrompt]"),Zt=t.querySelector("button[data-action=save-auto-join-prompt]"),Xt=t.querySelector("[data-auto-start-status]");Dt&&Dt.addEventListener("change",()=>{O({autoStartOnGroupJoin:Dt.checked},Dt,Xt)}),Mt&&Mt.addEventListener("change",()=>{O({autoStartOnNewTopic:Mt.checked},Mt,Xt)}),Me&&Zt&&Zt.addEventListener("click",()=>{O({autoStartOnGroupJoinPrompt:Me.value},Zt,Xt)});let pt=t.querySelector("select[data-input=p2pMode]"),z=t.querySelector("[data-p2p-status]");pt&&z&&pt.addEventListener("change",async()=>{let n=pt.value==="chat"?"chat":"thread";z.textContent="",z.className="oncall-status",pt.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/p2p-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({p2pMode:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){z.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,z.classList.add("hint-ok");let c=L.bots.find(l=>l.larkAppId===a);c&&(c.p2pMode=s.p2pMode==="chat"?"chat":"thread")}else z.textContent=`\u2717 ${s.error??o.status}`,z.classList.add("hint-warn-inline")}catch(o){z.textContent=`\u2717 ${o?.message??o}`,z.classList.add("hint-warn-inline")}finally{pt.disabled=!1}});let ft=t.querySelector("select[data-input=skillInjection]"),K=t.querySelector("[data-skill-injection-status]");ft&&K&&ft.addEventListener("change",async()=>{let n=ft.value;K.textContent="",K.className="oncall-status",ft.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/skill-injection`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({skillInjection:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){K.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,K.classList.add("hint-ok");let c=L.bots.find(l=>l.larkAppId===a);c&&(c.skillInjection=s.skillInjection??null)}else K.textContent=`\u2717 ${s.error??o.status}`,K.classList.add("hint-warn-inline")}catch(o){K.textContent=`\u2717 ${o?.message??o}`,K.classList.add("hint-warn-inline")}finally{ft.disabled=!1}});let wt=t.querySelector("select[data-input=regularGroupMode]"),da=t.querySelector("[data-regular-group-status]");wt&&wt.addEventListener("change",()=>{O({regularGroupReplyMode:wt.value},wt,da)});let xt=t.querySelector("select[data-input=regularGroupMentionMode]"),ua=t.querySelector("[data-mention-mode-status]");xt&&xt.addEventListener("change",()=>{O({regularGroupMentionMode:xt.value},xt,ua)});let Tt=t.querySelector("select[data-input=docSubscribeDefaultMode]"),pa=t.querySelector("[data-doc-subscribe-mode-status]");Tt&&Tt.addEventListener("change",()=>{O({docSubscribeDefaultMode:Tt.value},Tt,pa)});let Et=t.querySelector("input[data-action=toggle-substitute-mode]"),Ct=t.querySelector("select[data-input=substituteDisclosure]"),Ht=t.querySelector("textarea[data-input=substituteTargets]"),Yt=t.querySelector("button[data-action=save-substitute-mode]"),te=t.querySelector("button[data-action=off-substitute-mode]"),R=t.querySelector("[data-substitute-status]"),we=t.querySelector("[data-substitute-chips]");async function xe(n,o){if(R){R.textContent=e("botDefaults.substituteResolving"),R.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/substitute-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),c=await s.json().catch(()=>({}));if(we&&(we.innerHTML=ha(c.resolution)),s.ok&&c.ok){R.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,R.classList.add("hint-ok");let l=L.bots.find(b=>b.larkAppId===a);l&&(l.substituteMode=c.substituteMode??null),Et&&(Et.checked=!!c.substituteMode?.enabled),Ct&&(Ct.value=c.substituteMode?.disclosure==="none"?"none":"prefix"),Ht&&(Ht.value=va(c.resolution))}else{let l=c.error==="targets_required"?e("botDefaults.substituteTargetsRequired"):c.error??s.status;R.textContent=`\u2717 ${l}`,R.classList.add("hint-warn-inline")}}catch(s){R.textContent=`\u2717 ${s?.message??s}`,R.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}Yt&&Ht&&Ct&&Et&&Yt.addEventListener("click",()=>{if(!R)return;let{targets:n,invalid:o}=Re(Ht.value);if(o.length){R.textContent=`\u2717 ${e("botDefaults.substituteTargetsInvalid")}: ${o.join("; ")}`,R.className="oncall-status hint-warn-inline";return}xe({enabled:Et.checked,targets:n,disclosure:Ct.value==="none"?"none":"prefix"},Yt)}),te&&te.addEventListener("click",()=>{xe({enabled:!1,targets:[]},te)});let ee=t.querySelector("textarea[data-input=teamRole]"),bt=t.querySelector("button[data-action=save-role]"),mt=t.querySelector("button[data-action=delete-role]"),I=t.querySelector("[data-role-status]");if(ee&&bt&&mt&&I){let s=function(l){let b=r.querySelector(`.bd-card[data-appid="${CSS.escape(a)}"]`);if(!b)return;let S=b.querySelector("textarea[data-input=teamRole]"),N=b.querySelector("button[data-action=save-role]"),at=b.querySelector("button[data-action=delete-role]");S&&(S.value=l,S.disabled=!1),N&&(N.disabled=!1),at&&(at.disabled=!1)};var ka=s;let n=`/api/team/local-bots/${encodeURIComponent(a)}/role`,o=L.bots.find(l=>l.larkAppId===a);o&&typeof o.teamRole!="string"&&!o.teamRoleLoading&&(o.teamRoleLoading=!0,(async()=>{try{let l=await fetch(n),b=await l.json().catch(()=>({}));l.ok&&b.ok?(o.teamRole=b.role??"",s(o.teamRole)):(I.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${b.error??l.status}`,I.classList.add("hint-warn-inline"))}catch(l){I.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${l?.message??l}`,I.classList.add("hint-warn-inline")}finally{o.teamRoleLoading=!1}})());async function c(l,b,S){if(I&&!(!o||typeof o.teamRole!="string")){I.textContent="",I.className="oncall-status",bt.disabled=!0,mt.disabled=!0;try{let N=await fetch(n,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({role:l})}),at=await N.json().catch(()=>({}));N.ok&&at.ok?(o&&(o.teamRole=l.trim()),I.textContent=`\u2713 ${S?e("botDefaults.roleDeleted"):e("botDefaults.roleSaved")}`,I.classList.add("hint-ok")):(I.textContent=`\u2717 ${at.error??N.status}`,I.classList.add("hint-warn-inline"))}catch(N){I.textContent=`\u2717 ${N?.message??N}`,I.classList.add("hint-warn-inline")}finally{bt.disabled=!1,mt.disabled=!1}}}bt.addEventListener("click",()=>c(ee.value,bt,!1)),mt.addEventListener("click",()=>{ee.value="",c("",mt,!0)})}let It=t.querySelector("input[data-action=toggle-auto-grant-card]"),qt=t.querySelector("input[data-action=toggle-restrict-grant]"),it=t.querySelector("input[data-input=quotaLimit]"),Pt=t.querySelector("button[data-action=save-quota]"),ae=t.querySelector("button[data-action=off-quota]"),A=t.querySelector("[data-grant-status]"),Te=t.querySelector("[data-quota-state]");async function gt(n,o){if(A){A.textContent="",A.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/grant-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),c=await s.json().catch(()=>({}));if(s.ok&&c.ok){A.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,A.classList.add("hint-ok");let l=typeof c.messageQuotaDefaultLimit=="number"?c.messageQuotaDefaultLimit:null,b=L.bots.find(S=>S.larkAppId===a);b&&(b.autoGrantRequestCards=c.autoGrantRequestCards!==!1,b.restrictGrantCommands=c.restrictGrantCommands===!0,b.messageQuotaDefaultLimit=l),Te&&(Te.textContent=be(l)),it&&"messageQuotaDefaultLimit"in n&&(it.value=l==null?"":String(l))}else A.textContent=`\u2717 ${c.error??s.status}`,A.classList.add("hint-warn-inline")}catch(s){A.textContent=`\u2717 ${s?.message??s}`,A.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}It&&It.addEventListener("change",()=>{gt({autoGrantRequestCards:It.checked},It)}),qt&&qt.addEventListener("change",()=>{gt({restrictGrantCommands:qt.checked},qt)}),it&&Pt&&Pt.addEventListener("click",()=>{let n=it.value.trim();if(n===""){gt({messageQuotaDefaultLimit:null},Pt);return}if(!/^[1-9]\d*$/.test(n)){A&&(A.textContent=`\u2717 ${e("botDefaults.quotaInvalid")}`,A.className="oncall-status hint-warn-inline");return}gt({messageQuotaDefaultLimit:Number(n)},Pt)}),it&&ae&&ae.addEventListener("click",()=>{it.value="",gt({messageQuotaDefaultLimit:null},ae)});let rt=t.querySelector("input[data-input=maxLiveWorkers]"),Rt=t.querySelector("button[data-action=save-session-cap]"),ne=t.querySelector("button[data-action=off-session-cap]"),j=t.querySelector("[data-session-cap-status]"),Ee=t.querySelector("[data-session-cap-state]");async function se(n,o){if(j){j.textContent="",j.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/max-live-workers`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({maxLiveWorkers:n})}),c=await s.json().catch(()=>({}));if(s.ok&&c.ok){j.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,j.classList.add("hint-ok");let l=typeof c.maxLiveWorkers=="number"?c.maxLiveWorkers:null,b=L.bots.find(S=>S.larkAppId===a);b&&(b.maxLiveWorkers=l),Ee&&(Ee.textContent=fe(l)),rt&&(rt.value=l==null?"":String(l))}else j.textContent=`\u2717 ${c.error??s.status}`,j.classList.add("hint-warn-inline")}catch(s){j.textContent=`\u2717 ${s?.message??s}`,j.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}rt&&Rt&&Rt.addEventListener("click",()=>{let n=rt.value.trim();if(n===""){se(null,Rt);return}if(!/^[1-9]\d*$/.test(n)){j&&(j.textContent=`\u2717 ${e("botDefaults.maxLiveWorkersInvalid")}`,j.className="oncall-status hint-warn-inline");return}se(Number(n),Rt)}),rt&&ne&&ne.addEventListener("click",()=>{rt.value="",se(null,ne)});let oe=t.querySelector("textarea[data-input=startupCommands]"),At=t.querySelector("button[data-action=save-startup-commands]"),V=t.querySelector("[data-startup-commands-status]");oe&&At&&At.addEventListener("click",async()=>{if(V){V.textContent="",V.className="oncall-status",At.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/startup-commands`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({startupCommands:oe.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){V.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,V.classList.add("hint-ok");let s=typeof o.startupCommands=="string"?o.startupCommands:"";oe.value=s;let c=L.bots.find(l=>l.larkAppId===a);c&&(c.startupCommands=s)}else V.textContent=`\u2717 ${o.error??n.status}`,V.classList.add("hint-warn-inline")}catch(n){V.textContent=`\u2717 ${n?.message??n}`,V.classList.add("hint-warn-inline")}finally{At.disabled=!1}}});let le=t.querySelector("input[data-input=launchShell]"),jt=t.querySelector("button[data-action=save-launch-shell]"),Z=t.querySelector("[data-launch-shell-status]");le&&jt&&jt.addEventListener("click",async()=>{if(Z){Z.textContent="",Z.className="oncall-status",jt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/launch-shell`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({launchShell:le.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){Z.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,Z.classList.add("hint-ok");let s=typeof o.launchShell=="string"?o.launchShell:"";le.value=s;let c=L.bots.find(l=>l.larkAppId===a);c&&(c.launchShell=s)}else Z.textContent=`\u2717 ${o.error??n.status}`,Z.classList.add("hint-warn-inline")}catch(n){Z.textContent=`\u2717 ${n?.message??n}`,Z.classList.add("hint-warn-inline")}finally{jt.disabled=!1}}});let ie=t.querySelector("textarea[data-input=env]"),Nt=t.querySelector("button[data-action=save-env]"),X=t.querySelector("[data-env-status]");ie&&Nt&&Nt.addEventListener("click",async()=>{if(X){X.textContent="",X.className="oncall-status",Nt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/env`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({env:ie.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){X.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,X.classList.add("hint-ok");let s=typeof o.env=="string"?o.env:"";ie.value=s;let c=L.bots.find(l=>l.larkAppId===a);c&&(c.env=s)}else X.textContent=`\u2717 ${o.error??n.status}`,X.classList.add("hint-warn-inline")}catch(n){X.textContent=`\u2717 ${n?.message??n}`,X.classList.add("hint-warn-inline")}finally{Nt.disabled=!1}}})})}function nt(){!$&&x&&T()}return y.addEventListener("input",nt),()=>{$=!0,g.onclick=null,y.removeEventListener("input",nt),r.removeEventListener("click",h),u.replaceChildren(),r.replaceChildren()}}var C=re(qe(),1);function La(){let i=Pe(),r=(0,Jt.useRef)(null);return(0,Jt.useEffect)(()=>{if(r.current)return Je(r.current)},[]),(0,C.jsxs)("section",{className:"page",ref:r,children:[(0,C.jsx)("div",{className:"page-heading",children:(0,C.jsxs)("div",{children:[(0,C.jsx)("p",{className:"eyebrow",children:i("nav.botDefaults")}),(0,C.jsx)("h1",{children:i("botDefaults.title")}),(0,C.jsx)("p",{children:i("botDefaults.subtitle")})]})}),(0,C.jsxs)("form",{id:"bd-filters",className:"filters sessions-filters",children:[(0,C.jsx)("input",{type:"search",name:"q",placeholder:i("botDefaults.search")}),(0,C.jsx)("button",{type:"button",id:"bd-refresh",children:i("botDefaults.refresh")})]}),(0,C.jsxs)("div",{className:"bd-layout",children:[(0,C.jsx)("aside",{id:"bd-roster",className:"bd-roster"}),(0,C.jsx)("div",{id:"bd-list",className:"bd-detail"})]})]})}function Ia(i){return Ie(i,(0,C.jsx)(La,{}))}export{Ia as renderBotDefaultsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var s="botmux.dashboard.monitorRoom.sessions.v1",u="botmux.dashboard.monitorRoom.autoActiveWhenEmpty.v1";function r(){return typeof window>"u"?null:window.localStorage}function l(t){return typeof t=="string"?t.trim():""}function c(t=r()){if(!t)return[];try{let o=t.getItem(s),n=o?JSON.parse(o):[],e=Array.isArray(n)?n.map(l).filter(Boolean):[];return[...new Set(e)]}catch{return[]}}function a(t,o=r()){let n=[...new Set(t.map(l).filter(Boolean))];if(!o)return n;try{n.length?o.setItem(s,JSON.stringify(n)):o.removeItem(s)}catch{}return n}function g(t,o=r()){let n=c(o),e=new Set(n),i=a([...n,...t],o),m=i.filter(f=>!e.has(f)).length;return{ids:i,added:m,total:i.length}}function p(t,o=r()){let n=l(t);return a(c(o).filter(e=>e!==n),o)}function S(t=r()){a([],t)}function I(t=r()){if(!t)return!1;try{return t.getItem(u)==="1"}catch{return!1}}function x(t,o=r()){if(!o)return t;try{t?o.setItem(u,"1"):o.removeItem(u)}catch{}return t}function w(t=window.location){let o=new URL(t.href);return o.hash="#/monitor-room",o.toString()}function d(){return typeof window>"u"?null:window.location}function h(t,o=d()){if(!t?.webPort||!o)return null;if(o.protocol==="https:")return t.proxyPort?`${o.origin}/s/${encodeURIComponent(t.sessionId)}`:null;let n=t.proxyPort??t.webPort,e=t.proxyPort?`/s/${encodeURIComponent(t.sessionId)}`:"";return`http://${o.hostname}:${n}${e}`}export{c as a,g as b,p as c,S as d,I as e,x as f,w as g,h};
|