botmux 2.47.0 → 2.47.1
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 +10 -5
- package/README.md +10 -5
- package/dist/adapters/adopt-route.d.ts +63 -0
- package/dist/adapters/adopt-route.d.ts.map +1 -0
- package/dist/adapters/adopt-route.js +195 -0
- package/dist/adapters/adopt-route.js.map +1 -0
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +11 -0
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +11 -0
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +17 -1
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +36 -9
- 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 +26 -1
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts +4 -0
- package/dist/adapters/cli/codex-app.d.ts.map +1 -0
- package/dist/adapters/cli/codex-app.js +72 -0
- package/dist/adapters/cli/codex-app.js.map +1 -0
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +6 -1
- 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 +58 -12
- 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 +5 -1
- package/dist/adapters/cli/gemini.js.map +1 -1
- package/dist/adapters/cli/hermes.d.ts +4 -0
- package/dist/adapters/cli/hermes.d.ts.map +1 -0
- package/dist/adapters/cli/hermes.js +40 -0
- package/dist/adapters/cli/hermes.js.map +1 -0
- package/dist/adapters/cli/mira.d.ts +4 -0
- package/dist/adapters/cli/mira.d.ts.map +1 -0
- package/dist/adapters/cli/mira.js +67 -0
- package/dist/adapters/cli/mira.js.map +1 -0
- package/dist/adapters/cli/mtr.d.ts +5 -0
- package/dist/adapters/cli/mtr.d.ts.map +1 -0
- package/dist/adapters/cli/mtr.js +62 -0
- package/dist/adapters/cli/mtr.js.map +1 -0
- package/dist/adapters/cli/opencode.d.ts.map +1 -1
- package/dist/adapters/cli/opencode.js +19 -1
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +5 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +22 -2
- 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 +2 -1
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +35 -2
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/adapters/hook-command.d.ts +18 -0
- package/dist/adapters/hook-command.d.ts.map +1 -0
- package/dist/adapters/hook-command.js +38 -0
- package/dist/adapters/hook-command.js.map +1 -0
- package/dist/adapters/hook-installer.d.ts +14 -0
- package/dist/adapters/hook-installer.d.ts.map +1 -0
- package/dist/adapters/hook-installer.js +192 -0
- package/dist/adapters/hook-installer.js.map +1 -0
- package/dist/bot-registry.d.ts +59 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +67 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/bots-list-output.d.ts +8 -0
- package/dist/cli/bots-list-output.d.ts.map +1 -1
- package/dist/cli/bots-list-output.js +9 -0
- package/dist/cli/bots-list-output.js.map +1 -1
- package/dist/cli.d.ts +15 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +603 -106
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.d.ts +3 -0
- package/dist/codex-app-runner.d.ts.map +1 -0
- package/dist/codex-app-runner.js +512 -0
- package/dist/codex-app-runner.js.map +1 -0
- package/dist/config.d.ts +11 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -4
- package/dist/config.js.map +1 -1
- package/dist/core/ask-api.d.ts +47 -0
- package/dist/core/ask-api.d.ts.map +1 -0
- package/dist/core/ask-api.js +139 -0
- package/dist/core/ask-api.js.map +1 -0
- package/dist/core/ask-args.d.ts +53 -0
- package/dist/core/ask-args.d.ts.map +1 -0
- package/dist/core/ask-args.js +122 -0
- package/dist/core/ask-args.js.map +1 -0
- package/dist/core/ask-broker.d.ts +98 -0
- package/dist/core/ask-broker.d.ts.map +1 -0
- package/dist/core/ask-broker.js +329 -0
- package/dist/core/ask-broker.js.map +1 -0
- package/dist/core/ask-hook/claude-code.d.ts +50 -0
- package/dist/core/ask-hook/claude-code.d.ts.map +1 -0
- package/dist/core/ask-hook/claude-code.js +145 -0
- package/dist/core/ask-hook/claude-code.js.map +1 -0
- package/dist/core/ask-hook/codex.d.ts +43 -0
- package/dist/core/ask-hook/codex.d.ts.map +1 -0
- package/dist/core/ask-hook/codex.js +69 -0
- package/dist/core/ask-hook/codex.js.map +1 -0
- package/dist/core/ask-hook/opencode.d.ts +41 -0
- package/dist/core/ask-hook/opencode.d.ts.map +1 -0
- package/dist/core/ask-hook/opencode.js +108 -0
- package/dist/core/ask-hook/opencode.js.map +1 -0
- package/dist/core/ask-hook/registry.d.ts +3 -0
- package/dist/core/ask-hook/registry.d.ts.map +1 -0
- package/dist/core/ask-hook/registry.js +12 -0
- package/dist/core/ask-hook/registry.js.map +1 -0
- package/dist/core/ask-hook/types.d.ts +26 -0
- package/dist/core/ask-hook/types.d.ts.map +1 -0
- package/dist/core/ask-hook/types.js +2 -0
- package/dist/core/ask-hook/types.js.map +1 -0
- package/dist/core/ask-types.d.ts +146 -0
- package/dist/core/ask-types.d.ts.map +1 -0
- package/dist/core/ask-types.js +18 -0
- package/dist/core/ask-types.js.map +1 -0
- package/dist/core/command-handler.d.ts +20 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +774 -311
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +2 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +222 -2
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/role-resolver.d.ts +17 -1
- package/dist/core/role-resolver.d.ts.map +1 -1
- package/dist/core/role-resolver.js +64 -10
- 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 +19 -5
- 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 +37 -20
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/trigger-session.d.ts +9 -0
- package/dist/core/trigger-session.d.ts.map +1 -0
- package/dist/core/trigger-session.js +158 -0
- package/dist/core/trigger-session.js.map +1 -0
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +141 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +543 -24
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +213 -58
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +6 -1
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +9 -1
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts +3 -0
- package/dist/dashboard/connector-api.d.ts.map +1 -0
- package/dist/dashboard/connector-api.js +351 -0
- package/dist/dashboard/connector-api.js.map +1 -0
- package/dist/dashboard/federated-group-core.d.ts +54 -0
- package/dist/dashboard/federated-group-core.d.ts.map +1 -0
- package/dist/dashboard/federated-group-core.js +165 -0
- package/dist/dashboard/federated-group-core.js.map +1 -0
- package/dist/dashboard/federation-api.d.ts +42 -0
- package/dist/dashboard/federation-api.d.ts.map +1 -0
- package/dist/dashboard/federation-api.js +408 -0
- package/dist/dashboard/federation-api.js.map +1 -0
- package/dist/dashboard/federation-spoke-api.d.ts +76 -0
- package/dist/dashboard/federation-spoke-api.d.ts.map +1 -0
- package/dist/dashboard/federation-spoke-api.js +618 -0
- package/dist/dashboard/federation-spoke-api.js.map +1 -0
- package/dist/dashboard/team-group.d.ts +18 -0
- package/dist/dashboard/team-group.d.ts.map +1 -0
- package/dist/dashboard/team-group.js +7 -0
- package/dist/dashboard/team-group.js.map +1 -0
- package/dist/dashboard/trigger-api.d.ts +13 -0
- package/dist/dashboard/trigger-api.d.ts.map +1 -0
- package/dist/dashboard/trigger-api.js +77 -0
- package/dist/dashboard/trigger-api.js.map +1 -0
- package/dist/dashboard/web/app.js +8 -0
- 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 +205 -21
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/connectors.d.ts +2 -0
- package/dist/dashboard/web/connectors.d.ts.map +1 -0
- package/dist/dashboard/web/connectors.js +187 -0
- package/dist/dashboard/web/connectors.js.map +1 -0
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +43 -5
- 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 +4 -0
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/team-federation.d.ts +3 -0
- package/dist/dashboard/web/team-federation.d.ts.map +1 -0
- package/dist/dashboard/web/team-federation.js +487 -0
- package/dist/dashboard/web/team-federation.js.map +1 -0
- package/dist/dashboard/web/workflows.js +3 -3
- package/dist/dashboard/web/workflows.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts +19 -0
- package/dist/dashboard/webhook-routes.d.ts.map +1 -0
- package/dist/dashboard/webhook-routes.js +321 -0
- package/dist/dashboard/webhook-routes.js.map +1 -0
- package/dist/dashboard/workflow-api.d.ts +8 -1
- package/dist/dashboard/workflow-api.d.ts.map +1 -1
- package/dist/dashboard/workflow-api.js +19 -4
- package/dist/dashboard/workflow-api.js.map +1 -1
- package/dist/dashboard-web/app.js +539 -375
- package/dist/dashboard-web/index.html +3 -1
- package/dist/dashboard-web/style.css +22 -0
- package/dist/dashboard.js +199 -2
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +104 -11
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +104 -11
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/ask-card.d.ts +55 -0
- package/dist/im/lark/ask-card.d.ts.map +1 -0
- package/dist/im/lark/ask-card.js +328 -0
- package/dist/im/lark/ask-card.js.map +1 -0
- package/dist/im/lark/card-builder.d.ts +108 -3
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +480 -50
- 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 +241 -18
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +83 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +286 -70
- 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 +29 -4
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts +2 -1
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +3 -2
- 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 +20 -2
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +49 -17
- 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 +87 -31
- 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 +12 -1
- 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 +53 -0
- package/dist/im/lark/workflow-progress-card.js.map +1 -1
- package/dist/mira-output.d.ts +3 -0
- package/dist/mira-output.d.ts.map +1 -0
- package/dist/mira-output.js +136 -0
- package/dist/mira-output.js.map +1 -0
- package/dist/mira-runner.d.ts +3 -0
- package/dist/mira-runner.d.ts.map +1 -0
- package/dist/mira-runner.js +534 -0
- package/dist/mira-runner.js.map +1 -0
- package/dist/services/bot-owner-store.d.ts +28 -0
- package/dist/services/bot-owner-store.d.ts.map +1 -0
- package/dist/services/bot-owner-store.js +82 -0
- package/dist/services/bot-owner-store.js.map +1 -0
- package/dist/services/bot-profile-store.d.ts +16 -0
- package/dist/services/bot-profile-store.d.ts.map +1 -0
- package/dist/services/bot-profile-store.js +98 -0
- package/dist/services/bot-profile-store.js.map +1 -0
- package/dist/services/brand-store.d.ts +15 -0
- package/dist/services/brand-store.d.ts.map +1 -0
- package/dist/services/brand-store.js +47 -0
- package/dist/services/brand-store.js.map +1 -0
- package/dist/services/card-prefs-store.d.ts +20 -0
- package/dist/services/card-prefs-store.d.ts.map +1 -0
- package/dist/services/card-prefs-store.js +82 -0
- package/dist/services/card-prefs-store.js.map +1 -0
- package/dist/services/codex-bridge-queue.d.ts +1 -0
- package/dist/services/codex-bridge-queue.d.ts.map +1 -1
- package/dist/services/codex-bridge-queue.js +23 -0
- package/dist/services/codex-bridge-queue.js.map +1 -1
- package/dist/services/codex-transcript.d.ts +1 -0
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/connector-store.d.ts +58 -0
- package/dist/services/connector-store.d.ts.map +1 -0
- package/dist/services/connector-store.js +79 -0
- package/dist/services/connector-store.js.map +1 -0
- package/dist/services/deployment-identity.d.ts +22 -0
- package/dist/services/deployment-identity.d.ts.map +1 -0
- package/dist/services/deployment-identity.js +67 -0
- package/dist/services/deployment-identity.js.map +1 -0
- package/dist/services/federation-membership-store.d.ts +23 -0
- package/dist/services/federation-membership-store.d.ts.map +1 -0
- package/dist/services/federation-membership-store.js +66 -0
- package/dist/services/federation-membership-store.js.map +1 -0
- package/dist/services/federation-roster.d.ts +54 -0
- package/dist/services/federation-roster.d.ts.map +1 -0
- package/dist/services/federation-roster.js +51 -0
- package/dist/services/federation-roster.js.map +1 -0
- package/dist/services/federation-store.d.ts +76 -0
- package/dist/services/federation-store.d.ts.map +1 -0
- package/dist/services/federation-store.js +133 -0
- package/dist/services/federation-store.js.map +1 -0
- package/dist/services/grant-store.d.ts +12 -2
- package/dist/services/grant-store.d.ts.map +1 -1
- package/dist/services/grant-store.js +51 -4
- package/dist/services/grant-store.js.map +1 -1
- package/dist/services/group-creator.d.ts +10 -0
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +26 -1
- package/dist/services/group-creator.js.map +1 -1
- package/dist/services/groups-store.d.ts +30 -0
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +85 -12
- package/dist/services/groups-store.js.map +1 -1
- package/dist/services/hermes-transcript.d.ts +7 -0
- package/dist/services/hermes-transcript.d.ts.map +1 -0
- package/dist/services/hermes-transcript.js +117 -0
- package/dist/services/hermes-transcript.js.map +1 -0
- package/dist/services/invite-store.d.ts +28 -0
- package/dist/services/invite-store.d.ts.map +1 -0
- package/dist/services/invite-store.js +85 -0
- package/dist/services/invite-store.js.map +1 -0
- package/dist/services/pairing-store.d.ts +47 -0
- package/dist/services/pairing-store.d.ts.map +1 -0
- package/dist/services/pairing-store.js +132 -0
- package/dist/services/pairing-store.js.map +1 -0
- package/dist/services/project-scanner.d.ts +10 -0
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +11 -0
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/relay-picker.d.ts +22 -0
- package/dist/services/relay-picker.d.ts.map +1 -0
- package/dist/services/relay-picker.js +62 -0
- package/dist/services/relay-picker.js.map +1 -0
- package/dist/services/send-policy.d.ts +55 -0
- package/dist/services/send-policy.d.ts.map +1 -0
- package/dist/services/send-policy.js +47 -0
- package/dist/services/send-policy.js.map +1 -0
- package/dist/services/session-store.js +1 -1
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/team-roster.d.ts +38 -0
- package/dist/services/team-roster.d.ts.map +1 -0
- package/dist/services/team-roster.js +82 -0
- package/dist/services/team-roster.js.map +1 -0
- package/dist/services/team-store.d.ts +54 -0
- package/dist/services/team-store.d.ts.map +1 -0
- package/dist/services/team-store.js +156 -0
- package/dist/services/team-store.js.map +1 -0
- package/dist/services/trigger-log-store.d.ts +46 -0
- package/dist/services/trigger-log-store.d.ts.map +1 -0
- package/dist/services/trigger-log-store.js +132 -0
- package/dist/services/trigger-log-store.js.map +1 -0
- package/dist/services/trigger-types.d.ts +57 -0
- package/dist/services/trigger-types.d.ts.map +1 -0
- package/dist/services/trigger-types.js +28 -0
- package/dist/services/trigger-types.js.map +1 -0
- package/dist/services/webhook-key.d.ts +16 -0
- package/dist/services/webhook-key.d.ts.map +1 -0
- package/dist/services/webhook-key.js +123 -0
- package/dist/services/webhook-key.js.map +1 -0
- package/dist/services/webhook-lifecycle-extractors.d.ts +15 -0
- package/dist/services/webhook-lifecycle-extractors.d.ts.map +1 -0
- package/dist/services/webhook-lifecycle-extractors.js +59 -0
- package/dist/services/webhook-lifecycle-extractors.js.map +1 -0
- package/dist/services/webhook-lifecycle-store.d.ts +45 -0
- package/dist/services/webhook-lifecycle-store.d.ts.map +1 -0
- package/dist/services/webhook-lifecycle-store.js +159 -0
- package/dist/services/webhook-lifecycle-store.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts +8 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +20 -2
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-tmux.d.ts +0 -22
- package/dist/setup/ensure-tmux.d.ts.map +1 -1
- package/dist/setup/ensure-tmux.js +25 -1
- 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 +15 -1
- package/dist/setup/verify-permissions.js.map +1 -1
- package/dist/skills/definitions.d.ts +2 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +178 -12
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/installer.d.ts +34 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +119 -2
- package/dist/skills/installer.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +50 -0
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js +83 -0
- package/dist/utils/bot-routing.js.map +1 -1
- package/dist/utils/daemon-discovery.d.ts +11 -0
- package/dist/utils/daemon-discovery.d.ts.map +1 -0
- package/dist/utils/daemon-discovery.js +59 -0
- package/dist/utils/daemon-discovery.js.map +1 -0
- package/dist/utils/user-token.d.ts.map +1 -1
- package/dist/utils/user-token.js +0 -2
- package/dist/utils/user-token.js.map +1 -1
- package/dist/worker.js +198 -27
- 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 +412 -9
- package/dist/workflows/definition.d.ts.map +1 -1
- package/dist/workflows/definition.js +238 -3
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +114 -11
- package/dist/workflows/events/payloads.d.ts.map +1 -1
- package/dist/workflows/events/payloads.js +46 -0
- package/dist/workflows/events/payloads.js.map +1 -1
- package/dist/workflows/events/replay.d.ts +21 -0
- package/dist/workflows/events/replay.d.ts.map +1 -1
- package/dist/workflows/events/replay.js +103 -0
- package/dist/workflows/events/replay.js.map +1 -1
- package/dist/workflows/events/schema.d.ts +1301 -606
- package/dist/workflows/events/schema.d.ts.map +1 -1
- package/dist/workflows/events/schema.js +37 -1
- package/dist/workflows/events/schema.js.map +1 -1
- package/dist/workflows/events/types.d.ts +5 -1
- package/dist/workflows/events/types.d.ts.map +1 -1
- package/dist/workflows/loader.d.ts +14 -0
- package/dist/workflows/loader.d.ts.map +1 -1
- package/dist/workflows/loader.js +27 -0
- package/dist/workflows/loader.js.map +1 -1
- package/dist/workflows/loop.js +58 -0
- package/dist/workflows/loop.js.map +1 -1
- package/dist/workflows/ops-projection.d.ts +58 -0
- package/dist/workflows/ops-projection.d.ts.map +1 -1
- package/dist/workflows/ops-projection.js +74 -0
- package/dist/workflows/ops-projection.js.map +1 -1
- package/dist/workflows/orchestrator.d.ts +65 -1
- package/dist/workflows/orchestrator.d.ts.map +1 -1
- package/dist/workflows/orchestrator.js +486 -74
- package/dist/workflows/orchestrator.js.map +1 -1
- package/dist/workflows/output-binding.d.ts +8 -1
- package/dist/workflows/output-binding.d.ts.map +1 -1
- package/dist/workflows/output-binding.js +75 -11
- 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 +39 -4
- package/dist/workflows/runtime.js.map +1 -1
- package/dist/workflows/trigger-from-envelope.d.ts +13 -0
- package/dist/workflows/trigger-from-envelope.d.ts.map +1 -0
- package/dist/workflows/trigger-from-envelope.js +67 -0
- package/dist/workflows/trigger-from-envelope.js.map +1 -0
- package/dist/workflows/wait.d.ts +23 -2
- package/dist/workflows/wait.d.ts.map +1 -1
- package/dist/workflows/wait.js +39 -17
- package/dist/workflows/wait.js.map +1 -1
- package/package.json +1 -1
- package/dist/services/feishu-task-client.d.ts +0 -28
- package/dist/services/feishu-task-client.d.ts.map +0 -1
- package/dist/services/feishu-task-client.js +0 -123
- package/dist/services/feishu-task-client.js.map +0 -1
- package/dist/services/task-store.d.ts +0 -37
- package/dist/services/task-store.d.ts.map +0 -1
- package/dist/services/task-store.js +0 -115
- package/dist/services/task-store.js.map +0 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode hook adapter。
|
|
3
|
+
*
|
|
4
|
+
* OpenCode 通过 QuestionAsked 事件发起提问,payload 形状:
|
|
5
|
+
* {
|
|
6
|
+
* hook_event_name: 'QuestionAsked',
|
|
7
|
+
* session_id: 'opencode-<id>',
|
|
8
|
+
* question_id: '<id>', // 同 _opencode_request_id
|
|
9
|
+
* question_text: '问题文本(拍平版本)',
|
|
10
|
+
* tool_input: {
|
|
11
|
+
* questions: [
|
|
12
|
+
* {
|
|
13
|
+
* question: '问题文本',
|
|
14
|
+
* header: '可选标题',
|
|
15
|
+
* options: [{ label: '选项文本', description?: '描述' }, ...],
|
|
16
|
+
* multiple: boolean,
|
|
17
|
+
* }
|
|
18
|
+
* ]
|
|
19
|
+
* },
|
|
20
|
+
* _opencode_request_id: '<id>',
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* OpenCode 期望的 answer directive 形状(发往 /question/:id/reply):
|
|
24
|
+
* { type: 'answer', answers: string[][] }
|
|
25
|
+
* 其中 answers[i] = 第 i 个问题选中的 label 数组;跳过的 question 填 ['']。
|
|
26
|
+
*
|
|
27
|
+
* 若没有结构化 questions(旧版兼容路径),改用:
|
|
28
|
+
* { type: 'answer', text: '自由文本' }
|
|
29
|
+
*
|
|
30
|
+
* passthrough(放行)directive 形状:
|
|
31
|
+
* { type: 'answer', answers: [['']] }
|
|
32
|
+
* (每条 question 填空哨兵 [''],让 OpenCode plugin 视为"未答"并继续)
|
|
33
|
+
*
|
|
34
|
+
* 参考来源:x-desktop-app/src/island/main/bridge/adapters/OpenCodeAdapter.ts
|
|
35
|
+
* x-desktop-app/src/island/main/bridge/BridgeServer.ts buildOpenCodeAnswerDirective
|
|
36
|
+
* x-desktop-app/src/island/hooks-install/opencode.ts postQuestionReply
|
|
37
|
+
*/
|
|
38
|
+
import type { HookAskAdapter } from './types.js';
|
|
39
|
+
declare const openCodeAdapter: HookAskAdapter;
|
|
40
|
+
export default openCodeAdapter;
|
|
41
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/core/ask-hook/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAC;AAE5D,QAAA,MAAM,eAAe,EAAE,cAoFtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode hook adapter。
|
|
3
|
+
*
|
|
4
|
+
* OpenCode 通过 QuestionAsked 事件发起提问,payload 形状:
|
|
5
|
+
* {
|
|
6
|
+
* hook_event_name: 'QuestionAsked',
|
|
7
|
+
* session_id: 'opencode-<id>',
|
|
8
|
+
* question_id: '<id>', // 同 _opencode_request_id
|
|
9
|
+
* question_text: '问题文本(拍平版本)',
|
|
10
|
+
* tool_input: {
|
|
11
|
+
* questions: [
|
|
12
|
+
* {
|
|
13
|
+
* question: '问题文本',
|
|
14
|
+
* header: '可选标题',
|
|
15
|
+
* options: [{ label: '选项文本', description?: '描述' }, ...],
|
|
16
|
+
* multiple: boolean,
|
|
17
|
+
* }
|
|
18
|
+
* ]
|
|
19
|
+
* },
|
|
20
|
+
* _opencode_request_id: '<id>',
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* OpenCode 期望的 answer directive 形状(发往 /question/:id/reply):
|
|
24
|
+
* { type: 'answer', answers: string[][] }
|
|
25
|
+
* 其中 answers[i] = 第 i 个问题选中的 label 数组;跳过的 question 填 ['']。
|
|
26
|
+
*
|
|
27
|
+
* 若没有结构化 questions(旧版兼容路径),改用:
|
|
28
|
+
* { type: 'answer', text: '自由文本' }
|
|
29
|
+
*
|
|
30
|
+
* passthrough(放行)directive 形状:
|
|
31
|
+
* { type: 'answer', answers: [['']] }
|
|
32
|
+
* (每条 question 填空哨兵 [''],让 OpenCode plugin 视为"未答"并继续)
|
|
33
|
+
*
|
|
34
|
+
* 参考来源:x-desktop-app/src/island/main/bridge/adapters/OpenCodeAdapter.ts
|
|
35
|
+
* x-desktop-app/src/island/main/bridge/BridgeServer.ts buildOpenCodeAnswerDirective
|
|
36
|
+
* x-desktop-app/src/island/hooks-install/opencode.ts postQuestionReply
|
|
37
|
+
*/
|
|
38
|
+
const openCodeAdapter = {
|
|
39
|
+
parseQuestions(payload) {
|
|
40
|
+
if (!payload || typeof payload !== 'object')
|
|
41
|
+
return null;
|
|
42
|
+
const p = payload;
|
|
43
|
+
// 只处理 QuestionAsked 事件
|
|
44
|
+
if (p.hook_event_name !== 'QuestionAsked')
|
|
45
|
+
return null;
|
|
46
|
+
// 尝试从结构化 tool_input.questions 解析
|
|
47
|
+
const toolInput = p.tool_input;
|
|
48
|
+
const rawQuestions = toolInput?.questions;
|
|
49
|
+
if (rawQuestions && rawQuestions.length > 0) {
|
|
50
|
+
const questions = rawQuestions.map((q, _qIdx) => {
|
|
51
|
+
const qText = q.question ?? '';
|
|
52
|
+
const multiSelect = !!q.multiple;
|
|
53
|
+
const rawOpts = q.options ?? [];
|
|
54
|
+
const options = rawOpts.map((opt) => {
|
|
55
|
+
const label = opt.label ?? '';
|
|
56
|
+
// option 无独立 key 时,用 label 作为 key
|
|
57
|
+
return { key: label, label };
|
|
58
|
+
});
|
|
59
|
+
return { prompt: qText, options, multiSelect };
|
|
60
|
+
});
|
|
61
|
+
return { questions, raw: payload };
|
|
62
|
+
}
|
|
63
|
+
// 旧版兼容:只有 question_text(无结构化 options)
|
|
64
|
+
const questionText = typeof p.question_text === 'string'
|
|
65
|
+
? p.question_text
|
|
66
|
+
: 'OpenCode has a question';
|
|
67
|
+
const questions = [
|
|
68
|
+
{
|
|
69
|
+
prompt: questionText,
|
|
70
|
+
options: [],
|
|
71
|
+
multiSelect: false,
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
return { questions, raw: payload };
|
|
75
|
+
},
|
|
76
|
+
formatAnswer(answersByQuestion, parsed) {
|
|
77
|
+
const p = parsed.raw;
|
|
78
|
+
const toolInput = p?.tool_input;
|
|
79
|
+
const hasStructured = Array.isArray(toolInput?.questions) && (toolInput.questions.length > 0);
|
|
80
|
+
if (hasStructured) {
|
|
81
|
+
// 结构化路径:answers[i] = 第 i 个 question 选中的 label 数组;跳过填 ['']
|
|
82
|
+
const answers = parsed.questions.map((q, i) => {
|
|
83
|
+
const selectedKeys = answersByQuestion[i];
|
|
84
|
+
if (!selectedKeys || selectedKeys.length === 0)
|
|
85
|
+
return [''];
|
|
86
|
+
// OpenCode options 以 label 为 key,直接用 key(= label)
|
|
87
|
+
return selectedKeys.map((k) => {
|
|
88
|
+
const opt = q.options.find((o) => o.key === k);
|
|
89
|
+
return opt ? opt.label : k;
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
return JSON.stringify({ type: 'answer', answers });
|
|
93
|
+
}
|
|
94
|
+
// 旧版:拍平所有答案为 free-text
|
|
95
|
+
const flat = answersByQuestion
|
|
96
|
+
.flat()
|
|
97
|
+
.filter((s) => s.length > 0)
|
|
98
|
+
.join(', ');
|
|
99
|
+
return JSON.stringify({ type: 'answer', text: flat });
|
|
100
|
+
},
|
|
101
|
+
passthrough(_payload) {
|
|
102
|
+
// 真放行:空 stdout。插件见 stdout 为空 → 返回 undefined → OpenCode 自行处理
|
|
103
|
+
// (原生终端提问)。不输出 {type:'answer',...},避免用空答案顶替这次提问。
|
|
104
|
+
return '';
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
export default openCodeAdapter;
|
|
108
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/core/ask-hook/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/ask-hook/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAWjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAExE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import claude from './claude-code.js';
|
|
2
|
+
import codex from './codex.js';
|
|
3
|
+
import opencode from './opencode.js';
|
|
4
|
+
const REGISTRY = {
|
|
5
|
+
'claude-code': claude,
|
|
6
|
+
codex,
|
|
7
|
+
opencode,
|
|
8
|
+
};
|
|
9
|
+
export function getHookAdapter(cliId) {
|
|
10
|
+
return REGISTRY[cliId];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/ask-hook/registry.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,MAAM,QAAQ,GAAmC;IAC/C,aAAa,EAAE,MAAM;IACrB,KAAK;IACL,QAAQ;CACT,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AskQuestion } from '../ask-types.js';
|
|
2
|
+
/** adapter 解析一个 hook payload 后得到的问题列表和原始上下文。 */
|
|
3
|
+
export interface ParsedAsk {
|
|
4
|
+
questions: AskQuestion[];
|
|
5
|
+
/** adapter 私有的原始上下文,formatAnswer 用来重建 directive。 */
|
|
6
|
+
raw: unknown;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 每家 CLI 的 hook adapter 接口。
|
|
10
|
+
*
|
|
11
|
+
* - parseQuestions:非 askUserQuestion 事件返回 null(hook 客户端据此输出"放行"directive)。
|
|
12
|
+
* - formatAnswer:把用户答案映射回该 CLI 所期望的 directive JSON 字符串。
|
|
13
|
+
* - passthrough:hook 接管失败时的"放行/无操作" directive,让 CLI 回退原生终端提问。
|
|
14
|
+
*/
|
|
15
|
+
export interface HookAskAdapter {
|
|
16
|
+
/** 非 askUserQuestion 事件返回 null(hook 客户端据此输出"放行"directive)。 */
|
|
17
|
+
parseQuestions(payload: unknown): ParsedAsk | null;
|
|
18
|
+
/**
|
|
19
|
+
* answersByQuestion[i] = questions[i] 选中的 key 数组。
|
|
20
|
+
* 返回写回 CLI 的 directive JSON 字符串。
|
|
21
|
+
*/
|
|
22
|
+
formatAnswer(answersByQuestion: ReadonlyArray<ReadonlyArray<string>>, parsed: ParsedAsk): string;
|
|
23
|
+
/** hook 接管失败时的"放行/无操作" directive(让 CLI 回退原生终端提问)。 */
|
|
24
|
+
passthrough(payload: unknown): string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/ask-hook/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,oDAAoD;IACpD,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IAEnD;;;OAGG;IACH,YAAY,CAAC,iBAAiB,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAEjG,qDAAqD;IACrD,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/ask-hook/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public types for `botmux ask` (v0.1.8).
|
|
3
|
+
*
|
|
4
|
+
* See `/tmp/botmux-ask.md` for the full design. This module is import-safe for
|
|
5
|
+
* both the daemon side (broker, card builder, click handler) and the CLI side
|
|
6
|
+
* (`botmux ask buttons` subcommand) — no runtime cross-imports.
|
|
7
|
+
*/
|
|
8
|
+
/** A single selectable option on an ask card. `key` is the stable identifier
|
|
9
|
+
* returned via stdout; `label` is the human-facing button text. When the user
|
|
10
|
+
* writes `--options "yes,no"`, `key === label`. With `--options "yes=继续"`,
|
|
11
|
+
* `key="yes"` and `label="继续"`. */
|
|
12
|
+
export interface AskOption {
|
|
13
|
+
key: string;
|
|
14
|
+
label: string;
|
|
15
|
+
}
|
|
16
|
+
/** 多问多选模型中一个问题的描述。`key` 是问题的稳定标识符(可选,默认用序号),
|
|
17
|
+
* `label` 是人类可读的标题(暂保留向后兼容),`prompt` 是问题正文,
|
|
18
|
+
* `options` 是该问题的选项列表,`multiSelect` 表示是否允许多选。 */
|
|
19
|
+
export interface AskQuestion {
|
|
20
|
+
/** 问题正文文本,展示给用户。 */
|
|
21
|
+
prompt: string;
|
|
22
|
+
/** 该问题的选项列表,调用方保证 `options.length ≥ 2` 且 `key` 唯一。 */
|
|
23
|
+
options: ReadonlyArray<AskOption>;
|
|
24
|
+
/** true = 多选(可选多个 key);false = 单选(恰好 1 个 key)。 */
|
|
25
|
+
multiSelect: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Terminal result of an ask, returned to the CLI caller. Discriminated by
|
|
28
|
+
* `kind` so the CLI can map straight to stdout shape + exit code.
|
|
29
|
+
*
|
|
30
|
+
* v0.1.8 变更:`answered` 变体的 `selected: string` 升级为
|
|
31
|
+
* `answers: ReadonlyArray<ReadonlyArray<string>>`,其中 `answers[i]`
|
|
32
|
+
* 对应第 i 个问题(`questions[i]`)选中的 key 数组。
|
|
33
|
+
* 向后兼容:单问单选场景用 `toLegacySelected` 取回旧的 `string`。 */
|
|
34
|
+
export type AskResult = {
|
|
35
|
+
kind: 'answered';
|
|
36
|
+
/** answers[i] = questions[i] 选中的 key 数组。 */
|
|
37
|
+
answers: ReadonlyArray<ReadonlyArray<string>>;
|
|
38
|
+
by: string;
|
|
39
|
+
comment: null;
|
|
40
|
+
timedOut: false;
|
|
41
|
+
} | {
|
|
42
|
+
kind: 'timedOut';
|
|
43
|
+
selected: null;
|
|
44
|
+
by: null;
|
|
45
|
+
comment: null;
|
|
46
|
+
timedOut: true;
|
|
47
|
+
} | {
|
|
48
|
+
kind: 'invalidated';
|
|
49
|
+
reason: string;
|
|
50
|
+
selected: null;
|
|
51
|
+
by: null;
|
|
52
|
+
comment: null;
|
|
53
|
+
timedOut: false;
|
|
54
|
+
};
|
|
55
|
+
/** JSON envelope emitted by `botmux ask buttons --json`. Keeps `comment` as a
|
|
56
|
+
* forward-compat `null` slot — v0.1.8 may flip it to `string`.
|
|
57
|
+
*
|
|
58
|
+
* v0.1.8 新增 `answers: string[][] | null`(多问多选完整答案),
|
|
59
|
+
* 保留 `selected: string | null` 做向后兼容(等价于 `toLegacySelected`)。 */
|
|
60
|
+
export interface AskJsonOutput {
|
|
61
|
+
/** 向后兼容:单问单选时等于 `answers[0][0]`,否则为 null。 */
|
|
62
|
+
selected: string | null;
|
|
63
|
+
/** v0.1.8 新增:按问题分组的完整答案,answered 时非 null。 */
|
|
64
|
+
answers: string[][] | null;
|
|
65
|
+
by: string | null;
|
|
66
|
+
comment: null;
|
|
67
|
+
timedOut: boolean;
|
|
68
|
+
}
|
|
69
|
+
/** Input accepted by broker.registerAsk. Caller (CLI subcommand → daemon IPC
|
|
70
|
+
* handler) is responsible for env validation, parameter parsing, and resolving
|
|
71
|
+
* the approver allowlist before reaching the broker.
|
|
72
|
+
*
|
|
73
|
+
* v0.1.8 变更:`options`/`prompt` 字段替换为 `questions: ReadonlyArray<AskQuestion>`。 */
|
|
74
|
+
export interface CreateAskInput {
|
|
75
|
+
larkAppId: string;
|
|
76
|
+
chatId: string;
|
|
77
|
+
/** thread-scope ask → root message_id; chat-scope ask → null. */
|
|
78
|
+
rootMessageId: string | null;
|
|
79
|
+
/** Session that issued the ask — used for audit + future replay scoping. */
|
|
80
|
+
sessionId: string;
|
|
81
|
+
/** Pre-resolved open_id allowlist. Empty set means no one can answer; the
|
|
82
|
+
* caller (not the broker) must enforce the §6 approver fallback chain so the
|
|
83
|
+
* broker stays IM-agnostic. */
|
|
84
|
+
approvers: ReadonlySet<string>;
|
|
85
|
+
/** 问题列表,调用方保证每问 `options.length ≥ 2` 且 key 唯一。 */
|
|
86
|
+
questions: ReadonlyArray<AskQuestion>;
|
|
87
|
+
/** Absolute deadline; computed by caller from `--timeout`. Broker won't
|
|
88
|
+
* re-compute. */
|
|
89
|
+
timeoutMs: number;
|
|
90
|
+
}
|
|
91
|
+
/** Daemon-internal state for a pending ask. Not exported on the IPC boundary —
|
|
92
|
+
* the CLI side only sees `AskResult`.
|
|
93
|
+
*
|
|
94
|
+
* v0.1.8 变更:`options`/`prompt` 替换为 `questions`。 */
|
|
95
|
+
export interface PendingAsk {
|
|
96
|
+
askId: string;
|
|
97
|
+
/** Anti-replay nonce embedded in each button's action value. Click events
|
|
98
|
+
* whose nonce doesn't match → treated as stale (e.g. card from a previous
|
|
99
|
+
* daemon process before restart). */
|
|
100
|
+
nonce: string;
|
|
101
|
+
larkAppId: string;
|
|
102
|
+
chatId: string;
|
|
103
|
+
rootMessageId: string | null;
|
|
104
|
+
sessionId: string;
|
|
105
|
+
approvers: ReadonlySet<string>;
|
|
106
|
+
/** 问题列表,替代旧的 `options` + `prompt`。 */
|
|
107
|
+
questions: ReadonlyArray<AskQuestion>;
|
|
108
|
+
/** 当前已勾选答案快照。仅 daemon/card 内部使用;CLI IPC 边界不暴露。 */
|
|
109
|
+
selections?: ReadonlyArray<ReadonlyArray<string>>;
|
|
110
|
+
createdAt: number;
|
|
111
|
+
deadlineAt: number;
|
|
112
|
+
/** Set after the card dispatch succeeds. Until then, the ask is "registered
|
|
113
|
+
* but not visible" — clicks can't physically arrive yet. */
|
|
114
|
+
cardMessageId?: string;
|
|
115
|
+
/** Once true, subsequent click attempts return `already_settled`. */
|
|
116
|
+
settled: boolean;
|
|
117
|
+
}
|
|
118
|
+
/** Outcome of a click-resolution attempt. Card click handler maps these to
|
|
119
|
+
* user-visible toasts. */
|
|
120
|
+
export type AskClickOutcome =
|
|
121
|
+
/** First valid click — caller's Promise resolves with `kind:'answered'`. */
|
|
122
|
+
'accepted'
|
|
123
|
+
/** Clicker's open_id not in approvers — caller shows "你没有权限". */
|
|
124
|
+
| 'unauthorized'
|
|
125
|
+
/** No such askId, nonce mismatch, or unknown option — caller shows
|
|
126
|
+
* "此 ask 已失效(daemon 重启)". Covers the §8 stale-card case. */
|
|
127
|
+
| 'stale'
|
|
128
|
+
/** Ask already settled (race winner exists or timed out). */
|
|
129
|
+
| 'already_settled'
|
|
130
|
+
/** 多选累积:用户勾选/取消某项,尚未 submit——不触发 settle。 */
|
|
131
|
+
| 'toggled';
|
|
132
|
+
/** 旧单选语义兼容:仅当"单问且恰好选 1 个"时返回该 key,否则 null。
|
|
133
|
+
* `botmux ask buttons` 子命令与其测试据此保持单选行为不变。 */
|
|
134
|
+
export declare function toLegacySelected(result: AskResult): string | null;
|
|
135
|
+
/** Card dispatcher contract. The im/lark side registers a dispatcher via
|
|
136
|
+
* `setCardDispatcher`; the broker is otherwise IM-agnostic. */
|
|
137
|
+
export interface AskCardDispatcher {
|
|
138
|
+
send(ask: PendingAsk): Promise<{
|
|
139
|
+
messageId: string;
|
|
140
|
+
}>;
|
|
141
|
+
/** Called when an ask settles (answered / timedOut / invalidated). Card
|
|
142
|
+
* builder uses this to PATCH the card into a terminal state. Best-effort —
|
|
143
|
+
* the broker does not block on it. */
|
|
144
|
+
onSettle?(ask: PendingAsk, result: AskResult): void | Promise<void>;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=ask-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-types.d.ts","sourceRoot":"","sources":["../../src/core/ask-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public types for `botmux ask` (v0.1.8).
|
|
3
|
+
*
|
|
4
|
+
* See `/tmp/botmux-ask.md` for the full design. This module is import-safe for
|
|
5
|
+
* both the daemon side (broker, card builder, click handler) and the CLI side
|
|
6
|
+
* (`botmux ask buttons` subcommand) — no runtime cross-imports.
|
|
7
|
+
*/
|
|
8
|
+
/** 旧单选语义兼容:仅当"单问且恰好选 1 个"时返回该 key,否则 null。
|
|
9
|
+
* `botmux ask buttons` 子命令与其测试据此保持单选行为不变。 */
|
|
10
|
+
export function toLegacySelected(result) {
|
|
11
|
+
if (result.kind !== 'answered')
|
|
12
|
+
return null;
|
|
13
|
+
if (result.answers.length === 1 && result.answers[0].length === 1) {
|
|
14
|
+
return result.answers[0][0];
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ask-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-types.js","sourceRoot":"","sources":["../../src/core/ask-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwIH;8CAC8C;AAC9C,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -16,6 +16,26 @@ export interface SlashCommandInvocation {
|
|
|
16
16
|
content: string;
|
|
17
17
|
}
|
|
18
18
|
export { validateWorkingDir };
|
|
19
|
+
/**
|
|
20
|
+
* Resolve a non-numeric `/repo <arg>` into a concrete repo path + display name.
|
|
21
|
+
* `arg` is either a path (absolute or relative) or a first-level project name
|
|
22
|
+
* under one of the bot's scan dirs — letting the user skip the selection card.
|
|
23
|
+
*
|
|
24
|
+
* Resolution:
|
|
25
|
+
* 1. Build candidate absolute paths — absolute / `~` taken as-is; relative or
|
|
26
|
+
* bare names resolved against each scan dir, then the daemon cwd (mirrors
|
|
27
|
+
* how the card's project list is rooted).
|
|
28
|
+
* 2. Prefer a candidate matching a scanned git project (carries a branch label).
|
|
29
|
+
* 3. For a bare name, also match a scanned project by basename (covers projects
|
|
30
|
+
* nested deeper than the scan-dir top level).
|
|
31
|
+
* 4. Fall back to any existing directory — lenient like `/cd`, whose trust model
|
|
32
|
+
* is "owner explicitly chose a dir"; the CLI already runs with full FS access.
|
|
33
|
+
* Returns null when nothing resolves to an existing directory.
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveRepoSelection(repoArg: string, scanDirs: string[]): {
|
|
36
|
+
path: string;
|
|
37
|
+
displayName: string;
|
|
38
|
+
} | null;
|
|
19
39
|
/**
|
|
20
40
|
* Parse a force-topic invocation: `/t [prompt]` or `/topic [prompt]`.
|
|
21
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAkD,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/G,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAkD,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/G,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,eAAO,MAAM,eAAe,aAAuK,CAAC;AAEpM;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,aAO/B,CAAC;AAIH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA0C9C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKpF;AAED;;;;mCAImC;AACnC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAqB1F;AA8DD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzG,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,gCAAgC,EAAE,WAAW,EAAE,CAAC,CAAC;CACnF;AAoOD,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,kBAAkB,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAorCf;AAID,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,kBAAkB,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|