botmux 2.46.1 → 2.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +5 -10
- package/README.md +5 -10
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +0 -11
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +9 -36
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +1 -26
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +1 -6
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/cursor.d.ts.map +1 -1
- package/dist/adapters/cli/cursor.js +12 -58
- package/dist/adapters/cli/cursor.js.map +1 -1
- package/dist/adapters/cli/gemini.d.ts.map +1 -1
- package/dist/adapters/cli/gemini.js +1 -5
- package/dist/adapters/cli/gemini.js.map +1 -1
- package/dist/adapters/cli/opencode.d.ts.map +1 -1
- package/dist/adapters/cli/opencode.js +1 -19
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +1 -5
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +2 -22
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +1 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +1 -2
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +2 -35
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +0 -59
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +0 -67
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/bots-list-output.d.ts +0 -8
- package/dist/cli/bots-list-output.d.ts.map +1 -1
- package/dist/cli/bots-list-output.js +0 -9
- package/dist/cli/bots-list-output.js.map +1 -1
- package/dist/cli.d.ts +1 -15
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +106 -603
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +2 -11
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -17
- package/dist/config.js.map +1 -1
- package/dist/core/command-handler.d.ts +0 -20
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +313 -762
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +0 -2
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +2 -222
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/role-resolver.d.ts +1 -17
- package/dist/core/role-resolver.d.ts.map +1 -1
- package/dist/core/role-resolver.js +10 -64
- package/dist/core/role-resolver.js.map +1 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +5 -19
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +20 -37
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/types.d.ts +0 -5
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +0 -141
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +24 -543
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +58 -213
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +1 -6
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +1 -9
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/web/app.js +0 -8
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +21 -205
- 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 +5 -43
- 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 +0 -4
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/workflows.js +3 -3
- package/dist/dashboard/web/workflows.js.map +1 -1
- package/dist/dashboard/workflow-api.d.ts +1 -8
- package/dist/dashboard/workflow-api.d.ts.map +1 -1
- package/dist/dashboard/workflow-api.js +4 -19
- package/dist/dashboard/workflow-api.js.map +1 -1
- package/dist/dashboard-web/app.js +375 -539
- package/dist/dashboard-web/index.html +1 -3
- package/dist/dashboard-web/style.css +0 -22
- package/dist/dashboard.js +2 -199
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +11 -104
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +11 -104
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +3 -108
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +50 -480
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +18 -241
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +0 -83
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +70 -286
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +4 -29
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts +1 -2
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +2 -3
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/im/lark/identity-cache.d.ts.map +1 -1
- package/dist/im/lark/identity-cache.js +3 -3
- package/dist/im/lark/identity-cache.js.map +1 -1
- package/dist/im/lark/md-card.d.ts +2 -20
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +17 -49
- package/dist/im/lark/md-card.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +31 -87
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/workflow-card-handler.d.ts +2 -2
- package/dist/im/lark/workflow-card-handler.d.ts.map +1 -1
- package/dist/im/lark/workflow-card-handler.js +1 -12
- package/dist/im/lark/workflow-card-handler.js.map +1 -1
- package/dist/im/lark/workflow-progress-card.d.ts.map +1 -1
- package/dist/im/lark/workflow-progress-card.js +0 -53
- package/dist/im/lark/workflow-progress-card.js.map +1 -1
- package/dist/services/codex-bridge-queue.d.ts +0 -1
- package/dist/services/codex-bridge-queue.d.ts.map +1 -1
- package/dist/services/codex-bridge-queue.js +0 -23
- package/dist/services/codex-bridge-queue.js.map +1 -1
- package/dist/services/codex-transcript.d.ts +0 -1
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/feishu-task-client.d.ts +28 -0
- package/dist/services/feishu-task-client.d.ts.map +1 -0
- package/dist/services/feishu-task-client.js +123 -0
- package/dist/services/feishu-task-client.js.map +1 -0
- package/dist/services/grant-store.d.ts +2 -12
- package/dist/services/grant-store.d.ts.map +1 -1
- package/dist/services/grant-store.js +4 -51
- package/dist/services/grant-store.js.map +1 -1
- package/dist/services/group-creator.d.ts +0 -10
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +1 -26
- package/dist/services/group-creator.js.map +1 -1
- package/dist/services/groups-store.d.ts +0 -30
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +12 -85
- package/dist/services/groups-store.js.map +1 -1
- package/dist/services/project-scanner.d.ts +0 -10
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +0 -11
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/session-store.js +1 -1
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/task-store.d.ts +37 -0
- package/dist/services/task-store.d.ts.map +1 -0
- package/dist/services/task-store.js +115 -0
- package/dist/services/task-store.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts +1 -8
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +2 -20
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-tmux.d.ts +22 -0
- package/dist/setup/ensure-tmux.d.ts.map +1 -1
- package/dist/setup/ensure-tmux.js +1 -25
- package/dist/setup/ensure-tmux.js.map +1 -1
- package/dist/setup/verify-permissions.d.ts.map +1 -1
- package/dist/setup/verify-permissions.js +1 -15
- package/dist/setup/verify-permissions.js.map +1 -1
- package/dist/skills/definitions.d.ts +0 -2
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +12 -178
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/installer.d.ts +0 -34
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +2 -119
- package/dist/skills/installer.js.map +1 -1
- package/dist/types.d.ts +0 -25
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +0 -50
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js +0 -83
- package/dist/utils/bot-routing.js.map +1 -1
- package/dist/utils/user-token.d.ts.map +1 -1
- package/dist/utils/user-token.js +2 -0
- package/dist/utils/user-token.js.map +1 -1
- package/dist/worker.js +27 -198
- package/dist/worker.js.map +1 -1
- package/dist/workflows/attempt-resume.d.ts.map +1 -1
- package/dist/workflows/attempt-resume.js +2 -2
- package/dist/workflows/attempt-resume.js.map +1 -1
- package/dist/workflows/definition.d.ts +9 -412
- package/dist/workflows/definition.d.ts.map +1 -1
- package/dist/workflows/definition.js +3 -238
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +11 -114
- package/dist/workflows/events/payloads.d.ts.map +1 -1
- package/dist/workflows/events/payloads.js +0 -46
- package/dist/workflows/events/payloads.js.map +1 -1
- package/dist/workflows/events/replay.d.ts +0 -21
- package/dist/workflows/events/replay.d.ts.map +1 -1
- package/dist/workflows/events/replay.js +0 -103
- package/dist/workflows/events/replay.js.map +1 -1
- package/dist/workflows/events/schema.d.ts +1017 -1712
- package/dist/workflows/events/schema.d.ts.map +1 -1
- package/dist/workflows/events/schema.js +1 -37
- package/dist/workflows/events/schema.js.map +1 -1
- package/dist/workflows/events/types.d.ts +1 -5
- package/dist/workflows/events/types.d.ts.map +1 -1
- package/dist/workflows/loader.d.ts +0 -14
- package/dist/workflows/loader.d.ts.map +1 -1
- package/dist/workflows/loader.js +0 -27
- package/dist/workflows/loader.js.map +1 -1
- package/dist/workflows/loop.js +0 -58
- package/dist/workflows/loop.js.map +1 -1
- package/dist/workflows/ops-projection.d.ts +0 -58
- package/dist/workflows/ops-projection.d.ts.map +1 -1
- package/dist/workflows/ops-projection.js +0 -74
- package/dist/workflows/ops-projection.js.map +1 -1
- package/dist/workflows/orchestrator.d.ts +1 -65
- package/dist/workflows/orchestrator.d.ts.map +1 -1
- package/dist/workflows/orchestrator.js +74 -486
- package/dist/workflows/orchestrator.js.map +1 -1
- package/dist/workflows/output-binding.d.ts +1 -8
- package/dist/workflows/output-binding.d.ts.map +1 -1
- package/dist/workflows/output-binding.js +11 -75
- package/dist/workflows/output-binding.js.map +1 -1
- package/dist/workflows/runtime.d.ts +1 -1
- package/dist/workflows/runtime.d.ts.map +1 -1
- package/dist/workflows/runtime.js +4 -39
- package/dist/workflows/runtime.js.map +1 -1
- package/dist/workflows/wait.d.ts +2 -23
- package/dist/workflows/wait.d.ts.map +1 -1
- package/dist/workflows/wait.js +17 -39
- package/dist/workflows/wait.js.map +1 -1
- package/package.json +1 -1
- package/dist/adapters/adopt-route.d.ts +0 -63
- package/dist/adapters/adopt-route.d.ts.map +0 -1
- package/dist/adapters/adopt-route.js +0 -195
- package/dist/adapters/adopt-route.js.map +0 -1
- package/dist/adapters/cli/codex-app.d.ts +0 -4
- package/dist/adapters/cli/codex-app.d.ts.map +0 -1
- package/dist/adapters/cli/codex-app.js +0 -72
- package/dist/adapters/cli/codex-app.js.map +0 -1
- package/dist/adapters/cli/hermes.d.ts +0 -4
- package/dist/adapters/cli/hermes.d.ts.map +0 -1
- package/dist/adapters/cli/hermes.js +0 -40
- package/dist/adapters/cli/hermes.js.map +0 -1
- package/dist/adapters/cli/mira.d.ts +0 -4
- package/dist/adapters/cli/mira.d.ts.map +0 -1
- package/dist/adapters/cli/mira.js +0 -67
- package/dist/adapters/cli/mira.js.map +0 -1
- package/dist/adapters/cli/mtr.d.ts +0 -5
- package/dist/adapters/cli/mtr.d.ts.map +0 -1
- package/dist/adapters/cli/mtr.js +0 -62
- package/dist/adapters/cli/mtr.js.map +0 -1
- package/dist/adapters/hook-command.d.ts +0 -18
- package/dist/adapters/hook-command.d.ts.map +0 -1
- package/dist/adapters/hook-command.js +0 -38
- package/dist/adapters/hook-command.js.map +0 -1
- package/dist/adapters/hook-installer.d.ts +0 -14
- package/dist/adapters/hook-installer.d.ts.map +0 -1
- package/dist/adapters/hook-installer.js +0 -192
- package/dist/adapters/hook-installer.js.map +0 -1
- package/dist/codex-app-runner.d.ts +0 -3
- package/dist/codex-app-runner.d.ts.map +0 -1
- package/dist/codex-app-runner.js +0 -512
- package/dist/codex-app-runner.js.map +0 -1
- package/dist/core/ask-api.d.ts +0 -47
- package/dist/core/ask-api.d.ts.map +0 -1
- package/dist/core/ask-api.js +0 -139
- package/dist/core/ask-api.js.map +0 -1
- package/dist/core/ask-args.d.ts +0 -53
- package/dist/core/ask-args.d.ts.map +0 -1
- package/dist/core/ask-args.js +0 -122
- package/dist/core/ask-args.js.map +0 -1
- package/dist/core/ask-broker.d.ts +0 -98
- package/dist/core/ask-broker.d.ts.map +0 -1
- package/dist/core/ask-broker.js +0 -329
- package/dist/core/ask-broker.js.map +0 -1
- package/dist/core/ask-hook/claude-code.d.ts +0 -50
- package/dist/core/ask-hook/claude-code.d.ts.map +0 -1
- package/dist/core/ask-hook/claude-code.js +0 -145
- package/dist/core/ask-hook/claude-code.js.map +0 -1
- package/dist/core/ask-hook/codex.d.ts +0 -43
- package/dist/core/ask-hook/codex.d.ts.map +0 -1
- package/dist/core/ask-hook/codex.js +0 -69
- package/dist/core/ask-hook/codex.js.map +0 -1
- package/dist/core/ask-hook/opencode.d.ts +0 -41
- package/dist/core/ask-hook/opencode.d.ts.map +0 -1
- package/dist/core/ask-hook/opencode.js +0 -108
- package/dist/core/ask-hook/opencode.js.map +0 -1
- package/dist/core/ask-hook/registry.d.ts +0 -3
- package/dist/core/ask-hook/registry.d.ts.map +0 -1
- package/dist/core/ask-hook/registry.js +0 -12
- package/dist/core/ask-hook/registry.js.map +0 -1
- package/dist/core/ask-hook/types.d.ts +0 -26
- package/dist/core/ask-hook/types.d.ts.map +0 -1
- package/dist/core/ask-hook/types.js +0 -2
- package/dist/core/ask-hook/types.js.map +0 -1
- package/dist/core/ask-types.d.ts +0 -146
- package/dist/core/ask-types.d.ts.map +0 -1
- package/dist/core/ask-types.js +0 -18
- package/dist/core/ask-types.js.map +0 -1
- package/dist/core/trigger-session.d.ts +0 -9
- package/dist/core/trigger-session.d.ts.map +0 -1
- package/dist/core/trigger-session.js +0 -158
- package/dist/core/trigger-session.js.map +0 -1
- package/dist/dashboard/connector-api.d.ts +0 -3
- package/dist/dashboard/connector-api.d.ts.map +0 -1
- package/dist/dashboard/connector-api.js +0 -351
- package/dist/dashboard/connector-api.js.map +0 -1
- package/dist/dashboard/federated-group-core.d.ts +0 -54
- package/dist/dashboard/federated-group-core.d.ts.map +0 -1
- package/dist/dashboard/federated-group-core.js +0 -165
- package/dist/dashboard/federated-group-core.js.map +0 -1
- package/dist/dashboard/federation-api.d.ts +0 -42
- package/dist/dashboard/federation-api.d.ts.map +0 -1
- package/dist/dashboard/federation-api.js +0 -408
- package/dist/dashboard/federation-api.js.map +0 -1
- package/dist/dashboard/federation-spoke-api.d.ts +0 -76
- package/dist/dashboard/federation-spoke-api.d.ts.map +0 -1
- package/dist/dashboard/federation-spoke-api.js +0 -618
- package/dist/dashboard/federation-spoke-api.js.map +0 -1
- package/dist/dashboard/team-group.d.ts +0 -18
- package/dist/dashboard/team-group.d.ts.map +0 -1
- package/dist/dashboard/team-group.js +0 -7
- package/dist/dashboard/team-group.js.map +0 -1
- package/dist/dashboard/trigger-api.d.ts +0 -13
- package/dist/dashboard/trigger-api.d.ts.map +0 -1
- package/dist/dashboard/trigger-api.js +0 -77
- package/dist/dashboard/trigger-api.js.map +0 -1
- package/dist/dashboard/web/connectors.d.ts +0 -2
- package/dist/dashboard/web/connectors.d.ts.map +0 -1
- package/dist/dashboard/web/connectors.js +0 -187
- package/dist/dashboard/web/connectors.js.map +0 -1
- package/dist/dashboard/web/team-federation.d.ts +0 -3
- package/dist/dashboard/web/team-federation.d.ts.map +0 -1
- package/dist/dashboard/web/team-federation.js +0 -487
- package/dist/dashboard/web/team-federation.js.map +0 -1
- package/dist/dashboard/webhook-routes.d.ts +0 -19
- package/dist/dashboard/webhook-routes.d.ts.map +0 -1
- package/dist/dashboard/webhook-routes.js +0 -321
- package/dist/dashboard/webhook-routes.js.map +0 -1
- package/dist/im/lark/ask-card.d.ts +0 -55
- package/dist/im/lark/ask-card.d.ts.map +0 -1
- package/dist/im/lark/ask-card.js +0 -328
- package/dist/im/lark/ask-card.js.map +0 -1
- package/dist/mira-output.d.ts +0 -3
- package/dist/mira-output.d.ts.map +0 -1
- package/dist/mira-output.js +0 -136
- package/dist/mira-output.js.map +0 -1
- package/dist/mira-runner.d.ts +0 -3
- package/dist/mira-runner.d.ts.map +0 -1
- package/dist/mira-runner.js +0 -534
- package/dist/mira-runner.js.map +0 -1
- package/dist/services/bot-owner-store.d.ts +0 -28
- package/dist/services/bot-owner-store.d.ts.map +0 -1
- package/dist/services/bot-owner-store.js +0 -82
- package/dist/services/bot-owner-store.js.map +0 -1
- package/dist/services/bot-profile-store.d.ts +0 -16
- package/dist/services/bot-profile-store.d.ts.map +0 -1
- package/dist/services/bot-profile-store.js +0 -98
- package/dist/services/bot-profile-store.js.map +0 -1
- package/dist/services/brand-store.d.ts +0 -15
- package/dist/services/brand-store.d.ts.map +0 -1
- package/dist/services/brand-store.js +0 -47
- package/dist/services/brand-store.js.map +0 -1
- package/dist/services/card-prefs-store.d.ts +0 -20
- package/dist/services/card-prefs-store.d.ts.map +0 -1
- package/dist/services/card-prefs-store.js +0 -82
- package/dist/services/card-prefs-store.js.map +0 -1
- package/dist/services/connector-store.d.ts +0 -58
- package/dist/services/connector-store.d.ts.map +0 -1
- package/dist/services/connector-store.js +0 -79
- package/dist/services/connector-store.js.map +0 -1
- package/dist/services/deployment-identity.d.ts +0 -22
- package/dist/services/deployment-identity.d.ts.map +0 -1
- package/dist/services/deployment-identity.js +0 -67
- package/dist/services/deployment-identity.js.map +0 -1
- package/dist/services/federation-membership-store.d.ts +0 -23
- package/dist/services/federation-membership-store.d.ts.map +0 -1
- package/dist/services/federation-membership-store.js +0 -66
- package/dist/services/federation-membership-store.js.map +0 -1
- package/dist/services/federation-roster.d.ts +0 -54
- package/dist/services/federation-roster.d.ts.map +0 -1
- package/dist/services/federation-roster.js +0 -51
- package/dist/services/federation-roster.js.map +0 -1
- package/dist/services/federation-store.d.ts +0 -76
- package/dist/services/federation-store.d.ts.map +0 -1
- package/dist/services/federation-store.js +0 -133
- package/dist/services/federation-store.js.map +0 -1
- package/dist/services/hermes-transcript.d.ts +0 -7
- package/dist/services/hermes-transcript.d.ts.map +0 -1
- package/dist/services/hermes-transcript.js +0 -117
- package/dist/services/hermes-transcript.js.map +0 -1
- package/dist/services/invite-store.d.ts +0 -28
- package/dist/services/invite-store.d.ts.map +0 -1
- package/dist/services/invite-store.js +0 -85
- package/dist/services/invite-store.js.map +0 -1
- package/dist/services/pairing-store.d.ts +0 -47
- package/dist/services/pairing-store.d.ts.map +0 -1
- package/dist/services/pairing-store.js +0 -132
- package/dist/services/pairing-store.js.map +0 -1
- package/dist/services/relay-picker.d.ts +0 -22
- package/dist/services/relay-picker.d.ts.map +0 -1
- package/dist/services/relay-picker.js +0 -62
- package/dist/services/relay-picker.js.map +0 -1
- package/dist/services/send-policy.d.ts +0 -55
- package/dist/services/send-policy.d.ts.map +0 -1
- package/dist/services/send-policy.js +0 -47
- package/dist/services/send-policy.js.map +0 -1
- package/dist/services/team-roster.d.ts +0 -38
- package/dist/services/team-roster.d.ts.map +0 -1
- package/dist/services/team-roster.js +0 -82
- package/dist/services/team-roster.js.map +0 -1
- package/dist/services/team-store.d.ts +0 -54
- package/dist/services/team-store.d.ts.map +0 -1
- package/dist/services/team-store.js +0 -156
- package/dist/services/team-store.js.map +0 -1
- package/dist/services/trigger-log-store.d.ts +0 -46
- package/dist/services/trigger-log-store.d.ts.map +0 -1
- package/dist/services/trigger-log-store.js +0 -132
- package/dist/services/trigger-log-store.js.map +0 -1
- package/dist/services/trigger-types.d.ts +0 -57
- package/dist/services/trigger-types.d.ts.map +0 -1
- package/dist/services/trigger-types.js +0 -28
- package/dist/services/trigger-types.js.map +0 -1
- package/dist/services/webhook-key.d.ts +0 -16
- package/dist/services/webhook-key.d.ts.map +0 -1
- package/dist/services/webhook-key.js +0 -123
- package/dist/services/webhook-key.js.map +0 -1
- package/dist/services/webhook-lifecycle-extractors.d.ts +0 -15
- package/dist/services/webhook-lifecycle-extractors.d.ts.map +0 -1
- package/dist/services/webhook-lifecycle-extractors.js +0 -59
- package/dist/services/webhook-lifecycle-extractors.js.map +0 -1
- package/dist/services/webhook-lifecycle-store.d.ts +0 -45
- package/dist/services/webhook-lifecycle-store.d.ts.map +0 -1
- package/dist/services/webhook-lifecycle-store.js +0 -159
- package/dist/services/webhook-lifecycle-store.js.map +0 -1
- package/dist/utils/daemon-discovery.d.ts +0 -11
- package/dist/utils/daemon-discovery.d.ts.map +0 -1
- package/dist/utils/daemon-discovery.js +0 -59
- package/dist/utils/daemon-discovery.js.map +0 -1
- package/dist/workflows/trigger-from-envelope.d.ts +0 -13
- package/dist/workflows/trigger-from-envelope.d.ts.map +0 -1
- package/dist/workflows/trigger-from-envelope.js +0 -67
- package/dist/workflows/trigger-from-envelope.js.map +0 -1
|
@@ -58,33 +58,9 @@ function probeTmuxVersion() {
|
|
|
58
58
|
* alone — it just changes the socket directory and is the user's deliberate
|
|
59
59
|
* override if set.
|
|
60
60
|
*/
|
|
61
|
-
const TMUX_PATH_EXTRAS = [
|
|
62
|
-
'/opt/homebrew/bin',
|
|
63
|
-
'/opt/homebrew/sbin',
|
|
64
|
-
'/usr/local/bin',
|
|
65
|
-
'/usr/local/sbin',
|
|
66
|
-
'/usr/bin',
|
|
67
|
-
'/bin',
|
|
68
|
-
'/usr/sbin',
|
|
69
|
-
'/sbin',
|
|
70
|
-
];
|
|
71
|
-
function withTmuxSearchPath(pathValue) {
|
|
72
|
-
const seen = new Set();
|
|
73
|
-
const merged = [];
|
|
74
|
-
for (const part of [...(pathValue?.split(':') ?? []), ...TMUX_PATH_EXTRAS]) {
|
|
75
|
-
if (!part || seen.has(part))
|
|
76
|
-
continue;
|
|
77
|
-
seen.add(part);
|
|
78
|
-
merged.push(part);
|
|
79
|
-
}
|
|
80
|
-
return merged.join(':');
|
|
81
|
-
}
|
|
82
61
|
export function tmuxEnv(env = process.env) {
|
|
83
62
|
const { TMUX: _tmux, TMUX_PANE: _pane, ...rest } = env;
|
|
84
|
-
return
|
|
85
|
-
...rest,
|
|
86
|
-
PATH: withTmuxSearchPath(rest.PATH),
|
|
87
|
-
};
|
|
63
|
+
return rest;
|
|
88
64
|
}
|
|
89
65
|
/**
|
|
90
66
|
* Functional tmux probe — actually starts a tmux server and tears it down.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-tmux.js","sourceRoot":"","sources":["../../src/setup/ensure-tmux.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAA0C,MAAM,sBAAsB,CAAC;AAe9F,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE;YAC9B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,OAAO,EAAE;SACf,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"ensure-tmux.js","sourceRoot":"","sources":["../../src/setup/ensure-tmux.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAA0C,MAAM,sBAAsB,CAAC;AAe9F,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE;YAC9B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,OAAO,EAAE;SACf,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,OAAO,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAChE,MAAM,QAAQ,GAAG,aAAa,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC1D,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE;QAC1F,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QACnC,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,OAAO,EAAE;KACf,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,6BAA6B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IACrF,CAAC;IACD,sEAAsE;IACtE,wEAAwE;IACxE,mEAAmE;IACnE,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;kDAEkD;AAClD,SAAS,UAAU,CAAC,GAAa,EAAE,IAAkB;IACnD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,IAAI,CAAC,gBAAgB;QAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;sBAEsB;AACtB,SAAS,gBAAgB,CAAC,EAAkB,EAAE,GAAW,EAAE,IAAkB;IAC3E,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,CAAI,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAChD,KAAK,OAAO,CAAC,CAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QAC5E,KAAK,KAAK,CAAC,CAAK,OAAO,UAAU,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3E,KAAK,KAAK,CAAC,CAAK,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACvE,KAAK,KAAK,CAAC,CAAK,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACvE,KAAK,QAAQ,CAAC,CAAE,OAAO,UAAU,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9E,KAAK,KAAK,CAAC,CAAK,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,KAAK,QAAQ,CAAC,CAAE,OAAO,UAAU,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1E,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;;;8BAI8B;AAC9B,SAAS,sBAAsB,CAAC,IAAkB;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAC/B,CAAC;AAED,yEAAyE;AACzE,SAAS,oBAAoB,CAAC,EAAkB,EAAE,GAAW;IAC3D,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,CAAC,OAAO,gBAAgB,GAAG,EAAE,CAAC;QAC1C,KAAK,OAAO,CAAC,CAAC,OAAO,mCAAmC,GAAG,EAAE,CAAC;QAC9D,KAAK,KAAK,CAAC,CAAC,OAAO,kDAAkD,GAAG,EAAE,CAAC;QAC3E,KAAK,KAAK,CAAC,CAAC,OAAO,uBAAuB,GAAG,EAAE,CAAC;QAChD,KAAK,KAAK,CAAC,CAAC,OAAO,uBAAuB,GAAG,EAAE,CAAC;QAChD,KAAK,QAAQ,CAAC,CAAC,OAAO,8BAA8B,GAAG,EAAE,CAAC;QAC1D,KAAK,KAAK,CAAC,CAAC,OAAO,gBAAgB,GAAG,EAAE,CAAC;QACzC,KAAK,QAAQ,CAAC,CAAC,OAAO,0BAA0B,GAAG,EAAE,CAAC;QACtD,OAAO,CAAC,CAAC,OAAO,UAAU,GAAG,GAAG,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAChD,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,oCAAoC;KAC3D,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAmB;IAClD,MAAM,QAAQ,GAAG,IAAI,IAAI,cAAc,EAAE,CAAC;IAE1C,4CAA4C;IAC5C,wEAAwE;IACxE,yEAAyE;IACzE,mDAAmD;IACnD,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACjF,CAAC;IAED,gEAAgE;IAChE,uEAAuE;IACvE,2CAA2C;IAC3C,MAAM,cAAc,GAAG,gBAAgB,EAAE,CAAC;IAC1C,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,GAAG,cAAc,qBAAqB,YAAY,CAAC,MAAM,EAAE;YACnE,aAAa,EAAE,4CAA4C;SAC5D,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAErC,uDAAuD;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,EAAE,KAAK,SAAS;YAAE,SAAS;QAC/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,KAAK;YAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;YAC1C,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,CAAC,OAAO,cAAc,EAAE,GAAG,CAAC,CAAC;gBAC9D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC7F,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,SAAS,CAAC;IACnF,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG;QAClB,cAAc;QACd,MAAM;QACN,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC9B,CAAC;IACF,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,WAAW,CAAC,IAAI,CAAC,sHAAsH,CAAC,CAAC;IAC3I,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QAClG,WAAW,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;IAC1H,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,aAAa,EAAE,MAAM;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-permissions.d.ts","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"verify-permissions.d.ts","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAAa,EAgBjD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGnF;AAID,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,EACvB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrD,OAAO,CAAC,oBAAoB,CAAC,CA0D/B;AAID,MAAM,MAAM,gBAAgB,GACxB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV;;;;OAIG;IACH,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,MAAM,EACF,WAAW,GACX,kBAAkB,GAClB,iBAAiB,GACjB,YAAY,GACZ,kBAAkB,GAClB,SAAS,GACT,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACpE,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,aAAa,EAAE,CAa3F"}
|
|
@@ -30,11 +30,6 @@ import * as Lark from '@larksuiteoapi/node-sdk';
|
|
|
30
30
|
export const BOTMUX_REQUIRED_SCOPES = [
|
|
31
31
|
{ name: 'im:message', desc: '收发消息', critical: true },
|
|
32
32
|
{ name: 'im:message.group_at_msg:readonly', desc: '群消息接收', critical: true },
|
|
33
|
-
// 没有这个 scope,listChatMessages(container_id_type=chat)只能拿到 @bot 的
|
|
34
|
-
// 消息,拉不到群里的全量历史,botmux history / 群上下文回溯失效。标 critical 是
|
|
35
|
-
// 为了让启动自检在它缺失时也会 DM 管理员——非 critical 的缺失只在同时缺别的
|
|
36
|
-
// critical 项时才会被提示。
|
|
37
|
-
{ name: 'im:message.group_msg', desc: '群组历史消息读取(botmux history、群上下文)', critical: true },
|
|
38
33
|
{ name: 'im:resource', desc: '消息附件下载', critical: true },
|
|
39
34
|
{ name: 'im:chat:read', desc: '群信息读取', critical: true },
|
|
40
35
|
// /group 多 bot 建群解析靠 chatMembers.isInChat 判断每个 bot 是否在群。该 API
|
|
@@ -42,10 +37,6 @@ export const BOTMUX_REQUIRED_SCOPES = [
|
|
|
42
37
|
// 任一即可(OR),但实际可申请的只有 im:chat.members:read,故只校验它。缺它时
|
|
43
38
|
// isInChat 抛 Access denied 被吞,bot 静默掉出 roster,/group fail-closed 建不了群。
|
|
44
39
|
{ name: 'im:chat.members:read', desc: '群成员读取(/group 建群解析、判断 bot 是否在群)', critical: true },
|
|
45
|
-
// 拉群把人/机器人加进群(chatMembers.create)需要写权限;缺它时建群能成、加成员
|
|
46
|
-
// 报 code 99991672 Access denied → 跨部署拉群「机器人进了但人没进」。非 critical:
|
|
47
|
-
// 核心收发消息不依赖它,只 /group 与跨部署 federation 拉群需要,缺失只 WARN。
|
|
48
|
-
{ name: 'im:chat.members:write_only', desc: '群成员写入(/group、跨部署拉群把人和机器人加进群)', critical: false },
|
|
49
40
|
{ name: 'contact:user.base:readonly', desc: '用户基本信息', critical: true },
|
|
50
41
|
// event-dispatcher.checkRequiredScopes 历史上一直对这一项 DM 管理员("多 bot
|
|
51
42
|
// 协作收不到事件"),等价于 critical 处理;保留 critical 标记是为了让启动
|
|
@@ -147,12 +138,7 @@ export async function checkRequiredScopes(appId, appSecret, brand = 'feishu') {
|
|
|
147
138
|
const client = new Lark.Client({ appId, appSecret, domain, loggerLevel: Lark.LoggerLevel.error });
|
|
148
139
|
let resp;
|
|
149
140
|
try {
|
|
150
|
-
|
|
151
|
-
// generated application.scope.list, which sends `{}` as a GET body and
|
|
152
|
-
// trips gateway 411s — same root cause as the IM read fixes. Inlined here
|
|
153
|
-
// (rather than importing larkGet) to keep setup code decoupled from the
|
|
154
|
-
// runtime IM client module. Resolves to { code, msg, data }, unchanged.
|
|
155
|
-
resp = await client.request({ method: 'GET', url: '/open-apis/application/v6/scopes' });
|
|
141
|
+
resp = await client.application.scope.list();
|
|
156
142
|
}
|
|
157
143
|
catch (err) {
|
|
158
144
|
return { ok: false, error: 'network', message: `scope.list 调用失败: ${err?.code ?? err?.message ?? 'unknown'}` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-permissions.js","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAgBhD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAoB;IACrD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACpD,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC3E,
|
|
1
|
+
{"version":3,"file":"verify-permissions.js","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,6 @@ export interface SkillDef {
|
|
|
13
13
|
/** Markdown content including YAML frontmatter */
|
|
14
14
|
content: string;
|
|
15
15
|
}
|
|
16
|
-
export declare const ASK_SKILL = "---\nname: botmux-ask\ndescription: \u5728\u5F53\u524D\u98DE\u4E66/Lark \u8BDD\u9898\u91CC\u5411\u7528\u6237\u53D1\u8D77\u963B\u585E\u5F0F\u9009\u62E9\u9898\u5E76\u7B49\u5F85\u56DE\u7B54\u3002\u89E6\u53D1\u573A\u666F\uFF1A\u4F60\u9700\u8981\u7528\u6237\u5728\u591A\u4E2A\u660E\u786E\u9009\u9879\u4E2D\u505A\u9009\u62E9\u3001\u786E\u8BA4\u98CE\u9669\u52A8\u4F5C\u3001\u51B3\u5B9A\u7EE7\u7EED/\u56DE\u6EDA/\u4E2D\u6B62\uFF0C\u4E14\u540E\u7EED\u547D\u4EE4\u9700\u8981\u62FF\u5230\u673A\u5668\u53EF\u89E3\u6790\u7684\u7B54\u6848\u3002\u4F7F\u7528 botmux ask buttons\uFF0Cstdout \u53EA\u8FD4\u56DE\u9009\u4E2D\u7684 key\uFF0C\u9002\u5408 shell \u811A\u672C\u548C CLI agent \u7EE7\u7EED\u6267\u884C\u3002\n---\n\n# botmux-ask \u2014 \u963B\u585E\u5F0F\u5411\u7528\u6237\u63D0\u95EE\n\n\u5F53\u4F60\u9700\u8981\u7528\u6237\u5728\u660E\u786E\u9009\u9879\u91CC\u505A\u9009\u62E9\uFF0C\u5E76\u4E14\u540E\u7EED\u6B65\u9AA4\u5FC5\u987B\u7B49\u7528\u6237\u56DE\u7B54\u540E\u624D\u80FD\u7EE7\u7EED\u65F6\uFF0C\u4F7F\u7528 `botmux ask buttons`\u3002\n\n## \u4EC0\u4E48\u65F6\u5019\u7528\n\n- \u53D1\u5E03\u3001\u56DE\u6EDA\u3001\u5220\u9664\u3001\u5199\u6587\u4EF6\u3001\u8C03\u7528\u5916\u90E8 API \u7B49\u98CE\u9669\u52A8\u4F5C\u524D\uFF0C\u9700\u8981\u7528\u6237\u9009\u62E9\n- \u9700\u6C42\u5B58\u5728 2-6 \u4E2A\u6E05\u6670\u5206\u652F\uFF0C\u7EE7\u7EED\u6267\u884C\u524D\u5FC5\u987B\u62FF\u5230\u5176\u4E2D\u4E00\u4E2A key\n- \u4F60\u6B63\u5728 shell / CLI \u91CC\u6267\u884C\u4EFB\u52A1\uFF0C\u9700\u8981\u628A\u7528\u6237\u9009\u62E9\u8D4B\u7ED9\u53D8\u91CF\u7EE7\u7EED\u8DD1\n\n## \u4E0D\u8981\u7528\n\n- \u53EA\u662F\u7ED9\u7528\u6237\u6C47\u62A5\u8FDB\u5C55\uFF1A\u7528 `botmux send`\n- \u9700\u8981\u81EA\u7531\u6587\u672C\u957F\u56DE\u7B54\uFF1Av0.1.7 \u4E0D\u652F\u6301\uFF0C\u5148\u7528 `botmux send` \u95EE\u7528\u6237\n- workflow \u8282\u70B9\u5BA1\u6279\uFF1Aworkflow \u5DF2\u7ECF\u6709 humanGate / decision\uFF0C\u4E0D\u8981\u5957\u4E24\u5C42 ask\n\n## Canonical \u7528\u6CD5\n\n```bash\nchoice=$(botmux ask buttons --options \"deploy=\u7EE7\u7EED\u53D1\u5E03,rollback=\u56DE\u6EDA,abort=\u4E2D\u6B62\" \"\u7EBF\u4E0A latency \u6DA8\u4E86 30%\uFF0C\u4E0B\u4E00\u6B65\u600E\u4E48\u5904\u7406\uFF1F\")\ncase \"$choice\" in\n deploy) echo \"\u7EE7\u7EED\u53D1\u5E03\" ;;\n rollback) echo \"\u6267\u884C\u56DE\u6EDA\" ;;\n abort) echo \"\u4E2D\u6B62\" ;;\nesac\n```\n\n`key=label` \u91CC\uFF0C**stdout \u6C38\u8FDC\u8FD4\u56DE key**\uFF0C\u6309\u94AE\u4E0A\u663E\u793A label\u3002\u53EA\u5199 `yes,no` \u65F6 key \u548C label \u76F8\u540C\u3002\n\n\u517C\u5BB9 alias\uFF1A`botmux ask --options \"yes,no\" \"\u7EE7\u7EED\u5417\uFF1F\"` \u53EF\u4EE5\u7528\uFF0C\u4F46\u6587\u6863\u548C\u65B0\u811A\u672C\u4F18\u5148\u5199 `botmux ask buttons`\uFF0C\u7ED9\u672A\u6765 `ask text` / `ask confirm` \u7559\u7A7A\u95F4\u3002\n\n## JSON \u8F93\u51FA\n\n```bash\nbotmux ask buttons --json --options \"yes=\u7EE7\u7EED,no=\u505C\u6B62\" \"\u7EE7\u7EED\u6267\u884C\u5417\uFF1F\"\n```\n\nstdout \u4E3A\u4E00\u884C JSON\u3002\u6CE8\u610F\uFF1A`--json` \u8986\u76D6\u6240\u6709\u7ED3\u679C\u7C7B\u578B\uFF1B\u8D85\u65F6 / \u5931\u6548\u65F6\u4E5F\u4F1A\u8F93\u51FA JSON\uFF0C\n\u540C\u65F6\u4FDD\u7559\u975E 0 exit code\u3002\u811A\u672C\u5224\u65AD\u8D85\u65F6\u5FC5\u987B\u770B exit code \u6216 `timedOut` \u5B57\u6BB5\u3002\n\n```json\n{\"selected\":\"yes\",\"by\":\"ou_xxx\",\"timedOut\":false,\"comment\":null}\n```\n\n## \u9000\u51FA\u7801\u548C stdout \u5951\u7EA6\n\n- \u6210\u529F\uFF1Astdout \u4E00\u884C `<selected_key>`\uFF0Cexit 0\n- `--json`\uFF1Astdout \u4E00\u884C JSON\uFF08\u5305\u62EC\u8D85\u65F6 / \u5931\u6548\uFF09\uFF0Cexit code \u4ECD\u6309\u7ED3\u679C\u8FD4\u56DE\n- \u8D85\u65F6\uFF1A\u9ED8\u8BA4\u6A21\u5F0F stdout \u4E3A\u7A7A\uFF0Cexit 124\uFF1B`--json` \u65F6 `{\"selected\":null,\"timedOut\":true,...}`\n- \u7F3A\u5C11 botmux \u73AF\u5883\u53D8\u91CF / \u53C2\u6570\u9519\u8BEF\uFF1Astdout \u4E3A\u7A7A\uFF0Cexit 2\n- daemon \u4E0D\u53EF\u8FBE\u6216 ask \u88AB daemon restart \u5931\u6548\uFF1A\u9ED8\u8BA4\u6A21\u5F0F stdout \u4E3A\u7A7A\uFF0Cexit 3\uFF1B`--json` \u65F6 `selected:null`\n\n\u6240\u6709\u4EBA\u7C7B\u53EF\u8BFB\u63D0\u793A\u90FD\u5728 stderr\uFF0C\u8C03\u7528\u65B9\u4E0D\u8981 parse stderr\u3002\n\n## \u9009\u9879\u89C4\u5219\n\n- `--options` \u5FC5\u586B\uFF0C\u81F3\u5C11 2 \u9879\uFF0C\u9017\u53F7\u5206\u9694\n- \u63A8\u8350 `key=label`\uFF0Ckey \u7528\u7A33\u5B9A\u82F1\u6587\u77ED\u8BCD\uFF0Clabel \u7ED9\u7528\u6237\u770B\n- \u4E0D\u652F\u6301 comment / multi-select / free-form text\uFF08v0.1.7 \u8303\u56F4\u5916\uFF09\n- \u9ED8\u8BA4\u8D85\u65F6 300 \u79D2\uFF0C\u53EF\u7528 `--timeout <seconds>` \u8C03\u6574\n";
|
|
17
|
-
export declare const ASK_SKILL_NAME = "botmux-ask";
|
|
18
16
|
export declare const BUILTIN_SKILLS: SkillDef[];
|
|
19
17
|
/** Skills that earlier botmux versions installed but no longer ship. The
|
|
20
18
|
* installer cleans these up so renamed skills don't linger as duplicates
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAqxBD,eAAO,MAAM,cAAc,EAAE,QAAQ,EAOpC,CAAC;AAEF;;qCAEqC;AACrC,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAEvC,CAAC"}
|
|
@@ -320,46 +320,6 @@ botmux send --mention "ou_xxx:Aiden" "请 @Aiden 帮忙 review 这段代码"
|
|
|
320
320
|
botmux send --mention ou_xxx "帮忙看下这段代码"
|
|
321
321
|
\`\`\`
|
|
322
322
|
|
|
323
|
-
### @ 决策硬门(必读)
|
|
324
|
-
|
|
325
|
-
每条回复**必须显式做出 @ 决策**,否则 \`botmux send\` 报错(exit 2)不发送。三选一:
|
|
326
|
-
|
|
327
|
-
| flag | 何时用 |
|
|
328
|
-
|---|---|
|
|
329
|
-
| \`--mention <ou_xxx:Name>\` | 点名某人/某 bot(可重复) |
|
|
330
|
-
| \`--mention-back\` | @ 回**本轮触发消息的发送者**(open_id 自动从会话取,你不用记) |
|
|
331
|
-
| \`--no-mention\` | 明确声明本条不 @ 任何人 |
|
|
332
|
-
|
|
333
|
-
决策规则(**按内容价值判断,不是按"人还是 bot"**):
|
|
334
|
-
- **有实质结论、需要对方继续看 / 确认 / 决策** → \`--mention-back\`(@回触发者)或 \`--mention\` 点名,确保对方看到。
|
|
335
|
-
- **纯记录 / 低优先级进度 / 简短确认("收到""在看")** → \`--no-mention\`,别打扰。
|
|
336
|
-
- **如果只是没信息量的"收到"** → 不如不发,等下一条有内容时再回。
|
|
337
|
-
- ⚠️ 别把 \`--no-mention\` 当默认随手带;也别无意义地 @ 打扰人。
|
|
338
|
-
|
|
339
|
-
\`\`\`bash
|
|
340
|
-
# 回复触发你的那个人,并 @ 回 ta
|
|
341
|
-
botmux send --mention-back "好的,已处理完成。"
|
|
342
|
-
# 纯状态更新,不想惊动任何人
|
|
343
|
-
botmux send --no-mention "后台任务还在跑,预计 5 分钟。"
|
|
344
|
-
\`\`\`
|
|
345
|
-
|
|
346
|
-
(可设环境变量 \`BOTMUX_REQUIRE_MENTION_DECISION=false\` 关闭此硬门。)
|
|
347
|
-
|
|
348
|
-
### 引用串联(普通群)
|
|
349
|
-
|
|
350
|
-
普通群里,回复默认会**引用本轮触发的那条消息**(飞书"引用"样式),把对话串成可追溯的链——你无需做任何事。
|
|
351
|
-
|
|
352
|
-
\`\`\`bash
|
|
353
|
-
# 默认:自动引用本轮触发消息
|
|
354
|
-
botmux send --no-mention "收到,开始处理。"
|
|
355
|
-
# 引用某条特定历史消息
|
|
356
|
-
botmux send --quote om_xxxxxx --no-mention "针对上面这条补充一点"
|
|
357
|
-
# 发独立消息、不引用任何人
|
|
358
|
-
botmux send --no-quote --no-mention "📢 全员通知"
|
|
359
|
-
\`\`\`
|
|
360
|
-
|
|
361
|
-
话题群(话题形态)不支持逐条引用,此能力仅在普通群生效。
|
|
362
|
-
|
|
363
323
|
### 顶层广播 / 跨群发布
|
|
364
324
|
|
|
365
325
|
默认行为:消息**回复**到当前话题里。如果要把内容发到群里作为新的顶层消息(不绑定到任何已有话题),或要发到**另一个群**,用 \`--top-level\` 和 \`--chat-id\`。
|
|
@@ -385,10 +345,6 @@ botmux send --top-level --chat-id oc_xxxxxxxxxxxx "📦 自动推送内容..."
|
|
|
385
345
|
| \`--images <path>\` | 内联图片,可重复多次 |
|
|
386
346
|
| \`--files <path>\` | 附件文件,可重复多次,每个单独发送 |
|
|
387
347
|
| \`--mention <open_id[:name]>\` | @mention,可重复。带 \`:name\` 时文本里的 \`@name\` 会被替换成 \<at\> 标签;只传 open_id 则在消息末尾追加 @。用 \`botmux bots list\` 查 open_id |
|
|
388
|
-
| \`--mention-back\` | @ 回本轮触发消息的发送者(open_id 自动从会话取)。满足 @ 硬门 |
|
|
389
|
-
| \`--no-mention\` | 明确声明本条不 @ 任何人。满足 @ 硬门 |
|
|
390
|
-
| \`--quote <message_id>\` | 引用指定消息(普通群)。默认引用本轮触发消息 |
|
|
391
|
-
| \`--no-quote\` | 不引用,发独立消息(普通群) |
|
|
392
348
|
| \`--card\` / \`--text\` | 强制卡片或纯文本模式(默认按 md 语法自动判断) |
|
|
393
349
|
| \`--top-level\` | 发顶层消息(不回复进当前话题);自动跳过"发送给/cc" footer |
|
|
394
350
|
| \`--chat-id <oc_xxx>\` | 指定目标群(默认当前会话所在群);常和 \`--top-level\` 一起用做跨群发布 |
|
|
@@ -396,16 +352,15 @@ botmux send --top-level --chat-id oc_xxxxxxxxxxxx "📦 自动推送内容..."
|
|
|
396
352
|
|
|
397
353
|
## 输出
|
|
398
354
|
|
|
399
|
-
成功返回 JSON: \`{"success":true,"messageId":"om_xxx","sessionId":"..."
|
|
400
|
-
|
|
401
|
-
失败 exit 1;**未做 @ 决策 exit 2**(按提示补 \`--mention\`/\`--mention-back\`/\`--no-mention\`)。
|
|
355
|
+
成功返回 JSON: \`{"success":true,"messageId":"om_xxx","sessionId":"..."}\`
|
|
356
|
+
失败打印错误到 stderr 并 exit 1。
|
|
402
357
|
`;
|
|
403
358
|
const BOTS_SKILL = `---
|
|
404
359
|
name: botmux-bots
|
|
405
|
-
description:
|
|
360
|
+
description: 列出当前飞书群聊中的机器人及其 open_id。在需要 @mention 其他机器人协作时使用。
|
|
406
361
|
---
|
|
407
362
|
|
|
408
|
-
# botmux-bots —
|
|
363
|
+
# botmux-bots — 查询可用机器人
|
|
409
364
|
|
|
410
365
|
## 用法
|
|
411
366
|
|
|
@@ -413,80 +368,27 @@ description: 列出当前飞书群里可协作的机器人(协作花名册:
|
|
|
413
368
|
botmux bots list
|
|
414
369
|
\`\`\`
|
|
415
370
|
|
|
416
|
-
##
|
|
417
|
-
|
|
418
|
-
每个机器人一行,关键字段:
|
|
419
|
-
- \`name\` / \`openId\` / \`isSelf\`
|
|
420
|
-
- \`larkAppId\`:本机托管的机器人才有(可用作 workflow 的 bot id)
|
|
421
|
-
- \`capability\`:团队能力标签(它擅长什么)——挑选交棒/协作对象的依据
|
|
422
|
-
- \`hasTeamRole\`:是否配置了团队级角色
|
|
423
|
-
- \`mentionable\`:**你能不能可靠地 @ 到它**(关键)
|
|
424
|
-
- \`mentionSource\`:\`cross-ref\` | \`observed\` | \`self\` | \`fallback\`
|
|
371
|
+
## 输出
|
|
425
372
|
|
|
373
|
+
JSON 格式:
|
|
426
374
|
\`\`\`json
|
|
427
375
|
{
|
|
428
376
|
"sessionId": "...",
|
|
429
377
|
"chatId": "...",
|
|
430
378
|
"bots": [
|
|
431
|
-
{ "name": "
|
|
432
|
-
|
|
433
|
-
"mentionable": true, "mentionSource": "cross-ref" }
|
|
379
|
+
{ "name": "Claude", "openId": "ou_xxx", "isSelf": true },
|
|
380
|
+
{ "name": "Aiden", "openId": "ou_yyy", "isSelf": false }
|
|
434
381
|
],
|
|
435
|
-
"total":
|
|
382
|
+
"total": 2
|
|
436
383
|
}
|
|
437
384
|
\`\`\`
|
|
438
385
|
|
|
439
|
-
##
|
|
440
|
-
|
|
441
|
-
1. **只 @ \`mentionable=true\` 的机器人**。\`mentionable=false\` 表示"知道它在群里,但当前点不准"(飞书 open_id 按 app 隔离)——这种先让它 / 用户在群里 \`/introduce\` 一次,再点名。
|
|
442
|
-
2. 按 \`capability\` 挑合适的队友,而不是乱点。
|
|
443
|
-
3. 配合 botmux send:\`botmux send --mention "ou_yyy:后端Bot" "请帮忙处理"\`
|
|
444
|
-
|
|
445
|
-
## 要把任务交棒给别的机器人?
|
|
446
|
-
|
|
447
|
-
见 **botmux-handoff** 技能(结构化交接)。
|
|
448
|
-
`;
|
|
449
|
-
const HANDOFF_SKILL = `---
|
|
450
|
-
name: botmux-handoff
|
|
451
|
-
description: 把当前任务交棒给团队里另一个机器人时使用(多机器人协作接力)。当你做完自己负责的部分、需要另一个机器人接手下一步,或用户说"交给X""让X接着做""@某bot继续""下一步谁谁来"时触发。先用 botmux-bots 查花名册挑对象,再用结构化交接发给对方。
|
|
452
|
-
---
|
|
453
|
-
|
|
454
|
-
# botmux-handoff — 机器人接力交棒
|
|
455
|
-
|
|
456
|
-
多机器人协作里,一个机器人干完自己那段后把任务交给另一个机器人接手。**随意闲聊可以不拘格式**,但正式交棒要带最小结构,否则接手方拿不到足够上下文、交接质量不可控。
|
|
457
|
-
|
|
458
|
-
## 步骤
|
|
459
|
-
|
|
460
|
-
1. 用 \`botmux bots list\`(见 botmux-bots 技能)查群内协作花名册:
|
|
461
|
-
- 按 \`capability\` 挑**合适**的接手机器人;
|
|
462
|
-
- 确认它 \`mentionable: true\`(若为 false,先让它/用户 \`/introduce\` 一次再点名)。
|
|
463
|
-
2. 用 \`botmux send --mention\` 发一条**结构化交接**给它。
|
|
464
|
-
|
|
465
|
-
## 交接必须包含 5 要素
|
|
466
|
-
|
|
467
|
-
- **交给谁**:@ 目标机器人
|
|
468
|
-
- **当前结论**:你已经做完/查清了什么
|
|
469
|
-
- **相关上下文**:链接、关键消息、文件路径、数据
|
|
470
|
-
- **期望下一步**:希望它具体做什么
|
|
471
|
-
- **完成标准**:怎样算这一步做完
|
|
472
|
-
|
|
473
|
-
## 示例
|
|
386
|
+
## 配合 botmux send 使用
|
|
474
387
|
|
|
475
388
|
\`\`\`bash
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
- 当前结论:定位到支付回调超时,错误集中在 09:00–09:10,日志 https://...
|
|
479
|
-
- 上下文:服务 pay-gateway,最近一次变更 PR #1234
|
|
480
|
-
- 期望下一步:判断是否回滚 #1234,并给出修复方案
|
|
481
|
-
- 完成标准:给出根因结论 + 可执行的修复/回滚决定
|
|
482
|
-
EOF
|
|
389
|
+
# 查到 Aiden 的 open_id 后
|
|
390
|
+
botmux send --mention "ou_yyy:Aiden" "请 @Aiden 帮忙处理"
|
|
483
391
|
\`\`\`
|
|
484
|
-
|
|
485
|
-
## 注意
|
|
486
|
-
|
|
487
|
-
- 跨部署的外部机器人若 \`mentionable: false\`,**先 \`/introduce\` 一次**再交棒(飞书 open_id 按 app 隔离)。
|
|
488
|
-
- 人主导的协作可以不走这套结构;本技能针对**机器人自主接力**。
|
|
489
|
-
- 交棒后简短告知用户"已交给 @X 接手",保持可见。
|
|
490
392
|
`;
|
|
491
393
|
const WORKFLOW_CREATE_SKILL = `---
|
|
492
394
|
name: botmux-workflow-create
|
|
@@ -886,80 +788,12 @@ humanGate:
|
|
|
886
788
|
- nodeId 含 \`/\`、\`..\`、空格:schema 会拒绝。
|
|
887
789
|
- executor 名不是默认三种之一且用户没确认:不要猜。
|
|
888
790
|
`;
|
|
889
|
-
export const ASK_SKILL = `---
|
|
890
|
-
name: botmux-ask
|
|
891
|
-
description: 在当前飞书/Lark 话题里向用户发起阻塞式选择题并等待回答。触发场景:你需要用户在多个明确选项中做选择、确认风险动作、决定继续/回滚/中止,且后续命令需要拿到机器可解析的答案。使用 botmux ask buttons,stdout 只返回选中的 key,适合 shell 脚本和 CLI agent 继续执行。
|
|
892
|
-
---
|
|
893
|
-
|
|
894
|
-
# botmux-ask — 阻塞式向用户提问
|
|
895
|
-
|
|
896
|
-
当你需要用户在明确选项里做选择,并且后续步骤必须等用户回答后才能继续时,使用 \`botmux ask buttons\`。
|
|
897
|
-
|
|
898
|
-
## 什么时候用
|
|
899
|
-
|
|
900
|
-
- 发布、回滚、删除、写文件、调用外部 API 等风险动作前,需要用户选择
|
|
901
|
-
- 需求存在 2-6 个清晰分支,继续执行前必须拿到其中一个 key
|
|
902
|
-
- 你正在 shell / CLI 里执行任务,需要把用户选择赋给变量继续跑
|
|
903
|
-
|
|
904
|
-
## 不要用
|
|
905
|
-
|
|
906
|
-
- 只是给用户汇报进展:用 \`botmux send\`
|
|
907
|
-
- 需要自由文本长回答:v0.1.7 不支持,先用 \`botmux send\` 问用户
|
|
908
|
-
- workflow 节点审批:workflow 已经有 humanGate / decision,不要套两层 ask
|
|
909
|
-
|
|
910
|
-
## Canonical 用法
|
|
911
|
-
|
|
912
|
-
\`\`\`bash
|
|
913
|
-
choice=$(botmux ask buttons --options "deploy=继续发布,rollback=回滚,abort=中止" "线上 latency 涨了 30%,下一步怎么处理?")
|
|
914
|
-
case "$choice" in
|
|
915
|
-
deploy) echo "继续发布" ;;
|
|
916
|
-
rollback) echo "执行回滚" ;;
|
|
917
|
-
abort) echo "中止" ;;
|
|
918
|
-
esac
|
|
919
|
-
\`\`\`
|
|
920
|
-
|
|
921
|
-
\`key=label\` 里,**stdout 永远返回 key**,按钮上显示 label。只写 \`yes,no\` 时 key 和 label 相同。
|
|
922
|
-
|
|
923
|
-
兼容 alias:\`botmux ask --options "yes,no" "继续吗?"\` 可以用,但文档和新脚本优先写 \`botmux ask buttons\`,给未来 \`ask text\` / \`ask confirm\` 留空间。
|
|
924
|
-
|
|
925
|
-
## JSON 输出
|
|
926
|
-
|
|
927
|
-
\`\`\`bash
|
|
928
|
-
botmux ask buttons --json --options "yes=继续,no=停止" "继续执行吗?"
|
|
929
|
-
\`\`\`
|
|
930
|
-
|
|
931
|
-
stdout 为一行 JSON。注意:\`--json\` 覆盖所有结果类型;超时 / 失效时也会输出 JSON,
|
|
932
|
-
同时保留非 0 exit code。脚本判断超时必须看 exit code 或 \`timedOut\` 字段。
|
|
933
|
-
|
|
934
|
-
\`\`\`json
|
|
935
|
-
{"selected":"yes","by":"ou_xxx","timedOut":false,"comment":null}
|
|
936
|
-
\`\`\`
|
|
937
|
-
|
|
938
|
-
## 退出码和 stdout 契约
|
|
939
|
-
|
|
940
|
-
- 成功:stdout 一行 \`<selected_key>\`,exit 0
|
|
941
|
-
- \`--json\`:stdout 一行 JSON(包括超时 / 失效),exit code 仍按结果返回
|
|
942
|
-
- 超时:默认模式 stdout 为空,exit 124;\`--json\` 时 \`{"selected":null,"timedOut":true,...}\`
|
|
943
|
-
- 缺少 botmux 环境变量 / 参数错误:stdout 为空,exit 2
|
|
944
|
-
- daemon 不可达或 ask 被 daemon restart 失效:默认模式 stdout 为空,exit 3;\`--json\` 时 \`selected:null\`
|
|
945
|
-
|
|
946
|
-
所有人类可读提示都在 stderr,调用方不要 parse stderr。
|
|
947
|
-
|
|
948
|
-
## 选项规则
|
|
949
|
-
|
|
950
|
-
- \`--options\` 必填,至少 2 项,逗号分隔
|
|
951
|
-
- 推荐 \`key=label\`,key 用稳定英文短词,label 给用户看
|
|
952
|
-
- 不支持 comment / multi-select / free-form text(v0.1.7 范围外)
|
|
953
|
-
- 默认超时 300 秒,可用 \`--timeout <seconds>\` 调整
|
|
954
|
-
`;
|
|
955
|
-
export const ASK_SKILL_NAME = 'botmux-ask';
|
|
956
791
|
export const BUILTIN_SKILLS = [
|
|
957
792
|
{ name: 'botmux-schedule', content: SCHEDULE_SKILL },
|
|
958
793
|
{ name: 'botmux-history', content: HISTORY_SKILL },
|
|
959
794
|
{ name: 'botmux-quoted', content: QUOTED_SKILL },
|
|
960
795
|
{ name: 'botmux-send', content: SEND_SKILL },
|
|
961
796
|
{ name: 'botmux-bots', content: BOTS_SKILL },
|
|
962
|
-
{ name: 'botmux-handoff', content: HANDOFF_SKILL },
|
|
963
797
|
{ name: 'botmux-workflow-create', content: WORKFLOW_CREATE_SKILL },
|
|
964
798
|
];
|
|
965
799
|
/** Skills that earlier botmux versions installed but no longer ship. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FtB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DrB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC;AAEF,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FtB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DrB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkJlB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkClB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Y7B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE;IACpD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE;IAClD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE;IAChD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,qBAAqB,EAAE;CACnE,CAAC;AAEF;;qCAEqC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAa;IAC3C,wBAAwB;CACzB,CAAC"}
|
|
@@ -1,37 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Materialise the built-in skills as a Claude Code *plugin* under `pluginDir`,
|
|
3
|
-
* so they can be injected per-session via `--plugin-dir` instead of polluting
|
|
4
|
-
* the user's global `~/.claude/skills`. Writes:
|
|
5
|
-
* - {pluginDir}/.claude-plugin/plugin.json (manifest, name='botmux')
|
|
6
|
-
* - {pluginDir}/skills/<name>/SKILL.md (one per built-in skill)
|
|
7
|
-
* Idempotent — only writes when content differs. Skill files are written by
|
|
8
|
-
* reusing `ensureSkills` against `{pluginDir}/skills` (same flat layout).
|
|
9
|
-
*/
|
|
10
|
-
export declare function ensurePluginSkills(cliId: string, pluginDir: string | undefined): void;
|
|
11
|
-
/**
|
|
12
|
-
* Remove botmux-owned skill directories that earlier versions installed into a
|
|
13
|
-
* shared global skills dir (e.g. `~/.claude/skills`). Once skills move to a
|
|
14
|
-
* per-session plugin dir, these stale global copies would keep leaking into the
|
|
15
|
-
* user's standalone CLI sessions, so we delete them on upgrade.
|
|
16
|
-
*
|
|
17
|
-
* Matches by the `botmux-` directory-name prefix (the namespace botmux owns)
|
|
18
|
-
* rather than the static `BUILTIN_SKILLS` list — a daemon may have previously
|
|
19
|
-
* installed skills that a *different* botmux version shipped (e.g.
|
|
20
|
-
* `botmux-handoff`), and those must be cleaned too. Non-`botmux-` user skills
|
|
21
|
-
* are never touched.
|
|
22
|
-
*/
|
|
23
|
-
export declare function removeGlobalBotmuxSkills(globalSkillsDir: string | undefined): void;
|
|
24
|
-
/**
|
|
25
|
-
* 条件管理 `botmux-ask` skill —— hook 优先 + 非 hook CLI 兜底策略。
|
|
26
|
-
*
|
|
27
|
-
* - `install=false`(CLI 支持 hook 接管 askUserQuestion):删除该 skill,避免
|
|
28
|
-
* skill 与 hook 双重弹卡 / 抢工具。
|
|
29
|
-
* - `install=true`(CLI 无 hook 接管能力):写入该 skill,让 agent 至少能用
|
|
30
|
-
* `botmux ask buttons` 把选择题引到飞书(不如 hook 可靠,但有得用)。
|
|
31
|
-
*
|
|
32
|
-
* 幂等:install 时内容相同则跳过;remove 时不存在则跳过。
|
|
33
|
-
*/
|
|
34
|
-
export declare function ensureAskSkill(cliId: string, skillsDir: string | undefined, install: boolean): void;
|
|
35
1
|
/**
|
|
36
2
|
* Install (or refresh) the built-in skill library into the given CLI's skills
|
|
37
3
|
* directory. Idempotent — only writes when content differs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAgC/E"}
|
package/dist/skills/installer.js
CHANGED
|
@@ -1,128 +1,11 @@
|
|
|
1
|
-
import { writeFileSync, mkdirSync, existsSync, readFileSync, rmSync
|
|
1
|
+
import { writeFileSync, mkdirSync, existsSync, readFileSync, rmSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { logger } from '../utils/logger.js';
|
|
5
|
-
import { BUILTIN_SKILLS, RETIRED_SKILL_NAMES
|
|
5
|
+
import { BUILTIN_SKILLS, RETIRED_SKILL_NAMES } from './definitions.js';
|
|
6
6
|
function expandHome(p) {
|
|
7
7
|
return p.startsWith('~') ? join(homedir(), p.slice(1)) : p;
|
|
8
8
|
}
|
|
9
|
-
/** Claude Code plugin manifest written to `{pluginDir}/.claude-plugin/plugin.json`.
|
|
10
|
-
* `name` is the only required field; it namespaces the bundled skills. */
|
|
11
|
-
const PLUGIN_MANIFEST = JSON.stringify({
|
|
12
|
-
name: 'botmux',
|
|
13
|
-
description: 'botmux 飞书话题桥接内置 skill —— 仅在 botmux 拉起的会话内通过 --plugin-dir 注入,不写入全局 ~/.claude/skills。',
|
|
14
|
-
version: '1.0.0',
|
|
15
|
-
author: { name: 'botmux' },
|
|
16
|
-
}, null, 2) + '\n';
|
|
17
|
-
/**
|
|
18
|
-
* Materialise the built-in skills as a Claude Code *plugin* under `pluginDir`,
|
|
19
|
-
* so they can be injected per-session via `--plugin-dir` instead of polluting
|
|
20
|
-
* the user's global `~/.claude/skills`. Writes:
|
|
21
|
-
* - {pluginDir}/.claude-plugin/plugin.json (manifest, name='botmux')
|
|
22
|
-
* - {pluginDir}/skills/<name>/SKILL.md (one per built-in skill)
|
|
23
|
-
* Idempotent — only writes when content differs. Skill files are written by
|
|
24
|
-
* reusing `ensureSkills` against `{pluginDir}/skills` (same flat layout).
|
|
25
|
-
*/
|
|
26
|
-
export function ensurePluginSkills(cliId, pluginDir) {
|
|
27
|
-
if (!pluginDir)
|
|
28
|
-
return;
|
|
29
|
-
const root = expandHome(pluginDir);
|
|
30
|
-
const manifestDir = join(root, '.claude-plugin');
|
|
31
|
-
const manifestFile = join(manifestDir, 'plugin.json');
|
|
32
|
-
try {
|
|
33
|
-
mkdirSync(manifestDir, { recursive: true });
|
|
34
|
-
if (!(existsSync(manifestFile) && readFileSync(manifestFile, 'utf-8') === PLUGIN_MANIFEST)) {
|
|
35
|
-
writeFileSync(manifestFile, PLUGIN_MANIFEST, 'utf-8');
|
|
36
|
-
logger.info(`[skills] Wrote plugin manifest for ${cliId} → ${manifestFile}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
logger.warn(`[skills] Failed to write plugin manifest for ${cliId}: ${err.message}`);
|
|
41
|
-
}
|
|
42
|
-
ensureSkills(cliId, join(root, 'skills'));
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Remove botmux-owned skill directories that earlier versions installed into a
|
|
46
|
-
* shared global skills dir (e.g. `~/.claude/skills`). Once skills move to a
|
|
47
|
-
* per-session plugin dir, these stale global copies would keep leaking into the
|
|
48
|
-
* user's standalone CLI sessions, so we delete them on upgrade.
|
|
49
|
-
*
|
|
50
|
-
* Matches by the `botmux-` directory-name prefix (the namespace botmux owns)
|
|
51
|
-
* rather than the static `BUILTIN_SKILLS` list — a daemon may have previously
|
|
52
|
-
* installed skills that a *different* botmux version shipped (e.g.
|
|
53
|
-
* `botmux-handoff`), and those must be cleaned too. Non-`botmux-` user skills
|
|
54
|
-
* are never touched.
|
|
55
|
-
*/
|
|
56
|
-
export function removeGlobalBotmuxSkills(globalSkillsDir) {
|
|
57
|
-
if (!globalSkillsDir)
|
|
58
|
-
return;
|
|
59
|
-
const dir = expandHome(globalSkillsDir);
|
|
60
|
-
if (!existsSync(dir))
|
|
61
|
-
return;
|
|
62
|
-
let names;
|
|
63
|
-
try {
|
|
64
|
-
names = readdirSync(dir);
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
logger.warn(`[skills] Failed to scan ${dir}: ${err.message}`);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
for (const name of names) {
|
|
71
|
-
if (!name.startsWith('botmux-'))
|
|
72
|
-
continue;
|
|
73
|
-
const skillDir = join(dir, name);
|
|
74
|
-
let isDir = false;
|
|
75
|
-
try {
|
|
76
|
-
isDir = statSync(skillDir).isDirectory();
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
if (!isDir)
|
|
82
|
-
continue;
|
|
83
|
-
try {
|
|
84
|
-
rmSync(skillDir, { recursive: true, force: true });
|
|
85
|
-
logger.info(`[skills] Removed leaked global skill ${name} → ${skillDir}`);
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
logger.warn(`[skills] Failed to remove leaked global skill ${name}: ${err.message}`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* 条件管理 `botmux-ask` skill —— hook 优先 + 非 hook CLI 兜底策略。
|
|
94
|
-
*
|
|
95
|
-
* - `install=false`(CLI 支持 hook 接管 askUserQuestion):删除该 skill,避免
|
|
96
|
-
* skill 与 hook 双重弹卡 / 抢工具。
|
|
97
|
-
* - `install=true`(CLI 无 hook 接管能力):写入该 skill,让 agent 至少能用
|
|
98
|
-
* `botmux ask buttons` 把选择题引到飞书(不如 hook 可靠,但有得用)。
|
|
99
|
-
*
|
|
100
|
-
* 幂等:install 时内容相同则跳过;remove 时不存在则跳过。
|
|
101
|
-
*/
|
|
102
|
-
export function ensureAskSkill(cliId, skillsDir, install) {
|
|
103
|
-
if (!skillsDir)
|
|
104
|
-
return;
|
|
105
|
-
const skillDir = join(expandHome(skillsDir), ASK_SKILL_NAME);
|
|
106
|
-
const skillFile = join(skillDir, 'SKILL.md');
|
|
107
|
-
try {
|
|
108
|
-
if (install) {
|
|
109
|
-
if (existsSync(skillFile) && readFileSync(skillFile, 'utf-8') === ASK_SKILL)
|
|
110
|
-
return;
|
|
111
|
-
mkdirSync(skillDir, { recursive: true });
|
|
112
|
-
writeFileSync(skillFile, ASK_SKILL, 'utf-8');
|
|
113
|
-
logger.info(`[skills] Installed ${ASK_SKILL_NAME} (无 hook 接管,兜底) for ${cliId} → ${skillFile}`);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
if (!existsSync(skillDir))
|
|
117
|
-
return;
|
|
118
|
-
rmSync(skillDir, { recursive: true, force: true });
|
|
119
|
-
logger.info(`[skills] Removed ${ASK_SKILL_NAME} (hook 已接管) for ${cliId}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
catch (err) {
|
|
123
|
-
logger.warn(`[skills] ensureAskSkill(${install}) failed for ${cliId}: ${err.message}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
9
|
/**
|
|
127
10
|
* Install (or refresh) the built-in skill library into the given CLI's skills
|
|
128
11
|
* directory. Idempotent — only writes when content differs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,SAA6B;IACvE,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO;oBAAE,SAAS;YAC1C,CAAC;YACD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,IAAI,QAAQ,KAAK,MAAM,SAAS,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,kCAAkC,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,QAAQ,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;AACH,CAAC"}
|