botmux 3.10.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/herdr-backend.d.ts +4 -3
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +11 -8
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/pty-backend.d.ts +1 -1
- package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
- package/dist/adapters/backend/pty-backend.js +4 -1
- package/dist/adapters/backend/pty-backend.js.map +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +29 -5
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +302 -31
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +6 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +7 -0
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +4 -1
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +37 -3
- 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 +3 -3
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +9 -3
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.d.ts +3 -3
- package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.js +12 -7
- package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +11 -2
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +35 -2
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +88 -7
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/runner-input.d.ts +15 -14
- package/dist/adapters/cli/runner-input.d.ts.map +1 -1
- package/dist/adapters/cli/runner-input.js +64 -26
- package/dist/adapters/cli/runner-input.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +20 -5
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +24 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +110 -5
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/fleet-shutdown.d.ts +47 -0
- package/dist/cli/fleet-shutdown.d.ts.map +1 -0
- package/dist/cli/fleet-shutdown.js +387 -0
- package/dist/cli/fleet-shutdown.js.map +1 -0
- package/dist/cli/pm2-descriptor-guard.d.ts +19 -0
- package/dist/cli/pm2-descriptor-guard.d.ts.map +1 -0
- package/dist/cli/pm2-descriptor-guard.js +122 -0
- package/dist/cli/pm2-descriptor-guard.js.map +1 -0
- package/dist/cli/pm2-exact-start.d.ts +16 -0
- package/dist/cli/pm2-exact-start.d.ts.map +1 -0
- package/dist/cli/pm2-exact-start.js +63 -0
- package/dist/cli/pm2-exact-start.js.map +1 -0
- package/dist/cli/pm2-god-admission.d.ts +8 -0
- package/dist/cli/pm2-god-admission.d.ts.map +1 -0
- package/dist/cli/pm2-god-admission.js +25 -0
- package/dist/cli/pm2-god-admission.js.map +1 -0
- package/dist/cli/pm2-jlist.d.ts +13 -0
- package/dist/cli/pm2-jlist.d.ts.map +1 -0
- package/dist/cli/pm2-jlist.js +108 -0
- package/dist/cli/pm2-jlist.js.map +1 -0
- package/dist/cli/pm2-preflight.d.ts +10 -0
- package/dist/cli/pm2-preflight.d.ts.map +1 -0
- package/dist/cli/pm2-preflight.js +23 -0
- package/dist/cli/pm2-preflight.js.map +1 -0
- package/dist/cli/pm2-shutdown-capability.d.ts +27 -0
- package/dist/cli/pm2-shutdown-capability.d.ts.map +1 -0
- package/dist/cli/pm2-shutdown-capability.js +161 -0
- package/dist/cli/pm2-shutdown-capability.js.map +1 -0
- package/dist/cli/pm2-start-transaction.d.ts +55 -0
- package/dist/cli/pm2-start-transaction.d.ts.map +1 -0
- package/dist/cli/pm2-start-transaction.js +220 -0
- package/dist/cli/pm2-start-transaction.js.map +1 -0
- package/dist/cli/send-dispatch.d.ts +12 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +31 -4
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli/session-list-liveness.d.ts +1 -0
- package/dist/cli/session-list-liveness.d.ts.map +1 -1
- package/dist/cli/session-list-liveness.js +6 -0
- package/dist/cli/session-list-liveness.js.map +1 -1
- package/dist/cli/session-picker-layout.d.ts +26 -0
- package/dist/cli/session-picker-layout.d.ts.map +1 -0
- package/dist/cli/session-picker-layout.js +123 -0
- package/dist/cli/session-picker-layout.js.map +1 -0
- package/dist/cli/session-picker-viewport.d.ts +49 -0
- package/dist/cli/session-picker-viewport.d.ts.map +1 -0
- package/dist/cli/session-picker-viewport.js +46 -0
- package/dist/cli/session-picker-viewport.js.map +1 -0
- package/dist/cli/supervisor-shutdown-client.d.ts +31 -0
- package/dist/cli/supervisor-shutdown-client.d.ts.map +1 -0
- package/dist/cli/supervisor-shutdown-client.js +146 -0
- package/dist/cli/supervisor-shutdown-client.js.map +1 -0
- package/dist/cli/terminal-width.d.ts +48 -0
- package/dist/cli/terminal-width.d.ts.map +1 -0
- package/dist/cli/terminal-width.js +119 -0
- package/dist/cli/terminal-width.js.map +1 -0
- package/dist/cli/vc-agent.d.ts.map +1 -1
- package/dist/cli/vc-agent.js +1 -1
- package/dist/cli/vc-agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2269 -716
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +1630 -125
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/ask-api.d.ts +8 -1
- package/dist/core/ask-api.d.ts.map +1 -1
- package/dist/core/ask-api.js +18 -0
- package/dist/core/ask-api.js.map +1 -1
- package/dist/core/ask-broker.d.ts +20 -0
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +467 -47
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/ask-persist-store.d.ts +126 -0
- package/dist/core/ask-persist-store.d.ts.map +1 -0
- package/dist/core/ask-persist-store.js +188 -0
- package/dist/core/ask-persist-store.js.map +1 -0
- package/dist/core/ask-types.d.ts +80 -0
- package/dist/core/ask-types.d.ts.map +1 -1
- package/dist/core/ask-types.js +62 -0
- package/dist/core/ask-types.js.map +1 -1
- package/dist/core/cli-session-id-publisher.d.ts +20 -0
- package/dist/core/cli-session-id-publisher.d.ts.map +1 -0
- package/dist/core/cli-session-id-publisher.js +21 -0
- package/dist/core/cli-session-id-publisher.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +427 -255
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +13 -0
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +385 -26
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +9 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +842 -288
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/explicit-session-backing-cleanup.d.ts +49 -0
- package/dist/core/explicit-session-backing-cleanup.d.ts.map +1 -0
- package/dist/core/explicit-session-backing-cleanup.js +76 -0
- package/dist/core/explicit-session-backing-cleanup.js.map +1 -0
- package/dist/core/idle-worker-sweeper.d.ts +20 -0
- package/dist/core/idle-worker-sweeper.d.ts.map +1 -1
- package/dist/core/idle-worker-sweeper.js +18 -0
- package/dist/core/idle-worker-sweeper.js.map +1 -1
- package/dist/core/inflight-input-tracker.d.ts +10 -0
- package/dist/core/inflight-input-tracker.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.js +7 -0
- package/dist/core/inflight-input-tracker.js.map +1 -1
- package/dist/core/managed-origin-attestation.d.ts +51 -0
- package/dist/core/managed-origin-attestation.d.ts.map +1 -0
- package/dist/core/managed-origin-attestation.js +208 -0
- package/dist/core/managed-origin-attestation.js.map +1 -0
- package/dist/core/managed-origin-capability.d.ts +62 -3
- package/dist/core/managed-origin-capability.d.ts.map +1 -1
- package/dist/core/managed-origin-capability.js +419 -9
- package/dist/core/managed-origin-capability.js.map +1 -1
- package/dist/core/pending-repo-journal.d.ts +6 -0
- package/dist/core/pending-repo-journal.d.ts.map +1 -0
- package/dist/core/pending-repo-journal.js +85 -0
- package/dist/core/pending-repo-journal.js.map +1 -0
- package/dist/core/persistent-backend.d.ts +6 -1
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +12 -6
- package/dist/core/persistent-backend.js.map +1 -1
- package/dist/core/process-start-identity.d.ts +3 -0
- package/dist/core/process-start-identity.d.ts.map +1 -0
- package/dist/core/process-start-identity.js +62 -0
- package/dist/core/process-start-identity.js.map +1 -0
- package/dist/core/raw-command-writer.d.ts +34 -0
- package/dist/core/raw-command-writer.d.ts.map +1 -0
- package/dist/core/raw-command-writer.js +48 -0
- package/dist/core/raw-command-writer.js.map +1 -0
- package/dist/core/reply-target.d.ts +85 -22
- package/dist/core/reply-target.d.ts.map +1 -1
- package/dist/core/reply-target.js +267 -32
- package/dist/core/reply-target.js.map +1 -1
- package/dist/core/resource-monitor/runtime.d.ts.map +1 -1
- package/dist/core/resource-monitor/runtime.js +4 -1
- package/dist/core/resource-monitor/runtime.js.map +1 -1
- package/dist/core/restart-report.d.ts +6 -1
- package/dist/core/restart-report.d.ts.map +1 -1
- package/dist/core/restart-report.js +22 -4
- package/dist/core/restart-report.js.map +1 -1
- package/dist/core/riff-shutdown-detach.d.ts +164 -0
- package/dist/core/riff-shutdown-detach.d.ts.map +1 -0
- package/dist/core/riff-shutdown-detach.js +787 -0
- package/dist/core/riff-shutdown-detach.js.map +1 -0
- package/dist/core/riff-worker-shutdown-readiness.d.ts +17 -0
- package/dist/core/riff-worker-shutdown-readiness.d.ts.map +1 -0
- package/dist/core/riff-worker-shutdown-readiness.js +21 -0
- package/dist/core/riff-worker-shutdown-readiness.js.map +1 -0
- package/dist/core/session-manager.d.ts +6 -6
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1227 -594
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-marker.d.ts +1 -1
- package/dist/core/session-marker.d.ts.map +1 -1
- package/dist/core/session-marker.js +2 -2
- package/dist/core/session-marker.js.map +1 -1
- package/dist/core/session-mutation-guard.d.ts +17 -0
- package/dist/core/session-mutation-guard.d.ts.map +1 -0
- package/dist/core/session-mutation-guard.js +33 -0
- package/dist/core/session-mutation-guard.js.map +1 -0
- package/dist/core/shutdown-budgets.d.ts +27 -0
- package/dist/core/shutdown-budgets.d.ts.map +1 -0
- package/dist/core/shutdown-budgets.js +47 -0
- package/dist/core/shutdown-budgets.js.map +1 -0
- package/dist/core/supervisor-shutdown-ipc.d.ts +10 -0
- package/dist/core/supervisor-shutdown-ipc.d.ts.map +1 -0
- package/dist/core/supervisor-shutdown-ipc.js +10 -0
- package/dist/core/supervisor-shutdown-ipc.js.map +1 -0
- package/dist/core/supervisor-shutdown-protocol.d.ts +16 -0
- package/dist/core/supervisor-shutdown-protocol.d.ts.map +1 -0
- package/dist/core/supervisor-shutdown-protocol.js +16 -0
- package/dist/core/supervisor-shutdown-protocol.js.map +1 -0
- package/dist/core/trigger-final-suppression.d.ts +4 -0
- package/dist/core/trigger-final-suppression.d.ts.map +1 -1
- package/dist/core/trigger-final-suppression.js +6 -11
- package/dist/core/trigger-final-suppression.js.map +1 -1
- package/dist/core/trigger-session.d.ts +70 -0
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +923 -145
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +94 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +194 -13
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +2597 -547
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +76 -2
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +2255 -773
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +20 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +24 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/feed-groups.d.ts +17 -0
- package/dist/dashboard/feed-groups.d.ts.map +1 -0
- package/dist/dashboard/feed-groups.js +75 -0
- package/dist/dashboard/feed-groups.js.map +1 -0
- package/dist/dashboard/session-card-model.d.ts +1 -1
- package/dist/dashboard/session-card-model.d.ts.map +1 -1
- package/dist/dashboard/session-card-model.js +8 -5
- package/dist/dashboard/session-card-model.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +4 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +139 -46
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +4 -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/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +40 -3
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +95 -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 +86 -40
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/kanban-model.js +1 -1
- package/dist/dashboard/web/kanban-model.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +3 -2
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/overview.d.ts +3 -0
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +2 -0
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +2 -0
- package/dist/dashboard/web/sessions-kanban.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +103 -2
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +3 -2
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +8 -0
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +15 -0
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-GED4FEMS.js +10 -0
- package/dist/dashboard-web/chunks/chunk-6J5LS5AU.js +51 -0
- package/dist/dashboard-web/chunks/{chunk-ZU3UUKAR.js → chunk-HK7NIBJG.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-3UE7S77S.js → chunk-KRHWZEXU.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-VBXJOJFH.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-EELM66G3.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-WKUV6E42.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-T2ZX2RWL.js → insights-page-54UBPPOC.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-YNVBAGR6.js → monitor-room-PORHVKRH.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-LHM55YWN.js → monitoring-page-XGA7AXNL.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-ATXVP7PW.js → office-page-AO3AFG45.js} +1 -1
- package/dist/dashboard-web/chunks/overview-page-F5BUTYR6.js +1 -0
- package/dist/dashboard-web/chunks/{roles-page-56VWM6CD.js → roles-page-M5GIASJU.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-S5K6U4EO.js → schedules-page-O232WQRR.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-YFRPSTIL.js +6 -0
- package/dist/dashboard-web/chunks/{settings-page-QUZDQARR.js → settings-page-OJAZLZQT.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-IFY7AEND.js → skills-page-EFZQPWV4.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-C7FJQPFZ.js → team-federation-page-ZJVAP7HW.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-2LMF3WWR.js → v3-page-GYWTRGO2.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-3XC6QRMY.js → whiteboards-page-MSDAG6P7.js} +1 -1
- package/dist/dashboard-web/style.css +255 -0
- package/dist/dashboard.js +172 -7
- package/dist/dashboard.js.map +1 -1
- package/dist/desktop/renderer/app.js +21 -0
- package/dist/desktop/renderer/app.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +35 -9
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +35 -9
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/ask-card.d.ts +23 -0
- package/dist/im/lark/ask-card.d.ts.map +1 -1
- package/dist/im/lark/ask-card.js +94 -4
- package/dist/im/lark/ask-card.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +6 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +112 -15
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +496 -310
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +7 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +39 -26
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/doc-comment.d.ts +7 -4
- package/dist/im/lark/doc-comment.d.ts.map +1 -1
- package/dist/im/lark/doc-comment.js +19 -6
- package/dist/im/lark/doc-comment.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +16 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +88 -23
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/forward-followup-content.d.ts.map +1 -1
- package/dist/im/lark/forward-followup-content.js +9 -1
- package/dist/im/lark/forward-followup-content.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +7 -4
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/im/lark/md-card.d.ts +11 -0
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +46 -0
- package/dist/im/lark/md-card.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts +23 -2
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +58 -3
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/overview-card.d.ts.map +1 -1
- package/dist/im/lark/overview-card.js +2 -1
- package/dist/im/lark/overview-card.js.map +1 -1
- package/dist/services/async-trigger-state.d.ts +6 -1
- package/dist/services/async-trigger-state.d.ts.map +1 -1
- package/dist/services/async-trigger-state.js +21 -0
- package/dist/services/async-trigger-state.js.map +1 -1
- package/dist/services/async-trigger-store.d.ts +23 -1
- package/dist/services/async-trigger-store.d.ts.map +1 -1
- package/dist/services/async-trigger-store.js +96 -13
- package/dist/services/async-trigger-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +40 -0
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +124 -24
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +8 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
- package/dist/services/codex-app-runner-protocol.js +9 -2
- package/dist/services/codex-app-runner-protocol.js.map +1 -1
- package/dist/services/codex-bridge-queue.d.ts +1 -0
- package/dist/services/codex-bridge-queue.d.ts.map +1 -1
- package/dist/services/codex-bridge-queue.js +1 -0
- package/dist/services/codex-bridge-queue.js.map +1 -1
- package/dist/services/codex-service-tier.d.ts +2 -0
- package/dist/services/codex-service-tier.d.ts.map +1 -1
- package/dist/services/codex-service-tier.js +1 -0
- package/dist/services/codex-service-tier.js.map +1 -1
- package/dist/services/codex-transcript.d.ts +27 -0
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js +340 -2
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/grant-policy.d.ts +3 -0
- package/dist/services/grant-policy.d.ts.map +1 -1
- package/dist/services/grant-policy.js +5 -0
- package/dist/services/grant-policy.js.map +1 -1
- package/dist/services/grant-prefs-store.d.ts +6 -3
- package/dist/services/grant-prefs-store.d.ts.map +1 -1
- package/dist/services/grant-prefs-store.js +42 -12
- package/dist/services/grant-prefs-store.js.map +1 -1
- package/dist/services/hook-runner.d.ts +20 -1
- package/dist/services/hook-runner.d.ts.map +1 -1
- package/dist/services/hook-runner.js +17 -13
- package/dist/services/hook-runner.js.map +1 -1
- package/dist/services/idempotency-store.d.ts +134 -0
- package/dist/services/idempotency-store.d.ts.map +1 -0
- package/dist/services/idempotency-store.js +299 -0
- package/dist/services/idempotency-store.js.map +1 -0
- package/dist/services/jsonl-cursor.d.ts +7 -3
- package/dist/services/jsonl-cursor.d.ts.map +1 -1
- package/dist/services/jsonl-cursor.js +55 -31
- package/dist/services/jsonl-cursor.js.map +1 -1
- package/dist/services/open-platform-rename.d.ts.map +1 -1
- package/dist/services/open-platform-rename.js +1 -108
- package/dist/services/open-platform-rename.js.map +1 -1
- package/dist/services/restart-intent-store.d.ts +22 -2
- package/dist/services/restart-intent-store.d.ts.map +1 -1
- package/dist/services/restart-intent-store.js +160 -18
- package/dist/services/restart-intent-store.js.map +1 -1
- package/dist/services/sandbox-store.d.ts +22 -0
- package/dist/services/sandbox-store.d.ts.map +1 -1
- package/dist/services/sandbox-store.js +37 -8
- package/dist/services/sandbox-store.js.map +1 -1
- package/dist/services/send-policy.d.ts +41 -33
- package/dist/services/send-policy.d.ts.map +1 -1
- package/dist/services/send-policy.js +39 -40
- package/dist/services/send-policy.js.map +1 -1
- package/dist/services/session-store.d.ts +66 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +403 -67
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/submit-notification.d.ts +3 -0
- package/dist/services/submit-notification.d.ts.map +1 -0
- package/dist/services/submit-notification.js +15 -0
- package/dist/services/submit-notification.js.map +1 -0
- package/dist/services/traex-transcript.d.ts +25 -2
- package/dist/services/traex-transcript.d.ts.map +1 -1
- package/dist/services/traex-transcript.js +133 -1
- package/dist/services/traex-transcript.js.map +1 -1
- package/dist/services/trigger-types.d.ts +13 -1
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js +39 -0
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/services/voice/index.d.ts +3 -2
- package/dist/services/voice/index.d.ts.map +1 -1
- package/dist/services/voice/index.js +5 -5
- package/dist/services/voice/index.js.map +1 -1
- package/dist/services/voice/openai.d.ts +2 -1
- package/dist/services/voice/openai.d.ts.map +1 -1
- package/dist/services/voice/openai.js +2 -1
- package/dist/services/voice/openai.js.map +1 -1
- package/dist/services/voice/sami.d.ts +5 -2
- package/dist/services/voice/sami.d.ts.map +1 -1
- package/dist/services/voice/sami.js +19 -4
- package/dist/services/voice/sami.js.map +1 -1
- package/dist/setup/bots-store.d.ts.map +1 -1
- package/dist/setup/bots-store.js +10 -4
- package/dist/setup/bots-store.js.map +1 -1
- package/dist/setup/lark-scopes.json +2 -0
- package/dist/setup/open-platform-automation.d.ts +9 -1
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +44 -15
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/open-platform-visibility.d.ts +42 -0
- package/dist/setup/open-platform-visibility.d.ts.map +1 -0
- package/dist/setup/open-platform-visibility.js +133 -0
- package/dist/setup/open-platform-visibility.js.map +1 -0
- package/dist/setup/verify-permissions.d.ts.map +1 -1
- package/dist/setup/verify-permissions.js +6 -0
- package/dist/setup/verify-permissions.js.map +1 -1
- package/dist/skills/definitions.js +2 -2
- package/dist/types.d.ts +290 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +1 -0
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js +1 -1
- package/dist/utils/bot-routing.js.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 +9 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/codex-app-control.d.ts +438 -0
- package/dist/utils/codex-app-control.d.ts.map +1 -0
- package/dist/utils/codex-app-control.js +2336 -0
- package/dist/utils/codex-app-control.js.map +1 -0
- package/dist/utils/codex-app-dispatch-ledger.d.ts +78 -0
- package/dist/utils/codex-app-dispatch-ledger.d.ts.map +1 -0
- package/dist/utils/codex-app-dispatch-ledger.js +149 -0
- package/dist/utils/codex-app-dispatch-ledger.js.map +1 -0
- package/dist/utils/codex-app-turn-dispatch.d.ts +77 -0
- package/dist/utils/codex-app-turn-dispatch.d.ts.map +1 -0
- package/dist/utils/codex-app-turn-dispatch.js +141 -0
- package/dist/utils/codex-app-turn-dispatch.js.map +1 -0
- package/dist/utils/codex-app-turn-liveness.d.ts +125 -0
- package/dist/utils/codex-app-turn-liveness.d.ts.map +1 -0
- package/dist/utils/codex-app-turn-liveness.js +301 -0
- package/dist/utils/codex-app-turn-liveness.js.map +1 -0
- package/dist/utils/idle-detector.d.ts +12 -0
- package/dist/utils/idle-detector.d.ts.map +1 -1
- package/dist/utils/idle-detector.js +19 -0
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/input-gate.d.ts +87 -0
- package/dist/utils/input-gate.d.ts.map +1 -1
- package/dist/utils/input-gate.js +86 -0
- package/dist/utils/input-gate.js.map +1 -1
- package/dist/utils/lark-upload.d.ts.map +1 -1
- package/dist/utils/lark-upload.js +52 -1
- package/dist/utils/lark-upload.js.map +1 -1
- package/dist/utils/pending-input-queue.d.ts +15 -0
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js +5 -1
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/utils/user-token.d.ts.map +1 -1
- package/dist/utils/user-token.js +53 -2
- package/dist/utils/user-token.js.map +1 -1
- package/dist/worker-ipc-preload.d.ts +12 -0
- package/dist/worker-ipc-preload.d.ts.map +1 -0
- package/dist/worker-ipc-preload.js +44 -0
- package/dist/worker-ipc-preload.js.map +1 -0
- package/dist/worker.js +2604 -325
- package/dist/worker.js.map +1 -1
- package/dist/workflows/v3/session-relay-client.d.ts +1 -0
- package/dist/workflows/v3/session-relay-client.d.ts.map +1 -1
- package/dist/workflows/v3/session-relay-client.js +12 -3
- package/dist/workflows/v3/session-relay-client.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-LTVOUDIS.js +0 -10
- package/dist/dashboard-web/chunks/chunk-DCS35UMD.js +0 -1
- package/dist/dashboard-web/chunks/chunk-MFQPCVHY.js +0 -51
- package/dist/dashboard-web/chunks/connectors-page-5KWDIMKC.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-FHOKYXMW.js +0 -8
- package/dist/dashboard-web/chunks/overview-page-QYI3KBDD.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-WBP4N7D2.js +0 -6
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
export declare const RELAY_ORIGIN_CAPABILITY_BASENAME = ".botmux-origin-capability.json";
|
|
2
|
+
export declare const MANAGED_ORIGIN_ISOLATION_MARKER_BASENAME = ".botmux-read-isolated-v1";
|
|
3
|
+
export declare const MANAGED_ORIGIN_ISOLATION_SENTINEL_BASENAME = ".botmux-read-isolation-sentinel-v1";
|
|
2
4
|
export interface ManagedOriginCapabilityClaim {
|
|
3
5
|
sessionId: string;
|
|
6
|
+
channelId?: string;
|
|
4
7
|
capability: string;
|
|
5
8
|
turnId?: string;
|
|
6
9
|
dispatchAttempt?: number;
|
|
10
|
+
/** Current daemon port, host-written on every capability rotation. */
|
|
11
|
+
ipcPort?: number;
|
|
7
12
|
}
|
|
8
13
|
/**
|
|
9
14
|
* Per-session path used by macOS read-isolated CLIs to read only their own
|
|
@@ -12,7 +17,56 @@ export interface ManagedOriginCapabilityClaim {
|
|
|
12
17
|
* The parent is denied wholesale by the Seatbelt profile; only this exact file
|
|
13
18
|
* is carved back in for the owning session.
|
|
14
19
|
*/
|
|
15
|
-
export declare function managedOriginCapabilityPath(dataDir: string, sessionId: string): string;
|
|
20
|
+
export declare function managedOriginCapabilityPath(dataDir: string, sessionId: string, channelId: string): string;
|
|
21
|
+
/** Host-written, child-read-only proof directory for live daemon attestation. */
|
|
22
|
+
export declare function managedOriginAttestationDirectory(dataDir: string, sessionId: string, channelId: string): string;
|
|
23
|
+
export declare function managedOriginAttestationProofPath(dataDir: string, sessionId: string, channelId: string, nonce: string): string;
|
|
24
|
+
export declare function managedOriginIsolationMarkerPath(dataDir: string, sessionId: string, channelId: string): string;
|
|
25
|
+
export declare function managedOriginIsolationSentinelPath(homeDir: string): string;
|
|
26
|
+
export declare function ensureManagedOriginIsolationSentinel(homeDir: string): string;
|
|
27
|
+
/** Fixed-OS-home locator whose basename is covered by the legacy
|
|
28
|
+
* `.dashboard-secret(?:\.|$)` read/write deny. New profiles carve only the
|
|
29
|
+
* exact current-session leaf back in for reads while the final write deny
|
|
30
|
+
* remains in force. This gives cmdSend a data-root binding independent of
|
|
31
|
+
* mutable HOME/SESSION_DATA_DIR. */
|
|
32
|
+
export declare function managedOriginRootLocatorPath(osUserHomeDir: string, sessionId: string): string;
|
|
33
|
+
export interface ManagedOriginRootLocator {
|
|
34
|
+
sessionId: string;
|
|
35
|
+
dataDir: string;
|
|
36
|
+
}
|
|
37
|
+
/** Probe placed inside the locator-selected data root's legacy-denied
|
|
38
|
+
* `read-isolation/` namespace, but outside every current exact carve-out. The
|
|
39
|
+
* exact directory location matters: a forged sibling dataDir must not inherit
|
|
40
|
+
* a parent-level dashboard-secret deny and masquerade as the real root. */
|
|
41
|
+
export declare function managedOriginDataRootProbePath(dataDir: string, sessionId: string): string;
|
|
42
|
+
export declare function ensureManagedOriginDataRootProbe(dataDir: string, sessionId: string): string;
|
|
43
|
+
export declare function managedOriginDataRootProbeAccess(dataDir: string, sessionId: string): 'host_accessible' | 'sandbox_denied' | 'missing_or_unsafe';
|
|
44
|
+
export declare function ensureManagedOriginRootLocator(osUserHomeDir: string, sessionId: string, dataDir: string): string;
|
|
45
|
+
export declare function readManagedOriginRootLocator(osUserHomeDir: string, sessionId: string): ManagedOriginRootLocator | null;
|
|
46
|
+
/** Kernel-observable macOS isolation classifier. The Seatbelt profile denies
|
|
47
|
+
* this fixed, host-readable sentinel independent of env/argv/session ids. */
|
|
48
|
+
export declare function managedOriginIsolationSentinelAccess(homeDir: string): 'host_accessible' | 'sandbox_denied' | 'missing_or_unsafe';
|
|
49
|
+
/** Kernel probe backed by an inode that legacy read-isolation profiles already
|
|
50
|
+
* denied: the dashboard HMAC secret. Only metadata is inspected; secret bytes
|
|
51
|
+
* are never read or returned. This closes the upgrade race where a stale
|
|
52
|
+
* pre-sentinel sandbox could replace a newly introduced probe path. */
|
|
53
|
+
export declare function managedOriginLegacyIsolationProbeAccess(osUserHomeDir: string): 'host_accessible' | 'sandbox_denied' | 'missing_or_unsafe';
|
|
54
|
+
/** Strict bounded reader for host-owned authority metadata. It never follows a
|
|
55
|
+
* leaf symlink and opens FIFOs/devices nonblocking before rejecting them by
|
|
56
|
+
* inode type, ownership, link count, mode, and size. */
|
|
57
|
+
export declare function readManagedOriginAuthorityFile(filePath: string, maxBytes?: number): string | null;
|
|
58
|
+
/** A durable, host-owned hint that this session was launched read-isolated.
|
|
59
|
+
* It is deliberately separate from the rotating capability so missing,
|
|
60
|
+
* corrupt, or revoked authority cannot silently downgrade `botmux send` to
|
|
61
|
+
* the ordinary direct path. The marker is only a fail-closed classification
|
|
62
|
+
* hint; the live daemon challenge remains the sole send authority. */
|
|
63
|
+
export declare function hasManagedOriginIsolationMarker(dataDir: string, sessionId: string, channelId: string): boolean;
|
|
64
|
+
/** Prepare the proof directory before Seatbelt canonicalizes its read carve. */
|
|
65
|
+
export declare function ensureManagedOriginAttestationDirectory(dataDir: string, sessionId: string, channelId: string): string;
|
|
66
|
+
/** Bounded owner-startup cleanup. Never call this from the unauthenticated
|
|
67
|
+
* request path: a prefilled legacy directory must not turn every challenge
|
|
68
|
+
* into an unbounded synchronous daemon scan. */
|
|
69
|
+
export declare function sweepManagedOriginAttestationProofs(dataDir: string, sessionId: string, channelId: string, maxEntries?: number): void;
|
|
16
70
|
/**
|
|
17
71
|
* Atomically replace a capability file without following an attacker-planted
|
|
18
72
|
* destination symlink. The generic atomic writer intentionally follows
|
|
@@ -20,18 +74,23 @@ export declare function managedOriginCapabilityPath(dataDir: string, sessionId:
|
|
|
20
74
|
* contract so an isolated child cannot redirect the worker's next rotation.
|
|
21
75
|
*/
|
|
22
76
|
export declare function replaceManagedOriginCapabilityFile(filePath: string, body: string): void;
|
|
77
|
+
/** Prepare a stable capability pathname without ever overwriting a successor
|
|
78
|
+
* generation's regular file. Unsafe leaf types are removed by directory-entry
|
|
79
|
+
* unlink (no follow); a regular leaf is left untouched for the daemon-owned
|
|
80
|
+
* current-worker publication path. */
|
|
81
|
+
export declare function ensureManagedOriginCapabilityLeafSafe(filePath: string): void;
|
|
23
82
|
/**
|
|
24
83
|
* Read the current origin claim from the per-session sandbox relay (Linux) or
|
|
25
84
|
* the exact Seatbelt carve-out (macOS). A file is only transport: the daemon
|
|
26
85
|
* still compares the token with its live worker registry, so stale files and
|
|
27
86
|
* forged tuple fields never confer authority.
|
|
28
87
|
*/
|
|
29
|
-
export declare function readManagedOriginCapability(dataDir: string, sessionId: string | undefined, relayDir?: string): ManagedOriginCapabilityClaim | null;
|
|
88
|
+
export declare function readManagedOriginCapability(dataDir: string, sessionId: string | undefined, relayDir?: string, channelId?: string): ManagedOriginCapabilityClaim | null;
|
|
30
89
|
/**
|
|
31
90
|
* Verify that the child-visible capability transport contains the exact token
|
|
32
91
|
* currently authorized by the worker. Existence alone is insufficient: a
|
|
33
92
|
* writable relay can contain a stale token, malformed JSON, or even a directory
|
|
34
93
|
* at the reserved path after a prior sandbox generation.
|
|
35
94
|
*/
|
|
36
|
-
export declare function hasMatchingManagedOriginCapability(dataDir: string, sessionId: string | undefined, expectedCapability: string | undefined, relayDir?: string): boolean;
|
|
95
|
+
export declare function hasMatchingManagedOriginCapability(dataDir: string, sessionId: string | undefined, expectedCapability: string | undefined, relayDir?: string, channelId?: string): boolean;
|
|
37
96
|
//# sourceMappingURL=managed-origin-capability.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-origin-capability.d.ts","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"managed-origin-capability.d.ts","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { createHash, randomBytes } from 'node:crypto';
|
|
2
|
-
import { lstatSync, mkdirSync,
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
2
|
+
import { chmodSync, closeSync, constants as fsConstants, fstatSync, lstatSync, mkdirSync, openSync, opendirSync, readSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { basename, dirname, join } from 'node:path';
|
|
4
4
|
export const RELAY_ORIGIN_CAPABILITY_BASENAME = '.botmux-origin-capability.json';
|
|
5
|
+
export const MANAGED_ORIGIN_ISOLATION_MARKER_BASENAME = '.botmux-read-isolated-v1';
|
|
6
|
+
export const MANAGED_ORIGIN_ISOLATION_SENTINEL_BASENAME = '.botmux-read-isolation-sentinel-v1';
|
|
7
|
+
const MANAGED_ORIGIN_STALE_PROOF_MS = 60_000;
|
|
8
|
+
function assertManagedOriginChannelId(channelId) {
|
|
9
|
+
if (!/^[a-f0-9]{64}$/.test(channelId)) {
|
|
10
|
+
throw new Error('invalid managed origin channel id');
|
|
11
|
+
}
|
|
12
|
+
return channelId;
|
|
13
|
+
}
|
|
14
|
+
function managedOriginChannelDigest(sessionId, channelId) {
|
|
15
|
+
return createHash('sha256')
|
|
16
|
+
.update(sessionId)
|
|
17
|
+
.update('\0')
|
|
18
|
+
.update(assertManagedOriginChannelId(channelId))
|
|
19
|
+
.digest('hex');
|
|
20
|
+
}
|
|
5
21
|
/**
|
|
6
22
|
* Per-session path used by macOS read-isolated CLIs to read only their own
|
|
7
23
|
* rotating daemon-IPC capability. Hashing keeps an untrusted session id out of
|
|
@@ -9,10 +25,369 @@ export const RELAY_ORIGIN_CAPABILITY_BASENAME = '.botmux-origin-capability.json'
|
|
|
9
25
|
* The parent is denied wholesale by the Seatbelt profile; only this exact file
|
|
10
26
|
* is carved back in for the owning session.
|
|
11
27
|
*/
|
|
12
|
-
export function managedOriginCapabilityPath(dataDir, sessionId) {
|
|
13
|
-
const digest =
|
|
28
|
+
export function managedOriginCapabilityPath(dataDir, sessionId, channelId) {
|
|
29
|
+
const digest = managedOriginChannelDigest(sessionId, channelId);
|
|
14
30
|
return join(dataDir, 'read-isolation', `origin-${digest}.json`);
|
|
15
31
|
}
|
|
32
|
+
/** Host-written, child-read-only proof directory for live daemon attestation. */
|
|
33
|
+
export function managedOriginAttestationDirectory(dataDir, sessionId, channelId) {
|
|
34
|
+
const digest = managedOriginChannelDigest(sessionId, channelId);
|
|
35
|
+
return join(dataDir, 'read-isolation', `attest-${digest}`);
|
|
36
|
+
}
|
|
37
|
+
export function managedOriginAttestationProofPath(dataDir, sessionId, channelId, nonce) {
|
|
38
|
+
if (!/^[a-f0-9]{64}$/.test(nonce))
|
|
39
|
+
throw new Error('invalid managed origin attestation nonce');
|
|
40
|
+
return join(managedOriginAttestationDirectory(dataDir, sessionId, channelId), `${nonce}.json`);
|
|
41
|
+
}
|
|
42
|
+
export function managedOriginIsolationMarkerPath(dataDir, sessionId, channelId) {
|
|
43
|
+
return join(managedOriginAttestationDirectory(dataDir, sessionId, channelId), MANAGED_ORIGIN_ISOLATION_MARKER_BASENAME);
|
|
44
|
+
}
|
|
45
|
+
export function managedOriginIsolationSentinelPath(homeDir) {
|
|
46
|
+
return join(homeDir, MANAGED_ORIGIN_ISOLATION_SENTINEL_BASENAME);
|
|
47
|
+
}
|
|
48
|
+
export function ensureManagedOriginIsolationSentinel(homeDir) {
|
|
49
|
+
const path = managedOriginIsolationSentinelPath(homeDir);
|
|
50
|
+
replaceManagedOriginCapabilityFile(path, JSON.stringify({
|
|
51
|
+
domain: 'botmux.read-isolation-sentinel.v1',
|
|
52
|
+
}));
|
|
53
|
+
chmodSync(path, 0o600);
|
|
54
|
+
return path;
|
|
55
|
+
}
|
|
56
|
+
/** Fixed-OS-home locator whose basename is covered by the legacy
|
|
57
|
+
* `.dashboard-secret(?:\.|$)` read/write deny. New profiles carve only the
|
|
58
|
+
* exact current-session leaf back in for reads while the final write deny
|
|
59
|
+
* remains in force. This gives cmdSend a data-root binding independent of
|
|
60
|
+
* mutable HOME/SESSION_DATA_DIR. */
|
|
61
|
+
export function managedOriginRootLocatorPath(osUserHomeDir, sessionId) {
|
|
62
|
+
const digest = createHash('sha256').update(sessionId).digest('hex');
|
|
63
|
+
return join(osUserHomeDir, '.botmux', `.dashboard-secret.origin-root-${digest}.json`);
|
|
64
|
+
}
|
|
65
|
+
/** Probe placed inside the locator-selected data root's legacy-denied
|
|
66
|
+
* `read-isolation/` namespace, but outside every current exact carve-out. The
|
|
67
|
+
* exact directory location matters: a forged sibling dataDir must not inherit
|
|
68
|
+
* a parent-level dashboard-secret deny and masquerade as the real root. */
|
|
69
|
+
export function managedOriginDataRootProbePath(dataDir, sessionId) {
|
|
70
|
+
if (!dataDir.startsWith('/'))
|
|
71
|
+
throw new Error('managed origin data root must be absolute');
|
|
72
|
+
const digest = createHash('sha256')
|
|
73
|
+
.update(sessionId)
|
|
74
|
+
.update('\0')
|
|
75
|
+
.update(dataDir)
|
|
76
|
+
.digest('hex');
|
|
77
|
+
return join(dataDir, 'read-isolation', `.origin-root-probe-${digest}.json`);
|
|
78
|
+
}
|
|
79
|
+
export function ensureManagedOriginDataRootProbe(dataDir, sessionId) {
|
|
80
|
+
const canonicalDataDir = realpathSync(dataDir);
|
|
81
|
+
const path = managedOriginDataRootProbePath(canonicalDataDir, sessionId);
|
|
82
|
+
replaceManagedOriginCapabilityFile(path, JSON.stringify({
|
|
83
|
+
domain: 'botmux.managed-origin-root-probe.v1',
|
|
84
|
+
sessionId,
|
|
85
|
+
dataDir: canonicalDataDir,
|
|
86
|
+
}));
|
|
87
|
+
chmodSync(path, 0o600);
|
|
88
|
+
return path;
|
|
89
|
+
}
|
|
90
|
+
export function managedOriginDataRootProbeAccess(dataDir, sessionId) {
|
|
91
|
+
const path = managedOriginDataRootProbePath(dataDir, sessionId);
|
|
92
|
+
let fd;
|
|
93
|
+
try {
|
|
94
|
+
fd = openSync(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
|
|
95
|
+
const stat = fstatSync(fd);
|
|
96
|
+
const expectedUid = process.getuid?.();
|
|
97
|
+
if (!stat.isFile() || stat.nlink !== 1 || stat.size <= 0 || stat.size > 8 * 1024
|
|
98
|
+
|| (stat.mode & 0o777) !== 0o600
|
|
99
|
+
|| (expectedUid !== undefined && stat.uid !== expectedUid))
|
|
100
|
+
return 'missing_or_unsafe';
|
|
101
|
+
const body = Buffer.alloc(stat.size);
|
|
102
|
+
let offset = 0;
|
|
103
|
+
while (offset < body.length) {
|
|
104
|
+
const read = readSync(fd, body, offset, body.length - offset, null);
|
|
105
|
+
if (read <= 0)
|
|
106
|
+
return 'missing_or_unsafe';
|
|
107
|
+
offset += read;
|
|
108
|
+
}
|
|
109
|
+
const parsed = JSON.parse(body.toString('utf8'));
|
|
110
|
+
return parsed.domain === 'botmux.managed-origin-root-probe.v1'
|
|
111
|
+
&& parsed.sessionId === sessionId
|
|
112
|
+
&& parsed.dataDir === dataDir
|
|
113
|
+
? 'host_accessible'
|
|
114
|
+
: 'missing_or_unsafe';
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
// macOS Seatbelt returns EPERM for the profile deny. Do not accept EACCES:
|
|
118
|
+
// a confined child can manufacture that with chmod(000) in a forged root.
|
|
119
|
+
return err?.code === 'EPERM' ? 'sandbox_denied' : 'missing_or_unsafe';
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
if (fd !== undefined) {
|
|
123
|
+
try {
|
|
124
|
+
closeSync(fd);
|
|
125
|
+
}
|
|
126
|
+
catch { /* best effort */ }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export function ensureManagedOriginRootLocator(osUserHomeDir, sessionId, dataDir) {
|
|
131
|
+
if (!dataDir.startsWith('/'))
|
|
132
|
+
throw new Error('managed origin data root must be absolute');
|
|
133
|
+
const canonicalDataDir = realpathSync(dataDir);
|
|
134
|
+
const lexicalPath = managedOriginRootLocatorPath(osUserHomeDir, sessionId);
|
|
135
|
+
const lexicalParent = dirname(lexicalPath);
|
|
136
|
+
mkdirSync(lexicalParent, { recursive: true, mode: 0o700 });
|
|
137
|
+
// Existing installations may symlink ~/.botmux. Resolve the trusted host
|
|
138
|
+
// parent once, validate the target directory, and write the leaf there; the
|
|
139
|
+
// CLI's lexical fixed-home path resolves to the same inode under Seatbelt.
|
|
140
|
+
const parent = realpathSync(lexicalParent);
|
|
141
|
+
const path = join(parent, basename(lexicalPath));
|
|
142
|
+
const stat = lstatSync(parent);
|
|
143
|
+
const expectedUid = process.getuid?.();
|
|
144
|
+
if (!stat.isDirectory()
|
|
145
|
+
|| (expectedUid !== undefined && stat.uid !== expectedUid)) {
|
|
146
|
+
throw new Error(`managed origin locator parent is unsafe: ${parent}`);
|
|
147
|
+
}
|
|
148
|
+
replaceManagedOriginCapabilityFile(path, JSON.stringify({
|
|
149
|
+
domain: 'botmux.managed-origin-root.v1',
|
|
150
|
+
sessionId,
|
|
151
|
+
dataDir: canonicalDataDir,
|
|
152
|
+
}));
|
|
153
|
+
chmodSync(path, 0o600);
|
|
154
|
+
return path;
|
|
155
|
+
}
|
|
156
|
+
export function readManagedOriginRootLocator(osUserHomeDir, sessionId) {
|
|
157
|
+
const body = readManagedOriginAuthorityFile(managedOriginRootLocatorPath(osUserHomeDir, sessionId), 8 * 1024);
|
|
158
|
+
if (!body)
|
|
159
|
+
return null;
|
|
160
|
+
try {
|
|
161
|
+
const parsed = JSON.parse(body);
|
|
162
|
+
if (parsed.domain !== 'botmux.managed-origin-root.v1'
|
|
163
|
+
|| parsed.sessionId !== sessionId
|
|
164
|
+
|| typeof parsed.dataDir !== 'string'
|
|
165
|
+
|| !parsed.dataDir.startsWith('/')
|
|
166
|
+
|| parsed.dataDir.length > 4096
|
|
167
|
+
|| parsed.dataDir.includes('\0'))
|
|
168
|
+
return null;
|
|
169
|
+
return { sessionId, dataDir: parsed.dataDir };
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** Kernel-observable macOS isolation classifier. The Seatbelt profile denies
|
|
176
|
+
* this fixed, host-readable sentinel independent of env/argv/session ids. */
|
|
177
|
+
export function managedOriginIsolationSentinelAccess(homeDir) {
|
|
178
|
+
const path = managedOriginIsolationSentinelPath(homeDir);
|
|
179
|
+
let fd;
|
|
180
|
+
try {
|
|
181
|
+
fd = openSync(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
|
|
182
|
+
const stat = fstatSync(fd);
|
|
183
|
+
const expectedUid = process.getuid?.();
|
|
184
|
+
if (!stat.isFile() || stat.nlink !== 1 || stat.size <= 0 || stat.size > 1024
|
|
185
|
+
|| (stat.mode & 0o777) !== 0o600
|
|
186
|
+
|| (expectedUid !== undefined && stat.uid !== expectedUid))
|
|
187
|
+
return 'missing_or_unsafe';
|
|
188
|
+
const body = Buffer.alloc(stat.size);
|
|
189
|
+
let offset = 0;
|
|
190
|
+
while (offset < body.length) {
|
|
191
|
+
const read = readSync(fd, body, offset, body.length - offset, null);
|
|
192
|
+
if (read <= 0)
|
|
193
|
+
return 'missing_or_unsafe';
|
|
194
|
+
offset += read;
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
const value = JSON.parse(body.toString('utf8'));
|
|
198
|
+
return value.domain === 'botmux.read-isolation-sentinel.v1'
|
|
199
|
+
? 'host_accessible'
|
|
200
|
+
: 'missing_or_unsafe';
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return 'missing_or_unsafe';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
return err?.code === 'EACCES' || err?.code === 'EPERM'
|
|
208
|
+
? 'sandbox_denied'
|
|
209
|
+
: 'missing_or_unsafe';
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
if (fd !== undefined) {
|
|
213
|
+
try {
|
|
214
|
+
closeSync(fd);
|
|
215
|
+
}
|
|
216
|
+
catch { /* best effort */ }
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/** Kernel probe backed by an inode that legacy read-isolation profiles already
|
|
221
|
+
* denied: the dashboard HMAC secret. Only metadata is inspected; secret bytes
|
|
222
|
+
* are never read or returned. This closes the upgrade race where a stale
|
|
223
|
+
* pre-sentinel sandbox could replace a newly introduced probe path. */
|
|
224
|
+
export function managedOriginLegacyIsolationProbeAccess(osUserHomeDir) {
|
|
225
|
+
const path = join(osUserHomeDir, '.botmux', '.dashboard-secret');
|
|
226
|
+
let fd;
|
|
227
|
+
try {
|
|
228
|
+
fd = openSync(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
|
|
229
|
+
const stat = fstatSync(fd);
|
|
230
|
+
const expectedUid = process.getuid?.();
|
|
231
|
+
return stat.isFile() && stat.nlink === 1
|
|
232
|
+
&& (expectedUid === undefined || stat.uid === expectedUid)
|
|
233
|
+
? 'host_accessible'
|
|
234
|
+
: 'missing_or_unsafe';
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
return err?.code === 'EACCES' || err?.code === 'EPERM'
|
|
238
|
+
? 'sandbox_denied'
|
|
239
|
+
: 'missing_or_unsafe';
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
if (fd !== undefined) {
|
|
243
|
+
try {
|
|
244
|
+
closeSync(fd);
|
|
245
|
+
}
|
|
246
|
+
catch { /* best effort */ }
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/** Strict bounded reader for host-owned authority metadata. It never follows a
|
|
251
|
+
* leaf symlink and opens FIFOs/devices nonblocking before rejecting them by
|
|
252
|
+
* inode type, ownership, link count, mode, and size. */
|
|
253
|
+
export function readManagedOriginAuthorityFile(filePath, maxBytes = 8 * 1024) {
|
|
254
|
+
let fd;
|
|
255
|
+
try {
|
|
256
|
+
fd = openSync(filePath, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
|
|
257
|
+
const stat = fstatSync(fd);
|
|
258
|
+
const expectedUid = process.getuid?.();
|
|
259
|
+
if (!stat.isFile() || stat.nlink !== 1 || stat.size <= 0 || stat.size > maxBytes
|
|
260
|
+
|| (stat.mode & 0o777) !== 0o600
|
|
261
|
+
|| (expectedUid !== undefined && stat.uid !== expectedUid))
|
|
262
|
+
return null;
|
|
263
|
+
const body = Buffer.alloc(stat.size);
|
|
264
|
+
let offset = 0;
|
|
265
|
+
while (offset < body.length) {
|
|
266
|
+
const read = readSync(fd, body, offset, body.length - offset, null);
|
|
267
|
+
if (read <= 0)
|
|
268
|
+
return null;
|
|
269
|
+
offset += read;
|
|
270
|
+
}
|
|
271
|
+
return body.toString('utf8');
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
if (fd !== undefined) {
|
|
278
|
+
try {
|
|
279
|
+
closeSync(fd);
|
|
280
|
+
}
|
|
281
|
+
catch { /* best effort */ }
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/** A durable, host-owned hint that this session was launched read-isolated.
|
|
286
|
+
* It is deliberately separate from the rotating capability so missing,
|
|
287
|
+
* corrupt, or revoked authority cannot silently downgrade `botmux send` to
|
|
288
|
+
* the ordinary direct path. The marker is only a fail-closed classification
|
|
289
|
+
* hint; the live daemon challenge remains the sole send authority. */
|
|
290
|
+
export function hasManagedOriginIsolationMarker(dataDir, sessionId, channelId) {
|
|
291
|
+
const body = readManagedOriginAuthorityFile(managedOriginIsolationMarkerPath(dataDir, sessionId, channelId), 1024);
|
|
292
|
+
if (!body)
|
|
293
|
+
return false;
|
|
294
|
+
try {
|
|
295
|
+
const parsed = JSON.parse(body);
|
|
296
|
+
return parsed.domain === 'botmux.read-isolation-origin.v1'
|
|
297
|
+
&& parsed.sessionId === sessionId
|
|
298
|
+
&& parsed.channelId === channelId;
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/** Prepare the proof directory before Seatbelt canonicalizes its read carve. */
|
|
305
|
+
export function ensureManagedOriginAttestationDirectory(dataDir, sessionId, channelId) {
|
|
306
|
+
const proofDir = managedOriginAttestationDirectory(dataDir, sessionId, channelId);
|
|
307
|
+
const parent = dirname(proofDir);
|
|
308
|
+
mkdirSync(parent, { recursive: true, mode: 0o700 });
|
|
309
|
+
const expectedUid = process.getuid?.();
|
|
310
|
+
const parentStat = lstatSync(parent);
|
|
311
|
+
if (!parentStat.isDirectory() || parentStat.isSymbolicLink()) {
|
|
312
|
+
throw new Error(`managed origin attestation parent is not a real directory: ${parent}`);
|
|
313
|
+
}
|
|
314
|
+
if (expectedUid !== undefined && parentStat.uid !== expectedUid) {
|
|
315
|
+
throw new Error(`managed origin attestation parent has the wrong owner: ${parent}`);
|
|
316
|
+
}
|
|
317
|
+
chmodSync(parent, 0o700);
|
|
318
|
+
try {
|
|
319
|
+
const existing = lstatSync(proofDir);
|
|
320
|
+
if (existing.isSymbolicLink() || !existing.isDirectory()) {
|
|
321
|
+
rmSync(proofDir, { recursive: true, force: true });
|
|
322
|
+
}
|
|
323
|
+
else if (expectedUid !== undefined && existing.uid !== expectedUid) {
|
|
324
|
+
throw new Error(`managed origin attestation directory has the wrong owner: ${proofDir}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
if (err?.code !== 'ENOENT')
|
|
329
|
+
throw err;
|
|
330
|
+
}
|
|
331
|
+
mkdirSync(proofDir, { recursive: true, mode: 0o700 });
|
|
332
|
+
chmodSync(proofDir, 0o700);
|
|
333
|
+
const finalStat = lstatSync(proofDir);
|
|
334
|
+
if (!finalStat.isDirectory() || finalStat.isSymbolicLink()
|
|
335
|
+
|| (expectedUid !== undefined && finalStat.uid !== expectedUid)
|
|
336
|
+
|| (finalStat.mode & 0o777) !== 0o700) {
|
|
337
|
+
throw new Error(`managed origin attestation directory is unsafe: ${proofDir}`);
|
|
338
|
+
}
|
|
339
|
+
const markerPath = managedOriginIsolationMarkerPath(dataDir, sessionId, channelId);
|
|
340
|
+
const markerBody = JSON.stringify({
|
|
341
|
+
domain: 'botmux.read-isolation-origin.v1',
|
|
342
|
+
sessionId,
|
|
343
|
+
channelId,
|
|
344
|
+
});
|
|
345
|
+
if (!hasManagedOriginIsolationMarker(dataDir, sessionId, channelId)) {
|
|
346
|
+
replaceManagedOriginCapabilityFile(markerPath, markerBody);
|
|
347
|
+
chmodSync(markerPath, 0o600);
|
|
348
|
+
}
|
|
349
|
+
return proofDir;
|
|
350
|
+
}
|
|
351
|
+
/** Bounded owner-startup cleanup. Never call this from the unauthenticated
|
|
352
|
+
* request path: a prefilled legacy directory must not turn every challenge
|
|
353
|
+
* into an unbounded synchronous daemon scan. */
|
|
354
|
+
export function sweepManagedOriginAttestationProofs(dataDir, sessionId, channelId, maxEntries = 512) {
|
|
355
|
+
const proofDir = ensureManagedOriginAttestationDirectory(dataDir, sessionId, channelId);
|
|
356
|
+
const expectedUid = process.getuid?.();
|
|
357
|
+
const now = Date.now();
|
|
358
|
+
const dir = opendirSync(proofDir);
|
|
359
|
+
let seen = 0;
|
|
360
|
+
try {
|
|
361
|
+
for (;;) {
|
|
362
|
+
const entry = dir.readSync();
|
|
363
|
+
if (!entry)
|
|
364
|
+
break;
|
|
365
|
+
if (++seen > maxEntries) {
|
|
366
|
+
throw new Error(`managed origin attestation directory exceeds ${maxEntries} entries`);
|
|
367
|
+
}
|
|
368
|
+
if (!/^[a-f0-9]{64}\.json$/.test(entry.name))
|
|
369
|
+
continue;
|
|
370
|
+
const candidate = join(proofDir, entry.name);
|
|
371
|
+
try {
|
|
372
|
+
const stat = lstatSync(candidate);
|
|
373
|
+
if (stat.isDirectory())
|
|
374
|
+
continue;
|
|
375
|
+
if (stat.isSymbolicLink() || !stat.isFile()
|
|
376
|
+
|| (expectedUid !== undefined && stat.uid !== expectedUid)
|
|
377
|
+
|| now - stat.mtimeMs > MANAGED_ORIGIN_STALE_PROOF_MS) {
|
|
378
|
+
unlinkSync(candidate);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
catch { /* raced cleanup or inaccessible leaf: fail closed per nonce */ }
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
finally {
|
|
385
|
+
try {
|
|
386
|
+
dir.closeSync();
|
|
387
|
+
}
|
|
388
|
+
catch { /* best effort */ }
|
|
389
|
+
}
|
|
390
|
+
}
|
|
16
391
|
/**
|
|
17
392
|
* Atomically replace a capability file without following an attacker-planted
|
|
18
393
|
* destination symlink. The generic atomic writer intentionally follows
|
|
@@ -41,23 +416,51 @@ export function replaceManagedOriginCapabilityFile(filePath, body) {
|
|
|
41
416
|
throw error;
|
|
42
417
|
}
|
|
43
418
|
}
|
|
419
|
+
/** Prepare a stable capability pathname without ever overwriting a successor
|
|
420
|
+
* generation's regular file. Unsafe leaf types are removed by directory-entry
|
|
421
|
+
* unlink (no follow); a regular leaf is left untouched for the daemon-owned
|
|
422
|
+
* current-worker publication path. */
|
|
423
|
+
export function ensureManagedOriginCapabilityLeafSafe(filePath) {
|
|
424
|
+
const parent = dirname(filePath);
|
|
425
|
+
mkdirSync(parent, { recursive: true, mode: 0o700 });
|
|
426
|
+
const parentStat = lstatSync(parent);
|
|
427
|
+
if (!parentStat.isDirectory() || parentStat.isSymbolicLink()) {
|
|
428
|
+
throw new Error(`managed origin capability parent is not a real directory: ${parent}`);
|
|
429
|
+
}
|
|
430
|
+
try {
|
|
431
|
+
const leaf = lstatSync(filePath);
|
|
432
|
+
if (leaf.isSymbolicLink() || !leaf.isFile())
|
|
433
|
+
unlinkSync(filePath);
|
|
434
|
+
}
|
|
435
|
+
catch (err) {
|
|
436
|
+
if (err?.code !== 'ENOENT')
|
|
437
|
+
throw err;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
44
440
|
/**
|
|
45
441
|
* Read the current origin claim from the per-session sandbox relay (Linux) or
|
|
46
442
|
* the exact Seatbelt carve-out (macOS). A file is only transport: the daemon
|
|
47
443
|
* still compares the token with its live worker registry, so stale files and
|
|
48
444
|
* forged tuple fields never confer authority.
|
|
49
445
|
*/
|
|
50
|
-
export function readManagedOriginCapability(dataDir, sessionId, relayDir) {
|
|
446
|
+
export function readManagedOriginCapability(dataDir, sessionId, relayDir, channelId) {
|
|
51
447
|
if (!sessionId)
|
|
52
448
|
return null;
|
|
53
449
|
const relay = !!relayDir;
|
|
450
|
+
if (!relay && !channelId)
|
|
451
|
+
return null;
|
|
54
452
|
const path = relay
|
|
55
453
|
? join(relayDir, RELAY_ORIGIN_CAPABILITY_BASENAME)
|
|
56
|
-
: managedOriginCapabilityPath(dataDir, sessionId);
|
|
454
|
+
: managedOriginCapabilityPath(dataDir, sessionId, channelId);
|
|
57
455
|
try {
|
|
58
|
-
const
|
|
456
|
+
const body = readManagedOriginAuthorityFile(path, 8 * 1024);
|
|
457
|
+
if (!body)
|
|
458
|
+
return null;
|
|
459
|
+
const parsed = JSON.parse(body);
|
|
59
460
|
if (!relay && parsed.sessionId !== sessionId)
|
|
60
461
|
return null;
|
|
462
|
+
if (!relay && parsed.channelId !== channelId)
|
|
463
|
+
return null;
|
|
61
464
|
const capability = typeof parsed.capability === 'string'
|
|
62
465
|
? parsed.capability
|
|
63
466
|
: parsed.token;
|
|
@@ -74,11 +477,18 @@ export function readManagedOriginCapability(dataDir, sessionId, relayDir) {
|
|
|
74
477
|
&& parsed.dispatchAttempt > 0
|
|
75
478
|
? parsed.dispatchAttempt
|
|
76
479
|
: undefined;
|
|
480
|
+
const ipcPort = typeof parsed.ipcPort === 'number'
|
|
481
|
+
&& Number.isSafeInteger(parsed.ipcPort)
|
|
482
|
+
&& parsed.ipcPort > 0 && parsed.ipcPort <= 65_535
|
|
483
|
+
? parsed.ipcPort
|
|
484
|
+
: undefined;
|
|
77
485
|
return {
|
|
78
486
|
sessionId,
|
|
487
|
+
...(!relay && channelId ? { channelId } : {}),
|
|
79
488
|
capability,
|
|
80
489
|
...(turnId ? { turnId } : {}),
|
|
81
490
|
...(dispatchAttempt !== undefined ? { dispatchAttempt } : {}),
|
|
491
|
+
...(ipcPort !== undefined ? { ipcPort } : {}),
|
|
82
492
|
};
|
|
83
493
|
}
|
|
84
494
|
catch {
|
|
@@ -91,10 +501,10 @@ export function readManagedOriginCapability(dataDir, sessionId, relayDir) {
|
|
|
91
501
|
* writable relay can contain a stale token, malformed JSON, or even a directory
|
|
92
502
|
* at the reserved path after a prior sandbox generation.
|
|
93
503
|
*/
|
|
94
|
-
export function hasMatchingManagedOriginCapability(dataDir, sessionId, expectedCapability, relayDir) {
|
|
504
|
+
export function hasMatchingManagedOriginCapability(dataDir, sessionId, expectedCapability, relayDir, channelId) {
|
|
95
505
|
if (!expectedCapability)
|
|
96
506
|
return false;
|
|
97
|
-
return readManagedOriginCapability(dataDir, sessionId, relayDir)?.capability
|
|
507
|
+
return readManagedOriginCapability(dataDir, sessionId, relayDir, channelId)?.capability
|
|
98
508
|
=== expectedCapability;
|
|
99
509
|
}
|
|
100
510
|
//# sourceMappingURL=managed-origin-capability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-origin-capability.js","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"managed-origin-capability.js","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DaemonSession } from './types.js';
|
|
2
|
+
import type { PendingRepoSetup } from '../types.js';
|
|
3
|
+
export declare function stagePendingRepoSetup(ds: DaemonSession, args: Pick<PendingRepoSetup, 'mode'> & Partial<Pick<PendingRepoSetup, 'baseDir' | 'turnId'>>): void;
|
|
4
|
+
export declare function persistPendingRepoCardMessageId(ds: DaemonSession, messageId: string): void;
|
|
5
|
+
export declare function restorePendingRepoRuntime(ds: DaemonSession): boolean;
|
|
6
|
+
//# sourceMappingURL=pending-repo-journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-repo-journal.d.ts","sourceRoot":"","sources":["../../src/core/pending-repo-journal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC,GAC3F,IAAI,CA+CN;AAED,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAW1F;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAkBpE"}
|