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
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { BackendType } from '../adapters/backend/types.js';
|
|
2
|
+
import type { RiffBackendConfig } from '../adapters/backend/riff-backend.js';
|
|
3
|
+
import { cancelRiffTaskById } from '../adapters/backend/riff-backend.js';
|
|
4
|
+
import { killPersistentSession, probePersistentSession } from './persistent-backend.js';
|
|
5
|
+
export type ExplicitSessionBackingCleanupResult = {
|
|
6
|
+
ok: true;
|
|
7
|
+
kind: 'skipped_adopted' | 'no_backing';
|
|
8
|
+
} | {
|
|
9
|
+
ok: true;
|
|
10
|
+
kind: 'destroyed_persistent';
|
|
11
|
+
backendType: 'tmux' | 'herdr' | 'zellij' | 'zmx';
|
|
12
|
+
name: string;
|
|
13
|
+
} | {
|
|
14
|
+
ok: true;
|
|
15
|
+
kind: 'cancelled_riff';
|
|
16
|
+
taskId: string;
|
|
17
|
+
} | {
|
|
18
|
+
ok: false;
|
|
19
|
+
kind: 'persistent_destroy_failed' | 'riff_config_missing' | 'riff_cancel_failed';
|
|
20
|
+
backendType: BackendType;
|
|
21
|
+
taskId?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
};
|
|
24
|
+
export interface ExplicitSessionBackingCleanupInput {
|
|
25
|
+
sessionId: string;
|
|
26
|
+
backendType?: BackendType;
|
|
27
|
+
riffParentTaskId?: string;
|
|
28
|
+
/** Adopted panes/agents are user-owned. Explicit Botmux close only detaches
|
|
29
|
+
* its logical row and must never destroy the observed backing resource. */
|
|
30
|
+
adopted?: boolean;
|
|
31
|
+
/** Current authoritative config for the row's bot. Required only when the
|
|
32
|
+
* row is frozen to Riff and still carries a remote task id. */
|
|
33
|
+
riffConfig?: RiffBackendConfig;
|
|
34
|
+
}
|
|
35
|
+
export interface ExplicitSessionBackingCleanupDeps {
|
|
36
|
+
cancelRiffTask?: typeof cancelRiffTaskById;
|
|
37
|
+
killPersistent?: typeof killPersistentSession;
|
|
38
|
+
probePersistent?: typeof probePersistentSession;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Destroy the Botmux-owned backing resource before an offline/worker-less
|
|
42
|
+
* explicit close is published.
|
|
43
|
+
*
|
|
44
|
+
* This helper never mutates the session record. In particular, callers may
|
|
45
|
+
* erase `riffParentTaskId` only after `kind === 'cancelled_riff'`; a failed or
|
|
46
|
+
* unconfigurable cancellation therefore retains the durable retry handle.
|
|
47
|
+
*/
|
|
48
|
+
export declare function cleanupExplicitSessionBacking(input: ExplicitSessionBackingCleanupInput, deps?: ExplicitSessionBackingCleanupDeps): Promise<ExplicitSessionBackingCleanupResult>;
|
|
49
|
+
//# sourceMappingURL=explicit-session-backing-cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explicit-session-backing-cleanup.d.ts","sourceRoot":"","sources":["../../src/core/explicit-session-backing-cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAEL,qBAAqB,EAErB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,mCAAmC,GAC3C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAAA;CAAE,GACpD;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1G;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,2BAA2B,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;IACjF,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;+EAC2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;mEAC+D;IAC/D,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,iCAAiC;IAChD,cAAc,CAAC,EAAE,OAAO,kBAAkB,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,qBAAqB,CAAC;IAC9C,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACjD;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,kCAAkC,EACzC,IAAI,GAAE,iCAAsC,GAC3C,OAAO,CAAC,mCAAmC,CAAC,CA6D9C"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { cancelRiffTaskById } from '../adapters/backend/riff-backend.js';
|
|
2
|
+
import { isSuspendableBackendType, killPersistentSession, persistentSessionName, probePersistentSession, } from './persistent-backend.js';
|
|
3
|
+
/**
|
|
4
|
+
* Destroy the Botmux-owned backing resource before an offline/worker-less
|
|
5
|
+
* explicit close is published.
|
|
6
|
+
*
|
|
7
|
+
* This helper never mutates the session record. In particular, callers may
|
|
8
|
+
* erase `riffParentTaskId` only after `kind === 'cancelled_riff'`; a failed or
|
|
9
|
+
* unconfigurable cancellation therefore retains the durable retry handle.
|
|
10
|
+
*/
|
|
11
|
+
export async function cleanupExplicitSessionBacking(input, deps = {}) {
|
|
12
|
+
if (input.adopted)
|
|
13
|
+
return { ok: true, kind: 'skipped_adopted' };
|
|
14
|
+
if (input.backendType === 'riff') {
|
|
15
|
+
const taskId = input.riffParentTaskId;
|
|
16
|
+
if (!taskId)
|
|
17
|
+
return { ok: true, kind: 'no_backing' };
|
|
18
|
+
if (!input.riffConfig?.baseUrl) {
|
|
19
|
+
return { ok: false, kind: 'riff_config_missing', backendType: 'riff', taskId };
|
|
20
|
+
}
|
|
21
|
+
const cancel = deps.cancelRiffTask ?? cancelRiffTaskById;
|
|
22
|
+
try {
|
|
23
|
+
const cancelled = await cancel(input.riffConfig, taskId);
|
|
24
|
+
return cancelled
|
|
25
|
+
? { ok: true, kind: 'cancelled_riff', taskId }
|
|
26
|
+
: { ok: false, kind: 'riff_cancel_failed', backendType: 'riff', taskId };
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
return {
|
|
30
|
+
ok: false,
|
|
31
|
+
kind: 'riff_cancel_failed',
|
|
32
|
+
backendType: 'riff',
|
|
33
|
+
taskId,
|
|
34
|
+
error: err instanceof Error ? err.message : String(err),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!isSuspendableBackendType(input.backendType)) {
|
|
39
|
+
// Explicit pty and legacy unstamped rows have no deterministic persistent
|
|
40
|
+
// backing session to destroy. Never guess that an unstamped row was tmux.
|
|
41
|
+
return { ok: true, kind: 'no_backing' };
|
|
42
|
+
}
|
|
43
|
+
const name = persistentSessionName(input.backendType, input.sessionId);
|
|
44
|
+
const kill = deps.killPersistent ?? killPersistentSession;
|
|
45
|
+
const probe = deps.probePersistent ?? probePersistentSession;
|
|
46
|
+
try {
|
|
47
|
+
// ZMX destruction is identity-verified and refuses a name-only kill. Keep
|
|
48
|
+
// the established two-argument contract for the other backends.
|
|
49
|
+
if (input.backendType === 'zmx')
|
|
50
|
+
kill(input.backendType, name, input.sessionId);
|
|
51
|
+
else
|
|
52
|
+
kill(input.backendType, name);
|
|
53
|
+
// Backend kill helpers are intentionally idempotent and historically
|
|
54
|
+
// swallow command errors. Offline explicit abandon needs a stronger
|
|
55
|
+
// contract: only publish closed after a post-kill probe confirms absence.
|
|
56
|
+
const after = probe(input.backendType, name);
|
|
57
|
+
if (after !== 'missing') {
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
kind: 'persistent_destroy_failed',
|
|
61
|
+
backendType: input.backendType,
|
|
62
|
+
error: after === 'exists' ? 'backing_session_still_exists' : 'backing_session_state_unknown',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return { ok: true, kind: 'destroyed_persistent', backendType: input.backendType, name };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return {
|
|
69
|
+
ok: false,
|
|
70
|
+
kind: 'persistent_destroy_failed',
|
|
71
|
+
backendType: input.backendType,
|
|
72
|
+
error: err instanceof Error ? err.message : String(err),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=explicit-session-backing-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explicit-session-backing-cleanup.js","sourceRoot":"","sources":["../../src/core/explicit-session-backing-cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import type { DaemonSession } from './types.js';
|
|
|
8
8
|
* ('botDefaults.maxLiveWorkers*' i18n) — keep them in sync.
|
|
9
9
|
*/
|
|
10
10
|
export declare const DEFAULT_MAX_LIVE_WORKERS = 30;
|
|
11
|
+
export declare const IDLE_WORKER_SWEEP_MUTATION_ACQUIRE_TIMEOUT_MS = 1000;
|
|
11
12
|
export interface IdleWorkerSweepOptions {
|
|
12
13
|
/**
|
|
13
14
|
* Explicit per-bot cap for THIS bot (one daemon = one bot, so the whole
|
|
@@ -16,6 +17,11 @@ export interface IdleWorkerSweepOptions {
|
|
|
16
17
|
* never suspend).
|
|
17
18
|
*/
|
|
18
19
|
maxLiveWorkers?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Bound how long a detached sweep may wait for already-admitted turns.
|
|
22
|
+
* A wedged admission must not hold the bot-wide mutation gate forever.
|
|
23
|
+
*/
|
|
24
|
+
mutationAcquireTimeoutMs?: number;
|
|
19
25
|
}
|
|
20
26
|
export interface IdleWorkerSweepResult {
|
|
21
27
|
sessionId: string;
|
|
@@ -36,4 +42,18 @@ export interface IdleWorkerSweepResult {
|
|
|
36
42
|
* session is busy, none are suspended this round and the next sweep retries.
|
|
37
43
|
*/
|
|
38
44
|
export declare function sweepIdleWorkers(activeSessions: Map<string, DaemonSession>, opts?: IdleWorkerSweepOptions): IdleWorkerSweepResult[];
|
|
45
|
+
/**
|
|
46
|
+
* Run a cap sweep only after every already-admitted inbound turn has either
|
|
47
|
+
* durably accepted its input or finished. A worker spawn can put the bot over
|
|
48
|
+
* cap while another handler is paused in sender/reaction setup, before that
|
|
49
|
+
* handler has changed its screen status or dispatch ledger. A synchronous
|
|
50
|
+
* sweep could otherwise mistake that handler's worker for idle, suspend it,
|
|
51
|
+
* and make the subsequent send fail before acceptance.
|
|
52
|
+
*
|
|
53
|
+
* Spawn/idle callbacks commonly run inside an admission, so the mutation gate
|
|
54
|
+
* upgrades the current lease when possible. Otherwise acquisition is bounded:
|
|
55
|
+
* a wedged admission skips this sweep instead of freezing every later turn for
|
|
56
|
+
* the bot. The next idle/spawn callback retries.
|
|
57
|
+
*/
|
|
58
|
+
export declare function sweepIdleWorkersAfterTurnDrain(larkAppId: string, activeSessions: Map<string, DaemonSession>, opts?: IdleWorkerSweepOptions): Promise<IdleWorkerSweepResult[]>;
|
|
39
59
|
//# sourceMappingURL=idle-worker-sweeper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-worker-sweeper.d.ts","sourceRoot":"","sources":["../../src/core/idle-worker-sweeper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"idle-worker-sweeper.d.ts","sourceRoot":"","sources":["../../src/core/idle-worker-sweeper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,6CAA6C,OAAQ,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,IAAI,GAAE,sBAA2B,GAChC,qBAAqB,EAAE,CA+BzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAMlC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { suspendWorker } from './worker-pool.js';
|
|
2
2
|
import { isSuspendableBackendType } from './persistent-backend.js';
|
|
3
|
+
import { tryWithBotTurnMutation } from './bot-turn-mutation-gate.js';
|
|
3
4
|
/**
|
|
4
5
|
* Default per-bot live-session cap applied when a bot has no explicit
|
|
5
6
|
* `maxLiveWorkers` configured. Keeps memory bounded out of the box: beyond this
|
|
@@ -9,6 +10,7 @@ import { isSuspendableBackendType } from './persistent-backend.js';
|
|
|
9
10
|
* ('botDefaults.maxLiveWorkers*' i18n) — keep them in sync.
|
|
10
11
|
*/
|
|
11
12
|
export const DEFAULT_MAX_LIVE_WORKERS = 30;
|
|
13
|
+
export const IDLE_WORKER_SWEEP_MUTATION_ACQUIRE_TIMEOUT_MS = 1_000;
|
|
12
14
|
function liveWorkers(activeSessions) {
|
|
13
15
|
return [...activeSessions.values()].filter(ds => !!ds.worker && !ds.worker.killed);
|
|
14
16
|
}
|
|
@@ -60,4 +62,20 @@ export function sweepIdleWorkers(activeSessions, opts = {}) {
|
|
|
60
62
|
}
|
|
61
63
|
return suspended;
|
|
62
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Run a cap sweep only after every already-admitted inbound turn has either
|
|
67
|
+
* durably accepted its input or finished. A worker spawn can put the bot over
|
|
68
|
+
* cap while another handler is paused in sender/reaction setup, before that
|
|
69
|
+
* handler has changed its screen status or dispatch ledger. A synchronous
|
|
70
|
+
* sweep could otherwise mistake that handler's worker for idle, suspend it,
|
|
71
|
+
* and make the subsequent send fail before acceptance.
|
|
72
|
+
*
|
|
73
|
+
* Spawn/idle callbacks commonly run inside an admission, so the mutation gate
|
|
74
|
+
* upgrades the current lease when possible. Otherwise acquisition is bounded:
|
|
75
|
+
* a wedged admission skips this sweep instead of freezing every later turn for
|
|
76
|
+
* the bot. The next idle/spawn callback retries.
|
|
77
|
+
*/
|
|
78
|
+
export function sweepIdleWorkersAfterTurnDrain(larkAppId, activeSessions, opts = {}) {
|
|
79
|
+
return tryWithBotTurnMutation(larkAppId, opts.mutationAcquireTimeoutMs ?? IDLE_WORKER_SWEEP_MUTATION_ACQUIRE_TIMEOUT_MS, () => sweepIdleWorkers(activeSessions, opts)).then(result => result.acquired ? result.value : []);
|
|
80
|
+
}
|
|
63
81
|
//# sourceMappingURL=idle-worker-sweeper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-worker-sweeper.js","sourceRoot":"","sources":["../../src/core/idle-worker-sweeper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"idle-worker-sweeper.js","sourceRoot":"","sources":["../../src/core/idle-worker-sweeper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,MAAM,CAAC,MAAM,6CAA6C,GAAG,KAAK,CAAC;AAsBnE,SAAS,WAAW,CAAC,cAA0C;IAC7D,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAC9B,cAA0C,EAC1C,OAA+B,EAAE;IAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAC5D,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC,CAAE,uCAAuC;IACjE,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,UAAU,GAAG,OAAO;QACxB,+DAA+D;QAC/D,8EAA8E;QAC9E,0EAA0E;QAC1E,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,4EAA4E;QAC5E,sDAAsD;SACrD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;SACxD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACnE,qEAAqE;QACrE,sEAAsE;SACrE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,KAAK,MAAM,CAAC;SAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnE,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,SAAS,IAAI,GAAG;YAAE,MAAM;QAC5B,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,iBAAiB,CAAC;YAAE,SAAS;QACpD,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC/E,SAAS,EAAE,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,8BAA8B,CAC5C,SAAiB,EACjB,cAA0C,EAC1C,OAA+B,EAAE;IAEjC,OAAO,sBAAsB,CAC3B,SAAS,EACT,IAAI,CAAC,wBAAwB,IAAI,6CAA6C,EAC9E,GAAG,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAC7C,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -24,15 +24,25 @@ export type InflightItem = {
|
|
|
24
24
|
content: string;
|
|
25
25
|
logicalContent?: string;
|
|
26
26
|
turnId?: string;
|
|
27
|
+
replyTurnId?: string;
|
|
27
28
|
dispatchAttempt?: number;
|
|
29
|
+
codexAppDispatchId?: string;
|
|
30
|
+
queuedActivationToken?: string;
|
|
28
31
|
vcMeetingImTurnOrigin?: VcMeetingImTurnOrigin;
|
|
29
32
|
codexAppInput?: CodexAppTurnInput;
|
|
33
|
+
/** At-most-once turn (idempotency lease): must NEVER be carried over to a
|
|
34
|
+
* respawned CLI (codex #776 round-7 finding #1). See PendingCliInput.noReplay. */
|
|
35
|
+
noReplay?: boolean;
|
|
30
36
|
};
|
|
31
37
|
export declare class InflightInputTracker {
|
|
32
38
|
private unacked;
|
|
33
39
|
private carryOver;
|
|
34
40
|
/** An input just went onto the CLI's PTY. */
|
|
35
41
|
onWrite(item: InflightItem): void;
|
|
42
|
+
/** Remove one exact item after a definitive local write failure before the
|
|
43
|
+
* caller re-queues it. Covers both the live in-flight set and a synchronous
|
|
44
|
+
* backend-exit handoff that may already have moved it to carryOver. */
|
|
45
|
+
forget(item: InflightItem): void;
|
|
36
46
|
/** Retire one exact write whose transport outcome is ambiguous and must not
|
|
37
47
|
* be replayed automatically. Other type-ahead items remain tracked. */
|
|
38
48
|
retire(item: InflightItem): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inflight-input-tracker.d.ts","sourceRoot":"","sources":["../../src/core/inflight-input-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,aAAa,CAAC,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"inflight-input-tracker.d.ts","sourceRoot":"","sources":["../../src/core/inflight-input-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC;uFACmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,SAAS,CAAsB;IAEvC,6CAA6C;IAC7C,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIjC;;2EAEuE;IACvE,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKhC;2EACuE;IACvE,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAOnC;;2DAEuD;IACvD,cAAc,IAAI,IAAI;IAItB;;;iDAG6C;IAC7C,SAAS,CAAC,WAAW,GAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAoB,GAAG,MAAM;IAO5E;;;gCAG4B;IAC5B,aAAa,IAAI,YAAY,EAAE;CAIhC"}
|
|
@@ -26,6 +26,13 @@ export class InflightInputTracker {
|
|
|
26
26
|
onWrite(item) {
|
|
27
27
|
this.unacked.push(item);
|
|
28
28
|
}
|
|
29
|
+
/** Remove one exact item after a definitive local write failure before the
|
|
30
|
+
* caller re-queues it. Covers both the live in-flight set and a synchronous
|
|
31
|
+
* backend-exit handoff that may already have moved it to carryOver. */
|
|
32
|
+
forget(item) {
|
|
33
|
+
this.unacked = this.unacked.filter(candidate => candidate !== item);
|
|
34
|
+
this.carryOver = this.carryOver.filter(candidate => candidate !== item);
|
|
35
|
+
}
|
|
29
36
|
/** Retire one exact write whose transport outcome is ambiguous and must not
|
|
30
37
|
* be replayed automatically. Other type-ahead items remain tracked. */
|
|
31
38
|
retire(item) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inflight-input-tracker.js","sourceRoot":"","sources":["../../src/core/inflight-input-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"inflight-input-tracker.js","sourceRoot":"","sources":["../../src/core/inflight-input-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmBH,MAAM,OAAO,oBAAoB;IACvB,OAAO,GAAmB,EAAE,CAAC;IAC7B,SAAS,GAAmB,EAAE,CAAC;IAEvC,6CAA6C;IAC7C,OAAO,CAAC,IAAkB;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;2EAEuE;IACvE,MAAM,CAAC,IAAkB;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED;2EACuE;IACvE,MAAM,CAAC,IAAkB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;2DAEuD;IACvD,cAAc;QACZ,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;iDAG6C;IAC7C,SAAS,CAAC,cAA+C,GAAG,EAAE,CAAC,IAAI;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED;;;gCAG4B;IAC5B,aAAa;QACX,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export declare const MANAGED_ORIGIN_ATTEST_ROUTE = "/api/session-origin/attest";
|
|
2
|
+
export declare const MANAGED_ORIGIN_PROOF_DOMAIN = "botmux.managed-origin-attestation.v1";
|
|
3
|
+
export declare const MANAGED_ORIGIN_PROOF_TTL_MS = 5000;
|
|
4
|
+
export interface ManagedOriginAttestationContext {
|
|
5
|
+
sessionId: string;
|
|
6
|
+
channelId: string;
|
|
7
|
+
capability: string;
|
|
8
|
+
dataDir: string;
|
|
9
|
+
/** Routing hints only; the daemon derives identity from its live registry. */
|
|
10
|
+
larkAppId?: string;
|
|
11
|
+
ipcPortFallback?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ManagedOriginAttestation {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
turnId: string;
|
|
16
|
+
dispatchAttempt?: number;
|
|
17
|
+
requiresCodexAppLedger: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ManagedOriginAttestationProof extends ManagedOriginAttestation {
|
|
20
|
+
domain: typeof MANAGED_ORIGIN_PROOF_DOMAIN;
|
|
21
|
+
version: 1;
|
|
22
|
+
nonce: string;
|
|
23
|
+
channelId: string;
|
|
24
|
+
issuedAtMs: number;
|
|
25
|
+
}
|
|
26
|
+
export declare class ManagedOriginAttestationError extends Error {
|
|
27
|
+
constructor(message: string, options?: ErrorOptions);
|
|
28
|
+
}
|
|
29
|
+
/** Daemon-side proof creation. The nonce is strict and the destination is
|
|
30
|
+
* derived only from the authenticated session + daemon data root. O_EXCL and
|
|
31
|
+
* O_NOFOLLOW make a pre-existing leaf fail closed rather than follow it. */
|
|
32
|
+
export declare function writeManagedOriginAttestationProof(input: {
|
|
33
|
+
dataDir: string;
|
|
34
|
+
proof: ManagedOriginAttestationProof;
|
|
35
|
+
}): string;
|
|
36
|
+
/**
|
|
37
|
+
* Exchange a rotating capability for a host-file proof of the daemon's exact
|
|
38
|
+
* live tuple. HTTP is transport only: a stale child can bind a released port
|
|
39
|
+
* and forge a response, but Seatbelt prevents it from creating the random
|
|
40
|
+
* nonce proof in the host-owned read-only directory.
|
|
41
|
+
*/
|
|
42
|
+
export declare function attestManagedOrigin(input: {
|
|
43
|
+
context: ManagedOriginAttestationContext;
|
|
44
|
+
resolveIpcPort?: (larkAppId: string | undefined) => number | undefined;
|
|
45
|
+
fetchImpl?: typeof fetch;
|
|
46
|
+
timeoutMs?: number;
|
|
47
|
+
nonce?: string;
|
|
48
|
+
now?: () => number;
|
|
49
|
+
wait?: (delayMs: number) => Promise<void>;
|
|
50
|
+
}): Promise<ManagedOriginAttestation>;
|
|
51
|
+
//# sourceMappingURL=managed-origin-attestation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-origin-attestation.d.ts","sourceRoot":"","sources":["../../src/core/managed-origin-attestation.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,2BAA2B,yCAAyC,CAAC;AAClF,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAGjD,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,6BAA8B,SAAQ,wBAAwB;IAC7E,MAAM,EAAE,OAAO,2BAA2B,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;4EAE4E;AAC5E,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,6BAA6B,CAAC;CACtC,GAAG,MAAM,CAkDT;AAqED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,+BAA+B,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4EpC"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { closeSync, constants as fsConstants, fstatSync, openSync, readSync, unlinkSync, writeSync, } from 'node:fs';
|
|
3
|
+
import { ensureManagedOriginAttestationDirectory, managedOriginAttestationProofPath, } from './managed-origin-capability.js';
|
|
4
|
+
export const MANAGED_ORIGIN_ATTEST_ROUTE = '/api/session-origin/attest';
|
|
5
|
+
export const MANAGED_ORIGIN_PROOF_DOMAIN = 'botmux.managed-origin-attestation.v1';
|
|
6
|
+
export const MANAGED_ORIGIN_PROOF_TTL_MS = 5_000;
|
|
7
|
+
const MAX_PROOF_BYTES = 8 * 1024;
|
|
8
|
+
export class ManagedOriginAttestationError extends Error {
|
|
9
|
+
constructor(message, options) {
|
|
10
|
+
super(message, options);
|
|
11
|
+
this.name = 'ManagedOriginAttestationError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** Daemon-side proof creation. The nonce is strict and the destination is
|
|
15
|
+
* derived only from the authenticated session + daemon data root. O_EXCL and
|
|
16
|
+
* O_NOFOLLOW make a pre-existing leaf fail closed rather than follow it. */
|
|
17
|
+
export function writeManagedOriginAttestationProof(input) {
|
|
18
|
+
const dir = ensureManagedOriginAttestationDirectory(input.dataDir, input.proof.sessionId, input.proof.channelId);
|
|
19
|
+
const path = managedOriginAttestationProofPath(input.dataDir, input.proof.sessionId, input.proof.channelId, input.proof.nonce);
|
|
20
|
+
let fd;
|
|
21
|
+
let created = false;
|
|
22
|
+
try {
|
|
23
|
+
fd = openSync(path, fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL
|
|
24
|
+
| (fsConstants.O_NOFOLLOW ?? 0), 0o600);
|
|
25
|
+
created = true;
|
|
26
|
+
const stat = fstatSync(fd);
|
|
27
|
+
const expectedUid = process.getuid?.();
|
|
28
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1
|
|
29
|
+
|| (stat.mode & 0o777) !== 0o600
|
|
30
|
+
|| (expectedUid !== undefined && stat.uid !== expectedUid)) {
|
|
31
|
+
throw new Error(`unsafe managed origin proof file under ${dir}`);
|
|
32
|
+
}
|
|
33
|
+
const body = Buffer.from(JSON.stringify(input.proof), 'utf8');
|
|
34
|
+
if (body.length === 0 || body.length > MAX_PROOF_BYTES) {
|
|
35
|
+
throw new Error('managed origin proof exceeds size limit');
|
|
36
|
+
}
|
|
37
|
+
let offset = 0;
|
|
38
|
+
while (offset < body.length) {
|
|
39
|
+
const written = writeSync(fd, body, offset, body.length - offset, null);
|
|
40
|
+
if (written <= 0)
|
|
41
|
+
throw new Error('managed origin proof write made no progress');
|
|
42
|
+
offset += written;
|
|
43
|
+
}
|
|
44
|
+
return path;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
if (created) {
|
|
48
|
+
try {
|
|
49
|
+
unlinkSync(path);
|
|
50
|
+
}
|
|
51
|
+
catch { /* best effort */ }
|
|
52
|
+
}
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
if (fd !== undefined) {
|
|
57
|
+
try {
|
|
58
|
+
closeSync(fd);
|
|
59
|
+
}
|
|
60
|
+
catch { /* best effort */ }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function readManagedOriginAttestationProof(path) {
|
|
65
|
+
let fd;
|
|
66
|
+
try {
|
|
67
|
+
fd = openSync(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
|
|
68
|
+
const stat = fstatSync(fd);
|
|
69
|
+
const expectedUid = process.getuid?.();
|
|
70
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1
|
|
71
|
+
|| (stat.mode & 0o777) !== 0o600
|
|
72
|
+
|| (expectedUid !== undefined && stat.uid !== expectedUid)
|
|
73
|
+
|| stat.size <= 0 || stat.size > MAX_PROOF_BYTES) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
const body = Buffer.alloc(stat.size);
|
|
77
|
+
let offset = 0;
|
|
78
|
+
while (offset < body.length) {
|
|
79
|
+
const read = readSync(fd, body, offset, body.length - offset, null);
|
|
80
|
+
if (read <= 0)
|
|
81
|
+
return undefined;
|
|
82
|
+
offset += read;
|
|
83
|
+
}
|
|
84
|
+
return JSON.parse(body.toString('utf8'));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
if (fd !== undefined) {
|
|
91
|
+
try {
|
|
92
|
+
closeSync(fd);
|
|
93
|
+
}
|
|
94
|
+
catch { /* best effort */ }
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function validateProof(input) {
|
|
99
|
+
if (!input.value || typeof input.value !== 'object' || Array.isArray(input.value))
|
|
100
|
+
return undefined;
|
|
101
|
+
const proof = input.value;
|
|
102
|
+
if (proof.domain !== MANAGED_ORIGIN_PROOF_DOMAIN || proof.version !== 1
|
|
103
|
+
|| proof.nonce !== input.nonce
|
|
104
|
+
|| proof.sessionId !== input.context.sessionId
|
|
105
|
+
|| proof.channelId !== input.context.channelId
|
|
106
|
+
|| typeof proof.turnId !== 'string' || proof.turnId.length === 0 || proof.turnId.length > 256
|
|
107
|
+
|| typeof proof.issuedAtMs !== 'number' || !Number.isFinite(proof.issuedAtMs)
|
|
108
|
+
|| proof.issuedAtMs > input.nowMs + 1_000
|
|
109
|
+
|| input.nowMs - proof.issuedAtMs > MANAGED_ORIGIN_PROOF_TTL_MS
|
|
110
|
+
|| typeof proof.requiresCodexAppLedger !== 'boolean') {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const dispatchAttempt = proof.dispatchAttempt === undefined
|
|
114
|
+
? undefined
|
|
115
|
+
: typeof proof.dispatchAttempt === 'number'
|
|
116
|
+
&& Number.isSafeInteger(proof.dispatchAttempt)
|
|
117
|
+
&& proof.dispatchAttempt > 0
|
|
118
|
+
? proof.dispatchAttempt
|
|
119
|
+
: null;
|
|
120
|
+
if (dispatchAttempt === null)
|
|
121
|
+
return undefined;
|
|
122
|
+
return {
|
|
123
|
+
sessionId: input.context.sessionId,
|
|
124
|
+
turnId: proof.turnId,
|
|
125
|
+
...(dispatchAttempt !== undefined ? { dispatchAttempt } : {}),
|
|
126
|
+
requiresCodexAppLedger: proof.requiresCodexAppLedger,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Exchange a rotating capability for a host-file proof of the daemon's exact
|
|
131
|
+
* live tuple. HTTP is transport only: a stale child can bind a released port
|
|
132
|
+
* and forge a response, but Seatbelt prevents it from creating the random
|
|
133
|
+
* nonce proof in the host-owned read-only directory.
|
|
134
|
+
*/
|
|
135
|
+
export async function attestManagedOrigin(input) {
|
|
136
|
+
const discovered = input.resolveIpcPort?.(input.context.larkAppId);
|
|
137
|
+
// The capability leaf is host-written and read-only in Seatbelt. Daemon
|
|
138
|
+
// discovery descriptors remain ordinary filesystem data that the confined
|
|
139
|
+
// child may poison, so they are only a compatibility fallback when an older
|
|
140
|
+
// capability lacks the owning port.
|
|
141
|
+
const port = input.context.ipcPortFallback ?? discovered;
|
|
142
|
+
if (!Number.isSafeInteger(port) || !port || port <= 0) {
|
|
143
|
+
throw new ManagedOriginAttestationError('找不到目标 daemon 端口;无法验证当前 worker 的 managed origin');
|
|
144
|
+
}
|
|
145
|
+
const nonce = input.nonce ?? randomBytes(32).toString('hex');
|
|
146
|
+
if (!/^[a-f0-9]{64}$/.test(nonce)) {
|
|
147
|
+
throw new ManagedOriginAttestationError('managed origin challenge nonce 无效');
|
|
148
|
+
}
|
|
149
|
+
const proofPath = managedOriginAttestationProofPath(input.context.dataDir, input.context.sessionId, input.context.channelId, nonce);
|
|
150
|
+
const timeoutMs = input.timeoutMs ?? 3_000;
|
|
151
|
+
const now = input.now ?? Date.now;
|
|
152
|
+
const wait = input.wait ?? (delayMs => new Promise(resolve => setTimeout(resolve, delayMs)));
|
|
153
|
+
const deadline = now() + timeoutMs;
|
|
154
|
+
const controller = new AbortController();
|
|
155
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
156
|
+
timer.unref?.();
|
|
157
|
+
let response;
|
|
158
|
+
try {
|
|
159
|
+
response = await (input.fetchImpl ?? fetch)(`http://127.0.0.1:${port}${MANAGED_ORIGIN_ATTEST_ROUTE}`, {
|
|
160
|
+
method: 'POST',
|
|
161
|
+
headers: { 'content-type': 'application/json' },
|
|
162
|
+
body: JSON.stringify({
|
|
163
|
+
sessionId: input.context.sessionId,
|
|
164
|
+
channelId: input.context.channelId,
|
|
165
|
+
originCapability: input.context.capability,
|
|
166
|
+
nonce,
|
|
167
|
+
}),
|
|
168
|
+
signal: controller.signal,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
throw new ManagedOriginAttestationError(controller.signal.aborted
|
|
173
|
+
? 'daemon managed-origin 验证超时'
|
|
174
|
+
: `无法连接 owning daemon 验证 managed origin: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
clearTimeout(timer);
|
|
178
|
+
}
|
|
179
|
+
if (!response.ok) {
|
|
180
|
+
try {
|
|
181
|
+
await response.body?.cancel();
|
|
182
|
+
}
|
|
183
|
+
catch { /* transport body is untrusted */ }
|
|
184
|
+
throw new ManagedOriginAttestationError(`daemon 拒绝 managed origin: HTTP ${response.status}`);
|
|
185
|
+
}
|
|
186
|
+
// Ignore the response body completely. Only a valid protected proof is
|
|
187
|
+
// authority, and a fake loopback listener cannot write one.
|
|
188
|
+
try {
|
|
189
|
+
await response.body?.cancel();
|
|
190
|
+
}
|
|
191
|
+
catch { /* authority never comes from HTTP */ }
|
|
192
|
+
for (;;) {
|
|
193
|
+
const nowMs = now();
|
|
194
|
+
const proof = validateProof({
|
|
195
|
+
value: readManagedOriginAttestationProof(proofPath),
|
|
196
|
+
context: input.context,
|
|
197
|
+
nonce,
|
|
198
|
+
nowMs,
|
|
199
|
+
});
|
|
200
|
+
if (proof)
|
|
201
|
+
return proof;
|
|
202
|
+
if (nowMs >= deadline) {
|
|
203
|
+
throw new ManagedOriginAttestationError('daemon 未生成有效的 managed-origin host proof');
|
|
204
|
+
}
|
|
205
|
+
await wait(Math.min(20, Math.max(1, deadline - nowMs)));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=managed-origin-attestation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-origin-attestation.js","sourceRoot":"","sources":["../../src/core/managed-origin-attestation.ts"],"names":[],"mappings":"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"}
|