botmux 3.16.0 → 3.17.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/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +84 -1
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +202 -19
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +8 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +15 -0
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +61 -7
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +80 -9
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +62 -4
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +240 -27
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +4 -2
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +27 -0
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +28 -0
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +51 -23
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/dsh-tui.d.ts +24 -0
- package/dist/adapters/cli/dsh-tui.d.ts.map +1 -0
- package/dist/adapters/cli/dsh-tui.js +99 -0
- package/dist/adapters/cli/dsh-tui.js.map +1 -0
- package/dist/adapters/cli/dsh.d.ts.map +1 -1
- package/dist/adapters/cli/dsh.js +15 -9
- package/dist/adapters/cli/dsh.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts +98 -1
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
- package/dist/adapters/cli/fs-policy.js +182 -7
- package/dist/adapters/cli/fs-policy.js.map +1 -1
- package/dist/adapters/cli/grok.js +16 -18
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/model-catalog-json.d.ts +17 -0
- package/dist/adapters/cli/model-catalog-json.d.ts.map +1 -0
- package/dist/adapters/cli/model-catalog-json.js +43 -0
- package/dist/adapters/cli/model-catalog-json.js.map +1 -0
- package/dist/adapters/cli/oh-my-pi.d.ts +2 -0
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
- package/dist/adapters/cli/oh-my-pi.js +45 -13
- package/dist/adapters/cli/oh-my-pi.js.map +1 -1
- package/dist/adapters/cli/opencode.js +1 -1
- package/dist/adapters/cli/opencode.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 +6 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/relay.d.ts.map +1 -1
- package/dist/adapters/cli/relay.js +7 -0
- package/dist/adapters/cli/relay.js.map +1 -1
- package/dist/adapters/cli/seed.d.ts.map +1 -1
- package/dist/adapters/cli/seed.js +6 -0
- package/dist/adapters/cli/seed.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +20 -14
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts +4 -0
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +153 -0
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +42 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/autostart.d.ts +6 -0
- package/dist/autostart.d.ts.map +1 -1
- package/dist/autostart.js +21 -1
- package/dist/autostart.js.map +1 -1
- package/dist/bot-registry.d.ts +27 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +62 -2
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/vc-agent.d.ts.map +1 -1
- package/dist/cli/vc-agent.js +21 -3
- package/dist/cli/vc-agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +92 -1
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +28 -0
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/bot-steer-directive.d.ts +25 -0
- package/dist/core/bot-steer-directive.d.ts.map +1 -0
- package/dist/core/bot-steer-directive.js +47 -0
- package/dist/core/bot-steer-directive.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +102 -18
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +53 -13
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +3 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +26 -5
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +10 -1
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +12 -2
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/dispatch.d.ts.map +1 -1
- package/dist/core/dispatch.js +5 -4
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/existing-app-server.d.ts +22 -0
- package/dist/core/existing-app-server.d.ts.map +1 -0
- package/dist/core/existing-app-server.js +85 -0
- package/dist/core/existing-app-server.js.map +1 -0
- package/dist/core/native-topic-id.d.ts +9 -0
- package/dist/core/native-topic-id.d.ts.map +1 -0
- package/dist/core/native-topic-id.js +14 -0
- package/dist/core/native-topic-id.js.map +1 -0
- package/dist/core/per-bot-env.d.ts.map +1 -1
- package/dist/core/per-bot-env.js +10 -0
- package/dist/core/per-bot-env.js.map +1 -1
- package/dist/core/plugins/mcp/gateway.d.ts +27 -3
- package/dist/core/plugins/mcp/gateway.d.ts.map +1 -1
- package/dist/core/plugins/mcp/gateway.js +272 -26
- package/dist/core/plugins/mcp/gateway.js.map +1 -1
- package/dist/core/plugins/mcp/host.d.ts +18 -0
- package/dist/core/plugins/mcp/host.d.ts.map +1 -1
- package/dist/core/plugins/mcp/host.js +80 -16
- package/dist/core/plugins/mcp/host.js.map +1 -1
- package/dist/core/plugins/mcp/launch-record.d.ts +14 -0
- package/dist/core/plugins/mcp/launch-record.d.ts.map +1 -0
- package/dist/core/plugins/mcp/launch-record.js +63 -0
- package/dist/core/plugins/mcp/launch-record.js.map +1 -0
- package/dist/core/session-activity.d.ts +11 -0
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-activity.js +23 -0
- package/dist/core/session-activity.js.map +1 -1
- package/dist/core/session-group-birth.d.ts.map +1 -1
- package/dist/core/session-group-birth.js +23 -8
- package/dist/core/session-group-birth.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -4
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +16 -20
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/shared-adopt.d.ts +20 -0
- package/dist/core/shared-adopt.d.ts.map +1 -0
- package/dist/core/shared-adopt.js +26 -0
- package/dist/core/shared-adopt.js.map +1 -0
- package/dist/core/skills/customize-command.d.ts +7 -0
- package/dist/core/skills/customize-command.d.ts.map +1 -0
- package/dist/core/skills/customize-command.js +303 -0
- package/dist/core/skills/customize-command.js.map +1 -0
- package/dist/core/terminal-write-auth.d.ts +15 -0
- package/dist/core/terminal-write-auth.d.ts.map +1 -1
- package/dist/core/terminal-write-auth.js +15 -0
- package/dist/core/terminal-write-auth.js.map +1 -1
- package/dist/core/terminal-write-frame.d.ts +30 -0
- package/dist/core/terminal-write-frame.d.ts.map +1 -0
- package/dist/core/terminal-write-frame.js +44 -0
- package/dist/core/terminal-write-frame.js.map +1 -0
- package/dist/core/types.d.ts +14 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +6 -8
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +31 -6
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +444 -102
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/core/worker-startup-retry.d.ts +52 -0
- package/dist/core/worker-startup-retry.d.ts.map +1 -0
- package/dist/core/worker-startup-retry.js +68 -0
- package/dist/core/worker-startup-retry.js.map +1 -0
- package/dist/daemon.d.ts +9 -8
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +467 -171
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/autostart-api.d.ts +26 -0
- package/dist/dashboard/autostart-api.d.ts.map +1 -0
- package/dist/dashboard/autostart-api.js +88 -0
- package/dist/dashboard/autostart-api.js.map +1 -0
- package/dist/dashboard/bot-payload.d.ts +5 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +2 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/control-csrf.d.ts +29 -1
- package/dist/dashboard/control-csrf.d.ts.map +1 -1
- package/dist/dashboard/control-csrf.js +49 -10
- package/dist/dashboard/control-csrf.js.map +1 -1
- package/dist/dashboard/customization-api.d.ts +23 -0
- package/dist/dashboard/customization-api.d.ts.map +1 -0
- package/dist/dashboard/customization-api.js +198 -0
- package/dist/dashboard/customization-api.js.map +1 -0
- package/dist/dashboard/debug-terminal.d.ts +13 -1
- package/dist/dashboard/debug-terminal.d.ts.map +1 -1
- package/dist/dashboard/debug-terminal.js +18 -4
- package/dist/dashboard/debug-terminal.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +0 -23
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +7 -28
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/terminal-control-route.d.ts +32 -0
- package/dist/dashboard/terminal-control-route.d.ts.map +1 -0
- package/dist/dashboard/terminal-control-route.js +70 -0
- package/dist/dashboard/terminal-control-route.js.map +1 -0
- package/dist/dashboard/terminal-control.d.ts +64 -13
- package/dist/dashboard/terminal-control.d.ts.map +1 -1
- package/dist/dashboard/terminal-control.js +77 -14
- package/dist/dashboard/terminal-control.js.map +1 -1
- package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -1
- package/dist/dashboard/terminal-front-proxy.js +41 -9
- package/dist/dashboard/terminal-front-proxy.js.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.d.ts +69 -18
- package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.js +149 -29
- package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-api.d.ts +34 -2
- package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-api.js +39 -4
- package/dist/dashboard/web/agent-workbench-api.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-appearance.d.ts +6 -3
- package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-appearance.js +7 -4
- package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-model.d.ts +2 -0
- package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-model.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-page.js +2 -2
- package/dist/dashboard/web/agent-workbench-page.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-panes.d.ts +59 -4
- package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-panes.js +493 -85
- package/dist/dashboard/web/agent-workbench-panes.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-session-list.d.ts +11 -7
- package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-session-list.js +24 -31
- package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-terminal-control.d.ts +198 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.js +292 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-view.d.ts +3 -2
- package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-view.js +69 -50
- package/dist/dashboard/web/agent-workbench-view.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +58 -7
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +24 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +191 -16
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +17 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +51 -2
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +32 -8
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/confirm-modal.d.ts +35 -0
- package/dist/dashboard/web/confirm-modal.d.ts.map +1 -0
- package/dist/dashboard/web/confirm-modal.js +111 -0
- package/dist/dashboard/web/confirm-modal.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +2 -1
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/customization-page.d.ts +3 -0
- package/dist/dashboard/web/customization-page.d.ts.map +1 -0
- package/dist/dashboard/web/customization-page.js +315 -0
- package/dist/dashboard/web/customization-page.js.map +1 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +1 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +11 -9
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +226 -42
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
- package/dist/dashboard/web/monitor-room.js +3 -2
- package/dist/dashboard/web/monitor-room.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +98 -63
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +4 -3
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
- package/dist/dashboard/web/schedules-page.js +165 -18
- package/dist/dashboard/web/schedules-page.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +2 -0
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +142 -24
- package/dist/dashboard/web/sessions-kanban.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +177 -94
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +5 -4
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +0 -8
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +185 -65
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills/skill-library-tab.d.ts +2 -0
- package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -1
- package/dist/dashboard/web/skills/skill-library-tab.js +15 -1
- package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +5 -4
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +5 -0
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +4 -0
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation-page.js +3 -2
- package/dist/dashboard/web/team-federation-page.js.map +1 -1
- package/dist/dashboard/web/toast.d.ts +15 -0
- package/dist/dashboard/web/toast.d.ts.map +1 -0
- package/dist/dashboard/web/toast.js +70 -0
- package/dist/dashboard/web/toast.js.map +1 -0
- package/dist/dashboard/web/v3-components.d.ts.map +1 -1
- package/dist/dashboard/web/v3-components.js +2 -1
- package/dist/dashboard/web/v3-components.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +10 -12
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.js +219 -200
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
- package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards-page.js +2 -1
- package/dist/dashboard/web/whiteboards-page.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-LZSUOCEQ.js +1 -0
- package/dist/dashboard-web/chunks/agent-workbench-page-YONDRJU7.js +1 -0
- package/dist/dashboard-web/chunks/bot-defaults-page-X7LV6373.js +1 -0
- package/dist/dashboard-web/chunks/chunk-2PVRDXEL.js +1 -0
- package/dist/dashboard-web/chunks/chunk-53JUKBU2.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-5CJMHTT4.js → chunk-5QX4OYOR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-NACP7BMR.js → chunk-5VRVJFQR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-FDZ7WOBW.js → chunk-6ROOZWYV.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-F6KNPF4R.js → chunk-CK22743G.js} +15 -19
- package/dist/dashboard-web/chunks/chunk-CVNIMUPY.js +25 -0
- package/dist/dashboard-web/chunks/chunk-GJC2TMWS.js +2 -0
- package/dist/dashboard-web/chunks/chunk-OT6L6G7R.js +1 -0
- package/dist/dashboard-web/chunks/chunk-QITAMHW6.js +1 -0
- package/dist/dashboard-web/chunks/chunk-RHVFZC5Z.js +1 -0
- package/dist/dashboard-web/chunks/chunk-SOBMN2VY.js +1 -0
- package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
- package/dist/dashboard-web/chunks/chunk-XVIXNQGC.js +44 -0
- package/dist/dashboard-web/chunks/chunk-YUJF34ME.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-LB2HEJ7F.js +1 -0
- package/dist/dashboard-web/chunks/customization-page-4GXBYLG6.js +105 -0
- package/dist/dashboard-web/chunks/feedback-page-IZQ7VLDG.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-4WCP5OEV.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-HJFDYR5N.js → insights-page-TXQHIPQL.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-V7PCP47V.js → monitor-room-VBRVWXCM.js} +8 -8
- package/dist/dashboard-web/chunks/monitoring-page-QDDZWERE.js +2 -0
- package/dist/dashboard-web/chunks/office-page-PENFNYPG.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-BZQDP6MP.js +1 -0
- package/dist/dashboard-web/chunks/plugin-page-JX4GSWZS.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-VPNINZNK.js +1 -0
- package/dist/dashboard-web/chunks/schedules-page-BITO6HEA.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-ZKCOVTD2.js +8 -0
- package/dist/dashboard-web/chunks/settings-page-UT6JDTS6.js +2 -0
- package/dist/dashboard-web/chunks/skills-page-GULXVAJY.js +4 -0
- package/dist/dashboard-web/chunks/team-federation-page-CUUJWGEG.js +1 -0
- package/dist/dashboard-web/chunks/v3-page-5WVJ5AUR.js +94 -0
- package/dist/dashboard-web/chunks/whiteboards-page-FZ2CME4H.js +1 -0
- package/dist/dashboard-web/design-tokens.css +236 -0
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard-web/style.css +1930 -114
- package/dist/dashboard.js +360 -279
- package/dist/dashboard.js.map +1 -1
- package/dist/desktop/renderer/app.js +6 -0
- package/dist/desktop/renderer/app.js.map +1 -1
- package/dist/dsh-runner.js +139 -17
- package/dist/dsh-runner.js.map +1 -1
- package/dist/global-config.d.ts +33 -2
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +62 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +13 -4
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.d.ts +27 -3
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +33 -4
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +13 -4
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +2 -0
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +7 -4
- 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 +135 -20
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +38 -3
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +163 -13
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.js +2 -1
- package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
- package/dist/im/lark/v3-blocked-card.d.ts +1 -1
- package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card.js +14 -0
- package/dist/im/lark/v3-blocked-card.js.map +1 -1
- package/dist/index-core-only.js +2 -0
- package/dist/index-core-only.js.map +1 -1
- package/dist/index-daemon.js +3 -0
- package/dist/index-daemon.js.map +1 -1
- package/dist/platform/binding.d.ts +37 -0
- package/dist/platform/binding.d.ts.map +1 -1
- package/dist/platform/binding.js +15 -0
- package/dist/platform/binding.js.map +1 -1
- package/dist/services/bridge-turn-journal.d.ts +63 -0
- package/dist/services/bridge-turn-journal.d.ts.map +1 -0
- package/dist/services/bridge-turn-journal.js +149 -0
- package/dist/services/bridge-turn-journal.js.map +1 -0
- package/dist/services/bridge-turn-queue.d.ts +8 -1
- package/dist/services/bridge-turn-queue.d.ts.map +1 -1
- package/dist/services/bridge-turn-queue.js +2 -1
- package/dist/services/bridge-turn-queue.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +5 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
- package/dist/services/codex-app-runner-protocol.js +5 -0
- package/dist/services/codex-app-runner-protocol.js.map +1 -1
- package/dist/services/customization-store.d.ts +93 -0
- package/dist/services/customization-store.d.ts.map +1 -0
- package/dist/services/customization-store.js +542 -0
- package/dist/services/customization-store.js.map +1 -0
- package/dist/services/file-bridge-path.d.ts.map +1 -1
- package/dist/services/file-bridge-path.js +3 -0
- package/dist/services/file-bridge-path.js.map +1 -1
- package/dist/services/grok-transcript.d.ts.map +1 -1
- package/dist/services/grok-transcript.js +44 -9
- package/dist/services/grok-transcript.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +12 -3
- package/dist/services/local-cli-opener.js.map +1 -1
- package/dist/services/model-catalog.d.ts +54 -0
- package/dist/services/model-catalog.d.ts.map +1 -0
- package/dist/services/model-catalog.js +147 -0
- package/dist/services/model-catalog.js.map +1 -0
- package/dist/services/omp-transcript.d.ts +27 -0
- package/dist/services/omp-transcript.d.ts.map +1 -0
- package/dist/services/omp-transcript.js +214 -0
- package/dist/services/omp-transcript.js.map +1 -0
- package/dist/services/platform-team-store.d.ts +16 -8
- package/dist/services/platform-team-store.d.ts.map +1 -1
- package/dist/services/platform-team-store.js +17 -10
- package/dist/services/platform-team-store.js.map +1 -1
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +13 -8
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts.map +1 -1
- package/dist/services/resumable-session-discovery.js +117 -35
- package/dist/services/resumable-session-discovery.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +5 -3
- package/dist/services/structured-bridge-clis.d.ts.map +1 -1
- package/dist/services/structured-bridge-clis.js +5 -1
- package/dist/services/structured-bridge-clis.js.map +1 -1
- package/dist/services/vc-meeting-action-gate.d.ts.map +1 -1
- package/dist/services/vc-meeting-action-gate.js +15 -4
- package/dist/services/vc-meeting-action-gate.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +46 -66
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js +33 -292
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-templates.js +3 -3
- package/dist/services/vc-meeting-consumer-profile-templates.js.map +1 -1
- package/dist/services/vc-meeting-delivery-store.d.ts +18 -0
- package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-store.js +55 -0
- package/dist/services/vc-meeting-delivery-store.js.map +1 -1
- package/dist/services/vc-meeting-send-policy.d.ts +21 -1
- package/dist/services/vc-meeting-send-policy.d.ts.map +1 -1
- package/dist/services/vc-meeting-send-policy.js +30 -2
- package/dist/services/vc-meeting-send-policy.js.map +1 -1
- package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts +78 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.js +227 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.js.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.d.ts +53 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.d.ts.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.js +161 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +1 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/open-platform-automation.d.ts +20 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +27 -0
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/skills/customization-bundle.d.ts +83 -0
- package/dist/skills/customization-bundle.d.ts.map +1 -0
- package/dist/skills/customization-bundle.js +214 -0
- package/dist/skills/customization-bundle.js.map +1 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +10 -3
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/effective-builtins.d.ts +38 -0
- package/dist/skills/effective-builtins.d.ts.map +1 -0
- package/dist/skills/effective-builtins.js +96 -0
- package/dist/skills/effective-builtins.js.map +1 -0
- package/dist/skills/injection-mode.d.ts +4 -1
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +11 -3
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +24 -1
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/prompt-fragments.d.ts +58 -0
- package/dist/skills/prompt-fragments.d.ts.map +1 -0
- package/dist/skills/prompt-fragments.js +88 -0
- package/dist/skills/prompt-fragments.js.map +1 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts +50 -0
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +43 -0
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/utils/idle-detector.d.ts +12 -0
- package/dist/utils/idle-detector.d.ts.map +1 -1
- package/dist/utils/idle-detector.js +88 -2
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/stuck-detector.d.ts +5 -0
- package/dist/utils/stuck-detector.d.ts.map +1 -1
- package/dist/utils/stuck-detector.js +41 -0
- package/dist/utils/stuck-detector.js.map +1 -1
- package/dist/utils/usage-limit-tracker.d.ts +46 -0
- package/dist/utils/usage-limit-tracker.d.ts.map +1 -0
- package/dist/utils/usage-limit-tracker.js +91 -0
- package/dist/utils/usage-limit-tracker.js.map +1 -0
- package/dist/utils/user-token.js +1 -1
- package/dist/utils/user-token.js.map +1 -1
- package/dist/worker.js +812 -125
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +14 -14
- package/dist/workflows/events/payloads.d.ts +12 -12
- package/dist/workflows/events/schema.d.ts +164 -164
- package/dist/workflows/migration/v2-to-v3.js +1 -1
- package/dist/workflows/migration/v2-to-v3.js.map +1 -1
- package/dist/workflows/v3/architect.d.ts.map +1 -1
- package/dist/workflows/v3/architect.js +11 -5
- package/dist/workflows/v3/architect.js.map +1 -1
- package/dist/workflows/v3/artifact-contract-declarations.d.ts +22 -0
- package/dist/workflows/v3/artifact-contract-declarations.d.ts.map +1 -0
- package/dist/workflows/v3/artifact-contract-declarations.js +95 -0
- package/dist/workflows/v3/artifact-contract-declarations.js.map +1 -0
- package/dist/workflows/v3/contract.d.ts +1 -0
- package/dist/workflows/v3/contract.d.ts.map +1 -1
- package/dist/workflows/v3/contract.js.map +1 -1
- package/dist/workflows/v3/daemon-run.d.ts +2 -2
- package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
- package/dist/workflows/v3/daemon-run.js +4 -0
- package/dist/workflows/v3/daemon-run.js.map +1 -1
- package/dist/workflows/v3/dag.d.ts +7 -0
- package/dist/workflows/v3/dag.d.ts.map +1 -1
- package/dist/workflows/v3/dag.js +69 -8
- package/dist/workflows/v3/dag.js.map +1 -1
- package/dist/workflows/v3/ephemeral-pool.js +1 -1
- package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
- package/dist/workflows/v3/event-contract.d.ts +3 -1
- package/dist/workflows/v3/event-contract.d.ts.map +1 -1
- package/dist/workflows/v3/host.d.ts.map +1 -1
- package/dist/workflows/v3/host.js +5 -1
- package/dist/workflows/v3/host.js.map +1 -1
- package/dist/workflows/v3/journal.d.ts +1 -1
- package/dist/workflows/v3/journal.d.ts.map +1 -1
- package/dist/workflows/v3/journal.js.map +1 -1
- package/dist/workflows/v3/library-materialize.d.ts.map +1 -1
- package/dist/workflows/v3/library-materialize.js +9 -1
- package/dist/workflows/v3/library-materialize.js.map +1 -1
- package/dist/workflows/v3/library-schema.d.ts +3 -1
- package/dist/workflows/v3/library-schema.d.ts.map +1 -1
- package/dist/workflows/v3/library-schema.js +20 -4
- package/dist/workflows/v3/library-schema.js.map +1 -1
- package/dist/workflows/v3/library-store.d.ts.map +1 -1
- package/dist/workflows/v3/library-store.js +15 -3
- package/dist/workflows/v3/library-store.js.map +1 -1
- package/dist/workflows/v3/run-envelope.d.ts +16 -16
- package/dist/workflows/v3/shared-node-runtime.d.ts +2 -1
- package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -1
- package/dist/workflows/v3/shared-node-runtime.js +48 -7
- package/dist/workflows/v3/shared-node-runtime.js.map +1 -1
- package/package.json +2 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +0 -1
- package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +0 -10
- package/dist/dashboard-web/chunks/chunk-22WIADUT.js +0 -2
- package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +0 -1
- package/dist/dashboard-web/chunks/chunk-2W6SCN3M.js +0 -1
- package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +0 -1
- package/dist/dashboard-web/chunks/chunk-5THX4DI2.js +0 -66
- package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
- package/dist/dashboard-web/chunks/chunk-AGCPF6MT.js +0 -1
- package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +0 -1
- package/dist/dashboard-web/chunks/chunk-SYC6D5XU.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-VOISXXII.js +0 -1
- package/dist/dashboard-web/chunks/feedback-page-RN6HRZMS.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +0 -8
- package/dist/dashboard-web/chunks/monitoring-page-NKEKVQAP.js +0 -2
- package/dist/dashboard-web/chunks/office-page-GVJF73XW.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +0 -1
- package/dist/dashboard-web/chunks/plugin-page-J3OF5IY4.js +0 -1
- package/dist/dashboard-web/chunks/roles-page-WQIRSOLZ.js +0 -1
- package/dist/dashboard-web/chunks/schedules-page-J2DEY2X6.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +0 -8
- package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +0 -2
- package/dist/dashboard-web/chunks/skills-page-HGIFR3IU.js +0 -4
- package/dist/dashboard-web/chunks/team-federation-page-MR5ZPL4B.js +0 -1
- package/dist/dashboard-web/chunks/v3-page-GBR5JWPE.js +0 -94
- package/dist/dashboard-web/chunks/whiteboards-page-QAZM4BN3.js +0 -1
- package/dist/services/vc-meeting-consumer-profile-store.d.ts +0 -39
- package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +0 -1
- package/dist/services/vc-meeting-consumer-profile-store.js +0 -191
- package/dist/services/vc-meeting-consumer-profile-store.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import { createPortal } from 'react-dom';
|
|
4
4
|
import { openBotOnboarding } from './bot-onboarding.js';
|
|
5
|
-
import { agentSelectionKey, cliIdOf, createRefreshGate, displayCliId, fallbackCliOptionsState, fetchBotDefaults, fetchCliOptions, fmtSince, modelSuggestionsForOption, resolveSubstituteTarget, selectedCliOption, } from './bot-defaults.js';
|
|
5
|
+
import { agentSelectionKey, cliIdOf, createRefreshGate, displayCliId, fallbackCliOptionsState, fetchBotDefaults, fetchCliOptions, fetchDetectedModels, fmtSince, mergeModelCandidates, modelSuggestionsForOption, resolveSubstituteTarget, selectedCliOption, } from './bot-defaults.js';
|
|
6
6
|
import { isRemoteCliId } from '../../core/remote-cli-ids.js';
|
|
7
7
|
import { mountReactPage } from './react-mount.js';
|
|
8
8
|
import { useT } from './react-hooks.js';
|
|
@@ -228,7 +228,8 @@ function statusClass(status, extra = '') {
|
|
|
228
228
|
return `oncall-status${extra ? ` ${extra}` : ''}${suffix}`;
|
|
229
229
|
}
|
|
230
230
|
function StatusSpan(props) {
|
|
231
|
-
|
|
231
|
+
// key 随文案变化:成功状态 1.5s 后 CSS 淡出,新消息到达时重挂载以重启动画
|
|
232
|
+
return _jsx("span", { role: "status", "aria-live": "polite", className: statusClass(props.status), ...(props.attr ?? {}), children: props.status?.text ?? '' }, props.status?.text ?? '');
|
|
232
233
|
}
|
|
233
234
|
function InfoTip(props) {
|
|
234
235
|
const ariaLabel = typeof props.children === 'string' ? props.children : undefined;
|
|
@@ -241,6 +242,43 @@ function DropdownField(props) {
|
|
|
241
242
|
const tr = useT();
|
|
242
243
|
return (_jsxs(_Fragment, { children: [_jsx(DropdownMenu, { id: `bd-menu-${props.dataInput}`, className: ['bd-field-menu', props.className].filter(Boolean).join(' '), ariaLabel: props.ariaLabel, disabled: props.disabled, label: dropdownLabel(props.options, props.value), value: props.value, options: props.options, searchable: props.searchable, searchPlaceholder: props.searchable ? tr('common.dropdownSearch') : undefined, searchEmptyLabel: props.searchable ? tr('common.dropdownSearchEmpty') : undefined, onChange: props.onChange }), _jsx("input", { type: "hidden", "data-input": props.dataInput, value: props.value, readOnly: true })] }));
|
|
243
244
|
}
|
|
245
|
+
const MODEL_PICKER_CUSTOM = '__custom__';
|
|
246
|
+
/**
|
|
247
|
+
* 模型选择器:下拉候选(静态精选 + live 探测合并,由调用方 mergeModelCandidates 算好)
|
|
248
|
+
* + 「自定义模型…」自由输入。模型列表会过期,候选永不锁死。
|
|
249
|
+
* - value='' 表示跟随 CLI 默认,菜单显示 defaultLabel;
|
|
250
|
+
* - value 非空但不在候选中时,把当前值作为额外选项插在最前(旧配置/自定义值可见);
|
|
251
|
+
* - 选中 customLabel 切到自定义输入模式(datalist 仍挂全部候选做自动补全),
|
|
252
|
+
* 返回按钮切回下拉模式;
|
|
253
|
+
* - busy(live 探测进行中)只在控件下方显示小转圈,不禁用选择。
|
|
254
|
+
*/
|
|
255
|
+
export function ModelPickerField(props) {
|
|
256
|
+
const tr = useT();
|
|
257
|
+
const [customMode, setCustomMode] = useState(false);
|
|
258
|
+
const datalistId = useId();
|
|
259
|
+
const current = props.value;
|
|
260
|
+
const dropdownOptions = useMemo(() => {
|
|
261
|
+
const opts = [];
|
|
262
|
+
if (current && !props.options.includes(current)) {
|
|
263
|
+
opts.push({ value: current, label: current });
|
|
264
|
+
}
|
|
265
|
+
for (const item of props.options)
|
|
266
|
+
opts.push({ value: item, label: item });
|
|
267
|
+
opts.push({ value: MODEL_PICKER_CUSTOM, label: props.customLabel });
|
|
268
|
+
return opts;
|
|
269
|
+
}, [current, props.options, props.customLabel]);
|
|
270
|
+
return (_jsxs("span", { className: "bd-model-picker", children: [customMode ? (_jsxs("span", { className: "bd-model-custom", children: [_jsx("input", { type: "text", "data-input": props.dataInput, list: datalistId, value: current, placeholder: props.defaultLabel, disabled: props.disabled, autoComplete: "off", autoCapitalize: "none", spellCheck: false, onChange: event => props.onChange(event.currentTarget.value) }), _jsx("button", { type: "button", className: "bd-model-back", disabled: props.disabled, onClick: () => setCustomMode(false), children: tr('botDefaults.modelPickerBack') }), _jsx("datalist", { id: datalistId, children: props.options.map(item => _jsx("option", { value: item }, item)) })] })) : (_jsxs(_Fragment, { children: [_jsx(DropdownMenu, { id: `bd-menu-${props.dataInput}`, className: ['bd-model-menu', props.menuClassName].filter(Boolean).join(' '), ariaLabel: props.ariaLabel, disabled: props.disabled, label: current || props.defaultLabel, value: current, options: dropdownOptions, searchable: true, searchPlaceholder: tr('common.dropdownSearch'), searchEmptyLabel: tr('common.dropdownSearchEmpty'), onChange: next => {
|
|
271
|
+
if (next === MODEL_PICKER_CUSTOM) {
|
|
272
|
+
setCustomMode(true);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
props.onChange(next);
|
|
276
|
+
} }), _jsx("input", { type: "hidden", "data-input": props.dataInput, value: current, onChange: event => props.onChange(event.currentTarget.value) })] })), props.busy
|
|
277
|
+
? _jsx("small", { className: "bd-model-busy", children: _jsx("span", { className: "bd-model-spinner", "aria-hidden": "true" }) })
|
|
278
|
+
: null, typeof props.detectedCount === 'number' && props.detectedCount > 0 && props.detectedLabel
|
|
279
|
+
? _jsx("small", { className: "bd-model-detected", children: props.detectedLabel })
|
|
280
|
+
: null] }));
|
|
281
|
+
}
|
|
244
282
|
function ToggleRow(props) {
|
|
245
283
|
return (_jsxs("label", { className: props.className ? `toggle-row ${props.className}` : 'toggle-row', children: [_jsx("input", { type: "checkbox", "data-action": props.dataAction, checked: props.checked, disabled: props.disabled, onChange: event => props.onChange(event.currentTarget.checked) }), _jsx("span", { className: "switch", "aria-hidden": "true" }), _jsxs("span", { className: "toggle-tx", children: [_jsx("strong", { children: _jsx(FieldTitle, { help: props.help, children: props.title }) }), props.description ? _jsx("small", { children: props.description }) : null] })] }));
|
|
246
284
|
}
|
|
@@ -938,6 +976,11 @@ export function BotAgentSection(props) {
|
|
|
938
976
|
const [turnTimeoutMin, setTurnTimeoutMin] = useState(turnTimeoutMinFromMs(bot.turnTimeoutMs));
|
|
939
977
|
const [turnTimeoutTouched, setTurnTimeoutTouched] = useState(false);
|
|
940
978
|
const [turnTimeoutError, setTurnTimeoutError] = useState(null);
|
|
979
|
+
// dsh runtime variant: 'official' (JSON-RPC runner) or 'tui' (dsh-tui PTY).
|
|
980
|
+
// Defaults to 'official' so a bot that never touched the toggle stays on the
|
|
981
|
+
// headless runner. `touched` gates whether a save sends the field at all.
|
|
982
|
+
const [dshRuntime, setDshRuntime] = useState(bot.dshRuntime === 'tui' ? 'tui' : 'official');
|
|
983
|
+
const [dshRuntimeTouched, setDshRuntimeTouched] = useState(false);
|
|
941
984
|
const [runtimeDraft, setRuntimeDraft] = useState(() => runtimeDraftFromBot(bot));
|
|
942
985
|
const [runtimeTouched, setRuntimeTouched] = useState(false);
|
|
943
986
|
const [runtimeStatus, setRuntimeStatus] = useState(null);
|
|
@@ -954,6 +997,8 @@ export function BotAgentSection(props) {
|
|
|
954
997
|
setTurnTimeoutMin(turnTimeoutMinFromMs(bot.turnTimeoutMs));
|
|
955
998
|
setTurnTimeoutTouched(false);
|
|
956
999
|
setTurnTimeoutError(null);
|
|
1000
|
+
setDshRuntime(bot.dshRuntime === 'tui' ? 'tui' : 'official');
|
|
1001
|
+
setDshRuntimeTouched(false);
|
|
957
1002
|
setRuntimeDraft(runtimeDraftFromBot(bot));
|
|
958
1003
|
setRuntimeTouched(false);
|
|
959
1004
|
setSkillValue(skillInjectionResolved(bot));
|
|
@@ -964,6 +1009,7 @@ export function BotAgentSection(props) {
|
|
|
964
1009
|
bot.model,
|
|
965
1010
|
bot.reasoningEffort,
|
|
966
1011
|
bot.turnTimeoutMs,
|
|
1012
|
+
bot.dshRuntime,
|
|
967
1013
|
runtimeConfigKey,
|
|
968
1014
|
bot.wrapperCli,
|
|
969
1015
|
bot.skillInjection,
|
|
@@ -973,11 +1019,28 @@ export function BotAgentSection(props) {
|
|
|
973
1019
|
const option = selectedCliOption(cliState.options, cliKey);
|
|
974
1020
|
const suggestions = modelSuggestionsForOption(option, cliState);
|
|
975
1021
|
const modelDisabledByCli = option?.gateway === 'ttadk' && option.acceptsModel === false;
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
1022
|
+
// live 探测当前 CLI 的可用模型(ttadk 网关项保持现状,只用静态建议列表)。
|
|
1023
|
+
const [detectedModels, setDetectedModels] = useState(null);
|
|
1024
|
+
const [detectingModels, setDetectingModels] = useState(false);
|
|
1025
|
+
useEffect(() => {
|
|
1026
|
+
if (option?.gateway === 'ttadk') {
|
|
1027
|
+
setDetectedModels(null);
|
|
1028
|
+
setDetectingModels(false);
|
|
1029
|
+
return;
|
|
1030
|
+
}
|
|
1031
|
+
// stale 标志防卸载/竞态:cliKey 快速切换时旧响应不得覆盖新 CLI 的候选。
|
|
1032
|
+
let stale = false;
|
|
1033
|
+
setDetectingModels(true);
|
|
1034
|
+
fetchDetectedModels(cliKey)
|
|
1035
|
+
.then(result => { if (!stale)
|
|
1036
|
+
setDetectedModels(result); })
|
|
1037
|
+
.finally(() => { if (!stale)
|
|
1038
|
+
setDetectingModels(false); });
|
|
1039
|
+
return () => { stale = true; };
|
|
1040
|
+
// 只按 cliKey 重新探测;cliState 刷新带来的静态候选经 suggestions 合入,无需重探。
|
|
1041
|
+
}, [cliKey]);
|
|
1042
|
+
const modelCandidates = mergeModelCandidates(suggestions, detectedModels?.models ?? null);
|
|
1043
|
+
const detectedLiveCount = detectedModels?.source === 'live' ? detectedModels.models.length : 0;
|
|
981
1044
|
function updateCli(nextKey) {
|
|
982
1045
|
const previousKey = cliKey;
|
|
983
1046
|
setCliKey(nextKey);
|
|
@@ -1072,6 +1135,9 @@ export function BotAgentSection(props) {
|
|
|
1072
1135
|
// it makes the daemon preserve the current value; non-dsh selections
|
|
1073
1136
|
// never send it (the daemon drops any stored value for non-dsh CLIs).
|
|
1074
1137
|
...(cliKey === 'dsh' && turnTimeoutField !== undefined ? { turnTimeoutMs: turnTimeoutField } : {}),
|
|
1138
|
+
// dsh-only runtime variant: only send when touched, same semantics as
|
|
1139
|
+
// turnTimeoutMs. 'official' clears a stored 'tui' selection.
|
|
1140
|
+
...(cliKey === 'dsh' && dshRuntimeTouched ? { dshRuntime } : {}),
|
|
1075
1141
|
...(runtimeTouched ? { cliRuntime } : {}),
|
|
1076
1142
|
};
|
|
1077
1143
|
const res = await sendJson('PUT', `/api/bots/${encodeURIComponent(bot.larkAppId)}/agent`, body);
|
|
@@ -1116,6 +1182,7 @@ export function BotAgentSection(props) {
|
|
|
1116
1182
|
model: res.body.model ?? '',
|
|
1117
1183
|
reasoningEffort: res.body.reasoningEffort ?? undefined,
|
|
1118
1184
|
turnTimeoutMs: typeof res.body.turnTimeoutMs === 'number' ? res.body.turnTimeoutMs : undefined,
|
|
1185
|
+
dshRuntime: typeof res.body.dshRuntime === 'string' ? res.body.dshRuntime : bot.dshRuntime ?? null,
|
|
1119
1186
|
agentSelectionKey: res.body.selectionKey ?? cliKey,
|
|
1120
1187
|
});
|
|
1121
1188
|
// Re-sync the minutes input from the authoritative saved ms and clear
|
|
@@ -1123,6 +1190,7 @@ export function BotAgentSection(props) {
|
|
|
1123
1190
|
setTurnTimeoutMin(turnTimeoutMinFromMs(typeof res.body.turnTimeoutMs === 'number' ? res.body.turnTimeoutMs : undefined));
|
|
1124
1191
|
setTurnTimeoutTouched(false);
|
|
1125
1192
|
setTurnTimeoutError(null);
|
|
1193
|
+
setDshRuntimeTouched(false);
|
|
1126
1194
|
setRuntimeTouched(false);
|
|
1127
1195
|
if (cliRuntime) {
|
|
1128
1196
|
const probe = res.body.runtimeProbe;
|
|
@@ -1294,7 +1362,9 @@ export function BotAgentSection(props) {
|
|
|
1294
1362
|
? 'botDefaults.runtimeOfficialNote'
|
|
1295
1363
|
: runtimeDraft.mode === 'legacy'
|
|
1296
1364
|
? 'botDefaults.runtimeLegacyNote'
|
|
1297
|
-
: 'botDefaults.runtimeCustomNote') }), runtimeDraft.mode === 'legacy' ? (_jsx("div", { className: "bd-runtime-fields", "data-runtime-legacy": "", children: _jsxs("label", { className: "bd-runtime-wide", children: [_jsx("span", { children: tr('botDefaults.runtimeLegacyPath') }), _jsx("input", { type: "text", value: runtimeDraft.legacyPath, readOnly: true, "aria-readonly": "true", "data-input": "agentRuntimeLegacyPath" })] }) })) : null, runtimeDraft.mode === 'custom' ? (_jsxs("div", { className: "bd-runtime-fields", children: [_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeIdHelp'), children: tr('botDefaults.runtimeId') }), _jsx("input", { type: "text", "data-input": "agentRuntimeId", value: runtimeDraft.id, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ id: event.currentTarget.value }) })] }), _jsxs("label", { children: [_jsx("span", { children: tr('botDefaults.runtimeDisplayName') }), _jsx("input", { type: "text", "data-input": "agentRuntimeDisplayName", placeholder: tr('botDefaults.runtimeDisplayNamePlaceholder'), value: runtimeDraft.displayName, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ displayName: event.currentTarget.value }) })] }), _jsxs("label", { className: "bd-runtime-wide", children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeExecutableHelp'), children: tr('botDefaults.runtimeExecutable') }), _jsx("input", { type: "text", "data-input": "agentRuntimeExecutable", value: runtimeDraft.executable, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ executable: event.currentTarget.value }) })] }), _jsxs("div", { className: "bd-field", children: [_jsx("span", { children: tr('botDefaults.runtimeUpdateProvider') }), _jsx(DropdownField, { dataInput: "agentRuntimeUpdateProvider", ariaLabel: tr('botDefaults.runtimeUpdateProvider'), value: runtimeDraft.updateProvider, disabled: agentBusy, options: runtimeProviderOptions, onChange: updateProvider => updateRuntimeDraft({ updateProvider }) })] }), runtimeDraft.updateProvider === 'npm' ? (_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimePackageHelp'), children: tr('botDefaults.runtimePackageName') }), _jsx("input", { type: "text", "data-input": "agentRuntimePackageName", value: runtimeDraft.packageName, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ packageName: event.currentTarget.value }) })] })) : null] })) : null, _jsx(StatusSpan, { status: runtimeStatus, attr: { 'data-runtime-status': '' } })] })) : null, !isRiff && (_jsx("div", { className: "bd-row", children: _jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.agentHelp'), children: tr('botDefaults.agentModel') }), _jsx(
|
|
1365
|
+
: 'botDefaults.runtimeCustomNote') }), runtimeDraft.mode === 'legacy' ? (_jsx("div", { className: "bd-runtime-fields", "data-runtime-legacy": "", children: _jsxs("label", { className: "bd-runtime-wide", children: [_jsx("span", { children: tr('botDefaults.runtimeLegacyPath') }), _jsx("input", { type: "text", value: runtimeDraft.legacyPath, readOnly: true, "aria-readonly": "true", "data-input": "agentRuntimeLegacyPath" })] }) })) : null, runtimeDraft.mode === 'custom' ? (_jsxs("div", { className: "bd-runtime-fields", children: [_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeIdHelp'), children: tr('botDefaults.runtimeId') }), _jsx("input", { type: "text", "data-input": "agentRuntimeId", value: runtimeDraft.id, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ id: event.currentTarget.value }) })] }), _jsxs("label", { children: [_jsx("span", { children: tr('botDefaults.runtimeDisplayName') }), _jsx("input", { type: "text", "data-input": "agentRuntimeDisplayName", placeholder: tr('botDefaults.runtimeDisplayNamePlaceholder'), value: runtimeDraft.displayName, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ displayName: event.currentTarget.value }) })] }), _jsxs("label", { className: "bd-runtime-wide", children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeExecutableHelp'), children: tr('botDefaults.runtimeExecutable') }), _jsx("input", { type: "text", "data-input": "agentRuntimeExecutable", value: runtimeDraft.executable, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ executable: event.currentTarget.value }) })] }), _jsxs("div", { className: "bd-field", children: [_jsx("span", { children: tr('botDefaults.runtimeUpdateProvider') }), _jsx(DropdownField, { dataInput: "agentRuntimeUpdateProvider", ariaLabel: tr('botDefaults.runtimeUpdateProvider'), value: runtimeDraft.updateProvider, disabled: agentBusy, options: runtimeProviderOptions, onChange: updateProvider => updateRuntimeDraft({ updateProvider }) })] }), runtimeDraft.updateProvider === 'npm' ? (_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimePackageHelp'), children: tr('botDefaults.runtimePackageName') }), _jsx("input", { type: "text", "data-input": "agentRuntimePackageName", value: runtimeDraft.packageName, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ packageName: event.currentTarget.value }) })] })) : null] })) : null, _jsx(StatusSpan, { status: runtimeStatus, attr: { 'data-runtime-status': '' } })] })) : null, !isRiff && (_jsx("div", { className: "bd-row", children: _jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.agentHelp'), children: tr('botDefaults.agentModel') }), _jsx(ModelPickerField, { value: model, onChange: setModel, options: modelCandidates, disabled: agentBusy || modelDisabledByCli, busy: detectingModels, dataInput: "agentModel", ariaLabel: tr('botDefaults.agentModel'), defaultLabel: tr('botDefaults.modelPickerDefault'), customLabel: tr('botDefaults.modelPickerCustom'), menuClassName: "bd-field-menu", detectedCount: detectedLiveCount || undefined, detectedLabel: detectedLiveCount > 0
|
|
1366
|
+
? tr('botDefaults.modelPickerDetected', { count: detectedLiveCount })
|
|
1367
|
+
: undefined }, cliKey)] }) })), isDsh && (_jsx("div", { className: "bd-row", children: _jsxs("div", { className: "bd-field", children: [_jsx(FieldTitle, { help: tr('botDefaults.dshRuntimeHelp'), children: tr('botDefaults.dshRuntimeTitle') }), _jsxs("div", { className: "bd-runtime-mode", role: "group", "aria-label": tr('botDefaults.dshRuntimeTitle'), children: [_jsx("button", { type: "button", "data-action": "dsh-runtime-official", "aria-pressed": dshRuntime === 'official', disabled: agentBusy, onClick: () => { setDshRuntime('official'); setDshRuntimeTouched(true); }, children: tr('botDefaults.dshRuntimeOfficial') }), _jsx("button", { type: "button", "data-action": "dsh-runtime-tui", "aria-pressed": dshRuntime === 'tui', disabled: agentBusy, onClick: () => { setDshRuntime('tui'); setDshRuntimeTouched(true); }, children: tr('botDefaults.dshRuntimeTui') })] }), _jsx("p", { className: "bd-runtime-note", children: tr(dshRuntime === 'tui' ? 'botDefaults.dshRuntimeTuiNote' : 'botDefaults.dshRuntimeOfficialNote') })] }) })), isDsh && (_jsx("div", { className: "bd-row", children: _jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.agentTurnTimeoutHelp'), children: tr('botDefaults.agentTurnTimeout') }), _jsx("input", { type: "number", min: 0,
|
|
1298
1368
|
// Allow non-whole minutes so a legal non-60000-multiple ms value
|
|
1299
1369
|
// (e.g. 90001ms ≈ 1.50002min) can be shown and edited losslessly.
|
|
1300
1370
|
step: "any", inputMode: "decimal", "data-input": "agentTurnTimeout", placeholder: tr('botDefaults.agentTurnTimeoutPlaceholder'), value: turnTimeoutMin, disabled: agentBusy, onChange: event => {
|
|
@@ -2528,6 +2598,13 @@ export function SessionGroupTagRow(props) {
|
|
|
2528
2598
|
const [authBusy, setAuthBusy] = useState(false);
|
|
2529
2599
|
const [modeBusy, setModeBusy] = useState(false);
|
|
2530
2600
|
const [err, setErr] = useState(null);
|
|
2601
|
+
// Remote-callback paste fallback (mirrors groups-page / sessions-page): when
|
|
2602
|
+
// set, the overlay is shown so a browser that can't reach the daemon's
|
|
2603
|
+
// 127.0.0.1:9768 loopback (远程 VM / 中心化平台 m-* 子域访问) can still finish
|
|
2604
|
+
// by pasting the callback URL. authUrl also drives the "跳转飞书授权" retry button.
|
|
2605
|
+
const [authUrl, setAuthUrl] = useState('');
|
|
2606
|
+
const [callbackUrl, setCallbackUrl] = useState('');
|
|
2607
|
+
const [submitting, setSubmitting] = useState(false);
|
|
2531
2608
|
const lifecycle = useRef({ generation: 0, mounted: true });
|
|
2532
2609
|
const fetchStatus = async (generation = lifecycle.current.generation) => {
|
|
2533
2610
|
try {
|
|
@@ -2549,6 +2626,9 @@ export function SessionGroupTagRow(props) {
|
|
|
2549
2626
|
setAuthBusy(false);
|
|
2550
2627
|
setModeBusy(false);
|
|
2551
2628
|
setErr(null);
|
|
2629
|
+
setAuthUrl('');
|
|
2630
|
+
setCallbackUrl('');
|
|
2631
|
+
setSubmitting(false);
|
|
2552
2632
|
void fetchStatus(generation);
|
|
2553
2633
|
return () => {
|
|
2554
2634
|
lifecycle.current.mounted = false;
|
|
@@ -2587,6 +2667,7 @@ export function SessionGroupTagRow(props) {
|
|
|
2587
2667
|
const generation = ++lifecycle.current.generation;
|
|
2588
2668
|
setAuthBusy(true);
|
|
2589
2669
|
setErr(null);
|
|
2670
|
+
setCallbackUrl('');
|
|
2590
2671
|
try {
|
|
2591
2672
|
const res = await sendJson('POST', `/api/bots/${encodeURIComponent(props.bot.larkAppId)}/session-group-tag-auth`, {});
|
|
2592
2673
|
// A bot switch while the POST was in flight must neither surface the old
|
|
@@ -2597,17 +2678,35 @@ export function SessionGroupTagRow(props) {
|
|
|
2597
2678
|
setErr(responseErrorText(res));
|
|
2598
2679
|
return;
|
|
2599
2680
|
}
|
|
2600
|
-
|
|
2601
|
-
//
|
|
2681
|
+
const url = String(res.body.authUrl);
|
|
2682
|
+
// Show the paste overlay up front (mirrors groups-page / sessions-page):
|
|
2683
|
+
// same-machine browsers finish via the 127.0.0.1:9768 loopback and the
|
|
2684
|
+
// poll below auto-closes it; remote browsers (远程 VM / 中心化平台 m-* 子
|
|
2685
|
+
// 域) can't reach that loopback, so they finish by pasting the callback URL.
|
|
2686
|
+
setAuthUrl(url);
|
|
2687
|
+
window.open(url, '_blank', 'noopener');
|
|
2688
|
+
// 轮询授权结果:3s × 60 次(授权链接 5 分钟有效期同量级)。轮询到 authorized
|
|
2689
|
+
// 即收起弹窗;远程场景轮询不会命中,弹窗保持打开等用户手动粘贴,超时不报错。
|
|
2602
2690
|
for (let i = 0; i < 60; i++) {
|
|
2603
2691
|
await new Promise(r => setTimeout(r, 3000));
|
|
2604
2692
|
if (!lifecycle.current.mounted || generation !== lifecycle.current.generation)
|
|
2605
2693
|
return;
|
|
2606
|
-
if (await fetchStatus(generation))
|
|
2694
|
+
if (await fetchStatus(generation)) {
|
|
2695
|
+
if (lifecycle.current.mounted && generation === lifecycle.current.generation) {
|
|
2696
|
+
// 本机 loopback 已完成授权(state 一次即焚、pending 文件已删)。bump
|
|
2697
|
+
// generation 丢弃任何在途的 completeAuth——否则用户几乎同时点了「完成
|
|
2698
|
+
// 授权」,其 POST 会因 pending 已消费而失败,在绿徽标旁弹出假红错。
|
|
2699
|
+
lifecycle.current.generation += 1;
|
|
2700
|
+
setAuthUrl('');
|
|
2701
|
+
setCallbackUrl('');
|
|
2702
|
+
setSubmitting(false);
|
|
2703
|
+
setAuthBusy(false);
|
|
2704
|
+
// 清掉可能残留的 not-confirmed 提示:completeAuth 曾因 status GET 瞬时
|
|
2705
|
+
// 失败弹过提示,此刻轮询自愈翻绿,别把旧提示留在绿徽标旁。
|
|
2706
|
+
setErr(null);
|
|
2707
|
+
}
|
|
2607
2708
|
return;
|
|
2608
|
-
|
|
2609
|
-
if (lifecycle.current.mounted && generation === lifecycle.current.generation) {
|
|
2610
|
-
setErr(tr('botDefaults.sgTagAuthTimeout'));
|
|
2709
|
+
}
|
|
2611
2710
|
}
|
|
2612
2711
|
}
|
|
2613
2712
|
catch (e) {
|
|
@@ -2620,6 +2719,65 @@ export function SessionGroupTagRow(props) {
|
|
|
2620
2719
|
setAuthBusy(false);
|
|
2621
2720
|
}
|
|
2622
2721
|
}
|
|
2722
|
+
// Remote-callback fallback: POST the pasted 127.0.0.1 callback URL to the
|
|
2723
|
+
// dashboard's cross-process exchanger. The pending OAuth state (and the
|
|
2724
|
+
// resulting token) are disk-backed, so the exchange completes and the daemon's
|
|
2725
|
+
// status endpoint reflects it regardless of which process minted the auth URL.
|
|
2726
|
+
async function completeAuth() {
|
|
2727
|
+
const generation = lifecycle.current.generation;
|
|
2728
|
+
const trimmed = callbackUrl.trim();
|
|
2729
|
+
if (!trimmed)
|
|
2730
|
+
return;
|
|
2731
|
+
setSubmitting(true);
|
|
2732
|
+
setErr(null);
|
|
2733
|
+
// Shared closer for both the success path and the "already authorized"
|
|
2734
|
+
// recovery below: bump generation to stop startAuth's in-flight poll, then
|
|
2735
|
+
// clear the overlay.
|
|
2736
|
+
const finish = () => {
|
|
2737
|
+
if (!lifecycle.current.mounted || generation !== lifecycle.current.generation)
|
|
2738
|
+
return;
|
|
2739
|
+
lifecycle.current.generation += 1;
|
|
2740
|
+
setAuthUrl('');
|
|
2741
|
+
setCallbackUrl('');
|
|
2742
|
+
setSubmitting(false);
|
|
2743
|
+
setAuthBusy(false);
|
|
2744
|
+
};
|
|
2745
|
+
try {
|
|
2746
|
+
const res = await sendJson('POST', '/api/feed-groups/oauth-callback', { callbackUrl: trimmed });
|
|
2747
|
+
if (!lifecycle.current.mounted || generation !== lifecycle.current.generation)
|
|
2748
|
+
return;
|
|
2749
|
+
if (!res.ok || !res.body.ok) {
|
|
2750
|
+
// Narrow race: the same-machine loopback may have consumed this one-shot
|
|
2751
|
+
// state moments earlier (pending file deleted) while the poll hasn't
|
|
2752
|
+
// ticked yet — the exchange then fails with "state 不匹配". Re-check
|
|
2753
|
+
// status before surfacing a red error next to what is really a success.
|
|
2754
|
+
if (await fetchStatus(generation))
|
|
2755
|
+
return void finish();
|
|
2756
|
+
if (lifecycle.current.mounted && generation === lifecycle.current.generation) {
|
|
2757
|
+
// 服务端消息自带 ❌/✅ 前缀,剥掉——行内 err 渲染已统一加 ✗,否则双 emoji 叠加。
|
|
2758
|
+
const raw = String(res.body?.message || responseErrorText(res));
|
|
2759
|
+
setErr(raw.replace(/^[❌✅]\s*/u, ''));
|
|
2760
|
+
}
|
|
2761
|
+
return;
|
|
2762
|
+
}
|
|
2763
|
+
// 换 token 成功≠已授予 feed-group scope,且紧跟的 status GET 可能瞬时失败。
|
|
2764
|
+
// 只有复查确认 authorized 才 finish 关弹窗;否则保留弹窗+提示,让用户能重试,
|
|
2765
|
+
// 或看清「登录成功但没给标签权限」(与 groups-page 刷新失败保留弹窗同款)。
|
|
2766
|
+
if (await fetchStatus(generation))
|
|
2767
|
+
return void finish();
|
|
2768
|
+
if (lifecycle.current.mounted && generation === lifecycle.current.generation) {
|
|
2769
|
+
setErr(tr('botDefaults.sgTagAuthNotConfirmed'));
|
|
2770
|
+
}
|
|
2771
|
+
}
|
|
2772
|
+
catch (e) {
|
|
2773
|
+
if (lifecycle.current.mounted && generation === lifecycle.current.generation)
|
|
2774
|
+
setErr(caughtErrorText(e));
|
|
2775
|
+
}
|
|
2776
|
+
finally {
|
|
2777
|
+
if (lifecycle.current.mounted && generation === lifecycle.current.generation)
|
|
2778
|
+
setSubmitting(false);
|
|
2779
|
+
}
|
|
2780
|
+
}
|
|
2623
2781
|
const tagMode = status?.tagMode ?? 'feed-group';
|
|
2624
2782
|
const authorized = status?.authorized === true;
|
|
2625
2783
|
const modeOptions = [
|
|
@@ -2627,7 +2785,24 @@ export function SessionGroupTagRow(props) {
|
|
|
2627
2785
|
{ value: 'chat-tag', label: tr('botDefaults.sgTagModeChatTag') },
|
|
2628
2786
|
{ value: 'off', label: tr('botDefaults.sgTagModeOff') },
|
|
2629
2787
|
];
|
|
2630
|
-
return (
|
|
2788
|
+
return (_jsxs("div", { className: "bd-row", "data-session-group-tag-row": true, children: [_jsxs("div", { className: "bd-field", children: [_jsx(FieldTitle, { help: tr('botDefaults.sgTagHelp'), children: tr('botDefaults.sgTag') }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 10, flexWrap: 'wrap' }, children: [_jsx(DropdownField, { dataInput: "sessionGroupTagMode", ariaLabel: tr('botDefaults.sgTag'), value: tagMode, disabled: modeBusy || !status, options: modeOptions, onChange: next => void saveMode(next) }), tagMode === 'chat-tag' && (_jsx("span", { "data-sg-tag-state": "tenant", children: tr('botDefaults.sgTagChatTagNote') })), tagMode === 'feed-group' && (_jsxs(_Fragment, { children: [_jsx("span", { "data-sg-tag-state": authorized ? 'authorized' : 'unauthorized', children: authorized ? `🟢 ${tr('botDefaults.sgTagAuthorized')}` : `⚪ ${tr('botDefaults.sgTagUnauthorized')}` }), !authorized && (_jsx("button", { type: "button", className: "primary", "data-action": "session-group-tag-auth", disabled: authBusy, onClick: () => void startAuth(), children: authBusy ? tr('botDefaults.sgTagAuthWaiting') : tr('botDefaults.sgTagAuthStart') }))] })), err && _jsxs("span", { className: "status-error", children: ["\u2717 ", err] })] })] }), authUrl && typeof document !== 'undefined' ? (
|
|
2789
|
+
// Portal 到 body:此弹层内联渲染在 .page 页面容器的 DOM 里,而 .page 有
|
|
2790
|
+
// `animation: dashboard-page-enter … both`——fill-mode:both 使动画结束后
|
|
2791
|
+
// computed transform 持续为 identity matrix(而非关键字 none),会为后代
|
|
2792
|
+
// position:fixed 建立包含块,于是 .feed-group-auth-overlay 虽写了
|
|
2793
|
+
// fixed+inset:0 却相对 .page 而非视口定位,被约束进页面几何(表现为弹窗
|
|
2794
|
+
// 不全屏、偏挂在按钮附近)。挂到 body 顶层逃出该包含块,与 FeishuLoginModal /
|
|
2795
|
+
// auth-expired-overlay 一致,稳定全屏居中。
|
|
2796
|
+
createPortal(_jsx("div", { className: "feed-group-auth-overlay", children: _jsxs("section", { className: "feed-group-auth-card", role: "dialog", "aria-modal": "true", "aria-labelledby": "sg-tag-auth-title", children: [_jsx("h3", { id: "sg-tag-auth-title", children: tr('botDefaults.sgTagAuthTitle') }), _jsx("p", { children: tr('botDefaults.sgTagAuthHint') }), _jsx("button", { type: "button", className: "primary feed-group-auth-open", onClick: () => window.open(authUrl, '_blank', 'noopener'), children: tr('botDefaults.sgTagAuthOpen') }), _jsxs("label", { children: [_jsx("span", { children: tr('botDefaults.sgTagAuthPasteLabel') }), _jsx("input", { type: "url", "data-input": "sessionGroupTagCallbackUrl", value: callbackUrl, placeholder: "http://127.0.0.1:9768/callback?code=\u2026&state=\u2026", onChange: event => setCallbackUrl(event.currentTarget.value) })] }), _jsxs("div", { className: "actions", children: [_jsx("button", { type: "button", "data-action": "session-group-tag-cancel", onClick: () => {
|
|
2797
|
+
// 取消不仅关弹窗,还要停掉 startAuth 里仍在跑的 60 次轮询——否则
|
|
2798
|
+
// authBusy 一直为 true,「一键授权」卡在禁用态最长 3 分钟。bump
|
|
2799
|
+
// generation 让在途轮询的守卫失配即退出。
|
|
2800
|
+
lifecycle.current.generation += 1;
|
|
2801
|
+
setAuthUrl('');
|
|
2802
|
+
setCallbackUrl('');
|
|
2803
|
+
setSubmitting(false);
|
|
2804
|
+
setAuthBusy(false);
|
|
2805
|
+
}, children: tr('botDefaults.sgTagAuthCancel') }), _jsx("button", { type: "button", className: "primary", "data-action": "session-group-tag-complete", disabled: !callbackUrl.trim() || submitting, onClick: () => void completeAuth(), children: submitting ? tr('botDefaults.sgTagAuthSubmitting') : tr('botDefaults.sgTagAuthComplete') })] })] }) }), document.body)) : null] }));
|
|
2631
2806
|
}
|
|
2632
2807
|
function regularGroupMode(bot) {
|
|
2633
2808
|
return bot.regularGroupReplyMode === 'chat' || bot.regularGroupReplyMode === 'new-topic' || bot.regularGroupReplyMode === 'shared'
|