botmux 3.13.0 → 3.15.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 +25 -1
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/adopt-route.d.ts +58 -0
- package/dist/adapters/adopt-route.d.ts.map +1 -1
- package/dist/adapters/adopt-route.js +136 -0
- package/dist/adapters/adopt-route.js.map +1 -1
- package/dist/adapters/backend/capabilities.js +1 -1
- package/dist/adapters/backend/capabilities.js.map +1 -1
- package/dist/adapters/backend/herdr-backend.d.ts +1 -1
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +2 -1
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +97 -0
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +380 -66
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +8 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +16 -2
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +12 -13
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +113 -53
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +34 -3
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +72 -9
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +7 -0
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.d.ts +2 -3
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +6 -13
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.d.ts +2 -1
- package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.js +6 -3
- package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
- package/dist/adapters/backend/zmx-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zmx-backend.js +40 -18
- package/dist/adapters/backend/zmx-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +12 -1
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +3 -2
- 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 +13 -1
- package/dist/adapters/cli/cursor.js.map +1 -1
- package/dist/adapters/cli/dsh.d.ts +4 -0
- package/dist/adapters/cli/dsh.d.ts.map +1 -0
- package/dist/adapters/cli/dsh.js +100 -0
- package/dist/adapters/cli/dsh.js.map +1 -0
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
- package/dist/adapters/cli/fs-policy.js +5 -0
- package/dist/adapters/cli/fs-policy.js.map +1 -1
- package/dist/adapters/cli/opencode.d.ts +52 -1
- package/dist/adapters/cli/opencode.d.ts.map +1 -1
- package/dist/adapters/cli/opencode.js +117 -76
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/opencode2.d.ts +4 -0
- package/dist/adapters/cli/opencode2.d.ts.map +1 -0
- package/dist/adapters/cli/opencode2.js +137 -0
- package/dist/adapters/cli/opencode2.js.map +1 -0
- package/dist/adapters/cli/pi.d.ts +14 -1
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +21 -1
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +1 -1
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +5 -2
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +7 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +19 -6
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +41 -23
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +28 -3
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/adapters/hook-command.d.ts +8 -0
- package/dist/adapters/hook-command.d.ts.map +1 -1
- package/dist/adapters/hook-command.js +11 -0
- package/dist/adapters/hook-command.js.map +1 -1
- package/dist/adapters/hook-installer.d.ts +16 -1
- package/dist/adapters/hook-installer.d.ts.map +1 -1
- package/dist/adapters/hook-installer.js +232 -2
- package/dist/adapters/hook-installer.js.map +1 -1
- package/dist/bot-registry.d.ts +138 -8
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +76 -4
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/pm2-start-transaction.d.ts +14 -0
- package/dist/cli/pm2-start-transaction.d.ts.map +1 -1
- package/dist/cli/pm2-start-transaction.js +25 -9
- package/dist/cli/pm2-start-transaction.js.map +1 -1
- package/dist/cli/restart-failure-notification.d.ts +54 -0
- package/dist/cli/restart-failure-notification.d.ts.map +1 -0
- package/dist/cli/restart-failure-notification.js +142 -0
- package/dist/cli/restart-failure-notification.js.map +1 -0
- package/dist/cli/restart-failure-owner.d.ts +20 -0
- package/dist/cli/restart-failure-owner.d.ts.map +1 -0
- package/dist/cli/restart-failure-owner.js +27 -0
- package/dist/cli/restart-failure-owner.js.map +1 -0
- package/dist/cli/restart-shutdown-preflight.d.ts +24 -0
- package/dist/cli/restart-shutdown-preflight.d.ts.map +1 -0
- package/dist/cli/restart-shutdown-preflight.js +105 -0
- package/dist/cli/restart-shutdown-preflight.js.map +1 -0
- package/dist/cli/send-dispatch.d.ts +26 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +30 -0
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli.d.ts +4 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +673 -402
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +38 -15
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/codex-rpc-lifecycle.d.ts +14 -2
- package/dist/codex-rpc-lifecycle.d.ts.map +1 -1
- package/dist/codex-rpc-lifecycle.js +13 -3
- package/dist/codex-rpc-lifecycle.js.map +1 -1
- package/dist/core/ask-broker.d.ts +3 -0
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +29 -7
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/ask-hook/registry.d.ts.map +1 -1
- package/dist/core/ask-hook/registry.js +4 -0
- package/dist/core/ask-hook/registry.js.map +1 -1
- package/dist/core/ask-types.d.ts +5 -1
- package/dist/core/ask-types.d.ts.map +1 -1
- package/dist/core/ask-types.js.map +1 -1
- package/dist/core/browser-restart.d.ts +112 -0
- package/dist/core/browser-restart.d.ts.map +1 -0
- package/dist/core/browser-restart.js +233 -0
- package/dist/core/browser-restart.js.map +1 -0
- package/dist/core/command-discovery.d.ts.map +1 -1
- package/dist/core/command-discovery.js +4 -1
- package/dist/core/command-discovery.js.map +1 -1
- package/dist/core/command-handler.d.ts +19 -11
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +237 -43
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/current-turn-provenance.d.ts.map +1 -1
- package/dist/core/current-turn-provenance.js +7 -27
- package/dist/core/current-turn-provenance.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +359 -11
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dispatch-registry.d.ts.map +1 -1
- package/dist/core/dispatch-registry.js +6 -0
- package/dist/core/dispatch-registry.js.map +1 -1
- package/dist/core/dispatch-report-binding.d.ts +31 -0
- package/dist/core/dispatch-report-binding.d.ts.map +1 -0
- package/dist/core/dispatch-report-binding.js +88 -0
- package/dist/core/dispatch-report-binding.js.map +1 -0
- package/dist/core/doc-comment-prompt.d.ts +2 -0
- package/dist/core/doc-comment-prompt.d.ts.map +1 -1
- package/dist/core/doc-comment-prompt.js +6 -0
- package/dist/core/doc-comment-prompt.js.map +1 -1
- package/dist/core/host-overload-alert.d.ts +25 -1
- package/dist/core/host-overload-alert.d.ts.map +1 -1
- package/dist/core/host-overload-alert.js +69 -8
- package/dist/core/host-overload-alert.js.map +1 -1
- package/dist/core/local-terminal-opener.js +1 -1
- package/dist/core/local-terminal-opener.js.map +1 -1
- package/dist/core/managed-origin-capability.d.ts +7 -6
- package/dist/core/managed-origin-capability.d.ts.map +1 -1
- package/dist/core/managed-origin-capability.js +32 -1
- package/dist/core/managed-origin-capability.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +3 -2
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/plugins/materializer.d.ts.map +1 -1
- package/dist/core/plugins/materializer.js +1 -0
- package/dist/core/plugins/materializer.js.map +1 -1
- package/dist/core/producer-quiescence.d.ts +70 -0
- package/dist/core/producer-quiescence.d.ts.map +1 -0
- package/dist/core/producer-quiescence.js +90 -0
- package/dist/core/producer-quiescence.js.map +1 -0
- package/dist/core/raw-command-write-options.d.ts +10 -0
- package/dist/core/raw-command-write-options.d.ts.map +1 -0
- package/dist/core/raw-command-write-options.js +23 -0
- package/dist/core/raw-command-write-options.js.map +1 -0
- package/dist/core/raw-command-writer.d.ts +4 -0
- package/dist/core/raw-command-writer.d.ts.map +1 -1
- package/dist/core/raw-command-writer.js +15 -6
- package/dist/core/raw-command-writer.js.map +1 -1
- package/dist/core/reply-target.d.ts +11 -0
- package/dist/core/reply-target.d.ts.map +1 -1
- package/dist/core/reply-target.js +22 -7
- package/dist/core/reply-target.js.map +1 -1
- package/dist/core/report-session-relay.d.ts +53 -0
- package/dist/core/report-session-relay.d.ts.map +1 -0
- package/dist/core/report-session-relay.js +116 -0
- package/dist/core/report-session-relay.js.map +1 -0
- package/dist/core/session-discovery.d.ts +5 -0
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +13 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-group-birth.d.ts +7 -0
- package/dist/core/session-group-birth.d.ts.map +1 -0
- package/dist/core/session-group-birth.js +145 -0
- package/dist/core/session-group-birth.js.map +1 -0
- package/dist/core/session-manager.d.ts +16 -21
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +140 -21
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills/frontmatter.d.ts.map +1 -1
- package/dist/core/skills/frontmatter.js +6 -1
- package/dist/core/skills/frontmatter.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +18 -3
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +18 -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 +63 -11
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +262 -21
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +33 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +904 -147
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +20 -0
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +86 -1
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +9 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +5 -1
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
- package/dist/dashboard/federation-spoke-api.js +27 -3
- package/dist/dashboard/federation-spoke-api.js.map +1 -1
- package/dist/dashboard/feedback-analytics-api.d.ts +6 -0
- package/dist/dashboard/feedback-analytics-api.d.ts.map +1 -0
- package/dist/dashboard/feedback-analytics-api.js +39 -0
- package/dist/dashboard/feedback-analytics-api.js.map +1 -0
- package/dist/dashboard/session-action-timeout.d.ts +3 -0
- package/dist/dashboard/session-action-timeout.d.ts.map +1 -0
- package/dist/dashboard/session-action-timeout.js +12 -0
- package/dist/dashboard/session-action-timeout.js.map +1 -0
- package/dist/dashboard/vc-consumer-profiles-api.d.ts +9 -3
- package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.js +2 -1
- package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +48 -5
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +11 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +368 -36
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +8 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +1 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/feedback-page.d.ts +3 -0
- package/dist/dashboard/web/feedback-page.d.ts.map +1 -0
- package/dist/dashboard/web/feedback-page.js +34 -0
- package/dist/dashboard/web/feedback-page.js.map +1 -0
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +7 -2
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +122 -22
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +4 -2
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation-page.js +26 -2
- package/dist/dashboard/web/team-federation-page.js.map +1 -1
- package/dist/dashboard/web/team-federation.d.ts +19 -0
- package/dist/dashboard/web/team-federation.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation.js +3 -0
- package/dist/dashboard/web/team-federation.js.map +1 -1
- package/dist/dashboard/web/update-action.d.ts +8 -0
- package/dist/dashboard/web/update-action.d.ts.map +1 -1
- package/dist/dashboard/web/update-action.js +10 -0
- package/dist/dashboard/web/update-action.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.js +58 -9
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-65SMZ4QY.js +10 -0
- package/dist/dashboard-web/chunks/chunk-G5XGBCM6.js +1 -0
- package/dist/dashboard-web/chunks/chunk-IKN6WURK.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-6JTZJRQJ.js → chunk-VMWNR3SV.js} +15 -15
- package/dist/dashboard-web/chunks/{chunk-CU4SUKK3.js → chunk-Z7B3E3US.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-5QJB24I2.js → chunk-Z7DO42GJ.js} +1 -1
- package/dist/dashboard-web/chunks/connectors-page-CPH6VVFY.js +1 -0
- package/dist/dashboard-web/chunks/feedback-page-J2FKQ3LK.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-VDOOLS4M.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-EVGGJI5L.js → insights-page-A2LWTKJD.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-HRGR2ENP.js → monitor-room-2YR752E3.js} +1 -1
- package/dist/dashboard-web/chunks/monitoring-page-BGYSKZGM.js +2 -0
- package/dist/dashboard-web/chunks/office-page-ZZHTEAE4.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-7NYPKQSB.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-YUC4YLJG.js +1 -0
- package/dist/dashboard-web/chunks/schedules-page-2L2NKTDJ.js +1 -0
- package/dist/dashboard-web/chunks/{sessions-page-DXBCDWCS.js → sessions-page-DYZZMKFL.js} +1 -1
- package/dist/dashboard-web/chunks/settings-page-LIULUSMH.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-2QAVB2SA.js → skills-page-DQPBBI3T.js} +2 -2
- package/dist/dashboard-web/chunks/team-federation-page-LQKLDV4K.js +1 -0
- package/dist/dashboard-web/chunks/{v3-page-AY35LKCX.js → v3-page-RVKQIMAP.js} +1 -1
- package/dist/dashboard-web/chunks/whiteboards-page-S5K55HRZ.js +1 -0
- package/dist/dashboard-web/style.css +35 -0
- package/dist/dashboard.js +210 -13
- package/dist/dashboard.js.map +1 -1
- package/dist/desktop/shared/shell-path-probes.d.ts +1 -1
- package/dist/desktop/shared/shell-path-probes.js +2 -2
- package/dist/desktop/shared/shell-path-probes.js.map +1 -1
- package/dist/dsh-runner.d.ts +3 -0
- package/dist/dsh-runner.d.ts.map +1 -0
- package/dist/dsh-runner.js +673 -0
- package/dist/dsh-runner.js.map +1 -0
- package/dist/global-config.d.ts +24 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +35 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +39 -31
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +39 -31
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/ask-card.d.ts +3 -1
- package/dist/im/lark/ask-card.d.ts.map +1 -1
- package/dist/im/lark/ask-card.js +61 -5
- package/dist/im/lark/ask-card.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +13 -6
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +2 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +145 -5
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +18 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +41 -28
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/md-card.d.ts +18 -0
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +21 -0
- package/dist/im/lark/md-card.js.map +1 -1
- package/dist/im/lark/relay-target-routing.d.ts.map +1 -1
- package/dist/im/lark/relay-target-routing.js +3 -2
- package/dist/im/lark/relay-target-routing.js.map +1 -1
- package/dist/im/lark/reply-mode-command.d.ts.map +1 -1
- package/dist/im/lark/reply-mode-command.js +19 -8
- package/dist/im/lark/reply-mode-command.js.map +1 -1
- package/dist/im/lark/skill-feedback-card.d.ts +15 -0
- package/dist/im/lark/skill-feedback-card.d.ts.map +1 -0
- package/dist/im/lark/skill-feedback-card.js +149 -0
- package/dist/im/lark/skill-feedback-card.js.map +1 -0
- package/dist/services/bot-config-store.d.ts +10 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +103 -3
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +29 -7
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +58 -16
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/codex-reasoning-effort.d.ts +9 -0
- package/dist/services/codex-reasoning-effort.d.ts.map +1 -0
- package/dist/services/codex-reasoning-effort.js +23 -0
- package/dist/services/codex-reasoning-effort.js.map +1 -0
- package/dist/services/codex-service-tier.d.ts +1 -1
- package/dist/services/codex-service-tier.d.ts.map +1 -1
- package/dist/services/codex-transcript.d.ts +9 -0
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js +13 -6
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/feed-group-tagger.d.ts +15 -0
- package/dist/services/feed-group-tagger.d.ts.map +1 -0
- package/dist/services/feed-group-tagger.js +348 -0
- package/dist/services/feed-group-tagger.js.map +1 -0
- package/dist/services/feedback-analytics.d.ts +82 -0
- package/dist/services/feedback-analytics.d.ts.map +1 -0
- package/dist/services/feedback-analytics.js +95 -0
- package/dist/services/feedback-analytics.js.map +1 -0
- package/dist/services/feedback-outbox.d.ts +24 -0
- package/dist/services/feedback-outbox.d.ts.map +1 -0
- package/dist/services/feedback-outbox.js +12 -0
- package/dist/services/feedback-outbox.js.map +1 -0
- package/dist/services/feedback-policy-resolver.d.ts +56 -0
- package/dist/services/feedback-policy-resolver.d.ts.map +1 -0
- package/dist/services/feedback-policy-resolver.js +156 -0
- package/dist/services/feedback-policy-resolver.js.map +1 -0
- package/dist/services/feedback-policy.d.ts +41 -0
- package/dist/services/feedback-policy.d.ts.map +1 -0
- package/dist/services/feedback-policy.js +102 -0
- package/dist/services/feedback-policy.js.map +1 -0
- package/dist/services/feedback-webhook-dispatcher.d.ts +76 -0
- package/dist/services/feedback-webhook-dispatcher.d.ts.map +1 -0
- package/dist/services/feedback-webhook-dispatcher.js +237 -0
- package/dist/services/feedback-webhook-dispatcher.js.map +1 -0
- package/dist/services/grant-prefs-store.d.ts +3 -0
- package/dist/services/grant-prefs-store.d.ts.map +1 -1
- package/dist/services/grant-prefs-store.js +30 -1
- package/dist/services/grant-prefs-store.js.map +1 -1
- package/dist/services/groups-store.d.ts +14 -0
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +23 -0
- package/dist/services/groups-store.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts +1 -1
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +2 -0
- package/dist/services/local-cli-opener.js.map +1 -1
- package/dist/services/peer-cross-ref-store.d.ts +8 -0
- package/dist/services/peer-cross-ref-store.d.ts.map +1 -0
- package/dist/services/peer-cross-ref-store.js +95 -0
- package/dist/services/peer-cross-ref-store.js.map +1 -0
- package/dist/services/pi-transcript.d.ts.map +1 -1
- package/dist/services/pi-transcript.js +10 -6
- package/dist/services/pi-transcript.js.map +1 -1
- package/dist/services/prompt-context-store.d.ts +29 -0
- package/dist/services/prompt-context-store.d.ts.map +1 -0
- package/dist/services/prompt-context-store.js +205 -0
- package/dist/services/prompt-context-store.js.map +1 -0
- package/dist/services/session-group-avatar.d.ts +6 -0
- package/dist/services/session-group-avatar.d.ts.map +1 -0
- package/dist/services/session-group-avatar.js +96 -0
- package/dist/services/session-group-avatar.js.map +1 -0
- package/dist/services/session-group-title.d.ts +47 -0
- package/dist/services/session-group-title.d.ts.map +1 -0
- package/dist/services/session-group-title.js +226 -0
- package/dist/services/session-group-title.js.map +1 -0
- package/dist/services/session-groups-store.d.ts +30 -0
- package/dist/services/session-groups-store.d.ts.map +1 -0
- package/dist/services/session-groups-store.js +132 -0
- package/dist/services/session-groups-store.js.map +1 -0
- package/dist/services/session-store.d.ts +58 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +174 -0
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/skill-feedback-store.d.ts +252 -0
- package/dist/services/skill-feedback-store.d.ts.map +1 -0
- package/dist/services/skill-feedback-store.js +795 -0
- package/dist/services/skill-feedback-store.js.map +1 -0
- package/dist/services/skill-registry-store.d.ts +23 -0
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +93 -7
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +13 -4
- package/dist/services/structured-bridge-clis.d.ts.map +1 -1
- package/dist/services/structured-bridge-clis.js +13 -3
- package/dist/services/structured-bridge-clis.js.map +1 -1
- package/dist/services/team-store.d.ts +4 -0
- package/dist/services/team-store.d.ts.map +1 -1
- package/dist/services/team-store.js +16 -0
- package/dist/services/team-store.js.map +1 -1
- package/dist/services/traex-transcript.d.ts +32 -4
- package/dist/services/traex-transcript.d.ts.map +1 -1
- package/dist/services/traex-transcript.js +116 -8
- package/dist/services/traex-transcript.js.map +1 -1
- package/dist/services/trigger-types.d.ts +1 -1
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js +2 -2
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/services/turn-completion-events.d.ts +57 -0
- package/dist/services/turn-completion-events.d.ts.map +1 -0
- package/dist/services/turn-completion-events.js +179 -0
- package/dist/services/turn-completion-events.js.map +1 -0
- package/dist/services/vc-meeting-consumer-isolation.d.ts +21 -12
- package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -1
- package/dist/services/vc-meeting-consumer-isolation.js +25 -19
- package/dist/services/vc-meeting-consumer-isolation.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +8 -2
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js +18 -10
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +6 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/cli-availability.d.ts +2 -1
- package/dist/setup/cli-availability.d.ts.map +1 -1
- package/dist/setup/cli-availability.js +2 -1
- package/dist/setup/cli-availability.js.map +1 -1
- package/dist/setup/cli-selection.d.ts +8 -0
- package/dist/setup/cli-selection.d.ts.map +1 -1
- package/dist/setup/cli-selection.js +31 -0
- package/dist/setup/cli-selection.js.map +1 -1
- package/dist/setup/ensure-fonts.d.ts +5 -0
- package/dist/setup/ensure-fonts.d.ts.map +1 -1
- package/dist/setup/ensure-fonts.js +26 -1
- package/dist/setup/ensure-fonts.js.map +1 -1
- package/dist/setup/lark-scopes.json +3 -1
- package/dist/setup/open-platform-automation.d.ts +1 -1
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +15 -3
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/skills/definitions.d.ts +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +9 -2
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +11 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +1 -1
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js.map +1 -1
- package/dist/utils/user-token.d.ts +38 -0
- package/dist/utils/user-token.d.ts.map +1 -1
- package/dist/utils/user-token.js +76 -1
- package/dist/utils/user-token.js.map +1 -1
- package/dist/utils/web-terminal-scroll.d.ts +27 -0
- package/dist/utils/web-terminal-scroll.d.ts.map +1 -0
- package/dist/utils/web-terminal-scroll.js +60 -0
- package/dist/utils/web-terminal-scroll.js.map +1 -0
- package/dist/vc-agent/polling-source.d.ts +70 -0
- package/dist/vc-agent/polling-source.d.ts.map +1 -1
- package/dist/vc-agent/polling-source.js +115 -0
- package/dist/vc-agent/polling-source.js.map +1 -1
- package/dist/worker.js +469 -86
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +22 -22
- package/dist/workflows/events/payloads.d.ts +8 -8
- package/dist/workflows/events/schema.d.ts +20 -20
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +20 -20
- package/package.json +5 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-NQJFJ45Z.js +0 -10
- package/dist/dashboard-web/chunks/chunk-KEEYQ3WF.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-HADHZXXZ.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-5TYF46RS.js +0 -8
- package/dist/dashboard-web/chunks/monitoring-page-LBU7TTTW.js +0 -2
- package/dist/dashboard-web/chunks/office-page-DF6RRBMN.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-ZB6QH2EX.js +0 -1
- package/dist/dashboard-web/chunks/roles-page-ZBZGHIIF.js +0 -1
- package/dist/dashboard-web/chunks/schedules-page-NQVQC3QY.js +0 -1
- package/dist/dashboard-web/chunks/settings-page-E7NN4NVQ.js +0 -2
- package/dist/dashboard-web/chunks/team-federation-page-VGWL53AE.js +0 -1
- package/dist/dashboard-web/chunks/whiteboards-page-BNWUU4KG.js +0 -1
|
@@ -17,7 +17,8 @@ import { delay } from '../../utils/timing.js';
|
|
|
17
17
|
*/
|
|
18
18
|
const OPENCODE_SESSION_ID_RE = /^ses_[0-9A-Za-z]+$/;
|
|
19
19
|
const OPENCODE_PASTE_THRESHOLD = 150;
|
|
20
|
-
|
|
20
|
+
/** 判断是否 OpenCode 原生会话 id(`ses_…`)。opencode2 复用同一套 id 规则。 */
|
|
21
|
+
export function isOpenCodeSessionId(value) {
|
|
21
22
|
return typeof value === 'string' && OPENCODE_SESSION_ID_RE.test(value);
|
|
22
23
|
}
|
|
23
24
|
function normaliseText(text) {
|
|
@@ -55,8 +56,8 @@ function loadSqlite() {
|
|
|
55
56
|
}
|
|
56
57
|
/** 只读打开 opencode.db 执行一次查询。DB 是 WAL 模式且被活跃 OpenCode 进程持有,
|
|
57
58
|
* read-only 连接可并发读;任何失败(模块缺失/文件不存在/短暂锁忙)都回落 null,
|
|
58
|
-
* 上层按"无法验证"降级,不影响输入投递本身。 */
|
|
59
|
-
function withDb(fn) {
|
|
59
|
+
* 上层按"无法验证"降级,不影响输入投递本身。opencode2 与 opencode 共用该库。 */
|
|
60
|
+
export function withDb(fn) {
|
|
60
61
|
const mod = loadSqlite();
|
|
61
62
|
if (!mod)
|
|
62
63
|
return null;
|
|
@@ -78,26 +79,36 @@ function withDb(fn) {
|
|
|
78
79
|
catch { /* ignore */ }
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
|
-
/**
|
|
82
|
+
/** 提交验证基线:当前存储层最大 time_created(epoch ms,与 worker 同机同钟)。
|
|
82
83
|
* 之后只认 >= 基线的新行,避免历史消息误配。 */
|
|
83
|
-
function snapPartBaseline() {
|
|
84
|
+
export function snapPartBaseline(kind = 'v1') {
|
|
85
|
+
const table = kind === 'v2' ? 'session_message' : 'part';
|
|
84
86
|
return withDb((db) => {
|
|
85
|
-
const row = db.prepare(
|
|
87
|
+
const row = db.prepare(`SELECT COALESCE(MAX(time_created), 0) AS ts FROM ${table}`).get();
|
|
86
88
|
return row?.ts ?? 0;
|
|
87
89
|
});
|
|
88
90
|
}
|
|
89
|
-
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
/**
|
|
92
|
+
* 基线之后是否出现文本匹配的 user 行;命中则带回其 session_id(= OpenCode 原生
|
|
93
|
+
* 会话 id)。全局 DB 多实例并发写也安全:靠文本相等排除别的会话的行。
|
|
94
|
+
* 严格 `>` 基线:`>=` 会在"用户因疑似丢失而重发同一段文本"时误配上一条的行,
|
|
95
|
+
* 把真丢失误报为已提交;同毫秒漏检的窗口可忽略(新行时间戳必然晚于既有最大值)。
|
|
96
|
+
*/
|
|
97
|
+
function detectNewSubmit(baseline, expectedText, kind) {
|
|
98
|
+
const q = kind === 'v2'
|
|
99
|
+
? "SELECT session_id AS sid, json_extract(data, '$.text') AS text " +
|
|
100
|
+
"FROM session_message WHERE type = 'user' " +
|
|
101
|
+
" AND json_extract(data, '$.text') IS NOT NULL " +
|
|
102
|
+
' AND time_created > ? ' +
|
|
103
|
+
'ORDER BY time_created DESC LIMIT 20'
|
|
104
|
+
: "SELECT p.session_id AS sid, json_extract(p.data, '$.text') AS text " +
|
|
96
105
|
'FROM part p JOIN message m ON m.id = p.message_id ' +
|
|
97
106
|
"WHERE json_extract(m.data, '$.role') = 'user' " +
|
|
98
107
|
" AND json_extract(p.data, '$.type') = 'text' " +
|
|
99
108
|
' AND p.time_created > ? ' +
|
|
100
|
-
'ORDER BY p.time_created DESC LIMIT 20'
|
|
109
|
+
'ORDER BY p.time_created DESC LIMIT 20';
|
|
110
|
+
return withDb((db) => {
|
|
111
|
+
const rows = db.prepare(q).all(baseline);
|
|
101
112
|
for (const r of rows) {
|
|
102
113
|
if (r.text && textMatches(r.text, expectedText)) {
|
|
103
114
|
return { found: true, cliSessionId: r.sid };
|
|
@@ -106,26 +117,100 @@ function detectNewSubmit(baseline, expectedText) {
|
|
|
106
117
|
return { found: false };
|
|
107
118
|
}) ?? { found: false };
|
|
108
119
|
}
|
|
120
|
+
/** 提交验证轮询(writeInput 共用实现,opencode2 复用):基线已由调用方采样,
|
|
121
|
+
* 之后只认 > 基线的新 user 行;命中则带回 cliSessionId。斜杠命令基线为 null
|
|
122
|
+
* (不产生 user message 行),直接视为已提交。kind 选存储层(v1/v2)。 */
|
|
123
|
+
export async function detectOpenCodeSubmit(pty, baseline, content, delayFn = delay, kind = 'v1') {
|
|
124
|
+
const trySendEnter = () => {
|
|
125
|
+
try {
|
|
126
|
+
if (pty.sendSpecialKeys)
|
|
127
|
+
pty.sendSpecialKeys('Enter');
|
|
128
|
+
else
|
|
129
|
+
pty.write('\r');
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
if (baseline === null)
|
|
137
|
+
return { submitted: true };
|
|
138
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
139
|
+
const match = detectNewSubmit(baseline, content, kind);
|
|
140
|
+
if (match.found) {
|
|
141
|
+
return match.cliSessionId
|
|
142
|
+
? { submitted: true, cliSessionId: match.cliSessionId }
|
|
143
|
+
: { submitted: true };
|
|
144
|
+
}
|
|
145
|
+
await delayFn(800);
|
|
146
|
+
if (!trySendEnter())
|
|
147
|
+
return { submitted: false };
|
|
148
|
+
}
|
|
149
|
+
const finalMatch = detectNewSubmit(baseline, content, kind);
|
|
150
|
+
if (finalMatch.found) {
|
|
151
|
+
return finalMatch.cliSessionId
|
|
152
|
+
? { submitted: true, cliSessionId: finalMatch.cliSessionId }
|
|
153
|
+
: { submitted: true };
|
|
154
|
+
}
|
|
155
|
+
const recheck = () => {
|
|
156
|
+
const late = detectNewSubmit(baseline, content, kind);
|
|
157
|
+
return late.found
|
|
158
|
+
? { submitted: true, cliSessionId: late.cliSessionId }
|
|
159
|
+
: false;
|
|
160
|
+
};
|
|
161
|
+
return { submitted: false, recheck };
|
|
162
|
+
}
|
|
109
163
|
/** 兜底反查:botmux 每条 prompt 都带 `<session_id>xxx</session_id>` 块,按该文本在
|
|
110
|
-
* user
|
|
111
|
-
*
|
|
112
|
-
function latestOpenCodeSessionForBotmuxSession(botmuxSessionId) {
|
|
113
|
-
|
|
114
|
-
|
|
164
|
+
* user 行里找最近命中的 OpenCode 会话。用于 cliSessionId 尚未持久化时的 resume
|
|
165
|
+
* (典型:首条消息经输入队列投递、没走 writeInput 验证就被 suspend/重启)。 */
|
|
166
|
+
export function latestOpenCodeSessionForBotmuxSession(botmuxSessionId, kind = 'v1') {
|
|
167
|
+
const q = kind === 'v2'
|
|
168
|
+
? "SELECT session_id AS sid FROM session_message WHERE type = 'user' AND instr(data, ?) > 0 " +
|
|
169
|
+
'ORDER BY time_created DESC LIMIT 1'
|
|
170
|
+
: 'SELECT p.session_id AS sid ' +
|
|
115
171
|
'FROM part p JOIN message m ON m.id = p.message_id ' +
|
|
116
172
|
"WHERE json_extract(m.data, '$.role') = 'user' " +
|
|
117
173
|
" AND json_extract(p.data, '$.type') = 'text' " +
|
|
118
174
|
' AND instr(p.data, ?) > 0 ' +
|
|
119
|
-
'ORDER BY p.time_created DESC LIMIT 1'
|
|
175
|
+
'ORDER BY p.time_created DESC LIMIT 1';
|
|
176
|
+
return withDb((db) => {
|
|
177
|
+
const row = db.prepare(q).get(botmuxSessionId);
|
|
120
178
|
return row?.sid;
|
|
121
179
|
}) ?? undefined;
|
|
122
180
|
}
|
|
123
|
-
function sessionRowExists(cliSessionId) {
|
|
181
|
+
export function sessionRowExists(cliSessionId, kind = 'v1') {
|
|
182
|
+
const table = kind === 'v2' ? 'session_v2' : 'session';
|
|
124
183
|
return withDb((db) => {
|
|
125
|
-
const row = db.prepare(
|
|
184
|
+
const row = db.prepare(`SELECT 1 AS ok FROM ${table} WHERE id = ? LIMIT 1`).get(cliSessionId);
|
|
126
185
|
return !!row?.ok;
|
|
127
186
|
});
|
|
128
187
|
}
|
|
188
|
+
/** Import path(/adopt 第二过滤器)共用实现:从当前存储层的会话表列出可续接的
|
|
189
|
+
* 顶层会话(parent_id 非空的是子代理会话,跳过)。opencode2 与 opencode 共用
|
|
190
|
+
* 同一库文件,kind 区分表空间。 */
|
|
191
|
+
export function listOpenCodeResumableSessions(opts, kind = 'v1') {
|
|
192
|
+
const { limit, exclude } = opts;
|
|
193
|
+
const table = kind === 'v2' ? 'session_v2' : 'session';
|
|
194
|
+
const rows = withDb((db) => db.prepare(`SELECT id, directory, title, time_updated AS timeUpdated FROM ${table} ` +
|
|
195
|
+
'WHERE parent_id IS NULL AND time_archived IS NULL ' +
|
|
196
|
+
'ORDER BY time_updated DESC LIMIT ?').all(limit + (exclude?.size ?? 0))) ?? [];
|
|
197
|
+
const out = [];
|
|
198
|
+
for (const r of rows) {
|
|
199
|
+
if (out.length >= limit)
|
|
200
|
+
break;
|
|
201
|
+
if (exclude?.has(r.id))
|
|
202
|
+
continue;
|
|
203
|
+
if (!r.directory || !existsSync(r.directory))
|
|
204
|
+
continue;
|
|
205
|
+
out.push({
|
|
206
|
+
cliSessionId: r.id,
|
|
207
|
+
cwd: r.directory,
|
|
208
|
+
title: (r.title ?? '').trim() || r.id,
|
|
209
|
+
lastActivityAt: r.timeUpdated,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
129
214
|
// -------------------------------------------------------------------------
|
|
130
215
|
export function createOpenCodeAdapter(pathOverride) {
|
|
131
216
|
// resolvedBin is lazy: setup constructs adapters only to read static
|
|
@@ -170,6 +255,8 @@ export function createOpenCodeAdapter(pathOverride) {
|
|
|
170
255
|
// OpenCode 只在"新会话"应用 --prompt,`-s` 续接时静默忽略(消息会丢)。
|
|
171
256
|
// 置位后 worker 在 resume spawn 时把初始 prompt 转入常规输入队列。
|
|
172
257
|
initialPromptArgsIgnoredOnResume: true,
|
|
258
|
+
rawCommandInputMode: 'paste-line',
|
|
259
|
+
rawCommandSettleMs: 300,
|
|
173
260
|
buildResumeCommand({ sessionId, cliSessionId }) {
|
|
174
261
|
const sid = isOpenCodeSessionId(cliSessionId) ? cliSessionId : latestOpenCodeSessionForBotmuxSession(sessionId);
|
|
175
262
|
if (!sid)
|
|
@@ -192,44 +279,14 @@ export function createOpenCodeAdapter(pathOverride) {
|
|
|
192
279
|
},
|
|
193
280
|
/** Import path(/adopt 第二过滤器):从全局 session 表列出可续接的顶层会话
|
|
194
281
|
* (parent_id 非空的是子代理会话,跳过)。title 是 OpenCode 自动生成的摘要。 */
|
|
195
|
-
listResumableSessions(
|
|
196
|
-
|
|
197
|
-
'WHERE parent_id IS NULL AND time_archived IS NULL ' +
|
|
198
|
-
'ORDER BY time_updated DESC LIMIT ?').all(limit + (exclude?.size ?? 0))) ?? [];
|
|
199
|
-
const out = [];
|
|
200
|
-
for (const r of rows) {
|
|
201
|
-
if (out.length >= limit)
|
|
202
|
-
break;
|
|
203
|
-
if (exclude?.has(r.id))
|
|
204
|
-
continue;
|
|
205
|
-
if (!r.directory || !existsSync(r.directory))
|
|
206
|
-
continue;
|
|
207
|
-
out.push({
|
|
208
|
-
cliSessionId: r.id,
|
|
209
|
-
cwd: r.directory,
|
|
210
|
-
title: (r.title ?? '').trim() || r.id,
|
|
211
|
-
lastActivityAt: r.timeUpdated,
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
return Promise.resolve(out);
|
|
282
|
+
listResumableSessions(opts) {
|
|
283
|
+
return Promise.resolve(listOpenCodeResumableSessions(opts));
|
|
215
284
|
},
|
|
216
285
|
async writeInput(pty, content) {
|
|
217
286
|
// 提交验证基线先于写入采样(traex 同款)。斜杠命令是 TUI 命令面板输入,
|
|
218
287
|
// 不产生 user message 行,跳过验证(重试 Enter 还可能误触面板项)。
|
|
219
288
|
const isSlashCommand = content.startsWith('/');
|
|
220
289
|
const baseline = isSlashCommand ? null : snapPartBaseline();
|
|
221
|
-
const trySendEnter = () => {
|
|
222
|
-
try {
|
|
223
|
-
if (pty.sendSpecialKeys)
|
|
224
|
-
pty.sendSpecialKeys('Enter');
|
|
225
|
-
else
|
|
226
|
-
pty.write('\r');
|
|
227
|
-
return true;
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
return false;
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
290
|
try {
|
|
234
291
|
if (pty.sendText && pty.sendSpecialKeys) {
|
|
235
292
|
if (!isSlashCommand && pty.pasteText && (content.length > OPENCODE_PASTE_THRESHOLD || content.includes('\n'))) {
|
|
@@ -254,35 +311,19 @@ export function createOpenCodeAdapter(pathOverride) {
|
|
|
254
311
|
// DB 缺失(首次运行 / sandbox 未授权该 DB 路径)→ 维持旧行为:盲发、假定成功。
|
|
255
312
|
if (baseline === null)
|
|
256
313
|
return undefined;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
? { submitted: true, cliSessionId: match.cliSessionId }
|
|
262
|
-
: { submitted: true };
|
|
263
|
-
}
|
|
264
|
-
await delay(800);
|
|
265
|
-
if (!trySendEnter())
|
|
266
|
-
return { submitted: false };
|
|
267
|
-
}
|
|
268
|
-
const finalMatch = detectNewSubmit(baseline, content);
|
|
269
|
-
if (finalMatch.found) {
|
|
270
|
-
return finalMatch.cliSessionId
|
|
271
|
-
? { submitted: true, cliSessionId: finalMatch.cliSessionId }
|
|
314
|
+
const result = await detectOpenCodeSubmit(pty, baseline, content, delay);
|
|
315
|
+
if (result.submitted) {
|
|
316
|
+
return result.cliSessionId
|
|
317
|
+
? { submitted: true, cliSessionId: result.cliSessionId }
|
|
272
318
|
: { submitted: true };
|
|
273
319
|
}
|
|
274
|
-
|
|
275
|
-
const late = detectNewSubmit(baseline, content);
|
|
276
|
-
return late.found
|
|
277
|
-
? { submitted: true, cliSessionId: late.cliSessionId }
|
|
278
|
-
: false;
|
|
279
|
-
};
|
|
280
|
-
return { submitted: false, recheck };
|
|
320
|
+
return { submitted: false, recheck: result.recheck };
|
|
281
321
|
},
|
|
282
322
|
completionPattern: undefined, // quiescence only — no explicit completion marker
|
|
283
323
|
readyPattern: undefined, // Bubble Tea TUI — no reliable prompt indicator; rely on quiescence + spinner guard
|
|
284
324
|
systemHints: BOTMUX_SHELL_HINTS,
|
|
285
325
|
altScreen: true, // Bubble Tea renders in alternate screen buffer
|
|
326
|
+
readOnlyRemoteScroll: true,
|
|
286
327
|
skillsDir: '~/.config/opencode/skills',
|
|
287
328
|
// botmux hook 安装:spawn 时写入 OpenCode 插件文件,
|
|
288
329
|
// 使 question.asked 事件自动转发到 `botmux hook opencode`。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/adapters/cli/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C;;;;;;;;;;GAUG;AAEH,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AACpD,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/adapters/cli/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode2.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/opencode2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAA+B,MAAM,YAAY,CAAC;AA0C1E,wBAAgB,sBAAsB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CA4GxE;AAED,eAAO,MAAM,MAAM,+BAAyB,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { resolveCommand } from './registry.js';
|
|
2
|
+
import { BOTMUX_SHELL_HINTS } from './shared-hints.js';
|
|
3
|
+
import { detectOpenCodeSubmit, isOpenCodeSessionId, latestOpenCodeSessionForBotmuxSession, listOpenCodeResumableSessions, sessionRowExists, snapPartBaseline, withDb, } from './opencode.js';
|
|
4
|
+
import { delay } from '../../utils/timing.js';
|
|
5
|
+
/**
|
|
6
|
+
* OpenCode 2.0(opencode2)适配器。OpenCode 2 是 1.x 的下一个主版本(beta,随
|
|
7
|
+
* `@opencode-ai/cli@next` 发布,二进制名 `opencode2`),与 V1 可并行安装。
|
|
8
|
+
*
|
|
9
|
+
* 与 V1 的关键差异(均在 next-17135 实测 / 源码确认):
|
|
10
|
+
* - **会话存储是 V2 新表结构**:opencode2 写同一个全局
|
|
11
|
+
* `~/.local/share/opencode/opencode.db`,但会话/消息落在 `session_v2` /
|
|
12
|
+
* `session_message` 表(V1 的 session/message/part 表已冻结)。resume 探测、
|
|
13
|
+
* submit 验证、cliSessionId 捕获、/adopt 导入复用 opencode.ts 导出的 SQLite
|
|
14
|
+
* 实现时统一走 v2 表空间。
|
|
15
|
+
* - **TUI 顶层命令没有 `--model` 标志**(只有 `run` 子命令有)。传了会被当作
|
|
16
|
+
* unknown flag 直接打印帮助退出 —— 模型只能通过 opencode 配置/UI 设置,
|
|
17
|
+
* 因此 buildArgs 不注入 model,modelChoices 也留空(setup 跳过模型询问)。
|
|
18
|
+
* - **`--prompt` 不自动提交**:next-17135 实测把 prompt 填进 composer 后不会
|
|
19
|
+
* submit(next-17082 上 -s resume 的自动提交行为已回归)。因此首条消息不走
|
|
20
|
+
* args 注入,改走输入队列 paste+Enter(worker 在 ready 后投递,经 DB 验证),
|
|
21
|
+
* fresh 与 resume 路径一致 —— 不设 passesInitialPromptViaArgs。
|
|
22
|
+
* - **插件 API 是全新 V2 契约**(default export `{ id, setup }`,事件走
|
|
23
|
+
* `ctx.event.subscribe()` 异步迭代流),V1 插件格式不兼容。ask-hook 插件由
|
|
24
|
+
* hook-installer 的 'opencode2-plugin' 格式写入 `~/.config/opencode/plugins/`
|
|
25
|
+
* (V2 的全局插件发现目录,复数),回复走新端点
|
|
26
|
+
* `POST /api/session/{sessionID}/question/{requestID}/reply` + 注册文件发现的
|
|
27
|
+
* Basic auth + `x-opencode-directory` 头(多 worktree 路由)。
|
|
28
|
+
* - **TUI 配置迁移到 `~/.config/opencode/cli.json`**(auto 迁移自 tui.json),
|
|
29
|
+
* skills 仍从 `~/.config/opencode/skills` 全局发现(V2 文档确认)。
|
|
30
|
+
*/
|
|
31
|
+
const OPENCODE_PASTE_THRESHOLD = 150;
|
|
32
|
+
export function createOpenCode2Adapter(pathOverride) {
|
|
33
|
+
const rawBin = pathOverride ?? 'opencode2';
|
|
34
|
+
let cachedBin;
|
|
35
|
+
return {
|
|
36
|
+
id: 'opencode2',
|
|
37
|
+
// 与 opencode 共用同一数据根:opencode2 的全局 SQLite 库(opencode.db, WAL)
|
|
38
|
+
// 就在这个目录。沙盒 deny-by-default 下必须整目录真实 bind,否则 DB 不存在、
|
|
39
|
+
// SQLite fcntl 锁拿不到(与 codex/opencode 同款失败模式)。
|
|
40
|
+
authPaths: ['~/.local/share/opencode'],
|
|
41
|
+
// ask-hook 插件文件在全局插件发现目录;沙盒里按只读 bind 暴露,让服务端能加载
|
|
42
|
+
// (botmux 在 spawn 前已把文件写到真实宿主路径)。
|
|
43
|
+
sandboxReadonlyPaths: () => ['~/.config/opencode/plugins'],
|
|
44
|
+
get resolvedBin() { return (cachedBin ??= resolveCommand(rawBin)); },
|
|
45
|
+
buildArgs({ sessionId, resume, resumeSessionId }) {
|
|
46
|
+
const args = [];
|
|
47
|
+
// 注意:没有 --model —— V2 TUI 顶层不接受该标志(传了直接打帮助退出)。
|
|
48
|
+
const openCodeSessionId = resume
|
|
49
|
+
? (isOpenCodeSessionId(resumeSessionId) ? resumeSessionId : latestOpenCodeSessionForBotmuxSession(sessionId, 'v2'))
|
|
50
|
+
: undefined;
|
|
51
|
+
if (openCodeSessionId) {
|
|
52
|
+
args.push('--session', openCodeSessionId);
|
|
53
|
+
}
|
|
54
|
+
// 不注入 --prompt:next-17135 实测 --prompt 只填 composer 不自动提交(不建
|
|
55
|
+
// 会话不写消息)。首条消息由 worker 走输入队列经 writeInput paste+Enter
|
|
56
|
+
// 投递(passesInitialPromptViaArgs 不置位),fresh 与 resume 路径一致。
|
|
57
|
+
return args;
|
|
58
|
+
},
|
|
59
|
+
// 首条消息走输入队列(ready 后 flush + DB 验证),不依赖 CLI 的 args 自动提交。
|
|
60
|
+
passesInitialPromptViaArgs: false,
|
|
61
|
+
buildResumeCommand({ sessionId, cliSessionId }) {
|
|
62
|
+
const sid = isOpenCodeSessionId(cliSessionId) ? cliSessionId : latestOpenCodeSessionForBotmuxSession(sessionId, 'v2');
|
|
63
|
+
if (!sid)
|
|
64
|
+
return null;
|
|
65
|
+
return `opencode2 -s ${sid}`;
|
|
66
|
+
},
|
|
67
|
+
/** Resume 目标预检:id 不在 session_v2 表 → false
|
|
68
|
+
* (worker 落回全新会话并提示),避免 `Session not found` exit 1 被放大成
|
|
69
|
+
* daemon 自动重启 crash-loop。DB 读不了 → undefined,交给 worker 二级护栏。 */
|
|
70
|
+
checkResumeTargetExists({ sessionId, cliSessionId }) {
|
|
71
|
+
const sid = isOpenCodeSessionId(cliSessionId) ? cliSessionId : latestOpenCodeSessionForBotmuxSession(sessionId, 'v2');
|
|
72
|
+
if (!sid) {
|
|
73
|
+
return withDb(() => true) === null ? undefined : false;
|
|
74
|
+
}
|
|
75
|
+
const exists = sessionRowExists(sid, 'v2');
|
|
76
|
+
return exists === null ? undefined : exists;
|
|
77
|
+
},
|
|
78
|
+
/** Import path(/adopt 第二过滤器):复用 opencode 的全局会话查询(V2 表空间)。 */
|
|
79
|
+
listResumableSessions(opts) {
|
|
80
|
+
return Promise.resolve(listOpenCodeResumableSessions(opts, 'v2'));
|
|
81
|
+
},
|
|
82
|
+
async writeInput(pty, content) {
|
|
83
|
+
const isSlashCommand = content.startsWith('/');
|
|
84
|
+
const baseline = isSlashCommand ? null : snapPartBaseline('v2');
|
|
85
|
+
try {
|
|
86
|
+
if (pty.sendText && pty.sendSpecialKeys) {
|
|
87
|
+
if (!isSlashCommand && pty.pasteText && (content.length > OPENCODE_PASTE_THRESHOLD || content.includes('\n'))) {
|
|
88
|
+
pty.pasteText(content);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
pty.sendText(content);
|
|
92
|
+
}
|
|
93
|
+
await delay(200);
|
|
94
|
+
pty.sendSpecialKeys('Enter');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
pty.write(content);
|
|
98
|
+
await delay(1000);
|
|
99
|
+
pty.write('\r');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return { submitted: false };
|
|
104
|
+
}
|
|
105
|
+
if (baseline === null)
|
|
106
|
+
return undefined;
|
|
107
|
+
const result = await detectOpenCodeSubmit(pty, baseline, content, delay, 'v2');
|
|
108
|
+
if (result.submitted) {
|
|
109
|
+
return result.cliSessionId
|
|
110
|
+
? { submitted: true, cliSessionId: result.cliSessionId }
|
|
111
|
+
: { submitted: true };
|
|
112
|
+
}
|
|
113
|
+
return { submitted: false, recheck: result.recheck };
|
|
114
|
+
},
|
|
115
|
+
completionPattern: undefined,
|
|
116
|
+
readyPattern: undefined,
|
|
117
|
+
systemHints: BOTMUX_SHELL_HINTS,
|
|
118
|
+
altScreen: true, // V2 TUI 仍渲染在 alternate screen buffer(实测 \x1b[?1049h)
|
|
119
|
+
readOnlyRemoteScroll: true,
|
|
120
|
+
skillsDir: '~/.config/opencode/skills',
|
|
121
|
+
// botmux ask-hook:V2 插件(新插件 API),写入 V2 全局插件发现目录。
|
|
122
|
+
// ⚠️ beta 已知上游问题(next-17082):HOME 是符号链接(如 /home→/data00/home)的
|
|
123
|
+
// 主机上,V2 服务端无法 import 全局插件目录里"新写入"的插件文件(loader 的
|
|
124
|
+
// freshSpecifier 把 realpath+?mtime 拼成普通路径 specifier 后 Bun 解析失败;
|
|
125
|
+
// 项目级 .opencode/plugins/ 不受影响)。表现为日志 "Cannot find module ...?mtime=...",
|
|
126
|
+
// 该主机上 ask 走原生 picker 兜底(web 终端仍可作答),其余能力不受影响。
|
|
127
|
+
hookInstall: {
|
|
128
|
+
configPath: '~/.config/opencode/plugins/botmux-ask.js',
|
|
129
|
+
format: 'opencode2-plugin',
|
|
130
|
+
},
|
|
131
|
+
asksViaHook: true,
|
|
132
|
+
// V2 TUI 顶层无 --model,模型由 opencode 配置/UI 决定 —— modelChoices 留空,
|
|
133
|
+
// setup 为此 CLI 跳过模型询问(与「模型走配置文件管理」的 CLI 同一语义)。
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
export const create = createOpenCode2Adapter;
|
|
137
|
+
//# sourceMappingURL=opencode2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode2.js","sourceRoot":"","sources":["../../../src/adapters/cli/opencode2.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,7 +52,20 @@ import type { CliAdapter } from './types.js';
|
|
|
52
52
|
* idle probe and the reattach probe (`scheduleReattachIdleProbe`, gated on
|
|
53
53
|
* `busyPattern`), so a turn — and a reattached persistent pane with no new PTY
|
|
54
54
|
* output — is marked ready via the `Working...` marker exactly as before this
|
|
55
|
-
* change. `assistant_final` events additionally fire idle when they land.
|
|
55
|
+
* change. `assistant_final` events additionally fire idle when they land.
|
|
56
|
+
* Three guards keep quiescence honest (the raw heuristic alone mis-fires):
|
|
57
|
+
* 1. Startup window: the TUI renders its input box seconds before the CLI
|
|
58
|
+
* begins consuming an argv-baked first prompt (extension/model loading).
|
|
59
|
+
* The worker holds the first ready until the turn has visibly started —
|
|
60
|
+
* `Working...` seen on PTY, or the transcript's first user record
|
|
61
|
+
* (worker `spawnArgvTurnStartEvidenceSeen` gate).
|
|
62
|
+
* 2. Mid-turn: pi is in STRUCTURED_BRIDGE_LIFECYCLE_BLOCKING_CLI_IDS, so a
|
|
63
|
+
* transcript-started turn without a terminal suppresses screen idle
|
|
64
|
+
* (drainPiTranscript emits terminals for stop/length-no-toolcall and the
|
|
65
|
+
* hard error/aborted edges — see pi-transcript.ts for the accepted
|
|
66
|
+
* custom-tool `terminate:true` gap).
|
|
67
|
+
* 3. Post-idle: `idleToBusyPattern` flips a falsely published ready back to
|
|
68
|
+
* working when `Working...` reappears. */
|
|
56
69
|
export declare function createPiAdapter(pathOverride?: string): CliAdapter;
|
|
57
70
|
export declare const create: typeof createPiAdapter;
|
|
58
71
|
//# sourceMappingURL=pi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/pi.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAIxD
|
|
1
|
+
{"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/pi.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAIxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAkEgD;AAChD,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAwEjE;AAED,eAAO,MAAM,MAAM,wBAAkB,CAAC"}
|
package/dist/adapters/cli/pi.js
CHANGED
|
@@ -55,7 +55,20 @@ import { delay } from '../../utils/timing.js';
|
|
|
55
55
|
* idle probe and the reattach probe (`scheduleReattachIdleProbe`, gated on
|
|
56
56
|
* `busyPattern`), so a turn — and a reattached persistent pane with no new PTY
|
|
57
57
|
* output — is marked ready via the `Working...` marker exactly as before this
|
|
58
|
-
* change. `assistant_final` events additionally fire idle when they land.
|
|
58
|
+
* change. `assistant_final` events additionally fire idle when they land.
|
|
59
|
+
* Three guards keep quiescence honest (the raw heuristic alone mis-fires):
|
|
60
|
+
* 1. Startup window: the TUI renders its input box seconds before the CLI
|
|
61
|
+
* begins consuming an argv-baked first prompt (extension/model loading).
|
|
62
|
+
* The worker holds the first ready until the turn has visibly started —
|
|
63
|
+
* `Working...` seen on PTY, or the transcript's first user record
|
|
64
|
+
* (worker `spawnArgvTurnStartEvidenceSeen` gate).
|
|
65
|
+
* 2. Mid-turn: pi is in STRUCTURED_BRIDGE_LIFECYCLE_BLOCKING_CLI_IDS, so a
|
|
66
|
+
* transcript-started turn without a terminal suppresses screen idle
|
|
67
|
+
* (drainPiTranscript emits terminals for stop/length-no-toolcall and the
|
|
68
|
+
* hard error/aborted edges — see pi-transcript.ts for the accepted
|
|
69
|
+
* custom-tool `terminate:true` gap).
|
|
70
|
+
* 3. Post-idle: `idleToBusyPattern` flips a falsely published ready back to
|
|
71
|
+
* working when `Working...` reappears. */
|
|
59
72
|
export function createPiAdapter(pathOverride) {
|
|
60
73
|
const bin = resolveCommand(pathOverride ?? 'pi');
|
|
61
74
|
return {
|
|
@@ -106,6 +119,13 @@ export function createPiAdapter(pathOverride) {
|
|
|
106
119
|
},
|
|
107
120
|
completionPattern: undefined,
|
|
108
121
|
busyPattern: /Working\.\.\./,
|
|
122
|
+
// Self-heal for a falsely published ready (e.g. a startup-window quiescence
|
|
123
|
+
// idle slipping past the gates): if `Working...` renders AFTER an idle was
|
|
124
|
+
// reported, IdleDetector fires onBusy and the worker pulls isPromptReady
|
|
125
|
+
// back to false + republishes working. Safe as an idle→busy edge marker:
|
|
126
|
+
// Pi's `Working...` is an ephemeral status line, never part of transcript
|
|
127
|
+
// history redraws, so a completed turn cannot revive a closed card.
|
|
128
|
+
idleToBusyPattern: /Working\.\.\./,
|
|
109
129
|
readyPattern: undefined,
|
|
110
130
|
// Pi's native Message Queue parks/steers submit-while-busy input; the JSONL
|
|
111
131
|
// transcript bridge (drainPiTranscript) + the `Working...` busy marker are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../../src/adapters/cli/pi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../../src/adapters/cli/pi.ts"],"names":[],"mappings":"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"}
|
|
@@ -153,7 +153,7 @@ export declare function buildSeatbeltProfile(denyPaths: string[], allowPaths?: s
|
|
|
153
153
|
denyWriteRegexes?: string[];
|
|
154
154
|
denyWriteLiterals?: string[];
|
|
155
155
|
}): string;
|
|
156
|
-
export declare const ISOLATION_PANE_MARKER_VERSION =
|
|
156
|
+
export declare const ISOLATION_PANE_MARKER_VERSION = 10;
|
|
157
157
|
export type IsolationCapability = 'credential' | 'read' | 'write';
|
|
158
158
|
export interface IsolationPanePolicyInput {
|
|
159
159
|
readIsolation: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-isolation.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/read-isolation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"read-isolation.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/read-isolation.ts"],"names":[],"mappings":"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"}
|
|
@@ -252,10 +252,13 @@ export function buildSeatbeltProfile(denyPaths, allowPaths = [], finalDenyPaths
|
|
|
252
252
|
// (sandboxReadonlyPaths) so goal-mode stops wedging on the TRAE first-run
|
|
253
253
|
// migration prompt. That is a new spawn-time mount; a pane predating it warm-
|
|
254
254
|
// reattaches with the old mount set and still wedges, so it must cold-spawn.
|
|
255
|
+
// · 9 → 10: credential-only Seatbelt/bwrap panes receive a private rotating
|
|
256
|
+
// managed-origin channel for capability-gated daemon IPC. A warm pane with
|
|
257
|
+
// the v9 marker lacks both the env and the private read carve-out.
|
|
255
258
|
// #709 (→8) merged first; this PR (#714) rebased on top and takes 9. Numbers stay
|
|
256
259
|
// strictly monotonic — a pane at any intermediate version must be rejected so it
|
|
257
260
|
// cold-spawns under the current contract rather than bypassing a migration.
|
|
258
|
-
export const ISOLATION_PANE_MARKER_VERSION =
|
|
261
|
+
export const ISOLATION_PANE_MARKER_VERSION = 10;
|
|
259
262
|
const ALL_ISOLATION_CAPABILITIES = [
|
|
260
263
|
'credential',
|
|
261
264
|
'read',
|
|
@@ -307,7 +310,7 @@ export function isolationPaneMarkerContent(bootId, capabilities, policy) {
|
|
|
307
310
|
if (policy
|
|
308
311
|
&& (!/^[a-f0-9]{64}$/.test(policy.originChannelId)
|
|
309
312
|
|| !/^[a-f0-9]{64}$/.test(policy.policyDigest))) {
|
|
310
|
-
throw new Error('invalid
|
|
313
|
+
throw new Error('invalid isolation marker policy');
|
|
311
314
|
}
|
|
312
315
|
return JSON.stringify({
|
|
313
316
|
version: ISOLATION_PANE_MARKER_VERSION,
|