botmux 2.111.0 → 2.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +19 -7
- package/README.md +19 -7
- package/dist/adapters/adopt-route.d.ts.map +1 -1
- package/dist/adapters/adopt-route.js +2 -1
- package/dist/adapters/adopt-route.js.map +1 -1
- package/dist/adapters/backend/herdr-backend.d.ts +29 -0
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +167 -0
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/riff-backend.js +2 -2
- package/dist/adapters/backend/sandbox.d.ts +61 -6
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +235 -43
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +1 -0
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +1 -0
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts +2 -0
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +7 -0
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex-app-turn.d.ts +16 -0
- package/dist/adapters/cli/codex-app-turn.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app-turn.js +26 -0
- package/dist/adapters/cli/codex-app-turn.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +1 -0
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts +8 -6
- package/dist/adapters/cli/grok.d.ts.map +1 -1
- package/dist/adapters/cli/grok.js +14 -6
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +40 -14
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +116 -19
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/runner-control-channel.d.ts +32 -0
- package/dist/adapters/cli/runner-control-channel.d.ts.map +1 -0
- package/dist/adapters/cli/runner-control-channel.js +104 -0
- package/dist/adapters/cli/runner-control-channel.js.map +1 -0
- package/dist/adapters/cli/shared-hints.d.ts +1 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +9 -0
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +100 -64
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +13 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +36 -27
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +354 -8
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/saved-workflow.d.ts +25 -0
- package/dist/cli/saved-workflow.d.ts.map +1 -0
- package/dist/cli/saved-workflow.js +338 -0
- package/dist/cli/saved-workflow.js.map +1 -0
- package/dist/cli/send-dispatch.d.ts +18 -3
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +22 -3
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli/v3-run-cancel.d.ts +47 -0
- package/dist/cli/v3-run-cancel.d.ts.map +1 -0
- package/dist/cli/v3-run-cancel.js +96 -0
- package/dist/cli/v3-run-cancel.js.map +1 -0
- package/dist/cli/vc-agent.d.ts.map +1 -1
- package/dist/cli/vc-agent.js +54 -1
- package/dist/cli/vc-agent.js.map +1 -1
- package/dist/cli/workflow-migration.d.ts +39 -0
- package/dist/cli/workflow-migration.d.ts.map +1 -0
- package/dist/cli/workflow-migration.js +302 -0
- package/dist/cli/workflow-migration.js.map +1 -0
- package/dist/cli/workflow-run-archive.d.ts +29 -0
- package/dist/cli/workflow-run-archive.d.ts.map +1 -0
- package/dist/cli/workflow-run-archive.js +183 -0
- package/dist/cli/workflow-run-archive.js.map +1 -0
- package/dist/cli/workflow.d.ts +5 -10
- package/dist/cli/workflow.d.ts.map +1 -1
- package/dist/cli/workflow.js +85 -764
- package/dist/cli/workflow.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1018 -191
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +30 -21
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +21 -9
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/current-turn-provenance.d.ts +39 -0
- package/dist/core/current-turn-provenance.d.ts.map +1 -0
- package/dist/core/current-turn-provenance.js +122 -0
- package/dist/core/current-turn-provenance.js.map +1 -0
- package/dist/core/daemon-ipc-auth.d.ts +20 -0
- package/dist/core/daemon-ipc-auth.d.ts.map +1 -0
- package/dist/core/daemon-ipc-auth.js +44 -0
- package/dist/core/daemon-ipc-auth.js.map +1 -0
- package/dist/core/daemon-ipc-session-auth.d.ts +37 -0
- package/dist/core/daemon-ipc-session-auth.d.ts.map +1 -0
- package/dist/core/daemon-ipc-session-auth.js +35 -0
- package/dist/core/daemon-ipc-session-auth.js.map +1 -0
- package/dist/core/dashboard-command/index.d.ts +0 -2
- package/dist/core/dashboard-command/index.d.ts.map +1 -1
- package/dist/core/dashboard-command/index.js +2 -2
- package/dist/core/dashboard-command/index.js.map +1 -1
- package/dist/core/dashboard-command/stub.d.ts +1 -1
- package/dist/core/dashboard-command/stub.d.ts.map +1 -1
- package/dist/core/dashboard-command/stub.js +0 -1
- package/dist/core/dashboard-command/stub.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +11 -2
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +266 -41
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-secret.d.ts +3 -0
- package/dist/core/dashboard-secret.d.ts.map +1 -0
- package/dist/core/dashboard-secret.js +7 -0
- package/dist/core/dashboard-secret.js.map +1 -0
- package/dist/core/data-dir.d.ts +24 -0
- package/dist/core/data-dir.d.ts.map +1 -0
- package/dist/core/data-dir.js +48 -0
- package/dist/core/data-dir.js.map +1 -0
- package/dist/core/inflight-input-tracker.d.ts +4 -2
- package/dist/core/inflight-input-tracker.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.js +6 -5
- package/dist/core/inflight-input-tracker.js.map +1 -1
- package/dist/core/inject-queue-policy.d.ts +70 -0
- package/dist/core/inject-queue-policy.d.ts.map +1 -0
- package/dist/core/inject-queue-policy.js +30 -0
- package/dist/core/inject-queue-policy.js.map +1 -0
- package/dist/core/maintenance.d.ts +1 -1
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +3 -2
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/managed-origin-capability.d.ts +30 -0
- package/dist/core/managed-origin-capability.d.ts.map +1 -0
- package/dist/core/managed-origin-capability.js +88 -0
- package/dist/core/managed-origin-capability.js.map +1 -0
- package/dist/core/role-library.d.ts +15 -0
- package/dist/core/role-library.d.ts.map +1 -0
- package/dist/core/role-library.js +75 -0
- package/dist/core/role-library.js.map +1 -0
- package/dist/core/session-cwd.d.ts +14 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +17 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/session-manager.d.ts +4 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +27 -8
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-marker.d.ts +22 -0
- package/dist/core/session-marker.d.ts.map +1 -1
- package/dist/core/session-marker.js +185 -20
- package/dist/core/session-marker.js.map +1 -1
- package/dist/core/slash-inject.d.ts +15 -0
- package/dist/core/slash-inject.d.ts.map +1 -0
- package/dist/core/slash-inject.js +25 -0
- package/dist/core/slash-inject.js.map +1 -0
- package/dist/core/terminal-url.d.ts +1 -0
- package/dist/core/terminal-url.d.ts.map +1 -1
- package/dist/core/terminal-url.js +14 -8
- package/dist/core/terminal-url.js.map +1 -1
- package/dist/core/terminal-write-auth.d.ts +26 -0
- package/dist/core/terminal-write-auth.d.ts.map +1 -1
- package/dist/core/terminal-write-auth.js +48 -3
- package/dist/core/terminal-write-auth.js.map +1 -1
- package/dist/core/trigger-session.d.ts +24 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +106 -15
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +26 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +65 -2
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +459 -39
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +249 -8
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +7383 -1195
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/aggregator.d.ts +1 -1
- package/dist/dashboard/aggregator.d.ts.map +1 -1
- package/dist/dashboard/aggregator.js +2 -2
- package/dist/dashboard/aggregator.js.map +1 -1
- package/dist/dashboard/auth.d.ts +3 -8
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +63 -22
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts +5 -0
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +37 -0
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +42 -2
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/daemon-internal-api.d.ts +0 -2
- package/dist/dashboard/daemon-internal-api.d.ts.map +1 -1
- package/dist/dashboard/daemon-internal-api.js +26 -93
- package/dist/dashboard/daemon-internal-api.js.map +1 -1
- package/dist/dashboard/daemon-internal-client.d.ts.map +1 -1
- package/dist/dashboard/daemon-internal-client.js +2 -3
- package/dist/dashboard/daemon-internal-client.js.map +1 -1
- package/dist/dashboard/federation-api.js +1 -1
- package/dist/dashboard/federation-api.js.map +1 -1
- package/dist/dashboard/federation-spoke-api.js +1 -1
- package/dist/dashboard/federation-spoke-api.js.map +1 -1
- package/dist/dashboard/history-senders.d.ts +3 -0
- package/dist/dashboard/history-senders.d.ts.map +1 -1
- package/dist/dashboard/history-senders.js.map +1 -1
- package/dist/dashboard/http.d.ts +4 -0
- package/dist/dashboard/http.d.ts.map +1 -0
- package/dist/dashboard/http.js +6 -0
- package/dist/dashboard/http.js.map +1 -0
- package/dist/dashboard/registry.d.ts +4 -0
- package/dist/dashboard/registry.d.ts.map +1 -1
- package/dist/dashboard/registry.js.map +1 -1
- package/dist/dashboard/trigger-api.js +1 -1
- package/dist/dashboard/trigger-api.js.map +1 -1
- package/dist/dashboard/v3-runs-api.d.ts +13 -10
- package/dist/dashboard/v3-runs-api.d.ts.map +1 -1
- package/dist/dashboard/v3-runs-api.js +121 -4
- package/dist/dashboard/v3-runs-api.js.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.d.ts +105 -0
- package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -0
- package/dist/dashboard/vc-consumer-profiles-api.js +312 -0
- package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -0
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +7 -6
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +9 -14
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +7 -3
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/connectors-page.d.ts +5 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +16 -12
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/create-session-entry.d.ts +4 -0
- package/dist/dashboard/web/create-session-entry.d.ts.map +1 -0
- package/dist/dashboard/web/create-session-entry.js +17 -0
- package/dist/dashboard/web/create-session-entry.js.map +1 -0
- package/dist/dashboard/web/dashboard-components.d.ts +5 -0
- package/dist/dashboard/web/dashboard-components.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-components.js +29 -4
- package/dist/dashboard/web/dashboard-components.js.map +1 -1
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +0 -1
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +192 -382
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +3 -0
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +18 -0
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
- package/dist/dashboard/web/schedules-page.js +4 -1
- package/dist/dashboard/web/schedules-page.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +64 -18
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +2 -1
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/v3-api.d.ts +12 -2
- package/dist/dashboard/web/v3-api.d.ts.map +1 -1
- package/dist/dashboard/web/v3-api.js +34 -6
- package/dist/dashboard/web/v3-api.js.map +1 -1
- package/dist/dashboard/web/v3-components.d.ts +6 -0
- package/dist/dashboard/web/v3-components.d.ts.map +1 -1
- package/dist/dashboard/web/v3-components.js +66 -23
- package/dist/dashboard/web/v3-components.js.map +1 -1
- package/dist/dashboard/web/v3-model.js +1 -1
- package/dist/dashboard/web/v3-model.js.map +1 -1
- package/dist/dashboard/web/v3-terminal.js +2 -2
- package/dist/dashboard/web/v3-terminal.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +19 -0
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -0
- package/dist/dashboard/web/vc-consumer-profiles-section.js +382 -0
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -0
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +29 -6
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-RYBL4ZYE.js +4 -0
- package/dist/dashboard-web/chunks/{chunk-OEJIT66L.js → chunk-CMDPZOPK.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-I35DXGM4.js +1 -0
- package/dist/dashboard-web/chunks/chunk-NYZHARIU.js +47 -0
- package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-YQFXGRSD.js → chunk-YBOHL7T7.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-YWCPDL4S.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-DAMP7TTV.js +1 -0
- package/dist/dashboard-web/chunks/{groups-page-5AJPPJH2.js → groups-page-BPFA356N.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-R3DFECX4.js → insights-page-SHOPHTWY.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-NLMKJLDY.js → monitor-room-PXPJGZCN.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-EHSOX4GV.js → monitoring-page-4DF54M5Y.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-OXJKFJ4R.js → office-page-6OHU6KMZ.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-GJHIVXJF.js → overview-page-IHIZ6F5M.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-6ZODQISW.js → roles-page-JYTBYKEF.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-DAGMHVCH.js → schedules-page-WJ72T7KV.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-QC56OIAI.js +3 -0
- package/dist/dashboard-web/chunks/settings-page-TCKWEXTN.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-J7EVUHXP.js → skills-page-RJJNIECW.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-YM5JBIII.js → team-federation-page-ZMDX3E7K.js} +1 -1
- package/dist/dashboard-web/chunks/v3-page-VLLAUQ33.js +94 -0
- package/dist/dashboard-web/chunks/{whiteboards-page-75N2U6W4.js → whiteboards-page-NAO53CKM.js} +1 -1
- package/dist/dashboard-web/style.css +363 -274
- package/dist/dashboard.js +194 -78
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +12 -87
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +12 -87
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/brand-template.d.ts +15 -0
- package/dist/im/lark/brand-template.d.ts.map +1 -0
- package/dist/im/lark/brand-template.js +114 -0
- package/dist/im/lark/brand-template.js.map +1 -0
- package/dist/im/lark/card-handler.d.ts +6 -3
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +23 -39
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +8 -2
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +33 -31
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/doc-comment.d.ts +18 -0
- package/dist/im/lark/doc-comment.d.ts.map +1 -1
- package/dist/im/lark/doc-comment.js +119 -5
- package/dist/im/lark/doc-comment.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +18 -2
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +41 -19
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/merge-forward.d.ts.map +1 -1
- package/dist/im/lark/merge-forward.js +7 -2
- package/dist/im/lark/merge-forward.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +7 -0
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/overview-card.d.ts +1 -2
- package/dist/im/lark/overview-card.d.ts.map +1 -1
- package/dist/im/lark/overview-card.js +1 -48
- package/dist/im/lark/overview-card.js.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.js +5 -5
- package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
- package/dist/im/lark/v3-blocked-card.d.ts +1 -0
- package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card.js +19 -2
- package/dist/im/lark/v3-blocked-card.js.map +1 -1
- package/dist/im/lark/v3-distillation-card-handler.d.ts +12 -0
- package/dist/im/lark/v3-distillation-card-handler.d.ts.map +1 -0
- package/dist/im/lark/v3-distillation-card-handler.js +107 -0
- package/dist/im/lark/v3-distillation-card-handler.js.map +1 -0
- package/dist/im/lark/v3-distillation-card.d.ts +42 -0
- package/dist/im/lark/v3-distillation-card.d.ts.map +1 -0
- package/dist/im/lark/v3-distillation-card.js +206 -0
- package/dist/im/lark/v3-distillation-card.js.map +1 -0
- package/dist/im/lark/v3-gate-card-handler.d.ts +1 -1
- package/dist/im/lark/v3-gate-card-handler.d.ts.map +1 -1
- package/dist/im/lark/v3-gate-card-handler.js +6 -5
- package/dist/im/lark/v3-gate-card-handler.js.map +1 -1
- package/dist/im/lark/v3-gate-card.d.ts +8 -1
- package/dist/im/lark/v3-gate-card.d.ts.map +1 -1
- package/dist/im/lark/v3-gate-card.js +38 -7
- package/dist/im/lark/v3-gate-card.js.map +1 -1
- package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +1 -1
- package/dist/im/lark/v3-loop-grant-card-handler.js +3 -4
- package/dist/im/lark/v3-loop-grant-card-handler.js.map +1 -1
- package/dist/im/lark/v3-loop-grant-card.js +1 -1
- package/dist/im/lark/v3-loop-grant-card.js.map +1 -1
- package/dist/im/lark/v3-progress-card-manager.d.ts +79 -0
- package/dist/im/lark/v3-progress-card-manager.d.ts.map +1 -0
- package/dist/im/lark/v3-progress-card-manager.js +444 -0
- package/dist/im/lark/v3-progress-card-manager.js.map +1 -0
- package/dist/im/lark/v3-progress-card.d.ts +26 -0
- package/dist/im/lark/v3-progress-card.d.ts.map +1 -0
- package/dist/im/lark/v3-progress-card.js +211 -0
- package/dist/im/lark/v3-progress-card.js.map +1 -0
- package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +1 -1
- package/dist/im/lark/v3-revisit-grant-card-handler.js +3 -4
- package/dist/im/lark/v3-revisit-grant-card-handler.js.map +1 -1
- package/dist/im/lark/v3-revisit-grant-card.js +1 -1
- package/dist/im/lark/v3-revisit-grant-card.js.map +1 -1
- package/dist/im/lark/v3-run-save-card-handler.d.ts +12 -0
- package/dist/im/lark/v3-run-save-card-handler.d.ts.map +1 -0
- package/dist/im/lark/v3-run-save-card-handler.js +160 -0
- package/dist/im/lark/v3-run-save-card-handler.js.map +1 -0
- package/dist/im/lark/v3-run-save-card.d.ts +38 -0
- package/dist/im/lark/v3-run-save-card.d.ts.map +1 -0
- package/dist/im/lark/v3-run-save-card.js +125 -0
- package/dist/im/lark/v3-run-save-card.js.map +1 -0
- package/dist/im/lark/v3-saved-workflow-command.d.ts +36 -0
- package/dist/im/lark/v3-saved-workflow-command.d.ts.map +1 -0
- package/dist/im/lark/v3-saved-workflow-command.js +186 -0
- package/dist/im/lark/v3-saved-workflow-command.js.map +1 -0
- package/dist/im/lark/v3-saved-workflow-handler.d.ts +89 -0
- package/dist/im/lark/v3-saved-workflow-handler.d.ts.map +1 -0
- package/dist/im/lark/v3-saved-workflow-handler.js +212 -0
- package/dist/im/lark/v3-saved-workflow-handler.js.map +1 -0
- package/dist/im/lark/workflow-slash-command.d.ts +7 -110
- package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
- package/dist/im/lark/workflow-slash-command.js +16 -230
- package/dist/im/lark/workflow-slash-command.js.map +1 -1
- package/dist/index-daemon.js +1 -1
- package/dist/index-daemon.js.map +1 -1
- package/dist/mir-runner.js +11 -15
- package/dist/mir-runner.js.map +1 -1
- package/dist/mira-runner.js +8 -12
- package/dist/mira-runner.js.map +1 -1
- package/dist/services/bridge-turn-queue.d.ts +29 -12
- package/dist/services/bridge-turn-queue.d.ts.map +1 -1
- package/dist/services/bridge-turn-queue.js +59 -23
- package/dist/services/bridge-turn-queue.js.map +1 -1
- package/dist/services/claude-transcript.d.ts +15 -0
- package/dist/services/claude-transcript.d.ts.map +1 -1
- package/dist/services/claude-transcript.js +24 -0
- package/dist/services/claude-transcript.js.map +1 -1
- package/dist/services/codex-bridge-queue.d.ts +13 -2
- package/dist/services/codex-bridge-queue.d.ts.map +1 -1
- package/dist/services/codex-bridge-queue.js +20 -3
- package/dist/services/codex-bridge-queue.js.map +1 -1
- package/dist/services/codex-transcript.d.ts +6 -0
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/grok-transcript.d.ts +3 -2
- package/dist/services/grok-transcript.d.ts.map +1 -1
- package/dist/services/grok-transcript.js +73 -22
- package/dist/services/grok-transcript.js.map +1 -1
- package/dist/services/hook-runner.d.ts.map +1 -1
- package/dist/services/hook-runner.js +26 -3
- package/dist/services/hook-runner.js.map +1 -1
- package/dist/services/schedule-store.d.ts +37 -0
- package/dist/services/schedule-store.d.ts.map +1 -1
- package/dist/services/schedule-store.js +259 -141
- package/dist/services/schedule-store.js.map +1 -1
- package/dist/services/send-policy.d.ts +50 -0
- package/dist/services/send-policy.d.ts.map +1 -1
- package/dist/services/send-policy.js +65 -0
- package/dist/services/send-policy.js.map +1 -1
- package/dist/services/session-lifecycle-hooks.d.ts.map +1 -1
- package/dist/services/session-lifecycle-hooks.js +12 -0
- package/dist/services/session-lifecycle-hooks.js.map +1 -1
- package/dist/services/traex-transcript.d.ts +11 -2
- package/dist/services/traex-transcript.d.ts.map +1 -1
- package/dist/services/traex-transcript.js +142 -8
- package/dist/services/traex-transcript.js.map +1 -1
- package/dist/services/trigger-types.d.ts +6 -1
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/services/turn-terminal-deduper.d.ts +14 -0
- package/dist/services/turn-terminal-deduper.d.ts.map +1 -0
- package/dist/services/turn-terminal-deduper.js +34 -0
- package/dist/services/turn-terminal-deduper.js.map +1 -0
- package/dist/services/vc-meeting-action-gate.d.ts +246 -0
- package/dist/services/vc-meeting-action-gate.d.ts.map +1 -0
- package/dist/services/vc-meeting-action-gate.js +756 -0
- package/dist/services/vc-meeting-action-gate.js.map +1 -0
- package/dist/services/vc-meeting-action-store.d.ts +222 -0
- package/dist/services/vc-meeting-action-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-action-store.js +806 -0
- package/dist/services/vc-meeting-action-store.js.map +1 -0
- package/dist/services/vc-meeting-consumer-isolation.d.ts +27 -0
- package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -0
- package/dist/services/vc-meeting-consumer-isolation.js +37 -0
- package/dist/services/vc-meeting-consumer-isolation.js.map +1 -0
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +72 -0
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -0
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js +343 -0
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -0
- package/dist/services/vc-meeting-consumer-profile-store.d.ts +39 -0
- package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-consumer-profile-store.js +190 -0
- package/dist/services/vc-meeting-consumer-profile-store.js.map +1 -0
- package/dist/services/vc-meeting-daemon-auth.d.ts +29 -0
- package/dist/services/vc-meeting-daemon-auth.d.ts.map +1 -0
- package/dist/services/vc-meeting-daemon-auth.js +117 -0
- package/dist/services/vc-meeting-daemon-auth.js.map +1 -0
- package/dist/services/vc-meeting-delivery-feed.d.ts +52 -0
- package/dist/services/vc-meeting-delivery-feed.d.ts.map +1 -0
- package/dist/services/vc-meeting-delivery-feed.js +231 -0
- package/dist/services/vc-meeting-delivery-feed.js.map +1 -0
- package/dist/services/vc-meeting-delivery-hub-store.d.ts +213 -0
- package/dist/services/vc-meeting-delivery-hub-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-delivery-hub-store.js +1230 -0
- package/dist/services/vc-meeting-delivery-hub-store.js.map +1 -0
- package/dist/services/vc-meeting-delivery-protocol.d.ts +159 -0
- package/dist/services/vc-meeting-delivery-protocol.d.ts.map +1 -0
- package/dist/services/vc-meeting-delivery-protocol.js +443 -0
- package/dist/services/vc-meeting-delivery-protocol.js.map +1 -0
- package/dist/services/vc-meeting-delivery-receiver.d.ts +80 -0
- package/dist/services/vc-meeting-delivery-receiver.d.ts.map +1 -0
- package/dist/services/vc-meeting-delivery-receiver.js +543 -0
- package/dist/services/vc-meeting-delivery-receiver.js.map +1 -0
- package/dist/services/vc-meeting-delivery-store.d.ts +339 -0
- package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-delivery-store.js +1024 -0
- package/dist/services/vc-meeting-delivery-store.js.map +1 -0
- package/dist/services/vc-meeting-feed-metadata-store.d.ts +58 -0
- package/dist/services/vc-meeting-feed-metadata-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-feed-metadata-store.js +356 -0
- package/dist/services/vc-meeting-feed-metadata-store.js.map +1 -0
- package/dist/services/vc-meeting-im-reply.d.ts +55 -0
- package/dist/services/vc-meeting-im-reply.d.ts.map +1 -0
- package/dist/services/vc-meeting-im-reply.js +279 -0
- package/dist/services/vc-meeting-im-reply.js.map +1 -0
- package/dist/services/vc-meeting-im-routing.d.ts +131 -0
- package/dist/services/vc-meeting-im-routing.d.ts.map +1 -0
- package/dist/services/vc-meeting-im-routing.js +449 -0
- package/dist/services/vc-meeting-im-routing.js.map +1 -0
- package/dist/services/vc-meeting-listener-message-store.d.ts +23 -0
- package/dist/services/vc-meeting-listener-message-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-listener-message-store.js +142 -0
- package/dist/services/vc-meeting-listener-message-store.js.map +1 -0
- package/dist/services/vc-meeting-member-policy.d.ts +37 -0
- package/dist/services/vc-meeting-member-policy.d.ts.map +1 -0
- package/dist/services/vc-meeting-member-policy.js +102 -0
- package/dist/services/vc-meeting-member-policy.js.map +1 -0
- package/dist/services/vc-meeting-profile-instructions.d.ts +22 -0
- package/dist/services/vc-meeting-profile-instructions.d.ts.map +1 -0
- package/dist/services/vc-meeting-profile-instructions.js +64 -0
- package/dist/services/vc-meeting-profile-instructions.js.map +1 -0
- package/dist/services/vc-meeting-runtime-store.d.ts +63 -0
- package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-runtime-store.js +605 -116
- package/dist/services/vc-meeting-runtime-store.js.map +1 -1
- package/dist/services/vc-meeting-send-policy.d.ts +89 -0
- package/dist/services/vc-meeting-send-policy.d.ts.map +1 -0
- package/dist/services/vc-meeting-send-policy.js +150 -0
- package/dist/services/vc-meeting-send-policy.js.map +1 -0
- package/dist/services/vc-meeting-terminal-reconciler.d.ts +93 -0
- package/dist/services/vc-meeting-terminal-reconciler.d.ts.map +1 -0
- package/dist/services/vc-meeting-terminal-reconciler.js +198 -0
- package/dist/services/vc-meeting-terminal-reconciler.js.map +1 -0
- package/dist/setup/open-platform-automation.d.ts +2 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +1 -0
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/open-platform-outcome.d.ts +50 -0
- package/dist/setup/open-platform-outcome.d.ts.map +1 -0
- package/dist/setup/open-platform-outcome.js +56 -0
- package/dist/setup/open-platform-outcome.js.map +1 -0
- package/dist/setup/setup-args.d.ts +7 -2
- package/dist/setup/setup-args.d.ts.map +1 -1
- package/dist/setup/setup-args.js +21 -5
- package/dist/setup/setup-args.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +66 -54
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/injection-mode.d.ts +5 -4
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +19 -10
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/types.d.ts +187 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/canonical-input-hash.d.ts +5 -0
- package/dist/utils/canonical-input-hash.d.ts.map +1 -0
- package/dist/utils/canonical-input-hash.js +43 -0
- package/dist/utils/canonical-input-hash.js.map +1 -0
- package/dist/utils/canonical-json.d.ts +10 -0
- package/dist/utils/canonical-json.d.ts.map +1 -0
- package/dist/utils/canonical-json.js +23 -0
- package/dist/utils/canonical-json.js.map +1 -0
- 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 +8 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/daemon-discovery.d.ts +4 -0
- package/dist/utils/daemon-discovery.d.ts.map +1 -1
- package/dist/utils/daemon-discovery.js +12 -6
- package/dist/utils/daemon-discovery.js.map +1 -1
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +696 -102
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/utils/fs-durability.d.ts +20 -0
- package/dist/utils/fs-durability.d.ts.map +1 -0
- package/dist/utils/fs-durability.js +84 -0
- package/dist/utils/fs-durability.js.map +1 -0
- package/dist/utils/global-install.d.ts +5 -2
- package/dist/utils/global-install.d.ts.map +1 -1
- package/dist/utils/global-install.js +22 -4
- package/dist/utils/global-install.js.map +1 -1
- package/dist/utils/herdr-web-history.d.ts +12 -0
- package/dist/utils/herdr-web-history.d.ts.map +1 -0
- package/dist/utils/herdr-web-history.js +74 -0
- package/dist/utils/herdr-web-history.js.map +1 -0
- package/dist/utils/herdr-web-terminal-binding.d.ts +39 -0
- package/dist/utils/herdr-web-terminal-binding.d.ts.map +1 -0
- package/dist/utils/herdr-web-terminal-binding.js +56 -0
- package/dist/utils/herdr-web-terminal-binding.js.map +1 -0
- package/dist/utils/pending-input-queue.d.ts +30 -1
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js +45 -5
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/vc-agent/cards.d.ts +49 -4
- package/dist/vc-agent/cards.d.ts.map +1 -1
- package/dist/vc-agent/cards.js +460 -70
- package/dist/vc-agent/cards.js.map +1 -1
- package/dist/vc-agent/polling-source.d.ts +6 -1
- package/dist/vc-agent/polling-source.d.ts.map +1 -1
- package/dist/vc-agent/polling-source.js +17 -4
- package/dist/vc-agent/polling-source.js.map +1 -1
- package/dist/worker.js +1333 -283
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +28 -35
- package/dist/workflows/definition.d.ts.map +1 -1
- package/dist/workflows/definition.js +7 -24
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +28 -28
- package/dist/workflows/events/replay.d.ts +5 -0
- package/dist/workflows/events/replay.d.ts.map +1 -1
- package/dist/workflows/events/replay.js +6 -1
- package/dist/workflows/events/replay.js.map +1 -1
- package/dist/workflows/events/schema.d.ts +663 -663
- package/dist/workflows/events/schema.d.ts.map +1 -1
- package/dist/workflows/events/schema.js +1 -4
- package/dist/workflows/events/schema.js.map +1 -1
- package/dist/workflows/hostExecutors/botmux-schedule.d.ts +5 -4
- package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/botmux-schedule.js +80 -35
- package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -1
- package/dist/workflows/hostExecutors/feishu-im.d.ts +3 -3
- package/dist/workflows/hostExecutors/feishu-im.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/feishu-im.js +3 -3
- package/dist/workflows/hostExecutors/feishu-im.js.map +1 -1
- package/dist/workflows/hostExecutors/feishu-reply.d.ts +1 -1
- package/dist/workflows/hostExecutors/feishu-reply.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/feishu-reply.js +1 -1
- package/dist/workflows/hostExecutors/feishu-reply.js.map +1 -1
- package/dist/workflows/hostExecutors/feishu-send.d.ts +1 -1
- package/dist/workflows/hostExecutors/feishu-send.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/feishu-send.js +1 -1
- package/dist/workflows/hostExecutors/feishu-send.js.map +1 -1
- package/dist/workflows/hostExecutors/index.d.ts +0 -1
- package/dist/workflows/hostExecutors/index.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/index.js +0 -1
- package/dist/workflows/hostExecutors/index.js.map +1 -1
- package/dist/workflows/hostExecutors/registry.d.ts +1 -1
- package/dist/workflows/hostExecutors/registry.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/types.d.ts +21 -29
- package/dist/workflows/hostExecutors/types.d.ts.map +1 -1
- package/dist/workflows/migration/v2-definition-paths.d.ts +3 -0
- package/dist/workflows/migration/v2-definition-paths.d.ts.map +1 -0
- package/dist/workflows/migration/v2-definition-paths.js +10 -0
- package/dist/workflows/migration/v2-definition-paths.js.map +1 -0
- package/dist/workflows/migration/v2-ledger.d.ts +138 -0
- package/dist/workflows/migration/v2-ledger.d.ts.map +1 -0
- package/dist/workflows/migration/v2-ledger.js +599 -0
- package/dist/workflows/migration/v2-ledger.js.map +1 -0
- package/dist/workflows/migration/v2-migration-service.d.ts +40 -0
- package/dist/workflows/migration/v2-migration-service.d.ts.map +1 -0
- package/dist/workflows/migration/v2-migration-service.js +454 -0
- package/dist/workflows/migration/v2-migration-service.js.map +1 -0
- package/dist/workflows/migration/v2-read-only-ids.d.ts +7 -0
- package/dist/workflows/migration/v2-read-only-ids.d.ts.map +1 -0
- package/dist/workflows/migration/v2-read-only-ids.js +9 -0
- package/dist/workflows/migration/v2-read-only-ids.js.map +1 -0
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +976 -0
- package/dist/workflows/migration/v2-run-archive-schema.d.ts.map +1 -0
- package/dist/workflows/migration/v2-run-archive-schema.js +113 -0
- package/dist/workflows/migration/v2-run-archive-schema.js.map +1 -0
- package/dist/workflows/migration/v2-run-archive.d.ts +92 -0
- package/dist/workflows/migration/v2-run-archive.d.ts.map +1 -0
- package/dist/workflows/migration/v2-run-archive.js +1220 -0
- package/dist/workflows/migration/v2-run-archive.js.map +1 -0
- package/dist/workflows/migration/v2-scanner.d.ts +22 -0
- package/dist/workflows/migration/v2-scanner.d.ts.map +1 -0
- package/dist/workflows/migration/v2-scanner.js +114 -0
- package/dist/workflows/migration/v2-scanner.js.map +1 -0
- package/dist/workflows/migration/v2-to-v3.d.ts +32 -0
- package/dist/workflows/migration/v2-to-v3.d.ts.map +1 -0
- package/dist/workflows/migration/v2-to-v3.js +494 -0
- package/dist/workflows/migration/v2-to-v3.js.map +1 -0
- package/dist/workflows/ops-projection.d.ts.map +1 -1
- package/dist/workflows/ops-projection.js +4 -3
- package/dist/workflows/ops-projection.js.map +1 -1
- package/dist/workflows/shared/idempotency-key.d.ts +19 -0
- package/dist/workflows/shared/idempotency-key.d.ts.map +1 -0
- package/dist/workflows/shared/idempotency-key.js +23 -0
- package/dist/workflows/shared/idempotency-key.js.map +1 -0
- package/dist/workflows/{params.d.ts → shared/params.d.ts} +42 -6
- package/dist/workflows/shared/params.d.ts.map +1 -0
- package/dist/workflows/{params.js → shared/params.js} +91 -4
- package/dist/workflows/shared/params.js.map +1 -0
- package/dist/workflows/shared/provider-reconciler.d.ts +47 -0
- package/dist/workflows/shared/provider-reconciler.d.ts.map +1 -0
- package/dist/workflows/shared/provider-reconciler.js +17 -0
- package/dist/workflows/shared/provider-reconciler.js.map +1 -0
- package/dist/workflows/{spawn-policy.d.ts → shared/sandbox-policy.d.ts} +2 -2
- package/dist/workflows/shared/sandbox-policy.d.ts.map +1 -0
- package/dist/workflows/{spawn-policy.js → shared/sandbox-policy.js} +1 -1
- package/dist/workflows/shared/sandbox-policy.js.map +1 -0
- package/dist/workflows/shared/worker-process.d.ts +29 -0
- package/dist/workflows/shared/worker-process.d.ts.map +1 -0
- package/dist/workflows/shared/worker-process.js +56 -0
- package/dist/workflows/shared/worker-process.js.map +1 -0
- package/dist/workflows/v3/architect.d.ts.map +1 -1
- package/dist/workflows/v3/architect.js +16 -4
- package/dist/workflows/v3/architect.js.map +1 -1
- package/dist/workflows/v3/attempt-ledger.d.ts +23 -0
- package/dist/workflows/v3/attempt-ledger.d.ts.map +1 -0
- package/dist/workflows/v3/attempt-ledger.js +74 -0
- package/dist/workflows/v3/attempt-ledger.js.map +1 -0
- package/dist/workflows/v3/bot-resolve.d.ts +19 -1
- package/dist/workflows/v3/bot-resolve.d.ts.map +1 -1
- package/dist/workflows/v3/bot-resolve.js +129 -3
- package/dist/workflows/v3/bot-resolve.js.map +1 -1
- package/dist/workflows/v3/cli-daemon-command-authority.d.ts +59 -0
- package/dist/workflows/v3/cli-daemon-command-authority.d.ts.map +1 -0
- package/dist/workflows/v3/cli-daemon-command-authority.js +175 -0
- package/dist/workflows/v3/cli-daemon-command-authority.js.map +1 -0
- package/dist/workflows/v3/cli-run.d.ts +27 -0
- package/dist/workflows/v3/cli-run.d.ts.map +1 -1
- package/dist/workflows/v3/cli-run.js +113 -29
- package/dist/workflows/v3/cli-run.js.map +1 -1
- package/dist/workflows/v3/contract.d.ts +16 -16
- package/dist/workflows/v3/contract.d.ts.map +1 -1
- package/dist/workflows/v3/contract.js +15 -11
- package/dist/workflows/v3/contract.js.map +1 -1
- package/dist/workflows/v3/daemon-ipc-auth.d.ts +113 -0
- package/dist/workflows/v3/daemon-ipc-auth.d.ts.map +1 -0
- package/dist/workflows/v3/daemon-ipc-auth.js +294 -0
- package/dist/workflows/v3/daemon-ipc-auth.js.map +1 -0
- package/dist/workflows/v3/daemon-ipc-body.d.ts +30 -0
- package/dist/workflows/v3/daemon-ipc-body.d.ts.map +1 -0
- package/dist/workflows/v3/daemon-ipc-body.js +65 -0
- package/dist/workflows/v3/daemon-ipc-body.js.map +1 -0
- package/dist/workflows/v3/daemon-ipc-client.d.ts +32 -0
- package/dist/workflows/v3/daemon-ipc-client.d.ts.map +1 -0
- package/dist/workflows/v3/daemon-ipc-client.js +74 -0
- package/dist/workflows/v3/daemon-ipc-client.js.map +1 -0
- package/dist/workflows/v3/daemon-run.d.ts +87 -2
- package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
- package/dist/workflows/v3/daemon-run.js +863 -68
- package/dist/workflows/v3/daemon-run.js.map +1 -1
- package/dist/workflows/v3/dag.d.ts +22 -8
- package/dist/workflows/v3/dag.d.ts.map +1 -1
- package/dist/workflows/v3/dag.js +214 -22
- package/dist/workflows/v3/dag.js.map +1 -1
- package/dist/workflows/v3/distillation-compiler.d.ts +36 -0
- package/dist/workflows/v3/distillation-compiler.d.ts.map +1 -0
- package/dist/workflows/v3/distillation-compiler.js +704 -0
- package/dist/workflows/v3/distillation-compiler.js.map +1 -0
- package/dist/workflows/v3/distillation-private-root.d.ts +10 -0
- package/dist/workflows/v3/distillation-private-root.d.ts.map +1 -0
- package/dist/workflows/v3/distillation-private-root.js +34 -0
- package/dist/workflows/v3/distillation-private-root.js.map +1 -0
- package/dist/workflows/v3/distillation-runner.d.ts +64 -0
- package/dist/workflows/v3/distillation-runner.d.ts.map +1 -0
- package/dist/workflows/v3/distillation-runner.js +1028 -0
- package/dist/workflows/v3/distillation-runner.js.map +1 -0
- package/dist/workflows/v3/distillation-schema.d.ts +63 -0
- package/dist/workflows/v3/distillation-schema.d.ts.map +1 -0
- package/dist/workflows/v3/distillation-schema.js +184 -0
- package/dist/workflows/v3/distillation-schema.js.map +1 -0
- package/dist/workflows/v3/distillation-service.d.ts +78 -0
- package/dist/workflows/v3/distillation-service.d.ts.map +1 -0
- package/dist/workflows/v3/distillation-service.js +416 -0
- package/dist/workflows/v3/distillation-service.js.map +1 -0
- package/dist/workflows/v3/distillation-source.d.ts +35 -0
- package/dist/workflows/v3/distillation-source.d.ts.map +1 -0
- package/dist/workflows/v3/distillation-source.js +118 -0
- package/dist/workflows/v3/distillation-source.js.map +1 -0
- package/dist/workflows/v3/distillation-store.d.ts +185 -0
- package/dist/workflows/v3/distillation-store.d.ts.map +1 -0
- package/dist/workflows/v3/distillation-store.js +1127 -0
- package/dist/workflows/v3/distillation-store.js.map +1 -0
- package/dist/workflows/v3/drive-lease.d.ts +7 -0
- package/dist/workflows/v3/drive-lease.d.ts.map +1 -0
- package/dist/workflows/v3/drive-lease.js +10 -0
- package/dist/workflows/v3/drive-lease.js.map +1 -0
- package/dist/workflows/v3/ephemeral-pool.d.ts +1 -1
- package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
- package/dist/workflows/v3/ephemeral-pool.js +222 -37
- package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
- package/dist/workflows/v3/grill-state.d.ts +18 -3
- package/dist/workflows/v3/grill-state.d.ts.map +1 -1
- package/dist/workflows/v3/grill-state.js +22 -5
- package/dist/workflows/v3/grill-state.js.map +1 -1
- package/dist/workflows/v3/host-bindings.d.ts +40 -0
- package/dist/workflows/v3/host-bindings.d.ts.map +1 -0
- package/dist/workflows/v3/host-bindings.js +272 -0
- package/dist/workflows/v3/host-bindings.js.map +1 -0
- package/dist/workflows/v3/host-effect-ledger.d.ts +22 -0
- package/dist/workflows/v3/host-effect-ledger.d.ts.map +1 -0
- package/dist/workflows/v3/host-effect-ledger.js +110 -0
- package/dist/workflows/v3/host-effect-ledger.js.map +1 -0
- package/dist/workflows/v3/host-execution.d.ts +142 -0
- package/dist/workflows/v3/host-execution.d.ts.map +1 -0
- package/dist/workflows/v3/host-execution.js +424 -0
- package/dist/workflows/v3/host-execution.js.map +1 -0
- package/dist/workflows/v3/host.d.ts +46 -10
- package/dist/workflows/v3/host.d.ts.map +1 -1
- package/dist/workflows/v3/host.js +419 -140
- package/dist/workflows/v3/host.js.map +1 -1
- package/dist/workflows/v3/human-gate.d.ts +19 -1
- package/dist/workflows/v3/human-gate.d.ts.map +1 -1
- package/dist/workflows/v3/human-gate.js +145 -19
- package/dist/workflows/v3/human-gate.js.map +1 -1
- package/dist/workflows/v3/journal.d.ts +125 -7
- package/dist/workflows/v3/journal.d.ts.map +1 -1
- package/dist/workflows/v3/journal.js +154 -38
- package/dist/workflows/v3/journal.js.map +1 -1
- package/dist/workflows/v3/library-materialize.d.ts +88 -0
- package/dist/workflows/v3/library-materialize.d.ts.map +1 -0
- package/dist/workflows/v3/library-materialize.js +294 -0
- package/dist/workflows/v3/library-materialize.js.map +1 -0
- package/dist/workflows/v3/library-schema.d.ts +138 -0
- package/dist/workflows/v3/library-schema.d.ts.map +1 -0
- package/dist/workflows/v3/library-schema.js +573 -0
- package/dist/workflows/v3/library-schema.js.map +1 -0
- package/dist/workflows/v3/library-service.d.ts +126 -0
- package/dist/workflows/v3/library-service.d.ts.map +1 -0
- package/dist/workflows/v3/library-service.js +542 -0
- package/dist/workflows/v3/library-service.js.map +1 -0
- package/dist/workflows/v3/library-store.d.ts +124 -0
- package/dist/workflows/v3/library-store.d.ts.map +1 -0
- package/dist/workflows/v3/library-store.js +665 -0
- package/dist/workflows/v3/library-store.js.map +1 -0
- package/dist/workflows/v3/orchestrator.d.ts +9 -1
- package/dist/workflows/v3/orchestrator.d.ts.map +1 -1
- package/dist/workflows/v3/orchestrator.js +2 -1
- package/dist/workflows/v3/orchestrator.js.map +1 -1
- package/dist/workflows/v3/progress-projection.d.ts +99 -0
- package/dist/workflows/v3/progress-projection.d.ts.map +1 -0
- package/dist/workflows/v3/progress-projection.js +197 -0
- package/dist/workflows/v3/progress-projection.js.map +1 -0
- package/dist/workflows/v3/run-envelope.d.ts +1279 -0
- package/dist/workflows/v3/run-envelope.d.ts.map +1 -0
- package/dist/workflows/v3/run-envelope.js +681 -0
- package/dist/workflows/v3/run-envelope.js.map +1 -0
- package/dist/workflows/v3/runtime.d.ts +39 -7
- package/dist/workflows/v3/runtime.d.ts.map +1 -1
- package/dist/workflows/v3/runtime.js +1992 -100
- package/dist/workflows/v3/runtime.js.map +1 -1
- package/dist/workflows/v3/session-relay-client.d.ts +61 -0
- package/dist/workflows/v3/session-relay-client.d.ts.map +1 -0
- package/dist/workflows/v3/session-relay-client.js +92 -0
- package/dist/workflows/v3/session-relay-client.js.map +1 -0
- package/dist/workflows/v3/session-relay.d.ts +66 -0
- package/dist/workflows/v3/session-relay.d.ts.map +1 -0
- package/dist/workflows/v3/session-relay.js +157 -0
- package/dist/workflows/v3/session-relay.js.map +1 -0
- package/dist/workflows/v3/start-intent.d.ts +8 -0
- package/dist/workflows/v3/start-intent.d.ts.map +1 -0
- package/dist/workflows/v3/start-intent.js +34 -0
- package/dist/workflows/v3/start-intent.js.map +1 -0
- package/dist/workflows/v3/state.d.ts +11 -2
- package/dist/workflows/v3/state.d.ts.map +1 -1
- package/dist/workflows/v3/state.js +182 -10
- package/dist/workflows/v3/state.js.map +1 -1
- package/dist/workflows/v3/template-bindings.d.ts +22 -0
- package/dist/workflows/v3/template-bindings.d.ts.map +1 -0
- package/dist/workflows/v3/template-bindings.js +204 -0
- package/dist/workflows/v3/template-bindings.js.map +1 -0
- package/dist/workflows/v3/worker-fence.d.ts +158 -0
- package/dist/workflows/v3/worker-fence.d.ts.map +1 -0
- package/dist/workflows/v3/worker-fence.js +685 -0
- package/dist/workflows/v3/worker-fence.js.map +1 -0
- package/package.json +3 -2
- package/dist/core/dashboard-command/workflows.d.ts +0 -20
- package/dist/core/dashboard-command/workflows.d.ts.map +0 -1
- package/dist/core/dashboard-command/workflows.js +0 -45
- package/dist/core/dashboard-command/workflows.js.map +0 -1
- package/dist/dashboard/web/legacy-workflow-link.d.ts +0 -2
- package/dist/dashboard/web/legacy-workflow-link.d.ts.map +0 -1
- package/dist/dashboard/web/legacy-workflow-link.js +0 -12
- package/dist/dashboard/web/legacy-workflow-link.js.map +0 -1
- package/dist/dashboard/web/legacy-workflow-page.d.ts +0 -3
- package/dist/dashboard/web/legacy-workflow-page.d.ts.map +0 -1
- package/dist/dashboard/web/legacy-workflow-page.js +0 -717
- package/dist/dashboard/web/legacy-workflow-page.js.map +0 -1
- package/dist/dashboard/web/workflow-version-switch.d.ts +0 -8
- package/dist/dashboard/web/workflow-version-switch.d.ts.map +0 -1
- package/dist/dashboard/web/workflow-version-switch.js +0 -9
- package/dist/dashboard/web/workflow-version-switch.js.map +0 -1
- package/dist/dashboard/web/workflows.d.ts +0 -273
- package/dist/dashboard/web/workflows.d.ts.map +0 -1
- package/dist/dashboard/web/workflows.js +0 -436
- package/dist/dashboard/web/workflows.js.map +0 -1
- package/dist/dashboard/workflow-api.d.ts +0 -30
- package/dist/dashboard/workflow-api.d.ts.map +0 -1
- package/dist/dashboard/workflow-api.js +0 -397
- package/dist/dashboard/workflow-api.js.map +0 -1
- package/dist/dashboard/workflow-card-model.d.ts +0 -127
- package/dist/dashboard/workflow-card-model.d.ts.map +0 -1
- package/dist/dashboard/workflow-card-model.js +0 -186
- package/dist/dashboard/workflow-card-model.js.map +0 -1
- package/dist/dashboard/workflows-action-helpers.d.ts +0 -105
- package/dist/dashboard/workflows-action-helpers.d.ts.map +0 -1
- package/dist/dashboard/workflows-action-helpers.js +0 -196
- package/dist/dashboard/workflows-action-helpers.js.map +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-7T7DPOV6.js +0 -4
- package/dist/dashboard-web/chunks/chunk-IGXYYRYJ.js +0 -1
- package/dist/dashboard-web/chunks/chunk-ISOD7VDX.js +0 -1
- package/dist/dashboard-web/chunks/chunk-PNK3HQBI.js +0 -37
- package/dist/dashboard-web/chunks/chunk-SRIE4MLQ.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-UQ4QBE45.js +0 -1
- package/dist/dashboard-web/chunks/legacy-workflow-page-QMC7OZXH.js +0 -2
- package/dist/dashboard-web/chunks/sessions-page-NNZIDHZM.js +0 -3
- package/dist/dashboard-web/chunks/settings-page-LJIXX5LQ.js +0 -2
- package/dist/dashboard-web/chunks/v3-page-YLYVHGKD.js +0 -94
- package/dist/dashboard-web/terminal-replay.html +0 -227
- package/dist/im/lark/workflow-card-handler.d.ts +0 -51
- package/dist/im/lark/workflow-card-handler.d.ts.map +0 -1
- package/dist/im/lark/workflow-card-handler.js +0 -163
- package/dist/im/lark/workflow-card-handler.js.map +0 -1
- package/dist/im/lark/workflow-cards.d.ts +0 -47
- package/dist/im/lark/workflow-cards.d.ts.map +0 -1
- package/dist/im/lark/workflow-cards.js +0 -231
- package/dist/im/lark/workflow-cards.js.map +0 -1
- package/dist/im/lark/workflow-progress-card.d.ts +0 -81
- package/dist/im/lark/workflow-progress-card.d.ts.map +0 -1
- package/dist/im/lark/workflow-progress-card.js +0 -336
- package/dist/im/lark/workflow-progress-card.js.map +0 -1
- package/dist/im/lark/workflows-card.d.ts +0 -102
- package/dist/im/lark/workflows-card.d.ts.map +0 -1
- package/dist/im/lark/workflows-card.js +0 -737
- package/dist/im/lark/workflows-card.js.map +0 -1
- package/dist/workflows/attempt-resume.d.ts +0 -119
- package/dist/workflows/attempt-resume.d.ts.map +0 -1
- package/dist/workflows/attempt-resume.js +0 -392
- package/dist/workflows/attempt-resume.js.map +0 -1
- package/dist/workflows/blob.d.ts +0 -27
- package/dist/workflows/blob.d.ts.map +0 -1
- package/dist/workflows/blob.js +0 -40
- package/dist/workflows/blob.js.map +0 -1
- package/dist/workflows/cancel-run.d.ts +0 -45
- package/dist/workflows/cancel-run.d.ts.map +0 -1
- package/dist/workflows/cancel-run.js +0 -99
- package/dist/workflows/cancel-run.js.map +0 -1
- package/dist/workflows/cancel.d.ts +0 -111
- package/dist/workflows/cancel.d.ts.map +0 -1
- package/dist/workflows/cancel.js +0 -120
- package/dist/workflows/cancel.js.map +0 -1
- package/dist/workflows/catalog.d.ts +0 -60
- package/dist/workflows/catalog.d.ts.map +0 -1
- package/dist/workflows/catalog.js +0 -119
- package/dist/workflows/catalog.js.map +0 -1
- package/dist/workflows/cold-attach.d.ts +0 -30
- package/dist/workflows/cold-attach.d.ts.map +0 -1
- package/dist/workflows/cold-attach.js +0 -40
- package/dist/workflows/cold-attach.js.map +0 -1
- package/dist/workflows/cold-scan.d.ts +0 -21
- package/dist/workflows/cold-scan.d.ts.map +0 -1
- package/dist/workflows/cold-scan.js +0 -70
- package/dist/workflows/cold-scan.js.map +0 -1
- package/dist/workflows/daemon-spawn.d.ts +0 -119
- package/dist/workflows/daemon-spawn.d.ts.map +0 -1
- package/dist/workflows/daemon-spawn.js +0 -564
- package/dist/workflows/daemon-spawn.js.map +0 -1
- package/dist/workflows/effect-input.d.ts +0 -4
- package/dist/workflows/effect-input.d.ts.map +0 -1
- package/dist/workflows/effect-input.js +0 -19
- package/dist/workflows/effect-input.js.map +0 -1
- package/dist/workflows/events/append.d.ts +0 -77
- package/dist/workflows/events/append.d.ts.map +0 -1
- package/dist/workflows/events/append.js +0 -214
- package/dist/workflows/events/append.js.map +0 -1
- package/dist/workflows/events/idempotency.d.ts +0 -77
- package/dist/workflows/events/idempotency.d.ts.map +0 -1
- package/dist/workflows/events/idempotency.js +0 -116
- package/dist/workflows/events/idempotency.js.map +0 -1
- package/dist/workflows/events/index.d.ts +0 -7
- package/dist/workflows/events/index.d.ts.map +0 -1
- package/dist/workflows/events/index.js +0 -7
- package/dist/workflows/events/index.js.map +0 -1
- package/dist/workflows/fanout.d.ts +0 -36
- package/dist/workflows/fanout.d.ts.map +0 -1
- package/dist/workflows/fanout.js +0 -115
- package/dist/workflows/fanout.js.map +0 -1
- package/dist/workflows/hostExecutors/protocol.d.ts +0 -42
- package/dist/workflows/hostExecutors/protocol.d.ts.map +0 -1
- package/dist/workflows/hostExecutors/protocol.js +0 -181
- package/dist/workflows/hostExecutors/protocol.js.map +0 -1
- package/dist/workflows/loader.d.ts +0 -30
- package/dist/workflows/loader.d.ts.map +0 -1
- package/dist/workflows/loader.js +0 -84
- package/dist/workflows/loader.js.map +0 -1
- package/dist/workflows/loop.d.ts +0 -50
- package/dist/workflows/loop.d.ts.map +0 -1
- package/dist/workflows/loop.js +0 -408
- package/dist/workflows/loop.js.map +0 -1
- package/dist/workflows/orchestrator.d.ts +0 -171
- package/dist/workflows/orchestrator.d.ts.map +0 -1
- package/dist/workflows/orchestrator.js +0 -609
- package/dist/workflows/orchestrator.js.map +0 -1
- package/dist/workflows/output-binding.d.ts +0 -77
- package/dist/workflows/output-binding.d.ts.map +0 -1
- package/dist/workflows/output-binding.js +0 -329
- package/dist/workflows/output-binding.js.map +0 -1
- package/dist/workflows/params.d.ts.map +0 -1
- package/dist/workflows/params.js.map +0 -1
- package/dist/workflows/resume.d.ts +0 -263
- package/dist/workflows/resume.d.ts.map +0 -1
- package/dist/workflows/resume.js +0 -808
- package/dist/workflows/resume.js.map +0 -1
- package/dist/workflows/run-id.d.ts +0 -2
- package/dist/workflows/run-id.d.ts.map +0 -1
- package/dist/workflows/run-id.js +0 -7
- package/dist/workflows/run-id.js.map +0 -1
- package/dist/workflows/run-init.d.ts +0 -48
- package/dist/workflows/run-init.d.ts.map +0 -1
- package/dist/workflows/run-init.js +0 -100
- package/dist/workflows/run-init.js.map +0 -1
- package/dist/workflows/runs-dir.d.ts +0 -4
- package/dist/workflows/runs-dir.d.ts.map +0 -1
- package/dist/workflows/runs-dir.js +0 -15
- package/dist/workflows/runs-dir.js.map +0 -1
- package/dist/workflows/runtime.d.ts +0 -215
- package/dist/workflows/runtime.d.ts.map +0 -1
- package/dist/workflows/runtime.js +0 -630
- package/dist/workflows/runtime.js.map +0 -1
- package/dist/workflows/spawn-bot.d.ts +0 -165
- package/dist/workflows/spawn-bot.d.ts.map +0 -1
- package/dist/workflows/spawn-bot.js +0 -215
- package/dist/workflows/spawn-bot.js.map +0 -1
- package/dist/workflows/spawn-policy.d.ts.map +0 -1
- package/dist/workflows/spawn-policy.js.map +0 -1
- package/dist/workflows/system.d.ts +0 -49
- package/dist/workflows/system.d.ts.map +0 -1
- package/dist/workflows/system.js +0 -48
- package/dist/workflows/system.js.map +0 -1
- package/dist/workflows/trigger-from-envelope.d.ts +0 -13
- package/dist/workflows/trigger-from-envelope.d.ts.map +0 -1
- package/dist/workflows/trigger-from-envelope.js +0 -68
- package/dist/workflows/trigger-from-envelope.js.map +0 -1
- package/dist/workflows/trigger-run.d.ts +0 -70
- package/dist/workflows/trigger-run.d.ts.map +0 -1
- package/dist/workflows/trigger-run.js +0 -88
- package/dist/workflows/trigger-run.js.map +0 -1
- package/dist/workflows/wait.d.ts +0 -141
- package/dist/workflows/wait.d.ts.map +0 -1
- package/dist/workflows/wait.js +0 -203
- package/dist/workflows/wait.js.map +0 -1
|
@@ -9,10 +9,12 @@ export declare function mountOverlay(opts: {
|
|
|
9
9
|
work: string;
|
|
10
10
|
merged: string;
|
|
11
11
|
}): boolean;
|
|
12
|
-
/** True iff `path` is currently a mountpoint (host-side overlay still mounted).
|
|
12
|
+
/** True iff `path` is currently a mountpoint (host-side overlay still mounted).
|
|
13
|
+
* Read mountinfo instead of stat'ing the path: a broken recursive FUSE mount can
|
|
14
|
+
* leave any path-based `mountpoint` probe blocked in uninterruptible I/O. */
|
|
13
15
|
export declare function isMounted(path: string): boolean;
|
|
14
|
-
/** Unmount an overlay merged dir. Best-effort: lazy
|
|
15
|
-
*
|
|
16
|
+
/** Unmount an overlay merged dir. Best-effort: lazy detach if a normal unmount
|
|
17
|
+
* fails because a still-draining bwrap child holds the FUSE mount busy. */
|
|
16
18
|
export declare function unmountOverlay(merged: string): void;
|
|
17
19
|
export interface SandboxPlan {
|
|
18
20
|
/** In-sandbox path the project is bound at — equals the original workingDir the
|
|
@@ -42,6 +44,16 @@ export interface SandboxPlan {
|
|
|
42
44
|
* (daemon-produced, e.g. skill plugin dirs) — bound AFTER the privacy masks so
|
|
43
45
|
* a broad hideDir can't break skill delivery. */
|
|
44
46
|
readonlyRoots?: string[];
|
|
47
|
+
/** Daemon-generated private roots re-bound writable AFTER credential masks.
|
|
48
|
+
* Used for the current bot's isolated CLI home only; never accepts user
|
|
49
|
+
* config. */
|
|
50
|
+
trustedWritableRoots?: string[];
|
|
51
|
+
/** Crown-jewel masks emitted after trusted writable carve-outs. */
|
|
52
|
+
finalHideDirs?: string[];
|
|
53
|
+
finalHideFiles?: {
|
|
54
|
+
path: string;
|
|
55
|
+
empty: string;
|
|
56
|
+
}[];
|
|
45
57
|
/** User-configured read-only inputs (per-bot sandboxReadonlyPaths). Bound BEFORE
|
|
46
58
|
* the privacy masks so hidePaths always win over them — an entry overlapping a
|
|
47
59
|
* masked path must never re-expose the real content. */
|
|
@@ -95,6 +107,19 @@ export declare function reexposeRunBinArgs(binPaths: (string | undefined)[]): st
|
|
|
95
107
|
* canonical targets so the mount point always exists and $HOME resolves even
|
|
96
108
|
* when the symlink's parent is masked inside the sandbox. */
|
|
97
109
|
export declare function resolveSandboxMountPath(p: string): string;
|
|
110
|
+
export interface SandboxOverlayPaths {
|
|
111
|
+
sessionRoot: string;
|
|
112
|
+
runtimeRoot: string;
|
|
113
|
+
projectMerged: string;
|
|
114
|
+
homeMerged: string;
|
|
115
|
+
legacyProjectMerged: string;
|
|
116
|
+
legacyHomeMerged: string;
|
|
117
|
+
}
|
|
118
|
+
/** Host-side overlay mountpoints must not live below HOME, because HOME is the
|
|
119
|
+
* lower layer of the home overlay. The old layout did exactly that and allowed
|
|
120
|
+
* fuse-overlayfs to recursively expose its own mountpoint. Keep the legacy
|
|
121
|
+
* paths here only so upgrades can tear down pre-fix sessions safely. */
|
|
122
|
+
export declare function sandboxOverlayPaths(dataDir: string, sessionId: string): SandboxOverlayPaths;
|
|
98
123
|
/**
|
|
99
124
|
* Resolve user-configured sandboxReadonlyPaths: tilde-expand, drop non-existent
|
|
100
125
|
* entries, and REJECT entries that (after resolving symlinks + normalizing) are
|
|
@@ -144,6 +169,11 @@ export interface SandboxSpawn {
|
|
|
144
169
|
* canonicalized dataDir under a symlink home would escape home-upper via `..` —
|
|
145
170
|
* fall back to the canonical base so it can't. */
|
|
146
171
|
export declare function sandboxedClaudeDataDir(sessionId: string, realDataDir: string): string;
|
|
172
|
+
/** Credential roots that must never be readable inside the file sandbox.
|
|
173
|
+
* Relay mode is the only credentialed send path; otherwise an agent could
|
|
174
|
+
* unset BOTMUX_SEND_RELAY and execute an absolute botmux binary against the
|
|
175
|
+
* real bots.json/send-cred files exposed by the HOME overlay lowerdir. */
|
|
176
|
+
export declare function sandboxCredentialHidePaths(home: string, botmuxHome?: string): string[];
|
|
147
177
|
/**
|
|
148
178
|
* Whether the LOCAL bwrap file sandbox applies to this spawn at all.
|
|
149
179
|
* - macOS enforces `sandbox: true` via the Seatbelt write-sandbox instead.
|
|
@@ -159,9 +189,9 @@ export declare function localSandboxApplies(platform: NodeJS.Platform, backendTy
|
|
|
159
189
|
* treats null as a hard error and does NOT silently run unsandboxed).
|
|
160
190
|
*
|
|
161
191
|
* Layout under <dataDir>/sandboxes/<sessionId>/: outbox, shimbin, proj-upper
|
|
162
|
-
* (the landable changeset), proj-work
|
|
163
|
-
* overlay
|
|
164
|
-
*
|
|
192
|
+
* (the landable changeset), and proj-work. Host-only merged mountpoints plus the
|
|
193
|
+
* HOME overlay upper/work live under /var/tmp/botmux-sbx/<sessionId>/ so none of
|
|
194
|
+
* the FUSE mountpoints is nested below the HOME lower layer.
|
|
165
195
|
*/
|
|
166
196
|
export declare function prepareSandbox(opts: {
|
|
167
197
|
/** Whether the sandbox is on for THIS session (per-bot BotConfig.sandbox OR
|
|
@@ -187,6 +217,10 @@ export declare function prepareSandbox(opts: {
|
|
|
187
217
|
/** Runtime-generated roots that should be visible read-only inside bwrap.
|
|
188
218
|
* Trusted (daemon-produced) — bound after the privacy masks. */
|
|
189
219
|
readonlyRoots?: readonly string[];
|
|
220
|
+
/** Daemon-derived private roots to re-open writable after mandatory masks. */
|
|
221
|
+
trustedWritablePaths?: readonly string[];
|
|
222
|
+
/** Credential paths to re-mask after trusted writable carve-outs. */
|
|
223
|
+
finalHidePaths?: readonly string[];
|
|
190
224
|
/** User-configured extra read-only inputs (per-bot sandboxReadonlyPaths).
|
|
191
225
|
* Bound before the privacy masks (masks win) and rejected when they would
|
|
192
226
|
* shadow the home/project overlay roots. */
|
|
@@ -243,6 +277,9 @@ export interface RelayRequest {
|
|
|
243
277
|
videos?: unknown;
|
|
244
278
|
videoCovers?: unknown;
|
|
245
279
|
flags?: unknown;
|
|
280
|
+
originTurnId?: unknown;
|
|
281
|
+
originDispatchAttempt?: unknown;
|
|
282
|
+
originCapability?: unknown;
|
|
246
283
|
}
|
|
247
284
|
export interface ValidatedRelay {
|
|
248
285
|
contentName: string;
|
|
@@ -252,6 +289,9 @@ export interface ValidatedRelay {
|
|
|
252
289
|
videoNames: string[];
|
|
253
290
|
videoCoverNames: string[];
|
|
254
291
|
flags: string[];
|
|
292
|
+
originTurnId?: string;
|
|
293
|
+
originDispatchAttempt?: number;
|
|
294
|
+
originCapability?: string;
|
|
255
295
|
}
|
|
256
296
|
/**
|
|
257
297
|
* PURE validation of an outbox relay request (schema + flag allowlist only — no
|
|
@@ -294,6 +334,21 @@ export declare function materializeOutboxFile(outbox: string, name: string, dest
|
|
|
294
334
|
*/
|
|
295
335
|
export declare function buildRelayHostEnv(baseEnv: NodeJS.ProcessEnv, preparedContentFile?: string): NodeJS.ProcessEnv;
|
|
296
336
|
export declare function startOutboxWatcher(outbox: string, baseEnv: NodeJS.ProcessEnv, sessionId: string, opts?: {
|
|
337
|
+
/** Host-side authorization for a relay's claimed origin capability. When
|
|
338
|
+
* absent the relay still runs, but carries NO durable origin — a missing
|
|
339
|
+
* hook must never let the sandbox promote its own origin fields. */
|
|
340
|
+
authorize?: (claim: {
|
|
341
|
+
capability?: string;
|
|
342
|
+
}) => {
|
|
343
|
+
ok: true;
|
|
344
|
+
origin: {
|
|
345
|
+
turnId?: string;
|
|
346
|
+
dispatchAttempt?: number;
|
|
347
|
+
};
|
|
348
|
+
} | {
|
|
349
|
+
ok: false;
|
|
350
|
+
error: string;
|
|
351
|
+
};
|
|
297
352
|
cliPath?: string;
|
|
298
353
|
}): () => void;
|
|
299
354
|
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/sandbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/sandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
* bwrap 0.8.0 has NO --overlay, so we mount the overlay ON THE HOST then bind the
|
|
15
15
|
* merged dir into bwrap. overlayfs forbids upper/work INSIDE lower, so the HOME
|
|
16
16
|
* overlay (lower=/root) puts upper/work OUTSIDE /root (under /var/tmp/...). The
|
|
17
|
-
*
|
|
17
|
+
* merged mountpoints also live there: putting home-merged below HOME makes the
|
|
18
|
+
* rootless FUSE overlay recursively contain itself, and bwrap can block forever
|
|
19
|
+
* while resolving later bind destinations. Project upper/work stay under the
|
|
20
|
+
* data dir because they are the persistent, landable changeset.
|
|
18
21
|
*
|
|
19
22
|
* Linux-only (overlayfs + bwrap depend on Linux). macOS reuses Anthropic's
|
|
20
23
|
* sandbox-exec approach and is handled elsewhere.
|
|
@@ -60,21 +63,41 @@ export function mountOverlay(opts) {
|
|
|
60
63
|
const f = spawnSync('fuse-overlayfs', ['-o', optStr, opts.merged], { stdio: 'pipe' });
|
|
61
64
|
return f.status === 0;
|
|
62
65
|
}
|
|
63
|
-
|
|
66
|
+
function decodeMountInfoPath(raw) {
|
|
67
|
+
return raw.replace(/\\([0-7]{3})/g, (_match, octal) => String.fromCharCode(Number.parseInt(octal, 8)));
|
|
68
|
+
}
|
|
69
|
+
/** True iff `path` is currently a mountpoint (host-side overlay still mounted).
|
|
70
|
+
* Read mountinfo instead of stat'ing the path: a broken recursive FUSE mount can
|
|
71
|
+
* leave any path-based `mountpoint` probe blocked in uninterruptible I/O. */
|
|
64
72
|
export function isMounted(path) {
|
|
65
|
-
|
|
73
|
+
const target = resolve(path);
|
|
74
|
+
try {
|
|
75
|
+
const mountInfo = readFileSync('/proc/self/mountinfo', 'utf8');
|
|
76
|
+
return mountInfo.split('\n').some(line => {
|
|
77
|
+
const fields = line.split(' ');
|
|
78
|
+
return fields.length > 4 && decodeMountInfoPath(fields[4]) === target;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return spawnSync('mountpoint', ['-q', target], {
|
|
83
|
+
stdio: 'ignore',
|
|
84
|
+
timeout: 2_000,
|
|
85
|
+
}).status === 0;
|
|
86
|
+
}
|
|
66
87
|
}
|
|
67
|
-
/** Unmount an overlay merged dir. Best-effort: lazy
|
|
68
|
-
*
|
|
88
|
+
/** Unmount an overlay merged dir. Best-effort: lazy detach if a normal unmount
|
|
89
|
+
* fails because a still-draining bwrap child holds the FUSE mount busy. */
|
|
69
90
|
export function unmountOverlay(merged) {
|
|
70
91
|
if (!isMounted(merged))
|
|
71
92
|
return; // not a mountpoint
|
|
72
93
|
// kernel overlay → `umount`; fuse-overlayfs → `fusermount -u` (a non-root
|
|
73
|
-
// daemon can't `umount` its own fuse mount)
|
|
74
|
-
// busy
|
|
94
|
+
// daemon can't `umount` its own fuse mount). `fusermount -uz` is the critical
|
|
95
|
+
// rootless busy-mount fallback; plain `umount -l` is usually not permitted.
|
|
96
|
+
if (spawnSync('fusermount', ['-u', merged], { stdio: 'ignore' }).status === 0)
|
|
97
|
+
return;
|
|
75
98
|
if (spawnSync('umount', [merged], { stdio: 'ignore' }).status === 0)
|
|
76
99
|
return;
|
|
77
|
-
if (spawnSync('fusermount', ['-
|
|
100
|
+
if (spawnSync('fusermount', ['-uz', merged], { stdio: 'ignore' }).status === 0)
|
|
78
101
|
return;
|
|
79
102
|
spawnSync('umount', ['-l', merged], { stdio: 'ignore' });
|
|
80
103
|
}
|
|
@@ -146,6 +169,16 @@ export function buildSandboxArgs(plan) {
|
|
|
146
169
|
a.push('--tmpfs', dir);
|
|
147
170
|
for (const f of plan.hideFiles)
|
|
148
171
|
a.push('--ro-bind', f.empty, f.path);
|
|
172
|
+
// Re-open only daemon-derived private roots (for example this bot's own
|
|
173
|
+
// BOT_HOME) after their parent BOTMUX_HOME was blanked.
|
|
174
|
+
for (const root of plan.trustedWritableRoots ?? [])
|
|
175
|
+
a.push('--bind', root, root);
|
|
176
|
+
// A private root can itself contain a credential that the sandbox must not
|
|
177
|
+
// recover (notably send-cred.json). Re-deny those after the carve-out.
|
|
178
|
+
for (const dir of plan.finalHideDirs ?? [])
|
|
179
|
+
a.push('--tmpfs', dir);
|
|
180
|
+
for (const f of plan.finalHideFiles ?? [])
|
|
181
|
+
a.push('--ro-bind', f.empty, f.path);
|
|
149
182
|
// Session-scoped TRUSTED runtime inputs, e.g. generated skill/plugin dirs —
|
|
150
183
|
// after the masks so a broad hideDir can't blank skill delivery.
|
|
151
184
|
for (const root of plan.readonlyRoots ?? [])
|
|
@@ -249,6 +282,37 @@ function canonicalize(p) {
|
|
|
249
282
|
export function resolveSandboxMountPath(p) {
|
|
250
283
|
return canonicalize(p);
|
|
251
284
|
}
|
|
285
|
+
/** Host-side overlay mountpoints must not live below HOME, because HOME is the
|
|
286
|
+
* lower layer of the home overlay. The old layout did exactly that and allowed
|
|
287
|
+
* fuse-overlayfs to recursively expose its own mountpoint. Keep the legacy
|
|
288
|
+
* paths here only so upgrades can tear down pre-fix sessions safely. */
|
|
289
|
+
export function sandboxOverlayPaths(dataDir, sessionId) {
|
|
290
|
+
const sessionRoot = join(resolveSandboxMountPath(dataDir), 'sandboxes', sessionId);
|
|
291
|
+
const runtimeRoot = join(VARTMP_ROOT, sessionId);
|
|
292
|
+
return {
|
|
293
|
+
sessionRoot,
|
|
294
|
+
runtimeRoot,
|
|
295
|
+
projectMerged: join(runtimeRoot, 'proj-merged'),
|
|
296
|
+
homeMerged: join(runtimeRoot, 'home-merged'),
|
|
297
|
+
legacyProjectMerged: join(sessionRoot, 'proj-merged'),
|
|
298
|
+
legacyHomeMerged: join(sessionRoot, 'home-merged'),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
function overlayMountCandidates(paths) {
|
|
302
|
+
return [
|
|
303
|
+
paths.projectMerged,
|
|
304
|
+
paths.homeMerged,
|
|
305
|
+
paths.legacyProjectMerged,
|
|
306
|
+
paths.legacyHomeMerged,
|
|
307
|
+
];
|
|
308
|
+
}
|
|
309
|
+
function unmountSandboxOverlays(paths) {
|
|
310
|
+
for (const merged of overlayMountCandidates(paths))
|
|
311
|
+
unmountOverlay(merged);
|
|
312
|
+
}
|
|
313
|
+
function hasMountedSandboxOverlay(paths) {
|
|
314
|
+
return overlayMountCandidates(paths).some(isMounted);
|
|
315
|
+
}
|
|
252
316
|
/**
|
|
253
317
|
* Resolve user-configured sandboxReadonlyPaths: tilde-expand, drop non-existent
|
|
254
318
|
* entries, and REJECT entries that (after resolving symlinks + normalizing) are
|
|
@@ -304,6 +368,22 @@ export function sandboxedClaudeDataDir(sessionId, realDataDir) {
|
|
|
304
368
|
const rel = raw.startsWith('..') ? relative(resolveSandboxMountPath(homedir()), realDataDir) : raw;
|
|
305
369
|
return join(VARTMP_ROOT, sessionId, 'home-upper', rel);
|
|
306
370
|
}
|
|
371
|
+
/** Credential roots that must never be readable inside the file sandbox.
|
|
372
|
+
* Relay mode is the only credentialed send path; otherwise an agent could
|
|
373
|
+
* unset BOTMUX_SEND_RELAY and execute an absolute botmux binary against the
|
|
374
|
+
* real bots.json/send-cred files exposed by the HOME overlay lowerdir. */
|
|
375
|
+
export function sandboxCredentialHidePaths(home, botmuxHome = join(home, '.botmux')) {
|
|
376
|
+
// Mask the entire botmux state root. Exact-file masks are insufficient:
|
|
377
|
+
// setup/update creates timestamped bots.json backups, including ones created
|
|
378
|
+
// after a long-lived sandbox starts. Trusted skill roots and the per-session
|
|
379
|
+
// outbox are explicitly re-bound after privacy masks by buildSandboxArgs.
|
|
380
|
+
return [...new Set([
|
|
381
|
+
join(home, '.botmux'),
|
|
382
|
+
botmuxHome,
|
|
383
|
+
join(home, '.lark-cli'),
|
|
384
|
+
join(home, '.lark-cli-bots'),
|
|
385
|
+
])].sort();
|
|
386
|
+
}
|
|
307
387
|
/** Proxy env vars forwarded into the sandbox so the CLI reaches the API even on
|
|
308
388
|
* the tmux backend (which otherwise only forwards a fixed whitelist). */
|
|
309
389
|
const PROXY_ENV_KEYS = ['http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY', 'no_proxy', 'NO_PROXY', 'all_proxy', 'ALL_PROXY'];
|
|
@@ -324,9 +404,9 @@ export function localSandboxApplies(platform, backendType) {
|
|
|
324
404
|
* treats null as a hard error and does NOT silently run unsandboxed).
|
|
325
405
|
*
|
|
326
406
|
* Layout under <dataDir>/sandboxes/<sessionId>/: outbox, shimbin, proj-upper
|
|
327
|
-
* (the landable changeset), proj-work
|
|
328
|
-
* overlay
|
|
329
|
-
*
|
|
407
|
+
* (the landable changeset), and proj-work. Host-only merged mountpoints plus the
|
|
408
|
+
* HOME overlay upper/work live under /var/tmp/botmux-sbx/<sessionId>/ so none of
|
|
409
|
+
* the FUSE mountpoints is nested below the HOME lower layer.
|
|
330
410
|
*/
|
|
331
411
|
export function prepareSandbox(opts) {
|
|
332
412
|
if (!opts.enabled)
|
|
@@ -339,28 +419,37 @@ export function prepareSandbox(opts) {
|
|
|
339
419
|
if (!ensureSandboxDeps(needFuse))
|
|
340
420
|
return null;
|
|
341
421
|
const dataDir = resolveSandboxMountPath(opts.dataDir);
|
|
342
|
-
const
|
|
422
|
+
const botmuxHome = dirname(dataDir);
|
|
423
|
+
const overlayPaths = sandboxOverlayPaths(dataDir, opts.sessionId);
|
|
424
|
+
const sessionRoot = overlayPaths.sessionRoot;
|
|
343
425
|
const outbox = join(sessionRoot, 'outbox');
|
|
344
426
|
const shimBin = join(sessionRoot, 'shimbin');
|
|
345
427
|
const empties = join(sessionRoot, 'empties');
|
|
346
428
|
const projUpper = join(sessionRoot, 'proj-upper'); // THE LANDABLE CHANGESET
|
|
347
429
|
const projWork = join(sessionRoot, 'proj-work');
|
|
348
|
-
const projMerged =
|
|
349
|
-
const homeMerged =
|
|
350
|
-
// HOME overlay upper/work
|
|
351
|
-
const vartmp =
|
|
430
|
+
const projMerged = overlayPaths.projectMerged;
|
|
431
|
+
const homeMerged = overlayPaths.homeMerged;
|
|
432
|
+
// HOME overlay upper/work and both merged mountpoints MUST be outside HOME.
|
|
433
|
+
const vartmp = overlayPaths.runtimeRoot;
|
|
352
434
|
const homeUpper = join(vartmp, 'home-upper');
|
|
353
435
|
const homeWork = join(vartmp, 'home-work');
|
|
354
436
|
for (const d of [outbox, shimBin, empties])
|
|
355
437
|
mkdirSync(d, { recursive: true });
|
|
356
438
|
const home = resolveSandboxMountPath(homedir());
|
|
439
|
+
// Masking BOTMUX_HOME is mandatory for the credential boundary. A layout
|
|
440
|
+
// that makes it `/` or the whole user home cannot be masked without erasing
|
|
441
|
+
// the sandbox runtime itself, so refuse the spawn instead of silently
|
|
442
|
+
// exposing the custom session/config root.
|
|
443
|
+
if (botmuxHome === '/' || botmuxHome === home) {
|
|
444
|
+
console.error(`[sandbox] unsafe SESSION_DATA_DIR layout: BOTMUX_HOME resolves to ${botmuxHome}`);
|
|
445
|
+
return null;
|
|
446
|
+
}
|
|
357
447
|
// BOTMUX_SANDBOX_SRC overrides the LOWER project source for spike testing only.
|
|
358
448
|
const projectSource = resolveSandboxMountPath(process.env.BOTMUX_SANDBOX_SRC || opts.sourceWorkingDir);
|
|
359
449
|
const projectMount = resolveSandboxMountPath(opts.sourceWorkingDir);
|
|
360
450
|
// A same-session re-spawn (e.g. in-pane /clear) re-enters here; unmount any
|
|
361
451
|
// stale merged overlays first so we don't stack a second mount on the same dir.
|
|
362
|
-
|
|
363
|
-
unmountOverlay(homeMerged);
|
|
452
|
+
unmountSandboxOverlays(overlayPaths);
|
|
364
453
|
// Mount the HOME overlay (lower=real home → reads pass through, writes isolate).
|
|
365
454
|
const homeOk = mountOverlay({ lower: home, upper: homeUpper, work: homeWork, merged: homeMerged });
|
|
366
455
|
if (!homeOk) {
|
|
@@ -385,14 +474,25 @@ export function prepareSandbox(opts) {
|
|
|
385
474
|
const shim = join(shimBin, 'botmux');
|
|
386
475
|
writeFileSync(shim, `#!/bin/sh\nexec node ${JSON.stringify(distCliJs())} "$@"\n`);
|
|
387
476
|
chmodSync(shim, 0o755);
|
|
388
|
-
//
|
|
389
|
-
//
|
|
477
|
+
// Credential masks are mandatory; per-bot privacy masks extend them.
|
|
478
|
+
// Existing dirs → tmpfs blank; everything else → empty read-only placeholder.
|
|
390
479
|
// `~` resolves like the docs' examples (`~/.ssh`) — an unexpanded tilde would
|
|
391
480
|
// fail existsSync and mask a literal `~/...` path, leaving the real one readable.
|
|
392
481
|
const hideDirs = [];
|
|
393
482
|
const hideFiles = [];
|
|
483
|
+
const finalHideDirs = [];
|
|
484
|
+
const finalHideFiles = [];
|
|
394
485
|
let emptyIdx = 0;
|
|
395
|
-
|
|
486
|
+
const customBotsConfig = process.env.BOTS_CONFIG?.trim();
|
|
487
|
+
const credentialPaths = [
|
|
488
|
+
// SESSION_DATA_DIR may live outside ~/.botmux. Its parent is the
|
|
489
|
+
// authoritative BOTMUX_HOME everywhere else (send-cred, per-bot homes,
|
|
490
|
+
// sessions/receipts); mask that exact root so a custom location cannot be
|
|
491
|
+
// recovered through the sandbox's initial read-only bind of `/`.
|
|
492
|
+
...sandboxCredentialHidePaths(home, botmuxHome),
|
|
493
|
+
...(customBotsConfig ? [resolve(customBotsConfig)] : []),
|
|
494
|
+
];
|
|
495
|
+
for (const raw of [...credentialPaths, ...(opts.hidePaths ?? [])]) {
|
|
396
496
|
if (!raw || typeof raw !== 'string')
|
|
397
497
|
continue;
|
|
398
498
|
const p = expandTilde(raw, home);
|
|
@@ -413,11 +513,33 @@ export function prepareSandbox(opts) {
|
|
|
413
513
|
hideFiles.push({ path: p, empty });
|
|
414
514
|
}
|
|
415
515
|
}
|
|
516
|
+
for (const raw of opts.finalHidePaths ?? []) {
|
|
517
|
+
if (!raw || typeof raw !== 'string')
|
|
518
|
+
continue;
|
|
519
|
+
const p = expandTilde(raw, home);
|
|
520
|
+
let isDir = false;
|
|
521
|
+
try {
|
|
522
|
+
isDir = existsSync(p) && statSync(p).isDirectory();
|
|
523
|
+
}
|
|
524
|
+
catch { /* */ }
|
|
525
|
+
if (isDir) {
|
|
526
|
+
finalHideDirs.push(p);
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
const empty = join(empties, `mask-${emptyIdx++}`);
|
|
530
|
+
try {
|
|
531
|
+
writeFileSync(empty, '');
|
|
532
|
+
}
|
|
533
|
+
catch { /* */ }
|
|
534
|
+
finalHideFiles.push({ path: p, empty });
|
|
535
|
+
}
|
|
536
|
+
}
|
|
416
537
|
// CLI auth/login paths kept real+writable (token refresh / login must persist,
|
|
417
538
|
// unlike isolated project edits). Resolve `~` and bind only existing paths — a
|
|
418
539
|
// missing auth file isn't a valid mountpoint (the CLI must be logged in on the
|
|
419
540
|
// host; login-from-scratch inside the sandbox isn't supported).
|
|
420
541
|
const authReal = resolveExistingPaths(opts.authPaths, home);
|
|
542
|
+
const trustedWritableRoots = resolveExistingPaths(opts.trustedWritablePaths, home);
|
|
421
543
|
const readonlyRoots = resolveExistingPaths(opts.readonlyRoots, home);
|
|
422
544
|
const userReadonlyRoots = resolveUserReadonlyRoots(opts.userReadonlyPaths, home, projectMount);
|
|
423
545
|
const plan = {
|
|
@@ -429,6 +551,9 @@ export function prepareSandbox(opts) {
|
|
|
429
551
|
hideDirs,
|
|
430
552
|
hideFiles,
|
|
431
553
|
authReal,
|
|
554
|
+
trustedWritableRoots,
|
|
555
|
+
finalHideDirs,
|
|
556
|
+
finalHideFiles,
|
|
432
557
|
readonlyRoots,
|
|
433
558
|
userReadonlyRoots,
|
|
434
559
|
net: opts.net !== false,
|
|
@@ -459,6 +584,18 @@ export function prepareSandbox(opts) {
|
|
|
459
584
|
BOTMUX_SEND_RELAY: outbox, // routes `botmux send` to the daemon outbox watcher
|
|
460
585
|
PATH: `/run/sbxbin:${process.env.PATH ?? ''}`, // /run/sbxbin first so `botmux` = the relay shim
|
|
461
586
|
};
|
|
587
|
+
// The daemon discovery dir lives under the masked BOTMUX_HOME, so the only
|
|
588
|
+
// way an in-sandbox CLI can dial the daemon's loopback IPC (session-scoped,
|
|
589
|
+
// capability-gated routes like the v3 workflow relay) is this port marker.
|
|
590
|
+
// Not a credential: every route it reaches authenticates independently.
|
|
591
|
+
if (process.env.BOTMUX_DAEMON_IPC_PORT) {
|
|
592
|
+
env.BOTMUX_DAEMON_IPC_PORT = process.env.BOTMUX_DAEMON_IPC_PORT;
|
|
593
|
+
}
|
|
594
|
+
// Never inherit a custom credential config path into the sandbox. Its host
|
|
595
|
+
// path is masked above as defense in depth, while unsetenv prevents an
|
|
596
|
+
// absolute botmux/lark client from being pointed at it explicitly.
|
|
597
|
+
args.push('--unsetenv', 'BOTS_CONFIG');
|
|
598
|
+
args.push('--unsetenv', 'BOTMUX_HOST_RELAY_AUTHORIZED');
|
|
462
599
|
// Forward proxy vars so the CLI reaches the API on the tmux backend too.
|
|
463
600
|
for (const k of PROXY_ENV_KEYS) {
|
|
464
601
|
const v = process.env[k];
|
|
@@ -476,8 +613,7 @@ export function prepareSandbox(opts) {
|
|
|
476
613
|
workDir: projUpper,
|
|
477
614
|
homeUpper,
|
|
478
615
|
cleanup: () => {
|
|
479
|
-
|
|
480
|
-
unmountOverlay(homeMerged);
|
|
616
|
+
unmountSandboxOverlays(overlayPaths);
|
|
481
617
|
try {
|
|
482
618
|
rmSync(sessionRoot, { recursive: true, force: true });
|
|
483
619
|
}
|
|
@@ -503,8 +639,8 @@ export function prepareSandbox(opts) {
|
|
|
503
639
|
export function attachSandboxOutbox(opts) {
|
|
504
640
|
if (process.platform !== 'linux')
|
|
505
641
|
return null;
|
|
506
|
-
const
|
|
507
|
-
const sessionRoot =
|
|
642
|
+
const overlayPaths = sandboxOverlayPaths(opts.dataDir, opts.sessionId);
|
|
643
|
+
const sessionRoot = overlayPaths.sessionRoot;
|
|
508
644
|
const outbox = join(sessionRoot, 'outbox');
|
|
509
645
|
const projUpper = join(sessionRoot, 'proj-upper');
|
|
510
646
|
if (!existsSync(outbox) && !existsSync(projUpper))
|
|
@@ -514,21 +650,17 @@ export function attachSandboxOutbox(opts) {
|
|
|
514
650
|
mkdirSync(outbox, { recursive: true });
|
|
515
651
|
}
|
|
516
652
|
catch { /* */ }
|
|
517
|
-
const projMerged = join(sessionRoot, 'proj-merged');
|
|
518
|
-
const homeMerged = join(sessionRoot, 'home-merged');
|
|
519
|
-
const vartmp = join(VARTMP_ROOT, opts.sessionId);
|
|
520
653
|
return {
|
|
521
654
|
outbox,
|
|
522
655
|
workDir: projUpper,
|
|
523
656
|
cleanup: () => {
|
|
524
|
-
|
|
525
|
-
unmountOverlay(homeMerged);
|
|
657
|
+
unmountSandboxOverlays(overlayPaths);
|
|
526
658
|
try {
|
|
527
659
|
rmSync(sessionRoot, { recursive: true, force: true });
|
|
528
660
|
}
|
|
529
661
|
catch { /* */ }
|
|
530
662
|
try {
|
|
531
|
-
rmSync(
|
|
663
|
+
rmSync(overlayPaths.runtimeRoot, { recursive: true, force: true });
|
|
532
664
|
}
|
|
533
665
|
catch { /* */ }
|
|
534
666
|
},
|
|
@@ -537,15 +669,14 @@ export function attachSandboxOutbox(opts) {
|
|
|
537
669
|
/** Reclaim one session's overlay residue: unmount both merged overlays + rm the
|
|
538
670
|
* per-session tree (incl. the /var/tmp home scratch). Idempotent / best-effort. */
|
|
539
671
|
function reclaimSandbox(dataDir, sid) {
|
|
540
|
-
const
|
|
541
|
-
|
|
542
|
-
unmountOverlay(join(sessionRoot, 'home-merged'));
|
|
672
|
+
const overlayPaths = sandboxOverlayPaths(dataDir, sid);
|
|
673
|
+
unmountSandboxOverlays(overlayPaths);
|
|
543
674
|
try {
|
|
544
|
-
rmSync(sessionRoot, { recursive: true, force: true });
|
|
675
|
+
rmSync(overlayPaths.sessionRoot, { recursive: true, force: true });
|
|
545
676
|
}
|
|
546
677
|
catch { /* */ }
|
|
547
678
|
try {
|
|
548
|
-
rmSync(
|
|
679
|
+
rmSync(overlayPaths.runtimeRoot, { recursive: true, force: true });
|
|
549
680
|
}
|
|
550
681
|
catch { /* */ }
|
|
551
682
|
}
|
|
@@ -628,7 +759,8 @@ export function sweepOrphanSandboxes(dataDir, activeSessionIds) {
|
|
|
628
759
|
// cause of the 2026-06-10 incident — keep it as the FIRST gate.
|
|
629
760
|
const live = liveSandboxSids();
|
|
630
761
|
for (const sid of sids) {
|
|
631
|
-
const
|
|
762
|
+
const overlayPaths = sandboxOverlayPaths(sandboxDataDir, sid);
|
|
763
|
+
const sessionRoot = overlayPaths.sessionRoot;
|
|
632
764
|
if (live.has(sid))
|
|
633
765
|
continue; // a running process holds this sandbox — leave it
|
|
634
766
|
if (activeSessionIds.has(sid)) {
|
|
@@ -637,7 +769,7 @@ export function sweepOrphanSandboxes(dataDir, activeSessionIds) {
|
|
|
637
769
|
// AND the tree is older than the spawn grace, the worker/CLI is dead →
|
|
638
770
|
// reclaim the dead residue. We NEVER tear down a live mount, so a genuinely
|
|
639
771
|
// live persistent (tmux/herdr/zellij) session keeps its changeset.
|
|
640
|
-
if (
|
|
772
|
+
if (hasMountedSandboxOverlay(overlayPaths))
|
|
641
773
|
continue;
|
|
642
774
|
let ageOk = false;
|
|
643
775
|
try {
|
|
@@ -731,7 +863,36 @@ export function validateRelayRequest(req) {
|
|
|
731
863
|
}
|
|
732
864
|
return { ok: false, error: `flag not allowed: ${f}` };
|
|
733
865
|
}
|
|
734
|
-
|
|
866
|
+
const originTurnId = req.originTurnId === undefined
|
|
867
|
+
? undefined
|
|
868
|
+
: typeof req.originTurnId === 'string' && req.originTurnId.trim() && req.originTurnId.length <= 256
|
|
869
|
+
? req.originTurnId
|
|
870
|
+
: null;
|
|
871
|
+
if (originTurnId === null)
|
|
872
|
+
return { ok: false, error: 'originTurnId must be a non-empty bounded string' };
|
|
873
|
+
const originDispatchAttempt = req.originDispatchAttempt === undefined
|
|
874
|
+
? undefined
|
|
875
|
+
: typeof req.originDispatchAttempt === 'number'
|
|
876
|
+
&& Number.isSafeInteger(req.originDispatchAttempt)
|
|
877
|
+
&& req.originDispatchAttempt > 0
|
|
878
|
+
? req.originDispatchAttempt
|
|
879
|
+
: null;
|
|
880
|
+
if (originDispatchAttempt === null)
|
|
881
|
+
return { ok: false, error: 'originDispatchAttempt must be a positive safe integer' };
|
|
882
|
+
if (originDispatchAttempt !== undefined && originTurnId === undefined) {
|
|
883
|
+
return { ok: false, error: 'originDispatchAttempt requires originTurnId' };
|
|
884
|
+
}
|
|
885
|
+
const originCapability = req.originCapability === undefined
|
|
886
|
+
? undefined
|
|
887
|
+
: typeof req.originCapability === 'string'
|
|
888
|
+
&& /^[a-f0-9]{32,128}$/i.test(req.originCapability)
|
|
889
|
+
? req.originCapability
|
|
890
|
+
: null;
|
|
891
|
+
if (originCapability === null)
|
|
892
|
+
return { ok: false, error: 'originCapability must be a bounded hex token' };
|
|
893
|
+
return {
|
|
894
|
+
ok: true,
|
|
895
|
+
value: {
|
|
735
896
|
contentName: req.contentFile,
|
|
736
897
|
preparedContentName,
|
|
737
898
|
cardName,
|
|
@@ -739,7 +900,11 @@ export function validateRelayRequest(req) {
|
|
|
739
900
|
videoNames,
|
|
740
901
|
videoCoverNames,
|
|
741
902
|
flags,
|
|
742
|
-
|
|
903
|
+
...(originTurnId !== undefined ? { originTurnId } : {}),
|
|
904
|
+
...(originDispatchAttempt !== undefined ? { originDispatchAttempt } : {}),
|
|
905
|
+
...(originCapability !== undefined ? { originCapability } : {}),
|
|
906
|
+
},
|
|
907
|
+
};
|
|
743
908
|
}
|
|
744
909
|
/**
|
|
745
910
|
* TOCTOU-safe copy of an outbox file (`outbox/<name>`, name already validated as
|
|
@@ -811,6 +976,7 @@ export function buildRelayHostEnv(baseEnv, preparedContentFile) {
|
|
|
811
976
|
}
|
|
812
977
|
export function startOutboxWatcher(outbox, baseEnv, sessionId, opts = {}) {
|
|
813
978
|
const cli = opts.cliPath ?? distCliJs();
|
|
979
|
+
const authorize = opts.authorize;
|
|
814
980
|
const inFlight = new Set();
|
|
815
981
|
// Host-private staging — a sibling of the outbox, NOT bound into the sandbox.
|
|
816
982
|
const staging = join(dirname(outbox), 'relay-staging');
|
|
@@ -860,6 +1026,11 @@ export function startOutboxWatcher(outbox, baseEnv, sessionId, opts = {}) {
|
|
|
860
1026
|
finish(id, reqPath, name, staged, 1, '', `relay rejected: ${v.error}`);
|
|
861
1027
|
continue;
|
|
862
1028
|
}
|
|
1029
|
+
const authorization = authorize?.({ capability: v.value.originCapability });
|
|
1030
|
+
if (authorization && !authorization.ok) {
|
|
1031
|
+
finish(id, reqPath, name, staged, 2, '', `relay rejected: ${authorization.error}`);
|
|
1032
|
+
continue;
|
|
1033
|
+
}
|
|
863
1034
|
try {
|
|
864
1035
|
mkdirSync(staging, { recursive: true });
|
|
865
1036
|
}
|
|
@@ -948,9 +1119,30 @@ export function startOutboxWatcher(outbox, baseEnv, sessionId, opts = {}) {
|
|
|
948
1119
|
...videoCoverPaths.flatMap(a => ['--video-covers', a]),
|
|
949
1120
|
'--session-id', sessionId, // forced — sandbox cannot target another session
|
|
950
1121
|
];
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
1122
|
+
// Fail closed: a durable origin (turnId/dispatchAttempt) may come ONLY
|
|
1123
|
+
// from a host-side authorize decision. The sandbox controls every byte of
|
|
1124
|
+
// the relay request, so its originTurnId/dispatchAttempt are never trusted
|
|
1125
|
+
// — without an authorize hook the relay runs with no durable origin.
|
|
1126
|
+
const trustedOrigin = authorization?.ok ? authorization.origin : undefined;
|
|
1127
|
+
// Master's relay host env (BOTMUX_SEND_RELAY stripped + prepared-content
|
|
1128
|
+
// local-link mode) is the base for the watcher-spawned host re-exec.
|
|
1129
|
+
const requestEnv = {
|
|
1130
|
+
...buildRelayHostEnv(baseEnv, preparedContentPath),
|
|
1131
|
+
BOTMUX_SESSION_ID: sessionId,
|
|
1132
|
+
};
|
|
1133
|
+
// The host re-exec itself is trusted (the sandbox child has this marker
|
|
1134
|
+
// explicitly unset). Scrub any inherited durable-origin markers first,
|
|
1135
|
+
// then re-apply only what the host authorized; cmdSend still re-validates
|
|
1136
|
+
// the exact receipt/IM origin carried below.
|
|
1137
|
+
requestEnv.BOTMUX_HOST_RELAY_AUTHORIZED = '1';
|
|
1138
|
+
delete requestEnv.BOTMUX_TURN_ID;
|
|
1139
|
+
delete requestEnv.BOTMUX_DISPATCH_ATTEMPT;
|
|
1140
|
+
if (trustedOrigin?.turnId !== undefined)
|
|
1141
|
+
requestEnv.BOTMUX_TURN_ID = trustedOrigin.turnId;
|
|
1142
|
+
if (trustedOrigin?.dispatchAttempt !== undefined) {
|
|
1143
|
+
requestEnv.BOTMUX_DISPATCH_ATTEMPT = String(trustedOrigin.dispatchAttempt);
|
|
1144
|
+
}
|
|
1145
|
+
const child = spawn(process.execPath, [cli, 'send', ...hostArgs], { env: requestEnv });
|
|
954
1146
|
let out = '', err = '';
|
|
955
1147
|
child.stdout.on('data', d => { out += d; });
|
|
956
1148
|
child.stderr.on('data', d => { err += d; });
|