botmux 3.9.1 → 3.10.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 +1 -1
- package/README.md +1 -1
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +6 -0
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/opencode.d.ts.map +1 -1
- package/dist/adapters/cli/opencode.js +7 -1
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/reasonix.d.ts +35 -0
- package/dist/adapters/cli/reasonix.d.ts.map +1 -0
- package/dist/adapters/cli/reasonix.js +236 -0
- package/dist/adapters/cli/reasonix.js.map +1 -0
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +4 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +87 -87
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +5 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +253 -69
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts +18 -4
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +274 -27
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +1 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +27 -3
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dispatch.d.ts +54 -24
- package/dist/core/dispatch.d.ts.map +1 -1
- package/dist/core/dispatch.js +81 -27
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/input-turn-dedupe.d.ts +20 -0
- package/dist/core/input-turn-dedupe.d.ts.map +1 -0
- package/dist/core/input-turn-dedupe.js +57 -0
- package/dist/core/input-turn-dedupe.js.map +1 -0
- package/dist/core/local-terminal-opener.d.ts.map +1 -1
- package/dist/core/local-terminal-opener.js +10 -1
- package/dist/core/local-terminal-opener.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/plugins/pm2.d.ts.map +1 -1
- package/dist/core/plugins/pm2.js +7 -1
- package/dist/core/plugins/pm2.js.map +1 -1
- package/dist/core/resource-monitor/attribution.d.ts.map +1 -1
- package/dist/core/resource-monitor/attribution.js +17 -1
- package/dist/core/resource-monitor/attribution.js.map +1 -1
- package/dist/core/resource-monitor/darwin.d.ts +145 -0
- package/dist/core/resource-monitor/darwin.d.ts.map +1 -0
- package/dist/core/resource-monitor/darwin.js +360 -0
- package/dist/core/resource-monitor/darwin.js.map +1 -0
- package/dist/core/resource-monitor/procfs.d.ts.map +1 -1
- package/dist/core/resource-monitor/procfs.js +6 -0
- package/dist/core/resource-monitor/procfs.js.map +1 -1
- package/dist/core/resource-monitor/types.d.ts +1 -1
- package/dist/core/resource-monitor/types.d.ts.map +1 -1
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +5 -2
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +3 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts +3 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +46 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-marker.d.ts +1 -8
- package/dist/core/session-marker.d.ts.map +1 -1
- package/dist/core/session-marker.js +2 -50
- package/dist/core/session-marker.js.map +1 -1
- package/dist/core/types.d.ts +3 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +17 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +292 -9
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +11 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +59 -15
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/daemon-internal-api.d.ts.map +1 -1
- package/dist/dashboard/daemon-internal-api.js +11 -2
- package/dist/dashboard/daemon-internal-api.js.map +1 -1
- package/dist/dashboard/groups-action-helpers.d.ts +2 -0
- package/dist/dashboard/groups-action-helpers.d.ts.map +1 -1
- package/dist/dashboard/groups-action-helpers.js +9 -0
- package/dist/dashboard/groups-action-helpers.js.map +1 -1
- package/dist/dashboard/groups-matrix-snapshot.d.ts +56 -0
- package/dist/dashboard/groups-matrix-snapshot.d.ts.map +1 -0
- package/dist/dashboard/groups-matrix-snapshot.js +127 -0
- package/dist/dashboard/groups-matrix-snapshot.js.map +1 -0
- package/dist/dashboard/resource-monitor-service.d.ts.map +1 -1
- package/dist/dashboard/resource-monitor-service.js +18 -2
- package/dist/dashboard/resource-monitor-service.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +45 -4
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/groups-api.js +1 -1
- package/dist/dashboard/web/groups-api.js.map +1 -1
- package/dist/dashboard/web/i18n.js +10 -10
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +26 -11
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{bot-defaults-page-BHTQEWCH.js → bot-defaults-page-LTVOUDIS.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-KLZCQAHF.js → chunk-3UE7S77S.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-W77TPKZH.js → chunk-DCS35UMD.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-E3HZZXK5.js → chunk-MFQPCVHY.js} +4 -4
- package/dist/dashboard-web/chunks/{chunk-EZH56JCI.js → chunk-ZU3UUKAR.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-BP255CAX.js → connectors-page-5KWDIMKC.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-CDHVXBUT.js → groups-page-FHOKYXMW.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-57BFE6GT.js → insights-page-T2ZX2RWL.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-UTOYGQVF.js → monitor-room-YNVBAGR6.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-WTHYAIUM.js → monitoring-page-LHM55YWN.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-JSMIB353.js → office-page-ATXVP7PW.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-3VDBOH7L.js → overview-page-QYI3KBDD.js} +1 -1
- package/dist/dashboard-web/chunks/roles-page-56VWM6CD.js +1 -0
- package/dist/dashboard-web/chunks/{schedules-page-HHN736H6.js → schedules-page-S5K6U4EO.js} +1 -1
- package/dist/dashboard-web/chunks/{sessions-page-EIWOZD7A.js → sessions-page-WBP4N7D2.js} +1 -1
- package/dist/dashboard-web/chunks/{settings-page-2IUT5LS4.js → settings-page-QUZDQARR.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-JKFKMUEM.js → skills-page-IFY7AEND.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-Q2PXC3UY.js → team-federation-page-C7FJQPFZ.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-EBQCD4AO.js → v3-page-2LMF3WWR.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-QZRMVNZN.js → whiteboards-page-3XC6QRMY.js} +1 -1
- package/dist/dashboard-web/style.css +2 -4
- package/dist/dashboard.js +65 -9
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +34 -7
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +32 -7
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +7 -0
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +56 -0
- 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 +51 -19
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +10 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +79 -0
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +14 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +171 -15
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/issue-card.d.ts +223 -0
- package/dist/im/lark/issue-card.d.ts.map +1 -0
- package/dist/im/lark/issue-card.js +542 -0
- package/dist/im/lark/issue-card.js.map +1 -0
- package/dist/im/lark/issue-command-deps.d.ts +41 -0
- package/dist/im/lark/issue-command-deps.d.ts.map +1 -0
- package/dist/im/lark/issue-command-deps.js +195 -0
- package/dist/im/lark/issue-command-deps.js.map +1 -0
- package/dist/im/lark/issue-command.d.ts +137 -0
- package/dist/im/lark/issue-command.d.ts.map +1 -0
- package/dist/im/lark/issue-command.js +335 -0
- package/dist/im/lark/issue-command.js.map +1 -0
- package/dist/im/lark/lark-hosts.d.ts +5 -0
- package/dist/im/lark/lark-hosts.d.ts.map +1 -1
- package/dist/im/lark/lark-hosts.js +10 -0
- package/dist/im/lark/lark-hosts.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +24 -7
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/platform/issue-client.d.ts +201 -0
- package/dist/platform/issue-client.d.ts.map +1 -0
- package/dist/platform/issue-client.js +142 -0
- package/dist/platform/issue-client.js.map +1 -0
- package/dist/platform/platform-http.d.ts +4 -0
- package/dist/platform/platform-http.d.ts.map +1 -1
- package/dist/platform/platform-http.js +38 -2
- package/dist/platform/platform-http.js.map +1 -1
- package/dist/pm2-graceful-exit.d.ts +28 -0
- package/dist/pm2-graceful-exit.d.ts.map +1 -0
- package/dist/pm2-graceful-exit.js +39 -0
- package/dist/pm2-graceful-exit.js.map +1 -0
- package/dist/services/bridge-fallback-gate.d.ts +9 -2
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +31 -19
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/issue-board-store.d.ts +214 -0
- package/dist/services/issue-board-store.d.ts.map +1 -0
- package/dist/services/issue-board-store.js +472 -0
- package/dist/services/issue-board-store.js.map +1 -0
- package/dist/services/issue-claim-flow.d.ts +160 -0
- package/dist/services/issue-claim-flow.d.ts.map +1 -0
- package/dist/services/issue-claim-flow.js +222 -0
- package/dist/services/issue-claim-flow.js.map +1 -0
- package/dist/services/issue-outbox-pump.d.ts +25 -0
- package/dist/services/issue-outbox-pump.d.ts.map +1 -0
- package/dist/services/issue-outbox-pump.js +102 -0
- package/dist/services/issue-outbox-pump.js.map +1 -0
- package/dist/services/issue-release.d.ts +78 -0
- package/dist/services/issue-release.d.ts.map +1 -0
- package/dist/services/issue-release.js +89 -0
- package/dist/services/issue-release.js.map +1 -0
- package/dist/services/issue-report.d.ts +72 -0
- package/dist/services/issue-report.d.ts.map +1 -0
- package/dist/services/issue-report.js +84 -0
- package/dist/services/issue-report.js.map +1 -0
- package/dist/services/issue-status-view.d.ts +52 -0
- package/dist/services/issue-status-view.d.ts.map +1 -0
- package/dist/services/issue-status-view.js +42 -0
- package/dist/services/issue-status-view.js.map +1 -0
- package/dist/services/issue-status-writer.d.ts +98 -0
- package/dist/services/issue-status-writer.d.ts.map +1 -0
- package/dist/services/issue-status-writer.js +123 -0
- package/dist/services/issue-status-writer.js.map +1 -0
- package/dist/services/message-listener-store.d.ts +18 -0
- package/dist/services/message-listener-store.d.ts.map +1 -1
- package/dist/services/message-listener-store.js +35 -10
- package/dist/services/message-listener-store.js.map +1 -1
- package/dist/services/message-listener.d.ts +17 -0
- package/dist/services/message-listener.d.ts.map +1 -1
- package/dist/services/message-listener.js +26 -0
- package/dist/services/message-listener.js.map +1 -1
- package/dist/services/traex-paths.d.ts +14 -2
- package/dist/services/traex-paths.d.ts.map +1 -1
- package/dist/services/traex-paths.js +16 -2
- package/dist/services/traex-paths.js.map +1 -1
- package/dist/services/traex-transcript.d.ts +33 -0
- package/dist/services/traex-transcript.d.ts.map +1 -1
- package/dist/services/traex-transcript.js +135 -28
- package/dist/services/traex-transcript.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +2 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/lark-scopes.json +1 -2
- package/dist/setup/verify-permissions.d.ts.map +1 -1
- package/dist/setup/verify-permissions.js +8 -0
- package/dist/setup/verify-permissions.js.map +1 -1
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +1 -1
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +13 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +1 -1
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/utils/global-install.d.ts.map +1 -1
- package/dist/utils/global-install.js +56 -10
- package/dist/utils/global-install.js.map +1 -1
- package/dist/utils/idle-detector.d.ts +4 -0
- package/dist/utils/idle-detector.d.ts.map +1 -1
- package/dist/utils/idle-detector.js +25 -0
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/process-identity.d.ts +7 -0
- package/dist/utils/process-identity.d.ts.map +1 -0
- package/dist/utils/process-identity.js +62 -0
- package/dist/utils/process-identity.js.map +1 -0
- package/dist/worker.js +264 -24
- package/dist/worker.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +10 -10
- package/dist/workflows/events/schema.d.ts +28 -28
- package/dist/workflows/hostExecutors/registry.d.ts +2 -7
- package/dist/workflows/hostExecutors/registry.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/registry.js.map +1 -1
- package/dist/workflows/shared/provider-reconciler.d.ts +1 -30
- package/dist/workflows/shared/provider-reconciler.d.ts.map +1 -1
- package/dist/workflows/shared/provider-reconciler.js.map +1 -1
- package/dist/workflows/v3/artifact-contract.d.ts +41 -0
- package/dist/workflows/v3/artifact-contract.d.ts.map +1 -0
- package/dist/workflows/v3/artifact-contract.js +20 -0
- package/dist/workflows/v3/artifact-contract.js.map +1 -0
- package/dist/workflows/v3/botmux-attempt-lease.d.ts +7 -0
- package/dist/workflows/v3/botmux-attempt-lease.d.ts.map +1 -0
- package/dist/workflows/v3/botmux-attempt-lease.js +189 -0
- package/dist/workflows/v3/botmux-attempt-lease.js.map +1 -0
- package/dist/workflows/v3/botmux-host-policy.d.ts +7 -0
- package/dist/workflows/v3/botmux-host-policy.d.ts.map +1 -0
- package/dist/workflows/v3/botmux-host-policy.js +34 -0
- package/dist/workflows/v3/botmux-host-policy.js.map +1 -0
- package/dist/workflows/v3/cli-run.d.ts +1 -1
- package/dist/workflows/v3/cli-run.d.ts.map +1 -1
- package/dist/workflows/v3/cli-run.js +1 -1
- package/dist/workflows/v3/cli-run.js.map +1 -1
- package/dist/workflows/v3/contract.d.ts +8 -89
- package/dist/workflows/v3/contract.d.ts.map +1 -1
- package/dist/workflows/v3/contract.js +2 -8
- package/dist/workflows/v3/contract.js.map +1 -1
- package/dist/workflows/v3/core-control.d.ts +16 -0
- package/dist/workflows/v3/core-control.d.ts.map +1 -0
- package/dist/workflows/v3/core-control.js +60 -0
- package/dist/workflows/v3/core-control.js.map +1 -0
- package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
- package/dist/workflows/v3/daemon-run.js +2 -1
- package/dist/workflows/v3/daemon-run.js.map +1 -1
- package/dist/workflows/v3/dag-loader.d.ts +5 -0
- package/dist/workflows/v3/dag-loader.d.ts.map +1 -0
- package/dist/workflows/v3/dag-loader.js +22 -0
- package/dist/workflows/v3/dag-loader.js.map +1 -0
- package/dist/workflows/v3/dag.d.ts +2 -6
- package/dist/workflows/v3/dag.d.ts.map +1 -1
- package/dist/workflows/v3/dag.js +2 -24
- package/dist/workflows/v3/dag.js.map +1 -1
- package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
- package/dist/workflows/v3/ephemeral-pool.js +22 -12
- package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
- package/dist/workflows/v3/event-contract.d.ts +273 -0
- package/dist/workflows/v3/event-contract.d.ts.map +1 -0
- package/dist/workflows/v3/event-contract.js +8 -0
- package/dist/workflows/v3/event-contract.js.map +1 -0
- package/dist/workflows/v3/gate-policy.d.ts +12 -0
- package/dist/workflows/v3/gate-policy.d.ts.map +1 -0
- package/dist/workflows/v3/gate-policy.js +20 -0
- package/dist/workflows/v3/gate-policy.js.map +1 -0
- package/dist/workflows/v3/gate-wait-store.d.ts +99 -0
- package/dist/workflows/v3/gate-wait-store.d.ts.map +1 -0
- package/dist/workflows/v3/gate-wait-store.js +263 -0
- package/dist/workflows/v3/gate-wait-store.js.map +1 -0
- package/dist/workflows/v3/host.js +1 -1
- package/dist/workflows/v3/host.js.map +1 -1
- package/dist/workflows/v3/human-gate.d.ts +4 -99
- package/dist/workflows/v3/human-gate.d.ts.map +1 -1
- package/dist/workflows/v3/human-gate.js +4 -275
- package/dist/workflows/v3/human-gate.js.map +1 -1
- package/dist/workflows/v3/in-process-attempt-lease.d.ts +10 -0
- package/dist/workflows/v3/in-process-attempt-lease.d.ts.map +1 -0
- package/dist/workflows/v3/in-process-attempt-lease.js +47 -0
- package/dist/workflows/v3/in-process-attempt-lease.js.map +1 -0
- package/dist/workflows/v3/journal.d.ts +2 -275
- package/dist/workflows/v3/journal.d.ts.map +1 -1
- package/dist/workflows/v3/journal.js.map +1 -1
- package/dist/workflows/v3/library-service.js +1 -1
- package/dist/workflows/v3/library-service.js.map +1 -1
- package/dist/workflows/v3/orchestrator.d.ts +1 -2
- package/dist/workflows/v3/orchestrator.d.ts.map +1 -1
- package/dist/workflows/v3/orchestrator.js.map +1 -1
- package/dist/workflows/v3/portable-artifact-snapshot.d.ts +15 -0
- package/dist/workflows/v3/portable-artifact-snapshot.d.ts.map +1 -0
- package/dist/workflows/v3/portable-artifact-snapshot.js +76 -0
- package/dist/workflows/v3/portable-artifact-snapshot.js.map +1 -0
- package/dist/workflows/v3/portable-final-outputs.d.ts +37 -0
- package/dist/workflows/v3/portable-final-outputs.d.ts.map +1 -0
- package/dist/workflows/v3/portable-final-outputs.js +137 -0
- package/dist/workflows/v3/portable-final-outputs.js.map +1 -0
- package/dist/workflows/v3/portable-run-snapshot.d.ts +14 -0
- package/dist/workflows/v3/portable-run-snapshot.d.ts.map +1 -0
- package/dist/workflows/v3/portable-run-snapshot.js +176 -0
- package/dist/workflows/v3/portable-run-snapshot.js.map +1 -0
- package/dist/workflows/v3/portable-runtime.d.ts +83 -0
- package/dist/workflows/v3/portable-runtime.d.ts.map +1 -0
- package/dist/workflows/v3/portable-runtime.js +135 -0
- package/dist/workflows/v3/portable-runtime.js.map +1 -0
- package/dist/workflows/v3/runtime-host-contract.d.ts +182 -0
- package/dist/workflows/v3/runtime-host-contract.d.ts.map +1 -0
- package/dist/workflows/v3/runtime-host-contract.js +9 -0
- package/dist/workflows/v3/runtime-host-contract.js.map +1 -0
- package/dist/workflows/v3/runtime.d.ts +12 -226
- package/dist/workflows/v3/runtime.d.ts.map +1 -1
- package/dist/workflows/v3/runtime.js +14 -3173
- package/dist/workflows/v3/runtime.js.map +1 -1
- package/dist/workflows/v3/shared-node-runtime.d.ts +203 -0
- package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -0
- package/dist/workflows/v3/shared-node-runtime.js +2978 -0
- package/dist/workflows/v3/shared-node-runtime.js.map +1 -0
- package/dist/workflows/v3/shared-runtime.d.ts +17 -0
- package/dist/workflows/v3/shared-runtime.d.ts.map +1 -0
- package/dist/workflows/v3/shared-runtime.js +12 -0
- package/dist/workflows/v3/shared-runtime.js.map +1 -0
- package/package.json +4 -1
- package/dist/dashboard-web/chunks/roles-page-LHVAU2BI.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-report.d.ts","sourceRoot":"","sources":["../../src/services/issue-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,GAC9E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE;AAC5D;+CAC+C;GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE;AAC1D,8DAA8D;GAC5D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAElG;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,YAAY,GAAG,IAAI,CAYrB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgCxG"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* issue 交付:agent 在领取群里跑完后执行 `botmux report`,把平台 issue 推到 `in_review`(待验收)。
|
|
3
|
+
*
|
|
4
|
+
* 这是 kickoff 正文里那句「完成后执行 botmux report 交付」的落地实现——见
|
|
5
|
+
* [[issue-command-deps]] 的 buildKickoffPrompt。平台生命周期:
|
|
6
|
+
* claimed → in_progress → **in_review** → done
|
|
7
|
+
* (`/status` 允许正向追赶,所以 claimed 也可直接到 in_review。)
|
|
8
|
+
*
|
|
9
|
+
* ## 为什么不复用 dispatch 的 report 路径
|
|
10
|
+
*
|
|
11
|
+
* `botmux report` 原本只服务「多话题协作」:把回报发回主编排会话。领取群是 chat-scope
|
|
12
|
+
* 会话,没有 creatorOpenId / dispatch 注册表,那条路会硬失败。issue 交付的「验收人」
|
|
13
|
+
* 在平台看板,不在飞书主编排话题,所以这里走 binding → outbox → `/status`,与
|
|
14
|
+
* [[issue-release]] 同一套发件箱。
|
|
15
|
+
*
|
|
16
|
+
* ## 平台先行,本地 lastSynced 后写
|
|
17
|
+
*
|
|
18
|
+
* 与 release 相同:先让平台确认 `in_review`,再 settle outbox。中间崩溃最多多发一次
|
|
19
|
+
* (sourceSeq 幂等),不会出现「本机以为已交付、平台还停在 claimed」。
|
|
20
|
+
*
|
|
21
|
+
* 与 release 的差异:交付**不**改 bindState——claim 仍归本机,等人在平台上 accept/reject。
|
|
22
|
+
*/
|
|
23
|
+
import { getBinding, isActiveBindState } from './issue-board-store.js';
|
|
24
|
+
import { projectStatus } from './issue-status-writer.js';
|
|
25
|
+
/**
|
|
26
|
+
* 从会话候选锚点里找活跃 issue binding。
|
|
27
|
+
*
|
|
28
|
+
* 拉群领取的 binding 主键是 chatId;话题领取(若将来支持)主键是 rootMessageId。
|
|
29
|
+
* 两个候选都查一遍,先命中活跃 binding 的为准。
|
|
30
|
+
*/
|
|
31
|
+
export function findActiveBindingForSession(dataDir, session) {
|
|
32
|
+
const candidates = [];
|
|
33
|
+
if (session.rootMessageId)
|
|
34
|
+
candidates.push(session.rootMessageId);
|
|
35
|
+
if (session.chatId && session.chatId !== session.rootMessageId)
|
|
36
|
+
candidates.push(session.chatId);
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
for (const anchorId of candidates) {
|
|
39
|
+
if (seen.has(anchorId))
|
|
40
|
+
continue;
|
|
41
|
+
seen.add(anchorId);
|
|
42
|
+
const binding = getBinding(dataDir, anchorId);
|
|
43
|
+
if (binding && isActiveBindState(binding.bindState))
|
|
44
|
+
return binding;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 把 `anchorId` 上绑定的 issue 推到平台 `in_review`。
|
|
50
|
+
*
|
|
51
|
+
* 走 outbox:`enqueueDesiredStatus` 是 sourceSeq 唯一分配入口。发送失败时行留在
|
|
52
|
+
* pending,可重试同一 `botmux report`。
|
|
53
|
+
*/
|
|
54
|
+
export async function reportIssueInReview(deps, anchorId) {
|
|
55
|
+
const binding = getBinding(deps.dataDir, anchorId);
|
|
56
|
+
if (!binding)
|
|
57
|
+
return { ok: false, reason: 'no_binding' };
|
|
58
|
+
if (!isActiveBindState(binding.bindState))
|
|
59
|
+
return { ok: false, reason: 'not_active', binding };
|
|
60
|
+
const r = await projectStatus(deps, anchorId, 'in_review');
|
|
61
|
+
// 409 对账后发现 claim 已易主:交付**没有**落地。这和 release 相反——释放时"claim 已不在
|
|
62
|
+
// 本机"正好就是想要的结果,交付时它意味着这次汇报根本没写上去,报成功就是骗人。
|
|
63
|
+
if (r.ok && !r.applied)
|
|
64
|
+
return { ok: false, reason: 'detached', binding };
|
|
65
|
+
// `idle` = 没有待发行且已同步到位 —— 重复交付(同一次 report 跑了两遍),不是失败。
|
|
66
|
+
const alreadyInReview = !r.ok && r.reason === 'idle';
|
|
67
|
+
if (!r.ok && !alreadyInReview) {
|
|
68
|
+
const detail = r.reason === 'busy'
|
|
69
|
+
? '上一条回写还在发送中,稍后重试同一条 botmux report'
|
|
70
|
+
: r.reason === 'platform'
|
|
71
|
+
? r.detail
|
|
72
|
+
: r.reason;
|
|
73
|
+
const permanent = !r.ok && r.reason === 'platform' && r.permanent === true;
|
|
74
|
+
return { ok: false, reason: 'platform', detail, binding, ...(permanent ? { permanent } : {}) };
|
|
75
|
+
}
|
|
76
|
+
// 交付**不**改 bindState:claim 仍归本机,等人在平台上 accept/reject。
|
|
77
|
+
return {
|
|
78
|
+
ok: true,
|
|
79
|
+
binding: getBinding(deps.dataDir, anchorId) ?? binding,
|
|
80
|
+
issueId: binding.issueId,
|
|
81
|
+
alreadyInReview,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=issue-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-report.js","sourceRoot":"","sources":["../../src/services/issue-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/issue status`:把「这个群到底绑着哪条任务、现在什么状态」摊开给人看。
|
|
3
|
+
*
|
|
4
|
+
* 纯只读——不排队、不回写、不改 binding。之所以单独一个服务而不是让命令层直接读 store:
|
|
5
|
+
* 它要同时看**本机**和**平台**两边,而这两边不一致恰恰是最需要被看见的东西:
|
|
6
|
+
*
|
|
7
|
+
* - 本机 `lastSyncedStatus` 与平台 `status` 不同 → 有回写没发出去(发件箱里躺着)
|
|
8
|
+
* - 平台 `claim` 已经不是本机的 → 领取被回收/被别人领走了,这个群里干的活白干
|
|
9
|
+
* - 平台 `needs_attention` → 任务掉进了那扇单向门,得去平台处理
|
|
10
|
+
*
|
|
11
|
+
* 这三种状况在出问题时都是静默的,命令的价值就是把它们变成一眼可见。
|
|
12
|
+
*/
|
|
13
|
+
import { type IssueBinding } from './issue-board-store.js';
|
|
14
|
+
import type { PlatformIssue } from '../platform/issue-client.js';
|
|
15
|
+
export interface IssueStatusDeps {
|
|
16
|
+
dataDir: string;
|
|
17
|
+
/** 拉平台当前状态。返回 null 表示**拉不到**(网络/已归档),不是"任务不存在"。 */
|
|
18
|
+
fetchIssue: (teamId: string, issueId: string) => Promise<PlatformIssue | null>;
|
|
19
|
+
}
|
|
20
|
+
export interface IssueStatusView {
|
|
21
|
+
binding: IssueBinding;
|
|
22
|
+
/** 平台侧当前的 issue;null = 没拉到(下游必须说"拉不到",不能说"没有这条任务")。 */
|
|
23
|
+
issue: PlatformIssue | null;
|
|
24
|
+
/** 发件箱里还没发出去的回写条数。>0 说明本机与平台之间存在滞后。 */
|
|
25
|
+
pendingWrites: number;
|
|
26
|
+
/**
|
|
27
|
+
* 已被判死、不再重投的回写条数(平台 401/403/400/404,见 `isPermanentFailure`)。
|
|
28
|
+
*
|
|
29
|
+
* 必须单独报出来:这些行不在 `pendingWrites` 里,界面上一声不吭就等于"已经同步好了",
|
|
30
|
+
* 而实际上那次状态变更**永远不会**到平台。给了 fatal 就得给能看见它的地方。
|
|
31
|
+
*/
|
|
32
|
+
failedWrites: number;
|
|
33
|
+
/** 最后一条判死行的错误,直接给人看,省得去翻日志。 */
|
|
34
|
+
lastFailure?: string;
|
|
35
|
+
/** 平台上这条 claim 是否还归本机。issue 拉不到时为 undefined(无法判定,别猜)。 */
|
|
36
|
+
claimMine?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export type IssueStatusResult = {
|
|
39
|
+
ok: true;
|
|
40
|
+
view: IssueStatusView;
|
|
41
|
+
} | {
|
|
42
|
+
ok: false;
|
|
43
|
+
reason: 'no_binding';
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* 查 `anchorId` 上绑定的 issue 现状。
|
|
47
|
+
*
|
|
48
|
+
* 与 release/report 不同,**终态 binding 也照查**:`/issue status` 的用处正是在"这个群是不是
|
|
49
|
+
* 已经结束了"存疑的时候回答它,此时把它当成"没有绑定"是把唯一的答案藏起来。
|
|
50
|
+
*/
|
|
51
|
+
export declare function describeIssue(deps: IssueStatusDeps, anchorId: string): Promise<IssueStatusResult>;
|
|
52
|
+
//# sourceMappingURL=issue-status-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-status-view.d.ts","sourceRoot":"","sources":["../../src/services/issue-status-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAA0B,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,YAAY,CAAC;IACtB,uDAAuD;IACvD,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AAExC;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsBvG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/issue status`:把「这个群到底绑着哪条任务、现在什么状态」摊开给人看。
|
|
3
|
+
*
|
|
4
|
+
* 纯只读——不排队、不回写、不改 binding。之所以单独一个服务而不是让命令层直接读 store:
|
|
5
|
+
* 它要同时看**本机**和**平台**两边,而这两边不一致恰恰是最需要被看见的东西:
|
|
6
|
+
*
|
|
7
|
+
* - 本机 `lastSyncedStatus` 与平台 `status` 不同 → 有回写没发出去(发件箱里躺着)
|
|
8
|
+
* - 平台 `claim` 已经不是本机的 → 领取被回收/被别人领走了,这个群里干的活白干
|
|
9
|
+
* - 平台 `needs_attention` → 任务掉进了那扇单向门,得去平台处理
|
|
10
|
+
*
|
|
11
|
+
* 这三种状况在出问题时都是静默的,命令的价值就是把它们变成一眼可见。
|
|
12
|
+
*/
|
|
13
|
+
import { getBinding, listOutbox } from './issue-board-store.js';
|
|
14
|
+
/**
|
|
15
|
+
* 查 `anchorId` 上绑定的 issue 现状。
|
|
16
|
+
*
|
|
17
|
+
* 与 release/report 不同,**终态 binding 也照查**:`/issue status` 的用处正是在"这个群是不是
|
|
18
|
+
* 已经结束了"存疑的时候回答它,此时把它当成"没有绑定"是把唯一的答案藏起来。
|
|
19
|
+
*/
|
|
20
|
+
export async function describeIssue(deps, anchorId) {
|
|
21
|
+
const binding = getBinding(deps.dataDir, anchorId);
|
|
22
|
+
if (!binding)
|
|
23
|
+
return { ok: false, reason: 'no_binding' };
|
|
24
|
+
const issue = await deps.fetchIssue(binding.teamId, binding.issueId);
|
|
25
|
+
const rows = listOutbox(deps.dataDir, anchorId);
|
|
26
|
+
const pendingWrites = rows.filter((r) => r.state === 'pending' || r.state === 'inflight').length;
|
|
27
|
+
const failed = rows.filter((r) => r.state === 'failed');
|
|
28
|
+
const lastFailure = failed[failed.length - 1]?.lastError;
|
|
29
|
+
return {
|
|
30
|
+
ok: true,
|
|
31
|
+
view: {
|
|
32
|
+
binding,
|
|
33
|
+
issue,
|
|
34
|
+
pendingWrites,
|
|
35
|
+
failedWrites: failed.length,
|
|
36
|
+
...(lastFailure ? { lastFailure } : {}),
|
|
37
|
+
// claim 字段被平台清掉(done/open/reopened)时也是"不归本机",与被别人领走同样处理。
|
|
38
|
+
...(issue ? { claimMine: issue.claim?.claimId === binding.claimId } : {}),
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=issue-status-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-status-view.js","sourceRoot":"","sources":["../../src/services/issue-status-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAqB,MAAM,wBAAwB,CAAC;AAgCnF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAqB,EAAE,QAAgB;IACzE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAEzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACjG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;IAEzD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE;YACJ,OAAO;YACP,KAAK;YACL,aAAa;YACb,YAAY,EAAE,MAAM,CAAC,MAAM;YAC3B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,yDAAyD;YACzD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 状态回写:把「本会话应该处于什么状态」推到平台。
|
|
3
|
+
*
|
|
4
|
+
* 这是 [[issue-board-store]] 那个发件箱的**唯一**发送端。所有想改 issue 状态的调用方
|
|
5
|
+
* (开工、交付、验收、释放)都走 `projectStatus`,谁都不许直接调 `writeIssueStatus`——
|
|
6
|
+
* sourceSeq 的分配、串行、退避、409 对账全都只在这里实现一次。
|
|
7
|
+
*
|
|
8
|
+
* ## 为什么必须有它(不是架构洁癖)
|
|
9
|
+
*
|
|
10
|
+
* 平台在 bind 之后给一个 **5 分钟的 activation 租约**:到期时 issue 还停在 `claimed`,
|
|
11
|
+
* sweeper 就把它翻成 `needs_attention/claim_activate_timeout`(platform `src/store/issues.ts`
|
|
12
|
+
* 的 sweepExpiredLeases,每 60s 扫一次)。证明「我真的在跑」的唯一方式就是回写
|
|
13
|
+
* `in_progress`。
|
|
14
|
+
*
|
|
15
|
+
* 在这一刀之前 botmux 一个状态都不写,于是那条本该罕见的保护路径变成了**必经之路**:
|
|
16
|
+
* 每个领取的任务 5 分钟后必然掉进需要关注,而且**回不来**——平台只放行
|
|
17
|
+
* `task_blocked` 的 needs_attention 恢复成 in_progress,`claim_activate_timeout` 只能
|
|
18
|
+
* open/reopened(都清 claim),那个群的工作就废了。所以「开工即写 in_progress」不是
|
|
19
|
+
* 锦上添花,是拆引信。
|
|
20
|
+
*
|
|
21
|
+
* ## 409 的两种含义
|
|
22
|
+
*
|
|
23
|
+
* 与 [[issue-release]] 同一套判据:撞 409 先问「平台还认不认我这个 claim」——
|
|
24
|
+
* - **stateRev 过期** → claim 还是我的,拿新基线重发**同一条行**(它上次没被应用,
|
|
25
|
+
* 复用 sourceSeq 是安全的:平台只在 `<= lastSourceSeq` 时才当重复丢弃)
|
|
26
|
+
* - **claim 已不归本机** → 平台侧这条早就结束了(force-detach/租约过期/被别人领走),
|
|
27
|
+
* 再打多少次都一样,直接判定"已结算"让调用方收尾
|
|
28
|
+
*/
|
|
29
|
+
import { type AttentionReason, type IssueStatus } from './issue-board-store.js';
|
|
30
|
+
import type { IssueClientResult, PlatformIssue } from '../platform/issue-client.js';
|
|
31
|
+
export interface StatusWriterDeps {
|
|
32
|
+
dataDir: string;
|
|
33
|
+
writeStatus: (issueId: string, args: {
|
|
34
|
+
claimId: string;
|
|
35
|
+
claimEpoch: number;
|
|
36
|
+
sourceSeq: number;
|
|
37
|
+
status: IssueStatus;
|
|
38
|
+
attentionReason?: AttentionReason;
|
|
39
|
+
expectedStateRev: number;
|
|
40
|
+
}) => Promise<IssueClientResult<{
|
|
41
|
+
issue: PlatformIssue;
|
|
42
|
+
}>>;
|
|
43
|
+
/** 撞 409 时用来判断「平台还认不认这个 claim」。拿不到就当无法判定,不猜。 */
|
|
44
|
+
fetchIssue: (teamId: string, issueId: string) => Promise<PlatformIssue | null>;
|
|
45
|
+
now?: () => number;
|
|
46
|
+
}
|
|
47
|
+
export type FlushOutcome =
|
|
48
|
+
/** 平台接受了这次回写。 */
|
|
49
|
+
{
|
|
50
|
+
ok: true;
|
|
51
|
+
applied: true;
|
|
52
|
+
issue: PlatformIssue;
|
|
53
|
+
}
|
|
54
|
+
/** 平台侧这条 claim 已经不归本机了 —— 无需再发,调用方按"已结算"收尾。 */
|
|
55
|
+
| {
|
|
56
|
+
ok: true;
|
|
57
|
+
applied: false;
|
|
58
|
+
detached: true;
|
|
59
|
+
}
|
|
60
|
+
/** 没有待发行(已经同步到位,或压根没排队)。 */
|
|
61
|
+
| {
|
|
62
|
+
ok: false;
|
|
63
|
+
reason: 'idle';
|
|
64
|
+
}
|
|
65
|
+
/** 同一 binding 已有 inflight —— 串行约束,稍后再来。 */
|
|
66
|
+
| {
|
|
67
|
+
ok: false;
|
|
68
|
+
reason: 'busy';
|
|
69
|
+
}
|
|
70
|
+
/** binding 不存在或已是终态。 */
|
|
71
|
+
| {
|
|
72
|
+
ok: false;
|
|
73
|
+
reason: 'no_binding';
|
|
74
|
+
}
|
|
75
|
+
/** `permanent` = 平台明确拒绝且重试无意义,行已标 fatal 不再重投(见 isPermanentFailure)。 */
|
|
76
|
+
| {
|
|
77
|
+
ok: false;
|
|
78
|
+
reason: 'platform';
|
|
79
|
+
detail: string;
|
|
80
|
+
permanent?: boolean;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* 把发件箱里该 binding 的下一条待发行发出去。
|
|
84
|
+
*
|
|
85
|
+
* 不排队、只发送——用于后台 pump 重投那些失败退避过的行。
|
|
86
|
+
*/
|
|
87
|
+
export declare function flushNextStatus(deps: StatusWriterDeps, anchorId: string): Promise<FlushOutcome>;
|
|
88
|
+
/**
|
|
89
|
+
* 投影一个目标状态并立刻尝试发送。
|
|
90
|
+
*
|
|
91
|
+
* 排队交给 `enqueueDesiredStatus`(sourceSeq 的唯一分配入口 + 去重合并),发送交给
|
|
92
|
+
* `flushNextStatus`。发失败时行留在发件箱里退避,后台 pump 会接着重投——所以调用方
|
|
93
|
+
* 拿到 `platform` 失败也不代表这次投影丢了。
|
|
94
|
+
*/
|
|
95
|
+
export declare function projectStatus(deps: StatusWriterDeps, anchorId: string, desired: IssueStatus, opts?: {
|
|
96
|
+
attentionReason?: AttentionReason;
|
|
97
|
+
}): Promise<FlushOutcome>;
|
|
98
|
+
//# sourceMappingURL=issue-status-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-status-writer.d.ts","sourceRoot":"","sources":["../../src/services/issue-status-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAQL,KAAK,eAAe,EACpB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,WAAW,CAAC;QACpB,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,gBAAgB,EAAE,MAAM,CAAC;KAC1B,KACE,OAAO,CAAC,iBAAiB,CAAC;QAAE,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC,CAAC;IAC1D,gDAAgD;IAChD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC/E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY;AACtB,iBAAiB;AACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE;AACnD,+CAA+C;GAC7C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAA;CAAE;AAC9C,4BAA4B;GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC/B,2CAA2C;GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC/B,wBAAwB;GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE;AACrC,uEAAuE;GACrE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3E;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqErG;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,EACpB,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,eAAe,CAAA;CAAO,GAC/C,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 状态回写:把「本会话应该处于什么状态」推到平台。
|
|
3
|
+
*
|
|
4
|
+
* 这是 [[issue-board-store]] 那个发件箱的**唯一**发送端。所有想改 issue 状态的调用方
|
|
5
|
+
* (开工、交付、验收、释放)都走 `projectStatus`,谁都不许直接调 `writeIssueStatus`——
|
|
6
|
+
* sourceSeq 的分配、串行、退避、409 对账全都只在这里实现一次。
|
|
7
|
+
*
|
|
8
|
+
* ## 为什么必须有它(不是架构洁癖)
|
|
9
|
+
*
|
|
10
|
+
* 平台在 bind 之后给一个 **5 分钟的 activation 租约**:到期时 issue 还停在 `claimed`,
|
|
11
|
+
* sweeper 就把它翻成 `needs_attention/claim_activate_timeout`(platform `src/store/issues.ts`
|
|
12
|
+
* 的 sweepExpiredLeases,每 60s 扫一次)。证明「我真的在跑」的唯一方式就是回写
|
|
13
|
+
* `in_progress`。
|
|
14
|
+
*
|
|
15
|
+
* 在这一刀之前 botmux 一个状态都不写,于是那条本该罕见的保护路径变成了**必经之路**:
|
|
16
|
+
* 每个领取的任务 5 分钟后必然掉进需要关注,而且**回不来**——平台只放行
|
|
17
|
+
* `task_blocked` 的 needs_attention 恢复成 in_progress,`claim_activate_timeout` 只能
|
|
18
|
+
* open/reopened(都清 claim),那个群的工作就废了。所以「开工即写 in_progress」不是
|
|
19
|
+
* 锦上添花,是拆引信。
|
|
20
|
+
*
|
|
21
|
+
* ## 409 的两种含义
|
|
22
|
+
*
|
|
23
|
+
* 与 [[issue-release]] 同一套判据:撞 409 先问「平台还认不认我这个 claim」——
|
|
24
|
+
* - **stateRev 过期** → claim 还是我的,拿新基线重发**同一条行**(它上次没被应用,
|
|
25
|
+
* 复用 sourceSeq 是安全的:平台只在 `<= lastSourceSeq` 时才当重复丢弃)
|
|
26
|
+
* - **claim 已不归本机** → 平台侧这条早就结束了(force-detach/租约过期/被别人领走),
|
|
27
|
+
* 再打多少次都一样,直接判定"已结算"让调用方收尾
|
|
28
|
+
*/
|
|
29
|
+
import { claimNextOutboxRow, listOutbox, enqueueDesiredStatus, failOutboxRow, getBinding, isActiveBindState, settleOutboxRow, } from './issue-board-store.js';
|
|
30
|
+
import { isPermanentFailure } from '../platform/issue-client.js';
|
|
31
|
+
/**
|
|
32
|
+
* 把发件箱里该 binding 的下一条待发行发出去。
|
|
33
|
+
*
|
|
34
|
+
* 不排队、只发送——用于后台 pump 重投那些失败退避过的行。
|
|
35
|
+
*/
|
|
36
|
+
export async function flushNextStatus(deps, anchorId) {
|
|
37
|
+
const now = deps.now ?? Date.now;
|
|
38
|
+
const binding = getBinding(deps.dataDir, anchorId);
|
|
39
|
+
if (!binding)
|
|
40
|
+
return { ok: false, reason: 'no_binding' };
|
|
41
|
+
const row = claimNextOutboxRow(deps.dataDir, anchorId, now());
|
|
42
|
+
if (!row) {
|
|
43
|
+
// claimNextOutboxRow 返回 null 有两种截然不同的原因,不能都当 idle:**有 inflight 挡着**
|
|
44
|
+
// (串行约束,稍后能发)vs **确实没有待发行**(已同步到位)。调用方要据此区分"发不出去"
|
|
45
|
+
// 和"已经是这个状态了"——释放就靠这个判断是补完本地还是报错让人重试。
|
|
46
|
+
const mine = listOutbox(deps.dataDir, anchorId);
|
|
47
|
+
return mine.some((r) => r.state === 'inflight')
|
|
48
|
+
? { ok: false, reason: 'busy' }
|
|
49
|
+
: { ok: false, reason: 'idle' };
|
|
50
|
+
}
|
|
51
|
+
let expectedStateRev = row.expectedStateRev ?? binding.platformStateRev ?? 0;
|
|
52
|
+
let res = await deps.writeStatus(binding.issueId, {
|
|
53
|
+
claimId: row.claimId,
|
|
54
|
+
claimEpoch: row.claimEpoch,
|
|
55
|
+
sourceSeq: row.sourceSeq,
|
|
56
|
+
status: row.targetStatus,
|
|
57
|
+
...(row.attentionReason ? { attentionReason: row.attentionReason } : {}),
|
|
58
|
+
expectedStateRev,
|
|
59
|
+
});
|
|
60
|
+
if (!res.ok && res.reason === 'conflict') {
|
|
61
|
+
const fresh = await deps.fetchIssue(binding.teamId, binding.issueId);
|
|
62
|
+
if (fresh && fresh.claim?.claimId !== binding.claimId) {
|
|
63
|
+
// `applied: false` 是关键:这条状态平台**没有**采纳。记成已同步的话,下一次投影同一
|
|
64
|
+
// 状态会走幂等分支直接回成功,而平台那边纹丝不动——一次静默的谎报。
|
|
65
|
+
settleOutboxRow(deps.dataDir, row.writeId, { platformStateRev: fresh.stateRev, applied: false }, now());
|
|
66
|
+
return { ok: true, applied: false, detached: true };
|
|
67
|
+
}
|
|
68
|
+
if (fresh) {
|
|
69
|
+
expectedStateRev = fresh.stateRev;
|
|
70
|
+
res = await deps.writeStatus(binding.issueId, {
|
|
71
|
+
claimId: row.claimId,
|
|
72
|
+
claimEpoch: row.claimEpoch,
|
|
73
|
+
sourceSeq: row.sourceSeq,
|
|
74
|
+
status: row.targetStatus,
|
|
75
|
+
...(row.attentionReason ? { attentionReason: row.attentionReason } : {}),
|
|
76
|
+
expectedStateRev,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (!res.ok) {
|
|
81
|
+
const detail = 'error' in res ? `${res.reason}: ${res.error}` : res.reason;
|
|
82
|
+
// 分清「等会儿再试」和「再试也没用」。401/403(凭证失效、machine_mismatch、claim 被
|
|
83
|
+
// revoke)与 400/404(参数错、issue 被删或归档)是后者:不标 fatal 的话这条行会每 ≤5
|
|
84
|
+
// 分钟朝一个永远不会变的死端点打一发,而且 `/issue status` 上那句「N 条回写没发出去」
|
|
85
|
+
// 永不清零,验收的人会一直以为"过会儿就好"。判据见 [[issue-client]] 的
|
|
86
|
+
// isPermanentFailure——它刻意不等于 !isRetriable(409 与 unbound 都不该判死)。
|
|
87
|
+
const fatal = isPermanentFailure(res);
|
|
88
|
+
failOutboxRow(deps.dataDir, row.writeId, detail, fatal ? { fatal: true } : {}, now());
|
|
89
|
+
return { ok: false, reason: 'platform', detail, ...(fatal ? { permanent: true } : {}) };
|
|
90
|
+
}
|
|
91
|
+
settleOutboxRow(deps.dataDir, row.writeId, {
|
|
92
|
+
platformStateRev: res.value.issue.stateRev,
|
|
93
|
+
...(res.value.issue.claim ? { platformLastSourceSeq: res.value.issue.claim.lastSourceSeq } : {}),
|
|
94
|
+
}, now());
|
|
95
|
+
return { ok: true, applied: true, issue: res.value.issue };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 投影一个目标状态并立刻尝试发送。
|
|
99
|
+
*
|
|
100
|
+
* 排队交给 `enqueueDesiredStatus`(sourceSeq 的唯一分配入口 + 去重合并),发送交给
|
|
101
|
+
* `flushNextStatus`。发失败时行留在发件箱里退避,后台 pump 会接着重投——所以调用方
|
|
102
|
+
* 拿到 `platform` 失败也不代表这次投影丢了。
|
|
103
|
+
*/
|
|
104
|
+
export async function projectStatus(deps, anchorId, desired, opts = {}) {
|
|
105
|
+
const now = deps.now ?? Date.now;
|
|
106
|
+
const binding = getBinding(deps.dataDir, anchorId);
|
|
107
|
+
if (!binding)
|
|
108
|
+
return { ok: false, reason: 'no_binding' };
|
|
109
|
+
const queued = enqueueDesiredStatus(deps.dataDir, anchorId, desired, opts, now());
|
|
110
|
+
if (!queued) {
|
|
111
|
+
// enqueue 返回 null 有三种情况,要分开:终态 binding(no_binding 语义)、已经同步
|
|
112
|
+
// 到位(idle)、有 inflight 挡着(busy)。混成一个"失败"会让调用方分不清
|
|
113
|
+
// "已经是这个状态了" 和 "发不出去"。
|
|
114
|
+
if (!isActiveBindState(binding.bindState))
|
|
115
|
+
return { ok: false, reason: 'no_binding' };
|
|
116
|
+
if (binding.lastSyncedStatus === desired)
|
|
117
|
+
return { ok: false, reason: 'idle' };
|
|
118
|
+
// 已经在追同一个目标:那条行还没发出去,直接发它,不要另起一条。
|
|
119
|
+
return flushNextStatus(deps, anchorId);
|
|
120
|
+
}
|
|
121
|
+
return flushNextStatus(deps, anchorId);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=issue-status-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-status-writer.js","sourceRoot":"","sources":["../../src/services/issue-status-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,24 @@ export declare function validateMessageListenerUpdate(update: MessageListenerUpd
|
|
|
16
16
|
reason: string;
|
|
17
17
|
};
|
|
18
18
|
export declare function getMessageListenerConfig(larkAppId: string, chatId: string): MessageListenerConfig | null;
|
|
19
|
+
/**
|
|
20
|
+
* Build the persisted config for a listener update, or `null` when the update
|
|
21
|
+
* carries nothing worth keeping (→ delete the entry).
|
|
22
|
+
*
|
|
23
|
+
* A DISABLED listener with a non-empty prompt is a valid *draft*: it is
|
|
24
|
+
* persisted with `enabled:false` so the operator can turn it on later without
|
|
25
|
+
* retyping. Previously any disabled update was collapsed to `null` (deleted
|
|
26
|
+
* outright), so a draft saved while the toggle was off vanished on the next
|
|
27
|
+
* reload — the exact bug this fixes. Only a disabled update with a BLANK prompt
|
|
28
|
+
* is a true clear (this is also what the DELETE route sends: `{enabled:false,
|
|
29
|
+
* prompt:''}`). Enabled updates always carry a prompt
|
|
30
|
+
* (validateMessageListenerUpdate guarantees it), so they always build a config.
|
|
31
|
+
*
|
|
32
|
+
* Runtime is unaffected by a persisted draft: findMessageListenerForChat and
|
|
33
|
+
* enabledMessageListenerChatIds both require `enabled===true`, so an off draft
|
|
34
|
+
* never matches messages — it only survives for the dashboard editor.
|
|
35
|
+
*/
|
|
36
|
+
export declare function messageListenerConfigFromUpdate(patch: MessageListenerUpdate): MessageListenerConfig | null;
|
|
19
37
|
export declare function updateMessageListenerConfig(larkAppId: string, chatId: string, patch: MessageListenerUpdate): Promise<{
|
|
20
38
|
ok: true;
|
|
21
39
|
listener: MessageListenerConfig | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-listener-store.d.ts","sourceRoot":"","sources":["../../src/services/message-listener-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;CACxD,CAAC;AAgCF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CA6C7F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CASrI;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAMxG;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"message-listener-store.d.ts","sourceRoot":"","sources":["../../src/services/message-listener-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;CACxD,CAAC;AAgCF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CA6C7F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CASrI;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAMxG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,IAAI,CAY1G;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC/F"}
|
|
@@ -102,6 +102,37 @@ export function getMessageListenerConfig(larkAppId, chatId) {
|
|
|
102
102
|
return null;
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Build the persisted config for a listener update, or `null` when the update
|
|
107
|
+
* carries nothing worth keeping (→ delete the entry).
|
|
108
|
+
*
|
|
109
|
+
* A DISABLED listener with a non-empty prompt is a valid *draft*: it is
|
|
110
|
+
* persisted with `enabled:false` so the operator can turn it on later without
|
|
111
|
+
* retyping. Previously any disabled update was collapsed to `null` (deleted
|
|
112
|
+
* outright), so a draft saved while the toggle was off vanished on the next
|
|
113
|
+
* reload — the exact bug this fixes. Only a disabled update with a BLANK prompt
|
|
114
|
+
* is a true clear (this is also what the DELETE route sends: `{enabled:false,
|
|
115
|
+
* prompt:''}`). Enabled updates always carry a prompt
|
|
116
|
+
* (validateMessageListenerUpdate guarantees it), so they always build a config.
|
|
117
|
+
*
|
|
118
|
+
* Runtime is unaffected by a persisted draft: findMessageListenerForChat and
|
|
119
|
+
* enabledMessageListenerChatIds both require `enabled===true`, so an off draft
|
|
120
|
+
* never matches messages — it only survives for the dashboard editor.
|
|
121
|
+
*/
|
|
122
|
+
export function messageListenerConfigFromUpdate(patch) {
|
|
123
|
+
if (!patch.prompt.trim())
|
|
124
|
+
return null;
|
|
125
|
+
return {
|
|
126
|
+
enabled: patch.enabled,
|
|
127
|
+
...(patch.name ? { name: patch.name } : {}),
|
|
128
|
+
...(patch.replyCardTitle ? { replyCardTitle: patch.replyCardTitle } : {}),
|
|
129
|
+
...(patch.workingDir ? { workingDir: patch.workingDir } : {}),
|
|
130
|
+
prompt: patch.prompt,
|
|
131
|
+
...(patch.senderPolicy && Object.keys(patch.senderPolicy).length > 0 ? { senderPolicy: patch.senderPolicy } : {}),
|
|
132
|
+
...(patch.messagePolicy ? { messagePolicy: { ...patch.messagePolicy, scope: 'top_level' } } : { messagePolicy: { scope: 'top_level' } }),
|
|
133
|
+
replyPolicy: { mode: 'thread', sessionMode: 'per_message' },
|
|
134
|
+
};
|
|
135
|
+
}
|
|
105
136
|
export async function updateMessageListenerConfig(larkAppId, chatId, patch) {
|
|
106
137
|
let bot;
|
|
107
138
|
try {
|
|
@@ -110,19 +141,13 @@ export async function updateMessageListenerConfig(larkAppId, chatId, patch) {
|
|
|
110
141
|
catch {
|
|
111
142
|
return { ok: false, reason: 'bot_not_registered' };
|
|
112
143
|
}
|
|
113
|
-
const normalized = patch.enabled ? {
|
|
114
|
-
enabled: true,
|
|
115
|
-
...(patch.name ? { name: patch.name } : {}),
|
|
116
|
-
...(patch.replyCardTitle ? { replyCardTitle: patch.replyCardTitle } : {}),
|
|
117
|
-
...(patch.workingDir ? { workingDir: patch.workingDir } : {}),
|
|
118
|
-
prompt: patch.prompt,
|
|
119
|
-
...(patch.senderPolicy && Object.keys(patch.senderPolicy).length > 0 ? { senderPolicy: patch.senderPolicy } : {}),
|
|
120
|
-
...(patch.messagePolicy ? { messagePolicy: { ...patch.messagePolicy, scope: 'top_level' } } : { messagePolicy: { scope: 'top_level' } }),
|
|
121
|
-
replyPolicy: { mode: 'thread', sessionMode: 'per_message' },
|
|
122
|
-
} : null;
|
|
123
144
|
const validation = validateMessageListenerUpdate(patch);
|
|
124
145
|
if (!validation.ok)
|
|
125
146
|
return { ok: false, reason: validation.reason };
|
|
147
|
+
// A disabled update with a non-empty prompt persists as an off DRAFT (kept for
|
|
148
|
+
// the editor, never matched at runtime); only a blank-prompt disabled update
|
|
149
|
+
// clears the entry. See messageListenerConfigFromUpdate.
|
|
150
|
+
const normalized = messageListenerConfigFromUpdate(patch);
|
|
126
151
|
const result = await rmwBotEntry(larkAppId, (entry) => {
|
|
127
152
|
if (!normalized) {
|
|
128
153
|
if (entry.messageListeners && typeof entry.messageListeners === 'object') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-listener-store.js","sourceRoot":"","sources":["../../src/services/message-listener-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"message-listener-store.js","sourceRoot":"","sources":["../../src/services/message-listener-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,23 @@ export declare function listenerSenderType(raw: unknown): MessageListenerSenderT
|
|
|
23
23
|
export declare function messageTypeOf(message: any): string;
|
|
24
24
|
export declare function extractListenerMessageTitle(message: any): string | undefined;
|
|
25
25
|
export declare function extractListenerMessageText(message: any): string;
|
|
26
|
+
/**
|
|
27
|
+
* Refresh a card match's observed text/title from the (now-resolved) message.
|
|
28
|
+
*
|
|
29
|
+
* The listener match is computed during filtering, off the SIMPLIFIED card the
|
|
30
|
+
* WS/history API first delivers — that view drops button jump URLs and lazy
|
|
31
|
+
* sub-card bodies. The live delivery path (daemon handleNewTopic) later runs
|
|
32
|
+
* resolveNonsupportMessage(data), merging the card's two representations
|
|
33
|
+
* (server-rendered + structured body.elements, incl. button open_url) into
|
|
34
|
+
* `message.content` — the same depth the direct-@bot path uses. Re-extracting
|
|
35
|
+
* here lets the model receive the button links, not the lossy match-time
|
|
36
|
+
* snapshot. Only interactive cards can differ (plain text/post already carried
|
|
37
|
+
* full content at match time). Fail-safe: a resolver miss (cross-tenant, REST
|
|
38
|
+
* unavailable) leaves `message.content` as the simplified view and yields the
|
|
39
|
+
* SAME text as match time, so guarding on a non-empty result never blanks a
|
|
40
|
+
* match — it only ever upgrades. Mutates `match` in place.
|
|
41
|
+
*/
|
|
42
|
+
export declare function refreshListenerCardTextFromResolved(match: MessageListenerMatch, message: any): void;
|
|
26
43
|
export declare function findMessageListenerForChat(bot: BotState, chatId: string): MessageListenerConfig | undefined;
|
|
27
44
|
export declare function evaluateMessageListener(input: {
|
|
28
45
|
bot: BotState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-listener.d.ts","sourceRoot":"","sources":["../../src/services/message-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAK3F,eAAO,MAAM,iCAAiC,QAAY,CAAC;AAE3D,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,yBAAyB,CAAC;CACvC;AAED,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,yBAAyB,CAE1E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAElD;AAwBD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CA6B5E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAgC/D;AAwED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAK3G;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,GAAG,EAAE,QAAQ,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,0BAA0B,EAAE,OAAO,CAAC;CACrC,GAAG,oBAAoB,GAAG,SAAS,CA+CnC;AAED,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,CAoBxD;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqB9B;AAED;wDACwD;AACxD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,GAAG,EAAE,EACf,gBAAgB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,iBAAiB,GACpD,GAAG,CAAC,MAAM,CAAC,CAUb;AAED,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIzE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,GAAG,EAAE,QAAQ,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,CAAC;IAClD;8EAC0E;IAC1E,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,0BAA0B,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/E,GAAG,2BAA2B,EAAE,CA2BhC;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CASpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAoB/E"}
|
|
1
|
+
{"version":3,"file":"message-listener.d.ts","sourceRoot":"","sources":["../../src/services/message-listener.ts"],"names":[],"mappings":"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"}
|