botmux 2.110.0 → 2.111.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/adapters/backend/tmux-backend.d.ts +25 -5
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +59 -93
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +5 -0
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.d.ts +30 -0
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +80 -13
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/backend/zellij-socket-probe.d.ts +18 -0
- package/dist/adapters/backend/zellij-socket-probe.d.ts.map +1 -0
- package/dist/adapters/backend/zellij-socket-probe.js +146 -0
- package/dist/adapters/backend/zellij-socket-probe.js.map +1 -0
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +5 -0
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex-app-turn.d.ts +43 -0
- package/dist/adapters/cli/codex-app-turn.d.ts.map +1 -0
- package/dist/adapters/cli/codex-app-turn.js +110 -0
- package/dist/adapters/cli/codex-app-turn.js.map +1 -0
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +6 -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 +1 -0
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/runner-input.d.ts +3 -2
- package/dist/adapters/cli/runner-input.d.ts.map +1 -1
- package/dist/adapters/cli/runner-input.js +7 -4
- package/dist/adapters/cli/runner-input.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +16 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +5 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +1 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/codex-app-runner.js +75 -12
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/command-handler.d.ts +11 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +101 -7
- 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 +69 -11
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/doc-comment-prompt.d.ts +57 -0
- package/dist/core/doc-comment-prompt.d.ts.map +1 -1
- package/dist/core/doc-comment-prompt.js +147 -2
- package/dist/core/doc-comment-prompt.js.map +1 -1
- package/dist/core/inflight-input-tracker.d.ts +2 -0
- package/dist/core/inflight-input-tracker.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/persistent-backend.d.ts +4 -0
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +6 -0
- package/dist/core/persistent-backend.js.map +1 -1
- package/dist/core/plugins/cli-generation.d.ts +3 -0
- package/dist/core/plugins/cli-generation.d.ts.map +1 -1
- package/dist/core/plugins/cli-generation.js +1 -0
- package/dist/core/plugins/cli-generation.js.map +1 -1
- package/dist/core/session-board.d.ts +2 -1
- package/dist/core/session-board.d.ts.map +1 -1
- package/dist/core/session-board.js +3 -2
- package/dist/core/session-board.js.map +1 -1
- package/dist/core/session-create.d.ts +38 -0
- package/dist/core/session-create.d.ts.map +1 -1
- package/dist/core/session-create.js +43 -9
- package/dist/core/session-create.js.map +1 -1
- package/dist/core/session-manager.d.ts +65 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +285 -68
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-rename.d.ts +25 -0
- package/dist/core/session-rename.d.ts.map +1 -0
- package/dist/core/session-rename.js +43 -0
- package/dist/core/session-rename.js.map +1 -0
- package/dist/core/session-title.d.ts +11 -0
- package/dist/core/session-title.d.ts.map +1 -0
- package/dist/core/session-title.js +17 -0
- package/dist/core/session-title.js.map +1 -0
- package/dist/core/trigger-session.d.ts +11 -0
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +61 -20
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +16 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +6 -2
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +48 -15
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/core/zellij-adopt-discovery.d.ts +17 -0
- package/dist/core/zellij-adopt-discovery.d.ts.map +1 -1
- package/dist/core/zellij-adopt-discovery.js +24 -4
- package/dist/core/zellij-adopt-discovery.js.map +1 -1
- package/dist/core/zellij-session-discovery.d.ts +3 -0
- package/dist/core/zellij-session-discovery.d.ts.map +1 -1
- package/dist/core/zellij-session-discovery.js +1 -0
- package/dist/core/zellij-session-discovery.js.map +1 -1
- package/dist/daemon.d.ts +3 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +181 -81
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +1 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +1 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/federated-group-core.d.ts +29 -8
- package/dist/dashboard/federated-group-core.d.ts.map +1 -1
- package/dist/dashboard/federated-group-core.js +68 -6
- package/dist/dashboard/federated-group-core.js.map +1 -1
- package/dist/dashboard/federation-api.d.ts +10 -9
- package/dist/dashboard/federation-api.d.ts.map +1 -1
- package/dist/dashboard/federation-api.js +82 -3
- package/dist/dashboard/federation-api.js.map +1 -1
- package/dist/dashboard/federation-spoke-api.d.ts +8 -9
- package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
- package/dist/dashboard/federation-spoke-api.js +7 -2
- package/dist/dashboard/federation-spoke-api.js.map +1 -1
- package/dist/dashboard/team-group.d.ts +21 -0
- package/dist/dashboard/team-group.d.ts.map +1 -1
- package/dist/dashboard/team-group.js +16 -0
- package/dist/dashboard/team-group.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +10 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +33 -1
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +1 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +8 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +5 -1
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +2 -4
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-7T7DPOV6.js +4 -0
- package/dist/dashboard-web/chunks/{chunk-SHZ5PUYF.js → chunk-IGXYYRYJ.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-GF7DU2B5.js → chunk-ISOD7VDX.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-TORH53FI.js → chunk-OEJIT66L.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-7UY333A5.js → chunk-PNK3HQBI.js} +2 -2
- package/dist/dashboard-web/chunks/{chunk-IAES47WV.js → chunk-YQFXGRSD.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-N6GKR6JL.js → connectors-page-UQ4QBE45.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-IK3GXSQU.js → groups-page-5AJPPJH2.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-T2PDFPGO.js → insights-page-R3DFECX4.js} +1 -1
- package/dist/dashboard-web/chunks/{legacy-workflow-page-YQPLKH74.js → legacy-workflow-page-QMC7OZXH.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-7EL3LVJS.js → monitor-room-NLMKJLDY.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-BCADF56L.js → monitoring-page-EHSOX4GV.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-KP7BDLAE.js → office-page-OXJKFJ4R.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-6GWDHDTI.js → overview-page-GJHIVXJF.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-2OFR2IBG.js → roles-page-6ZODQISW.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-TAWMTSNL.js → schedules-page-DAGMHVCH.js} +1 -1
- package/dist/dashboard-web/chunks/{sessions-page-42QZHPPP.js → sessions-page-NNZIDHZM.js} +1 -1
- package/dist/dashboard-web/chunks/{settings-page-OVKXUXSV.js → settings-page-LJIXX5LQ.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-Y2EC3NBI.js → skills-page-J7EVUHXP.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-QYMJUH5F.js → team-federation-page-YM5JBIII.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-FZJCW5QG.js → v3-page-YLYVHGKD.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-FBHBBCAL.js → whiteboards-page-75N2U6W4.js} +1 -1
- package/dist/dashboard.js +46 -7
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +8 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +8 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +96 -32
- 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 +16 -5
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +1 -0
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/card-prefs-store.d.ts +4 -0
- package/dist/services/card-prefs-store.d.ts.map +1 -1
- package/dist/services/card-prefs-store.js +8 -0
- package/dist/services/card-prefs-store.js.map +1 -1
- package/dist/services/default-worktree.d.ts.map +1 -1
- package/dist/services/default-worktree.js +4 -1
- package/dist/services/default-worktree.js.map +1 -1
- package/dist/services/group-creator.d.ts +19 -0
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +62 -28
- package/dist/services/group-creator.js.map +1 -1
- package/dist/services/groups-store.d.ts +7 -5
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +10 -8
- package/dist/services/groups-store.js.map +1 -1
- package/dist/setup/ensure-tmux.d.ts +17 -0
- package/dist/setup/ensure-tmux.d.ts.map +1 -1
- package/dist/setup/ensure-tmux.js +72 -1
- package/dist/setup/ensure-tmux.js.map +1 -1
- package/dist/types.d.ts +56 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +27 -0
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +59 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/codex-app-context.d.ts +9 -0
- package/dist/utils/codex-app-context.d.ts.map +1 -0
- package/dist/utils/codex-app-context.js +47 -0
- package/dist/utils/codex-app-context.js.map +1 -0
- package/dist/utils/pending-input-queue.d.ts +2 -0
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js +6 -0
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/worker.js +197 -38
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-QXZ2VFJJ.js +0 -4
|
@@ -6,7 +6,7 @@ Codex \u4F1A\u8BDD\u7684\u300C\u8BFB\u300D\u591A\u8D70 shell\uFF08exec_command\u
|
|
|
6
6
|
{paths}
|
|
7
7
|
|
|
8
8
|
\u53EA\u4F1A\u66F4\u65B0\u5F53\u524D\u8FD0\u884C\u7684\u5B89\u88C5\u4F4D\u7F6E\u3002\u4ECD\u8981\u7EE7\u7EED\uFF1F`,"update.confirmUpdate":"\u5C06\u8FD0\u884C {command}\uFF0C\u66F4\u65B0\u5230 {version}\u3002\u786E\u8BA4\u7EE7\u7EED\uFF1F","update.confirmUpdateNoVer":"\u5C06\u8FD0\u884C {command} \u66F4\u65B0\u5230\u6700\u65B0\u7248\u3002\u786E\u8BA4\u7EE7\u7EED\uFF1F","update.nodeTooOldAlert":"\u5F53\u524D Node \u7248\u672C {version} \u8FC7\u4F4E\uFF08\u8981\u6C42 \u2265 {required}\uFF09\uFF0C\u8BF7\u5148\u5347\u7EA7 Node \u518D\u66F4\u65B0\u3002","update.updating":"\u6B63\u5728\u66F4\u65B0\uFF08{command}\uFF09\uFF0C\u8BF7\u7A0D\u5019\u2026","update.unsupportedInstall":"\u5F53\u524D\u5B89\u88C5\u65B9\u5F0F\u65E0\u6CD5\u5B89\u5168\u81EA\u52A8\u66F4\u65B0\uFF1B\u76EE\u524D\u4EC5\u652F\u6301 npm / pnpm \u5168\u5C40\u5B89\u88C5\u3002\u8BF7\u4F7F\u7528\u539F\u5305\u7BA1\u7406\u5668\u624B\u52A8\u66F4\u65B0\u3002","update.updatedChanged":"\u5DF2\u66F4\u65B0 {old} \u2192 {new}\u3002","update.confirmRestart":"\u9700\u8981\u91CD\u542F botmux \u4EE5\u5E94\u7528\u65B0\u7248\u672C\u3002\u73B0\u5728\u91CD\u542F\uFF1F\uFF08\u6240\u6709\u4F1A\u8BDD\u4F1A\u51B7\u6062\u590D\uFF0C\u4EEA\u8868\u76D8\u4F1A\u77ED\u6682\u65AD\u5F00\u5E76\u81EA\u52A8\u91CD\u8FDE\uFF09","update.alreadyLatestRun":"\u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF08{version}\uFF09\uFF0C\u65E0\u9700\u66F4\u65B0\u3002","update.updateFailed":"\u66F4\u65B0\u5931\u8D25\uFF1A{detail}","update.noRestartHint":"\u66F4\u65B0\u5B8C\u6210\u3002\u7A0D\u540E\u8BF7\u624B\u52A8\u91CD\u542F\uFF08botmux restart\uFF09\u4EE5\u5E94\u7528\u65B0\u7248\u672C\u3002","update.confirmPlainRestart":"\u91CD\u542F botmux\uFF1F\u6240\u6709\u4F1A\u8BDD\u4F1A\u51B7\u6062\u590D\uFF0C\u4EEA\u8868\u76D8\u4F1A\u77ED\u6682\u65AD\u5F00\u5E76\u81EA\u52A8\u91CD\u8FDE\u3002","update.restarting":"\u6B63\u5728\u91CD\u542F botmux\uFF0C\u7B49\u5F85\u91CD\u8FDE\u2026","update.restartSlow":"\u91CD\u542F\u8017\u65F6\u8F83\u957F\uFF0C\u8BF7\u7A0D\u540E\u624B\u52A8\u5237\u65B0\u9875\u9762\u3002","update.restartFailed":"\u91CD\u542F\u5931\u8D25\uFF1A{detail}","skills.title":"Skill \u7BA1\u7406","skills.installed":"\u5DF2\u5B89\u88C5 Skills","skills.installedHelp":"\u672C\u673A\u5DF2\u5B89\u88C5\u3001\u53EF\u4F9B Bot \u4F7F\u7528\u7684 Skills\u3002","skills.installedCount":"{count} \u4E2A","skills.metricInstalled":"\u5DF2\u5B89\u88C5 Skills","skills.metricBots":"\u5DF2\u914D\u7F6E Bot","skills.metricAttached":"\u4F18\u5148\u5F15\u7528","skills.install":"\u5B89\u88C5 Skill","skills.installInfoLabel":"\u5B89\u88C5\u4F4D\u7F6E\u8BF4\u660E","skills.installInfo":"\u6CE8\u518C\u4FE1\u606F\u5199\u5165 ~/.botmux/skills/registry.json\uFF1B\u5B89\u88C5\u5185\u5BB9\u5B58\u653E\u5728 ~/.botmux/skills/store\u3002\u672C\u673A CLI Skill \u4EE5\u539F\u8DEF\u5F84\u5F15\u7528\uFF0C\u4E0D\u5199\u5165 CLI \u5168\u5C40\u76EE\u5F55\u3002","skills.source":"\u5BFC\u5165\u5730\u5740","skills.sourcePlaceholder":"\u7C98\u8D34 GitHub \u4ED3\u5E93 / Git URL / agentbuddy \u5B89\u88C5\u547D\u4EE4 / \u672C\u673A Skill \u76EE\u5F55","skills.sourceHelpRemoteLabel":"GitHub / Git: ","skills.sourceHelpRemote":"\u53EF\u7C98\u8D34\u4ED3\u5E93\u6839\u5730\u5740\uFF1B\u591A Skill \u4ED3\u5E93\u70B9\u51FB\u5B89\u88C5\u540E\u9009\u62E9\u3002","skills.sourceHelpLocalLabel":"\u672C\u673A CLI Skill \u76EE\u5F55: ","skills.sourceHelpLocal":"\u76F4\u63A5\u5F15\u7528\u539F\u5730\u5740\uFF0C\u4E0D\u590D\u5236\u5230 botmux store\u3002","skills.sourceHelpAgentbuddyLabel":"AgentBuddy: ","skills.sourceHelpAgentbuddy":"\u76F4\u63A5\u7C98\u8D34 agentbuddy \u5B89\u88C5\u547D\u4EE4\uFF0C\u4F8B\u5982 agentbuddy skill collection add <uid> / agentbuddy plugin collection add <uid>\uFF1B\u5F00\u6E90 skills \u7528 skills add owner/repo \u4E5F\u8BA4\uFF08\u8D70 GitHub \u5B89\u88C5\uFF09\u3002agentbuddy \u547D\u4EE4\u9700\u90E8\u7F72\u673A\u5DF2 agentbuddy login\u3002","skills.agentbuddyNotFound":"\u90E8\u7F72\u673A\u672A\u627E\u5230 agentbuddy CLI\u3002\u8BF7\u5728\u90E8\u7F72\u673A\u5168\u5C40\u5B89\u88C5\uFF0C\u6216\u8BBE\u7F6E BOTMUX_AGENTBUDDY_CMD\u3002","skills.agentbuddyNeedsLogin":"\u90E8\u7F72\u673A agentbuddy \u672A\u767B\u5F55\u3002\u8BF7\u5728\u90E8\u7F72\u673A\u8FD0\u884C agentbuddy login \u540E\u91CD\u8BD5\u3002","skills.agentbuddyCommandFailed":"agentbuddy \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u67E5\u770B\u90E8\u7F72\u673A\u65E5\u5FD7\u3002","skills.agentbuddyTelemetryFailed":"\u5185\u5D4C telemetry \u6E05\u7406\u5931\u8D25\uFF0C\u5DF2\u4E2D\u65AD\u5B89\u88C5\uFF08\u5982\u9700\u4FDD\u7559\u53EF\u8BBE BOTMUX_AGENTBUDDY_KEEP_TELEMETRY=1\uFF09\u3002","skills.agentbuddyNoSkill":"agentbuddy \u672A\u4EA7\u51FA\u4EFB\u4F55 Skill\uFF0C\u8BF7\u68C0\u67E5 identifier \u662F\u5426\u6B63\u786E\u3002","skills.agentbuddyInvalid":"agentbuddy identifier \u683C\u5F0F\u4E0D\u5408\u6CD5\u3002","skills.discover":"\u53D1\u73B0 Skill","skills.localDiscover":"\u6D4F\u89C8\u672C\u673A Skill","skills.localDiscoverTitle":"\u672C\u673A CLI Skill","skills.localDiscoverHelp":"\u626B\u63CF\u672C\u673A CLI \u5DF2\u5B89\u88C5\u7684 Skill\uFF0C\u5E76\u6CE8\u518C\u4E3A\u672C\u5730\u5F15\u7528\u3002","skills.scan":"\u626B\u63CF","skills.scanning":"\u6B63\u5728\u626B\u63CF","skills.scanFound":"\u53D1\u73B0 {count} \u4E2A Skill","skills.scanEmpty":"\u6CA1\u6709\u53D1\u73B0\u53EF\u5B89\u88C5\u7684 Skill\u3002","skills.sourceRequired":"\u8BF7\u5148\u586B\u5199\u5BFC\u5165\u5730\u5740\u3002","skills.advanced":"\u9AD8\u7EA7\u9009\u9879","skills.discoverTitle":"\u53D1\u73B0\u672C\u673A CLI Skill","skills.discoverHelp":"\u626B\u63CF\u5DF2\u914D\u7F6E bot \u7684 CLI Skill \u76EE\u5F55\uFF1B\u9009\u4E2D\u540E\u6CE8\u518C\u4E3A\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u590D\u5236\u6587\u4EF6\u3002","skills.discoverEmpty":"\u6CA1\u6709\u5728\u672C\u673A CLI skill \u76EE\u5F55\u4E2D\u53D1\u73B0\u53EF\u6CE8\u518C\u7684 Skill\u3002","skills.discoverGroupEmpty":"\u8FD9\u4E2A CLI \u76EE\u5F55\u4E0B\u6CA1\u6709\u53EF\u6CE8\u518C\u7684 Skill\u3002","skills.discoverRegistered":"\u5DF2\u6CE8\u518C","skills.discoverSelectAll":"\u5168\u9009\u672A\u6CE8\u518C","skills.discoverClearSelection":"\u53D6\u6D88\u5168\u9009","skills.discoverRegister":"\u6CE8\u518C\u9009\u4E2D","skills.discoverClose":"\u5173\u95ED","skills.discoverNothingSelected":"\u8BF7\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u672A\u6CE8\u518C\u7684 Skill\u3002","skills.discoverRegisteringBatch":"\u6B63\u5728\u6279\u91CF\u6CE8\u518C {total} \u4E2A Skill","skills.sourceCodex":"\u672C\u673A Codex","skills.sourceClaude":"\u672C\u673A Claude","skills.sourceTrae":"\u672C\u673A Trae","skills.sourceCursor":"\u672C\u673A Cursor","skills.sourceGemini":"\u672C\u673A Gemini","skills.sourceOpenCode":"\u672C\u673A OpenCode","skills.sourceLocalLink":"\u672C\u673A\u5F15\u7528","skills.sourceBotmuxCopy":"botmux store","skills.path":"\u4ED3\u5E93\u5185\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09","skills.pathPlaceholder":"\u7559\u7A7A\u5219\u626B\u63CF\u4ED3\u5E93\u6839\u76EE\u5F55\uFF1B\u4E5F\u53EF\u586B\u5199\u5355\u4E2A Skill \u76EE\u5F55","skills.ref":"Ref\uFF08\u53EF\u9009\uFF09","skills.refPlaceholder":"\u7559\u7A7A\u5219\u4F7F\u7528 GitHub URL \u4E2D\u7684\u5206\u652F\u6216\u9ED8\u8BA4 HEAD","skills.link":"\u672C\u5730\u94FE\u63A5\uFF08\u4E0D\u590D\u5236\uFF09","skills.installSubmit":"\u5B89\u88C5","skills.installSelected":"\u5B89\u88C5\u9009\u4E2D","skills.installSelectionTitle":"\u9009\u62E9\u8981\u5B89\u88C5\u7684 Skill","skills.installSelectionHelp":"\u53D1\u73B0 {count} \u4E2A Skill\uFF1B\u53D6\u6D88\u4E0D\u9700\u8981\u7684\u9879\u540E\u518D\u5B89\u88C5\u3002","skills.installSelectionCancel":"\u53D6\u6D88","skills.update":"\u66F4\u65B0","skills.remove":"\u5220\u9664","skills.select":"\u9009\u62E9","skills.searchLabel":"\u641C\u7D22\u5DF2\u5B89\u88C5\u7684 Skills","skills.searchPlaceholder":"\u641C\u7D22\u5DF2\u5B89\u88C5\u7684 Skills","skills.clearSearch":"\u6E05\u9664\u641C\u7D22","skills.resultCount":"{count} \u4E2A\u7ED3\u679C","skills.selectAllSkills":"\u5168\u9009\u5168\u90E8 {count} \u4E2A","skills.selectSearchResults":"\u5168\u9009 {count} \u4E2A\u641C\u7D22\u7ED3\u679C","skills.selectNamed":"\u9009\u62E9 {skill}","skills.selectedCount":"\u5DF2\u9009\u62E9 {count} \u4E2A","skills.selectedHidden":"\xB7 {count} \u4E2A\u4E0D\u5728\u5F53\u524D\u7ED3\u679C","skills.bulkActions":"\u5DF2\u5B89\u88C5 Skills \u6279\u91CF\u64CD\u4F5C","skills.removeSelected":"\u5220\u9664 {count} \u4E2A","skills.emptyTitle":"\u8FD8\u6CA1\u6709\u5B89\u88C5 Skill","skills.emptyHelp":"\u5B89\u88C5\u540E\uFF0C\u5B83\u4EEC\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002","skills.noResultsTitle":"\u6CA1\u6709\u627E\u5230\u201C{query}\u201D","skills.noResultsHelp":"\u8BF7\u5C1D\u8BD5\u5176\u4ED6\u5173\u952E\u8BCD\u3002","skills.removeOneTitle":"\u5220\u9664\u201C{skill}\u201D\uFF1F","skills.removeManyTitle":"\u5220\u9664 {count} \u4E2A Skills\uFF1F","skills.removeOnePermanentHelp":"\u8FD9\u4F1A\u4ECE\u5F53\u524D\u73AF\u5883\u79FB\u9664\u8BE5 Skill\uFF0C\u5E76\u5220\u9664 botmux store \u4E2D\u7684\u672C\u5730\u526F\u672C\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002","skills.removePermanentHelp":"\u8FD9\u4F1A\u4ECE\u5F53\u524D\u73AF\u5883\u79FB\u9664\u6240\u9009 Skill\uFF0C\u5E76\u5220\u9664 botmux store \u4E2D\u7684\u672C\u5730\u526F\u672C\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002","skills.removeMore":"\u4EE5\u53CA\u53E6\u5916 {count} \u4E2A","skills.removeInUseOneTitle":"\u4ECD\u8981\u5220\u9664\u201C{skill}\u201D\uFF1F","skills.removeInUseManyTitle":"\u4ECD\u8981\u5220\u9664 {count} \u4E2A Skills\uFF1F","skills.removeInUseOneHelp":"\u5B83\u6B63\u88AB {count} \u4E2A Bot \u5F15\u7528\u3002\u5220\u9664\u540E\uFF0C\u8FD9\u4E9B Bot \u5C06\u65E0\u6CD5\u7EE7\u7EED\u4F7F\u7528\u5B83\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002","skills.removeInUseManyHelp":"\u8FD9\u4E9B Skills \u6B63\u88AB {count} \u4E2A Bot \u5F15\u7528\u3002\u5220\u9664\u540E\uFF0C\u8FD9\u4E9B Bot \u5C06\u65E0\u6CD5\u7EE7\u7EED\u4F7F\u7528\u5B83\u4EEC\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002","skills.removeReferencesDetail":"\u53D7\u5F71\u54CD\u7684 Bot","skills.removeOneConfirm":"\u5220\u9664 Skill","skills.removeAnyway":"\u4ECD\u8981\u5220\u9664","skills.removing":"\u6B63\u5728\u5220\u9664\u2026","skills.removingCount":"\u6B63\u5728\u5220\u9664 {count} \u4E2A Skills\u2026","skills.removedOne":"\u5DF2\u5220\u9664\u201C{skill}\u201D","skills.removedMany":"\u5DF2\u5220\u9664 {count} \u4E2A Skills","skills.removeFailed":"\u672A\u80FD\u5220\u9664\uFF0C\u8BF7\u91CD\u8BD5\uFF1A{detail}","skills.pageStatus":"{page} / {pages}","skills.prevPage":"\u4E0A\u4E00\u9875","skills.nextPage":"\u4E0B\u4E00\u9875","skills.empty":"\u6682\u65E0\u5DF2\u5B89\u88C5 skill\u3002\u53EF\u4EE5\u4ECE\u672C\u673A\u76EE\u5F55\u3001Git \u6216 GitHub \u5B89\u88C5\u3002","skills.apiUnavailable":"\u5F53\u524D Dashboard \u540E\u7AEF\u4E0D\u652F\u6301 Skill API\uFF0C\u901A\u5E38\u662F\u524D\u7AEF\u5DF2\u66F4\u65B0\u4F46 botmux \u8FDB\u7A0B\u672A\u91CD\u542F\u3002\u8BF7\u91CD\u542F botmux \u540E\u5237\u65B0\u9875\u9762\u3002","skills.globalDefaults":"\u5168\u5C40 Skill \u6CE8\u5165\u914D\u7F6E","skills.globalProject":"\u5DE5\u4F5C\u533A Skill","skills.globalProjectOff":"\u5FFD\u7565\u5DE5\u4F5C\u533A Skill","skills.globalProjectOffHelp":"\u4EC5\u8BFB\u53D6\u5168\u5C40 CLI Skill \u548C botmux Skill","skills.globalProjectAll":"\u8BFB\u53D6\u5DE5\u4F5C\u533A Skill","skills.globalProjectAllHelp":`\u8BFB\u53D6 .agents/skills \u4E0E
|
|
9
|
-
.botmux/skills`,"skills.globalDelivery":"Skill \u6CE8\u5165\u65B9\u5F0F","skills.bots":"Bot Skill \u914D\u7F6E","skills.botsHelp":"\u4E3A\u6BCF\u4E2A bot \u8BBE\u7F6E\u4F18\u5148\u62AB\u9732\u7684 Skill\u3002","skills.botCount":"{count} \u4E2A Bot","skills.skillCount":"{count} \u4E2A Skill","skills.attach":"\u52A0\u5165\u4F18\u5148\u62AB\u9732","skills.detach":"\u79FB\u9664","skills.detachNamed":"\u79FB\u9664 {skill}","skills.delivery":"\u6CE8\u5165\u65B9\u5F0F","skills.deliveryAuto":"\u81EA\u52A8","skills.deliveryAutoHelp":"\u4F18\u5148\u7528 CLI \u539F\u751F\u901A\u9053\uFF1B\u4E0D\u652F\u6301\u65F6\u81EA\u52A8\u6539\u7528\u63D0\u793A\u8BCD\u6CE8\u5165","skills.deliveryPrompt":"\u63D0\u793A\u8BCD","skills.deliveryPromptHelp":"\u628A Skill \u6E05\u5355\u5199\u5165\u4F1A\u8BDD\u63D0\u793A\u8BCD\uFF0C\u517C\u5BB9\u6240\u6709 CLI","skills.deliveryNative":"\u539F\u751F","skills.deliveryNativeHelp":"\u53EA\u4EA4\u7ED9 CLI \u81EA\u5DF1\u7684 Skill \u673A\u5236\uFF0C\u4E0D\u505A\u63D0\u793A\u8BCD\u515C\u5E95","skills.projectMode":"\u5DE5\u4F5C\u533A Skills","skills.projectDefault":"\u8DDF\u968F\u5168\u5C40","skills.projectDefaultHelp":"\u4F7F\u7528\u5DE6\u4FA7\u9879\u76EE Skill \u9ED8\u8BA4\u503C","skills.projectOff":"\u4E0D\u8BFB\u53D6","skills.projectOffHelp":"\u8FD9\u4E2A bot \u4E0D\u8BFB\u53D6\u5DE5\u4F5C\u533A skill","skills.projectAll":"\u8BFB\u53D6","skills.projectAllHelp":"\u8FD9\u4E2A bot \u52A0\u5165\u5DE5\u4F5C\u533A skill \u5019\u9009","skills.priority":"\u4F18\u5148 skills","skills.noPriority":"\u672A\u914D\u7F6E\uFF0C\u4FDD\u6301 CLI \u9ED8\u8BA4\u884C\u4E3A","skills.pickerPlaceholder":"\u9009\u62E9\u4F18\u5148 Skill","skills.pickerSelectedCount":"\u5DF2\u9009\u62E9 {count} \u4E2A Skill","skills.pickerTriggerHint":"\u70B9\u51FB\u641C\u7D22\u6216\u8C03\u6574\u591A\u9009","skills.pickerSearchPlaceholder":"\u641C\u7D22 Skill \u540D\u79F0\u6216\u63CF\u8FF0","skills.pickerSelectionMeta":"\u5DF2\u9009 {selected} / \u5171 {total}","skills.pickerClear":"\u6E05\u7A7A","skills.pickerNoResults":"\u6CA1\u6709\u5339\u914D\u7684 Skill","skills.saveSelection":"\u4FDD\u5B58\u9009\u62E9","skills.cancel":"\u53D6\u6D88","skills.saving":"\u4FDD\u5B58\u4E2D\u2026","skills.policySaved":"\u4F18\u5148 Skill \u5DF2\u4FDD\u5B58","skills.dangling":"\u672A\u5B89\u88C5","skills.removeInUse":'Skill "{skill}" \u4ECD\u88AB\u4EE5\u4E0B\u914D\u7F6E\u5F15\u7528\uFF1A{refs}\u3002\u5220\u9664\u53EA\u4F1A\u79FB\u9664 registry \u6587\u4EF6\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u6E05\u7406\u5F15\u7528\u3002\u7EE7\u7EED\u5220\u9664\uFF1F',"skills.saved":"\u5DF2\u4FDD\u5B58","skills.failed":"\u5931\u8D25","skills.jobRunning":"\u5904\u7406\u4E2D...","skills.refresh":"\u5237\u65B0","botDefaults.title":"Bot \u914D\u7F6E","botDefaults.metaOnline":"\u5728\u7EBF \xB7 daemon \u6B63\u5E38","botDefaults.search":"\u641C\u7D22 bot \u540D / app id","botDefaults.refresh":"\u5237\u65B0","botDefaults.sectionOncall":"\u65B0\u7FA4 Oncall","botDefaults.sectionBrand":"\u5361\u7247\u7B7E\u540D","botDefaults.renameTitle":"\u4FEE\u6539\u673A\u5668\u4EBA\u540D\u79F0","botDefaults.renameAction":"\u4FEE\u6539\u540D\u79F0","botDefaults.renameSave":"\u4FDD\u5B58","botDefaults.renameCancel":"\u53D6\u6D88","botDefaults.renameEmpty":"\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A","botDefaults.renaming":"\u6B63\u5728\u540C\u6B65\u5230\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\uFF08\u6539\u540D\u5E76\u53D1\u5E03\u65B0\u7248\u672C\uFF0C\u7EA6 10 \u79D2\uFF09\u2026","botDefaults.renameOkFeishu":"\u5DF2\u4FEE\u6539\u98DE\u4E66\u5E94\u7528\u540D\uFF0C\u7FA4\u5185\u540D\u79F0\u5DF2\u751F\u6548","botDefaults.renameLocalOnly":"\u98DE\u4E66\u4FA7\u6539\u540D\u5931\u8D25\uFF08{reason}\uFF09\uFF0C\u5DF2\u4EC5\u66F4\u65B0 dashboard \u5C55\u793A\u540D","botDefaults.renameWarn.no_session":"\u670D\u52A1\u5668\u7F3A\u5C11\u98DE\u4E66 Web \u767B\u5F55\u6001\uFF0C\u8BF7\u5728\u670D\u52A1\u5668\u8FD0\u884C botmux setup \u91CD\u65B0\u626B\u7801","botDefaults.renameWarn.session_expired":"\u98DE\u4E66 Web \u767B\u5F55\u6001\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u5728\u670D\u52A1\u5668\u8FD0\u884C botmux setup \u91CD\u65B0\u626B\u7801","botDefaults.renameWarn.no_access":"\u5F53\u524D\u7F13\u5B58\u7684\u98DE\u4E66\u8D26\u53F7\u4E0D\u662F\u8BE5\u5E94\u7528\u7684\u534F\u4F5C\u8005","botDefaults.renameWarn.unsupported_brand":"\u56FD\u9645\u7248 Lark \u79DF\u6237\u6682\u4E0D\u652F\u6301\u81EA\u52A8\u6539\u540D","botDefaults.renameFailed":"\u6539\u540D\u5931\u8D25\uFF1A{error}","feishuLogin.entry":"\u626B\u7801\u767B\u5F55\u98DE\u4E66","feishuLogin.title":"\u626B\u7801\u5237\u65B0\u98DE\u4E66\u767B\u5F55\u6001","feishuLogin.starting":"\u6B63\u5728\u83B7\u53D6\u4E8C\u7EF4\u7801\u2026","feishuLogin.scanHint":"\u7528\u98DE\u4E66 App \u626B\u7801\u5E76\u786E\u8BA4\u767B\u5F55\uFF0C\u5373\u53EF\u6388\u6743\u6539\u540D\uFF08\u767B\u5F55\u6001\u4EC5\u5B58\u672C\u673A\uFF0C\u4E0E setup \u590D\u7528\uFF09","feishuLogin.success":"\u2713 \u767B\u5F55\u6210\u529F\uFF0C\u6B63\u5728\u4E3A\u4F60\u91CD\u8BD5\u6539\u540D\u2026","feishuLogin.failed":"\u767B\u5F55\u5931\u8D25\uFF1A{reason}","feishuLogin.retry":"\u91CD\u65B0\u83B7\u53D6\u4E8C\u7EF4\u7801","feishuLogin.close":"\u5173\u95ED","feishuLogin.qrAlt":"\u98DE\u4E66\u767B\u5F55\u4E8C\u7EF4\u7801","botDefaults.sectionAgent":"Agent \u914D\u7F6E","botDefaults.agentCli":"CLI","botDefaults.agentMissingOption":"{label}\uFF08\u672A\u5B89\u88C5\uFF1A{command}\uFF09","botDefaults.agentMissingHint":"\u5F53\u524D daemon PATH \u627E\u4E0D\u5230 {command}\uFF1B\u4FDD\u5B58\u540E\u65B0\u4F1A\u8BDD\u65E0\u6CD5\u542F\u52A8\uFF0C\u8BF7\u5148\u5B89\u88C5\u6216\u4FEE\u6B63\u8DEF\u5F84\u3002","botDefaults.agentModel":"\u6A21\u578B","botDefaults.agentModelPlaceholder":"\u7559\u7A7A\u4F7F\u7528\u8BE5 CLI \u9ED8\u8BA4\u6A21\u578B","botDefaults.agentHelp":"\u53EA\u5F71\u54CD\u65B0\u4F1A\u8BDD\uFF1B\u5DF2\u6709\u4F1A\u8BDD\u7EE7\u7EED\u4F7F\u7528\u521B\u5EFA\u65F6\u7684 CLI / \u6A21\u578B\uFF0C\u9700\u5173\u95ED\u540E\u91CD\u5F00\u624D\u4F1A\u5207\u6362\u3002","botDefaults.agentSave":"\u4FDD\u5B58 CLI / \u6A21\u578B","botDefaults.skillInjection":"botmux skills \u6CE8\u5165\u65B9\u5F0F","botDefaults.skillInjectionDynamic":"\u52A8\u6001\u6CE8\u5165\uFF08--plugin-dir\uFF0C\u9010\u4F1A\u8BDD\uFF09","botDefaults.skillInjectionDynamicUnsupported":"\u52A8\u6001\u6CE8\u5165\uFF08\u8BE5 CLI \u4E0D\u652F\u6301\uFF09","botDefaults.skillInjectionPrompt":"prompt \u2014 \u6CE8\u5165\u4F1A\u8BDD prompt\uFF0C\u4E0D\u843D\u5168\u5C40\u76D8","botDefaults.skillInjectionGlobal":"global \u2014 \u88C5\u8FDB CLI \u5168\u5C40 skills \u76EE\u5F55","botDefaults.skillInjectionOff":"off \u2014 \u53EA\u7ED9 botmux --help \u5F15\u5BFC","botDefaults.skillInjectionHelpDynamic":"\u8BE5 CLI \u652F\u6301 --plugin-dir \u52A8\u6001\u6CE8\u5165\u3002skills \u4EC5\u5F53\u524D\u4F1A\u8BDD\u53EF\u89C1\uFF0C\u4E0D\u5199\u5165\u5168\u5C40\u76EE\u5F55\uFF0C\u65E0\u9700\u989D\u5916\u914D\u7F6E\u3002","botDefaults.skillInjectionHelp":"\u9009\u62E9 botmux skills \u7684\u6CE8\u5165\u65B9\u5F0F\uFF1Aprompt \u4E3A\u9ED8\u8BA4\u65B9\u5F0F\uFF0C\u4F1A\u5728\u4F1A\u8BDD\u5F00\u59CB\u65F6\u5199\u5165\u63D0\u793A\u8BCD\u4E14\u4E0D\u6539\u5168\u5C40\u76EE\u5F55\uFF1Bglobal \u5B89\u88C5\u5230 CLI \u5168\u5C40 skills \u76EE\u5F55\uFF1Boff \u4EC5\u4FDD\u7559 botmux --help \u5F15\u5BFC\u3002\u6539\u52A8\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF0C\u5207\u6362 global \u9700\u91CD\u542F daemon\u3002","botDefaults.agentSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.warning":"\u5F00\u542F\u540E\uFF0C\u6CA1\u6709 oncall binding \u7684\u7FA4\u4F1A\u5728\u4E0B\u6B21\u5F00\u65B0\u8BDD\u9898\u65F6\u81EA\u52A8\u7ED1\u5B9A\u5230\u8BE5\u76EE\u5F55\uFF1B\u624B\u52A8\u7ED1\u5B9A\u6216\u624B\u52A8\u89E3\u7ED1\u8FC7\u7684\u7FA4\u4E0D\u4F1A\u88AB\u8986\u76D6\u3002","botDefaults.empty":"\u6CA1\u6709\u5728\u7EBF bot\u3002\u5148 botmux restart \u8BA9 daemon \u4E0A\u7EBF\u3002","botDefaults.defaultOncall":"\u9ED8\u8BA4\u8FDB\u5165 oncall \u6A21\u5F0F","botDefaults.defaultOncallHelp":"\u6240\u6709\u672A\u7ED1\u5B9A\u7684\u7FA4\u4E0B\u6B21\u5F00\u8BDD\u9898\u81EA\u52A8\u7ED1\u5B9A","botDefaults.workingDir":"\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55","botDefaults.lastEnabled":"\u4E0A\u6B21\u542F\u7528\u65F6\u95F4","botDefaults.autobound":"\u5DF2\u81EA\u52A8\u7ED1\u5B9A {count} \u4E2A\u7FA4","botDefaults.save":"\u4FDD\u5B58","botDefaults.required":"\u9009\u62E9\u300C\u4EC5\u9ED8\u8BA4\u76EE\u5F55\u300D\u6216\u300COncall \u6A21\u5F0F\u300D\u65F6\u5FC5\u987B\u586B\u5DE5\u4F5C\u76EE\u5F55","botDefaults.sectionWorkingDir":"\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55","botDefaults.workingDirMode":"\u6A21\u5F0F","botDefaults.workingDirField":"\u76EE\u5F55","botDefaults.workingDirModeOff":"\u5173\u95ED\uFF08\u65B0\u4F1A\u8BDD\u5F39\u300C\u9009\u4ED3\u5E93\u300D\u5361\uFF09","botDefaults.workingDirModeDefault":"\u4EC5\u9ED8\u8BA4\u76EE\u5F55\uFF08\u4E0D\u6539\u6743\u9650\uFF09","botDefaults.workingDirModeOncall":"Oncall \u6A21\u5F0F\uFF08\u7FA4\u5185\u5F00\u653E\u5BF9\u8BDD\uFF09","botDefaults.workingDirModeHelp":"\u8BBE\u7F6E\u65B0\u4F1A\u8BDD\u542F\u52A8\u76EE\u5F55\uFF1A\u5173\u95ED=\u8D70\u4ED3\u5E93\u9009\u62E9\uFF1B\u4EC5\u9ED8\u8BA4\u76EE\u5F55=\u76F4\u63A5\u8FDB\u5165\u8BE5\u76EE\u5F55\u4E14\u4E0D\u6539\u53D8\u6743\u9650\uFF1BOncall=\u9ED8\u8BA4\u76EE\u5F55 + \u65B0\u666E\u901A\u7FA4\u81EA\u52A8\u5F00\u653E\u5BF9\u8BDD\u3002\u6539\u52A8\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.autoWorktree":"\u6BCF\u4E2A\u65B0\u4F1A\u8BDD\u81EA\u52A8\u521B\u5EFA worktree","botDefaults.autoWorktreeHelp":"\u4EC5\u7528\u4E8E\u300C\u4EC5\u9ED8\u8BA4\u76EE\u5F55\u300D\u3002\u65B0\u4F1A\u8BDD\u4F1A\u5728\u9ED8\u8BA4 git \u4ED3\u5E93\u4E2D\u521B\u5EFA\u72EC\u7ACB worktree\uFF0C\u907F\u514D\u5E76\u53D1\u4F1A\u8BDD\u4E92\u76F8\u5F71\u54CD\uFF1B\u5931\u8D25\u65F6\u56DE\u9000\u5230\u9ED8\u8BA4\u76EE\u5F55\u3002/close \u4E0D\u4F1A\u81EA\u52A8\u5220\u9664 worktree\u3002","botDefaults.workingDirSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.brandLabel":"\u4E2A\u6027\u7B7E\u540D\uFF08\u5361\u7247\u9875\u811A\uFF09","botDefaults.brandLabelHelp":"\u8BBE\u7F6E\u8BE5 bot \u5361\u7247\u9875\u811A\u7B7E\u540D\u3002\u7559\u7A7A=\u4E0D\u663E\u793A\uFF1B\u586B\u5199=\u81EA\u5B9A\u4E49 Markdown\uFF1B\u6062\u590D\u9ED8\u8BA4=\u663E\u793A botmux\u3002","botDefaults.brandLabelPlaceholder":"\u9ED8\u8BA4\uFF1Abotmux\uFF08\u7559\u7A7A\u5219\u4E0D\u663E\u793A\uFF09","botDefaults.sectionSandbox":"\u6587\u4EF6\u6C99\u76D2\uFF08oncall\uFF09","botDefaults.sandboxToggle":"\u5F00\u542F\u6587\u4EF6\u6C99\u76D2","botDefaults.sandboxHelp":"\u5F00\u542F\u540E\uFF0C\u8BE5 bot \u7684\u6BCF\u4E2A\u4F1A\u8BDD\u90FD\u8DD1\u5728\u6C99\u76D2\u91CC\uFF1Aagent \u80FD\u5728\u9879\u76EE\u76EE\u5F55\u5185\u6B63\u5E38\u8BFB\u5199\u5E72\u6D3B\uFF0C\u4F46\u78B0\u4E0D\u5230\u9879\u76EE\u5916\u4F60\u78C1\u76D8\u4E0A\u7684\u771F\u5B9E\u6587\u4EF6\u3001\u5BC6\u94A5\u3001\u522B\u7684\u4F1A\u8BDD\u6570\u636E\u2014\u2014\u5BF9\u9879\u76EE\u5916\u7684\u5199\u5165\u4F1A\u88AB\u9694\u79BB/\u62E6\u622A\u3002\u9002\u5408\u628A\u673A\u5668\u4EBA\u5206\u4EAB\u7ED9\u534A\u53D7\u4FE1\u4EFB\u7684\u4EBA\uFF08oncall\uFF09\u3002Linux \u7528 bwrap\u3001macOS \u7528 Seatbelt\uFF0C\u4E24\u7AEF\u4FDD\u62A4\u6548\u679C\u4E00\u81F4\uFF1B\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.sandboxSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.sandboxReadIsoOn":"\u8BFB\u9694\u79BB\uFF1A\u672C bot \u7684\u6C99\u76D2\u4F1A\u8BDD\u8FD8\u4F1A\u8BFB\u4E0D\u5230\u5176\u5B83 bot \u7684\u51ED\u8BC1\uFF08bots.json\uFF09\u3001\u4F1A\u8BDD\u4E0E\u804A\u5929\u5185\u5BB9\uFF08macOS \xB7 Linux\uFF0Cclaude/codex\uFF09\u3002","botDefaults.sandboxReadIsoOff":"\u672C bot \u7684\u6C99\u76D2\u4EC5\u5199\u4FDD\u62A4\uFF1B\u989D\u5916\u7684\u300C\u8DE8-bot \u8BFB\u9694\u79BB\u300D\u9700 claude-code / codex + macOS/Linux\uFF08\u4E14\u672A\u914D wrapper \u7F51\u5173\uFF09\u3002","botDefaults.readIsolationToggle":"\u5F00\u542F\u8BFB\u9694\u79BB\uFF08macOS\uFF09","botDefaults.readIsolationHelp":"\u5F00\u542F\u540E\uFF0C\u8BE5 bot \u7684\u4F1A\u8BDD\u5728 macOS \u6C99\u7BB1\uFF08Seatbelt\uFF09\u91CC\u8FD0\u884C\uFF1A\u8BFB\u4E0D\u5230\u5176\u5B83 bot \u7684\u51ED\u8BC1\uFF08bots.json\uFF09\u3001\u4F1A\u8BDD\u3001\u804A\u5929\u5185\u5BB9\uFF0C\u4F46\u80FD\u6536\u53D1\u81EA\u5DF1\u7684\u6D88\u606F\u3001\u8BFB\u81EA\u5DF1\u4E0A\u4F20\u7684\u6587\u4EF6/\u767D\u677F\u3002\u662F\u4E0A\u9762\u300C\u6587\u4EF6\u6C99\u76D2\u300D\u5728 macOS \u4E0A\u7684\u5BF9\u5E94\u673A\u5236\u3002\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.readIsolationSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.readIsolationSavedRestarted":"\u5DF2\u4FDD\u5B58\uFF0C\u5DF2\u91CD\u542F\u8BE5 bot \u7684 {count} \u4E2A\u4F1A\u8BDD\uFF08\u4E0B\u6761\u6D88\u606F\u51B7\u542F\u52A8\u751F\u6548\uFF1B\u5207\u6362\u9694\u79BB\u6A21\u5F0F\u4F1A\u6362\u6570\u636E\u76EE\u5F55\uFF0C\u8FD9\u4E9B\u4F1A\u8BDD\u7684\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u5C06\u91CD\u7F6E\u4E3A\u65B0\u4F1A\u8BDD\uFF09","botDefaults.readIsolationUnsupported":"\uFF08\u6B64 bot \u5F53\u524D\u65E0\u6CD5\u542F\u7528\u8BFB\u9694\u79BB\uFF1A\u9700 macOS + \u652F\u6301\u7684 CLI\uFF08claude-code / codex\uFF09+ \u672A\u914D wrapper \u7F51\u5173\uFF09","botDefaults.readIsolationStaleOn":"\uFF08\u5DF2\u5F00\u542F\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u65E0\u6CD5\u5F3A\u5236\u6267\u884C\u2014\u2014\u4F1A\u8BDD\u4F1A fail-close \u62D2\u542F\u52A8\uFF0C\u5EFA\u8BAE\u5173\u95ED\u4EE5\u6062\u590D\uFF09","botDefaults.sectionBackend":"\u4F1A\u8BDD\u540E\u7AEF","botDefaults.backendLabel":"\u540E\u7AEF\u7C7B\u578B","botDefaults.backendHelp":"\u8BE5 bot \u65B0\u4F1A\u8BDD\u4F7F\u7528\u7684\u4F1A\u8BDD\u540E\u7AEF\uFF1B\u6539\u52A8\u5B9E\u65F6\u751F\u6548\u4E8E\u65B0\u4F1A\u8BDD\uFF0C\u8FD0\u884C\u4E2D\u7684\u4F1A\u8BDD\u4ECD\u7528\u5176\u542F\u52A8\u65F6\u7684\u540E\u7AEF\u3001\u4E0D\u53D7\u5F71\u54CD\u3002tmux \u652F\u6301 adopt / Web \u7EC8\u7AEF\uFF1Bherdr \u6258\u7BA1\u6301\u4E45\u4F1A\u8BDD\uFF1Bzellij \u5B9E\u9A8C\u6027\uFF1Bpty \u6700\u8F7B\u91CF\u4F46\u4E0D\u8DE8 daemon \u91CD\u542F\u5B58\u6D3B\u3002\u201C\u81EA\u52A8\u201D\u8DDF\u968F\u5168\u5C40\u9ED8\u8BA4\u3002","botDefaults.backendAuto":"\u81EA\u52A8\uFF08\u8DDF\u968F\u5168\u5C40\u9ED8\u8BA4\uFF09","botDefaults.backendTmux":"tmux","botDefaults.backendHerdr":"herdr","botDefaults.backendZellij":"zellij","botDefaults.backendPty":"pty","botDefaults.backendSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.brandSave":"\u4FDD\u5B58\u7B7E\u540D","botDefaults.brandReset":"\u6062\u590D\u9ED8\u8BA4","botDefaults.brandStateDefault":"\u5F53\u524D\uFF1A\u9ED8\u8BA4 botmux","botDefaults.brandStateOff":"\u5F53\u524D\uFF1A\u5DF2\u5173\u95ED","botDefaults.brandStateCustom":"\u5F53\u524D\uFF1A\u81EA\u5B9A\u4E49","botDefaults.sectionCard":"\u5361\u7247\u884C\u4E3A","botDefaults.disableStreaming":"\u5173\u95ED\u98DE\u4E66\u6D41\u5F0F\u5361\u7247","botDefaults.disableStreamingHelp":"\u5173\u95ED\u5B9E\u65F6\u4F1A\u8BDD\u72B6\u6001\u5361\u548C Web Terminal \u5165\u53E3\uFF1B\u6700\u7EC8\u7ED3\u679C\u4ECD\u4F1A\u4EE5\u6D88\u606F\u53D1\u9001\u3002","botDefaults.silentTurnReactions":"\u5173\u95ED\u65E0\u5361\u7247\u6A21\u5F0F\u4E0B\u7684\u72B6\u6001 reaction","botDefaults.silentTurnReactionsHelp":"\u5173\u95ED\u6D41\u5F0F\u5361\u7247\u540E\uFF0C\u9ED8\u8BA4\u7528 reaction \u6807\u8BB0\u6536\u5230/\u5B8C\u6210\u3002\u5F00\u542F\u540E\u4E0D\u518D\u6DFB\u52A0\u8FD9\u4E9B\u72B6\u6001 reaction\u3002","botDefaults.writableLink":"\u5361\u7247\u4E0A\u76F4\u63A5\u7ED9\u53EF\u64CD\u4F5C\uFF08\u53EF\u5199\uFF09\u7EC8\u7AEF\u94FE\u63A5","botDefaults.writableLinkHelp":"\u5728\u6D41\u5F0F\u5361\u7247\u6B63\u6587\u4E2D\u663E\u793A\u53EF\u5199\u7EC8\u7AEF\u94FE\u63A5\u3002\u7FA4\u5185\u6210\u5458\u53EF\u76F4\u63A5\u64CD\u4F5C\u7EC8\u7AEF\uFF0C\u8BF7\u4EC5\u5728\u53EF\u4FE1\u7FA4\u4F7F\u7528\u3002","botDefaults.writableLinkMoot":"\u5DF2\u5173\u95ED\u6D41\u5F0F\u5361\u7247","botDefaults.privateCard":"/card \u53D1\u79C1\u5BC6\u5361\u7247\uFF08\u4EC5\u6388\u6743\u4EBA\u53EF\u89C1\uFF09","botDefaults.privateCardHelp":"/card \u53EA\u53D1\u9001\u7ED9 owner/allowedUsers\u3002\u5361\u7247\u4E3A\u9759\u6001\u5FEB\u7167\uFF0C\u4EC5\u666E\u901A\u7FA4\u53EF\u7528\uFF1B\u4E0D\u5F71\u54CD\u81EA\u52A8\u6D41\u5F0F\u5361\u7247\u3002","botDefaults.sectionCrossBot":"\u8DE8 bot \u534F\u4F5C","botDefaults.botToBotSameDir":"bot@bot \u540C\u76EE\u5F55\u62C9\u8D77","botDefaults.botToBotSameDirHelp":"\u9ED8\u8BA4\u5F00\u542F\u3002\u5F53\u8BE5 bot \u88AB @ \u5230\u5DF2\u6709\u5176\u4ED6 bot \u5DE5\u4F5C\u7684\u7FA4/\u8BDD\u9898\u65F6\uFF0C\u590D\u7528\u5BF9\u65B9\u5DE5\u4F5C\u76EE\u5F55\u5E76\u8DF3\u8FC7\u4ED3\u5E93\u9009\u62E9\u3002\u5173\u95ED\u540E\u59CB\u7EC8\u4F7F\u7528\u672C bot \u81EA\u5DF1\u7684\u76EE\u5F55\u89C4\u5219\u3002","botDefaults.cardPrefSaved":"\u5DF2\u4FDD\u5B58","botDefaults.sectionSummaryTrigger":"/summary \u603B\u7ED3\u8303\u56F4","botDefaults.summaryLimit":"\u6700\u8FD1\u6D88\u606F\u6761\u6570","botDefaults.summarySinceHours":"\u6700\u8FD1\u5C0F\u65F6\u6570","botDefaults.summaryLimitHelp":"/summary \u8BFB\u53D6\u7684\u5386\u53F2\u8303\u56F4\u3002\u9ED8\u8BA4\u6700\u8FD1 50 \u6761\u6216 24 \u5C0F\u65F6\uFF1B\u4EFB\u4E00\u9879\u586B 0 \u8868\u793A\u4E0D\u9650\u5236\u3002\u8BDD\u9898\u7FA4\u59CB\u7EC8\u53EA\u8BFB\u5F53\u524D\u8BDD\u9898\u3002","botDefaults.summarySave":"\u4FDD\u5B58\u603B\u7ED3\u8303\u56F4","botDefaults.summaryNumberInvalid":"\u65F6\u957F\u548C\u6761\u6570\u5FC5\u987B\u662F 0 \u6216\u6B63\u6574\u6570","botDefaults.sectionRole":"\u9ED8\u8BA4\u89D2\u8272","botDefaults.roleHelp":"\u8BE5 bot \u7684\u9ED8\u8BA4\u89D2\u8272\uFF0C\u4F1A\u6CE8\u5165\u5230\u6240\u6709\u4F1A\u8BDD\uFF1B\u5355\u4E2A\u7FA4\u53EF\u5728\u300C\u89D2\u8272\u7BA1\u7406\u300D\u8986\u76D6\u3002\u7559\u7A7A\u4FDD\u5B58\u5373\u5220\u9664\u3002","botDefaults.rolePlaceholder":"\u4F8B\u5982\uFF1A\u4F60\u662F\u540E\u7AEF\u6392\u969C\u52A9\u624B\uFF0C\u56DE\u7B54\u7B80\u6D01\u3001\u4F18\u5148\u7ED9\u53EF\u6267\u884C\u547D\u4EE4\u2026","botDefaults.roleSave":"\u4FDD\u5B58\u89D2\u8272","botDefaults.roleSaved":"\u5DF2\u4FDD\u5B58","botDefaults.roleDeleted":"\u5DF2\u5220\u9664","botDefaults.roleLoadErr":"\u89D2\u8272\u52A0\u8F7D\u5931\u8D25","botDefaults.profileRoles":"Profile \u89D2\u8272","botDefaults.profileRolesHelp":"\u5C55\u793A\u8BE5 bot \u5728\u5404 Profile \u4E2D\u7684\u89D2\u8272\u6761\u76EE\uFF1B\u5C55\u5F00\u540E\u52A0\u8F7D\u8BE6\u60C5\u3002","botDefaults.profileRolesEmpty":"\u8FD9\u4E2A bot \u6682\u65E0 Profile \u89D2\u8272\u3002","botDefaults.profileRolesLoadFailed":"Profile \u89D2\u8272\u52A0\u8F7D\u5931\u8D25\uFF1A{error}","botDefaults.profileRoleClickToLoad":"\u5C55\u5F00\u540E\u52A0\u8F7D\u89D2\u8272\u8BE6\u60C5\u3002","botDefaults.profileRoleDetailLoadFailed":"\u89D2\u8272\u8BE6\u60C5\u52A0\u8F7D\u5931\u8D25\uFF1A{error}","botDefaults.sectionAutoStart":"\u4E3B\u52A8\u5F00\u5DE5","botDefaults.autoStartJoin":"\u88AB\u62C9\u8FDB\u65B0\u7FA4\u81EA\u52A8\u5F00\u5DE5","botDefaults.autoStartJoinHelp":"\u673A\u5668\u4EBA\u88AB\u52A0\u5165\u65B0\u7FA4\u4E14\u7FA4\u5185\u6709\u6388\u6743\u7528\u6237\u65F6\uFF0C\u81EA\u52A8\u542F\u52A8\u4F1A\u8BDD\uFF0C\u65E0\u9700 @\u3002\u4F7F\u7528\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u672A\u914D\u7F6E\u65F6\u5148\u5F39\u4ED3\u5E93\u9009\u62E9\u3002\u9700\u8981\u8BA2\u9605\u673A\u5668\u4EBA\u8FDB\u7FA4\u4E8B\u4EF6\u5E76\u5177\u5907\u7FA4\u6210\u5458\u8BFB\u53D6\u6743\u9650\u3002","botDefaults.autoStartJoinPrompt":"\u5165\u7FA4\u9996\u8F6E prompt\uFF08\u53EF\u9009\uFF09","botDefaults.autoStartJoinPromptPlaceholder":"\u586B\u4E86\uFF1D\u4F5C\u4E3A\u5165\u7FA4\u540E\u7684\u7B2C\u4E00\u6761\u4EFB\u52A1\uFF1B\u7559\u7A7A\uFF1D\u673A\u5668\u4EBA\u81EA\u5DF1\u770B\u7FA4\u91CC\u4FE1\u606F\u51B3\u5B9A\u505A\u4EC0\u4E48","botDefaults.autoStartJoinPromptSave":"\u4FDD\u5B58 prompt","botDefaults.autoStartTopic":"\u8BDD\u9898\u7FA4\u65B0\u8BDD\u9898\u81EA\u52A8\u5F00\u5DE5","botDefaults.autoStartTopicHelp":"\u8BDD\u9898\u7FA4\u4E2D\u65B0\u5EFA\u8BDD\u9898\u65F6\uFF0C\u81EA\u52A8\u63A5\u5165\u5E76\u5904\u7406\u9996\u6761\u6D88\u606F\uFF0C\u65E0\u9700 @\u3002\u4EC5\u5F71\u54CD\u8BDD\u9898\u7FA4\u3002","botDefaults.sectionSessionMode":"\u4F1A\u8BDD\u6A21\u5F0F","botDefaults.p2pMode":"\u79C1\u804A\u4F1A\u8BDD\u6A21\u5F0F","botDefaults.p2pThread":"thread\uFF08\u6BCF\u6761 DM \u72EC\u7ACB\u4F1A\u8BDD\uFF09","botDefaults.p2pChat":"chat\uFF08\u6241\u5E73\u8FDE\u7EED\u5355\u804A\u4F1A\u8BDD\uFF09","botDefaults.p2pHelp":"\u79C1\u804A\u4F1A\u8BDD\u65B9\u5F0F\uFF1Athread=\u6BCF\u6761\u9876\u5C42\u6D88\u606F\u72EC\u7ACB\u4F1A\u8BDD\uFF1Bchat=\u6574\u6BB5\u79C1\u804A\u5171\u4EAB\u4E00\u4E2A\u8FDE\u7EED\u4F1A\u8BDD\u3002\u6539\u52A8\u7ACB\u5373\u751F\u6548\u3002","botDefaults.regularGroupMode":"\u666E\u901A\u7FA4\u4F1A\u8BDD\u6A21\u5F0F","botDefaults.regularGroupModeChat":"chat\uFF08\u6241\u5E73\u8FDE\u7EED\u5355\u804A\u4F1A\u8BDD\uFF0C\u9ED8\u8BA4\uFF09","botDefaults.regularGroupModeChatTopic":"chat-topic\uFF08\u9876\u5C42\u5E73\u94FA\u8FDE\u7EED\u4F1A\u8BDD\uFF0C\u539F\u751F\u8BDD\u9898\u5404\u81EA\u72EC\u7ACB\u4F1A\u8BDD\uFF09","botDefaults.regularGroupModeNewTopic":"new-topic\uFF08\u6BCF\u6761\u9876\u5C42 @ \u5404\u5F00\u72EC\u7ACB\u8BDD\u9898\u4E0E\u4F1A\u8BDD\uFF09","botDefaults.regularGroupModeShared":"shared\uFF08\u8BDD\u9898\u6A21\u5F0F\u4F46\u590D\u7528\u540C\u4E00\u4E2A session\uFF09","botDefaults.regularGroupModeHelp":"\u666E\u901A\u7FA4\u9876\u5C42 @ \u7684\u5F00\u4F1A\u8BDD\u65B9\u5F0F\uFF1Achat=\u6574\u7FA4\u8FDE\u7EED\u4F1A\u8BDD\uFF1Bchat-topic=\u9876\u5C42\u8FDE\u7EED\u3001\u539F\u751F\u8BDD\u9898\u72EC\u7ACB\uFF1Bnew-topic=\u6BCF\u6B21 @ \u65B0\u5EFA\u8BDD\u9898\u4E0E\u4F1A\u8BDD\uFF1Bshared=\u8BDD\u9898\u5C55\u793A\u4F46\u5171\u4EAB\u4F1A\u8BDD\u3002\u53EF\u88AB\u7FA4\u7EA7 /reply-mode \u8986\u76D6\u3002","botDefaults.mentionMode":"\u7FA4\u804A @ \u7B56\u7565","botDefaults.mentionModeAlways":"\u90FD\u9700\u8981 @\uFF08\u9ED8\u8BA4\uFF09","botDefaults.mentionModeTopic":"\u4EC5\u8BDD\u9898\u5185\u4E0D\u9700\u8981 @","botDefaults.mentionModeNever":"\u6240\u6709\u6D88\u606F\u90FD\u4E0D\u9700\u8981 @","botDefaults.mentionModeAmbient":"\u90FD\u4E0D\u9700\u8981 @\uFF08\u4F46\u4F60 @ \u522B\u4EBA\u65F6\u8BA9\u4F4D\uFF09","botDefaults.mentionModeHelp":"\u63A7\u5236\u7FA4\u804A\u662F\u5426\u5FC5\u987B @ \u624D\u56DE\u590D\uFF1A\u9ED8\u8BA4\u90FD\u9700\u8981 @\uFF1B\u53EF\u5141\u8BB8\u5DF2\u63A5\u7BA1\u8BDD\u9898\u5185\u514D @\u3001\u5168\u7FA4\u514D @\uFF0C\u6216\u5728\u6D88\u606F @ \u5176\u4ED6\u4EBA\u65F6\u8BA9\u4F4D\u3002\u79C1\u804A\u59CB\u7EC8\u4E0D\u9700\u8981 @\u3002","botDefaults.docSubscribeMode":"\u6587\u6863\u8BA2\u9605\u89E6\u53D1\u8303\u56F4\uFF08\u9ED8\u8BA4\uFF09","botDefaults.docSubscribeModeMention":"\u4EC5\u8BC4\u8BBA @ \u6211\u624D\u89E6\u53D1","botDefaults.docSubscribeModeAll":"\u6240\u6709\u65B0\u8BC4\u8BBA\u90FD\u89E6\u53D1","botDefaults.docSubscribeModeHelp":"\u7528 /watch-comment \u76D1\u542C\u98DE\u4E66\u6587\u6863\u8BC4\u8BBA\u540E\uFF0C\u8BC4\u8BBA\u4F1A\u5582\u8FDB\u4F1A\u8BDD\u3001bot \u56DE\u590D\u53D1\u56DE\u8BC4\u8BBA\u4E32\u3002\u8FD9\u91CC\u8BBE\u65B0\u76D1\u542C\u7684\u9ED8\u8BA4\u89E6\u53D1\u8303\u56F4\uFF1A\u300C\u4EC5\u8BC4\u8BBA @ \u6211\u300D\u6700\u5B89\u5168\uFF08\u9632\u5237\u5C4F\uFF09\uFF1B\u300C\u6240\u6709\u65B0\u8BC4\u8BBA\u300D\u9002\u5408\u4E13\u7528\u6587\u6863\u3002","botDefaults.sectionSubstitute":"\u66FF\u8EAB\u6A21\u5F0F","botDefaults.substituteEnabled":"\u542F\u7528\u66FF\u8EAB\u89E6\u53D1","botDefaults.substituteHelp":"\u666E\u901A\u7FA4\u91CC @ \u5230\u914D\u7F6E\u7684\u66FF\u8EAB\u5BF9\u8C61\u65F6\uFF0C\u7531\u672C bot \u4EE3\u7B54\uFF1B\u53D1\u6D88\u606F\u7684\u4EBA\u4ECD\u9700\u5177\u5907 canTalk \u6743\u9650\u3002\u63A8\u8350\u4E0E\u300COncall \u6A21\u5F0F\u300D\u4E00\u8D77\u4F7F\u7528\uFF0C\u8BA9\u7FA4\u5185\u6210\u5458\u90FD\u80FD\u81EA\u7136 @ \u66FF\u8EAB\u89E6\u53D1\u4EE3\u7B54\u3002\u5F53\u524D\u7FA4\u53EF\u7528 /substitute off \u4E34\u65F6\u5173\u95ED\u3002","botDefaults.substituteDisclosure":"\u62AB\u9732\u65B9\u5F0F","botDefaults.substituteDisclosurePrefix":"\u9ED8\u8BA4\u8BF4\u660E\u201C\u6211\u5148\u4EE3 TA \u56DE\u590D\u201D","botDefaults.substituteDisclosureNone":"\u4E0D\u989D\u5916\u8BF4\u660E","botDefaults.substituteTargetsPlaceholder":`zhangsan@bytedance.com
|
|
9
|
+
.botmux/skills`,"skills.globalDelivery":"Skill \u6CE8\u5165\u65B9\u5F0F","skills.bots":"Bot Skill \u914D\u7F6E","skills.botsHelp":"\u4E3A\u6BCF\u4E2A bot \u8BBE\u7F6E\u4F18\u5148\u62AB\u9732\u7684 Skill\u3002","skills.botCount":"{count} \u4E2A Bot","skills.skillCount":"{count} \u4E2A Skill","skills.attach":"\u52A0\u5165\u4F18\u5148\u62AB\u9732","skills.detach":"\u79FB\u9664","skills.detachNamed":"\u79FB\u9664 {skill}","skills.delivery":"\u6CE8\u5165\u65B9\u5F0F","skills.deliveryAuto":"\u81EA\u52A8","skills.deliveryAutoHelp":"\u4F18\u5148\u7528 CLI \u539F\u751F\u901A\u9053\uFF1B\u4E0D\u652F\u6301\u65F6\u81EA\u52A8\u6539\u7528\u63D0\u793A\u8BCD\u6CE8\u5165","skills.deliveryPrompt":"\u63D0\u793A\u8BCD","skills.deliveryPromptHelp":"\u628A Skill \u6E05\u5355\u5199\u5165\u4F1A\u8BDD\u63D0\u793A\u8BCD\uFF0C\u517C\u5BB9\u6240\u6709 CLI","skills.deliveryNative":"\u539F\u751F","skills.deliveryNativeHelp":"\u53EA\u4EA4\u7ED9 CLI \u81EA\u5DF1\u7684 Skill \u673A\u5236\uFF0C\u4E0D\u505A\u63D0\u793A\u8BCD\u515C\u5E95","skills.projectMode":"\u5DE5\u4F5C\u533A Skills","skills.projectDefault":"\u8DDF\u968F\u5168\u5C40","skills.projectDefaultHelp":"\u4F7F\u7528\u5DE6\u4FA7\u9879\u76EE Skill \u9ED8\u8BA4\u503C","skills.projectOff":"\u4E0D\u8BFB\u53D6","skills.projectOffHelp":"\u8FD9\u4E2A bot \u4E0D\u8BFB\u53D6\u5DE5\u4F5C\u533A skill","skills.projectAll":"\u8BFB\u53D6","skills.projectAllHelp":"\u8FD9\u4E2A bot \u52A0\u5165\u5DE5\u4F5C\u533A skill \u5019\u9009","skills.priority":"\u4F18\u5148 skills","skills.noPriority":"\u672A\u914D\u7F6E\uFF0C\u4FDD\u6301 CLI \u9ED8\u8BA4\u884C\u4E3A","skills.pickerPlaceholder":"\u9009\u62E9\u4F18\u5148 Skill","skills.pickerSelectedCount":"\u5DF2\u9009\u62E9 {count} \u4E2A Skill","skills.pickerTriggerHint":"\u70B9\u51FB\u641C\u7D22\u6216\u8C03\u6574\u591A\u9009","skills.pickerSearchPlaceholder":"\u641C\u7D22 Skill \u540D\u79F0\u6216\u63CF\u8FF0","skills.pickerSelectionMeta":"\u5DF2\u9009 {selected} / \u5171 {total}","skills.pickerClear":"\u6E05\u7A7A","skills.pickerNoResults":"\u6CA1\u6709\u5339\u914D\u7684 Skill","skills.saveSelection":"\u4FDD\u5B58\u9009\u62E9","skills.cancel":"\u53D6\u6D88","skills.saving":"\u4FDD\u5B58\u4E2D\u2026","skills.policySaved":"\u4F18\u5148 Skill \u5DF2\u4FDD\u5B58","skills.dangling":"\u672A\u5B89\u88C5","skills.removeInUse":'Skill "{skill}" \u4ECD\u88AB\u4EE5\u4E0B\u914D\u7F6E\u5F15\u7528\uFF1A{refs}\u3002\u5220\u9664\u53EA\u4F1A\u79FB\u9664 registry \u6587\u4EF6\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u6E05\u7406\u5F15\u7528\u3002\u7EE7\u7EED\u5220\u9664\uFF1F',"skills.saved":"\u5DF2\u4FDD\u5B58","skills.failed":"\u5931\u8D25","skills.jobRunning":"\u5904\u7406\u4E2D...","skills.refresh":"\u5237\u65B0","botDefaults.title":"Bot \u914D\u7F6E","botDefaults.metaOnline":"\u5728\u7EBF \xB7 daemon \u6B63\u5E38","botDefaults.search":"\u641C\u7D22 bot \u540D / app id","botDefaults.refresh":"\u5237\u65B0","botDefaults.sectionOncall":"\u65B0\u7FA4 Oncall","botDefaults.sectionBrand":"\u5361\u7247\u7B7E\u540D","botDefaults.renameTitle":"\u4FEE\u6539\u673A\u5668\u4EBA\u540D\u79F0","botDefaults.renameAction":"\u4FEE\u6539\u540D\u79F0","botDefaults.renameSave":"\u4FDD\u5B58","botDefaults.renameCancel":"\u53D6\u6D88","botDefaults.renameEmpty":"\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A","botDefaults.renaming":"\u6B63\u5728\u540C\u6B65\u5230\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\uFF08\u6539\u540D\u5E76\u53D1\u5E03\u65B0\u7248\u672C\uFF0C\u7EA6 10 \u79D2\uFF09\u2026","botDefaults.renameOkFeishu":"\u5DF2\u4FEE\u6539\u98DE\u4E66\u5E94\u7528\u540D\uFF0C\u7FA4\u5185\u540D\u79F0\u5DF2\u751F\u6548","botDefaults.renameLocalOnly":"\u98DE\u4E66\u4FA7\u6539\u540D\u5931\u8D25\uFF08{reason}\uFF09\uFF0C\u5DF2\u4EC5\u66F4\u65B0 dashboard \u5C55\u793A\u540D","botDefaults.renameWarn.no_session":"\u670D\u52A1\u5668\u7F3A\u5C11\u98DE\u4E66 Web \u767B\u5F55\u6001\uFF0C\u8BF7\u5728\u670D\u52A1\u5668\u8FD0\u884C botmux setup \u91CD\u65B0\u626B\u7801","botDefaults.renameWarn.session_expired":"\u98DE\u4E66 Web \u767B\u5F55\u6001\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u5728\u670D\u52A1\u5668\u8FD0\u884C botmux setup \u91CD\u65B0\u626B\u7801","botDefaults.renameWarn.no_access":"\u5F53\u524D\u7F13\u5B58\u7684\u98DE\u4E66\u8D26\u53F7\u4E0D\u662F\u8BE5\u5E94\u7528\u7684\u534F\u4F5C\u8005","botDefaults.renameWarn.unsupported_brand":"\u56FD\u9645\u7248 Lark \u79DF\u6237\u6682\u4E0D\u652F\u6301\u81EA\u52A8\u6539\u540D","botDefaults.renameFailed":"\u6539\u540D\u5931\u8D25\uFF1A{error}","feishuLogin.entry":"\u626B\u7801\u767B\u5F55\u98DE\u4E66","feishuLogin.title":"\u626B\u7801\u5237\u65B0\u98DE\u4E66\u767B\u5F55\u6001","feishuLogin.starting":"\u6B63\u5728\u83B7\u53D6\u4E8C\u7EF4\u7801\u2026","feishuLogin.scanHint":"\u7528\u98DE\u4E66 App \u626B\u7801\u5E76\u786E\u8BA4\u767B\u5F55\uFF0C\u5373\u53EF\u6388\u6743\u6539\u540D\uFF08\u767B\u5F55\u6001\u4EC5\u5B58\u672C\u673A\uFF0C\u4E0E setup \u590D\u7528\uFF09","feishuLogin.success":"\u2713 \u767B\u5F55\u6210\u529F\uFF0C\u6B63\u5728\u4E3A\u4F60\u91CD\u8BD5\u6539\u540D\u2026","feishuLogin.failed":"\u767B\u5F55\u5931\u8D25\uFF1A{reason}","feishuLogin.retry":"\u91CD\u65B0\u83B7\u53D6\u4E8C\u7EF4\u7801","feishuLogin.close":"\u5173\u95ED","feishuLogin.qrAlt":"\u98DE\u4E66\u767B\u5F55\u4E8C\u7EF4\u7801","botDefaults.sectionAgent":"Agent \u914D\u7F6E","botDefaults.agentCli":"CLI","botDefaults.agentMissingOption":"{label}\uFF08\u672A\u5B89\u88C5\uFF1A{command}\uFF09","botDefaults.agentMissingHint":"\u5F53\u524D daemon PATH \u627E\u4E0D\u5230 {command}\uFF1B\u4FDD\u5B58\u540E\u65B0\u4F1A\u8BDD\u65E0\u6CD5\u542F\u52A8\uFF0C\u8BF7\u5148\u5B89\u88C5\u6216\u4FEE\u6B63\u8DEF\u5F84\u3002","botDefaults.agentModel":"\u6A21\u578B","botDefaults.agentModelPlaceholder":"\u7559\u7A7A\u4F7F\u7528\u8BE5 CLI \u9ED8\u8BA4\u6A21\u578B","botDefaults.agentHelp":"\u53EA\u5F71\u54CD\u65B0\u4F1A\u8BDD\uFF1B\u5DF2\u6709\u4F1A\u8BDD\u7EE7\u7EED\u4F7F\u7528\u521B\u5EFA\u65F6\u7684 CLI / \u6A21\u578B\uFF0C\u9700\u5173\u95ED\u540E\u91CD\u5F00\u624D\u4F1A\u5207\u6362\u3002","botDefaults.agentSave":"\u4FDD\u5B58 CLI / \u6A21\u578B","botDefaults.skillInjection":"botmux skills \u6CE8\u5165\u65B9\u5F0F","botDefaults.skillInjectionDynamic":"\u52A8\u6001\u6CE8\u5165\uFF08--plugin-dir\uFF0C\u9010\u4F1A\u8BDD\uFF09","botDefaults.skillInjectionDynamicUnsupported":"\u52A8\u6001\u6CE8\u5165\uFF08\u8BE5 CLI \u4E0D\u652F\u6301\uFF09","botDefaults.skillInjectionPrompt":"prompt \u2014 \u6CE8\u5165\u4F1A\u8BDD prompt\uFF0C\u4E0D\u843D\u5168\u5C40\u76D8","botDefaults.skillInjectionGlobal":"global \u2014 \u88C5\u8FDB CLI \u5168\u5C40 skills \u76EE\u5F55","botDefaults.skillInjectionOff":"off \u2014 \u53EA\u7ED9 botmux --help \u5F15\u5BFC","botDefaults.skillInjectionHelpDynamic":"\u8BE5 CLI \u652F\u6301 --plugin-dir \u52A8\u6001\u6CE8\u5165\u3002skills \u4EC5\u5F53\u524D\u4F1A\u8BDD\u53EF\u89C1\uFF0C\u4E0D\u5199\u5165\u5168\u5C40\u76EE\u5F55\uFF0C\u65E0\u9700\u989D\u5916\u914D\u7F6E\u3002","botDefaults.skillInjectionHelp":"\u9009\u62E9 botmux skills \u7684\u6CE8\u5165\u65B9\u5F0F\uFF1Aprompt \u4E3A\u9ED8\u8BA4\u65B9\u5F0F\uFF0C\u4F1A\u5728\u4F1A\u8BDD\u5F00\u59CB\u65F6\u5199\u5165\u63D0\u793A\u8BCD\u4E14\u4E0D\u6539\u5168\u5C40\u76EE\u5F55\uFF1Bglobal \u5B89\u88C5\u5230 CLI \u5168\u5C40 skills \u76EE\u5F55\uFF1Boff \u4EC5\u4FDD\u7559 botmux --help \u5F15\u5BFC\u3002\u6539\u52A8\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF0C\u5207\u6362 global \u9700\u91CD\u542F daemon\u3002","botDefaults.agentSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.warning":"\u5F00\u542F\u540E\uFF0C\u6CA1\u6709 oncall binding \u7684\u7FA4\u4F1A\u5728\u4E0B\u6B21\u5F00\u65B0\u8BDD\u9898\u65F6\u81EA\u52A8\u7ED1\u5B9A\u5230\u8BE5\u76EE\u5F55\uFF1B\u624B\u52A8\u7ED1\u5B9A\u6216\u624B\u52A8\u89E3\u7ED1\u8FC7\u7684\u7FA4\u4E0D\u4F1A\u88AB\u8986\u76D6\u3002","botDefaults.empty":"\u6CA1\u6709\u5728\u7EBF bot\u3002\u5148 botmux restart \u8BA9 daemon \u4E0A\u7EBF\u3002","botDefaults.defaultOncall":"\u9ED8\u8BA4\u8FDB\u5165 oncall \u6A21\u5F0F","botDefaults.defaultOncallHelp":"\u6240\u6709\u672A\u7ED1\u5B9A\u7684\u7FA4\u4E0B\u6B21\u5F00\u8BDD\u9898\u81EA\u52A8\u7ED1\u5B9A","botDefaults.workingDir":"\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55","botDefaults.lastEnabled":"\u4E0A\u6B21\u542F\u7528\u65F6\u95F4","botDefaults.autobound":"\u5DF2\u81EA\u52A8\u7ED1\u5B9A {count} \u4E2A\u7FA4","botDefaults.save":"\u4FDD\u5B58","botDefaults.required":"\u9009\u62E9\u300C\u4EC5\u9ED8\u8BA4\u76EE\u5F55\u300D\u6216\u300COncall \u6A21\u5F0F\u300D\u65F6\u5FC5\u987B\u586B\u5DE5\u4F5C\u76EE\u5F55","botDefaults.sectionWorkingDir":"\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55","botDefaults.workingDirMode":"\u6A21\u5F0F","botDefaults.workingDirField":"\u76EE\u5F55","botDefaults.workingDirModeOff":"\u5173\u95ED\uFF08\u65B0\u4F1A\u8BDD\u5F39\u300C\u9009\u4ED3\u5E93\u300D\u5361\uFF09","botDefaults.workingDirModeDefault":"\u4EC5\u9ED8\u8BA4\u76EE\u5F55\uFF08\u4E0D\u6539\u6743\u9650\uFF09","botDefaults.workingDirModeOncall":"Oncall \u6A21\u5F0F\uFF08\u7FA4\u5185\u5F00\u653E\u5BF9\u8BDD\uFF09","botDefaults.workingDirModeHelp":"\u8BBE\u7F6E\u65B0\u4F1A\u8BDD\u542F\u52A8\u76EE\u5F55\uFF1A\u5173\u95ED=\u8D70\u4ED3\u5E93\u9009\u62E9\uFF1B\u4EC5\u9ED8\u8BA4\u76EE\u5F55=\u76F4\u63A5\u8FDB\u5165\u8BE5\u76EE\u5F55\u4E14\u4E0D\u6539\u53D8\u6743\u9650\uFF1BOncall=\u9ED8\u8BA4\u76EE\u5F55 + \u65B0\u666E\u901A\u7FA4\u81EA\u52A8\u5F00\u653E\u5BF9\u8BDD\u3002\u6539\u52A8\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.autoWorktree":"\u6BCF\u4E2A\u65B0\u4F1A\u8BDD\u81EA\u52A8\u521B\u5EFA worktree","botDefaults.autoWorktreeHelp":"\u4EC5\u7528\u4E8E\u300C\u4EC5\u9ED8\u8BA4\u76EE\u5F55\u300D\u3002\u65B0\u4F1A\u8BDD\u4F1A\u5728\u9ED8\u8BA4 git \u4ED3\u5E93\u4E2D\u521B\u5EFA\u72EC\u7ACB worktree\uFF0C\u907F\u514D\u5E76\u53D1\u4F1A\u8BDD\u4E92\u76F8\u5F71\u54CD\uFF1B\u5931\u8D25\u65F6\u56DE\u9000\u5230\u9ED8\u8BA4\u76EE\u5F55\u3002/close \u4E0D\u4F1A\u81EA\u52A8\u5220\u9664 worktree\u3002","botDefaults.workingDirSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.brandLabel":"\u4E2A\u6027\u7B7E\u540D\uFF08\u5361\u7247\u9875\u811A\uFF09","botDefaults.brandLabelHelp":"\u8BBE\u7F6E\u8BE5 bot \u5361\u7247\u9875\u811A\u7B7E\u540D\u3002\u7559\u7A7A=\u4E0D\u663E\u793A\uFF1B\u586B\u5199=\u81EA\u5B9A\u4E49 Markdown\uFF1B\u6062\u590D\u9ED8\u8BA4=\u663E\u793A botmux\u3002","botDefaults.brandLabelPlaceholder":"\u9ED8\u8BA4\uFF1Abotmux\uFF08\u7559\u7A7A\u5219\u4E0D\u663E\u793A\uFF09","botDefaults.sectionSandbox":"\u6587\u4EF6\u6C99\u76D2\uFF08oncall\uFF09","botDefaults.sandboxToggle":"\u5F00\u542F\u6587\u4EF6\u6C99\u76D2","botDefaults.sandboxHelp":"\u5F00\u542F\u540E\uFF0C\u8BE5 bot \u7684\u6BCF\u4E2A\u4F1A\u8BDD\u90FD\u8DD1\u5728\u6C99\u76D2\u91CC\uFF1Aagent \u80FD\u5728\u9879\u76EE\u76EE\u5F55\u5185\u6B63\u5E38\u8BFB\u5199\u5E72\u6D3B\uFF0C\u4F46\u78B0\u4E0D\u5230\u9879\u76EE\u5916\u4F60\u78C1\u76D8\u4E0A\u7684\u771F\u5B9E\u6587\u4EF6\u3001\u5BC6\u94A5\u3001\u522B\u7684\u4F1A\u8BDD\u6570\u636E\u2014\u2014\u5BF9\u9879\u76EE\u5916\u7684\u5199\u5165\u4F1A\u88AB\u9694\u79BB/\u62E6\u622A\u3002\u9002\u5408\u628A\u673A\u5668\u4EBA\u5206\u4EAB\u7ED9\u534A\u53D7\u4FE1\u4EFB\u7684\u4EBA\uFF08oncall\uFF09\u3002Linux \u7528 bwrap\u3001macOS \u7528 Seatbelt\uFF0C\u4E24\u7AEF\u4FDD\u62A4\u6548\u679C\u4E00\u81F4\uFF1B\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.sandboxSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.sandboxReadIsoOn":"\u8BFB\u9694\u79BB\uFF1A\u672C bot \u7684\u6C99\u76D2\u4F1A\u8BDD\u8FD8\u4F1A\u8BFB\u4E0D\u5230\u5176\u5B83 bot \u7684\u51ED\u8BC1\uFF08bots.json\uFF09\u3001\u4F1A\u8BDD\u4E0E\u804A\u5929\u5185\u5BB9\uFF08macOS \xB7 Linux\uFF0Cclaude/codex\uFF09\u3002","botDefaults.sandboxReadIsoOff":"\u672C bot \u7684\u6C99\u76D2\u4EC5\u5199\u4FDD\u62A4\uFF1B\u989D\u5916\u7684\u300C\u8DE8-bot \u8BFB\u9694\u79BB\u300D\u9700 claude-code / codex + macOS/Linux\uFF08\u4E14\u672A\u914D wrapper \u7F51\u5173\uFF09\u3002","botDefaults.readIsolationToggle":"\u5F00\u542F\u8BFB\u9694\u79BB\uFF08macOS\uFF09","botDefaults.readIsolationHelp":"\u5F00\u542F\u540E\uFF0C\u8BE5 bot \u7684\u4F1A\u8BDD\u5728 macOS \u6C99\u7BB1\uFF08Seatbelt\uFF09\u91CC\u8FD0\u884C\uFF1A\u8BFB\u4E0D\u5230\u5176\u5B83 bot \u7684\u51ED\u8BC1\uFF08bots.json\uFF09\u3001\u4F1A\u8BDD\u3001\u804A\u5929\u5185\u5BB9\uFF0C\u4F46\u80FD\u6536\u53D1\u81EA\u5DF1\u7684\u6D88\u606F\u3001\u8BFB\u81EA\u5DF1\u4E0A\u4F20\u7684\u6587\u4EF6/\u767D\u677F\u3002\u662F\u4E0A\u9762\u300C\u6587\u4EF6\u6C99\u76D2\u300D\u5728 macOS \u4E0A\u7684\u5BF9\u5E94\u673A\u5236\u3002\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.readIsolationSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.readIsolationSavedRestarted":"\u5DF2\u4FDD\u5B58\uFF0C\u5DF2\u91CD\u542F\u8BE5 bot \u7684 {count} \u4E2A\u4F1A\u8BDD\uFF08\u4E0B\u6761\u6D88\u606F\u51B7\u542F\u52A8\u751F\u6548\uFF1B\u5207\u6362\u9694\u79BB\u6A21\u5F0F\u4F1A\u6362\u6570\u636E\u76EE\u5F55\uFF0C\u8FD9\u4E9B\u4F1A\u8BDD\u7684\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u5C06\u91CD\u7F6E\u4E3A\u65B0\u4F1A\u8BDD\uFF09","botDefaults.readIsolationUnsupported":"\uFF08\u6B64 bot \u5F53\u524D\u65E0\u6CD5\u542F\u7528\u8BFB\u9694\u79BB\uFF1A\u9700 macOS + \u652F\u6301\u7684 CLI\uFF08claude-code / codex\uFF09+ \u672A\u914D wrapper \u7F51\u5173\uFF09","botDefaults.readIsolationStaleOn":"\uFF08\u5DF2\u5F00\u542F\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u65E0\u6CD5\u5F3A\u5236\u6267\u884C\u2014\u2014\u4F1A\u8BDD\u4F1A fail-close \u62D2\u542F\u52A8\uFF0C\u5EFA\u8BAE\u5173\u95ED\u4EE5\u6062\u590D\uFF09","botDefaults.sectionBackend":"\u4F1A\u8BDD\u540E\u7AEF","botDefaults.backendLabel":"\u540E\u7AEF\u7C7B\u578B","botDefaults.backendHelp":"\u8BE5 bot \u65B0\u4F1A\u8BDD\u4F7F\u7528\u7684\u4F1A\u8BDD\u540E\u7AEF\uFF1B\u6539\u52A8\u5B9E\u65F6\u751F\u6548\u4E8E\u65B0\u4F1A\u8BDD\uFF0C\u8FD0\u884C\u4E2D\u7684\u4F1A\u8BDD\u4ECD\u7528\u5176\u542F\u52A8\u65F6\u7684\u540E\u7AEF\u3001\u4E0D\u53D7\u5F71\u54CD\u3002tmux \u652F\u6301 adopt / Web \u7EC8\u7AEF\uFF1Bherdr \u6258\u7BA1\u6301\u4E45\u4F1A\u8BDD\uFF1Bzellij \u5B9E\u9A8C\u6027\uFF1Bpty \u6700\u8F7B\u91CF\u4F46\u4E0D\u8DE8 daemon \u91CD\u542F\u5B58\u6D3B\u3002\u201C\u81EA\u52A8\u201D\u8DDF\u968F\u5168\u5C40\u9ED8\u8BA4\u3002","botDefaults.backendAuto":"\u81EA\u52A8\uFF08\u8DDF\u968F\u5168\u5C40\u9ED8\u8BA4\uFF09","botDefaults.backendTmux":"tmux","botDefaults.backendHerdr":"herdr","botDefaults.backendZellij":"zellij","botDefaults.backendPty":"pty","botDefaults.backendSaved":"\u5DF2\u4FDD\u5B58\uFF08\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF09","botDefaults.brandSave":"\u4FDD\u5B58\u7B7E\u540D","botDefaults.brandReset":"\u6062\u590D\u9ED8\u8BA4","botDefaults.brandStateDefault":"\u5F53\u524D\uFF1A\u9ED8\u8BA4 botmux","botDefaults.brandStateOff":"\u5F53\u524D\uFF1A\u5DF2\u5173\u95ED","botDefaults.brandStateCustom":"\u5F53\u524D\uFF1A\u81EA\u5B9A\u4E49","botDefaults.sectionCard":"\u5361\u7247\u884C\u4E3A","botDefaults.disableStreaming":"\u5173\u95ED\u98DE\u4E66\u6D41\u5F0F\u5361\u7247","botDefaults.disableStreamingHelp":"\u5173\u95ED\u5B9E\u65F6\u4F1A\u8BDD\u72B6\u6001\u5361\u548C Web Terminal \u5165\u53E3\uFF1B\u6700\u7EC8\u7ED3\u679C\u4ECD\u4F1A\u4EE5\u6D88\u606F\u53D1\u9001\u3002","botDefaults.silentTurnReactions":"\u5173\u95ED\u65E0\u5361\u7247\u6A21\u5F0F\u4E0B\u7684\u72B6\u6001 reaction","botDefaults.silentTurnReactionsHelp":"\u5173\u95ED\u6D41\u5F0F\u5361\u7247\u540E\uFF0C\u9ED8\u8BA4\u7528 reaction \u6807\u8BB0\u6536\u5230/\u5B8C\u6210\u3002\u5F00\u542F\u540E\u4E0D\u518D\u6DFB\u52A0\u8FD9\u4E9B\u72B6\u6001 reaction\u3002","botDefaults.writableLink":"\u5361\u7247\u4E0A\u76F4\u63A5\u7ED9\u53EF\u64CD\u4F5C\uFF08\u53EF\u5199\uFF09\u7EC8\u7AEF\u94FE\u63A5","botDefaults.writableLinkHelp":"\u5728\u6D41\u5F0F\u5361\u7247\u6B63\u6587\u4E2D\u663E\u793A\u53EF\u5199\u7EC8\u7AEF\u94FE\u63A5\u3002\u7FA4\u5185\u6210\u5458\u53EF\u76F4\u63A5\u64CD\u4F5C\u7EC8\u7AEF\uFF0C\u8BF7\u4EC5\u5728\u53EF\u4FE1\u7FA4\u4F7F\u7528\u3002","botDefaults.writableLinkMoot":"\u5DF2\u5173\u95ED\u6D41\u5F0F\u5361\u7247","botDefaults.privateCard":"/card \u53D1\u79C1\u5BC6\u5361\u7247\uFF08\u4EC5\u6388\u6743\u4EBA\u53EF\u89C1\uFF09","botDefaults.privateCardHelp":"/card \u53EA\u53D1\u9001\u7ED9 owner/allowedUsers\u3002\u5361\u7247\u4E3A\u9759\u6001\u5FEB\u7167\uFF0C\u4EC5\u666E\u901A\u7FA4\u53EF\u7528\uFF1B\u4E0D\u5F71\u54CD\u81EA\u52A8\u6D41\u5F0F\u5361\u7247\u3002","botDefaults.sectionCodexAppDisplay":"Codex App \u5386\u53F2\u663E\u793A","botDefaults.codexAppCleanInput":"\u7EAF\u51C0\u663E\u793A User Message\uFF08\u5B9E\u9A8C\u6027\uFF09","botDefaults.codexAppCleanInputHelp":"\u53EA\u5F71\u54CD Codex App \u4ECE\u4E0B\u4E00 turn \u8D77\u5199\u5165\u7684 User Message \u548C\u5386\u53F2\u663E\u793A\uFF1ABotmux \u7684 XML\u3001\u8DEF\u7531\u4E0E\u7CFB\u7EDF\u4E0A\u4E0B\u6587\u4ECD\u4F1A\u4F20\u7ED9\u6A21\u578B\uFF0C\u4F46\u6539\u8D70\u9690\u85CF\u4E0A\u4E0B\u6587\uFF1B\u4E0D\u6539\u53D8\u98DE\u4E66\u5BF9\u8BDD\uFF0C\u4E5F\u4E0D\u6E05\u7406\u5DF2\u6709\u5386\u53F2\u3002","botDefaults.codexAppCleanInputCompat":"\u9ED8\u8BA4\u5173\u95ED\uFF0C\u4FDD\u6301\u539F\u6709\u517C\u5BB9\u884C\u4E3A\uFF1B\u5F00\u542F\u540E\u4ECE\u4E0B\u4E00 turn \u751F\u6548\u3002","botDefaults.sectionCrossBot":"\u8DE8 bot \u534F\u4F5C","botDefaults.botToBotSameDir":"bot@bot \u540C\u76EE\u5F55\u62C9\u8D77","botDefaults.botToBotSameDirHelp":"\u9ED8\u8BA4\u5F00\u542F\u3002\u5F53\u8BE5 bot \u88AB @ \u5230\u5DF2\u6709\u5176\u4ED6 bot \u5DE5\u4F5C\u7684\u7FA4/\u8BDD\u9898\u65F6\uFF0C\u590D\u7528\u5BF9\u65B9\u5DE5\u4F5C\u76EE\u5F55\u5E76\u8DF3\u8FC7\u4ED3\u5E93\u9009\u62E9\u3002\u5173\u95ED\u540E\u59CB\u7EC8\u4F7F\u7528\u672C bot \u81EA\u5DF1\u7684\u76EE\u5F55\u89C4\u5219\u3002","botDefaults.cardPrefSaved":"\u5DF2\u4FDD\u5B58","botDefaults.sectionSummaryTrigger":"/summary \u603B\u7ED3\u8303\u56F4","botDefaults.summaryLimit":"\u6700\u8FD1\u6D88\u606F\u6761\u6570","botDefaults.summarySinceHours":"\u6700\u8FD1\u5C0F\u65F6\u6570","botDefaults.summaryLimitHelp":"/summary \u8BFB\u53D6\u7684\u5386\u53F2\u8303\u56F4\u3002\u9ED8\u8BA4\u6700\u8FD1 50 \u6761\u6216 24 \u5C0F\u65F6\uFF1B\u4EFB\u4E00\u9879\u586B 0 \u8868\u793A\u4E0D\u9650\u5236\u3002\u8BDD\u9898\u7FA4\u59CB\u7EC8\u53EA\u8BFB\u5F53\u524D\u8BDD\u9898\u3002","botDefaults.summarySave":"\u4FDD\u5B58\u603B\u7ED3\u8303\u56F4","botDefaults.summaryNumberInvalid":"\u65F6\u957F\u548C\u6761\u6570\u5FC5\u987B\u662F 0 \u6216\u6B63\u6574\u6570","botDefaults.sectionRole":"\u9ED8\u8BA4\u89D2\u8272","botDefaults.roleHelp":"\u8BE5 bot \u7684\u9ED8\u8BA4\u89D2\u8272\uFF0C\u4F1A\u6CE8\u5165\u5230\u6240\u6709\u4F1A\u8BDD\uFF1B\u5355\u4E2A\u7FA4\u53EF\u5728\u300C\u89D2\u8272\u7BA1\u7406\u300D\u8986\u76D6\u3002\u7559\u7A7A\u4FDD\u5B58\u5373\u5220\u9664\u3002","botDefaults.rolePlaceholder":"\u4F8B\u5982\uFF1A\u4F60\u662F\u540E\u7AEF\u6392\u969C\u52A9\u624B\uFF0C\u56DE\u7B54\u7B80\u6D01\u3001\u4F18\u5148\u7ED9\u53EF\u6267\u884C\u547D\u4EE4\u2026","botDefaults.roleSave":"\u4FDD\u5B58\u89D2\u8272","botDefaults.roleSaved":"\u5DF2\u4FDD\u5B58","botDefaults.roleDeleted":"\u5DF2\u5220\u9664","botDefaults.roleLoadErr":"\u89D2\u8272\u52A0\u8F7D\u5931\u8D25","botDefaults.profileRoles":"Profile \u89D2\u8272","botDefaults.profileRolesHelp":"\u5C55\u793A\u8BE5 bot \u5728\u5404 Profile \u4E2D\u7684\u89D2\u8272\u6761\u76EE\uFF1B\u5C55\u5F00\u540E\u52A0\u8F7D\u8BE6\u60C5\u3002","botDefaults.profileRolesEmpty":"\u8FD9\u4E2A bot \u6682\u65E0 Profile \u89D2\u8272\u3002","botDefaults.profileRolesLoadFailed":"Profile \u89D2\u8272\u52A0\u8F7D\u5931\u8D25\uFF1A{error}","botDefaults.profileRoleClickToLoad":"\u5C55\u5F00\u540E\u52A0\u8F7D\u89D2\u8272\u8BE6\u60C5\u3002","botDefaults.profileRoleDetailLoadFailed":"\u89D2\u8272\u8BE6\u60C5\u52A0\u8F7D\u5931\u8D25\uFF1A{error}","botDefaults.sectionAutoStart":"\u4E3B\u52A8\u5F00\u5DE5","botDefaults.autoStartJoin":"\u88AB\u62C9\u8FDB\u65B0\u7FA4\u81EA\u52A8\u5F00\u5DE5","botDefaults.autoStartJoinHelp":"\u673A\u5668\u4EBA\u88AB\u52A0\u5165\u65B0\u7FA4\u4E14\u7FA4\u5185\u6709\u6388\u6743\u7528\u6237\u65F6\uFF0C\u81EA\u52A8\u542F\u52A8\u4F1A\u8BDD\uFF0C\u65E0\u9700 @\u3002\u4F7F\u7528\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u672A\u914D\u7F6E\u65F6\u5148\u5F39\u4ED3\u5E93\u9009\u62E9\u3002\u9700\u8981\u8BA2\u9605\u673A\u5668\u4EBA\u8FDB\u7FA4\u4E8B\u4EF6\u5E76\u5177\u5907\u7FA4\u6210\u5458\u8BFB\u53D6\u6743\u9650\u3002","botDefaults.autoStartJoinPrompt":"\u5165\u7FA4\u9996\u8F6E prompt\uFF08\u53EF\u9009\uFF09","botDefaults.autoStartJoinPromptPlaceholder":"\u586B\u4E86\uFF1D\u4F5C\u4E3A\u5165\u7FA4\u540E\u7684\u7B2C\u4E00\u6761\u4EFB\u52A1\uFF1B\u7559\u7A7A\uFF1D\u673A\u5668\u4EBA\u81EA\u5DF1\u770B\u7FA4\u91CC\u4FE1\u606F\u51B3\u5B9A\u505A\u4EC0\u4E48","botDefaults.autoStartJoinPromptSave":"\u4FDD\u5B58 prompt","botDefaults.autoStartTopic":"\u8BDD\u9898\u7FA4\u65B0\u8BDD\u9898\u81EA\u52A8\u5F00\u5DE5","botDefaults.autoStartTopicHelp":"\u8BDD\u9898\u7FA4\u4E2D\u65B0\u5EFA\u8BDD\u9898\u65F6\uFF0C\u81EA\u52A8\u63A5\u5165\u5E76\u5904\u7406\u9996\u6761\u6D88\u606F\uFF0C\u65E0\u9700 @\u3002\u4EC5\u5F71\u54CD\u8BDD\u9898\u7FA4\u3002","botDefaults.sectionSessionMode":"\u4F1A\u8BDD\u6A21\u5F0F","botDefaults.p2pMode":"\u79C1\u804A\u4F1A\u8BDD\u6A21\u5F0F","botDefaults.p2pThread":"thread\uFF08\u6BCF\u6761 DM \u72EC\u7ACB\u4F1A\u8BDD\uFF09","botDefaults.p2pChat":"chat\uFF08\u6241\u5E73\u8FDE\u7EED\u5355\u804A\u4F1A\u8BDD\uFF09","botDefaults.p2pHelp":"\u79C1\u804A\u4F1A\u8BDD\u65B9\u5F0F\uFF1Athread=\u6BCF\u6761\u9876\u5C42\u6D88\u606F\u72EC\u7ACB\u4F1A\u8BDD\uFF1Bchat=\u6574\u6BB5\u79C1\u804A\u5171\u4EAB\u4E00\u4E2A\u8FDE\u7EED\u4F1A\u8BDD\u3002\u6539\u52A8\u7ACB\u5373\u751F\u6548\u3002","botDefaults.regularGroupMode":"\u666E\u901A\u7FA4\u4F1A\u8BDD\u6A21\u5F0F","botDefaults.regularGroupModeChat":"chat\uFF08\u6241\u5E73\u8FDE\u7EED\u5355\u804A\u4F1A\u8BDD\uFF0C\u9ED8\u8BA4\uFF09","botDefaults.regularGroupModeChatTopic":"chat-topic\uFF08\u9876\u5C42\u5E73\u94FA\u8FDE\u7EED\u4F1A\u8BDD\uFF0C\u539F\u751F\u8BDD\u9898\u5404\u81EA\u72EC\u7ACB\u4F1A\u8BDD\uFF09","botDefaults.regularGroupModeNewTopic":"new-topic\uFF08\u6BCF\u6761\u9876\u5C42 @ \u5404\u5F00\u72EC\u7ACB\u8BDD\u9898\u4E0E\u4F1A\u8BDD\uFF09","botDefaults.regularGroupModeShared":"shared\uFF08\u8BDD\u9898\u6A21\u5F0F\u4F46\u590D\u7528\u540C\u4E00\u4E2A session\uFF09","botDefaults.regularGroupModeHelp":"\u666E\u901A\u7FA4\u9876\u5C42 @ \u7684\u5F00\u4F1A\u8BDD\u65B9\u5F0F\uFF1Achat=\u6574\u7FA4\u8FDE\u7EED\u4F1A\u8BDD\uFF1Bchat-topic=\u9876\u5C42\u8FDE\u7EED\u3001\u539F\u751F\u8BDD\u9898\u72EC\u7ACB\uFF1Bnew-topic=\u6BCF\u6B21 @ \u65B0\u5EFA\u8BDD\u9898\u4E0E\u4F1A\u8BDD\uFF1Bshared=\u8BDD\u9898\u5C55\u793A\u4F46\u5171\u4EAB\u4F1A\u8BDD\u3002\u53EF\u88AB\u7FA4\u7EA7 /reply-mode \u8986\u76D6\u3002","botDefaults.mentionMode":"\u7FA4\u804A @ \u7B56\u7565","botDefaults.mentionModeAlways":"\u90FD\u9700\u8981 @\uFF08\u9ED8\u8BA4\uFF09","botDefaults.mentionModeTopic":"\u4EC5\u8BDD\u9898\u5185\u4E0D\u9700\u8981 @","botDefaults.mentionModeNever":"\u6240\u6709\u6D88\u606F\u90FD\u4E0D\u9700\u8981 @","botDefaults.mentionModeAmbient":"\u90FD\u4E0D\u9700\u8981 @\uFF08\u4F46\u4F60 @ \u522B\u4EBA\u65F6\u8BA9\u4F4D\uFF09","botDefaults.mentionModeHelp":"\u63A7\u5236\u7FA4\u804A\u662F\u5426\u5FC5\u987B @ \u624D\u56DE\u590D\uFF1A\u9ED8\u8BA4\u90FD\u9700\u8981 @\uFF1B\u53EF\u5141\u8BB8\u5DF2\u63A5\u7BA1\u8BDD\u9898\u5185\u514D @\u3001\u5168\u7FA4\u514D @\uFF0C\u6216\u5728\u6D88\u606F @ \u5176\u4ED6\u4EBA\u65F6\u8BA9\u4F4D\u3002\u79C1\u804A\u59CB\u7EC8\u4E0D\u9700\u8981 @\u3002","botDefaults.docSubscribeMode":"\u6587\u6863\u8BA2\u9605\u89E6\u53D1\u8303\u56F4\uFF08\u9ED8\u8BA4\uFF09","botDefaults.docSubscribeModeMention":"\u4EC5\u8BC4\u8BBA @ \u6211\u624D\u89E6\u53D1","botDefaults.docSubscribeModeAll":"\u6240\u6709\u65B0\u8BC4\u8BBA\u90FD\u89E6\u53D1","botDefaults.docSubscribeModeHelp":"\u7528 /watch-comment \u76D1\u542C\u98DE\u4E66\u6587\u6863\u8BC4\u8BBA\u540E\uFF0C\u8BC4\u8BBA\u4F1A\u5582\u8FDB\u4F1A\u8BDD\u3001bot \u56DE\u590D\u53D1\u56DE\u8BC4\u8BBA\u4E32\u3002\u8FD9\u91CC\u8BBE\u65B0\u76D1\u542C\u7684\u9ED8\u8BA4\u89E6\u53D1\u8303\u56F4\uFF1A\u300C\u4EC5\u8BC4\u8BBA @ \u6211\u300D\u6700\u5B89\u5168\uFF08\u9632\u5237\u5C4F\uFF09\uFF1B\u300C\u6240\u6709\u65B0\u8BC4\u8BBA\u300D\u9002\u5408\u4E13\u7528\u6587\u6863\u3002","botDefaults.sectionSubstitute":"\u66FF\u8EAB\u6A21\u5F0F","botDefaults.substituteEnabled":"\u542F\u7528\u66FF\u8EAB\u89E6\u53D1","botDefaults.substituteHelp":"\u666E\u901A\u7FA4\u91CC @ \u5230\u914D\u7F6E\u7684\u66FF\u8EAB\u5BF9\u8C61\u65F6\uFF0C\u7531\u672C bot \u4EE3\u7B54\uFF1B\u53D1\u6D88\u606F\u7684\u4EBA\u4ECD\u9700\u5177\u5907 canTalk \u6743\u9650\u3002\u63A8\u8350\u4E0E\u300COncall \u6A21\u5F0F\u300D\u4E00\u8D77\u4F7F\u7528\uFF0C\u8BA9\u7FA4\u5185\u6210\u5458\u90FD\u80FD\u81EA\u7136 @ \u66FF\u8EAB\u89E6\u53D1\u4EE3\u7B54\u3002\u5F53\u524D\u7FA4\u53EF\u7528 /substitute off \u4E34\u65F6\u5173\u95ED\u3002","botDefaults.substituteDisclosure":"\u62AB\u9732\u65B9\u5F0F","botDefaults.substituteDisclosurePrefix":"\u9ED8\u8BA4\u8BF4\u660E\u201C\u6211\u5148\u4EE3 TA \u56DE\u590D\u201D","botDefaults.substituteDisclosureNone":"\u4E0D\u989D\u5916\u8BF4\u660E","botDefaults.substituteTargetsPlaceholder":`zhangsan@bytedance.com
|
|
10
10
|
ou_xxxx\uFF08\u4E5F\u53EF\u76F4\u63A5\u586B open_id / union_id\uFF09`,"botDefaults.substituteTargets":"\u66FF\u8EAB\u5BF9\u8C61","botDefaults.substituteTargetsHelp":"\u6BCF\u9879\u5BF9\u5E94\u4E00\u4E2A\u66FF\u8EAB\u5BF9\u8C61\u3002\u53EF\u76F4\u63A5\u586B\u90AE\u7BB1\uFF08\u4FDD\u5B58\u65F6\u81EA\u52A8\u89E3\u6790\u4E3A Open ID\uFF09\uFF0C\u4E5F\u53EF\u9009\u62E9 Open ID\u3001User ID \u6216 Union ID\uFF1B\u89E3\u6790\u5931\u8D25\u7684\u90AE\u7BB1\u4F1A\u6807\u7EA2\u3002","botDefaults.substituteTargetType":"\u6807\u8BC6\u7C7B\u578B","botDefaults.substituteTargetEmail":"\u90AE\u7BB1","botDefaults.substituteTargetOpenId":"Open ID","botDefaults.substituteTargetUserId":"User ID","botDefaults.substituteTargetUnionId":"Union ID","botDefaults.substituteTargetIdPlaceholder":"\u8F93\u5165\u98DE\u4E66\u7528\u6237\u6807\u8BC6\u6216\u90AE\u7BB1","botDefaults.substituteTargetName":"\u663E\u793A\u540D\u79F0","botDefaults.substituteTargetNamePlaceholder":"\u663E\u793A\u540D\u79F0\uFF08\u53EF\u9009\uFF09","botDefaults.substituteTargetAdd":"\u6DFB\u52A0\u66FF\u8EAB\u5BF9\u8C61","botDefaults.substituteTargetRemove":"\u5220\u9664\u66FF\u8EAB\u5BF9\u8C61","botDefaults.substituteTargetsInvalid":"\u542F\u7528\u524D\u81F3\u5C11\u586B\u5199\u4E00\u4E2A\u6709\u6548\u7684\u66FF\u8EAB\u5BF9\u8C61\uFF1B\u90AE\u7BB1\u9700\u80FD\u89E3\u6790\u4E3A Open ID","botDefaults.substituteTargetsRequired":"\u5F00\u542F\u66FF\u8EAB\u89E6\u53D1\u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u80FD\u89E3\u6790\u6210 open_id \u7684\u5BF9\u8C61","botDefaults.substituteResolving":"\u89E3\u6790\u4E2D\u2026","botDefaults.substituteUnresolved":"\u672A\u89E3\u6790","botDefaults.substituteSave":"\u4FDD\u5B58\u66FF\u8EAB\u6A21\u5F0F","botDefaults.substituteOff":"\u5173\u95ED\u5168\u5C40\u66FF\u8EAB\u914D\u7F6E","botDefaults.sectionGrant":"\u6388\u6743\u4E0E\u989D\u5EA6","botDefaults.autoGrantCard":"\u672A\u6388\u6743 @ \u81EA\u52A8\u5F39\u6388\u6743\u5361","botDefaults.autoGrantCardHelp":"\u672A\u6388\u6743\u7528\u6237\u6216\u5916\u90E8 bot \u660E\u786E @ \u65F6\uFF0C\u81EA\u52A8\u5411 owner \u53D1\u9001 /grant \u7533\u8BF7\u5361\u3002\u5173\u95ED\u540E\u4ECD\u62E6\u622A\uFF0C\u4F46\u4E0D\u63D0\u793A\u3002","botDefaults.restrictGrant":"\u9650\u5236\u88AB\u6388\u6743\u4EBA\u53EA\u80FD\u7EAF\u5BF9\u8BDD","botDefaults.restrictGrantHelp":"\u9650\u5236 /grant \u7528\u6237\u53EA\u80FD\u666E\u901A\u5BF9\u8BDD\uFF0C\u7981\u6B62 botmux \u547D\u4EE4\u3001\u900F\u4F20\u547D\u4EE4\u3001CLI \u539F\u751F\u547D\u4EE4\u548C\u5DE5\u4F5C\u6D41\u76F8\u5173\u547D\u4EE4\uFF1Bowner \u4E0D\u53D7\u5F71\u54CD\u3002","botDefaults.quotaDefault":"\u9ED8\u8BA4\u6D88\u606F\u989D\u5EA6","botDefaults.quotaPlaceholder":"\u7559\u7A7A\uFF1D\u4E0D\u914D\u7F6E\u9ED8\u8BA4\u989D\u5EA6","botDefaults.quotaHelp":"\u8BBE\u7F6E\u88F8 /grant @\u7528\u6237 \u7684\u9ED8\u8BA4\u6D88\u606F\u989D\u5EA6\u3002\u7559\u7A7A\u4FDD\u5B58=\u4E0D\u518D\u8BBE\u7F6E\u9ED8\u8BA4\u989D\u5EA6\uFF1B\u5DF2\u6709\u989D\u5EA6\u548C\u663E\u5F0F /grant @\u7528\u6237 N \u4E0D\u53D7\u5F71\u54CD\u3002\u989D\u5EA6\u7528\u5C3D\u540E\u81EA\u52A8\u64A4\u9500\u6388\u6743\u3002","botDefaults.quotaSave":"\u4FDD\u5B58\u989D\u5EA6","botDefaults.quotaInvalid":"\u989D\u5EA6\u5FC5\u987B\u662F\u6B63\u6574\u6570","botDefaults.quotaStateOff":"\u5F53\u524D\uFF1A\u672A\u914D\u7F6E\u9ED8\u8BA4\u989D\u5EA6","botDefaults.quotaStateOn":"\u5F53\u524D\uFF1A\u6BCF\u4EBA {count} \u6761","botDefaults.sectionSessionCap":"\u4F1A\u8BDD\u5E38\u9A7B\u4E0A\u9650","botDefaults.maxLiveWorkers":"\u6700\u5927\u5E38\u9A7B\u4F1A\u8BDD\u6570","botDefaults.maxLiveWorkersPlaceholder":"\u7559\u7A7A\uFF1D\u9ED8\u8BA4 30","botDefaults.maxLiveWorkersUsage":"\u5E38\u9A7B {resident}/{cap} \xB7 \u4F11\u7720 {dormant} \xB7 \u603B\u4F1A\u8BDD {logical}","botDefaults.maxLiveWorkersHelp":"\u672C Bot \u540C\u65F6\u5E38\u9A7B\u5185\u5B58\u7684\u4F1A\u8BDD\u6570\u4E0A\u9650\u3002\u8D85\u8FC7\u540E\u6700\u4E45\u672A\u7528\u7684\u4F1A\u8BDD\u81EA\u52A8\u4F11\u7720\uFF1A\u5176\u540E\u53F0\u8FDB\u7A0B\u548C CLI \u4E00\u8D77\u9000\u51FA\u3001\u56DE\u6536\u5185\u5B58\uFF0C\u4F46\u8BDD\u9898\u4ECD\u53EF\u7EE7\u7EED\uFF1B\u4E0B\u6761\u6D88\u606F\u4F1A\u4ECE\u78C1\u76D8\u8BB0\u5F55\u51B7\u6062\u590D\u4E0A\u4E0B\u6587\uFF08\u901A\u5E38\u51E0\u79D2\uFF09\u3002\u7559\u7A7A\uFF1D\u9ED8\u8BA4 30\uFF1B\u586B\u6570\u5B57\uFF1D\u672C Bot \u81EA\u5B9A\u4E49\u3002\u6CE8\u610F\uFF1A\u6B63\u5728\u51FA\u7B54\u6848\u7684\u4F1A\u8BDD\u4E0D\u4F1A\u88AB\u6253\u65AD\uFF1B\u53EA\u6709\u53EF\u6062\u590D\u7684\u4F1A\u8BDD\u4F1A\u81EA\u52A8\u4F11\u7720\uFF0C\u63A5\u5165\u5916\u90E8\u7EC8\u7AEF\u6216\u4E0D\u53EF\u6062\u590D\u7684\u4F1A\u8BDD\u4E0D\u53D7\u5F71\u54CD\u3002","botDefaults.maxLiveWorkersSave":"\u4FDD\u5B58\u4E0A\u9650","botDefaults.maxLiveWorkersOff":"\u6062\u590D\u9ED8\u8BA4","botDefaults.maxLiveWorkersInvalid":"\u4E0A\u9650\u5FC5\u987B\u662F\u6B63\u6574\u6570","botDefaults.maxLiveWorkersStateDefault":"\u5F53\u524D\uFF1A\u9ED8\u8BA4\u5E38\u9A7B 30 \u4E2A\u4F1A\u8BDD","botDefaults.maxLiveWorkersStateOn":"\u5F53\u524D\uFF1A\u6700\u591A\u5E38\u9A7B {count} \u4E2A\u4F1A\u8BDD","botDefaults.sectionRuntimeEnv":"\u542F\u52A8\u73AF\u5883","botDefaults.sectionStartupCommands":"\u542F\u52A8\u547D\u4EE4","botDefaults.startupCommandsHelp":"\u65B0\u4F1A\u8BDD\u542F\u52A8\u540E\u3001\u9996\u6761\u6D88\u606F\u524D\u81EA\u52A8\u53D1\u9001\u7684 CLI \u547D\u4EE4\u3002\u652F\u6301\u9017\u53F7\u6216\u6362\u884C\u5206\u9694\uFF1B\u6BCF\u6B21\u65B0\u4F1A\u8BDD\u548C\u6062\u590D\u90FD\u4F1A\u91CD\u653E\u3002\u4EC5\u539F\u751F CLI \u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.startupCommandsPlaceholder":"\u6BCF\u884C\u4E00\u6761\uFF0C\u5982 /effort ultracode","botDefaults.startupCommandsSave":"\u4FDD\u5B58\u542F\u52A8\u547D\u4EE4","botDefaults.sectionLaunchShell":"\u542F\u52A8 Shell","botDefaults.launchShellHelp":"\u6307\u5B9A\u542F\u52A8 CLI \u7684 shell\uFF08\u5982 zsh \u6216 /usr/bin/zsh\uFF09\uFF0C\u8986\u76D6 daemon \u7684 $SHELL\u3002\u7528\u4E8E\u7ED5\u8FC7\u767B\u5F55 shell rc \u4E2D\u7684\u8DF3\u8F6C\u95EE\u9898\uFF1BPATH \u7B49\u4ECD\u9700\u5728\u6240\u9009 shell \u914D\u7F6E\u4E2D\u53EF\u7528\u3002\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002","botDefaults.launchShellPlaceholder":"\u5982 zsh \u6216 /usr/bin/zsh\uFF1B\u7559\u7A7A\uFF1D\u7528 $SHELL","botDefaults.launchShellSave":"\u4FDD\u5B58\u542F\u52A8 Shell","botDefaults.sectionEnv":"\u73AF\u5883\u53D8\u91CF","botDefaults.envHelp":"\u4EE5 JSON \u4E3A\u8BE5 bot \u7684 CLI \u8FDB\u7A0B\u6CE8\u5165\u73AF\u5883\u53D8\u91CF\u3002\u652F\u6301\u5B57\u7B26\u4E32/\u6570\u5B57/\u5E03\u5C14\uFF1BBOTMUX_\u3001LARK_APP_ \u7B49\u4FDD\u7559\u952E\u4F1A\u88AB\u5FFD\u7565\u3002\u4E0B\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\uFF0C\u660E\u6587\u5B58\u50A8\u5728 bots.json\u3002","botDefaults.envPlaceholder":`{
|
|
11
11
|
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
|
|
12
12
|
"ANTHROPIC_AUTH_TOKEN": "\u4F60\u7684 GLM Coding Plan key"
|
|
@@ -24,7 +24,7 @@ Code churn is parsed from patches and covers only each session's most active fil
|
|
|
24
24
|
{paths}
|
|
25
25
|
|
|
26
26
|
Only the running install location will be updated. Continue anyway?`,"update.confirmUpdate":"This will run {command} to update to {version}. Continue?","update.confirmUpdateNoVer":"This will run {command} to update to the latest version. Continue?","update.nodeTooOldAlert":"Node {version} is too old (requires \u2265 {required}). Please upgrade Node before updating.","update.updating":"Updating ({command})\u2026","update.unsupportedInstall":"This install cannot be auto-updated safely. Only npm/pnpm global installs are supported; update manually with the owning package manager.","update.updatedChanged":"Updated {old} \u2192 {new}.","update.confirmRestart":"A restart is required to apply the new version. Restart now? (Sessions cold-resume; the dashboard briefly disconnects and reconnects.)","update.alreadyLatestRun":"Already on the latest version ({version}); nothing to update.","update.updateFailed":"Update failed: {detail}","update.noRestartHint":"Update installed. Restart later (botmux restart) to apply the new version.","update.confirmPlainRestart":"Restart botmux? Sessions cold-resume; the dashboard briefly disconnects and reconnects.","update.restarting":"Restarting botmux, waiting to reconnect\u2026","update.restartSlow":"Restart is taking a while; please refresh the page manually.","update.restartFailed":"Restart failed: {detail}","skills.title":"Skill Management","skills.installed":"Installed Skills","skills.installedHelp":"Skills installed locally and available to Bots.","skills.installedCount":"{count}","skills.metricInstalled":"Installed Skills","skills.metricBots":"Configured Bots","skills.metricAttached":"Priority refs","skills.install":"Install Skill","skills.installInfoLabel":"Install location details","skills.installInfo":"Registry metadata is stored in ~/.botmux/skills/registry.json; installed content lives under ~/.botmux/skills/store. Local CLI Skills are referenced in place and do not modify CLI global directories.","skills.source":"Import Address","skills.sourcePlaceholder":"Paste a GitHub repo, Git URL, agentbuddy install command, or local Skill directory","skills.sourceHelpRemoteLabel":"GitHub / Git: ","skills.sourceHelpRemote":"Paste a repository root URL. Repositories with multiple Skills can be selected after clicking Install.","skills.sourceHelpLocalLabel":"Local CLI Skill directory: ","skills.sourceHelpLocal":"Referenced in place without copying into the botmux store.","skills.sourceHelpAgentbuddyLabel":"AgentBuddy: ","skills.sourceHelpAgentbuddy":"Paste an agentbuddy install command, e.g. agentbuddy skill collection add <uid> / agentbuddy plugin collection add <uid>; the open-source skills CLI form skills add owner/repo also works (via GitHub install). agentbuddy commands need the deploy host logged in via agentbuddy login.","skills.agentbuddyNotFound":"agentbuddy CLI not found on the deploy host. Install it globally there, or set BOTMUX_AGENTBUDDY_CMD.","skills.agentbuddyNeedsLogin":"agentbuddy on the deploy host is not logged in. Run agentbuddy login there and retry.","skills.agentbuddyCommandFailed":"agentbuddy install failed \u2014 check the deploy-host logs.","skills.agentbuddyTelemetryFailed":"Embedded-telemetry removal failed; install aborted (set BOTMUX_AGENTBUDDY_KEEP_TELEMETRY=1 to keep it).","skills.agentbuddyNoSkill":"agentbuddy produced no Skill \u2014 check the identifier.","skills.agentbuddyInvalid":"Invalid agentbuddy identifier format.","skills.discover":"Discover Skills","skills.localDiscover":"Browse Local Skills","skills.localDiscoverTitle":"Local CLI Skills","skills.localDiscoverHelp":"Scans locally installed CLI Skills and registers them as local references.","skills.scan":"Scan","skills.scanning":"Scanning","skills.scanFound":"Found {count} Skills","skills.scanEmpty":"No installable Skills were found.","skills.sourceRequired":"Enter an import address first.","skills.advanced":"Advanced Options","skills.discoverTitle":"Discover Local CLI Skills","skills.discoverHelp":"Scans Skill directories used by configured bots. Selected Skills are registered as local links without copying files.","skills.discoverEmpty":"No registerable Skills were found in local CLI skill directories.","skills.discoverGroupEmpty":"No registerable Skills were found in this CLI directory.","skills.discoverRegistered":"Registered","skills.discoverSelectAll":"Select unregistered","skills.discoverClearSelection":"Clear selection","skills.discoverRegister":"Register selected","skills.discoverClose":"Close","skills.discoverNothingSelected":"Select at least one unregistered Skill.","skills.discoverRegisteringBatch":"Registering {total} Skills","skills.sourceCodex":"Local Codex","skills.sourceClaude":"Local Claude","skills.sourceTrae":"Local Trae","skills.sourceCursor":"Local Cursor","skills.sourceGemini":"Local Gemini","skills.sourceOpenCode":"Local OpenCode","skills.sourceLocalLink":"Local link","skills.sourceBotmuxCopy":"botmux store","skills.path":"Repo Path (optional)","skills.pathPlaceholder":"Leave empty to scan the repository root, or enter one Skill directory","skills.ref":"Ref (optional)","skills.refPlaceholder":"Blank uses the GitHub URL ref or default HEAD","skills.link":"Local link (no copy)","skills.installSubmit":"Install","skills.installSelected":"Install Selected","skills.installSelectionTitle":"Select Skills to Install","skills.installSelectionHelp":"Found {count} Skills. Clear items you do not need before installing.","skills.installSelectionCancel":"Cancel","skills.update":"Update","skills.remove":"Remove","skills.select":"Select","skills.searchLabel":"Search installed Skills","skills.searchPlaceholder":"Search installed Skills","skills.clearSearch":"Clear search","skills.resultCount":"{count} results","skills.selectAllSkills":"Select all {count}","skills.selectSearchResults":"Select {count} search results","skills.selectNamed":"Select {skill}","skills.selectedCount":"{count} selected","skills.selectedHidden":"\xB7 {count} outside current results","skills.bulkActions":"Installed Skills bulk actions","skills.removeSelected":"Remove {count}","skills.emptyTitle":"No Skills installed yet","skills.emptyHelp":"Installed Skills will appear here.","skills.noResultsTitle":"No results for \u201C{query}\u201D","skills.noResultsHelp":"Try another keyword.","skills.removeOneTitle":"Remove \u201C{skill}\u201D?","skills.removeManyTitle":"Remove {count} Skills?","skills.removeOnePermanentHelp":"This removes the Skill from the current environment and deletes its local copy in the botmux store. This cannot be undone.","skills.removePermanentHelp":"This removes the selected Skills from the current environment and deletes local copies in the botmux store. This cannot be undone.","skills.removeMore":"and {count} more","skills.removeInUseOneTitle":"Still remove \u201C{skill}\u201D?","skills.removeInUseManyTitle":"Still remove {count} Skills?","skills.removeInUseOneHelp":"{count} Bots currently reference it. After removal, those Bots can no longer use it. This cannot be undone.","skills.removeInUseManyHelp":"{count} Bots currently reference these Skills. After removal, those Bots can no longer use them. This cannot be undone.","skills.removeReferencesDetail":"Affected Bots","skills.removeOneConfirm":"Remove Skill","skills.removeAnyway":"Remove anyway","skills.removing":"Removing\u2026","skills.removingCount":"Removing {count} Skills\u2026","skills.removedOne":"Removed \u201C{skill}\u201D","skills.removedMany":"Removed {count} Skills","skills.removeFailed":"Could not remove Skills. Try again: {detail}","skills.pageStatus":"{page} / {pages}","skills.prevPage":"Previous page","skills.nextPage":"Next page","skills.empty":"No installed skills yet. Install from a local directory, Git, or GitHub.","skills.apiUnavailable":"This Dashboard backend does not expose the Skill API. Usually the frontend was updated before the botmux process restarted. Restart botmux, then refresh this page.","skills.globalDefaults":"Global Skill Delivery","skills.globalProject":"Workspace Skills","skills.globalProjectOff":"Ignore workspace Skills","skills.globalProjectOffHelp":"Read global CLI Skills and botmux Skills only","skills.globalProjectAll":"Read workspace Skills","skills.globalProjectAllHelp":`Read .agents/skills and
|
|
27
|
-
.botmux/skills`,"skills.globalDelivery":"Skill Delivery","skills.bots":"Bot Skill Settings","skills.botsHelp":"Choose priority Skills for each bot to disclose first.","skills.botCount":"{count} Bots","skills.skillCount":"{count} Skills","skills.attach":"Add to priority","skills.detach":"Remove","skills.detachNamed":"Remove {skill}","skills.delivery":"Injection","skills.deliveryAuto":"Auto","skills.deliveryAutoHelp":"Use native CLI delivery first; fall back to Prompt when unsupported","skills.deliveryPrompt":"Prompt","skills.deliveryPromptHelp":"Inject the Skill catalog into the session prompt; works with every CLI","skills.deliveryNative":"Native","skills.deliveryNativeHelp":"Use only the CLI native Skill mechanism; no Prompt fallback","skills.projectMode":"Workspace Skills","skills.projectDefault":"Follow global","skills.projectDefaultHelp":"Use the project default on the left","skills.projectOff":"Do not read","skills.projectOffHelp":"This bot ignores workspace skills","skills.projectAll":"Read","skills.projectAllHelp":"This bot includes workspace skill candidates","skills.priority":"Priority skills","skills.noPriority":"Not configured, keeping CLI default behavior","skills.pickerPlaceholder":"Select priority Skills","skills.pickerSelectedCount":"{count} Skills selected","skills.pickerTriggerHint":"Click to search or edit the selection","skills.pickerSearchPlaceholder":"Search Skill names or descriptions","skills.pickerSelectionMeta":"{selected} selected \xB7 {total} total","skills.pickerClear":"Clear","skills.pickerNoResults":"No matching Skills","skills.saveSelection":"Save selection","skills.cancel":"Cancel","skills.saving":"Saving\u2026","skills.policySaved":"Priority Skills saved","skills.dangling":"Not installed","skills.removeInUse":'Skill "{skill}" is still referenced by: {refs}. Removing it deletes the registry package but does not automatically clean references. Continue?',"skills.saved":"Saved","skills.failed":"Failed","skills.jobRunning":"Working...","skills.refresh":"Refresh","botDefaults.title":"Bot Config","botDefaults.metaOnline":"Online \xB7 daemon healthy","botDefaults.search":"Search bot name / app id","botDefaults.refresh":"Refresh","botDefaults.sectionOncall":"New-chat Oncall","botDefaults.sectionBrand":"Card Signature","botDefaults.renameTitle":"Rename bot","botDefaults.renameAction":"Rename","botDefaults.renameSave":"Save","botDefaults.renameCancel":"Cancel","botDefaults.renameEmpty":"Name cannot be empty","botDefaults.renaming":"Syncing to the Feishu open platform (rename + publish a new version, ~10s)\u2026","botDefaults.renameOkFeishu":"Feishu app renamed \u2014 the name in chats is live","botDefaults.renameLocalOnly":"Feishu-side rename failed ({reason}); only the dashboard display name was updated","botDefaults.renameWarn.no_session":"No Feishu web session on the server \u2014 run botmux setup there to scan the QR again","botDefaults.renameWarn.session_expired":"The Feishu web session expired \u2014 run botmux setup on the server to scan the QR again","botDefaults.renameWarn.no_access":"The cached Feishu account is not a collaborator of this app","botDefaults.renameWarn.unsupported_brand":"Auto-rename is not supported for international Lark tenants yet","botDefaults.renameFailed":"Rename failed: {error}","feishuLogin.entry":"Scan to log in to Feishu","feishuLogin.title":"Refresh Feishu login by QR","feishuLogin.starting":"Fetching QR code\u2026","feishuLogin.scanHint":"Scan with the Feishu app and confirm to authorize renaming (session stays on this server, shared with setup)","feishuLogin.success":"\u2713 Logged in \u2014 retrying the rename\u2026","feishuLogin.failed":"Login failed: {reason}","feishuLogin.retry":"Get a new QR code","feishuLogin.close":"Close","feishuLogin.qrAlt":"Feishu login QR code","botDefaults.sectionAgent":"Agent Config","botDefaults.agentCli":"CLI","botDefaults.agentMissingOption":"{label} (not installed: {command})","botDefaults.agentMissingHint":"{command} is not on the daemon PATH. New sessions cannot start until it is installed or the path is fixed.","botDefaults.agentModel":"Model","botDefaults.agentModelPlaceholder":"Leave empty for the CLI default model","botDefaults.agentHelp":"Affects new sessions only. Existing sessions keep their original CLI / model until closed and started again.","botDefaults.agentSave":"Save CLI / Model","botDefaults.skillInjection":"botmux skills injection","botDefaults.skillInjectionDynamic":"Dynamic (--plugin-dir, per session)","botDefaults.skillInjectionDynamicUnsupported":"Dynamic (not supported by this CLI)","botDefaults.skillInjectionPrompt":"prompt \u2014 into session prompt, no global dir","botDefaults.skillInjectionGlobal":"global \u2014 install into CLI global skills dir","botDefaults.skillInjectionOff":"off \u2014 only a botmux --help pointer","botDefaults.skillInjectionHelpDynamic":"This CLI supports --plugin-dir injection. Skills are session-scoped, not written to global directories, and need no extra setup.","botDefaults.skillInjectionHelp":"Choose how botmux skills are delivered: prompt is the default and injects them at session start without touching global dirs; global installs into the CLI global skills dir; off keeps only the botmux --help pointer. Applies next session; switching global requires a daemon restart.","botDefaults.agentSaved":"Saved (takes effect next session)","botDefaults.warning":"When enabled, chats without an oncall binding auto-bind to this directory on their next new topic. Manually bound or unbound chats are preserved.","botDefaults.empty":"No bots online. Run botmux restart first.","botDefaults.defaultOncall":"Default to oncall mode","botDefaults.defaultOncallHelp":"Unbound chats auto-bind on the next new topic","botDefaults.workingDir":"Default Working Directory","botDefaults.lastEnabled":"Last Enabled","botDefaults.autobound":"{count} chats auto-bound","botDefaults.save":"Save","botDefaults.required":'Working directory is required for "Default directory only" or "Oncall mode"',"botDefaults.sectionWorkingDir":"Default Working Directory","botDefaults.workingDirMode":"Mode","botDefaults.workingDirField":"Directory","botDefaults.workingDirModeOff":"Off (new sessions show the repo picker)","botDefaults.workingDirModeDefault":"Default directory only (no permission change)","botDefaults.workingDirModeOncall":"Oncall mode (open chat to the whole group)","botDefaults.workingDirModeHelp":"Sets where new sessions start: Off shows the repo picker; Default directory starts there without permission changes; Oncall adds automatic group chat access on top. Applies next session.","botDefaults.autoWorktree":"Auto-create a worktree per new session","botDefaults.autoWorktreeHelp":"Only for Default directory mode. Creates an isolated git worktree per new session to avoid collisions; falls back to the default dir on failure. /close does not remove worktrees.","botDefaults.workingDirSaved":"Saved (takes effect next session)","botDefaults.brandLabel":"Signature (card footer)","botDefaults.brandLabelHelp":"Footer signature for cards sent by this bot. Empty hides it; custom text supports Markdown; reset shows botmux.","botDefaults.brandLabelPlaceholder":"Default: botmux (empty = hidden)","botDefaults.sectionSandbox":"File sandbox (oncall)","botDefaults.sandboxToggle":"Enable file sandbox","botDefaults.sandboxHelp":"When on, every session of this bot runs in a sandbox: the agent works normally inside the project dir, but cannot touch your real files, secrets, or other sessions outside it \u2014 writes outside the project are isolated/blocked. For sharing the bot with semi-trusted users (oncall). Linux uses bwrap, macOS uses Seatbelt; same protection on both. Applies to the next new session.","botDefaults.sandboxSaved":"Saved (applies to the next new session)","botDefaults.sandboxReadIsoOn":"Read isolation: this bot's sandboxed sessions also can't read other bots' credentials (bots.json), sessions, or chat content (macOS \xB7 Linux, claude/codex).","botDefaults.sandboxReadIsoOff":"This bot's sandbox is write-protection only; the extra cross-bot read isolation needs claude-code / codex on macOS/Linux (and no wrapper gateway).","botDefaults.readIsolationToggle":"Enable read isolation (macOS)","botDefaults.readIsolationHelp":"When on, this bot's sessions run in a macOS sandbox (Seatbelt): reads of other bots' credentials (bots.json), sessions, and chat content are denied, while its own messages and uploaded files/whiteboards stay accessible. The macOS counterpart of the file sandbox above. Applies to the next new session.","botDefaults.readIsolationSaved":"Saved (applies to the next new session)","botDefaults.readIsolationSavedRestarted":"Saved; restarted {count} of this bot's sessions (cold-restarts on next message; switching isolation mode changes the data root, so their conversation context resets to a fresh session)","botDefaults.readIsolationUnsupported":"(read isolation cannot be enabled for this bot: needs macOS + a supporting CLI (claude-code / codex) + no wrapper gateway)","botDefaults.readIsolationStaleOn":"(enabled, but it can't be enforced here \u2014 sessions will fail-close; turn it off to recover)","botDefaults.sectionBackend":"Session backend","botDefaults.backendLabel":"Backend type","botDefaults.backendHelp":`The session backend for this bot's new sessions. Changes apply live to new sessions; running sessions keep the backend they started on and are unaffected. tmux supports adopt / Web Terminal; herdr manages persistent sessions; zellij is experimental; pty is lightest but does not survive daemon restarts. "Auto" follows the global default.`,"botDefaults.backendAuto":"Auto (follow global default)","botDefaults.backendTmux":"tmux","botDefaults.backendHerdr":"herdr","botDefaults.backendZellij":"zellij","botDefaults.backendPty":"pty","botDefaults.backendSaved":"Saved (applies to the next new session)","botDefaults.brandSave":"Save Signature","botDefaults.brandReset":"Reset to default","botDefaults.brandStateDefault":"Current: default botmux","botDefaults.brandStateOff":"Current: off","botDefaults.brandStateCustom":"Current: custom","botDefaults.sectionCard":"Card Behavior","botDefaults.disableStreaming":"Disable streaming card","botDefaults.disableStreamingHelp":"Disables the live session card and Web Terminal entry. Final results are still sent as messages.","botDefaults.silentTurnReactions":"Disable status reactions in card-off mode","botDefaults.silentTurnReactionsHelp":"When streaming cards are off, botmux can mark received/done with reactions. Enable this to suppress those reactions too.","botDefaults.writableLink":"Put a writable terminal link on the card","botDefaults.writableLinkHelp":"Shows a writable terminal link in the streaming card. Anyone in the chat can operate it, so use only in trusted groups.","botDefaults.writableLinkMoot":"Streaming card disabled \u2014 this has no effect","botDefaults.privateCard":"/card sends a private card (authorized users only)","botDefaults.privateCardHelp":"/card is visible only to owner/allowedUsers. It is a static snapshot, works only in regular groups, and does not affect automatic streaming cards.","botDefaults.sectionCrossBot":"Cross-bot","botDefaults.botToBotSameDir":"bot@bot same-directory launch","botDefaults.botToBotSameDirHelp":"On by default. When this bot is @-ed into a chat where another bot is already working, reuse that bot's directory and skip repo selection. Off uses this bot's own directory rules.","botDefaults.cardPrefSaved":"Saved","botDefaults.sectionSummaryTrigger":"/summary Range","botDefaults.summaryLimit":"Recent message count","botDefaults.summarySinceHours":"Recent hours","botDefaults.summaryLimitHelp":"History range read by /summary. Default is latest 50 messages or 24 hours; set either value to 0 to remove that limit. Topic groups read only the current topic.","botDefaults.summarySave":"Save summary range","botDefaults.summaryNumberInvalid":"Hours and message count must be 0 or a positive integer","botDefaults.sectionRole":"Default Role","botDefaults.roleHelp":"Default role injected into this bot's sessions. Individual chats can override it in Role Management. Saving empty deletes it.","botDefaults.rolePlaceholder":"e.g. You are a backend triage assistant; answer concisely, prefer runnable commands\u2026","botDefaults.roleSave":"Save role","botDefaults.roleSaved":"Saved","botDefaults.roleDeleted":"Deleted","botDefaults.roleLoadErr":"Failed to load role","botDefaults.profileRoles":"Profile Roles","botDefaults.profileRolesHelp":"Role entries for this bot in Profiles. Expand a profile to load details.","botDefaults.profileRolesEmpty":"This bot has no profile roles.","botDefaults.profileRolesLoadFailed":"Failed to load profile roles: {error}","botDefaults.profileRoleClickToLoad":"Expand to load role details.","botDefaults.profileRoleDetailLoadFailed":"Failed to load role detail: {error}","botDefaults.sectionAutoStart":"Proactive Start","botDefaults.autoStartJoin":"Auto-start when added to a new chat","botDefaults.autoStartJoinHelp":"Starts a session when the bot joins a new chat that contains an authorized user, without requiring @. Uses the default directory or shows repo selection. Requires the bot-joined event and member-read scope.","botDefaults.autoStartJoinPrompt":"First-turn prompt on join (optional)","botDefaults.autoStartJoinPromptPlaceholder":"Filled = used as the first task after joining; blank = the bot reads the chat and decides what to do","botDefaults.autoStartJoinPromptSave":"Save prompt","botDefaults.autoStartTopic":"Auto-start on new topics in topic groups","botDefaults.autoStartTopicHelp":"In topic groups, automatically joins each new topic and handles its first message without @. Regular groups are unaffected.","botDefaults.sectionSessionMode":"Session mode","botDefaults.p2pMode":"Private chat session mode","botDefaults.p2pThread":"thread (separate session per DM)","botDefaults.p2pChat":"chat (flat continuous session)","botDefaults.p2pHelp":"Private chat session mode: thread creates one session per top-level message; chat shares one continuous session. Applies immediately.","botDefaults.regularGroupMode":"Regular group session mode","botDefaults.regularGroupModeChat":"chat (flat continuous session, default)","botDefaults.regularGroupModeChatTopic":"chat-topic (flat continuous at top level, native topics each get their own session)","botDefaults.regularGroupModeNewTopic":"new-topic (each top-level @ opens its own topic & session)","botDefaults.regularGroupModeShared":"shared (topic display, reusing one session)","botDefaults.regularGroupModeHelp":"Regular group mode for top-level @mentions: chat = one continuous group session; chat-topic = native topics get separate sessions; new-topic = each @ opens a topic and session; shared = topic UI with shared session. Chat-level /reply-mode can override it.","botDefaults.mentionMode":"Group @ policy","botDefaults.mentionModeAlways":"Always require @ (default)","botDefaults.mentionModeTopic":"No @ needed inside topics","botDefaults.mentionModeNever":"Never require @","botDefaults.mentionModeAmbient":"No @ needed, but yields when you @ someone else","botDefaults.mentionModeHelp":"Controls whether group messages must @ the bot. Options allow @ only, topic follow-ups without @, all messages without @, or yielding when the message @mentions someone else. Private chats never require @.","botDefaults.docSubscribeMode":"Doc subscription trigger (default)","botDefaults.docSubscribeModeMention":"Only when a comment @s me","botDefaults.docSubscribeModeAll":"Every new comment","botDefaults.docSubscribeModeHelp":'After watching Feishu doc comments with /watch-comment, comments feed into the session and the bot replies back into their threads. This sets the default trigger range for new watches: "only when a comment @s me" is safest (avoids noise); "every new comment" suits dedicated docs.',"botDefaults.sectionSubstitute":"Substitute mode","botDefaults.substituteEnabled":"Enable substitute trigger","botDefaults.substituteHelp":"In regular groups, when a configured substitute target is @mentioned, this bot answers on their behalf. The sender still needs canTalk. Recommended with Oncall mode so group members can naturally @ the substitute target. Use /substitute off to disable it for a specific group.","botDefaults.substituteDisclosure":"Disclosure","botDefaults.substituteDisclosurePrefix":"Default: say I am answering for them","botDefaults.substituteDisclosureNone":"No extra disclosure","botDefaults.substituteTargetsPlaceholder":`alice@example.com
|
|
27
|
+
.botmux/skills`,"skills.globalDelivery":"Skill Delivery","skills.bots":"Bot Skill Settings","skills.botsHelp":"Choose priority Skills for each bot to disclose first.","skills.botCount":"{count} Bots","skills.skillCount":"{count} Skills","skills.attach":"Add to priority","skills.detach":"Remove","skills.detachNamed":"Remove {skill}","skills.delivery":"Injection","skills.deliveryAuto":"Auto","skills.deliveryAutoHelp":"Use native CLI delivery first; fall back to Prompt when unsupported","skills.deliveryPrompt":"Prompt","skills.deliveryPromptHelp":"Inject the Skill catalog into the session prompt; works with every CLI","skills.deliveryNative":"Native","skills.deliveryNativeHelp":"Use only the CLI native Skill mechanism; no Prompt fallback","skills.projectMode":"Workspace Skills","skills.projectDefault":"Follow global","skills.projectDefaultHelp":"Use the project default on the left","skills.projectOff":"Do not read","skills.projectOffHelp":"This bot ignores workspace skills","skills.projectAll":"Read","skills.projectAllHelp":"This bot includes workspace skill candidates","skills.priority":"Priority skills","skills.noPriority":"Not configured, keeping CLI default behavior","skills.pickerPlaceholder":"Select priority Skills","skills.pickerSelectedCount":"{count} Skills selected","skills.pickerTriggerHint":"Click to search or edit the selection","skills.pickerSearchPlaceholder":"Search Skill names or descriptions","skills.pickerSelectionMeta":"{selected} selected \xB7 {total} total","skills.pickerClear":"Clear","skills.pickerNoResults":"No matching Skills","skills.saveSelection":"Save selection","skills.cancel":"Cancel","skills.saving":"Saving\u2026","skills.policySaved":"Priority Skills saved","skills.dangling":"Not installed","skills.removeInUse":'Skill "{skill}" is still referenced by: {refs}. Removing it deletes the registry package but does not automatically clean references. Continue?',"skills.saved":"Saved","skills.failed":"Failed","skills.jobRunning":"Working...","skills.refresh":"Refresh","botDefaults.title":"Bot Config","botDefaults.metaOnline":"Online \xB7 daemon healthy","botDefaults.search":"Search bot name / app id","botDefaults.refresh":"Refresh","botDefaults.sectionOncall":"New-chat Oncall","botDefaults.sectionBrand":"Card Signature","botDefaults.renameTitle":"Rename bot","botDefaults.renameAction":"Rename","botDefaults.renameSave":"Save","botDefaults.renameCancel":"Cancel","botDefaults.renameEmpty":"Name cannot be empty","botDefaults.renaming":"Syncing to the Feishu open platform (rename + publish a new version, ~10s)\u2026","botDefaults.renameOkFeishu":"Feishu app renamed \u2014 the name in chats is live","botDefaults.renameLocalOnly":"Feishu-side rename failed ({reason}); only the dashboard display name was updated","botDefaults.renameWarn.no_session":"No Feishu web session on the server \u2014 run botmux setup there to scan the QR again","botDefaults.renameWarn.session_expired":"The Feishu web session expired \u2014 run botmux setup on the server to scan the QR again","botDefaults.renameWarn.no_access":"The cached Feishu account is not a collaborator of this app","botDefaults.renameWarn.unsupported_brand":"Auto-rename is not supported for international Lark tenants yet","botDefaults.renameFailed":"Rename failed: {error}","feishuLogin.entry":"Scan to log in to Feishu","feishuLogin.title":"Refresh Feishu login by QR","feishuLogin.starting":"Fetching QR code\u2026","feishuLogin.scanHint":"Scan with the Feishu app and confirm to authorize renaming (session stays on this server, shared with setup)","feishuLogin.success":"\u2713 Logged in \u2014 retrying the rename\u2026","feishuLogin.failed":"Login failed: {reason}","feishuLogin.retry":"Get a new QR code","feishuLogin.close":"Close","feishuLogin.qrAlt":"Feishu login QR code","botDefaults.sectionAgent":"Agent Config","botDefaults.agentCli":"CLI","botDefaults.agentMissingOption":"{label} (not installed: {command})","botDefaults.agentMissingHint":"{command} is not on the daemon PATH. New sessions cannot start until it is installed or the path is fixed.","botDefaults.agentModel":"Model","botDefaults.agentModelPlaceholder":"Leave empty for the CLI default model","botDefaults.agentHelp":"Affects new sessions only. Existing sessions keep their original CLI / model until closed and started again.","botDefaults.agentSave":"Save CLI / Model","botDefaults.skillInjection":"botmux skills injection","botDefaults.skillInjectionDynamic":"Dynamic (--plugin-dir, per session)","botDefaults.skillInjectionDynamicUnsupported":"Dynamic (not supported by this CLI)","botDefaults.skillInjectionPrompt":"prompt \u2014 into session prompt, no global dir","botDefaults.skillInjectionGlobal":"global \u2014 install into CLI global skills dir","botDefaults.skillInjectionOff":"off \u2014 only a botmux --help pointer","botDefaults.skillInjectionHelpDynamic":"This CLI supports --plugin-dir injection. Skills are session-scoped, not written to global directories, and need no extra setup.","botDefaults.skillInjectionHelp":"Choose how botmux skills are delivered: prompt is the default and injects them at session start without touching global dirs; global installs into the CLI global skills dir; off keeps only the botmux --help pointer. Applies next session; switching global requires a daemon restart.","botDefaults.agentSaved":"Saved (takes effect next session)","botDefaults.warning":"When enabled, chats without an oncall binding auto-bind to this directory on their next new topic. Manually bound or unbound chats are preserved.","botDefaults.empty":"No bots online. Run botmux restart first.","botDefaults.defaultOncall":"Default to oncall mode","botDefaults.defaultOncallHelp":"Unbound chats auto-bind on the next new topic","botDefaults.workingDir":"Default Working Directory","botDefaults.lastEnabled":"Last Enabled","botDefaults.autobound":"{count} chats auto-bound","botDefaults.save":"Save","botDefaults.required":'Working directory is required for "Default directory only" or "Oncall mode"',"botDefaults.sectionWorkingDir":"Default Working Directory","botDefaults.workingDirMode":"Mode","botDefaults.workingDirField":"Directory","botDefaults.workingDirModeOff":"Off (new sessions show the repo picker)","botDefaults.workingDirModeDefault":"Default directory only (no permission change)","botDefaults.workingDirModeOncall":"Oncall mode (open chat to the whole group)","botDefaults.workingDirModeHelp":"Sets where new sessions start: Off shows the repo picker; Default directory starts there without permission changes; Oncall adds automatic group chat access on top. Applies next session.","botDefaults.autoWorktree":"Auto-create a worktree per new session","botDefaults.autoWorktreeHelp":"Only for Default directory mode. Creates an isolated git worktree per new session to avoid collisions; falls back to the default dir on failure. /close does not remove worktrees.","botDefaults.workingDirSaved":"Saved (takes effect next session)","botDefaults.brandLabel":"Signature (card footer)","botDefaults.brandLabelHelp":"Footer signature for cards sent by this bot. Empty hides it; custom text supports Markdown; reset shows botmux.","botDefaults.brandLabelPlaceholder":"Default: botmux (empty = hidden)","botDefaults.sectionSandbox":"File sandbox (oncall)","botDefaults.sandboxToggle":"Enable file sandbox","botDefaults.sandboxHelp":"When on, every session of this bot runs in a sandbox: the agent works normally inside the project dir, but cannot touch your real files, secrets, or other sessions outside it \u2014 writes outside the project are isolated/blocked. For sharing the bot with semi-trusted users (oncall). Linux uses bwrap, macOS uses Seatbelt; same protection on both. Applies to the next new session.","botDefaults.sandboxSaved":"Saved (applies to the next new session)","botDefaults.sandboxReadIsoOn":"Read isolation: this bot's sandboxed sessions also can't read other bots' credentials (bots.json), sessions, or chat content (macOS \xB7 Linux, claude/codex).","botDefaults.sandboxReadIsoOff":"This bot's sandbox is write-protection only; the extra cross-bot read isolation needs claude-code / codex on macOS/Linux (and no wrapper gateway).","botDefaults.readIsolationToggle":"Enable read isolation (macOS)","botDefaults.readIsolationHelp":"When on, this bot's sessions run in a macOS sandbox (Seatbelt): reads of other bots' credentials (bots.json), sessions, and chat content are denied, while its own messages and uploaded files/whiteboards stay accessible. The macOS counterpart of the file sandbox above. Applies to the next new session.","botDefaults.readIsolationSaved":"Saved (applies to the next new session)","botDefaults.readIsolationSavedRestarted":"Saved; restarted {count} of this bot's sessions (cold-restarts on next message; switching isolation mode changes the data root, so their conversation context resets to a fresh session)","botDefaults.readIsolationUnsupported":"(read isolation cannot be enabled for this bot: needs macOS + a supporting CLI (claude-code / codex) + no wrapper gateway)","botDefaults.readIsolationStaleOn":"(enabled, but it can't be enforced here \u2014 sessions will fail-close; turn it off to recover)","botDefaults.sectionBackend":"Session backend","botDefaults.backendLabel":"Backend type","botDefaults.backendHelp":`The session backend for this bot's new sessions. Changes apply live to new sessions; running sessions keep the backend they started on and are unaffected. tmux supports adopt / Web Terminal; herdr manages persistent sessions; zellij is experimental; pty is lightest but does not survive daemon restarts. "Auto" follows the global default.`,"botDefaults.backendAuto":"Auto (follow global default)","botDefaults.backendTmux":"tmux","botDefaults.backendHerdr":"herdr","botDefaults.backendZellij":"zellij","botDefaults.backendPty":"pty","botDefaults.backendSaved":"Saved (applies to the next new session)","botDefaults.brandSave":"Save Signature","botDefaults.brandReset":"Reset to default","botDefaults.brandStateDefault":"Current: default botmux","botDefaults.brandStateOff":"Current: off","botDefaults.brandStateCustom":"Current: custom","botDefaults.sectionCard":"Card Behavior","botDefaults.disableStreaming":"Disable streaming card","botDefaults.disableStreamingHelp":"Disables the live session card and Web Terminal entry. Final results are still sent as messages.","botDefaults.silentTurnReactions":"Disable status reactions in card-off mode","botDefaults.silentTurnReactionsHelp":"When streaming cards are off, botmux can mark received/done with reactions. Enable this to suppress those reactions too.","botDefaults.writableLink":"Put a writable terminal link on the card","botDefaults.writableLinkHelp":"Shows a writable terminal link in the streaming card. Anyone in the chat can operate it, so use only in trusted groups.","botDefaults.writableLinkMoot":"Streaming card disabled \u2014 this has no effect","botDefaults.privateCard":"/card sends a private card (authorized users only)","botDefaults.privateCardHelp":"/card is visible only to owner/allowedUsers. It is a static snapshot, works only in regular groups, and does not affect automatic streaming cards.","botDefaults.sectionCodexAppDisplay":"Codex App History Display","botDefaults.codexAppCleanInput":"Show clean User Messages (experimental)","botDefaults.codexAppCleanInputHelp":"Only changes User Messages and history written to Codex App from the next turn onward: Botmux XML, routing, and system context still reach the model, but move to hidden context. It does not change the Lark conversation or rewrite existing history.","botDefaults.codexAppCleanInputCompat":"Off by default to preserve legacy compatibility. When enabled, it applies from the next turn.","botDefaults.sectionCrossBot":"Cross-bot","botDefaults.botToBotSameDir":"bot@bot same-directory launch","botDefaults.botToBotSameDirHelp":"On by default. When this bot is @-ed into a chat where another bot is already working, reuse that bot's directory and skip repo selection. Off uses this bot's own directory rules.","botDefaults.cardPrefSaved":"Saved","botDefaults.sectionSummaryTrigger":"/summary Range","botDefaults.summaryLimit":"Recent message count","botDefaults.summarySinceHours":"Recent hours","botDefaults.summaryLimitHelp":"History range read by /summary. Default is latest 50 messages or 24 hours; set either value to 0 to remove that limit. Topic groups read only the current topic.","botDefaults.summarySave":"Save summary range","botDefaults.summaryNumberInvalid":"Hours and message count must be 0 or a positive integer","botDefaults.sectionRole":"Default Role","botDefaults.roleHelp":"Default role injected into this bot's sessions. Individual chats can override it in Role Management. Saving empty deletes it.","botDefaults.rolePlaceholder":"e.g. You are a backend triage assistant; answer concisely, prefer runnable commands\u2026","botDefaults.roleSave":"Save role","botDefaults.roleSaved":"Saved","botDefaults.roleDeleted":"Deleted","botDefaults.roleLoadErr":"Failed to load role","botDefaults.profileRoles":"Profile Roles","botDefaults.profileRolesHelp":"Role entries for this bot in Profiles. Expand a profile to load details.","botDefaults.profileRolesEmpty":"This bot has no profile roles.","botDefaults.profileRolesLoadFailed":"Failed to load profile roles: {error}","botDefaults.profileRoleClickToLoad":"Expand to load role details.","botDefaults.profileRoleDetailLoadFailed":"Failed to load role detail: {error}","botDefaults.sectionAutoStart":"Proactive Start","botDefaults.autoStartJoin":"Auto-start when added to a new chat","botDefaults.autoStartJoinHelp":"Starts a session when the bot joins a new chat that contains an authorized user, without requiring @. Uses the default directory or shows repo selection. Requires the bot-joined event and member-read scope.","botDefaults.autoStartJoinPrompt":"First-turn prompt on join (optional)","botDefaults.autoStartJoinPromptPlaceholder":"Filled = used as the first task after joining; blank = the bot reads the chat and decides what to do","botDefaults.autoStartJoinPromptSave":"Save prompt","botDefaults.autoStartTopic":"Auto-start on new topics in topic groups","botDefaults.autoStartTopicHelp":"In topic groups, automatically joins each new topic and handles its first message without @. Regular groups are unaffected.","botDefaults.sectionSessionMode":"Session mode","botDefaults.p2pMode":"Private chat session mode","botDefaults.p2pThread":"thread (separate session per DM)","botDefaults.p2pChat":"chat (flat continuous session)","botDefaults.p2pHelp":"Private chat session mode: thread creates one session per top-level message; chat shares one continuous session. Applies immediately.","botDefaults.regularGroupMode":"Regular group session mode","botDefaults.regularGroupModeChat":"chat (flat continuous session, default)","botDefaults.regularGroupModeChatTopic":"chat-topic (flat continuous at top level, native topics each get their own session)","botDefaults.regularGroupModeNewTopic":"new-topic (each top-level @ opens its own topic & session)","botDefaults.regularGroupModeShared":"shared (topic display, reusing one session)","botDefaults.regularGroupModeHelp":"Regular group mode for top-level @mentions: chat = one continuous group session; chat-topic = native topics get separate sessions; new-topic = each @ opens a topic and session; shared = topic UI with shared session. Chat-level /reply-mode can override it.","botDefaults.mentionMode":"Group @ policy","botDefaults.mentionModeAlways":"Always require @ (default)","botDefaults.mentionModeTopic":"No @ needed inside topics","botDefaults.mentionModeNever":"Never require @","botDefaults.mentionModeAmbient":"No @ needed, but yields when you @ someone else","botDefaults.mentionModeHelp":"Controls whether group messages must @ the bot. Options allow @ only, topic follow-ups without @, all messages without @, or yielding when the message @mentions someone else. Private chats never require @.","botDefaults.docSubscribeMode":"Doc subscription trigger (default)","botDefaults.docSubscribeModeMention":"Only when a comment @s me","botDefaults.docSubscribeModeAll":"Every new comment","botDefaults.docSubscribeModeHelp":'After watching Feishu doc comments with /watch-comment, comments feed into the session and the bot replies back into their threads. This sets the default trigger range for new watches: "only when a comment @s me" is safest (avoids noise); "every new comment" suits dedicated docs.',"botDefaults.sectionSubstitute":"Substitute mode","botDefaults.substituteEnabled":"Enable substitute trigger","botDefaults.substituteHelp":"In regular groups, when a configured substitute target is @mentioned, this bot answers on their behalf. The sender still needs canTalk. Recommended with Oncall mode so group members can naturally @ the substitute target. Use /substitute off to disable it for a specific group.","botDefaults.substituteDisclosure":"Disclosure","botDefaults.substituteDisclosurePrefix":"Default: say I am answering for them","botDefaults.substituteDisclosureNone":"No extra disclosure","botDefaults.substituteTargetsPlaceholder":`alice@example.com
|
|
28
28
|
ou_xxxx (open_id / union_id also accepted)`,"botDefaults.substituteTargets":"Substitute targets","botDefaults.substituteTargetsHelp":"Each row is one substitute target. Enter an email to resolve it to an Open ID on save, or select Open ID, User ID, or Union ID. Emails that cannot be resolved are flagged.","botDefaults.substituteTargetType":"Identifier type","botDefaults.substituteTargetEmail":"Email","botDefaults.substituteTargetOpenId":"Open ID","botDefaults.substituteTargetUserId":"User ID","botDefaults.substituteTargetUnionId":"Union ID","botDefaults.substituteTargetIdPlaceholder":"Enter a Lark user identifier or email","botDefaults.substituteTargetName":"Display name","botDefaults.substituteTargetNamePlaceholder":"Display name (optional)","botDefaults.substituteTargetAdd":"Add substitute target","botDefaults.substituteTargetRemove":"Remove substitute target","botDefaults.substituteTargetsInvalid":"Add at least one valid substitute target before enabling; emails must resolve to an Open ID","botDefaults.substituteTargetsRequired":"Enabling the substitute trigger needs at least one target that resolves to an open_id","botDefaults.substituteResolving":"Resolving\u2026","botDefaults.substituteUnresolved":"unresolved","botDefaults.substituteSave":"Save substitute mode","botDefaults.substituteOff":"Turn off global substitute config","botDefaults.sectionGrant":"Authorization & Quota","botDefaults.autoGrantCard":"Auto grant card for blocked @mentions","botDefaults.autoGrantCardHelp":"When an unauthorized user or external bot @mentions this bot, send a /grant request card to the owner. Off still blocks, but silently.","botDefaults.restrictGrant":"Restrict grantees to plain conversation","botDefaults.restrictGrantHelp":"Restricts /grant users to plain conversation. Botmux commands, passthrough commands, CLI-native commands, and workflow commands are blocked; the owner is exempt.","botDefaults.quotaDefault":"Default message quota","botDefaults.quotaPlaceholder":"Empty = no default quota","botDefaults.quotaHelp":"Default quota for bare /grant @user. Saving empty stops assigning a default; existing quotas and explicit /grant @user N are unchanged. Authorization is revoked when quota runs out.","botDefaults.quotaSave":"Save quota","botDefaults.quotaInvalid":"Quota must be a positive integer","botDefaults.quotaStateOff":"Current: no default quota","botDefaults.quotaStateOn":"Current: {count} per grantee","botDefaults.sectionSessionCap":"Resident session limit","botDefaults.maxLiveWorkers":"Max resident sessions","botDefaults.maxLiveWorkersPlaceholder":"Empty = default 30","botDefaults.maxLiveWorkersUsage":"Resident {resident}/{cap} \xB7 dormant {dormant} \xB7 total {logical}","botDefaults.maxLiveWorkersHelp":"Maximum sessions this bot keeps resident in memory. Beyond it, the least-recently-used session is suspended: its background process and CLI exit to reclaim memory, while the conversation remains resumable. The next message cold-restores context from disk, usually within a few seconds. Empty = default 30; enter a number for a per-bot override. A session producing an answer is never interrupted; adopted external terminals and non-resumable sessions are exempt.","botDefaults.maxLiveWorkersSave":"Save limit","botDefaults.maxLiveWorkersOff":"Reset to default","botDefaults.maxLiveWorkersInvalid":"Limit must be a positive integer","botDefaults.maxLiveWorkersStateDefault":"Current: 30 resident sessions by default","botDefaults.maxLiveWorkersStateOn":"Current: up to {count} resident sessions","botDefaults.sectionRuntimeEnv":"Startup environment","botDefaults.sectionStartupCommands":"Startup commands","botDefaults.startupCommandsHelp":"CLI commands sent automatically after launch and before the first message. Use commas or new lines; replayed on every new or resumed session. Native CLI sessions only.","botDefaults.startupCommandsPlaceholder":"One per line, e.g. /effort ultracode","botDefaults.startupCommandsSave":"Save startup commands","botDefaults.sectionLaunchShell":"Launch shell","botDefaults.launchShellHelp":"Shell used to launch the CLI, such as zsh or /usr/bin/zsh, overriding the daemon $SHELL. Use it to avoid login-shell rc redirection issues; PATH must still be available in that shell. Applies next session.","botDefaults.launchShellPlaceholder":"e.g. zsh or /usr/bin/zsh; empty = $SHELL","botDefaults.launchShellSave":"Save launch shell","botDefaults.sectionEnv":"Environment variables","botDefaults.envHelp":"JSON environment variables injected into this bot's CLI process. Values may be string, number, or boolean; reserved BOTMUX_ / LARK_APP_ keys are ignored. Applies next session and is stored in plaintext in bots.json.","botDefaults.envPlaceholder":`{
|
|
29
29
|
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
|
|
30
30
|
"ANTHROPIC_AUTH_TOKEN": "your GLM Coding Plan key"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as c,d as r,y as i}from"./chunk-
|
|
1
|
+
import{C as c,d as r,y as i}from"./chunk-PNK3HQBI.js";var l={chats:[],bots:[]};async function A(){try{l=await r()}catch{}}var u=new Set(["working","analyzing","active","starting"]);function m(d){let s=new Map,e=t=>{let o=s.get(t);return o||(o={botName:t,larkAppId:t,cliId:"unknown",online:!1,sessions:[],active:[],busy:[],attention:[],lastActiveAt:0},s.set(t,o)),o};for(let t of l.bots??[]){let o=e(t.larkAppId??t.botName??"-");o.online=!0,t.botName&&(o.botName=t.botName),t.botAvatarUrl&&(o.botAvatarUrl=t.botAvatarUrl),t.cliId&&(o.cliId=t.cliId)}let p=[...d].sort((t,o)=>+(t.status==="closed")-+(o.status==="closed"));for(let t of p){let o=t.larkAppId??t.botName??"-";if(t.status==="closed"&&!s.has(o))continue;let a=e(o);t.botName&&(a.botName===a.larkAppId||!a.botName)&&(a.botName=t.botName),a.sessions.push(t),t.cliId&&a.cliId==="unknown"&&(a.cliId=t.cliId),a.lastActiveAt=Math.max(a.lastActiveAt,Number(t.lastMessageAt??0)),t.status!=="closed"&&(a.active.push(t),u.has(t.status)&&a.busy.push(t),c(t)&&a.attention.push(t))}for(let t of s.values())if(t.botName===t.larkAppId){let o=i(t.larkAppId);o&&(t.botName=o)}return[...s.values()].sort((t,o)=>{let a=n=>n.attention.length?0:n.busy.length?1:n.online||n.active.length?2:3;return a(t)!==a(o)?a(t)-a(o):o.lastActiveAt-t.lastActiveAt})}export{A as a,m as b};
|
package/dist/dashboard-web/chunks/{connectors-page-N6GKR6JL.js → connectors-page-UQ4QBE45.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as H,b as Q}from"./chunk-EVK77ASG.js";import{b as W}from"./chunk-TORH53FI.js";import{a as le,c as ce,g as Ie,k as P,p as ie}from"./chunk-SRIE4MLQ.js";import"./chunk-7UY333A5.js";import{a as re}from"./chunk-SYC6D5XU.js";import{a as Ne,d as se}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var c=K(Ne(),1);var b=K(Ne(),1);var n=K(se(),1),De=50,we={total:0,ok:0,error:0,successRate:0};function Re(t,e=Date.now()){if(t==="all")return;let r=t==="24h"?24:t==="7d"?168:720;return new Date(e-r*60*60*1e3).toISOString()}function $e(t,e=0){let r=new URLSearchParams({limit:String(De),offset:String(e)});t.connectorId&&r.set("connectorId",t.connectorId),t.status&&r.set("status",t.status);let m=Re(t.timeWindow);return m&&r.set("since",m),t.query.trim()&&r.set("q",t.query.trim()),r}function Le(t){if(!t)return"\u2014";let e=new Date(t);return Number.isFinite(e.getTime())?e.toLocaleString():t}function de(t){return t===void 0||!Number.isFinite(t)?"\u2014":t<1e3?`${Math.round(t)} ms`:t<6e4?`${(t/1e3).toFixed(t<1e4?1:0)} s`:`${(t/6e4).toFixed(1)} min`}function Oe(t){return t===void 0?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}function ke(t){return t.value===void 0||t.value===null?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):typeof t.value=="object"&&!Array.isArray(t.value)&&Object.keys(t.value).length===0?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):(0,n.jsx)("pre",{className:`webhook-log-json${t.fullHeight?" full-height":""}`,children:(0,n.jsx)("code",{children:JSON.stringify(t.value,null,2)})})}function Ae(t){let e=[["kind",t.value?.kind],["mode",t.value?.mode],["botId",t.value?.botId],["chatId",t.value?.chatId],["sessionId",t.value?.sessionId],["rootMessageId",t.value?.rootMessageId],["workflowId",t.value?.workflowId]].filter(([,r])=>r!=null&&r!=="");return e.length?(0,n.jsx)("dl",{className:"webhook-log-target-facts",children:e.map(([r,m])=>(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:r}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:String(m)})})]},r))}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:"\u2014"})}function ve(t){return(0,n.jsx)(ie,{id:t.id,className:"webhook-log-filter-menu",ariaLabel:t.label,style:{width:"100%",minWidth:0},value:t.value,label:le(t.options,t.value),options:t.options,onChange:t.onChange})}function ue(t){return(0,n.jsxs)("article",{className:`card webhook-log-metric${t.tone?` ${t.tone}`:""}`,children:[(0,n.jsx)("span",{children:t.label}),(0,n.jsx)("strong",{children:t.value}),(0,n.jsx)("small",{children:t.hint||"\xA0"})]})}function Te(t={}){let e=W(),r=(0,b.useRef)(!1),m=(0,b.useRef)([]),[k,N]=(0,b.useState)([]),[p,I]=(0,b.useState)([]),[f,D]=(0,b.useState)(we),[v,$]=(0,b.useState)({connectorId:"",status:"",timeWindow:"7d",query:""}),[d,s]=(0,b.useState)(null),[M,_]=(0,b.useState)(!0),[C,U]=(0,b.useState)(!1),[q,J]=(0,b.useState)(!1),[V,Y]=(0,b.useState)(0),[B,T]=(0,b.useState)(""),[X,Z]=(0,b.useState)(!1),L=(0,b.useMemo)(()=>new Map(k.map(l=>[l.id,l.name])),[k]),u=(0,b.useMemo)(()=>p.find(l=>l.triggerId===d)??p[0]??null,[p,d]),ee=(0,b.useMemo)(()=>[{value:"",label:e("webhookLogs.allConnectors")},...k.map(l=>({value:l.id,label:l.name}))],[k,e]),G=(0,b.useMemo)(()=>[{value:"",label:e("webhookLogs.allStatuses")},{value:"ok",label:e("webhookLogs.success")},{value:"error",label:e("webhookLogs.failed")}],[e]),be=(0,b.useMemo)(()=>[{value:"24h",label:e("webhookLogs.last24h")},{value:"7d",label:e("webhookLogs.last7d")},{value:"30d",label:e("webhookLogs.last30d")},{value:"all",label:e("webhookLogs.allTime")}],[e]),O=(0,b.useCallback)(async(l=!1,w=!1)=>{w?U(!0):_(!0),T("");let z=l?m.current.length:0,oe=$e(v,z),y=new URLSearchParams(oe);y.delete("limit"),y.delete("offset");try{let[x,te]=await Promise.all([H(`/api/trigger-logs?${oe}`),l?Promise.resolve(null):H(`/api/trigger-logs/summary?${y}`)]);if(!r.current)return;if(x.status!==200)throw new Error(String(x.body?.error||x.status));let S=Array.isArray(x.body?.logs)?x.body.logs:[],ne=l?[...m.current,...S]:S;m.current=ne,I(ne),Y(Number(x.body?.total??S.length)),J(x.body?.hasMore===!0),l||(D(te?.status===200?te.body?.summary??we:we),s(ae=>S.some(fe=>fe.triggerId===ae)?ae:S[0]?.triggerId??null))}catch(x){r.current&&T(x?.message||e("webhookLogs.loadFailed"))}finally{r.current&&(_(!1),U(!1))}},[v,e]);(0,b.useEffect)(()=>(r.current=!0,H("/api/connectors").then(l=>{r.current&&l.status===200&&N(Array.isArray(l.body?.connectors)?l.body.connectors:[])}),()=>{r.current=!1}),[]),(0,b.useEffect)(()=>{let l=setTimeout(()=>{O(!1)},v.query?260:0);return()=>clearTimeout(l)},[v,O]),(0,b.useEffect)(()=>{let l=setInterval(()=>{O(!1,!0)},15e3);return()=>clearInterval(l)},[O]);async function he(){u&&(await navigator.clipboard?.writeText(JSON.stringify(u,null,2)),Z(!0),setTimeout(()=>r.current&&Z(!1),1200))}let pe=u?.request?.payloadOmittedReason==="disabled"?e("webhookLogs.payloadDisabled"):u?.request?.payloadOmittedReason==="too_large"?e("webhookLogs.payloadTooLarge"):e("webhookLogs.payloadUnavailable"),j=(0,n.jsxs)(n.Fragment,{children:[t.embedded?null:(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,n.jsx)("h1",{children:e("nav.webhookLogs")}),(0,n.jsx)("p",{className:"webhook-log-heading-copy",children:e("webhookLogs.subtitle")})]}),(0,n.jsxs)("div",{className:"page-heading-actions",children:[(0,n.jsxs)("span",{className:`webhook-log-live${C?" refreshing":""}`,children:[(0,n.jsx)("i",{}),e("webhookLogs.autoRefresh")]}),(0,n.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})]})]}),(0,n.jsxs)("section",{className:"webhook-log-metrics","aria-label":e("webhookLogs.summary"),children:[(0,n.jsx)(ue,{label:e("webhookLogs.total"),value:f.total,hint:e("webhookLogs.filteredRange")}),(0,n.jsx)(ue,{label:e("webhookLogs.successRate"),value:`${f.successRate.toFixed(f.successRate%1?1:0)}%`,tone:"ok",hint:`${f.ok} ${e("webhookLogs.calls")}`}),(0,n.jsx)(ue,{label:e("webhookLogs.failures"),value:f.error,tone:f.error?"error":void 0,hint:f.error?e("webhookLogs.needsReview"):e("webhookLogs.noFailures")}),(0,n.jsx)(ue,{label:e("webhookLogs.p95"),value:de(f.p95DurationMs),hint:`${e("webhookLogs.average")} ${de(f.avgDurationMs)}`})]}),(0,n.jsxs)("form",{className:"filters dashboard-toolbar webhook-log-toolbar",onSubmit:l=>l.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q","aria-label":e("webhookLogs.search"),placeholder:e("webhookLogs.searchPlaceholder"),value:v.query,onChange:l=>{let w=l.currentTarget.value;$(z=>({...z,query:w}))}}),(0,n.jsx)(ve,{id:"webhook-log-connector",label:e("webhookLogs.connector"),value:v.connectorId,options:ee,onChange:l=>$(w=>({...w,connectorId:l}))}),(0,n.jsx)(ve,{id:"webhook-log-status",label:e("webhookLogs.status"),value:v.status,options:G,onChange:l=>$(w=>({...w,status:l}))}),(0,n.jsx)(ve,{id:"webhook-log-window",label:e("webhookLogs.timeRange"),value:v.timeWindow,options:be,onChange:l=>$(w=>({...w,timeWindow:l}))}),(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-refresh",disabled:C,onClick:()=>{O(!1,!0)},children:e("webhookLogs.refresh")})]}),B?(0,n.jsxs)("p",{className:"err webhook-log-error",children:[e("webhookLogs.loadFailed"),": ",B]}):null,(0,n.jsxs)("section",{className:"webhook-log-workspace",children:[(0,n.jsxs)("article",{className:"card webhook-log-list-panel",children:[(0,n.jsx)("header",{className:"webhook-log-panel-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e("webhookLogs.records")}),(0,n.jsx)("span",{children:e("webhookLogs.matching",{count:V})})]})}),M&&!p.length?(0,n.jsx)(ce,{label:e("webhookLogs.loading"),compact:!0}):null,!M&&!p.length?(0,n.jsxs)("div",{className:"webhook-log-empty",children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"\u25CE"}),(0,n.jsx)("strong",{children:e("webhookLogs.empty")}),(0,n.jsx)("p",{children:e("webhookLogs.emptyHint")})]}):null,(0,n.jsx)("div",{className:"webhook-log-list",role:"listbox","aria-label":e("webhookLogs.records"),children:p.map(l=>{let w=u?.triggerId===l.triggerId;return(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":w,className:`webhook-log-row${w?" active":""}`,onClick:()=>s(l.triggerId),children:[(0,n.jsx)("span",{className:`webhook-log-status-dot ${l.status}`,"aria-hidden":"true"}),(0,n.jsxs)("span",{className:"webhook-log-row-main",children:[(0,n.jsxs)("span",{className:"webhook-log-row-title",children:[(0,n.jsx)("strong",{children:L.get(l.connectorId||"")||l.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsx)("code",{children:l.request?.method||"POST"})]}),(0,n.jsxs)("span",{className:"webhook-log-row-meta",children:[(0,n.jsx)("span",{children:Le(l.createdAt)}),(0,n.jsx)("span",{children:l.errorCode||l.action})]})]}),(0,n.jsxs)("span",{className:"webhook-log-row-result",children:[(0,n.jsx)("b",{className:l.status,children:l.response?.httpStatus??(l.status==="ok"?"2xx":"ERR")}),(0,n.jsx)("small",{children:de(l.response?.durationMs)})]})]},`${l.triggerId}-${l.createdAt}`)})}),q?(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-more",disabled:M,onClick:()=>{O(!0)},children:e("webhookLogs.loadMore")}):null]}),(0,n.jsx)("article",{className:"card webhook-log-detail-panel",children:u?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"webhook-log-detail-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:`webhook-log-result-pill ${u.status}`,children:u.status==="ok"?e("webhookLogs.success"):e("webhookLogs.failed")}),(0,n.jsx)("h2",{children:L.get(u.connectorId||"")||u.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsxs)("p",{children:[Le(u.createdAt)," \xB7 ",u.request?.method||"POST"," ",u.request?.path||"/webhook/\u2026"]})]}),(0,n.jsx)("button",{type:"button",className:"ghost",onClick:()=>{he()},children:e(X?"webhookLogs.copied":"webhookLogs.copyJson")})]}),u.error?(0,n.jsxs)("div",{className:"webhook-log-failure",children:[(0,n.jsx)("strong",{children:u.errorCode||e("webhookLogs.failureReason")}),(0,n.jsx)("span",{children:u.error})]}):null,(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.overview")}),(0,n.jsxs)("dl",{className:"webhook-log-facts",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.httpStatus")}),(0,n.jsx)("dd",{children:u.response?.httpStatus??"\u2014"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.duration")}),(0,n.jsx)("dd",{children:de(u.response?.durationMs)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.action")}),(0,n.jsx)("dd",{children:u.action})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.bodySize")}),(0,n.jsx)("dd",{children:Oe(u.request?.bodyBytes)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Trigger ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.triggerId})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Request ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.requestId||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.remoteAddress")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.request?.remoteAddress||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.target")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.target?.chatId||u.target?.sessionId||u.response?.chatId||"\u2014"})})]})]})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.queryParams")}),(0,n.jsx)(ke,{value:u.request?.query,empty:e("webhookLogs.none")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.headers"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),(0,n.jsx)(ke,{value:u.request?.headers,empty:e("webhookLogs.headersNotStored")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.payload"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),u.request?.payloadStored?(0,n.jsx)(ke,{value:u.request.payload,empty:e("webhookLogs.none")}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:pe})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.routeTarget")}),(0,n.jsx)(Ae,{value:u.target})]})]}):(0,n.jsx)("div",{className:"webhook-log-empty",children:(0,n.jsx)("strong",{children:e("webhookLogs.selectRecord")})})})]})]});return t.embedded?(0,n.jsx)("section",{className:"webhook-logs-content webhook-logs-panel",children:j}):(0,n.jsx)("section",{className:"page webhook-logs-content webhook-logs-page",children:j})}var o=K(se(),1);function He(t,e){return t.map(r=>r.id===e.id?e:r)}var Pe={name:"",botId:"",kind:"turn",workflowId:"",mode:"dynamic",chatId:"",manualChat:!1,manualChatId:"",allowChats:[],deduplicate:!1,dedup:"",instruction:"",verify:"token",secret:"",storePayload:!0};function Ze(t,e){return{promptEnvelope:{sourceName:t.promptEnvelope?.sourceName||t.name,instruction:e}}}function Ce(t){return`${location.origin}/webhook/${encodeURIComponent(t)}`}function ge(t){return(0,o.jsx)(ie,{id:t.id,className:"connector-form-menu",ariaLabel:t.label,value:t.value,label:le(t.options,t.value),options:t.options,onChange:t.onChange})}function Se(t){let e=(0,c.useRef)(null),[r,m]=(0,c.useState)(!1),[k,N]=(0,c.useState)(""),p=Array.isArray(t.value)?t.value:t.value?[t.value]:[],I=(0,c.useMemo)(()=>new Set(p),[p]),f=k.trim().toLocaleLowerCase(),D=(0,c.useMemo)(()=>f?t.groups.filter(d=>`${d.name} ${d.chatId}`.toLocaleLowerCase().includes(f)):t.groups,[f,t.groups]),v=t.multiple?p.length===0?t.allLabel||t.placeholder:t.selectedCountLabel(p.length):t.groups.find(d=>d.chatId===p[0])?.name||p[0]||t.placeholder;(0,c.useEffect)(()=>{if(!r)return;let d=s=>{e.current?.contains(s.target)||m(!1)};return document.addEventListener("pointerdown",d),()=>document.removeEventListener("pointerdown",d)},[r]);function $(d){if(!t.multiple){t.onChange(d),m(!1),N("");return}t.onChange(I.has(d)?p.filter(s=>s!==d):[...p,d])}return(0,o.jsxs)("div",{ref:e,className:`connector-group-picker${r?" open":""}`,children:[(0,o.jsxs)("button",{id:t.id,type:"button",className:"connector-group-picker-trigger","aria-label":t.label,"aria-haspopup":"listbox","aria-expanded":r,onClick:()=>m(d=>!d),children:[(0,o.jsx)("span",{className:p.length||t.multiple&&t.allLabel?"":"muted",children:v}),(0,o.jsx)("span",{className:"connector-group-picker-chevron","aria-hidden":"true"})]}),r?(0,o.jsxs)("div",{className:"connector-group-picker-popover",children:[(0,o.jsxs)("label",{className:"connector-group-search",htmlFor:`${t.id}-search`,children:[(0,o.jsx)("span",{className:"connector-group-search-icon","aria-hidden":"true"}),(0,o.jsx)("input",{id:`${t.id}-search`,type:"search",autoComplete:"off",autoFocus:!0,value:k,placeholder:t.searchPlaceholder,onChange:d=>N(d.currentTarget.value),onKeyDown:d=>{d.key==="Escape"&&(d.preventDefault(),m(!1))}})]}),(0,o.jsxs)("div",{className:"connector-group-options",role:"listbox","aria-label":t.label,"aria-multiselectable":t.multiple||void 0,children:[t.multiple&&t.allLabel&&!f?(0,o.jsxs)("button",{type:"button",className:`connector-group-option connector-group-option-all${p.length===0?" selected":""}`,role:"option","aria-selected":p.length===0,onClick:()=>t.onChange([]),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:t.allLabel}),(0,o.jsx)("small",{children:t.placeholder})]})]}):null,D.map(d=>{let s=I.has(d.chatId);return(0,o.jsxs)("button",{type:"button",className:`connector-group-option${s?" selected":""}`,role:"option","aria-selected":s,onClick:()=>$(d.chatId),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:d.name||d.chatId}),d.name?(0,o.jsx)("small",{children:d.chatId}):null]})]},d.chatId)}),D.length?null:(0,o.jsx)("p",{className:"connector-group-empty",children:t.emptyLabel})]})]}):null]})}function me(t,e){return t.filter(r=>r.bots.includes(e))}function qe(t,e){let r=t.target.chatId||"",m=r&&me(e,t.target.botId).some(k=>k.chatId===r);return{name:t.name,botId:t.target.botId,kind:t.target.kind,workflowId:t.target.workflowId||"",mode:t.target.mode,chatId:m?r:"",manualChat:!!(r&&!m),manualChatId:m?"":r,allowChats:t.target.allowChats||[],deduplicate:!!t.lifecycleExtractors?.dedupKey,dedup:t.lifecycleExtractors?.dedupKey||"",instruction:t.promptEnvelope?.instruction||"",verify:t.verify?.type||"token",secret:"",storePayload:t.loggingPolicy?.storePayload!==!1}}function Be(t){let e=W(),r=t.active==="webhooks",m=t.active==="logs";return(0,o.jsxs)("nav",{className:"connectors-subnav-slot connectors-subnav insight-tabs",role:"tablist","aria-label":e("nav.connectors"),children:[(0,o.jsx)("a",{href:"#/connectors",className:`itab${r?" on":""}`,role:"tab","aria-selected":r,children:e("connectors.tabWebhooks")}),(0,o.jsx)("a",{href:"#/connectors/logs",className:`itab${m?" on":""}`,role:"tab","aria-selected":m,children:e("connectors.tabLogs")})]})}function xe(t){let e=W(),r=(0,c.useRef)(!1),m=(0,c.useRef)(null),k=(0,c.useRef)(null),[N,p]=(0,c.useState)([]),[I,f]=(0,c.useState)([]),[D,v]=(0,c.useState)([]),[$,d]=(0,c.useState)(!0),[s,M]=(0,c.useState)(Pe),[_,C]=(0,c.useState)(null),[U,q]=(0,c.useState)(null),[J,V]=(0,c.useState)(!1),[Y,B]=(0,c.useState)(!1),[T,X]=(0,c.useState)(null),[Z,L]=(0,c.useState)(null),[u,ee]=(0,c.useState)(null),G=(0,c.useMemo)(()=>me(I,s.botId),[I,s.botId]),be=(0,c.useMemo)(()=>N.length?N.map(a=>({value:a.larkAppId,label:a.botName})):[{value:"",label:e("connectors.noOnlineBots")}],[N,e]),O=(0,c.useMemo)(()=>[{value:"turn",label:e("connectors.kindTurn")},{value:"workflow",label:e("connectors.kindWorkflow")}],[e]),he=(0,c.useMemo)(()=>[{value:"dynamic",label:e("connectors.modeDynamic")},{value:"fixed",label:e("connectors.modeFixed")},{value:"new-group",label:e("connectors.modeNewGroup")}],[e]),pe=(0,c.useMemo)(()=>[{value:"token",label:e("connectors.verifyToken")},{value:"hmac-sha256",label:e("connectors.verifyHmac")}],[e]),j=(0,c.useCallback)(a=>I.find(g=>g.chatId===a)?.name||a,[I]),l=(0,c.useCallback)((a,i)=>{M(g=>{let h=g.botId&&a.some(R=>R.larkAppId===g.botId)?g.botId:a[0]?.larkAppId??"",E=me(i,h),F=g.chatId&&E.some(R=>R.chatId===g.chatId)?g.chatId:E[0]?.chatId??"",A=new Set(E.map(R=>R.chatId));return{...g,botId:h,chatId:F,allowChats:g.allowChats.filter(R=>A.has(R))}})},[]),w=(0,c.useCallback)(async()=>{d(!0);try{let[a,i,g]=await Promise.all([H("/api/bots"),H("/api/connectors"),H("/api/groups")]);if(!r.current)return;let h=(a.body?.bots||[]).map(F=>({larkAppId:F.larkAppId,botName:F.botName||F.larkAppId})),E=(g.body?.chats||[]).map(F=>({chatId:F.chatId,name:F.name||"",bots:(F.memberBots||[]).filter(A=>A.inChat).map(A=>A.larkAppId)}));p(h),f(E),v(Array.isArray(i.body?.connectors)?i.body.connectors:[]),l(h,E)}finally{r.current&&d(!1)}},[l]);(0,c.useEffect)(()=>(r.current=!0,w(),()=>{r.current=!1,m.current&&clearTimeout(m.current)}),[w]),(0,c.useEffect)(()=>{let a=new Set(G.map(i=>i.chatId));M(i=>({...i,chatId:i.chatId&&a.has(i.chatId)?i.chatId:G[0]?.chatId??"",allowChats:i.allowChats.filter(g=>a.has(g))}))},[G]),(0,c.useEffect)(()=>{let a=k.current;if(a)if(Y){if(!a.open)try{a.showModal()}catch{}let i=a.querySelector(".connector-modal-body");i&&(i.scrollTop=0)}else a.open&&a.close()},[Y]),(0,c.useEffect)(()=>()=>{let a=k.current;a?.open&&a.close()},[]);function z(a){return e(a==="fixed"?"connectors.modeLabelFixed":a==="new-group"?"connectors.modeLabelNewGroup":"connectors.modeLabelDynamic")}function oe(a){return e(a==="workflow"?"connectors.kindLabelWorkflow":"connectors.kindLabelTurn")}function y(a){M(i=>({...i,...a}))}function x(){C(null),q(null),X(null),M(a=>{let i=a.botId||N[0]?.larkAppId||"";return{...Pe,botId:i,chatId:me(I,i)[0]?.chatId||""}}),B(!0)}function te(a){C(null),q(null),L(null),X(a),M(qe(a,I)),B(!0)}function S(){J||(B(!1),C(null),q(null),X(null))}async function ne(){C(null),q(null);let a=s.name.trim(),i=s.botId;if(!a){C({text:e("connectors.errName"),error:!0});return}if(!i){C({text:e("connectors.errBot"),error:!0});return}let g={name:a,enabled:T?.enabled??!0,target:{kind:s.kind,mode:s.mode,botId:i},promptEnvelope:{sourceName:a,instruction:s.instruction.trim()},verify:{type:s.verify},loggingPolicy:{storePayload:s.storePayload,storeHeaders:!0,retentionDays:14}};if(s.kind==="workflow"){if(!s.workflowId.trim()){C({text:e("connectors.errWf"),error:!0});return}g.target.workflowId=s.workflowId.trim()}if(s.mode==="fixed"){let h=s.manualChat?s.manualChatId.trim():s.chatId;if(!h){C({text:e("connectors.errChat"),error:!0});return}g.target.chatId=h}else s.mode==="dynamic"&&(g.target.allowChats=s.allowChats);if(s.mode==="new-group"){let h=s.dedup.trim();if(s.deduplicate&&!h){C({text:e("connectors.errDedup"),error:!0});return}g.lifecycleExtractors=s.deduplicate?{dedupKey:h}:null}else g.lifecycleExtractors=null;s.secret.trim()&&(g.secret=s.secret.trim()),V(!0),C({text:e(T?"connectors.saving":"connectors.creating")});try{let h=await Q(T?"PUT":"POST",T?`/api/connectors/${encodeURIComponent(T.id)}`:"/api/connectors",g);if(!r.current)return;if((h.status===201||h.status===200)&&h.body?.ok){if(T){let ye=T.id;v(Ee=>He(Ee,h.body.connector)),L({id:ye,text:e("connectors.updated")}),B(!1),X(null);return}let E=h.body.webhookUrl||Ce(h.body.connector.id),F=(h.body.connector?.verify?.type??"token")==="token",A=s.mode==="dynamic",R=A?g.target.allowChats?.[0]||"<chatId>":"";C(null),q({name:a,mode:s.mode,chatId:g.target.chatId,url:E,secret:h.body.secret,isToken:F,isDynamic:A,exampleChat:R}),M(ye=>({...ye,name:"",workflowId:"",manualChatId:"",dedup:"",secret:"",instruction:"",allowChats:[],storePayload:!0})),await w()}else{let E=h.body?.error||h.status;C({text:e("connectors.createFailed",{error:String(E)}),error:!0})}}finally{r.current&&V(!1)}}async function ae(a){L({id:a.id,text:e(a.enabled?"connectors.disabling":"connectors.enabling")});let i=await Q("PATCH",`/api/connectors/${encodeURIComponent(a.id)}`,{enabled:!a.enabled});if(r.current)if(i.status===200&&i.body?.ok)L(null),await w();else{let g=i.body?.error||i.status;L({id:a.id,text:e("connectors.toggleFailed",{error:String(g)}),error:!0})}}async function fe(a){let i=a.loggingPolicy?.storePayload!==!1;L({id:a.id,text:e("connectors.saving")});let g=await Q("PUT",`/api/connectors/${encodeURIComponent(a.id)}`,{loggingPolicy:{storePayload:!i,storeHeaders:a.loggingPolicy?.storeHeaders!==!1,retentionDays:a.loggingPolicy?.retentionDays??14}});if(r.current)if(g.status===200&&g.body?.ok)L(null),await w();else{let h=g.body?.error||g.status;L({id:a.id,text:e("connectors.saveFailed",{error:String(h)}),error:!0})}}async function Fe(a){if(!confirm(e("connectors.delConfirm")))return;L({id:a.id,text:e("connectors.deleting")});let i=await Q("DELETE",`/api/connectors/${encodeURIComponent(a.id)}`);if(r.current)if(i.status===200&&i.body?.ok)L(null),await w();else{let g=i.body?.error||i.status;L({id:a.id,text:e("connectors.deleteFailed",{error:String(g)}),error:!0})}}function Me(a){navigator.clipboard?.writeText(Ce(a.id)),ee(a.id),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>{r.current&&ee(null)},1200)}return(0,o.jsxs)("section",{className:"page connectors-page",children:[(0,o.jsxs)("div",{className:"page-heading",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,o.jsx)("h1",{children:e("nav.connectors")})]}),(0,o.jsx)("div",{className:"page-heading-actions",children:t.tab==="webhooks"?(0,o.jsx)(Ie,{className:"page-primary-action connector-create-trigger",onClick:x,children:e("connectors.createTitle")}):(0,o.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})})]}),(0,o.jsx)(Be,{active:t.tab}),t.tab==="webhooks"?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("dialog",{ref:k,className:"connector-create-modal",onCancel:a=>{a.preventDefault(),S()},onClose:S,onClick:a=>{a.target===a.currentTarget&&S()},children:(0,o.jsxs)("article",{className:"connector-modal-card",children:[(0,o.jsxs)("header",{className:"connector-modal-header",children:[(0,o.jsx)("h3",{children:e(T?"connectors.editTitle":"connectors.createTitle")}),(0,o.jsx)("button",{type:"button",className:"connector-modal-close","aria-label":e("connectors.close"),title:e("connectors.close"),disabled:J,onClick:S,children:(0,o.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]}),(0,o.jsx)("div",{className:"connector-modal-body",children:U?(0,o.jsx)(Ge,{created:U,groupName:j}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"cn-form",children:[(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-name",children:[(0,o.jsx)(P,{children:e("connectors.fName")}),(0,o.jsx)("input",{id:"cn-name",value:s.name,onChange:a=>y({name:a.currentTarget.value}),placeholder:e("connectors.fNamePh")})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fBot")}),(0,o.jsx)(ge,{id:"cn-bot",label:e("connectors.fBot"),value:s.botId,options:be,onChange:a=>y({botId:a})})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fKind")}),(0,o.jsx)(ge,{id:"cn-kind",label:e("connectors.fKind"),value:s.kind,options:O,onChange:a=>y({kind:a})})]}),s.kind==="workflow"?(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-wf",children:[(0,o.jsx)(P,{children:e("connectors.fWf")}),(0,o.jsx)("input",{id:"cn-wf",value:s.workflowId,onChange:a=>y({workflowId:a.currentTarget.value}),placeholder:"workflowId"})]}):null,(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fMode")}),(0,o.jsx)(ge,{id:"cn-mode",label:e("connectors.fMode"),value:s.mode,options:he,onChange:a=>y({mode:a})})]}),s.mode==="fixed"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsx)(P,{children:e("connectors.fFixedChat")}),(0,o.jsxs)("div",{className:"connector-chat-control",children:[s.manualChat?(0,o.jsx)("input",{id:"cn-chat",value:s.manualChatId,onChange:a=>y({manualChatId:a.currentTarget.value}),placeholder:e("connectors.fChatManualPh")}):(0,o.jsx)(Se,{id:"cn-chat-sel",label:e("connectors.fFixedChat"),groups:G,value:s.chatId,placeholder:e("connectors.groupPickerPlaceholder"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>y({chatId:a})}),(0,o.jsx)("button",{type:"button",className:"ghost connector-inline-link",onClick:()=>y({manualChat:!s.manualChat}),children:s.manualChat?e("connectors.chatListLink"):e("connectors.chatManualLink")})]})]}):s.mode==="dynamic"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsxs)(P,{help:e("connectors.allowHint"),children:[e("connectors.fAllow"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)(Se,{id:"cn-allow-chats",label:e("connectors.fAllow"),groups:G,value:s.allowChats,multiple:!0,allLabel:e("connectors.allowAll"),placeholder:e("connectors.allowAllHint"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>y({allowChats:a})})]}):null,s.mode==="dynamic"?(0,o.jsx)("div",{className:"cn-field-wide",children:(0,o.jsx)("div",{className:"muted connector-form-hint",dangerouslySetInnerHTML:{__html:e("connectors.dynamicHint")}})}):null,s.mode==="new-group"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-new-group-config",children:[(0,o.jsx)(P,{children:e("connectors.newGroupStrategy")}),(0,o.jsxs)("div",{className:"connector-strategy-options",role:"radiogroup","aria-label":e("connectors.newGroupStrategy"),children:[(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":!s.deduplicate,className:`connector-strategy-option${s.deduplicate?"":" selected"}`,onClick:()=>y({deduplicate:!1}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupFresh")}),(0,o.jsx)("small",{children:e("connectors.newGroupFreshHint")})]})]}),(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":s.deduplicate,className:`connector-strategy-option${s.deduplicate?" selected":""}`,onClick:()=>y({deduplicate:!0}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupReuse")}),(0,o.jsx)("small",{children:e("connectors.newGroupReuseHint")})]})]})]}),s.deduplicate?(0,o.jsxs)("label",{className:"connector-dedup-field",htmlFor:"cn-dedup",children:[(0,o.jsx)(P,{help:(0,o.jsx)("span",{dangerouslySetInnerHTML:{__html:e("connectors.dedupHint")}}),children:e("connectors.fDedup")}),(0,o.jsx)("input",{id:"cn-dedup",value:s.dedup,onChange:a=>y({dedup:a.currentTarget.value}),placeholder:e("connectors.fDedupPh")})]}):null,(0,o.jsx)("p",{className:"connector-new-group-note",children:e("connectors.newGroupNotice")})]}):null,(0,o.jsxs)("label",{className:"cn-field cn-field-wide",htmlFor:"cn-instruction",children:[(0,o.jsxs)(P,{help:e("connectors.fInstructionPh"),children:[e("connectors.fInstruction"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)("textarea",{id:"cn-instruction",rows:3,value:s.instruction,onChange:a=>y({instruction:a.currentTarget.value}),placeholder:e("connectors.fInstructionPh")})]}),(0,o.jsxs)("label",{className:"connector-log-policy cn-field-wide",htmlFor:"cn-store-payload",children:[(0,o.jsx)("input",{id:"cn-store-payload",type:"checkbox",checked:s.storePayload,onChange:a=>y({storePayload:a.currentTarget.checked})}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e("connectors.storePayload")}),(0,o.jsx)("small",{children:e("connectors.storePayloadHint")})]})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fVerify")}),(0,o.jsx)(ge,{id:"cn-verify",label:e("connectors.fVerify"),value:s.verify,options:pe,onChange:a=>y({verify:a})})]}),(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-secret",children:[(0,o.jsx)(P,{children:e("connectors.fSecret")}),(0,o.jsx)("input",{id:"cn-secret",value:s.secret,onChange:a=>y({secret:a.currentTarget.value}),placeholder:e(T?"connectors.fSecretEditPh":"connectors.fSecretPh")})]})]}),_?(0,o.jsx)("p",{className:`connector-create-message${_.error?" err":""}`,children:_.text}):null]})}),(0,o.jsxs)("footer",{className:"connector-modal-actions",children:[(0,o.jsx)("button",{type:"button",disabled:J,onClick:S,children:e("connectors.cancel")}),U?(0,o.jsx)("button",{type:"button",className:"primary",onClick:S,children:e("connectors.close")}):(0,o.jsx)("button",{id:"cn-create",type:"button",className:"primary",disabled:J,onClick:()=>{ne()},children:e(T?"connectors.btnSave":"connectors.btnCreate")})]})]})}),(0,o.jsx)("section",{className:"overview-block connector-section connector-list-section",children:(0,o.jsx)("div",{className:"card connector-list-card",children:$?(0,o.jsx)(ce,{className:"connector-list-loading",label:e("connectors.loading"),compact:!0}):(0,o.jsx)(We,{connectors:D,bots:N,copiedId:u,editMsg:Z,groupName:j,modeLabel:z,kindLabel:oe,onCopy:Me,onEdit:te,onToggle:a=>{ae(a)},onTogglePayloadLogging:a=>{fe(a)},onDelete:a=>{Fe(a)}})})})]}):(0,o.jsx)(Te,{embedded:!0})]})}function Ge(t){let e=W(),r=t.created,m=r.isDynamic?`${r.url}?chatId=${r.exampleChat}`:r.url,k=r.exampleChat!=="<chatId>"?`\uFF08${t.groupName(r.exampleChat)}\uFF09`:"";return(0,o.jsx)("div",{className:"connector-created-wrap",children:(0,o.jsxs)("div",{className:"card connector-created-card",children:[(0,o.jsxs)("p",{className:"connector-created-title ok",children:[e("connectors.createdPrefix",{name:r.name}),r.mode==="fixed"&&r.chatId?(0,o.jsxs)("span",{className:"muted",children:[" \xB7 ",e("connectors.createdDest",{name:t.groupName(r.chatId)})]}):null]}),(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsx)("code",{children:r.url})]}),r.secret?(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsxs)("span",{className:"muted",children:[r.isToken?e("connectors.tokenLabel"):e("connectors.signLabel"),e("connectors.secretOnce")]}),(0,o.jsx)("code",{children:r.secret})]}):null,r.isToken&&r.isDynamic?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageDynamicLede",{gn:k})}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${m}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageDynamicNote")}})]}):r.isToken?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageTokenLede")}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${m}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageTokenNote")}})]}):(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageHmac")+(r.isDynamic?e("connectors.usageHmacDynamic"):"")}})]})})}function We(t){let e=W();return t.connectors.length?(0,o.jsx)(o.Fragment,{children:t.connectors.map(r=>{let m=t.bots.find(v=>v.larkAppId===r.target.botId),k=Ce(r.id),N=(r.verify?.type??"token")==="token",p=e(N?"connectors.badgeToken":"connectors.badgeSign"),I=r.target.mode==="fixed"&&r.target.chatId?e("connectors.dest",{name:t.groupName(r.target.chatId)}):"",f=t.editMsg?.id===r.id?t.editMsg:null,D=t.copiedId===r.id;return(0,o.jsxs)("div",{className:"card connector-item-card",children:[(0,o.jsxs)("div",{className:"connector-item-head",children:[(0,o.jsxs)("div",{className:"connector-item-main",children:[(0,o.jsxs)("div",{className:"connector-item-title",children:[(0,o.jsx)("b",{children:r.name}),(0,o.jsx)("span",{className:r.enabled?"connector-status-pill ok":"connector-status-pill muted",children:r.enabled?e("connectors.enabled"):e("connectors.disabled")})]}),(0,o.jsxs)("div",{className:"connector-item-meta",children:[(0,o.jsx)("span",{children:m?.botName||r.target.botId}),(0,o.jsx)("span",{children:t.kindLabel(r.target.kind)}),(0,o.jsx)("span",{children:t.modeLabel(r.target.mode)}),I?(0,o.jsx)("span",{children:I}):null,(0,o.jsx)("span",{children:p}),(0,o.jsx)("span",{children:r.loggingPolicy?.storePayload!==!1?e("connectors.payloadLogged",{days:r.loggingPolicy?.retentionDays??14}):e("connectors.metadataOnly")})]})]}),(0,o.jsx)("button",{className:`ghost connector-copy-button${D?" copied":""}`,type:"button",onClick:()=>t.onCopy(r),children:e(D?"connectors.copied":"connectors.copy")})]}),(0,o.jsxs)("div",{className:"connector-url-row",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsxs)("code",{children:[k,N?"/<token>":""]})]}),N?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.tokenHint")}}):null,r.target.mode==="dynamic"?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.dynamicReqHint")}}):null,r.promptEnvelope?.instruction?(0,o.jsxs)("div",{className:"muted connector-item-note",children:[e("connectors.instructionPrefix"),r.promptEnvelope.instruction]}):null,f?(0,o.jsx)("div",{className:f.error?"err connector-item-note":"muted connector-item-note",children:f.text}):null,(0,o.jsxs)("div",{className:"connector-item-actions",children:[(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onEdit(r),children:e("connectors.btnEdit")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onTogglePayloadLogging(r),children:r.loggingPolicy?.storePayload!==!1?e("connectors.btnDisablePayloadLog"):e("connectors.btnEnablePayloadLog")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onToggle(r),children:r.enabled?e("connectors.btnDisable"):e("connectors.btnEnable")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onDelete(r),children:e("connectors.btnDel")})]})]},r.id)})}):(0,o.jsx)("p",{className:"muted connector-list-empty",children:e("connectors.empty")})}function eo(t){return re(t,(0,o.jsx)(xe,{tab:"webhooks"}))}function oo(t){return re(t,(0,o.jsx)(xe,{tab:"logs"}))}export{Ze as buildConnectorInstructionUpdateBody,oo as renderConnectorsLogsPage,eo as renderConnectorsPage,He as replaceConnectorById};
|
|
1
|
+
import{a as H,b as Q}from"./chunk-EVK77ASG.js";import{b as W}from"./chunk-OEJIT66L.js";import{a as le,c as ce,g as Ie,k as P,p as ie}from"./chunk-SRIE4MLQ.js";import"./chunk-PNK3HQBI.js";import{a as re}from"./chunk-SYC6D5XU.js";import{a as Ne,d as se}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var c=K(Ne(),1);var b=K(Ne(),1);var n=K(se(),1),De=50,we={total:0,ok:0,error:0,successRate:0};function Re(t,e=Date.now()){if(t==="all")return;let r=t==="24h"?24:t==="7d"?168:720;return new Date(e-r*60*60*1e3).toISOString()}function $e(t,e=0){let r=new URLSearchParams({limit:String(De),offset:String(e)});t.connectorId&&r.set("connectorId",t.connectorId),t.status&&r.set("status",t.status);let m=Re(t.timeWindow);return m&&r.set("since",m),t.query.trim()&&r.set("q",t.query.trim()),r}function Le(t){if(!t)return"\u2014";let e=new Date(t);return Number.isFinite(e.getTime())?e.toLocaleString():t}function de(t){return t===void 0||!Number.isFinite(t)?"\u2014":t<1e3?`${Math.round(t)} ms`:t<6e4?`${(t/1e3).toFixed(t<1e4?1:0)} s`:`${(t/6e4).toFixed(1)} min`}function Oe(t){return t===void 0?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}function ke(t){return t.value===void 0||t.value===null?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):typeof t.value=="object"&&!Array.isArray(t.value)&&Object.keys(t.value).length===0?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):(0,n.jsx)("pre",{className:`webhook-log-json${t.fullHeight?" full-height":""}`,children:(0,n.jsx)("code",{children:JSON.stringify(t.value,null,2)})})}function Ae(t){let e=[["kind",t.value?.kind],["mode",t.value?.mode],["botId",t.value?.botId],["chatId",t.value?.chatId],["sessionId",t.value?.sessionId],["rootMessageId",t.value?.rootMessageId],["workflowId",t.value?.workflowId]].filter(([,r])=>r!=null&&r!=="");return e.length?(0,n.jsx)("dl",{className:"webhook-log-target-facts",children:e.map(([r,m])=>(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:r}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:String(m)})})]},r))}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:"\u2014"})}function ve(t){return(0,n.jsx)(ie,{id:t.id,className:"webhook-log-filter-menu",ariaLabel:t.label,style:{width:"100%",minWidth:0},value:t.value,label:le(t.options,t.value),options:t.options,onChange:t.onChange})}function ue(t){return(0,n.jsxs)("article",{className:`card webhook-log-metric${t.tone?` ${t.tone}`:""}`,children:[(0,n.jsx)("span",{children:t.label}),(0,n.jsx)("strong",{children:t.value}),(0,n.jsx)("small",{children:t.hint||"\xA0"})]})}function Te(t={}){let e=W(),r=(0,b.useRef)(!1),m=(0,b.useRef)([]),[k,N]=(0,b.useState)([]),[p,I]=(0,b.useState)([]),[f,D]=(0,b.useState)(we),[v,$]=(0,b.useState)({connectorId:"",status:"",timeWindow:"7d",query:""}),[d,s]=(0,b.useState)(null),[M,_]=(0,b.useState)(!0),[C,U]=(0,b.useState)(!1),[q,J]=(0,b.useState)(!1),[V,Y]=(0,b.useState)(0),[B,T]=(0,b.useState)(""),[X,Z]=(0,b.useState)(!1),L=(0,b.useMemo)(()=>new Map(k.map(l=>[l.id,l.name])),[k]),u=(0,b.useMemo)(()=>p.find(l=>l.triggerId===d)??p[0]??null,[p,d]),ee=(0,b.useMemo)(()=>[{value:"",label:e("webhookLogs.allConnectors")},...k.map(l=>({value:l.id,label:l.name}))],[k,e]),G=(0,b.useMemo)(()=>[{value:"",label:e("webhookLogs.allStatuses")},{value:"ok",label:e("webhookLogs.success")},{value:"error",label:e("webhookLogs.failed")}],[e]),be=(0,b.useMemo)(()=>[{value:"24h",label:e("webhookLogs.last24h")},{value:"7d",label:e("webhookLogs.last7d")},{value:"30d",label:e("webhookLogs.last30d")},{value:"all",label:e("webhookLogs.allTime")}],[e]),O=(0,b.useCallback)(async(l=!1,w=!1)=>{w?U(!0):_(!0),T("");let z=l?m.current.length:0,oe=$e(v,z),y=new URLSearchParams(oe);y.delete("limit"),y.delete("offset");try{let[x,te]=await Promise.all([H(`/api/trigger-logs?${oe}`),l?Promise.resolve(null):H(`/api/trigger-logs/summary?${y}`)]);if(!r.current)return;if(x.status!==200)throw new Error(String(x.body?.error||x.status));let S=Array.isArray(x.body?.logs)?x.body.logs:[],ne=l?[...m.current,...S]:S;m.current=ne,I(ne),Y(Number(x.body?.total??S.length)),J(x.body?.hasMore===!0),l||(D(te?.status===200?te.body?.summary??we:we),s(ae=>S.some(fe=>fe.triggerId===ae)?ae:S[0]?.triggerId??null))}catch(x){r.current&&T(x?.message||e("webhookLogs.loadFailed"))}finally{r.current&&(_(!1),U(!1))}},[v,e]);(0,b.useEffect)(()=>(r.current=!0,H("/api/connectors").then(l=>{r.current&&l.status===200&&N(Array.isArray(l.body?.connectors)?l.body.connectors:[])}),()=>{r.current=!1}),[]),(0,b.useEffect)(()=>{let l=setTimeout(()=>{O(!1)},v.query?260:0);return()=>clearTimeout(l)},[v,O]),(0,b.useEffect)(()=>{let l=setInterval(()=>{O(!1,!0)},15e3);return()=>clearInterval(l)},[O]);async function he(){u&&(await navigator.clipboard?.writeText(JSON.stringify(u,null,2)),Z(!0),setTimeout(()=>r.current&&Z(!1),1200))}let pe=u?.request?.payloadOmittedReason==="disabled"?e("webhookLogs.payloadDisabled"):u?.request?.payloadOmittedReason==="too_large"?e("webhookLogs.payloadTooLarge"):e("webhookLogs.payloadUnavailable"),j=(0,n.jsxs)(n.Fragment,{children:[t.embedded?null:(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,n.jsx)("h1",{children:e("nav.webhookLogs")}),(0,n.jsx)("p",{className:"webhook-log-heading-copy",children:e("webhookLogs.subtitle")})]}),(0,n.jsxs)("div",{className:"page-heading-actions",children:[(0,n.jsxs)("span",{className:`webhook-log-live${C?" refreshing":""}`,children:[(0,n.jsx)("i",{}),e("webhookLogs.autoRefresh")]}),(0,n.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})]})]}),(0,n.jsxs)("section",{className:"webhook-log-metrics","aria-label":e("webhookLogs.summary"),children:[(0,n.jsx)(ue,{label:e("webhookLogs.total"),value:f.total,hint:e("webhookLogs.filteredRange")}),(0,n.jsx)(ue,{label:e("webhookLogs.successRate"),value:`${f.successRate.toFixed(f.successRate%1?1:0)}%`,tone:"ok",hint:`${f.ok} ${e("webhookLogs.calls")}`}),(0,n.jsx)(ue,{label:e("webhookLogs.failures"),value:f.error,tone:f.error?"error":void 0,hint:f.error?e("webhookLogs.needsReview"):e("webhookLogs.noFailures")}),(0,n.jsx)(ue,{label:e("webhookLogs.p95"),value:de(f.p95DurationMs),hint:`${e("webhookLogs.average")} ${de(f.avgDurationMs)}`})]}),(0,n.jsxs)("form",{className:"filters dashboard-toolbar webhook-log-toolbar",onSubmit:l=>l.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q","aria-label":e("webhookLogs.search"),placeholder:e("webhookLogs.searchPlaceholder"),value:v.query,onChange:l=>{let w=l.currentTarget.value;$(z=>({...z,query:w}))}}),(0,n.jsx)(ve,{id:"webhook-log-connector",label:e("webhookLogs.connector"),value:v.connectorId,options:ee,onChange:l=>$(w=>({...w,connectorId:l}))}),(0,n.jsx)(ve,{id:"webhook-log-status",label:e("webhookLogs.status"),value:v.status,options:G,onChange:l=>$(w=>({...w,status:l}))}),(0,n.jsx)(ve,{id:"webhook-log-window",label:e("webhookLogs.timeRange"),value:v.timeWindow,options:be,onChange:l=>$(w=>({...w,timeWindow:l}))}),(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-refresh",disabled:C,onClick:()=>{O(!1,!0)},children:e("webhookLogs.refresh")})]}),B?(0,n.jsxs)("p",{className:"err webhook-log-error",children:[e("webhookLogs.loadFailed"),": ",B]}):null,(0,n.jsxs)("section",{className:"webhook-log-workspace",children:[(0,n.jsxs)("article",{className:"card webhook-log-list-panel",children:[(0,n.jsx)("header",{className:"webhook-log-panel-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e("webhookLogs.records")}),(0,n.jsx)("span",{children:e("webhookLogs.matching",{count:V})})]})}),M&&!p.length?(0,n.jsx)(ce,{label:e("webhookLogs.loading"),compact:!0}):null,!M&&!p.length?(0,n.jsxs)("div",{className:"webhook-log-empty",children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"\u25CE"}),(0,n.jsx)("strong",{children:e("webhookLogs.empty")}),(0,n.jsx)("p",{children:e("webhookLogs.emptyHint")})]}):null,(0,n.jsx)("div",{className:"webhook-log-list",role:"listbox","aria-label":e("webhookLogs.records"),children:p.map(l=>{let w=u?.triggerId===l.triggerId;return(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":w,className:`webhook-log-row${w?" active":""}`,onClick:()=>s(l.triggerId),children:[(0,n.jsx)("span",{className:`webhook-log-status-dot ${l.status}`,"aria-hidden":"true"}),(0,n.jsxs)("span",{className:"webhook-log-row-main",children:[(0,n.jsxs)("span",{className:"webhook-log-row-title",children:[(0,n.jsx)("strong",{children:L.get(l.connectorId||"")||l.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsx)("code",{children:l.request?.method||"POST"})]}),(0,n.jsxs)("span",{className:"webhook-log-row-meta",children:[(0,n.jsx)("span",{children:Le(l.createdAt)}),(0,n.jsx)("span",{children:l.errorCode||l.action})]})]}),(0,n.jsxs)("span",{className:"webhook-log-row-result",children:[(0,n.jsx)("b",{className:l.status,children:l.response?.httpStatus??(l.status==="ok"?"2xx":"ERR")}),(0,n.jsx)("small",{children:de(l.response?.durationMs)})]})]},`${l.triggerId}-${l.createdAt}`)})}),q?(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-more",disabled:M,onClick:()=>{O(!0)},children:e("webhookLogs.loadMore")}):null]}),(0,n.jsx)("article",{className:"card webhook-log-detail-panel",children:u?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"webhook-log-detail-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:`webhook-log-result-pill ${u.status}`,children:u.status==="ok"?e("webhookLogs.success"):e("webhookLogs.failed")}),(0,n.jsx)("h2",{children:L.get(u.connectorId||"")||u.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsxs)("p",{children:[Le(u.createdAt)," \xB7 ",u.request?.method||"POST"," ",u.request?.path||"/webhook/\u2026"]})]}),(0,n.jsx)("button",{type:"button",className:"ghost",onClick:()=>{he()},children:e(X?"webhookLogs.copied":"webhookLogs.copyJson")})]}),u.error?(0,n.jsxs)("div",{className:"webhook-log-failure",children:[(0,n.jsx)("strong",{children:u.errorCode||e("webhookLogs.failureReason")}),(0,n.jsx)("span",{children:u.error})]}):null,(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.overview")}),(0,n.jsxs)("dl",{className:"webhook-log-facts",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.httpStatus")}),(0,n.jsx)("dd",{children:u.response?.httpStatus??"\u2014"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.duration")}),(0,n.jsx)("dd",{children:de(u.response?.durationMs)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.action")}),(0,n.jsx)("dd",{children:u.action})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.bodySize")}),(0,n.jsx)("dd",{children:Oe(u.request?.bodyBytes)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Trigger ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.triggerId})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Request ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.requestId||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.remoteAddress")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.request?.remoteAddress||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.target")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.target?.chatId||u.target?.sessionId||u.response?.chatId||"\u2014"})})]})]})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.queryParams")}),(0,n.jsx)(ke,{value:u.request?.query,empty:e("webhookLogs.none")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.headers"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),(0,n.jsx)(ke,{value:u.request?.headers,empty:e("webhookLogs.headersNotStored")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.payload"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),u.request?.payloadStored?(0,n.jsx)(ke,{value:u.request.payload,empty:e("webhookLogs.none")}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:pe})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.routeTarget")}),(0,n.jsx)(Ae,{value:u.target})]})]}):(0,n.jsx)("div",{className:"webhook-log-empty",children:(0,n.jsx)("strong",{children:e("webhookLogs.selectRecord")})})})]})]});return t.embedded?(0,n.jsx)("section",{className:"webhook-logs-content webhook-logs-panel",children:j}):(0,n.jsx)("section",{className:"page webhook-logs-content webhook-logs-page",children:j})}var o=K(se(),1);function He(t,e){return t.map(r=>r.id===e.id?e:r)}var Pe={name:"",botId:"",kind:"turn",workflowId:"",mode:"dynamic",chatId:"",manualChat:!1,manualChatId:"",allowChats:[],deduplicate:!1,dedup:"",instruction:"",verify:"token",secret:"",storePayload:!0};function Ze(t,e){return{promptEnvelope:{sourceName:t.promptEnvelope?.sourceName||t.name,instruction:e}}}function Ce(t){return`${location.origin}/webhook/${encodeURIComponent(t)}`}function ge(t){return(0,o.jsx)(ie,{id:t.id,className:"connector-form-menu",ariaLabel:t.label,value:t.value,label:le(t.options,t.value),options:t.options,onChange:t.onChange})}function Se(t){let e=(0,c.useRef)(null),[r,m]=(0,c.useState)(!1),[k,N]=(0,c.useState)(""),p=Array.isArray(t.value)?t.value:t.value?[t.value]:[],I=(0,c.useMemo)(()=>new Set(p),[p]),f=k.trim().toLocaleLowerCase(),D=(0,c.useMemo)(()=>f?t.groups.filter(d=>`${d.name} ${d.chatId}`.toLocaleLowerCase().includes(f)):t.groups,[f,t.groups]),v=t.multiple?p.length===0?t.allLabel||t.placeholder:t.selectedCountLabel(p.length):t.groups.find(d=>d.chatId===p[0])?.name||p[0]||t.placeholder;(0,c.useEffect)(()=>{if(!r)return;let d=s=>{e.current?.contains(s.target)||m(!1)};return document.addEventListener("pointerdown",d),()=>document.removeEventListener("pointerdown",d)},[r]);function $(d){if(!t.multiple){t.onChange(d),m(!1),N("");return}t.onChange(I.has(d)?p.filter(s=>s!==d):[...p,d])}return(0,o.jsxs)("div",{ref:e,className:`connector-group-picker${r?" open":""}`,children:[(0,o.jsxs)("button",{id:t.id,type:"button",className:"connector-group-picker-trigger","aria-label":t.label,"aria-haspopup":"listbox","aria-expanded":r,onClick:()=>m(d=>!d),children:[(0,o.jsx)("span",{className:p.length||t.multiple&&t.allLabel?"":"muted",children:v}),(0,o.jsx)("span",{className:"connector-group-picker-chevron","aria-hidden":"true"})]}),r?(0,o.jsxs)("div",{className:"connector-group-picker-popover",children:[(0,o.jsxs)("label",{className:"connector-group-search",htmlFor:`${t.id}-search`,children:[(0,o.jsx)("span",{className:"connector-group-search-icon","aria-hidden":"true"}),(0,o.jsx)("input",{id:`${t.id}-search`,type:"search",autoComplete:"off",autoFocus:!0,value:k,placeholder:t.searchPlaceholder,onChange:d=>N(d.currentTarget.value),onKeyDown:d=>{d.key==="Escape"&&(d.preventDefault(),m(!1))}})]}),(0,o.jsxs)("div",{className:"connector-group-options",role:"listbox","aria-label":t.label,"aria-multiselectable":t.multiple||void 0,children:[t.multiple&&t.allLabel&&!f?(0,o.jsxs)("button",{type:"button",className:`connector-group-option connector-group-option-all${p.length===0?" selected":""}`,role:"option","aria-selected":p.length===0,onClick:()=>t.onChange([]),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:t.allLabel}),(0,o.jsx)("small",{children:t.placeholder})]})]}):null,D.map(d=>{let s=I.has(d.chatId);return(0,o.jsxs)("button",{type:"button",className:`connector-group-option${s?" selected":""}`,role:"option","aria-selected":s,onClick:()=>$(d.chatId),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:d.name||d.chatId}),d.name?(0,o.jsx)("small",{children:d.chatId}):null]})]},d.chatId)}),D.length?null:(0,o.jsx)("p",{className:"connector-group-empty",children:t.emptyLabel})]})]}):null]})}function me(t,e){return t.filter(r=>r.bots.includes(e))}function qe(t,e){let r=t.target.chatId||"",m=r&&me(e,t.target.botId).some(k=>k.chatId===r);return{name:t.name,botId:t.target.botId,kind:t.target.kind,workflowId:t.target.workflowId||"",mode:t.target.mode,chatId:m?r:"",manualChat:!!(r&&!m),manualChatId:m?"":r,allowChats:t.target.allowChats||[],deduplicate:!!t.lifecycleExtractors?.dedupKey,dedup:t.lifecycleExtractors?.dedupKey||"",instruction:t.promptEnvelope?.instruction||"",verify:t.verify?.type||"token",secret:"",storePayload:t.loggingPolicy?.storePayload!==!1}}function Be(t){let e=W(),r=t.active==="webhooks",m=t.active==="logs";return(0,o.jsxs)("nav",{className:"connectors-subnav-slot connectors-subnav insight-tabs",role:"tablist","aria-label":e("nav.connectors"),children:[(0,o.jsx)("a",{href:"#/connectors",className:`itab${r?" on":""}`,role:"tab","aria-selected":r,children:e("connectors.tabWebhooks")}),(0,o.jsx)("a",{href:"#/connectors/logs",className:`itab${m?" on":""}`,role:"tab","aria-selected":m,children:e("connectors.tabLogs")})]})}function xe(t){let e=W(),r=(0,c.useRef)(!1),m=(0,c.useRef)(null),k=(0,c.useRef)(null),[N,p]=(0,c.useState)([]),[I,f]=(0,c.useState)([]),[D,v]=(0,c.useState)([]),[$,d]=(0,c.useState)(!0),[s,M]=(0,c.useState)(Pe),[_,C]=(0,c.useState)(null),[U,q]=(0,c.useState)(null),[J,V]=(0,c.useState)(!1),[Y,B]=(0,c.useState)(!1),[T,X]=(0,c.useState)(null),[Z,L]=(0,c.useState)(null),[u,ee]=(0,c.useState)(null),G=(0,c.useMemo)(()=>me(I,s.botId),[I,s.botId]),be=(0,c.useMemo)(()=>N.length?N.map(a=>({value:a.larkAppId,label:a.botName})):[{value:"",label:e("connectors.noOnlineBots")}],[N,e]),O=(0,c.useMemo)(()=>[{value:"turn",label:e("connectors.kindTurn")},{value:"workflow",label:e("connectors.kindWorkflow")}],[e]),he=(0,c.useMemo)(()=>[{value:"dynamic",label:e("connectors.modeDynamic")},{value:"fixed",label:e("connectors.modeFixed")},{value:"new-group",label:e("connectors.modeNewGroup")}],[e]),pe=(0,c.useMemo)(()=>[{value:"token",label:e("connectors.verifyToken")},{value:"hmac-sha256",label:e("connectors.verifyHmac")}],[e]),j=(0,c.useCallback)(a=>I.find(g=>g.chatId===a)?.name||a,[I]),l=(0,c.useCallback)((a,i)=>{M(g=>{let h=g.botId&&a.some(R=>R.larkAppId===g.botId)?g.botId:a[0]?.larkAppId??"",E=me(i,h),F=g.chatId&&E.some(R=>R.chatId===g.chatId)?g.chatId:E[0]?.chatId??"",A=new Set(E.map(R=>R.chatId));return{...g,botId:h,chatId:F,allowChats:g.allowChats.filter(R=>A.has(R))}})},[]),w=(0,c.useCallback)(async()=>{d(!0);try{let[a,i,g]=await Promise.all([H("/api/bots"),H("/api/connectors"),H("/api/groups")]);if(!r.current)return;let h=(a.body?.bots||[]).map(F=>({larkAppId:F.larkAppId,botName:F.botName||F.larkAppId})),E=(g.body?.chats||[]).map(F=>({chatId:F.chatId,name:F.name||"",bots:(F.memberBots||[]).filter(A=>A.inChat).map(A=>A.larkAppId)}));p(h),f(E),v(Array.isArray(i.body?.connectors)?i.body.connectors:[]),l(h,E)}finally{r.current&&d(!1)}},[l]);(0,c.useEffect)(()=>(r.current=!0,w(),()=>{r.current=!1,m.current&&clearTimeout(m.current)}),[w]),(0,c.useEffect)(()=>{let a=new Set(G.map(i=>i.chatId));M(i=>({...i,chatId:i.chatId&&a.has(i.chatId)?i.chatId:G[0]?.chatId??"",allowChats:i.allowChats.filter(g=>a.has(g))}))},[G]),(0,c.useEffect)(()=>{let a=k.current;if(a)if(Y){if(!a.open)try{a.showModal()}catch{}let i=a.querySelector(".connector-modal-body");i&&(i.scrollTop=0)}else a.open&&a.close()},[Y]),(0,c.useEffect)(()=>()=>{let a=k.current;a?.open&&a.close()},[]);function z(a){return e(a==="fixed"?"connectors.modeLabelFixed":a==="new-group"?"connectors.modeLabelNewGroup":"connectors.modeLabelDynamic")}function oe(a){return e(a==="workflow"?"connectors.kindLabelWorkflow":"connectors.kindLabelTurn")}function y(a){M(i=>({...i,...a}))}function x(){C(null),q(null),X(null),M(a=>{let i=a.botId||N[0]?.larkAppId||"";return{...Pe,botId:i,chatId:me(I,i)[0]?.chatId||""}}),B(!0)}function te(a){C(null),q(null),L(null),X(a),M(qe(a,I)),B(!0)}function S(){J||(B(!1),C(null),q(null),X(null))}async function ne(){C(null),q(null);let a=s.name.trim(),i=s.botId;if(!a){C({text:e("connectors.errName"),error:!0});return}if(!i){C({text:e("connectors.errBot"),error:!0});return}let g={name:a,enabled:T?.enabled??!0,target:{kind:s.kind,mode:s.mode,botId:i},promptEnvelope:{sourceName:a,instruction:s.instruction.trim()},verify:{type:s.verify},loggingPolicy:{storePayload:s.storePayload,storeHeaders:!0,retentionDays:14}};if(s.kind==="workflow"){if(!s.workflowId.trim()){C({text:e("connectors.errWf"),error:!0});return}g.target.workflowId=s.workflowId.trim()}if(s.mode==="fixed"){let h=s.manualChat?s.manualChatId.trim():s.chatId;if(!h){C({text:e("connectors.errChat"),error:!0});return}g.target.chatId=h}else s.mode==="dynamic"&&(g.target.allowChats=s.allowChats);if(s.mode==="new-group"){let h=s.dedup.trim();if(s.deduplicate&&!h){C({text:e("connectors.errDedup"),error:!0});return}g.lifecycleExtractors=s.deduplicate?{dedupKey:h}:null}else g.lifecycleExtractors=null;s.secret.trim()&&(g.secret=s.secret.trim()),V(!0),C({text:e(T?"connectors.saving":"connectors.creating")});try{let h=await Q(T?"PUT":"POST",T?`/api/connectors/${encodeURIComponent(T.id)}`:"/api/connectors",g);if(!r.current)return;if((h.status===201||h.status===200)&&h.body?.ok){if(T){let ye=T.id;v(Ee=>He(Ee,h.body.connector)),L({id:ye,text:e("connectors.updated")}),B(!1),X(null);return}let E=h.body.webhookUrl||Ce(h.body.connector.id),F=(h.body.connector?.verify?.type??"token")==="token",A=s.mode==="dynamic",R=A?g.target.allowChats?.[0]||"<chatId>":"";C(null),q({name:a,mode:s.mode,chatId:g.target.chatId,url:E,secret:h.body.secret,isToken:F,isDynamic:A,exampleChat:R}),M(ye=>({...ye,name:"",workflowId:"",manualChatId:"",dedup:"",secret:"",instruction:"",allowChats:[],storePayload:!0})),await w()}else{let E=h.body?.error||h.status;C({text:e("connectors.createFailed",{error:String(E)}),error:!0})}}finally{r.current&&V(!1)}}async function ae(a){L({id:a.id,text:e(a.enabled?"connectors.disabling":"connectors.enabling")});let i=await Q("PATCH",`/api/connectors/${encodeURIComponent(a.id)}`,{enabled:!a.enabled});if(r.current)if(i.status===200&&i.body?.ok)L(null),await w();else{let g=i.body?.error||i.status;L({id:a.id,text:e("connectors.toggleFailed",{error:String(g)}),error:!0})}}async function fe(a){let i=a.loggingPolicy?.storePayload!==!1;L({id:a.id,text:e("connectors.saving")});let g=await Q("PUT",`/api/connectors/${encodeURIComponent(a.id)}`,{loggingPolicy:{storePayload:!i,storeHeaders:a.loggingPolicy?.storeHeaders!==!1,retentionDays:a.loggingPolicy?.retentionDays??14}});if(r.current)if(g.status===200&&g.body?.ok)L(null),await w();else{let h=g.body?.error||g.status;L({id:a.id,text:e("connectors.saveFailed",{error:String(h)}),error:!0})}}async function Fe(a){if(!confirm(e("connectors.delConfirm")))return;L({id:a.id,text:e("connectors.deleting")});let i=await Q("DELETE",`/api/connectors/${encodeURIComponent(a.id)}`);if(r.current)if(i.status===200&&i.body?.ok)L(null),await w();else{let g=i.body?.error||i.status;L({id:a.id,text:e("connectors.deleteFailed",{error:String(g)}),error:!0})}}function Me(a){navigator.clipboard?.writeText(Ce(a.id)),ee(a.id),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>{r.current&&ee(null)},1200)}return(0,o.jsxs)("section",{className:"page connectors-page",children:[(0,o.jsxs)("div",{className:"page-heading",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,o.jsx)("h1",{children:e("nav.connectors")})]}),(0,o.jsx)("div",{className:"page-heading-actions",children:t.tab==="webhooks"?(0,o.jsx)(Ie,{className:"page-primary-action connector-create-trigger",onClick:x,children:e("connectors.createTitle")}):(0,o.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})})]}),(0,o.jsx)(Be,{active:t.tab}),t.tab==="webhooks"?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("dialog",{ref:k,className:"connector-create-modal",onCancel:a=>{a.preventDefault(),S()},onClose:S,onClick:a=>{a.target===a.currentTarget&&S()},children:(0,o.jsxs)("article",{className:"connector-modal-card",children:[(0,o.jsxs)("header",{className:"connector-modal-header",children:[(0,o.jsx)("h3",{children:e(T?"connectors.editTitle":"connectors.createTitle")}),(0,o.jsx)("button",{type:"button",className:"connector-modal-close","aria-label":e("connectors.close"),title:e("connectors.close"),disabled:J,onClick:S,children:(0,o.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]}),(0,o.jsx)("div",{className:"connector-modal-body",children:U?(0,o.jsx)(Ge,{created:U,groupName:j}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"cn-form",children:[(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-name",children:[(0,o.jsx)(P,{children:e("connectors.fName")}),(0,o.jsx)("input",{id:"cn-name",value:s.name,onChange:a=>y({name:a.currentTarget.value}),placeholder:e("connectors.fNamePh")})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fBot")}),(0,o.jsx)(ge,{id:"cn-bot",label:e("connectors.fBot"),value:s.botId,options:be,onChange:a=>y({botId:a})})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fKind")}),(0,o.jsx)(ge,{id:"cn-kind",label:e("connectors.fKind"),value:s.kind,options:O,onChange:a=>y({kind:a})})]}),s.kind==="workflow"?(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-wf",children:[(0,o.jsx)(P,{children:e("connectors.fWf")}),(0,o.jsx)("input",{id:"cn-wf",value:s.workflowId,onChange:a=>y({workflowId:a.currentTarget.value}),placeholder:"workflowId"})]}):null,(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fMode")}),(0,o.jsx)(ge,{id:"cn-mode",label:e("connectors.fMode"),value:s.mode,options:he,onChange:a=>y({mode:a})})]}),s.mode==="fixed"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsx)(P,{children:e("connectors.fFixedChat")}),(0,o.jsxs)("div",{className:"connector-chat-control",children:[s.manualChat?(0,o.jsx)("input",{id:"cn-chat",value:s.manualChatId,onChange:a=>y({manualChatId:a.currentTarget.value}),placeholder:e("connectors.fChatManualPh")}):(0,o.jsx)(Se,{id:"cn-chat-sel",label:e("connectors.fFixedChat"),groups:G,value:s.chatId,placeholder:e("connectors.groupPickerPlaceholder"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>y({chatId:a})}),(0,o.jsx)("button",{type:"button",className:"ghost connector-inline-link",onClick:()=>y({manualChat:!s.manualChat}),children:s.manualChat?e("connectors.chatListLink"):e("connectors.chatManualLink")})]})]}):s.mode==="dynamic"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsxs)(P,{help:e("connectors.allowHint"),children:[e("connectors.fAllow"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)(Se,{id:"cn-allow-chats",label:e("connectors.fAllow"),groups:G,value:s.allowChats,multiple:!0,allLabel:e("connectors.allowAll"),placeholder:e("connectors.allowAllHint"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>y({allowChats:a})})]}):null,s.mode==="dynamic"?(0,o.jsx)("div",{className:"cn-field-wide",children:(0,o.jsx)("div",{className:"muted connector-form-hint",dangerouslySetInnerHTML:{__html:e("connectors.dynamicHint")}})}):null,s.mode==="new-group"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-new-group-config",children:[(0,o.jsx)(P,{children:e("connectors.newGroupStrategy")}),(0,o.jsxs)("div",{className:"connector-strategy-options",role:"radiogroup","aria-label":e("connectors.newGroupStrategy"),children:[(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":!s.deduplicate,className:`connector-strategy-option${s.deduplicate?"":" selected"}`,onClick:()=>y({deduplicate:!1}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupFresh")}),(0,o.jsx)("small",{children:e("connectors.newGroupFreshHint")})]})]}),(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":s.deduplicate,className:`connector-strategy-option${s.deduplicate?" selected":""}`,onClick:()=>y({deduplicate:!0}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupReuse")}),(0,o.jsx)("small",{children:e("connectors.newGroupReuseHint")})]})]})]}),s.deduplicate?(0,o.jsxs)("label",{className:"connector-dedup-field",htmlFor:"cn-dedup",children:[(0,o.jsx)(P,{help:(0,o.jsx)("span",{dangerouslySetInnerHTML:{__html:e("connectors.dedupHint")}}),children:e("connectors.fDedup")}),(0,o.jsx)("input",{id:"cn-dedup",value:s.dedup,onChange:a=>y({dedup:a.currentTarget.value}),placeholder:e("connectors.fDedupPh")})]}):null,(0,o.jsx)("p",{className:"connector-new-group-note",children:e("connectors.newGroupNotice")})]}):null,(0,o.jsxs)("label",{className:"cn-field cn-field-wide",htmlFor:"cn-instruction",children:[(0,o.jsxs)(P,{help:e("connectors.fInstructionPh"),children:[e("connectors.fInstruction"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)("textarea",{id:"cn-instruction",rows:3,value:s.instruction,onChange:a=>y({instruction:a.currentTarget.value}),placeholder:e("connectors.fInstructionPh")})]}),(0,o.jsxs)("label",{className:"connector-log-policy cn-field-wide",htmlFor:"cn-store-payload",children:[(0,o.jsx)("input",{id:"cn-store-payload",type:"checkbox",checked:s.storePayload,onChange:a=>y({storePayload:a.currentTarget.checked})}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e("connectors.storePayload")}),(0,o.jsx)("small",{children:e("connectors.storePayloadHint")})]})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(P,{children:e("connectors.fVerify")}),(0,o.jsx)(ge,{id:"cn-verify",label:e("connectors.fVerify"),value:s.verify,options:pe,onChange:a=>y({verify:a})})]}),(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-secret",children:[(0,o.jsx)(P,{children:e("connectors.fSecret")}),(0,o.jsx)("input",{id:"cn-secret",value:s.secret,onChange:a=>y({secret:a.currentTarget.value}),placeholder:e(T?"connectors.fSecretEditPh":"connectors.fSecretPh")})]})]}),_?(0,o.jsx)("p",{className:`connector-create-message${_.error?" err":""}`,children:_.text}):null]})}),(0,o.jsxs)("footer",{className:"connector-modal-actions",children:[(0,o.jsx)("button",{type:"button",disabled:J,onClick:S,children:e("connectors.cancel")}),U?(0,o.jsx)("button",{type:"button",className:"primary",onClick:S,children:e("connectors.close")}):(0,o.jsx)("button",{id:"cn-create",type:"button",className:"primary",disabled:J,onClick:()=>{ne()},children:e(T?"connectors.btnSave":"connectors.btnCreate")})]})]})}),(0,o.jsx)("section",{className:"overview-block connector-section connector-list-section",children:(0,o.jsx)("div",{className:"card connector-list-card",children:$?(0,o.jsx)(ce,{className:"connector-list-loading",label:e("connectors.loading"),compact:!0}):(0,o.jsx)(We,{connectors:D,bots:N,copiedId:u,editMsg:Z,groupName:j,modeLabel:z,kindLabel:oe,onCopy:Me,onEdit:te,onToggle:a=>{ae(a)},onTogglePayloadLogging:a=>{fe(a)},onDelete:a=>{Fe(a)}})})})]}):(0,o.jsx)(Te,{embedded:!0})]})}function Ge(t){let e=W(),r=t.created,m=r.isDynamic?`${r.url}?chatId=${r.exampleChat}`:r.url,k=r.exampleChat!=="<chatId>"?`\uFF08${t.groupName(r.exampleChat)}\uFF09`:"";return(0,o.jsx)("div",{className:"connector-created-wrap",children:(0,o.jsxs)("div",{className:"card connector-created-card",children:[(0,o.jsxs)("p",{className:"connector-created-title ok",children:[e("connectors.createdPrefix",{name:r.name}),r.mode==="fixed"&&r.chatId?(0,o.jsxs)("span",{className:"muted",children:[" \xB7 ",e("connectors.createdDest",{name:t.groupName(r.chatId)})]}):null]}),(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsx)("code",{children:r.url})]}),r.secret?(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsxs)("span",{className:"muted",children:[r.isToken?e("connectors.tokenLabel"):e("connectors.signLabel"),e("connectors.secretOnce")]}),(0,o.jsx)("code",{children:r.secret})]}):null,r.isToken&&r.isDynamic?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageDynamicLede",{gn:k})}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${m}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageDynamicNote")}})]}):r.isToken?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageTokenLede")}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${m}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageTokenNote")}})]}):(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageHmac")+(r.isDynamic?e("connectors.usageHmacDynamic"):"")}})]})})}function We(t){let e=W();return t.connectors.length?(0,o.jsx)(o.Fragment,{children:t.connectors.map(r=>{let m=t.bots.find(v=>v.larkAppId===r.target.botId),k=Ce(r.id),N=(r.verify?.type??"token")==="token",p=e(N?"connectors.badgeToken":"connectors.badgeSign"),I=r.target.mode==="fixed"&&r.target.chatId?e("connectors.dest",{name:t.groupName(r.target.chatId)}):"",f=t.editMsg?.id===r.id?t.editMsg:null,D=t.copiedId===r.id;return(0,o.jsxs)("div",{className:"card connector-item-card",children:[(0,o.jsxs)("div",{className:"connector-item-head",children:[(0,o.jsxs)("div",{className:"connector-item-main",children:[(0,o.jsxs)("div",{className:"connector-item-title",children:[(0,o.jsx)("b",{children:r.name}),(0,o.jsx)("span",{className:r.enabled?"connector-status-pill ok":"connector-status-pill muted",children:r.enabled?e("connectors.enabled"):e("connectors.disabled")})]}),(0,o.jsxs)("div",{className:"connector-item-meta",children:[(0,o.jsx)("span",{children:m?.botName||r.target.botId}),(0,o.jsx)("span",{children:t.kindLabel(r.target.kind)}),(0,o.jsx)("span",{children:t.modeLabel(r.target.mode)}),I?(0,o.jsx)("span",{children:I}):null,(0,o.jsx)("span",{children:p}),(0,o.jsx)("span",{children:r.loggingPolicy?.storePayload!==!1?e("connectors.payloadLogged",{days:r.loggingPolicy?.retentionDays??14}):e("connectors.metadataOnly")})]})]}),(0,o.jsx)("button",{className:`ghost connector-copy-button${D?" copied":""}`,type:"button",onClick:()=>t.onCopy(r),children:e(D?"connectors.copied":"connectors.copy")})]}),(0,o.jsxs)("div",{className:"connector-url-row",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsxs)("code",{children:[k,N?"/<token>":""]})]}),N?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.tokenHint")}}):null,r.target.mode==="dynamic"?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.dynamicReqHint")}}):null,r.promptEnvelope?.instruction?(0,o.jsxs)("div",{className:"muted connector-item-note",children:[e("connectors.instructionPrefix"),r.promptEnvelope.instruction]}):null,f?(0,o.jsx)("div",{className:f.error?"err connector-item-note":"muted connector-item-note",children:f.text}):null,(0,o.jsxs)("div",{className:"connector-item-actions",children:[(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onEdit(r),children:e("connectors.btnEdit")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onTogglePayloadLogging(r),children:r.loggingPolicy?.storePayload!==!1?e("connectors.btnDisablePayloadLog"):e("connectors.btnEnablePayloadLog")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onToggle(r),children:r.enabled?e("connectors.btnDisable"):e("connectors.btnEnable")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onDelete(r),children:e("connectors.btnDel")})]})]},r.id)})}):(0,o.jsx)("p",{className:"muted connector-list-empty",children:e("connectors.empty")})}function eo(t){return re(t,(0,o.jsx)(xe,{tab:"webhooks"}))}function oo(t){return re(t,(0,o.jsx)(xe,{tab:"logs"}))}export{Ze as buildConnectorInstructionUpdateBody,oo as renderConnectorsLogsPage,eo as renderConnectorsPage,He as replaceConnectorById};
|