botmux 2.66.0-canary.0 → 2.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/dist/adapters/backend/sandbox.d.ts +193 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -0
- package/dist/adapters/backend/sandbox.js +621 -0
- package/dist/adapters/backend/sandbox.js.map +1 -0
- package/dist/adapters/backend/types.d.ts +8 -0
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.d.ts +5 -0
- package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.js +7 -0
- package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
- package/dist/adapters/cli/aiden.d.ts.map +1 -1
- package/dist/adapters/cli/aiden.js +1 -3
- package/dist/adapters/cli/aiden.js.map +1 -1
- package/dist/adapters/cli/antigravity.d.ts.map +1 -1
- package/dist/adapters/cli/antigravity.js +2 -4
- package/dist/adapters/cli/antigravity.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +7 -11
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +12 -4
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +2 -4
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/copilot.d.ts.map +1 -1
- package/dist/adapters/cli/copilot.js +1 -3
- package/dist/adapters/cli/copilot.js.map +1 -1
- package/dist/adapters/cli/cursor.d.ts.map +1 -1
- package/dist/adapters/cli/cursor.js +1 -3
- package/dist/adapters/cli/cursor.js.map +1 -1
- package/dist/adapters/cli/gemini.d.ts.map +1 -1
- package/dist/adapters/cli/gemini.js +1 -3
- package/dist/adapters/cli/gemini.js.map +1 -1
- package/dist/adapters/cli/hermes.d.ts.map +1 -1
- package/dist/adapters/cli/hermes.js +1 -3
- package/dist/adapters/cli/hermes.js.map +1 -1
- package/dist/adapters/cli/mtr.d.ts.map +1 -1
- package/dist/adapters/cli/mtr.js +1 -3
- package/dist/adapters/cli/mtr.js.map +1 -1
- package/dist/adapters/cli/oh-my-pi.d.ts +5 -0
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -0
- package/dist/adapters/cli/oh-my-pi.js +55 -0
- package/dist/adapters/cli/oh-my-pi.js.map +1 -0
- package/dist/adapters/cli/opencode.d.ts.map +1 -1
- package/dist/adapters/cli/opencode.js +1 -3
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +1 -3
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +3 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +1 -3
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +8 -2
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/adapters/coco-ask-plugin.d.ts +25 -0
- package/dist/adapters/coco-ask-plugin.d.ts.map +1 -0
- package/dist/adapters/coco-ask-plugin.js +71 -0
- package/dist/adapters/coco-ask-plugin.js.map +1 -0
- package/dist/bot-registry.d.ts +16 -1
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +4 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/send-dispatch.d.ts +22 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +40 -0
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli/workflow.d.ts.map +1 -1
- package/dist/cli/workflow.js +4 -11
- package/dist/cli/workflow.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +224 -155
- package/dist/cli.js.map +1 -1
- package/dist/core/ask-hook/coco.d.ts +22 -0
- package/dist/core/ask-hook/coco.d.ts.map +1 -0
- package/dist/core/ask-hook/coco.js +35 -0
- package/dist/core/ask-hook/coco.js.map +1 -0
- package/dist/core/ask-hook/registry.d.ts.map +1 -1
- package/dist/core/ask-hook/registry.js +6 -0
- package/dist/core/ask-hook/registry.js.map +1 -1
- package/dist/core/coco-picker-keys.d.ts +31 -0
- package/dist/core/coco-picker-keys.d.ts.map +1 -0
- package/dist/core/coco-picker-keys.js +60 -0
- package/dist/core/coco-picker-keys.js.map +1 -0
- package/dist/core/command-discovery.d.ts +9 -0
- package/dist/core/command-discovery.d.ts.map +1 -1
- package/dist/core/command-discovery.js +74 -14
- package/dist/core/command-discovery.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +114 -61
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +101 -2
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +10 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +3 -0
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/inflight-input-tracker.d.ts +46 -0
- package/dist/core/inflight-input-tracker.d.ts.map +1 -0
- package/dist/core/inflight-input-tracker.js +54 -0
- package/dist/core/inflight-input-tracker.js.map +1 -0
- package/dist/core/restart-report.d.ts +3 -2
- package/dist/core/restart-report.d.ts.map +1 -1
- package/dist/core/restart-report.js +17 -12
- package/dist/core/restart-report.js.map +1 -1
- package/dist/core/session-activity.d.ts +1 -0
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-activity.js +12 -0
- package/dist/core/session-activity.js.map +1 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +1 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.js +8 -8
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/trigger-session.js +2 -2
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +13 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +32 -8
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +117 -34
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +4 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +163 -289
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +1 -7
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +33 -8
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +65 -0
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/connectors.js +66 -66
- package/dist/dashboard/web/connectors.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +386 -2
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +4 -4
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +72 -9
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/team-federation.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation.js +131 -130
- package/dist/dashboard/web/team-federation.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +1 -0
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +11 -0
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard-web/app.js +642 -802
- package/dist/dashboard-web/index.html +1 -2
- package/dist/dashboard-web/style.css +6 -227
- package/dist/dashboard.js +61 -9
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +137 -5
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +137 -5
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/ask-card.d.ts.map +1 -1
- package/dist/im/lark/ask-card.js +40 -35
- package/dist/im/lark/ask-card.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +27 -2
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +64 -10
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +0 -12
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +84 -54
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +5 -2
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +7 -4
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/grant-pending.d.ts +1 -0
- package/dist/im/lark/grant-pending.d.ts.map +1 -1
- package/dist/im/lark/grant-pending.js +36 -4
- package/dist/im/lark/grant-pending.js.map +1 -1
- package/dist/im/lark/md-card.d.ts +3 -1
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +7 -6
- package/dist/im/lark/md-card.js.map +1 -1
- package/dist/im/lark/quote-hint.d.ts +2 -1
- package/dist/im/lark/quote-hint.d.ts.map +1 -1
- package/dist/im/lark/quote-hint.js +3 -2
- package/dist/im/lark/quote-hint.js.map +1 -1
- package/dist/im/lark/relay-target-routing.d.ts +17 -0
- package/dist/im/lark/relay-target-routing.d.ts.map +1 -0
- package/dist/im/lark/relay-target-routing.js +68 -0
- package/dist/im/lark/relay-target-routing.js.map +1 -0
- package/dist/im/lark/workflow-card-handler.d.ts +2 -1
- package/dist/im/lark/workflow-card-handler.d.ts.map +1 -1
- package/dist/im/lark/workflow-card-handler.js +4 -4
- package/dist/im/lark/workflow-card-handler.js.map +1 -1
- package/dist/im/lark/workflow-cards.d.ts +2 -1
- package/dist/im/lark/workflow-cards.d.ts.map +1 -1
- package/dist/im/lark/workflow-cards.js +27 -26
- package/dist/im/lark/workflow-cards.js.map +1 -1
- package/dist/im/lark/workflow-progress-card.d.ts +6 -1
- package/dist/im/lark/workflow-progress-card.d.ts.map +1 -1
- package/dist/im/lark/workflow-progress-card.js +24 -20
- package/dist/im/lark/workflow-progress-card.js.map +1 -1
- package/dist/im/lark/workflow-slash-command.d.ts +2 -29
- package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
- package/dist/im/lark/workflow-slash-command.js +25 -77
- package/dist/im/lark/workflow-slash-command.js.map +1 -1
- package/dist/services/relay-picker.d.ts +6 -1
- package/dist/services/relay-picker.d.ts.map +1 -1
- package/dist/services/relay-picker.js +8 -2
- package/dist/services/relay-picker.js.map +1 -1
- package/dist/services/sandbox-land.d.ts +45 -0
- package/dist/services/sandbox-land.d.ts.map +1 -0
- package/dist/services/sandbox-land.js +382 -0
- package/dist/services/sandbox-land.js.map +1 -0
- package/dist/services/sandbox-store.d.ts +10 -0
- package/dist/services/sandbox-store.d.ts.map +1 -0
- package/dist/services/sandbox-store.js +40 -0
- package/dist/services/sandbox-store.js.map +1 -0
- package/dist/services/send-policy.d.ts +39 -0
- package/dist/services/send-policy.d.ts.map +1 -1
- package/dist/services/send-policy.js +43 -0
- package/dist/services/send-policy.js.map +1 -1
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +16 -6
- package/dist/services/session-store.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +3 -1
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +26 -209
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bounded-map.d.ts +15 -0
- package/dist/utils/bounded-map.d.ts.map +1 -0
- package/dist/utils/bounded-map.js +29 -0
- package/dist/utils/bounded-map.js.map +1 -0
- package/dist/utils/file-lock.d.ts +7 -1
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +5 -3
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/utils/timing.d.ts +30 -0
- package/dist/utils/timing.d.ts.map +1 -0
- package/dist/utils/timing.js +41 -0
- package/dist/utils/timing.js.map +1 -0
- package/dist/utils/transient-snapshot.d.ts +24 -0
- package/dist/utils/transient-snapshot.d.ts.map +1 -1
- package/dist/utils/transient-snapshot.js +26 -0
- package/dist/utils/transient-snapshot.js.map +1 -1
- package/dist/worker.js +396 -44
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +96 -96
- package/dist/workflows/events/payloads.d.ts +6 -6
- package/dist/workflows/events/schema.d.ts +24 -24
- package/dist/workflows/fanout.d.ts.map +1 -1
- package/dist/workflows/fanout.js +2 -1
- package/dist/workflows/fanout.js.map +1 -1
- package/package.json +11 -5
- package/dist/dashboard/v3-runs-api.d.ts +0 -26
- package/dist/dashboard/v3-runs-api.d.ts.map +0 -1
- package/dist/dashboard/v3-runs-api.js +0 -67
- package/dist/dashboard/v3-runs-api.js.map +0 -1
- package/dist/dashboard/web/v3-terminal.d.ts +0 -11
- package/dist/dashboard/web/v3-terminal.d.ts.map +0 -1
- package/dist/dashboard/web/v3-terminal.js +0 -143
- package/dist/dashboard/web/v3-terminal.js.map +0 -1
- package/dist/dashboard/web/v3.d.ts +0 -2
- package/dist/dashboard/web/v3.d.ts.map +0 -1
- package/dist/dashboard/web/v3.js +0 -538
- package/dist/dashboard/web/v3.js.map +0 -1
- package/dist/im/lark/v3-blocked-card-handler.d.ts +0 -28
- package/dist/im/lark/v3-blocked-card-handler.d.ts.map +0 -1
- package/dist/im/lark/v3-blocked-card-handler.js +0 -130
- package/dist/im/lark/v3-blocked-card-handler.js.map +0 -1
- package/dist/im/lark/v3-blocked-card.d.ts +0 -75
- package/dist/im/lark/v3-blocked-card.d.ts.map +0 -1
- package/dist/im/lark/v3-blocked-card.js +0 -206
- package/dist/im/lark/v3-blocked-card.js.map +0 -1
- package/dist/im/lark/v3-gate-card-handler.d.ts +0 -31
- package/dist/im/lark/v3-gate-card-handler.d.ts.map +0 -1
- package/dist/im/lark/v3-gate-card-handler.js +0 -97
- package/dist/im/lark/v3-gate-card-handler.js.map +0 -1
- package/dist/im/lark/v3-gate-card.d.ts +0 -47
- package/dist/im/lark/v3-gate-card.d.ts.map +0 -1
- package/dist/im/lark/v3-gate-card.js +0 -119
- package/dist/im/lark/v3-gate-card.js.map +0 -1
- package/dist/im/lark/v3-loop-grant-card-handler.d.ts +0 -28
- package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +0 -1
- package/dist/im/lark/v3-loop-grant-card-handler.js +0 -90
- package/dist/im/lark/v3-loop-grant-card-handler.js.map +0 -1
- package/dist/im/lark/v3-loop-grant-card.d.ts +0 -46
- package/dist/im/lark/v3-loop-grant-card.d.ts.map +0 -1
- package/dist/im/lark/v3-loop-grant-card.js +0 -119
- package/dist/im/lark/v3-loop-grant-card.js.map +0 -1
- package/dist/im/lark/v3-revisit-grant-card-handler.d.ts +0 -29
- package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +0 -1
- package/dist/im/lark/v3-revisit-grant-card-handler.js +0 -88
- package/dist/im/lark/v3-revisit-grant-card-handler.js.map +0 -1
- package/dist/im/lark/v3-revisit-grant-card.d.ts +0 -52
- package/dist/im/lark/v3-revisit-grant-card.d.ts.map +0 -1
- package/dist/im/lark/v3-revisit-grant-card.js +0 -123
- package/dist/im/lark/v3-revisit-grant-card.js.map +0 -1
- package/dist/workflows/v3/architect.d.ts +0 -37
- package/dist/workflows/v3/architect.d.ts.map +0 -1
- package/dist/workflows/v3/architect.js +0 -220
- package/dist/workflows/v3/architect.js.map +0 -1
- package/dist/workflows/v3/bot-resolve.d.ts +0 -21
- package/dist/workflows/v3/bot-resolve.d.ts.map +0 -1
- package/dist/workflows/v3/bot-resolve.js +0 -47
- package/dist/workflows/v3/bot-resolve.js.map +0 -1
- package/dist/workflows/v3/cli-run.d.ts +0 -24
- package/dist/workflows/v3/cli-run.d.ts.map +0 -1
- package/dist/workflows/v3/cli-run.js +0 -265
- package/dist/workflows/v3/cli-run.js.map +0 -1
- package/dist/workflows/v3/contract.d.ts +0 -302
- package/dist/workflows/v3/contract.d.ts.map +0 -1
- package/dist/workflows/v3/contract.js +0 -91
- package/dist/workflows/v3/contract.js.map +0 -1
- package/dist/workflows/v3/daemon-run.d.ts +0 -311
- package/dist/workflows/v3/daemon-run.d.ts.map +0 -1
- package/dist/workflows/v3/daemon-run.js +0 -755
- package/dist/workflows/v3/daemon-run.js.map +0 -1
- package/dist/workflows/v3/dag.d.ts +0 -332
- package/dist/workflows/v3/dag.d.ts.map +0 -1
- package/dist/workflows/v3/dag.js +0 -1040
- package/dist/workflows/v3/dag.js.map +0 -1
- package/dist/workflows/v3/ephemeral-pool.d.ts +0 -29
- package/dist/workflows/v3/ephemeral-pool.d.ts.map +0 -1
- package/dist/workflows/v3/ephemeral-pool.js +0 -331
- package/dist/workflows/v3/ephemeral-pool.js.map +0 -1
- package/dist/workflows/v3/grill-state.d.ts +0 -92
- package/dist/workflows/v3/grill-state.d.ts.map +0 -1
- package/dist/workflows/v3/grill-state.js +0 -151
- package/dist/workflows/v3/grill-state.js.map +0 -1
- package/dist/workflows/v3/host.d.ts +0 -88
- package/dist/workflows/v3/host.d.ts.map +0 -1
- package/dist/workflows/v3/host.js +0 -352
- package/dist/workflows/v3/host.js.map +0 -1
- package/dist/workflows/v3/human-gate.d.ts +0 -85
- package/dist/workflows/v3/human-gate.d.ts.map +0 -1
- package/dist/workflows/v3/human-gate.js +0 -153
- package/dist/workflows/v3/human-gate.js.map +0 -1
- package/dist/workflows/v3/journal.d.ts +0 -205
- package/dist/workflows/v3/journal.d.ts.map +0 -1
- package/dist/workflows/v3/journal.js +0 -64
- package/dist/workflows/v3/journal.js.map +0 -1
- package/dist/workflows/v3/manifest.d.ts +0 -17
- package/dist/workflows/v3/manifest.d.ts.map +0 -1
- package/dist/workflows/v3/manifest.js +0 -266
- package/dist/workflows/v3/manifest.js.map +0 -1
- package/dist/workflows/v3/ops-projection.d.ts +0 -109
- package/dist/workflows/v3/ops-projection.d.ts.map +0 -1
- package/dist/workflows/v3/ops-projection.js +0 -0
- package/dist/workflows/v3/ops-projection.js.map +0 -1
- package/dist/workflows/v3/orchestrator.d.ts +0 -168
- package/dist/workflows/v3/orchestrator.d.ts.map +0 -1
- package/dist/workflows/v3/orchestrator.js +0 -417
- package/dist/workflows/v3/orchestrator.js.map +0 -1
- package/dist/workflows/v3/runtime.d.ts +0 -193
- package/dist/workflows/v3/runtime.d.ts.map +0 -1
- package/dist/workflows/v3/runtime.js +0 -1266
- package/dist/workflows/v3/runtime.js.map +0 -1
- package/dist/workflows/v3/spec.d.ts +0 -32
- package/dist/workflows/v3/spec.d.ts.map +0 -1
- package/dist/workflows/v3/spec.js +0 -173
- package/dist/workflows/v3/spec.js.map +0 -1
- package/dist/workflows/v3/state.d.ts +0 -74
- package/dist/workflows/v3/state.d.ts.map +0 -1
- package/dist/workflows/v3/state.js +0 -353
- package/dist/workflows/v3/state.js.map +0 -1
package/README.en.md
CHANGED
|
@@ -64,7 +64,7 @@ Compared to OpenClaw-style approaches built on Agent SDKs:
|
|
|
64
64
|
## Prerequisites
|
|
65
65
|
|
|
66
66
|
- **Node.js** >= 20
|
|
67
|
-
- **AI coding CLI / local agent app** installed and authenticated (`claude`, `codex`, `coco`, `cursor-agent`, `gemini`, `opencode`, `hermes`, `seed` (Seed CLI, a Claude Code fork), `pi`, `copilot` (GitHub Copilot CLI), `traex` (TRAE CLI), or `agy` (Antigravity) in PATH)
|
|
67
|
+
- **AI coding CLI / local agent app** installed and authenticated (`claude`, `codex`, `coco`, `cursor-agent`, `gemini`, `opencode`, `hermes`, `seed` (Seed CLI, a Claude Code fork), `pi`, `omp` (oh-my-pi, a Pi fork), `copilot` (GitHub Copilot CLI), `traex` (TRAE CLI), or `agy` (Antigravity) in PATH)
|
|
68
68
|
- **CoCo requires `0.120.32+`**: type-ahead (sending a new message while a turn is still running, parked in CoCo's own message queue) relies on 0.120.32+ behavior; earlier versions may drop or serialize input while busy — upgrade before use
|
|
69
69
|
- **tmux** >= 3.x (optional — auto-enabled when installed for persistent CLI sessions)
|
|
70
70
|
- **CJK fonts** (only needed for screenshot rendering of Chinese text / emoji):
|
package/README.md
CHANGED
|
@@ -199,7 +199,7 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
|
|
|
199
199
|
## 前置要求
|
|
200
200
|
|
|
201
201
|
- **Node.js** >= 20
|
|
202
|
-
- **AI 编程 CLI / 本地 Agent 应用** 已安装并完成认证(`claude`、`codex`、`coco`、`cursor-agent`、`gemini`、`opencode`、`hermes`、`seed`(Seed CLI,Claude Code 衍生)、`pi`、`copilot`(GitHub Copilot CLI)、`traex`(TRAE CLI)或 `agy`(Antigravity)在 PATH 中)
|
|
202
|
+
- **AI 编程 CLI / 本地 Agent 应用** 已安装并完成认证(`claude`、`codex`、`coco`、`cursor-agent`、`gemini`、`opencode`、`hermes`、`seed`(Seed CLI,Claude Code 衍生)、`pi`、`omp`(oh-my-pi,Pi 衍生)、`copilot`(GitHub Copilot CLI)、`traex`(TRAE CLI)或 `agy`(Antigravity)在 PATH 中)
|
|
203
203
|
- **CoCo 最低版本 `0.120.32`**:type-ahead(会话忙时即可发新消息,由 CoCo 自己的消息队列接住)依赖 0.120.32+ 的行为;更早版本忙时输入可能丢失或串行,请升级后再用
|
|
204
204
|
- **tmux** >= 3.x(可选,安装后自动启用会话常驻)
|
|
205
205
|
- **CJK 字体**(用于截图渲染中文/emoji):
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mount an overlayfs: reads fall through to `lower` (real, zero copy); writes
|
|
3
|
+
* copy-up into `upper` (the landable changeset). `work` is overlayfs scratch on
|
|
4
|
+
* the same fs as `upper`. Returns true iff `mount` exited 0.
|
|
5
|
+
*/
|
|
6
|
+
export declare function mountOverlay(opts: {
|
|
7
|
+
lower: string;
|
|
8
|
+
upper: string;
|
|
9
|
+
work: string;
|
|
10
|
+
merged: string;
|
|
11
|
+
}): boolean;
|
|
12
|
+
/** True iff `path` is currently a mountpoint (host-side overlay still mounted). */
|
|
13
|
+
export declare function isMounted(path: string): boolean;
|
|
14
|
+
/** Unmount an overlay merged dir. Best-effort: lazy-umount (`-l`) if a normal
|
|
15
|
+
* umount fails (busy fd from a still-draining child). No-op if not a mount. */
|
|
16
|
+
export declare function unmountOverlay(merged: string): void;
|
|
17
|
+
export interface SandboxPlan {
|
|
18
|
+
/** In-sandbox path the project is bound at — equals the original workingDir the
|
|
19
|
+
* CLI was given, so the CLI's existing path args resolve. Also the child's chdir. */
|
|
20
|
+
projectMount: string;
|
|
21
|
+
/** Host path of the merged project overlay (reads=real lower, writes=upper). */
|
|
22
|
+
projectMerged: string;
|
|
23
|
+
/** In-sandbox path the home overlay is bound at — equals the real home path so
|
|
24
|
+
* every CLI's hardcoded `~/.<cli>` resolves there. */
|
|
25
|
+
home: string;
|
|
26
|
+
/** Host path of the merged home overlay. */
|
|
27
|
+
homeMerged: string;
|
|
28
|
+
/** Daemon-mediated `botmux send` outbox — bound LAST so it wins over any mask. */
|
|
29
|
+
outbox: string;
|
|
30
|
+
/** Per-bot privacy masks: directories blanked with an empty tmpfs. */
|
|
31
|
+
hideDirs: string[];
|
|
32
|
+
/** Per-bot privacy masks: files blanked with a read-only empty placeholder. */
|
|
33
|
+
hideFiles: {
|
|
34
|
+
path: string;
|
|
35
|
+
empty: string;
|
|
36
|
+
}[];
|
|
37
|
+
/** Keep network egress. File-only scope ⇒ default true (npm/pip/git work). */
|
|
38
|
+
net?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build the bwrap argv prefix. Final spawn becomes:
|
|
42
|
+
* bwrap <these args> -- <cliBin> <cliArgs...>
|
|
43
|
+
*
|
|
44
|
+
* Mount order matters (later mounts win): the whole real fs read-only first, then
|
|
45
|
+
* the home + project merged overlays bind over it (so writes there are isolated),
|
|
46
|
+
* then privacy masks blank specific paths, then the outbox binds LAST so it stays
|
|
47
|
+
* writable even if a mask covers a parent dir.
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildSandboxArgs(plan: SandboxPlan): string[];
|
|
50
|
+
/** Is file-sandbox enabled for this session? Spike gate = env; the real
|
|
51
|
+
* per-bot BotConfig.sandbox flag is decided by the caller. */
|
|
52
|
+
export declare function sandboxEnabled(): boolean;
|
|
53
|
+
export interface SandboxSpawn {
|
|
54
|
+
/** Replace the CLI binary with this (always 'bwrap'). */
|
|
55
|
+
bin: string;
|
|
56
|
+
/** bwrap args + '--' + original (bin, ...args). */
|
|
57
|
+
args: string[];
|
|
58
|
+
/** Env overrides to merge into childEnv (HOME, PATH, BOTMUX_SEND_RELAY, proxies). */
|
|
59
|
+
env: Record<string, string>;
|
|
60
|
+
/** Outbox dir the daemon watcher must service. */
|
|
61
|
+
outbox: string;
|
|
62
|
+
/** Project overlay UPPER dir — THE LANDABLE CHANGESET (used by sandbox-land). */
|
|
63
|
+
workDir: string;
|
|
64
|
+
/** HOME overlay UPPER dir (/var/tmp/botmux-sbx/<sid>/home-upper). The sandboxed
|
|
65
|
+
* CLI's $HOME writes — INCLUDING its session jsonl under CLAUDE_CONFIG_DIR —
|
|
66
|
+
* land here (invisible at the real path). The worker redirects its bridge/idle
|
|
67
|
+
* watch into this via sandboxedClaudeDataDir() so it sees the CLI's turns. */
|
|
68
|
+
homeUpper: string;
|
|
69
|
+
/** Unmount the overlays + remove the per-session sandbox tree. */
|
|
70
|
+
cleanup: () => void;
|
|
71
|
+
}
|
|
72
|
+
/** The path where a sandboxed session's CLI actually writes a $HOME-relative
|
|
73
|
+
* data dir (e.g. CLAUDE_CONFIG_DIR / `.claude-runtime`): the HOME overlay's
|
|
74
|
+
* ephemeral UPPER copy. The worker redirects its jsonl/bridge watch here so it
|
|
75
|
+
* sees the sandboxed CLI's writes (which are invisible at the real host path).
|
|
76
|
+
* Mirrors prepareSandbox's homeUpper layout — keep in sync. */
|
|
77
|
+
export declare function sandboxedClaudeDataDir(sessionId: string, realDataDir: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* Build the sandboxed spawn for a CLI session, or return null when sandboxing
|
|
80
|
+
* is off / unsupported / a required overlay mount fails (fail-safe = the worker
|
|
81
|
+
* treats null as a hard error and does NOT silently run unsandboxed).
|
|
82
|
+
*
|
|
83
|
+
* Layout under <dataDir>/sandboxes/<sessionId>/: outbox, shimbin, proj-upper
|
|
84
|
+
* (the landable changeset), proj-work, proj-merged, home-merged. The HOME
|
|
85
|
+
* overlay's upper/work live under /var/tmp/botmux-sbx/<sessionId>/ because
|
|
86
|
+
* overlayfs forbids upper/work inside the lower (= the real home).
|
|
87
|
+
*/
|
|
88
|
+
export declare function prepareSandbox(opts: {
|
|
89
|
+
/** Whether the sandbox is on for THIS session (per-bot BotConfig.sandbox OR
|
|
90
|
+
* the BOTMUX_SANDBOX env force). Decided by the caller — prepareSandbox does
|
|
91
|
+
* NOT re-read the env, so the dashboard per-bot toggle actually takes effect. */
|
|
92
|
+
enabled: boolean;
|
|
93
|
+
cliId: string;
|
|
94
|
+
sessionId: string;
|
|
95
|
+
sourceWorkingDir: string;
|
|
96
|
+
dataDir: string;
|
|
97
|
+
cliBin: string;
|
|
98
|
+
cliArgs: string[];
|
|
99
|
+
/** Per-bot privacy masks (opt-in, no defaults). Paths existing as dirs are
|
|
100
|
+
* blanked with a tmpfs; files with an empty read-only placeholder. */
|
|
101
|
+
hidePaths?: string[];
|
|
102
|
+
}): SandboxSpawn | null;
|
|
103
|
+
/**
|
|
104
|
+
* Re-attach the daemon/worker side to an ALREADY-spawned sandbox session WITHOUT
|
|
105
|
+
* touching the overlays. Used on daemon-restart reattach to a persistent
|
|
106
|
+
* (tmux/herdr/zellij) pane whose bwrap'd CLI is still alive: the CLI is bound to
|
|
107
|
+
* its own namespace-pinned overlay, so we must NOT unmount/remount (that would
|
|
108
|
+
* leave a duplicate host-side mount the CLI isn't using). We only need the outbox
|
|
109
|
+
* path back so the watcher can keep servicing the live CLI's `botmux send`, plus
|
|
110
|
+
* the workDir (upper changeset for landing) and a cleanup that tears the residue
|
|
111
|
+
* down at close/exit. Returns null if the session has no sandbox tree on disk
|
|
112
|
+
* (never sandboxed). Linux-only, mirrors prepareSandbox's layout.
|
|
113
|
+
*/
|
|
114
|
+
export declare function attachSandboxOutbox(opts: {
|
|
115
|
+
sessionId: string;
|
|
116
|
+
dataDir: string;
|
|
117
|
+
}): {
|
|
118
|
+
outbox: string;
|
|
119
|
+
workDir: string;
|
|
120
|
+
cleanup: () => void;
|
|
121
|
+
} | null;
|
|
122
|
+
/**
|
|
123
|
+
* Reclaim leaked sandbox residue.
|
|
124
|
+
*
|
|
125
|
+
* Two classes of leak are reclaimed:
|
|
126
|
+
* 1. NON-ACTIVE orphans — sid not in `activeSessionIds`: the session is gone, so
|
|
127
|
+
* any leftover mount/dir is pure residue (the original startup-sweep case,
|
|
128
|
+
* guarding against a daemon crash/kill that skipped killCli()).
|
|
129
|
+
* 2. ACTIVE-but-DEAD — sid IS in `activeSessionIds`, yet NEITHER of its merged
|
|
130
|
+
* overlays is still mounted. This closes the blind spot where a sandboxed
|
|
131
|
+
* worker was SIGKILL'd (straggler reaper) or crashed: the session stays
|
|
132
|
+
* status='active' on disk, so the old "skip if active" rule would let the
|
|
133
|
+
* leaked upper/work dirs survive across restarts indefinitely. We only GC an
|
|
134
|
+
* active sid when its mounts are ALREADY gone — we NEVER tear down a live
|
|
135
|
+
* mount (a CLI persisting in a tmux/herdr/zellij pane is still bound to it),
|
|
136
|
+
* so a genuinely-live persistent session keeps its changeset.
|
|
137
|
+
*
|
|
138
|
+
* Safe to call repeatedly: wire once at daemon bootstrap AND on a periodic timer
|
|
139
|
+
* (the SIGKILL/straggler path can't run worker-side killCli(), so a startup-only
|
|
140
|
+
* sweep would let a crashed-active session's mount survive for the whole next
|
|
141
|
+
* daemon lifetime — one daemon per bot can run for days).
|
|
142
|
+
*/
|
|
143
|
+
export declare function sweepOrphanSandboxes(dataDir: string, activeSessionIds: Set<string>): void;
|
|
144
|
+
export interface RelayRequest {
|
|
145
|
+
contentFile?: unknown;
|
|
146
|
+
attachments?: unknown;
|
|
147
|
+
flags?: unknown;
|
|
148
|
+
}
|
|
149
|
+
export interface ValidatedRelay {
|
|
150
|
+
contentName: string;
|
|
151
|
+
attachmentNames: string[];
|
|
152
|
+
flags: string[];
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* PURE validation of an outbox relay request (schema + flag allowlist only — no
|
|
156
|
+
* filesystem access, so it's deterministically testable):
|
|
157
|
+
* - contentFile/attachments must be plain basenames (no `/`, `\`, `..`).
|
|
158
|
+
* - only allowlisted presentation flags pass; any other flag → reject (this
|
|
159
|
+
* rejects raw `--content-file`/`--session-id`/path flags etc.).
|
|
160
|
+
* The TOCTOU-safe filesystem read is handled separately by materializeOutboxFile,
|
|
161
|
+
* NOT here — this function deliberately resolves no paths.
|
|
162
|
+
*/
|
|
163
|
+
export declare function validateRelayRequest(req: RelayRequest): {
|
|
164
|
+
ok: true;
|
|
165
|
+
value: ValidatedRelay;
|
|
166
|
+
} | {
|
|
167
|
+
ok: false;
|
|
168
|
+
error: string;
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* TOCTOU-safe copy of an outbox file (`outbox/<name>`, name already validated as
|
|
172
|
+
* a plain basename) into a host-private `dest`. Opens with O_NOFOLLOW so a
|
|
173
|
+
* symlink swapped in by the sandbox AFTER validation is rejected at open time,
|
|
174
|
+
* and O_NONBLOCK so opening a FIFO/special the sandbox dropped into the (rw-bound)
|
|
175
|
+
* outbox returns IMMEDIATELY instead of blocking the synchronous watcher tick
|
|
176
|
+
* forever (a FIFO with no writer would otherwise hang the whole worker event
|
|
177
|
+
* loop — an agent-triggerable DoS). After open we fstat-reject anything that
|
|
178
|
+
* isn't a regular file (a FIFO opened O_NONBLOCK|O_RDONLY succeeds but isFile()
|
|
179
|
+
* is false → rejected here). Reads from the fd (not the path), so the inode can't
|
|
180
|
+
* be swapped under us. Returns false (reject) on symlink / non-regular / any error.
|
|
181
|
+
*/
|
|
182
|
+
export declare function materializeOutboxFile(outbox: string, name: string, dest: string): boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Daemon/worker-side outbox watcher. The sandboxed `botmux send` (relay mode)
|
|
185
|
+
* drops `<id>.req.json`; we validate (validateRelayRequest) and then MATERIALIZE
|
|
186
|
+
* the content/attachments into a host-private staging dir that is NOT bound into
|
|
187
|
+
* the sandbox — closing the TOCTOU window where the sandbox could swap an outbox
|
|
188
|
+
* file for a symlink between check and the host-side read. We then re-exec THIS
|
|
189
|
+
* build's `send` OUTSIDE the sandbox (full creds) against the private copies,
|
|
190
|
+
* with the session-id FORCED. This keeps every Lark credential out of the sandbox.
|
|
191
|
+
*/
|
|
192
|
+
export declare function startOutboxWatcher(outbox: string, baseEnv: NodeJS.ProcessEnv, sessionId: string): () => void;
|
|
193
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/sandbox.ts"],"names":[],"mappings":"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"}
|