@phnx-labs/agents-cli 1.22.120 → 1.22.121
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/CHANGELOG.md +227 -0
- package/README.md +19 -2
- package/dist/bootstrap.d.ts +0 -15
- package/dist/bootstrap.js +10 -409
- package/dist/cli/command-registry.d.ts +0 -58
- package/dist/cli/command-registry.js +2 -74
- package/dist/commands/accounts.d.ts +0 -17
- package/dist/commands/accounts.js +1 -52
- package/dist/commands/alias.d.ts +0 -12
- package/dist/commands/alias.js +0 -6
- package/dist/commands/apply.d.ts +0 -15
- package/dist/commands/apply.js +0 -63
- package/dist/commands/audit.d.ts +0 -12
- package/dist/commands/audit.js +0 -13
- package/dist/commands/auth.js +4 -12
- package/dist/commands/beta.d.ts +0 -6
- package/dist/commands/beta.js +2 -6
- package/dist/commands/browser-sessions-picker.d.ts +0 -8
- package/dist/commands/browser-sessions-picker.js +0 -26
- package/dist/commands/browser.d.ts +0 -57
- package/dist/commands/browser.js +0 -80
- package/dist/commands/budget.d.ts +0 -13
- package/dist/commands/budget.js +0 -2
- package/dist/commands/cli.d.ts +0 -12
- package/dist/commands/cli.js +0 -4
- package/dist/commands/cloud.d.ts +0 -9
- package/dist/commands/cloud.js +0 -43
- package/dist/commands/commands.d.ts +0 -9
- package/dist/commands/commands.js +0 -18
- package/dist/commands/computer-sessions-picker.d.ts +0 -11
- package/dist/commands/computer-sessions-picker.js +0 -29
- package/dist/commands/computer.d.ts +0 -62
- package/dist/commands/computer.js +3 -114
- package/dist/commands/config.d.ts +0 -14
- package/dist/commands/config.js +21 -60
- package/dist/commands/cost.d.ts +0 -11
- package/dist/commands/cost.js +1 -17
- package/dist/commands/daemon-test-harness.d.ts +0 -32
- package/dist/commands/daemon-test-harness.js +1 -36
- package/dist/commands/daemon.d.ts +0 -46
- package/dist/commands/daemon.js +8 -255
- package/dist/commands/detach-core.d.ts +0 -28
- package/dist/commands/detach-core.js +0 -30
- package/dist/commands/detach.d.ts +1 -12
- package/dist/commands/detach.js +16 -52
- package/dist/commands/device-config-test-harness.js +0 -12
- package/dist/commands/doctor.d.ts +0 -103
- package/dist/commands/doctor.js +3 -279
- package/dist/commands/events.d.ts +0 -29
- package/dist/commands/events.js +1 -55
- package/dist/commands/exec.d.ts +0 -163
- package/dist/commands/exec.js +15 -964
- package/dist/commands/factory.d.ts +0 -6
- package/dist/commands/factory.js +0 -2
- package/dist/commands/feed-watch.js +0 -20
- package/dist/commands/feed.d.ts +0 -38
- package/dist/commands/feed.js +1 -151
- package/dist/commands/feedback.d.ts +0 -5
- package/dist/commands/feedback.js +0 -5
- package/dist/commands/fleet-capture.d.ts +0 -12
- package/dist/commands/fleet-capture.js +1 -39
- package/dist/commands/focus.d.ts +6 -94
- package/dist/commands/focus.js +13 -183
- package/dist/commands/fork.d.ts +0 -21
- package/dist/commands/fork.js +0 -45
- package/dist/commands/funnel.d.ts +0 -3
- package/dist/commands/go.d.ts +2 -71
- package/dist/commands/go.js +5 -99
- package/dist/commands/harness-hooks.d.ts +0 -41
- package/dist/commands/harness-hooks.js +0 -48
- package/dist/commands/harness-wizard.d.ts +0 -137
- package/dist/commands/harness-wizard.js +0 -109
- package/dist/commands/harness.d.ts +0 -63
- package/dist/commands/harness.js +0 -103
- package/dist/commands/hooks.d.ts +0 -9
- package/dist/commands/hooks.js +0 -26
- package/dist/commands/humans.d.ts +0 -8
- package/dist/commands/humans.js +0 -8
- package/dist/commands/import.d.ts +0 -22
- package/dist/commands/import.js +0 -79
- package/dist/commands/insights.d.ts +0 -37
- package/dist/commands/insights.js +3 -115
- package/dist/commands/inspect.d.ts +0 -117
- package/dist/commands/inspect.js +2 -448
- package/dist/commands/lease.d.ts +0 -28
- package/dist/commands/lease.js +0 -43
- package/dist/commands/logs.d.ts +0 -23
- package/dist/commands/logs.js +0 -30
- package/dist/commands/mailboxes.d.ts +0 -18
- package/dist/commands/mailboxes.js +0 -29
- package/dist/commands/mcp.d.ts +0 -9
- package/dist/commands/mcp.js +0 -53
- package/dist/commands/memory.d.ts +0 -7
- package/dist/commands/memory.js +0 -7
- package/dist/commands/menubar.d.ts +0 -8
- package/dist/commands/menubar.js +0 -24
- package/dist/commands/message.d.ts +0 -23
- package/dist/commands/message.js +0 -50
- package/dist/commands/mine.d.ts +0 -22
- package/dist/commands/mine.js +0 -21
- package/dist/commands/models.d.ts +0 -8
- package/dist/commands/models.js +0 -33
- package/dist/commands/modes.d.ts +0 -10
- package/dist/commands/modes.js +0 -13
- package/dist/commands/monitors.d.ts +0 -9
- package/dist/commands/monitors.js +3 -160
- package/dist/commands/open.d.ts +0 -26
- package/dist/commands/open.js +0 -10
- package/dist/commands/output.d.ts +0 -18
- package/dist/commands/output.js +1 -34
- package/dist/commands/packages-materialize.d.ts +0 -11
- package/dist/commands/packages-materialize.js +0 -3
- package/dist/commands/packages.d.ts +0 -10
- package/dist/commands/packages.js +0 -50
- package/dist/commands/perf.d.ts +0 -41
- package/dist/commands/perf.js +0 -55
- package/dist/commands/permissions.d.ts +0 -9
- package/dist/commands/permissions.js +0 -43
- package/dist/commands/plugins.d.ts +0 -14
- package/dist/commands/plugins.js +2 -55
- package/dist/commands/profiles.d.ts +0 -25
- package/dist/commands/profiles.js +0 -27
- package/dist/commands/projects-todo.d.ts +2 -0
- package/dist/commands/projects-todo.js +132 -0
- package/dist/commands/projects.d.ts +0 -85
- package/dist/commands/projects.js +344 -291
- package/dist/commands/prune.js +0 -30
- package/dist/commands/ps-roster.d.ts +92 -0
- package/dist/commands/ps-roster.js +744 -0
- package/dist/commands/ps.d.ts +6 -0
- package/dist/commands/ps.js +98 -0
- package/dist/commands/refresh-rules.d.ts +0 -13
- package/dist/commands/refresh-rules.js +0 -14
- package/dist/commands/reminders.d.ts +0 -7
- package/dist/commands/repo.d.ts +0 -89
- package/dist/commands/repo.js +7 -205
- package/dist/commands/resource-view.d.ts +0 -33
- package/dist/commands/resource-view.js +0 -49
- package/dist/commands/resume.d.ts +1 -19
- package/dist/commands/resume.js +0 -50
- package/dist/commands/route.d.ts +0 -10
- package/dist/commands/route.js +0 -19
- package/dist/commands/routines.d.ts +0 -42
- package/dist/commands/routines.js +5 -290
- package/dist/commands/routines.test-fixture.d.ts +0 -34
- package/dist/commands/routines.test-fixture.js +4 -100
- package/dist/commands/rules.d.ts +0 -9
- package/dist/commands/rules.js +1 -6
- package/dist/commands/run-account-picker.d.ts +0 -59
- package/dist/commands/run-account-picker.js +0 -71
- package/dist/commands/run-broadcast.d.ts +0 -9
- package/dist/commands/run-broadcast.js +0 -7
- package/dist/commands/run-cloud.d.ts +0 -15
- package/dist/commands/run-cloud.js +0 -37
- package/dist/commands/run-device-picker.d.ts +0 -25
- package/dist/commands/run-device-picker.js +1 -53
- package/dist/commands/secrets-passthrough.d.ts +0 -31
- package/dist/commands/secrets-passthrough.js +0 -10
- package/dist/commands/send.d.ts +0 -20
- package/dist/commands/send.js +14 -18
- package/dist/commands/sessions-backfill.d.ts +0 -7
- package/dist/commands/sessions-backfill.js +1 -16
- package/dist/commands/sessions-backup-setup.js +0 -11
- package/dist/commands/sessions-bookmark.d.ts +0 -8
- package/dist/commands/sessions-bookmark.js +0 -28
- package/dist/commands/sessions-browser.d.ts +2 -117
- package/dist/commands/sessions-browser.js +5 -243
- package/dist/commands/sessions-export.d.ts +1 -26
- package/dist/commands/sessions-export.js +3 -81
- package/dist/commands/sessions-import.d.ts +0 -14
- package/dist/commands/sessions-import.js +0 -59
- package/dist/commands/sessions-inject.d.ts +0 -60
- package/dist/commands/sessions-inject.js +3 -96
- package/dist/commands/sessions-migrate.d.ts +2 -37
- package/dist/commands/sessions-migrate.js +7 -159
- package/dist/commands/sessions-optimize.d.ts +0 -12
- package/dist/commands/sessions-picker-factory.d.ts +0 -7
- package/dist/commands/sessions-picker-factory.js +0 -8
- package/dist/commands/sessions-picker.d.ts +4 -103
- package/dist/commands/sessions-picker.js +13 -352
- package/dist/commands/sessions-render.d.ts +1 -2
- package/dist/commands/sessions-render.js +3 -7
- package/dist/commands/sessions-resume.d.ts +1 -24
- package/dist/commands/sessions-resume.js +2 -65
- package/dist/commands/sessions-share.d.ts +1 -9
- package/dist/commands/sessions-share.js +1 -45
- package/dist/commands/sessions-stats.d.ts +0 -24
- package/dist/commands/sessions-stats.js +0 -49
- package/dist/commands/sessions-stop.d.ts +1 -20
- package/dist/commands/sessions-stop.js +4 -9
- package/dist/commands/sessions-tail.d.ts +1 -19
- package/dist/commands/sessions-tail.js +3 -36
- package/dist/commands/sessions-trace.d.ts +5 -36
- package/dist/commands/sessions-trace.js +7 -82
- package/dist/commands/sessions.d.ts +1 -666
- package/dist/commands/sessions.js +30 -2279
- package/dist/commands/sessions.test-fixture.d.ts +0 -9
- package/dist/commands/sessions.test-fixture.js +8 -23
- package/dist/commands/setup-accounts.d.ts +0 -6
- package/dist/commands/setup-browser.d.ts +0 -23
- package/dist/commands/setup-browser.js +0 -28
- package/dist/commands/setup-computer.d.ts +0 -16
- package/dist/commands/setup-computer.js +0 -28
- package/dist/commands/setup-fleet.d.ts +0 -8
- package/dist/commands/setup-fleet.js +0 -11
- package/dist/commands/setup-mine.d.ts +0 -14
- package/dist/commands/setup-mine.js +0 -25
- package/dist/commands/setup-preferences.d.ts +0 -47
- package/dist/commands/setup-preferences.js +0 -53
- package/dist/commands/setup-secrets.d.ts +2 -24
- package/dist/commands/setup-secrets.js +0 -24
- package/dist/commands/setup-term.d.ts +0 -21
- package/dist/commands/setup-term.js +0 -21
- package/dist/commands/setup-terminal.d.ts +0 -1
- package/dist/commands/setup-terminal.js +0 -1
- package/dist/commands/setup-tools.d.ts +2 -0
- package/dist/commands/setup-tools.js +73 -0
- package/dist/commands/setup.d.ts +0 -20
- package/dist/commands/setup.js +4 -57
- package/dist/commands/skills.d.ts +0 -9
- package/dist/commands/skills.js +1 -22
- package/dist/commands/snapshot.d.ts +0 -9
- package/dist/commands/snapshot.js +0 -10
- package/dist/commands/ssh.d.ts +0 -64
- package/dist/commands/ssh.js +9 -420
- package/dist/commands/status.d.ts +0 -12
- package/dist/commands/status.js +0 -26
- package/dist/commands/subagents.d.ts +0 -8
- package/dist/commands/subagents.js +0 -31
- package/dist/commands/sync.d.ts +0 -37
- package/dist/commands/sync.js +0 -256
- package/dist/commands/teams-picker.d.ts +0 -3
- package/dist/commands/teams-picker.js +0 -34
- package/dist/commands/teams.d.ts +1 -76
- package/dist/commands/teams.js +9 -477
- package/dist/commands/tmux.d.ts +0 -25
- package/dist/commands/tmux.js +0 -46
- package/dist/commands/traces.js +0 -19
- package/dist/commands/trash.d.ts +0 -17
- package/dist/commands/trash.js +1 -11
- package/dist/commands/uninstall.d.ts +0 -9
- package/dist/commands/uninstall.js +0 -6
- package/dist/commands/update.d.ts +0 -22
- package/dist/commands/update.js +0 -44
- package/dist/commands/upgrade.d.ts +0 -1
- package/dist/commands/upgrade.js +0 -1
- package/dist/commands/utils.d.ts +0 -85
- package/dist/commands/utils.js +1 -95
- package/dist/commands/versions.d.ts +0 -16
- package/dist/commands/versions.js +0 -134
- package/dist/commands/view.d.ts +0 -90
- package/dist/commands/view.js +4 -343
- package/dist/commands/watchdog.d.ts +0 -19
- package/dist/commands/watchdog.js +3 -43
- package/dist/commands/webhook.d.ts +0 -8
- package/dist/commands/webhook.js +0 -14
- package/dist/commands/workflows.d.ts +0 -8
- package/dist/commands/workflows.js +0 -6
- package/dist/index.d.ts +0 -25
- package/dist/index.js +5 -119
- package/dist/lib/account-capabilities.d.ts +0 -34
- package/dist/lib/account-capabilities.js +0 -32
- package/dist/lib/account-catalog.d.ts +0 -128
- package/dist/lib/account-catalog.js +8 -154
- package/dist/lib/account-provider-registry.d.ts +0 -14
- package/dist/lib/account-provider-registry.js +0 -8
- package/dist/lib/account-registry.d.ts +0 -74
- package/dist/lib/account-registry.js +14 -189
- package/dist/lib/account-schema.d.ts +0 -19
- package/dist/lib/account-schema.js +0 -43
- package/dist/lib/accounting/account-launch.d.ts +0 -15
- package/dist/lib/accounting/account-launch.js +1 -3
- package/dist/lib/accounting/account-pool-collect.d.ts +0 -26
- package/dist/lib/accounting/account-pool-collect.js +0 -42
- package/dist/lib/accounting/account-pool.d.ts +0 -41
- package/dist/lib/accounting/account-pool.js +0 -17
- package/dist/lib/accounting/capacity.d.ts +0 -32
- package/dist/lib/accounting/capacity.js +0 -32
- package/dist/lib/accounting/rotate.d.ts +0 -518
- package/dist/lib/accounting/rotate.js +4 -598
- package/dist/lib/accounting/usage-ingest.d.ts +0 -1
- package/dist/lib/accounting/usage-ingest.js +0 -44
- package/dist/lib/accounting/usage-sync.d.ts +0 -60
- package/dist/lib/accounting/usage-sync.js +4 -51
- package/dist/lib/accounting/usage.d.ts +0 -632
- package/dist/lib/accounting/usage.js +14 -1055
- package/dist/lib/accounts/add.d.ts +0 -60
- package/dist/lib/accounts/add.js +0 -127
- package/dist/lib/accounts/auth-operation-lock.d.ts +0 -1
- package/dist/lib/accounts/auth-operation-lock.js +0 -4
- package/dist/lib/accounts/migrate.d.ts +0 -9
- package/dist/lib/accounts/migrate.js +3 -42
- package/dist/lib/accounts/slots.d.ts +0 -25
- package/dist/lib/accounts/slots.js +1 -49
- package/dist/lib/acp/client.d.ts +0 -16
- package/dist/lib/acp/client.js +0 -29
- package/dist/lib/acp/harnesses.d.ts +0 -15
- package/dist/lib/acp/harnesses.js +0 -16
- package/dist/lib/acp/run.d.ts +0 -8
- package/dist/lib/acp/run.js +0 -8
- package/dist/lib/actor.d.ts +1 -71
- package/dist/lib/actor.js +1 -99
- package/dist/lib/add-dir.d.ts +0 -46
- package/dist/lib/add-dir.js +1 -70
- package/dist/lib/address.d.ts +0 -17
- package/dist/lib/address.js +0 -15
- package/dist/lib/agent-cli-commands.d.ts +0 -10
- package/dist/lib/agent-cli-commands.js +0 -10
- package/dist/lib/agent-modes.d.ts +0 -29
- package/dist/lib/agent-modes.js +0 -31
- package/dist/lib/agent-spec/agents.d.ts +0 -426
- package/dist/lib/agent-spec/agents.js +37 -924
- package/dist/lib/agent-spec/index.d.ts +0 -5
- package/dist/lib/agent-spec/index.js +0 -14
- package/dist/lib/agent-spec/materialize.d.ts +0 -10
- package/dist/lib/agent-spec/materialize.js +2 -139
- package/dist/lib/agent-spec/package-resolve.d.ts +0 -8
- package/dist/lib/agent-spec/package-resolve.js +1 -44
- package/dist/lib/agent-spec/package-schema.d.ts +0 -2
- package/dist/lib/agent-spec/package-schema.js +0 -11
- package/dist/lib/agent-spec/package-types.d.ts +0 -27
- package/dist/lib/agent-spec/package-types.js +0 -1
- package/dist/lib/agent-spec/primitives.d.ts +0 -18
- package/dist/lib/agent-spec/primitives.js +0 -27
- package/dist/lib/agent-spec/provider.js +0 -2
- package/dist/lib/agent-spec/resolve.d.ts +0 -23
- package/dist/lib/agent-spec/resolve.js +0 -41
- package/dist/lib/agent-spec/types.d.ts +0 -34
- package/dist/lib/agent-spec/types.js +0 -6
- package/dist/lib/agents.d.ts +0 -1
- package/dist/lib/agents.js +0 -1
- package/dist/lib/analytics/mix-commands.d.ts +0 -23
- package/dist/lib/analytics/mix-commands.js +0 -26
- package/dist/lib/analytics/recipes.d.ts +0 -1
- package/dist/lib/analytics/recipes.js +5 -10
- package/dist/lib/analytics/usage-db.js +4 -6
- package/dist/lib/answer-router.d.ts +0 -61
- package/dist/lib/answer-router.js +0 -57
- package/dist/lib/app-bundle-install.d.ts +0 -13
- package/dist/lib/app-bundle-install.js +0 -50
- package/dist/lib/artifact-actions.d.ts +0 -15
- package/dist/lib/artifact-actions.js +0 -18
- package/dist/lib/artifacts-client.d.ts +0 -10
- package/dist/lib/artifacts-client.js +0 -17
- package/dist/lib/ask-classifier.d.ts +0 -38
- package/dist/lib/ask-classifier.js +0 -27
- package/dist/lib/audit/log.d.ts +0 -47
- package/dist/lib/audit/log.js +1 -59
- package/dist/lib/auth-health.d.ts +0 -213
- package/dist/lib/auth-health.js +16 -266
- package/dist/lib/auth-mint.d.ts +0 -83
- package/dist/lib/auth-mint.js +8 -85
- package/dist/lib/auto-pull-worker.d.ts +0 -10
- package/dist/lib/auto-pull-worker.js +3 -48
- package/dist/lib/auto-pull.d.ts +0 -64
- package/dist/lib/auto-pull.js +0 -79
- package/dist/lib/beta.d.ts +0 -9
- package/dist/lib/beta.js +0 -9
- package/dist/lib/binary-shadow.d.ts +0 -22
- package/dist/lib/binary-shadow.js +4 -34
- package/dist/lib/boot-profile.d.ts +0 -10
- package/dist/lib/boot-profile.js +1 -31
- package/dist/lib/brand.d.ts +0 -20
- package/dist/lib/brand.js +0 -50
- package/dist/lib/browser/context.d.ts +0 -54
- package/dist/lib/browser/context.js +0 -49
- package/dist/lib/browser/paths.d.ts +0 -21
- package/dist/lib/browser/paths.js +0 -26
- package/dist/lib/browser/record.d.ts +0 -34
- package/dist/lib/browser/record.js +0 -38
- package/dist/lib/browser/sessions-list.d.ts +1 -79
- package/dist/lib/browser/sessions-list.js +2 -98
- package/dist/lib/browser-client.d.ts +0 -112
- package/dist/lib/browser-client.js +1 -90
- package/dist/lib/budget/config.d.ts +0 -6
- package/dist/lib/budget/config.js +0 -29
- package/dist/lib/budget/enforce.d.ts +0 -50
- package/dist/lib/budget/enforce.js +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -23
- package/dist/lib/budget/ledger.js +0 -28
- package/dist/lib/budget/live-cloud.d.ts +0 -26
- package/dist/lib/budget/live-cloud.js +0 -12
- package/dist/lib/budget/live-team.d.ts +0 -17
- package/dist/lib/budget/live-team.js +1 -35
- package/dist/lib/budget/preflight.d.ts +0 -51
- package/dist/lib/budget/preflight.js +0 -36
- package/dist/lib/byok-usage.d.ts +0 -20
- package/dist/lib/byok-usage.js +1 -24
- package/dist/lib/capabilities.d.ts +0 -24
- package/dist/lib/capabilities.js +0 -29
- package/dist/lib/catchup.d.ts +0 -87
- package/dist/lib/catchup.js +1 -81
- package/dist/lib/channels/owner-forward.d.ts +0 -70
- package/dist/lib/channels/owner-forward.js +1 -43
- package/dist/lib/channels/owner-sink.js +0 -21
- package/dist/lib/channels/providers/desktop.d.ts +0 -37
- package/dist/lib/channels/providers/desktop.js +0 -72
- package/dist/lib/channels/providers/index.d.ts +0 -1
- package/dist/lib/channels/providers/index.js +2 -6
- package/dist/lib/channels/providers/mailbox.js +0 -7
- package/dist/lib/channels/providers/openclaw-telegram.js +0 -8
- package/dist/lib/channels/providers/rush.d.ts +0 -2
- package/dist/lib/channels/providers/rush.js +0 -26
- package/dist/lib/channels/providers/session.d.ts +2 -0
- package/dist/lib/channels/providers/session.js +26 -0
- package/dist/lib/channels/registry.d.ts +0 -27
- package/dist/lib/channels/registry.js +0 -10
- package/dist/lib/channels/resolve.d.ts +0 -19
- package/dist/lib/channels/resolve.js +0 -2
- package/dist/lib/channels/send.d.ts +0 -50
- package/dist/lib/channels/send.js +0 -25
- package/dist/lib/checkpoint.d.ts +0 -36
- package/dist/lib/checkpoint.js +0 -28
- package/dist/lib/claude-account-token.d.ts +0 -98
- package/dist/lib/claude-account-token.js +7 -169
- package/dist/lib/claude-statusline.d.ts +0 -41
- package/dist/lib/claude-statusline.js +0 -68
- package/dist/lib/cli-entry.d.ts +0 -26
- package/dist/lib/cli-entry.js +1 -61
- package/dist/lib/cli-resources.d.ts +31 -89
- package/dist/lib/cli-resources.js +116 -152
- package/dist/lib/cloud/antigravity.d.ts +0 -29
- package/dist/lib/cloud/antigravity.js +0 -36
- package/dist/lib/cloud/codex.d.ts +0 -8
- package/dist/lib/cloud/codex.js +0 -41
- package/dist/lib/cloud/cursor.d.ts +0 -5
- package/dist/lib/cloud/cursor.js +2 -7
- package/dist/lib/cloud/dispatch.d.ts +0 -13
- package/dist/lib/cloud/dispatch.js +1 -48
- package/dist/lib/cloud/factory.d.ts +0 -52
- package/dist/lib/cloud/factory.js +3 -67
- package/dist/lib/cloud/host.d.ts +0 -39
- package/dist/lib/cloud/host.js +5 -48
- package/dist/lib/cloud/registry.d.ts +0 -25
- package/dist/lib/cloud/registry.js +0 -29
- package/dist/lib/cloud/rush.d.ts +0 -47
- package/dist/lib/cloud/rush.js +1 -82
- package/dist/lib/cloud/session-index.d.ts +0 -27
- package/dist/lib/cloud/session-index.js +1 -32
- package/dist/lib/cloud/store.d.ts +0 -18
- package/dist/lib/cloud/store.js +0 -28
- package/dist/lib/cloud/stream.d.ts +0 -14
- package/dist/lib/cloud/stream.js +0 -25
- package/dist/lib/cloud/types.d.ts +0 -168
- package/dist/lib/cloud/types.js +0 -46
- package/dist/lib/cloudflare/creds.d.ts +0 -2
- package/dist/lib/cloudflare/creds.js +0 -14
- package/dist/lib/cloudflare/provision.d.ts +0 -8
- package/dist/lib/cloudflare/provision.js +1 -19
- package/dist/lib/codex-home.d.ts +0 -60
- package/dist/lib/codex-home.js +2 -72
- package/dist/lib/codex-policy.d.ts +0 -10
- package/dist/lib/codex-policy.js +0 -13
- package/dist/lib/command-skills.d.ts +0 -10
- package/dist/lib/command-skills.js +0 -10
- package/dist/lib/commands.d.ts +0 -74
- package/dist/lib/commands.js +0 -112
- package/dist/lib/comms-render.d.ts +0 -5
- package/dist/lib/comms-render.js +0 -5
- package/dist/lib/computer/context.d.ts +0 -23
- package/dist/lib/computer/context.js +0 -14
- package/dist/lib/computer/policy.d.ts +0 -20
- package/dist/lib/computer/policy.js +0 -53
- package/dist/lib/computer/record.d.ts +0 -33
- package/dist/lib/computer/record.js +1 -48
- package/dist/lib/computer/sessions-list.d.ts +1 -128
- package/dist/lib/computer/sessions-list.js +6 -165
- package/dist/lib/computer-client.d.ts +0 -106
- package/dist/lib/computer-client.js +5 -86
- package/dist/lib/concurrency.d.ts +0 -14
- package/dist/lib/concurrency.js +0 -3
- package/dist/lib/config-drift.d.ts +0 -31
- package/dist/lib/config-drift.js +0 -32
- package/dist/lib/config-keys.d.ts +1 -65
- package/dist/lib/config-keys.js +6 -52
- package/dist/lib/config-transfer.d.ts +0 -14
- package/dist/lib/config-transfer.js +0 -26
- package/dist/lib/convert.d.ts +0 -17
- package/dist/lib/convert.js +0 -18
- package/dist/lib/crabbox/cli.d.ts +0 -156
- package/dist/lib/crabbox/cli.js +1 -188
- package/dist/lib/crabbox/config.d.ts +0 -18
- package/dist/lib/crabbox/config.js +1 -19
- package/dist/lib/crabbox/lease.d.ts +0 -93
- package/dist/lib/crabbox/lease.js +4 -148
- package/dist/lib/crabbox/progress.d.ts +0 -56
- package/dist/lib/crabbox/progress.js +2 -49
- package/dist/lib/crabbox/runtimes.d.ts +0 -94
- package/dist/lib/crabbox/runtimes.js +1 -111
- package/dist/lib/crabbox/setup-copy.d.ts +0 -64
- package/dist/lib/crabbox/setup-copy.js +1 -53
- package/dist/lib/daemon/account-state-daemon-service.d.ts +0 -48
- package/dist/lib/daemon/account-state-daemon-service.js +2 -63
- package/dist/lib/daemon/attention-notify-service.d.ts +0 -12
- package/dist/lib/daemon/attention-notify-service.js +1 -24
- package/dist/lib/daemon/auth-sync-service.d.ts +0 -28
- package/dist/lib/daemon/auth-sync-service.js +0 -56
- package/dist/lib/daemon/catchup-service.d.ts +0 -34
- package/dist/lib/daemon/catchup-service.js +0 -30
- package/dist/lib/daemon/daemon.d.ts +0 -374
- package/dist/lib/daemon/daemon.js +44 -1049
- package/dist/lib/daemon/daemon.test-fixture.d.ts +0 -19
- package/dist/lib/daemon/daemon.test-fixture.js +1 -24
- package/dist/lib/daemon/device-probe-service.d.ts +0 -16
- package/dist/lib/daemon/device-probe-service.js +0 -20
- package/dist/lib/daemon/feed-stream-service.d.ts +0 -15
- package/dist/lib/daemon/feed-stream-service.js +0 -20
- package/dist/lib/daemon/harness-update-service.d.ts +2 -61
- package/dist/lib/daemon/harness-update-service.js +6 -86
- package/dist/lib/daemon/heartbeat-service.d.ts +0 -1
- package/dist/lib/daemon/heartbeat-service.js +0 -1
- package/dist/lib/daemon/leaked-daemons.d.ts +0 -46
- package/dist/lib/daemon/leaked-daemons.js +2 -78
- package/dist/lib/daemon/monitor-engine-service.d.ts +0 -13
- package/dist/lib/daemon/monitor-engine-service.js +3 -15
- package/dist/lib/daemon/runner.d.ts +0 -194
- package/dist/lib/daemon/runner.js +39 -760
- package/dist/lib/daemon/self-heal-service.d.ts +18 -17
- package/dist/lib/daemon/self-heal-service.js +83 -37
- package/dist/lib/daemon/self-update-service.d.ts +1 -131
- package/dist/lib/daemon/self-update-service.js +26 -189
- package/dist/lib/daemon/service.d.ts +0 -73
- package/dist/lib/daemon/service.js +0 -34
- package/dist/lib/daemon/session-index-service.d.ts +0 -12
- package/dist/lib/daemon/session-index-service.js +0 -23
- package/dist/lib/daemon/session-state-service.d.ts +0 -8
- package/dist/lib/daemon/session-state-service.js +0 -8
- package/dist/lib/daemon/session-summarizer-service.d.ts +0 -14
- package/dist/lib/daemon/session-summarizer-service.js +1 -19
- package/dist/lib/daemon/session-title-service.d.ts +0 -25
- package/dist/lib/daemon/session-title-service.js +0 -32
- package/dist/lib/daemon/state-dir-check-service.d.ts +0 -24
- package/dist/lib/daemon/state-dir-check-service.js +0 -29
- package/dist/lib/daemon/supervisor.d.ts +0 -112
- package/dist/lib/daemon/supervisor.js +4 -147
- package/dist/lib/daemon/testdata/process-view-daemon.js +0 -2
- package/dist/lib/daemon/testdata/process-view-start.js +0 -5
- package/dist/lib/daemon/tmux-reap-service.d.ts +0 -1
- package/dist/lib/daemon/tmux-reap-service.js +0 -1
- package/dist/lib/daemon/usage-sync-service.d.ts +0 -23
- package/dist/lib/daemon/usage-sync-service.js +0 -26
- package/dist/lib/daemon/watchdog-service.d.ts +0 -9
- package/dist/lib/daemon/watchdog-service.js +0 -13
- package/dist/lib/daemon/webhook-receiver-service.d.ts +0 -1
- package/dist/lib/daemon/webhook-receiver-service.js +0 -1
- package/dist/lib/daemon-health.d.ts +0 -55
- package/dist/lib/daemon-health.js +4 -77
- package/dist/lib/daemon-services.d.ts +0 -36
- package/dist/lib/daemon-services.js +0 -45
- package/dist/lib/daemon-ticks.d.ts +0 -126
- package/dist/lib/daemon-ticks.js +1 -156
- package/dist/lib/daemon-webhooks.d.ts +0 -57
- package/dist/lib/daemon-webhooks.js +2 -54
- package/dist/lib/deeplink/register.d.ts +0 -15
- package/dist/lib/deeplink/register.js +0 -60
- package/dist/lib/deeplink/url.d.ts +0 -24
- package/dist/lib/deeplink/url.js +1 -33
- package/dist/lib/device-config.d.ts +1 -192
- package/dist/lib/device-config.js +86 -240
- package/dist/lib/devices/config-migration.d.ts +0 -43
- package/dist/lib/devices/config-migration.js +7 -127
- package/dist/lib/devices/connect.d.ts +0 -168
- package/dist/lib/devices/connect.js +6 -254
- package/dist/lib/devices/device-docs.d.ts +0 -24
- package/dist/lib/devices/device-docs.js +0 -46
- package/dist/lib/devices/discovery-policy.d.ts +0 -30
- package/dist/lib/devices/discovery-policy.js +3 -34
- package/dist/lib/devices/doctor-findings.d.ts +0 -109
- package/dist/lib/devices/doctor-findings.js +30 -326
- package/dist/lib/devices/doctor-overview-cache.d.ts +0 -33
- package/dist/lib/devices/doctor-overview-cache.js +0 -81
- package/dist/lib/devices/fleet-divergence.d.ts +0 -89
- package/dist/lib/devices/fleet-divergence.js +1 -60
- package/dist/lib/devices/fleet-inventory.d.ts +0 -27
- package/dist/lib/devices/fleet-inventory.js +0 -38
- package/dist/lib/devices/fleet.d.ts +0 -95
- package/dist/lib/devices/fleet.js +0 -79
- package/dist/lib/devices/harness-inventory.d.ts +0 -75
- package/dist/lib/devices/harness-inventory.js +0 -101
- package/dist/lib/devices/health-report.d.ts +0 -37
- package/dist/lib/devices/health-report.js +0 -73
- package/dist/lib/devices/health.d.ts +0 -71
- package/dist/lib/devices/health.js +2 -82
- package/dist/lib/devices/interactive-host.d.ts +0 -10
- package/dist/lib/devices/interactive-host.js +0 -34
- package/dist/lib/devices/known-hosts.d.ts +0 -45
- package/dist/lib/devices/known-hosts.js +0 -77
- package/dist/lib/devices/pending.d.ts +0 -31
- package/dist/lib/devices/pending.js +7 -67
- package/dist/lib/devices/pool.d.ts +0 -36
- package/dist/lib/devices/pool.js +0 -30
- package/dist/lib/devices/reachability.d.ts +0 -25
- package/dist/lib/devices/reachability.js +0 -14
- package/dist/lib/devices/registry.d.ts +0 -141
- package/dist/lib/devices/registry.js +4 -151
- package/dist/lib/devices/resolve-profile.d.ts +0 -18
- package/dist/lib/devices/resolve-profile.js +0 -18
- package/dist/lib/devices/resolve-target.d.ts +0 -20
- package/dist/lib/devices/resolve-target.js +1 -51
- package/dist/lib/devices/rollout-verify.d.ts +1 -81
- package/dist/lib/devices/rollout-verify.js +0 -77
- package/dist/lib/devices/self-host.d.ts +0 -7
- package/dist/lib/devices/self-host.js +1 -29
- package/dist/lib/devices/ssh-config.d.ts +0 -18
- package/dist/lib/devices/ssh-config.js +0 -9
- package/dist/lib/devices/stats-cache.d.ts +0 -48
- package/dist/lib/devices/stats-cache.js +0 -80
- package/dist/lib/devices/sync.d.ts +0 -97
- package/dist/lib/devices/sync.js +0 -88
- package/dist/lib/devices/tailscale.d.ts +0 -18
- package/dist/lib/devices/tailscale.js +1 -38
- package/dist/lib/devices/terminfo.d.ts +0 -27
- package/dist/lib/devices/terminfo.js +2 -64
- package/dist/lib/devices/worker-pick.d.ts +0 -15
- package/dist/lib/devices/worker-pick.js +0 -48
- package/dist/lib/diff-text.d.ts +0 -18
- package/dist/lib/diff-text.js +0 -15
- package/dist/lib/doctor-diff.d.ts +0 -79
- package/dist/lib/doctor-diff.js +2 -181
- package/dist/lib/drift-sync.d.ts +0 -29
- package/dist/lib/drift-sync.js +0 -40
- package/dist/lib/drift.d.ts +0 -43
- package/dist/lib/drift.js +0 -31
- package/dist/lib/event-families.d.ts +0 -17
- package/dist/lib/event-families.js +0 -33
- package/dist/lib/event-provenance.d.ts +0 -4
- package/dist/lib/event-provenance.js +0 -5
- package/dist/lib/event-stream.d.ts +0 -29
- package/dist/lib/event-stream.js +0 -36
- package/dist/lib/events-ingest.d.ts +0 -27
- package/dist/lib/events-ingest.js +0 -54
- package/dist/lib/exec-account-home.d.ts +0 -24
- package/dist/lib/exec-account-home.js +0 -41
- package/dist/lib/exec-bounded.d.ts +1 -37
- package/dist/lib/exec-bounded.js +10 -46
- package/dist/lib/exec.d.ts +3 -583
- package/dist/lib/exec.js +18 -1025
- package/dist/lib/factory/snapshot.js +1 -15
- package/dist/lib/feed/activity-stream.d.ts +0 -27
- package/dist/lib/feed/activity-stream.js +4 -80
- package/dist/lib/feed/activity.d.ts +1 -243
- package/dist/lib/feed/activity.js +8 -273
- package/dist/lib/feed/answer.d.ts +0 -103
- package/dist/lib/feed/answer.js +0 -267
- package/dist/lib/feed/attention.d.ts +0 -56
- package/dist/lib/feed/attention.js +0 -161
- package/dist/lib/feed/envelope.d.ts +2 -17
- package/dist/lib/feed/envelope.js +0 -14
- package/dist/lib/feed/events.d.ts +0 -118
- package/dist/lib/feed/events.js +13 -213
- package/dist/lib/feed/feed.d.ts +1 -250
- package/dist/lib/feed/feed.js +24 -334
- package/dist/lib/feed/hub-server.d.ts +0 -100
- package/dist/lib/feed/hub-server.js +1 -191
- package/dist/lib/feed/hub.d.ts +0 -53
- package/dist/lib/feed/hub.js +0 -89
- package/dist/lib/feed/pr-status.d.ts +1 -19
- package/dist/lib/feed/pr-status.js +0 -18
- package/dist/lib/feed/tool-activity.d.ts +0 -59
- package/dist/lib/feed/tool-activity.js +1 -119
- package/dist/lib/feed/tools.d.ts +0 -100
- package/dist/lib/feed/tools.js +0 -89
- package/dist/lib/feed/watch.d.ts +0 -33
- package/dist/lib/feed/watch.js +2 -94
- package/dist/lib/feed-broadcast.d.ts +0 -148
- package/dist/lib/feed-broadcast.js +1 -283
- package/dist/lib/feed-outcome.d.ts +0 -50
- package/dist/lib/feed-outcome.js +1 -67
- package/dist/lib/feed-policy.d.ts +0 -6
- package/dist/lib/feed-policy.js +1 -27
- package/dist/lib/feed-post.d.ts +0 -61
- package/dist/lib/feed-post.js +4 -61
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -64
- package/dist/lib/fleet/apply.js +0 -125
- package/dist/lib/fleet/auth-sync.d.ts +0 -48
- package/dist/lib/fleet/auth-sync.js +4 -49
- package/dist/lib/fleet/capture.d.ts +0 -26
- package/dist/lib/fleet/capture.js +1 -36
- package/dist/lib/fleet/manifest.d.ts +0 -38
- package/dist/lib/fleet/manifest.js +0 -40
- package/dist/lib/fleet/types.d.ts +1 -138
- package/dist/lib/fleet/types.js +0 -12
- package/dist/lib/fleet-cache.d.ts +0 -12
- package/dist/lib/fleet-cache.js +0 -24
- package/dist/lib/fleet-shared-state.d.ts +6 -59
- package/dist/lib/fleet-shared-state.js +5 -51
- package/dist/lib/fleet-status.d.ts +0 -27
- package/dist/lib/fleet-status.js +0 -48
- package/dist/lib/format.d.ts +0 -74
- package/dist/lib/format.js +3 -77
- package/dist/lib/friction-heuristics.d.ts +0 -20
- package/dist/lib/friction-heuristics.js +0 -8
- package/dist/lib/fs-atomic.d.ts +0 -51
- package/dist/lib/fs-atomic.js +8 -66
- package/dist/lib/fs-walk.d.ts +0 -13
- package/dist/lib/fs-walk.js +0 -22
- package/dist/lib/fuzzy.d.ts +0 -29
- package/dist/lib/fuzzy.js +0 -31
- package/dist/lib/gemini-settings.js +0 -12
- package/dist/lib/git.d.ts +0 -366
- package/dist/lib/git.js +7 -574
- package/dist/lib/github/ci-failure.d.ts +30 -0
- package/dist/lib/github/ci-failure.js +95 -0
- package/dist/lib/github/gh-overload.d.ts +0 -38
- package/dist/lib/github/gh-overload.js +3 -55
- package/dist/lib/github/pr-mergeable.d.ts +3 -34
- package/dist/lib/github/pr-mergeable.js +2 -42
- package/dist/lib/github/pr-verdict.d.ts +0 -44
- package/dist/lib/github/pr-verdict.js +0 -36
- package/dist/lib/github/project-prs.d.ts +135 -105
- package/dist/lib/github/project-prs.js +530 -170
- package/dist/lib/github/release-drift.d.ts +45 -0
- package/dist/lib/github/release-drift.js +91 -0
- package/dist/lib/github/rest.d.ts +0 -50
- package/dist/lib/github/rest.js +0 -49
- package/dist/lib/github/viewer.d.ts +27 -0
- package/dist/lib/github/viewer.js +101 -0
- package/dist/lib/goose-commands.d.ts +0 -29
- package/dist/lib/goose-commands.js +3 -48
- package/dist/lib/harness/adapter.d.ts +0 -151
- package/dist/lib/harness/adapter.js +0 -41
- package/dist/lib/harness/adapters/claude.d.ts +0 -8
- package/dist/lib/harness/adapters/claude.js +0 -89
- package/dist/lib/harness/adapters/codex.js +0 -18
- package/dist/lib/harness/adapters/copilot.js +0 -3
- package/dist/lib/harness/adapters/cursor.js +0 -16
- package/dist/lib/harness/adapters/droid.js +0 -3
- package/dist/lib/harness/adapters/kimi.js +0 -19
- package/dist/lib/harness/adapters/muse.js +0 -9
- package/dist/lib/harness/adapters/opencode.js +0 -2
- package/dist/lib/harness/exec-config-version.d.ts +0 -2
- package/dist/lib/harness/exec-config-version.js +0 -13
- package/dist/lib/harness/index.js +0 -10
- package/dist/lib/harness-auth-capabilities.d.ts +0 -26
- package/dist/lib/harness-auth-capabilities.js +0 -18
- package/dist/lib/harness-connection-test.d.ts +0 -27
- package/dist/lib/harness-connection-test.js +2 -20
- package/dist/lib/heal.d.ts +0 -45
- package/dist/lib/heal.js +2 -82
- package/dist/lib/help.d.ts +0 -32
- package/dist/lib/help.js +0 -41
- package/dist/lib/helper-download.d.ts +0 -85
- package/dist/lib/helper-download.js +0 -95
- package/dist/lib/helper-versions.d.ts +0 -51
- package/dist/lib/helper-versions.js +1 -45
- package/dist/lib/hooks/cache.d.ts +0 -40
- package/dist/lib/hooks/cache.js +8 -122
- package/dist/lib/hooks/install.d.ts +0 -253
- package/dist/lib/hooks/install.js +49 -822
- package/dist/lib/hooks/match.d.ts +0 -24
- package/dist/lib/hooks/match.js +0 -31
- package/dist/lib/hooks/profile.d.ts +0 -21
- package/dist/lib/hooks/profile.js +0 -28
- package/dist/lib/hosts/credential-transport.d.ts +0 -6
- package/dist/lib/hosts/credential-transport.js +0 -17
- package/dist/lib/hosts/credentials.d.ts +0 -35
- package/dist/lib/hosts/credentials.js +0 -38
- package/dist/lib/hosts/dispatch.d.ts +0 -140
- package/dist/lib/hosts/dispatch.js +0 -176
- package/dist/lib/hosts/logs.d.ts +0 -25
- package/dist/lib/hosts/logs.js +1 -51
- package/dist/lib/hosts/option.d.ts +0 -12
- package/dist/lib/hosts/option.js +0 -12
- package/dist/lib/hosts/passthrough.d.ts +0 -129
- package/dist/lib/hosts/passthrough.js +12 -249
- package/dist/lib/hosts/progress.d.ts +0 -90
- package/dist/lib/hosts/progress.js +5 -115
- package/dist/lib/hosts/providers/devices.d.ts +0 -19
- package/dist/lib/hosts/providers/devices.js +1 -34
- package/dist/lib/hosts/providers/local.d.ts +0 -14
- package/dist/lib/hosts/providers/local.js +0 -22
- package/dist/lib/hosts/ready.d.ts +0 -99
- package/dist/lib/hosts/ready.js +0 -101
- package/dist/lib/hosts/reconcile.d.ts +0 -38
- package/dist/lib/hosts/reconcile.js +1 -50
- package/dist/lib/hosts/reconnect.d.ts +0 -75
- package/dist/lib/hosts/reconnect.js +0 -98
- package/dist/lib/hosts/registry.d.ts +0 -74
- package/dist/lib/hosts/registry.js +0 -110
- package/dist/lib/hosts/remote-cmd.d.ts +1 -228
- package/dist/lib/hosts/remote-cmd.js +19 -294
- package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +0 -1
- package/dist/lib/hosts/remote-cmd.test-fixture.js +0 -12
- package/dist/lib/hosts/remote-os.d.ts +0 -19
- package/dist/lib/hosts/remote-os.js +0 -22
- package/dist/lib/hosts/remote-session-id.d.ts +0 -22
- package/dist/lib/hosts/remote-session-id.js +0 -24
- package/dist/lib/hosts/routing-flag.d.ts +0 -21
- package/dist/lib/hosts/routing-flag.js +0 -21
- package/dist/lib/hosts/run-target.d.ts +0 -53
- package/dist/lib/hosts/run-target.js +0 -56
- package/dist/lib/hosts/session-index.d.ts +1 -53
- package/dist/lib/hosts/session-index.js +2 -59
- package/dist/lib/hosts/session-marker.d.ts +0 -31
- package/dist/lib/hosts/session-marker.js +0 -32
- package/dist/lib/hosts/ssh-config.d.ts +0 -25
- package/dist/lib/hosts/ssh-config.js +1 -32
- package/dist/lib/hosts/tasks.d.ts +0 -54
- package/dist/lib/hosts/tasks.js +0 -35
- package/dist/lib/hosts/types.d.ts +0 -39
- package/dist/lib/hosts/types.js +0 -22
- package/dist/lib/humans.d.ts +0 -21
- package/dist/lib/humans.js +0 -30
- package/dist/lib/identity/client.d.ts +1 -35
- package/dist/lib/identity/client.js +3 -29
- package/dist/lib/identity/index.d.ts +3 -27
- package/dist/lib/identity/index.js +8 -24
- package/dist/lib/import.d.ts +0 -104
- package/dist/lib/import.js +1 -137
- package/dist/lib/installations/active-check.d.ts +0 -53
- package/dist/lib/installations/active-check.js +0 -49
- package/dist/lib/installations/index.d.ts +0 -9
- package/dist/lib/installations/index.js +0 -9
- package/dist/lib/installations/installation-lock.js +0 -8
- package/dist/lib/installations/launch-gate.d.ts +0 -56
- package/dist/lib/installations/launch-gate.js +0 -83
- package/dist/lib/installations/migrate.d.ts +0 -100
- package/dist/lib/installations/migrate.js +105 -572
- package/dist/lib/installations/native-command.d.ts +0 -1
- package/dist/lib/installations/native-command.js +0 -6
- package/dist/lib/installations/resolve.d.ts +0 -24
- package/dist/lib/installations/resolve.js +0 -24
- package/dist/lib/installations/shims.d.ts +0 -395
- package/dist/lib/installations/shims.js +30 -957
- package/dist/lib/installations/store.d.ts +0 -199
- package/dist/lib/installations/store.js +1 -297
- package/dist/lib/installations/strategies.d.ts +0 -44
- package/dist/lib/installations/strategies.js +0 -87
- package/dist/lib/installations/types.d.ts +1 -67
- package/dist/lib/installations/types.js +0 -6
- package/dist/lib/installations/update-cancellation.d.ts +0 -74
- package/dist/lib/installations/update-cancellation.js +0 -74
- package/dist/lib/installations/update-policy.d.ts +0 -57
- package/dist/lib/installations/update-policy.js +0 -62
- package/dist/lib/installations/update-runtime.d.ts +0 -88
- package/dist/lib/installations/update-runtime.js +1 -127
- package/dist/lib/installations/update.d.ts +0 -53
- package/dist/lib/installations/update.js +0 -95
- package/dist/lib/installations/versions.d.ts +0 -310
- package/dist/lib/installations/versions.js +14 -837
- package/dist/lib/isolation-boundary-report.d.ts +0 -7
- package/dist/lib/isolation-boundary-report.js +0 -7
- package/dist/lib/launch-identity.d.ts +0 -8
- package/dist/lib/launch-identity.js +0 -8
- package/dist/lib/linear-autoclose.d.ts +0 -25
- package/dist/lib/linear-autoclose.js +0 -19
- package/dist/lib/linear-cache.d.ts +0 -57
- package/dist/lib/linear-cache.js +1 -81
- package/dist/lib/linear-project-counts.d.ts +0 -83
- package/dist/lib/linear-project-counts.js +2 -64
- package/dist/lib/linear-projects.d.ts +0 -62
- package/dist/lib/linear-projects.js +0 -85
- package/dist/lib/linear-rate-limit.d.ts +0 -21
- package/dist/lib/linear-rate-limit.js +1 -93
- package/dist/lib/linux-userns.d.ts +1 -42
- package/dist/lib/linux-userns.js +0 -47
- package/dist/lib/lock-compromise.d.ts +0 -7
- package/dist/lib/lock-compromise.js +0 -7
- package/dist/lib/log-follow.d.ts +0 -2
- package/dist/lib/log-follow.js +5 -15
- package/dist/lib/loop.d.ts +0 -106
- package/dist/lib/loop.js +0 -135
- package/dist/lib/machine-id.d.ts +0 -19
- package/dist/lib/machine-id.js +0 -19
- package/dist/lib/mailbox-gc.d.ts +0 -7
- package/dist/lib/mailbox-gc.js +0 -25
- package/dist/lib/mailbox-target.d.ts +0 -31
- package/dist/lib/mailbox-target.js +0 -27
- package/dist/lib/mailbox.d.ts +0 -77
- package/dist/lib/mailbox.js +5 -105
- package/dist/lib/manifest.d.ts +0 -4
- package/dist/lib/manifest.js +0 -36
- package/dist/lib/markdown.d.ts +0 -3
- package/dist/lib/markdown.js +0 -9
- package/dist/lib/mcp-registry.d.ts +1 -50
- package/dist/lib/mcp-registry.js +0 -64
- package/dist/lib/mcp.d.ts +0 -115
- package/dist/lib/mcp.js +3 -199
- package/dist/lib/memory-cache.d.ts +0 -11
- package/dist/lib/memory-cache.js +0 -9
- package/dist/lib/memory.d.ts +0 -52
- package/dist/lib/memory.js +12 -74
- package/dist/lib/menubar/download-menubar.d.ts +0 -35
- package/dist/lib/menubar/download-menubar.js +0 -38
- package/dist/lib/menubar/install-menubar.d.ts +0 -405
- package/dist/lib/menubar/install-menubar.js +25 -667
- package/dist/lib/menubar/migrate-prefs.d.ts +0 -47
- package/dist/lib/menubar/migrate-prefs.js +1 -70
- package/dist/lib/menubar/notify-desktop.d.ts +0 -82
- package/dist/lib/menubar/notify-desktop.js +0 -68
- package/dist/lib/menubar/resolve-version.d.ts +0 -41
- package/dist/lib/menubar/resolve-version.js +2 -44
- package/dist/lib/menubar/snapshot.d.ts +13 -66
- package/dist/lib/menubar/snapshot.js +45 -39
- package/dist/lib/merged-resources.d.ts +0 -10
- package/dist/lib/merged-resources.js +0 -10
- package/dist/lib/migrate-fold.d.ts +0 -31
- package/dist/lib/migrate-fold.js +6 -38
- package/dist/lib/model-tier-overrides.d.ts +0 -30
- package/dist/lib/model-tier-overrides.js +0 -14
- package/dist/lib/model-tiers.d.ts +0 -43
- package/dist/lib/model-tiers.js +5 -78
- package/dist/lib/models.d.ts +0 -145
- package/dist/lib/models.js +3 -333
- package/dist/lib/monitors/config.d.ts +0 -187
- package/dist/lib/monitors/config.js +4 -101
- package/dist/lib/monitors/dispatch.d.ts +0 -22
- package/dist/lib/monitors/dispatch.js +0 -35
- package/dist/lib/monitors/engine.d.ts +1 -53
- package/dist/lib/monitors/engine.js +17 -106
- package/dist/lib/monitors/fingerprint.d.ts +0 -43
- package/dist/lib/monitors/fingerprint.js +0 -57
- package/dist/lib/monitors/pid-watch.d.ts +0 -31
- package/dist/lib/monitors/pid-watch.js +0 -31
- package/dist/lib/monitors/remote.d.ts +0 -52
- package/dist/lib/monitors/remote.js +0 -42
- package/dist/lib/monitors/sources/command.d.ts +2 -9
- package/dist/lib/monitors/sources/command.js +13 -34
- package/dist/lib/monitors/sources/device.d.ts +0 -10
- package/dist/lib/monitors/sources/device.js +0 -14
- package/dist/lib/monitors/sources/failure.d.ts +0 -27
- package/dist/lib/monitors/sources/failure.js +0 -27
- package/dist/lib/monitors/sources/file.d.ts +0 -10
- package/dist/lib/monitors/sources/file.js +0 -11
- package/dist/lib/monitors/sources/http.d.ts +0 -7
- package/dist/lib/monitors/sources/http.js +0 -9
- package/dist/lib/monitors/sources/index.d.ts +0 -9
- package/dist/lib/monitors/sources/index.js +0 -9
- package/dist/lib/monitors/sources/poll.d.ts +0 -8
- package/dist/lib/monitors/sources/poll.js +0 -8
- package/dist/lib/monitors/sources/types.d.ts +0 -18
- package/dist/lib/monitors/sources/types.js +0 -8
- package/dist/lib/monitors/sources/webhook.d.ts +0 -7
- package/dist/lib/monitors/sources/webhook.js +0 -7
- package/dist/lib/monitors/sources/ws.d.ts +0 -10
- package/dist/lib/monitors/sources/ws.js +3 -13
- package/dist/lib/monitors/state.d.ts +0 -132
- package/dist/lib/monitors/state.js +2 -86
- package/dist/lib/native-accounts.d.ts +0 -32
- package/dist/lib/native-accounts.js +0 -17
- package/dist/lib/net-close.d.ts +0 -9
- package/dist/lib/net-close.js +0 -5
- package/dist/lib/notify.d.ts +0 -47
- package/dist/lib/notify.js +0 -30
- package/dist/lib/onepassword.d.ts +0 -14
- package/dist/lib/onepassword.js +0 -12
- package/dist/lib/open-url.d.ts +0 -38
- package/dist/lib/open-url.js +1 -69
- package/dist/lib/openclaw-keychain.js +2 -7
- package/dist/lib/operator.d.ts +0 -9
- package/dist/lib/operator.js +0 -34
- package/dist/lib/origin-machine.d.ts +0 -16
- package/dist/lib/origin-machine.js +0 -16
- package/dist/lib/output/git-output.d.ts +0 -31
- package/dist/lib/output/git-output.js +4 -43
- package/dist/lib/overdue.d.ts +0 -35
- package/dist/lib/overdue.js +0 -60
- package/dist/lib/owner-message.d.ts +0 -20
- package/dist/lib/owner-message.js +1 -40
- package/dist/lib/packages/output-home.d.ts +0 -28
- package/dist/lib/packages/output-home.js +0 -114
- package/dist/lib/paths.d.ts +0 -26
- package/dist/lib/paths.js +1 -27
- package/dist/lib/percentile.d.ts +0 -11
- package/dist/lib/percentile.js +0 -11
- package/dist/lib/perf/db.d.ts +0 -16
- package/dist/lib/perf/db.js +3 -32
- package/dist/lib/perf/spool.d.ts +0 -12
- package/dist/lib/perf/spool.js +0 -13
- package/dist/lib/perf/types.d.ts +0 -26
- package/dist/lib/perf/types.js +0 -1
- package/dist/lib/permissions-registry.d.ts +0 -48
- package/dist/lib/permissions-registry.js +0 -108
- package/dist/lib/permissions.d.ts +0 -215
- package/dist/lib/permissions.js +4 -407
- package/dist/lib/picker.d.ts +0 -124
- package/dist/lib/picker.js +0 -140
- package/dist/lib/placement.d.ts +0 -57
- package/dist/lib/placement.js +0 -47
- package/dist/lib/platform/exec.d.ts +0 -73
- package/dist/lib/platform/exec.js +0 -80
- package/dist/lib/platform/index.d.ts +0 -14
- package/dist/lib/platform/index.js +0 -14
- package/dist/lib/platform/ipc.d.ts +0 -10
- package/dist/lib/platform/ipc.js +0 -13
- package/dist/lib/platform/links.d.ts +0 -14
- package/dist/lib/platform/links.js +0 -25
- package/dist/lib/platform/paths.d.ts +0 -48
- package/dist/lib/platform/paths.js +0 -52
- package/dist/lib/platform/posixpath.d.ts +0 -18
- package/dist/lib/platform/posixpath.js +0 -62
- package/dist/lib/platform/process.d.ts +0 -67
- package/dist/lib/platform/process.js +5 -99
- package/dist/lib/platform/winpath.d.ts +0 -50
- package/dist/lib/platform/winpath.js +0 -81
- package/dist/lib/plugins/plugin-marketplace.d.ts +0 -165
- package/dist/lib/plugins/plugin-marketplace.js +10 -238
- package/dist/lib/plugins/plugins.d.ts +0 -238
- package/dist/lib/plugins/plugins.js +20 -454
- package/dist/lib/plugins/skills.d.ts +0 -86
- package/dist/lib/plugins/skills.js +1 -139
- package/dist/lib/pr-land-detach.d.ts +0 -17
- package/dist/lib/pr-land-detach.js +0 -30
- package/dist/lib/pricing/cost.d.ts +0 -29
- package/dist/lib/pricing/cost.js +0 -38
- package/dist/lib/pricing/index.d.ts +0 -6
- package/dist/lib/pricing/index.js +0 -6
- package/dist/lib/pricing/table.d.ts +0 -8
- package/dist/lib/pricing/table.js +3 -56
- package/dist/lib/probe.d.ts +0 -5
- package/dist/lib/probe.js +0 -40
- package/dist/lib/profiles-presets.d.ts +0 -20
- package/dist/lib/profiles-presets.js +1 -36
- package/dist/lib/profiles.d.ts +0 -185
- package/dist/lib/profiles.js +1 -158
- package/dist/lib/project-doctor.d.ts +0 -29
- package/dist/lib/project-doctor.js +0 -26
- package/dist/lib/project-focus.d.ts +0 -41
- package/dist/lib/project-focus.js +0 -49
- package/dist/lib/project-import.d.ts +0 -41
- package/dist/lib/project-import.js +0 -36
- package/dist/lib/project-key.d.ts +0 -65
- package/dist/lib/project-key.js +0 -70
- package/dist/lib/project-launch.d.ts +0 -49
- package/dist/lib/project-launch.js +2 -91
- package/dist/lib/project-probe.d.ts +0 -86
- package/dist/lib/project-probe.js +1 -88
- package/dist/lib/project-pull.d.ts +0 -96
- package/dist/lib/project-pull.js +0 -122
- package/dist/lib/project-resources.d.ts +0 -44
- package/dist/lib/project-resources.js +7 -171
- package/dist/lib/project-root.d.ts +0 -95
- package/dist/lib/project-root.js +0 -101
- package/dist/lib/project-schedule.d.ts +0 -43
- package/dist/lib/project-schedule.js +0 -52
- package/dist/lib/project-status.d.ts +0 -108
- package/dist/lib/project-status.js +0 -117
- package/dist/lib/projects.d.ts +0 -197
- package/dist/lib/projects.js +1 -213
- package/dist/lib/pwsh.d.ts +0 -41
- package/dist/lib/pwsh.js +0 -51
- package/dist/lib/quick-todo.d.ts +84 -0
- package/dist/lib/quick-todo.js +243 -0
- package/dist/lib/reconcile-and-repair.d.ts +0 -78
- package/dist/lib/reconcile-and-repair.js +3 -66
- package/dist/lib/redact.d.ts +0 -29
- package/dist/lib/redact.js +0 -54
- package/dist/lib/refresh-coordinator.d.ts +0 -15
- package/dist/lib/refresh-coordinator.js +0 -10
- package/dist/lib/refresh.d.ts +0 -39
- package/dist/lib/refresh.js +0 -45
- package/dist/lib/registry.d.ts +0 -65
- package/dist/lib/registry.js +0 -127
- package/dist/lib/reminders.d.ts +0 -21
- package/dist/lib/reminders.js +0 -30
- package/dist/lib/remote-agents-json.d.ts +0 -44
- package/dist/lib/remote-agents-json.js +1 -44
- package/dist/lib/reserved-stores.d.ts +0 -28
- package/dist/lib/reserved-stores.js +2 -28
- package/dist/lib/resource-aliases.d.ts +0 -12
- package/dist/lib/resource-aliases.js +0 -12
- package/dist/lib/resource-content-diff.d.ts +0 -28
- package/dist/lib/resource-content-diff.js +7 -34
- package/dist/lib/resource-inventory.d.ts +0 -51
- package/dist/lib/resource-inventory.js +0 -45
- package/dist/lib/resource-patterns.d.ts +0 -32
- package/dist/lib/resource-patterns.js +0 -34
- package/dist/lib/resource-profiles.d.ts +0 -7
- package/dist/lib/resource-profiles.js +0 -11
- package/dist/lib/resources/types.d.ts +0 -50
- package/dist/lib/resources/types.js +0 -7
- package/dist/lib/resources/workflows.d.ts +0 -7
- package/dist/lib/resources/workflows.js +0 -13
- package/dist/lib/resources.d.ts +0 -65
- package/dist/lib/resources.js +0 -78
- package/dist/lib/routers.d.ts +0 -67
- package/dist/lib/routers.js +0 -60
- package/dist/lib/routine-activation.d.ts +0 -23
- package/dist/lib/routine-activation.js +0 -24
- package/dist/lib/routine-context.d.ts +1 -91
- package/dist/lib/routine-context.js +0 -107
- package/dist/lib/routine-notify-owner.d.ts +0 -79
- package/dist/lib/routine-notify-owner.js +1 -103
- package/dist/lib/routine-notify.d.ts +0 -70
- package/dist/lib/routine-notify.js +1 -75
- package/dist/lib/routine-process-cleanup.d.ts +0 -1
- package/dist/lib/routine-process-cleanup.js +1 -4
- package/dist/lib/routine-readiness.d.ts +0 -63
- package/dist/lib/routine-readiness.js +4 -86
- package/dist/lib/routines-format.d.ts +0 -40
- package/dist/lib/routines-format.js +0 -67
- package/dist/lib/routines-placement.d.ts +0 -33
- package/dist/lib/routines-placement.js +0 -40
- package/dist/lib/routines-project.d.ts +0 -57
- package/dist/lib/routines-project.js +6 -80
- package/dist/lib/rules/compile.d.ts +0 -66
- package/dist/lib/rules/compile.js +6 -118
- package/dist/lib/rules/compose.d.ts +0 -56
- package/dist/lib/rules/compose.js +2 -83
- package/dist/lib/rules/rules.d.ts +0 -23
- package/dist/lib/rules/rules.js +0 -35
- package/dist/lib/rules/run-sync.d.ts +0 -16
- package/dist/lib/rules/run-sync.js +1 -44
- package/dist/lib/run-config.d.ts +0 -7
- package/dist/lib/run-config.js +0 -8
- package/dist/lib/run-defaults.d.ts +0 -14
- package/dist/lib/run-defaults.js +0 -14
- package/dist/lib/run-notify.d.ts +0 -18
- package/dist/lib/run-notify.js +0 -36
- package/dist/lib/run-trace-sync.d.ts +0 -21
- package/dist/lib/run-trace-sync.js +2 -66
- package/dist/lib/rush-session.d.ts +0 -26
- package/dist/lib/rush-session.js +0 -28
- package/dist/lib/sandbox.d.ts +0 -45
- package/dist/lib/sandbox.js +5 -93
- package/dist/lib/scheduler.d.ts +0 -28
- package/dist/lib/scheduler.js +0 -45
- package/dist/lib/scheduling/routines.d.ts +0 -652
- package/dist/lib/scheduling/routines.js +8 -475
- package/dist/lib/secrets-cli.d.ts +3 -8
- package/dist/lib/secrets-cli.js +1 -19
- package/dist/lib/secrets-client.d.ts +0 -117
- package/dist/lib/secrets-client.js +4 -275
- package/dist/lib/secrets-policy.d.ts +0 -142
- package/dist/lib/secrets-policy.js +4 -237
- package/dist/lib/secrets-types.d.ts +0 -87
- package/dist/lib/secrets-types.js +0 -13
- package/dist/lib/self-heal/checks/hook-manifest.js +0 -25
- package/dist/lib/self-heal/checks/hook-runtime.js +0 -5
- package/dist/lib/self-heal/checks/install-staging.d.ts +0 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -28
- package/dist/lib/self-heal/checks/menubar-helper.js +0 -5
- package/dist/lib/self-heal/checks/path.js +0 -9
- package/dist/lib/self-heal/checks/resources.js +0 -5
- package/dist/lib/self-heal/checks/shadowing.js +2 -16
- package/dist/lib/self-heal/checks/shims.js +0 -14
- package/dist/lib/self-heal/child.d.ts +12 -0
- package/dist/lib/self-heal/child.js +23 -0
- package/dist/lib/self-heal/registry.d.ts +0 -9
- package/dist/lib/self-heal/registry.js +0 -16
- package/dist/lib/self-heal/types.d.ts +0 -12
- package/dist/lib/self-heal/types.js +0 -15
- package/dist/lib/self-update.d.ts +0 -312
- package/dist/lib/self-update.js +9 -360
- package/dist/lib/service-manifest.d.ts +0 -39
- package/dist/lib/service-manifest.js +0 -72
- package/dist/lib/session/active.d.ts +13 -869
- package/dist/lib/session/active.js +17 -976
- package/dist/lib/session/actor-sidecar.d.ts +1 -32
- package/dist/lib/session/actor-sidecar.js +1 -41
- package/dist/lib/session/bookmarks.d.ts +0 -33
- package/dist/lib/session/bookmarks.js +0 -37
- package/dist/lib/session/bundle.d.ts +0 -86
- package/dist/lib/session/bundle.js +0 -54
- package/dist/lib/session/claude-accounts.d.ts +0 -40
- package/dist/lib/session/claude-accounts.js +0 -49
- package/dist/lib/session/cloud.d.ts +1 -23
- package/dist/lib/session/cloud.js +0 -26
- package/dist/lib/session/db.d.ts +5 -658
- package/dist/lib/session/db.js +22 -1443
- package/dist/lib/session/detached.d.ts +0 -21
- package/dist/lib/session/detached.js +0 -29
- package/dist/lib/session/discover.d.ts +3 -420
- package/dist/lib/session/discover.js +30 -1123
- package/dist/lib/session/fork.d.ts +1 -41
- package/dist/lib/session/fork.js +0 -19
- package/dist/lib/session/ghostty-tabs.d.ts +0 -24
- package/dist/lib/session/ghostty-tabs.js +0 -37
- package/dist/lib/session/glance-files.d.ts +19 -0
- package/dist/lib/session/glance-files.js +258 -0
- package/dist/lib/session/hook-sessions.d.ts +0 -33
- package/dist/lib/session/hook-sessions.js +4 -99
- package/dist/lib/session/host-link.d.ts +1 -94
- package/dist/lib/session/host-link.js +1 -81
- package/dist/lib/session/inject-target.d.ts +8 -0
- package/dist/lib/session/inject-target.js +32 -0
- package/dist/lib/session/inject.d.ts +0 -15
- package/dist/lib/session/inject.js +0 -15
- package/dist/lib/session/live-metadata.d.ts +1 -34
- package/dist/lib/session/live-metadata.js +1 -73
- package/dist/lib/session/local-tmux-attach.d.ts +0 -37
- package/dist/lib/session/local-tmux-attach.js +1 -76
- package/dist/lib/session/migrate-targets.d.ts +0 -46
- package/dist/lib/session/migrate-targets.js +0 -24
- package/dist/lib/session/migrations.d.ts +0 -12
- package/dist/lib/session/migrations.js +1 -20
- package/dist/lib/session/mirror.d.ts +0 -32
- package/dist/lib/session/mirror.js +0 -77
- package/dist/lib/session/origin-machine.js +0 -3
- package/dist/lib/session/pid-registry.d.ts +0 -80
- package/dist/lib/session/pid-registry.js +2 -81
- package/dist/lib/session/presence.d.ts +0 -39
- package/dist/lib/session/presence.js +2 -52
- package/dist/lib/session/process-view.d.ts +0 -11
- package/dist/lib/session/process-view.js +0 -25
- package/dist/lib/session/projection.d.ts +0 -3
- package/dist/lib/session/projection.js +0 -10
- package/dist/lib/session/provenance.d.ts +1 -37
- package/dist/lib/session/provenance.js +0 -69
- package/dist/lib/session/recovery.d.ts +1 -40
- package/dist/lib/session/recovery.js +2 -80
- package/dist/lib/session/relative-time.js +0 -3
- package/dist/lib/session/remote/peer-stream.d.ts +0 -42
- package/dist/lib/session/remote/peer-stream.js +0 -64
- package/dist/lib/session/remote/remote-bundle.d.ts +0 -6
- package/dist/lib/session/remote/remote-bundle.js +0 -21
- package/dist/lib/session/remote/remote-list.d.ts +1 -110
- package/dist/lib/session/remote/remote-list.js +5 -139
- package/dist/lib/session/remote/remote.d.ts +0 -98
- package/dist/lib/session/remote/remote.js +3 -119
- package/dist/lib/session/remote/watch.d.ts +1 -34
- package/dist/lib/session/remote/watch.js +12 -72
- package/dist/lib/session/remote-active.d.ts +0 -35
- package/dist/lib/session/remote-active.js +0 -48
- package/dist/lib/session/remote-bundle.js +0 -2
- package/dist/lib/session/remote-list.js +0 -2
- package/dist/lib/session/remote-preview-cache.d.ts +0 -7
- package/dist/lib/session/remote-preview-cache.js +1 -76
- package/dist/lib/session/remote.js +0 -2
- package/dist/lib/session/resume-command.d.ts +0 -6
- package/dist/lib/session/resume-command.js +0 -6
- package/dist/lib/session/resume-owner.d.ts +1 -52
- package/dist/lib/session/resume-owner.js +0 -56
- package/dist/lib/session/run-names.d.ts +0 -24
- package/dist/lib/session/run-names.js +0 -26
- package/dist/lib/session/session-cache.d.ts +2 -146
- package/dist/lib/session/session-cache.js +26 -203
- package/dist/lib/session/short-id.js +0 -3
- package/dist/lib/session/sync/agents.d.ts +0 -68
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +0 -39
- package/dist/lib/session/sync/backend.js +0 -45
- package/dist/lib/session/sync/config.d.ts +0 -27
- package/dist/lib/session/sync/config.js +0 -56
- package/dist/lib/session/sync/managed-config.d.ts +0 -17
- package/dist/lib/session/sync/managed-config.js +0 -17
- package/dist/lib/session/sync/managed-key.d.ts +0 -38
- package/dist/lib/session/sync/managed-key.js +1 -42
- package/dist/lib/session/sync/net-client.d.ts +0 -36
- package/dist/lib/session/sync/net-client.js +0 -30
- package/dist/lib/session/sync/provision.d.ts +0 -2
- package/dist/lib/session/sync/provision.js +0 -13
- package/dist/lib/session/sync/r2.d.ts +0 -20
- package/dist/lib/session/sync/r2.js +0 -20
- package/dist/lib/session/sync/transcript-crypto.d.ts +0 -37
- package/dist/lib/session/sync/transcript-crypto.js +5 -37
- package/dist/lib/session/sync/worker-template.d.ts +0 -5
- package/dist/lib/session/sync/worker-template.js +0 -40
- package/dist/lib/session/testdata/pid-registry-namespace.js +0 -2
- package/dist/lib/session/testdata/process-view-private.js +0 -1
- package/dist/lib/session/throughput.d.ts +0 -24
- package/dist/lib/session/throughput.js +1 -25
- package/dist/lib/session/timeline-pass.d.ts +1 -63
- package/dist/lib/session/timeline-pass.js +161 -148
- package/dist/lib/session/title.d.ts +0 -182
- package/dist/lib/session/title.js +0 -139
- package/dist/lib/session/tool-index.d.ts +2 -21
- package/dist/lib/session/tool-index.js +3 -75
- package/dist/lib/session/tool-store.d.ts +2 -48
- package/dist/lib/session/tool-store.js +1 -33
- package/dist/lib/session/viewing-in.d.ts +0 -67
- package/dist/lib/session/viewing-in.js +1 -71
- package/dist/lib/session/watch.js +0 -2
- package/dist/lib/session/width.js +0 -3
- package/dist/lib/sessions-client.d.ts +0 -46
- package/dist/lib/sessions-client.js +36 -113
- package/dist/lib/settings-manifest.d.ts +1 -17
- package/dist/lib/settings-manifest.js +4 -57
- package/dist/lib/setup-tool-install.d.ts +0 -1
- package/dist/lib/setup-tool-install.js +2 -7
- package/dist/lib/setup-tool-status.d.ts +0 -3
- package/dist/lib/setup-tool-status.js +4 -14
- package/dist/lib/sha256-asset.d.ts +0 -20
- package/dist/lib/sha256-asset.js +0 -20
- package/dist/lib/share-runtime.d.ts +0 -10
- package/dist/lib/share-runtime.js +1 -27
- package/dist/lib/shim-heal.d.ts +0 -15
- package/dist/lib/shim-heal.js +3 -29
- package/dist/lib/signin-badge.d.ts +0 -72
- package/dist/lib/signin-badge.js +0 -86
- package/dist/lib/sink-format.d.ts +0 -32
- package/dist/lib/sink-format.js +0 -14
- package/dist/lib/smart-launch.d.ts +0 -75
- package/dist/lib/smart-launch.js +1 -83
- package/dist/lib/snapshot.d.ts +0 -46
- package/dist/lib/snapshot.js +5 -31
- package/dist/lib/spinner.d.ts +0 -37
- package/dist/lib/spinner.js +0 -37
- package/dist/lib/sqlite.d.ts +0 -13
- package/dist/lib/sqlite.js +3 -71
- package/dist/lib/ssh-exec.d.ts +0 -209
- package/dist/lib/ssh-exec.js +11 -248
- package/dist/lib/ssh-tunnel.d.ts +0 -43
- package/dist/lib/ssh-tunnel.js +2 -48
- package/dist/lib/staleness/checkers/commands.d.ts +0 -4
- package/dist/lib/staleness/checkers/commands.js +0 -4
- package/dist/lib/staleness/checkers/hooks.d.ts +0 -10
- package/dist/lib/staleness/checkers/hooks.js +0 -15
- package/dist/lib/staleness/checkers/mcp.d.ts +0 -9
- package/dist/lib/staleness/checkers/mcp.js +0 -9
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -12
- package/dist/lib/staleness/checkers/permissions.js +0 -13
- package/dist/lib/staleness/checkers/plugins.d.ts +0 -8
- package/dist/lib/staleness/checkers/plugins.js +0 -8
- package/dist/lib/staleness/checkers/rules.d.ts +0 -15
- package/dist/lib/staleness/checkers/rules.js +0 -26
- package/dist/lib/staleness/checkers/skills.d.ts +0 -4
- package/dist/lib/staleness/checkers/skills.js +0 -4
- package/dist/lib/staleness/checkers/subagents.d.ts +0 -9
- package/dist/lib/staleness/checkers/subagents.js +0 -9
- package/dist/lib/staleness/checkers/types.d.ts +0 -34
- package/dist/lib/staleness/checkers/types.js +0 -19
- package/dist/lib/staleness/checkers/workflows.d.ts +0 -7
- package/dist/lib/staleness/checkers/workflows.js +0 -7
- package/dist/lib/staleness/detectors/commands.js +0 -17
- package/dist/lib/staleness/detectors/hooks.js +1 -6
- package/dist/lib/staleness/detectors/mcp.js +0 -4
- package/dist/lib/staleness/detectors/permissions.js +10 -23
- package/dist/lib/staleness/detectors/rules.js +0 -6
- package/dist/lib/staleness/detectors/skills.d.ts +0 -1
- package/dist/lib/staleness/detectors/skills.js +1 -12
- package/dist/lib/staleness/detectors/types.d.ts +0 -10
- package/dist/lib/staleness/fingerprint.d.ts +0 -19
- package/dist/lib/staleness/fingerprint.js +0 -35
- package/dist/lib/staleness/index.d.ts +0 -28
- package/dist/lib/staleness/index.js +1 -45
- package/dist/lib/staleness/layers.d.ts +0 -23
- package/dist/lib/staleness/layers.js +0 -34
- package/dist/lib/staleness/prune.d.ts +0 -71
- package/dist/lib/staleness/prune.js +2 -27
- package/dist/lib/staleness/registry.d.ts +0 -10
- package/dist/lib/staleness/registry.js +3 -33
- package/dist/lib/staleness/types.d.ts +0 -36
- package/dist/lib/staleness/types.js +0 -5
- package/dist/lib/staleness/writers/commands.js +1 -48
- package/dist/lib/staleness/writers/hooks.js +1 -18
- package/dist/lib/staleness/writers/kinds.d.ts +0 -12
- package/dist/lib/staleness/writers/kinds.js +0 -1
- package/dist/lib/staleness/writers/lazy-map.d.ts +0 -11
- package/dist/lib/staleness/writers/mcp.js +0 -13
- package/dist/lib/staleness/writers/plugins.js +0 -4
- package/dist/lib/staleness/writers/rules.d.ts +0 -1
- package/dist/lib/staleness/writers/rules.js +1 -19
- package/dist/lib/staleness/writers/skills.js +3 -14
- package/dist/lib/staleness/writers/sources.d.ts +0 -11
- package/dist/lib/staleness/writers/sources.js +0 -32
- package/dist/lib/staleness/writers/subagents.js +0 -16
- package/dist/lib/staleness/writers/types.d.ts +0 -58
- package/dist/lib/staleness/writers/workflows.js +1 -1
- package/dist/lib/standalone-tools.d.ts +24 -0
- package/dist/lib/standalone-tools.js +58 -0
- package/dist/lib/star-nudge.d.ts +0 -32
- package/dist/lib/star-nudge.js +2 -36
- package/dist/lib/startup/command-registry.d.ts +0 -45
- package/dist/lib/startup/command-registry.js +1 -46
- package/dist/lib/startup/dev-build.d.ts +0 -9
- package/dist/lib/startup/dev-build.js +1 -42
- package/dist/lib/startup/root-command.d.ts +0 -19
- package/dist/lib/startup/root-command.js +0 -19
- package/dist/lib/startup/spellcheck.d.ts +0 -13
- package/dist/lib/startup/spellcheck.js +0 -13
- package/dist/lib/state.d.ts +0 -376
- package/dist/lib/state.js +19 -737
- package/dist/lib/storage/selection.d.ts +0 -40
- package/dist/lib/storage/selection.js +0 -29
- package/dist/lib/subagents-registry.d.ts +0 -56
- package/dist/lib/subagents-registry.js +0 -99
- package/dist/lib/subagents.d.ts +0 -128
- package/dist/lib/subagents.js +1 -158
- package/dist/lib/summarizer/config.d.ts +0 -37
- package/dist/lib/summarizer/config.js +0 -37
- package/dist/lib/summarizer/pass.d.ts +0 -20
- package/dist/lib/summarizer/pass.js +1 -34
- package/dist/lib/summarizer/summarize.d.ts +1 -49
- package/dist/lib/summarizer/summarize.js +0 -35
- package/dist/lib/sync-passphrase.d.ts +0 -16
- package/dist/lib/sync-passphrase.js +1 -18
- package/dist/lib/sync-status.d.ts +0 -72
- package/dist/lib/sync-status.js +0 -55
- package/dist/lib/sync-umbrella.d.ts +0 -54
- package/dist/lib/sync-umbrella.js +0 -48
- package/dist/lib/system-run-sync.d.ts +0 -5
- package/dist/lib/system-run-sync.js +1 -31
- package/dist/lib/teams/agents.d.ts +1 -444
- package/dist/lib/teams/agents.js +11 -871
- package/dist/lib/teams/api.d.ts +2 -52
- package/dist/lib/teams/api.js +4 -63
- package/dist/lib/teams/debug.d.ts +0 -6
- package/dist/lib/teams/debug.js +0 -6
- package/dist/lib/teams/delivery.d.ts +0 -41
- package/dist/lib/teams/delivery.js +0 -32
- package/dist/lib/teams/file_ops.d.ts +0 -11
- package/dist/lib/teams/file_ops.js +0 -11
- package/dist/lib/teams/forEach.d.ts +0 -76
- package/dist/lib/teams/forEach.js +1 -77
- package/dist/lib/teams/index.d.ts +1 -7
- package/dist/lib/teams/index.js +1 -7
- package/dist/lib/teams/parsers.d.ts +0 -4
- package/dist/lib/teams/parsers.js +0 -81
- package/dist/lib/teams/persistence.d.ts +0 -2
- package/dist/lib/teams/persistence.js +0 -12
- package/dist/lib/teams/placement-probe.d.ts +0 -12
- package/dist/lib/teams/placement-probe.js +1 -51
- package/dist/lib/teams/pr-watch.d.ts +0 -107
- package/dist/lib/teams/pr-watch.js +1 -107
- package/dist/lib/teams/registry.d.ts +0 -36
- package/dist/lib/teams/registry.js +0 -47
- package/dist/lib/teams/remoteWorktree.d.ts +0 -50
- package/dist/lib/teams/remoteWorktree.js +1 -96
- package/dist/lib/teams/scheduler.d.ts +0 -111
- package/dist/lib/teams/scheduler.js +2 -125
- package/dist/lib/teams/summarizer.d.ts +0 -22
- package/dist/lib/teams/summarizer.js +6 -50
- package/dist/lib/teams/supervisor.d.ts +0 -38
- package/dist/lib/teams/supervisor.js +0 -21
- package/dist/lib/teams/worktree.d.ts +0 -95
- package/dist/lib/teams/worktree.js +3 -110
- package/dist/lib/template.d.ts +0 -21
- package/dist/lib/template.js +0 -23
- package/dist/lib/term-client.d.ts +0 -26
- package/dist/lib/term-client.js +0 -48
- package/dist/lib/term-driver.d.ts +0 -5
- package/dist/lib/term-driver.js +0 -8
- package/dist/lib/terminal/backends/ghostty.d.ts +0 -2
- package/dist/lib/terminal/backends/ghostty.js +0 -12
- package/dist/lib/terminal/backends/index.d.ts +0 -17
- package/dist/lib/terminal/backends/index.js +0 -15
- package/dist/lib/terminal/backends/iterm.d.ts +0 -2
- package/dist/lib/terminal/backends/iterm.js +0 -10
- package/dist/lib/terminal/backends/terminal-app.d.ts +0 -10
- package/dist/lib/terminal/backends/terminal-app.js +0 -30
- package/dist/lib/terminal/backends/tmux.d.ts +0 -10
- package/dist/lib/terminal/backends/tmux.js +0 -2
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +0 -25
- package/dist/lib/terminal/backends/vscodium-agent.js +0 -36
- package/dist/lib/terminal/engine.d.ts +0 -17
- package/dist/lib/terminal/engine.js +0 -10
- package/dist/lib/terminal/index.d.ts +0 -8
- package/dist/lib/terminal/inject.d.ts +1 -173
- package/dist/lib/terminal/inject.js +0 -146
- package/dist/lib/terminal/policy.d.ts +0 -8
- package/dist/lib/terminal/policy.js +0 -1
- package/dist/lib/terminal/preferred.d.ts +0 -66
- package/dist/lib/terminal/preferred.js +0 -30
- package/dist/lib/terminal/quote.d.ts +0 -8
- package/dist/lib/terminal/quote.js +0 -8
- package/dist/lib/terminal/resolve.d.ts +0 -46
- package/dist/lib/terminal/resolve.js +0 -30
- package/dist/lib/terminal/run-surface.d.ts +0 -56
- package/dist/lib/terminal/run-surface.js +0 -46
- package/dist/lib/terminal/shell.d.ts +0 -3
- package/dist/lib/terminal/shell.js +0 -13
- package/dist/lib/terminal/transport.d.ts +0 -14
- package/dist/lib/terminal/transport.js +1 -30
- package/dist/lib/terminal/types.d.ts +0 -40
- package/dist/lib/terminal/types.js +0 -10
- package/dist/lib/text/relative-time.d.ts +0 -36
- package/dist/lib/text/relative-time.js +0 -43
- package/dist/lib/text/short-id.d.ts +0 -16
- package/dist/lib/text/short-id.js +0 -16
- package/dist/lib/text/width.d.ts +0 -24
- package/dist/lib/text/width.js +10 -52
- package/dist/lib/tmux/binary.d.ts +0 -36
- package/dist/lib/tmux/binary.js +0 -28
- package/dist/lib/tmux/index.d.ts +0 -5
- package/dist/lib/tmux/index.js +0 -5
- package/dist/lib/tmux/orphan-reap.d.ts +0 -253
- package/dist/lib/tmux/orphan-reap.js +3 -299
- package/dist/lib/tmux/paths.d.ts +0 -14
- package/dist/lib/tmux/paths.js +0 -14
- package/dist/lib/tmux/session.d.ts +0 -263
- package/dist/lib/tmux/session.js +6 -344
- package/dist/lib/traces/backend.d.ts +0 -20
- package/dist/lib/traces/backend.js +0 -23
- package/dist/lib/traces/classify.d.ts +0 -20
- package/dist/lib/traces/classify.js +0 -7
- package/dist/lib/traces/insights.d.ts +1 -84
- package/dist/lib/traces/insights.js +0 -126
- package/dist/lib/traces/phenotype.d.ts +0 -69
- package/dist/lib/traces/phenotype.js +0 -150
- package/dist/lib/traces/provision.d.ts +0 -1
- package/dist/lib/traces/provision.js +0 -5
- package/dist/lib/traces/schema2-build.d.ts +3 -60
- package/dist/lib/traces/schema2-build.js +8 -149
- package/dist/lib/traces/schema2-danger.d.ts +0 -30
- package/dist/lib/traces/schema2-danger.js +1 -63
- package/dist/lib/traces/schema2.d.ts +0 -11
- package/dist/lib/traces/segments.d.ts +0 -44
- package/dist/lib/traces/segments.js +0 -65
- package/dist/lib/traces/sync.d.ts +2 -239
- package/dist/lib/traces/sync.js +15 -237
- package/dist/lib/traces/worker-template.d.ts +0 -3
- package/dist/lib/traces/worker-template.js +0 -29
- package/dist/lib/triggers/handlers.d.ts +0 -82
- package/dist/lib/triggers/handlers.js +0 -75
- package/dist/lib/triggers/webhook.d.ts +0 -158
- package/dist/lib/triggers/webhook.js +0 -143
- package/dist/lib/types.d.ts +0 -736
- package/dist/lib/types.js +0 -50
- package/dist/lib/uninstall.d.ts +0 -17
- package/dist/lib/uninstall.js +0 -75
- package/dist/lib/usage-backoff.d.ts +0 -20
- package/dist/lib/usage-backoff.js +3 -60
- package/dist/lib/usage-refresh.d.ts +0 -154
- package/dist/lib/usage-refresh.js +8 -212
- package/dist/lib/verbs.d.ts +0 -12
- package/dist/lib/verbs.js +0 -12
- package/dist/lib/version-duplicates.d.ts +0 -6
- package/dist/lib/version-duplicates.js +0 -6
- package/dist/lib/version.d.ts +0 -55
- package/dist/lib/version.js +1 -58
- package/dist/lib/view-types.d.ts +0 -48
- package/dist/lib/warn-unpushed.d.ts +0 -27
- package/dist/lib/warn-unpushed.js +1 -45
- package/dist/lib/watchdog/history.d.ts +0 -1
- package/dist/lib/watchdog/history.js +0 -3
- package/dist/lib/watchdog/index.js +0 -2
- package/dist/lib/watchdog/log.d.ts +0 -19
- package/dist/lib/watchdog/log.js +0 -34
- package/dist/lib/watchdog/read.d.ts +0 -27
- package/dist/lib/watchdog/read.js +3 -58
- package/dist/lib/watchdog/rotate.d.ts +0 -139
- package/dist/lib/watchdog/rotate.js +2 -151
- package/dist/lib/watchdog/runner.d.ts +0 -125
- package/dist/lib/watchdog/runner.js +3 -223
- package/dist/lib/watchdog/service.d.ts +0 -1
- package/dist/lib/watchdog/service.js +0 -2
- package/dist/lib/watchdog/watchdog-agent.d.ts +0 -31
- package/dist/lib/watchdog/watchdog-agent.js +0 -27
- package/dist/lib/watchdog/watchdog.d.ts +0 -7
- package/dist/lib/watchdog/watchdog.js +0 -10
- package/dist/lib/watchdog/watchdogTail.js +0 -7
- package/dist/lib/whats-new.d.ts +0 -10
- package/dist/lib/whats-new.js +0 -21
- package/dist/lib/workflows-registry.d.ts +0 -45
- package/dist/lib/workflows-registry.js +0 -60
- package/dist/lib/workflows.d.ts +0 -282
- package/dist/lib/workflows.js +3 -213
- package/dist/lib/worktree/held.d.ts +0 -89
- package/dist/lib/worktree/held.js +1 -103
- package/dist/lib/wrap.d.ts +0 -32
- package/dist/lib/wrap.js +0 -32
- package/dist/lib/yaml-io.d.ts +0 -45
- package/dist/lib/yaml-io.js +0 -47
- package/dist/session-tracker/dist/adapters/claude.js +0 -2
- package/dist/session-tracker/dist/hook.sh +4 -37
- package/dist/session-tracker/dist/index.d.ts +0 -7
- package/dist/session-tracker/dist/index.js +0 -5
- package/dist/session-tracker/dist/install-hook.d.ts +0 -5
- package/dist/session-tracker/dist/install-hook.js +1 -15
- package/dist/session-tracker/dist/prune-state.js +0 -4
- package/dist/session-tracker/dist/reader.js +0 -4
- package/dist/session-tracker/dist/state-file.d.ts +0 -3
- package/dist/session-tracker/dist/state-file.js +3 -8
- package/package.json +3 -4
- package/scripts/postinstall.js +8 -116
- package/dist/lib/session/artifacts.d.ts +0 -14
- package/dist/lib/session/artifacts.js +0 -101
- package/dist/lib/session/bash-command.d.ts +0 -63
- package/dist/lib/session/bash-command.js +0 -490
- package/dist/lib/session/digest.d.ts +0 -66
- package/dist/lib/session/digest.js +0 -328
- package/dist/lib/session/highlights.d.ts +0 -151
- package/dist/lib/session/highlights.js +0 -391
- package/dist/lib/session/insights.d.ts +0 -165
- package/dist/lib/session/insights.js +0 -563
- package/dist/lib/session/linear.d.ts +0 -19
- package/dist/lib/session/linear.js +0 -99
- package/dist/lib/session/parse.d.ts +0 -224
- package/dist/lib/session/parse.js +0 -2408
- package/dist/lib/session/prompt.d.ts +0 -213
- package/dist/lib/session/prompt.js +0 -601
- package/dist/lib/session/render.d.ts +0 -133
- package/dist/lib/session/render.js +0 -1047
- package/dist/lib/session/share-html.d.ts +0 -35
- package/dist/lib/session/share-html.js +0 -319
- package/dist/lib/session/shell-programs.d.ts +0 -33
- package/dist/lib/session/shell-programs.js +0 -380
- package/dist/lib/session/state.d.ts +0 -269
- package/dist/lib/session/state.js +0 -777
- package/dist/lib/session/stream-render.d.ts +0 -4
- package/dist/lib/session/stream-render.js +0 -131
- package/dist/lib/session/tail.d.ts +0 -88
- package/dist/lib/session/tail.js +0 -294
- package/dist/lib/session/team-filter.d.ts +0 -129
- package/dist/lib/session/team-filter.js +0 -269
- package/dist/lib/session/timeline.d.ts +0 -172
- package/dist/lib/session/timeline.js +0 -636
- package/dist/lib/session/tool-calls.d.ts +0 -132
- package/dist/lib/session/tool-calls.js +0 -674
- package/dist/lib/session/trajectory-compare.d.ts +0 -48
- package/dist/lib/session/trajectory-compare.js +0 -116
- package/dist/lib/session/trajectory-html.d.ts +0 -19
- package/dist/lib/session/trajectory-html.js +0 -771
- package/dist/lib/session/trajectory-lineage.d.ts +0 -93
- package/dist/lib/session/trajectory-lineage.js +0 -195
- package/dist/lib/session/trajectory-text.d.ts +0 -38
- package/dist/lib/session/trajectory-text.js +0 -284
- package/dist/lib/session/trajectory.d.ts +0 -145
- package/dist/lib/session/trajectory.js +0 -394
- package/dist/lib/session/types.d.ts +0 -627
- package/dist/lib/session/types.js +0 -43
package/dist/lib/permissions.js
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Permission management for AI coding agents.
|
|
3
|
-
*
|
|
4
|
-
* Provides a canonical permission format (PermissionSet with allow/deny rules)
|
|
5
|
-
* and converters to/from each agent's native format (Claude settings.json,
|
|
6
|
-
* OpenCode opencode.jsonc, Codex config.toml + .rules). Handles discovery,
|
|
7
|
-
* installation, removal, and merging of permission groups stored in
|
|
8
|
-
* ~/.agents/permissions/groups/.
|
|
9
|
-
*/
|
|
10
1
|
import * as fs from 'fs';
|
|
11
2
|
import * as path from 'path';
|
|
12
3
|
import * as os from 'os';
|
|
@@ -17,9 +8,6 @@ import { safeJoin } from './paths.js';
|
|
|
17
8
|
import { agentConfigDirName } from './agents.js';
|
|
18
9
|
import { supports } from './capabilities.js';
|
|
19
10
|
import { updateGeminiSettings } from './gemini-settings.js';
|
|
20
|
-
// The canonical<->native tool vocabularies live in the registry, which also owns
|
|
21
|
-
// the reverse projections — so the serializers below and the readers there can
|
|
22
|
-
// never disagree about what `fs_read` or `developer__shell` means.
|
|
23
11
|
import { ANTIGRAVITY_ACTION_BY_TOOL, CANONICAL_TO_OPENCLAW_TOOL, CODEX_RULES_FILENAME, stripJsonComments, GROK_TOOL_BY_CANONICAL, PERMISSION_TARGETS, readCanonicalPermissions, } from './permissions-registry.js';
|
|
24
12
|
export { CODEX_RULES_FILENAME };
|
|
25
13
|
const HOME = os.homedir();
|
|
@@ -80,20 +68,12 @@ export function containsBroadGrants(rules) {
|
|
|
80
68
|
return null;
|
|
81
69
|
return { broad, reason: Array.from(reasons).join('; ') };
|
|
82
70
|
}
|
|
83
|
-
/**
|
|
84
|
-
* Convert canonical deny rules to Codex Starlark .rules format.
|
|
85
|
-
* E.g. "Bash(git reset:*)" -> prefix_rule(pattern=["git", "reset"], decision="forbidden")
|
|
86
|
-
*
|
|
87
|
-
* Inverse: `toCanonical` for `PERMISSION_TARGETS.codex` reads
|
|
88
|
-
* `.codex/rules/agents-deny.rules` back into `Bash(<parts>:*)`.
|
|
89
|
-
*/
|
|
90
71
|
export function convertDenyToCodexRules(deny) {
|
|
91
72
|
const rules = [];
|
|
92
73
|
for (const perm of deny) {
|
|
93
74
|
const parsed = parseCanonicalPattern(perm);
|
|
94
75
|
if (!parsed || parsed.tool !== 'bash')
|
|
95
76
|
continue;
|
|
96
|
-
// Pattern format: "command arg1 arg2:*" or "command:*"
|
|
97
77
|
const command = parsed.pattern.replace(/:?\*$/, '').trim();
|
|
98
78
|
if (!command)
|
|
99
79
|
continue;
|
|
@@ -105,12 +85,6 @@ export function convertDenyToCodexRules(deny) {
|
|
|
105
85
|
return null;
|
|
106
86
|
return `# Auto-generated by agents-cli from deny permission groups.\n# Do not edit manually — re-run "agents use" to regenerate.\n\n${rules.join('\n\n')}\n`;
|
|
107
87
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Write `.codex/rules/agents-deny.rules` to match `deny`, or delete it when
|
|
110
|
-
* the current set has nothing to forbid. The reader (PHNX-2703) now surfaces
|
|
111
|
-
* this file, so a later apply with an empty deny must not leave a stale
|
|
112
|
-
* forbid behind — `agents permissions list codex` would keep reporting it.
|
|
113
|
-
*/
|
|
114
88
|
function syncCodexDenyRules(configDir, deny) {
|
|
115
89
|
const rulesPath = path.join(configDir, 'rules', CODEX_RULES_FILENAME);
|
|
116
90
|
const rulesContent = deny && deny.length > 0 ? convertDenyToCodexRules(deny) : null;
|
|
@@ -123,18 +97,12 @@ function syncCodexDenyRules(configDir, deny) {
|
|
|
123
97
|
fs.unlinkSync(rulesPath);
|
|
124
98
|
}
|
|
125
99
|
}
|
|
126
|
-
/**
|
|
127
|
-
* Ensure central permissions directory exists.
|
|
128
|
-
*/
|
|
129
100
|
function ensurePermissionsDir() {
|
|
130
101
|
const groupsDir = path.join(getUserPermissionsDir(), 'groups');
|
|
131
102
|
if (!fs.existsSync(groupsDir)) {
|
|
132
103
|
fs.mkdirSync(groupsDir, { recursive: true });
|
|
133
104
|
}
|
|
134
105
|
}
|
|
135
|
-
/**
|
|
136
|
-
* Parse a permission set from a YAML file.
|
|
137
|
-
*/
|
|
138
106
|
export function parsePermissionSet(filePath) {
|
|
139
107
|
if (!fs.existsSync(filePath)) {
|
|
140
108
|
return null;
|
|
@@ -157,12 +125,8 @@ export function parsePermissionSet(filePath) {
|
|
|
157
125
|
return null;
|
|
158
126
|
}
|
|
159
127
|
}
|
|
160
|
-
/**
|
|
161
|
-
* Discover permission sets from a repository.
|
|
162
|
-
*/
|
|
163
128
|
export function discoverPermissionsFromRepo(repoPath) {
|
|
164
129
|
const results = [];
|
|
165
|
-
// Look for permissions in common locations
|
|
166
130
|
const searchPaths = [
|
|
167
131
|
path.join(repoPath, 'permissions'),
|
|
168
132
|
path.join(repoPath, 'agent-permissions'),
|
|
@@ -190,19 +154,13 @@ export function discoverPermissionsFromRepo(repoPath) {
|
|
|
190
154
|
}
|
|
191
155
|
}
|
|
192
156
|
catch {
|
|
193
|
-
// Skip inaccessible directories
|
|
194
157
|
}
|
|
195
158
|
}
|
|
196
159
|
return results;
|
|
197
160
|
}
|
|
198
|
-
/**
|
|
199
|
-
* Discover permission groups from ~/.agents/permissions/groups/.
|
|
200
|
-
* Returns groups with their rule counts.
|
|
201
|
-
*/
|
|
202
161
|
export function discoverPermissionGroups() {
|
|
203
162
|
const seen = new Set();
|
|
204
163
|
const groups = [];
|
|
205
|
-
// Search user dir first, then system (user wins on name collision)
|
|
206
164
|
for (const baseDir of [getUserPermissionsDir(), getPermissionsDir()]) {
|
|
207
165
|
const groupsDir = path.join(baseDir, 'groups');
|
|
208
166
|
if (!fs.existsSync(groupsDir))
|
|
@@ -225,27 +183,19 @@ export function discoverPermissionGroups() {
|
|
|
225
183
|
const matches = content.match(/^\s*-\s*"/gm);
|
|
226
184
|
ruleCount = matches ? matches.length : 0;
|
|
227
185
|
}
|
|
228
|
-
catch {
|
|
186
|
+
catch { }
|
|
229
187
|
groups.push({ name, ruleCount, path: filePath });
|
|
230
188
|
}
|
|
231
189
|
}
|
|
232
|
-
catch {
|
|
190
|
+
catch { }
|
|
233
191
|
}
|
|
234
192
|
return groups.sort((a, b) => a.name.localeCompare(b.name));
|
|
235
193
|
}
|
|
236
|
-
/**
|
|
237
|
-
* Get total rule count across all permission groups.
|
|
238
|
-
*/
|
|
239
194
|
export function getTotalPermissionRuleCount() {
|
|
240
195
|
const groups = discoverPermissionGroups();
|
|
241
196
|
return groups.reduce((sum, g) => sum + g.ruleCount, 0);
|
|
242
197
|
}
|
|
243
|
-
/** Env var that selects which set recipe to apply at sync time. */
|
|
244
198
|
export const PERMISSION_PRESET_ENV_VAR = 'AGENTS_PERMISSION_PRESET';
|
|
245
|
-
/**
|
|
246
|
-
* Read a permission preset recipe by name from ~/.agents/permissions/presets/.
|
|
247
|
-
* Returns null if the recipe file is missing or malformed.
|
|
248
|
-
*/
|
|
249
199
|
export function readPermissionPresetRecipe(name) {
|
|
250
200
|
const presetsDir = path.join(getPermissionsDir(), 'presets');
|
|
251
201
|
for (const ext of ['.yaml', '.yml']) {
|
|
@@ -271,26 +221,14 @@ export function readPermissionPresetRecipe(name) {
|
|
|
271
221
|
}
|
|
272
222
|
return null;
|
|
273
223
|
}
|
|
274
|
-
/**
|
|
275
|
-
* Return the active permission preset name from AGENTS_PERMISSION_PRESET env var,
|
|
276
|
-
* or null if unset. Caller decides the default behavior when null.
|
|
277
|
-
*/
|
|
278
224
|
export function getActivePermissionPresetName() {
|
|
279
225
|
const v = process.env[PERMISSION_PRESET_ENV_VAR];
|
|
280
226
|
return v && v.trim() ? v.trim() : null;
|
|
281
227
|
}
|
|
282
|
-
/**
|
|
283
|
-
* Build a PermissionSet from selected groups.
|
|
284
|
-
* Concatenates allow/deny rules from each group.
|
|
285
|
-
*
|
|
286
|
-
* Uses line-by-line regex extraction instead of YAML parsing because
|
|
287
|
-
* permission files often contain unescaped nested quotes that break YAML.
|
|
288
|
-
*/
|
|
289
228
|
export function buildPermissionsFromGroups(groupNames) {
|
|
290
229
|
const allAllow = [];
|
|
291
230
|
const allDeny = [];
|
|
292
231
|
for (const groupName of groupNames) {
|
|
293
|
-
// Search user dir first, then system dir
|
|
294
232
|
let filePath = null;
|
|
295
233
|
for (const baseDir of [getUserPermissionsDir(), getPermissionsDir()]) {
|
|
296
234
|
const groupsDir = path.join(baseDir, 'groups');
|
|
@@ -308,14 +246,6 @@ export function buildPermissionsFromGroups(groupNames) {
|
|
|
308
246
|
continue;
|
|
309
247
|
try {
|
|
310
248
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
311
|
-
// Extract rules using line-by-line regex (more robust than YAML parsing)
|
|
312
|
-
// Matches lines like: - "Bash(git *)" or - "WebFetch(domain:example.com)"
|
|
313
|
-
// Handles nested quotes that break YAML parsers.
|
|
314
|
-
// Split on CRLF or LF: git checks group yaml out with CRLF on Windows
|
|
315
|
-
// (core.autocrlf), and a plain split('\n') leaves a trailing '\r' so the
|
|
316
|
-
// closing-quote anchor `"$` never matches — extracting ZERO rules, which
|
|
317
|
-
// wrote an empty permission set and left `agents sync` unable to
|
|
318
|
-
// reconcile permissions on Windows forever (PHNX-3187).
|
|
319
249
|
const lines = content.split(/\r?\n/);
|
|
320
250
|
let section = null;
|
|
321
251
|
for (const line of lines) {
|
|
@@ -324,13 +254,9 @@ export function buildPermissionsFromGroups(groupNames) {
|
|
|
324
254
|
section = sectionMatch[1];
|
|
325
255
|
continue;
|
|
326
256
|
}
|
|
327
|
-
// Match: optional whitespace, dash, whitespace, quote, content, quote
|
|
328
|
-
// Use greedy match to capture everything between first and last quote
|
|
329
257
|
const match = line.match(/^\s*-\s*"(.+)"$/);
|
|
330
258
|
if (match) {
|
|
331
259
|
const rule = match[1];
|
|
332
|
-
// 99-deny group rules go to deny, others follow their YAML section.
|
|
333
|
-
// Legacy group files used bare lists with no section; keep those as allow.
|
|
334
260
|
if (section === 'deny' || groupName === '99-deny' || groupName.includes('-deny')) {
|
|
335
261
|
allDeny.push(rule);
|
|
336
262
|
}
|
|
@@ -341,7 +267,6 @@ export function buildPermissionsFromGroups(groupNames) {
|
|
|
341
267
|
}
|
|
342
268
|
}
|
|
343
269
|
catch {
|
|
344
|
-
// Skip files we can't read
|
|
345
270
|
}
|
|
346
271
|
}
|
|
347
272
|
return {
|
|
@@ -351,11 +276,6 @@ export function buildPermissionsFromGroups(groupNames) {
|
|
|
351
276
|
deny: allDeny.length > 0 ? allDeny : undefined,
|
|
352
277
|
};
|
|
353
278
|
}
|
|
354
|
-
/**
|
|
355
|
-
* List installed permission sets from central storage.
|
|
356
|
-
* User dir takes precedence; system entries are surfaced when user has no
|
|
357
|
-
* same-named override.
|
|
358
|
-
*/
|
|
359
279
|
export function listInstalledPermissions() {
|
|
360
280
|
ensureAgentsDir();
|
|
361
281
|
const seen = new Set();
|
|
@@ -382,14 +302,10 @@ export function listInstalledPermissions() {
|
|
|
382
302
|
}
|
|
383
303
|
}
|
|
384
304
|
catch {
|
|
385
|
-
// Skip inaccessible directory
|
|
386
305
|
}
|
|
387
306
|
}
|
|
388
307
|
return results;
|
|
389
308
|
}
|
|
390
|
-
/**
|
|
391
|
-
* Get a specific permission set by name. Searches user groups/ dir first, then system groups/.
|
|
392
|
-
*/
|
|
393
309
|
function getPermissionSet(name) {
|
|
394
310
|
for (const baseDir of [getUserPermissionsDir(), getPermissionsDir()]) {
|
|
395
311
|
const dir = path.join(baseDir, 'groups');
|
|
@@ -405,9 +321,6 @@ function getPermissionSet(name) {
|
|
|
405
321
|
}
|
|
406
322
|
return null;
|
|
407
323
|
}
|
|
408
|
-
/**
|
|
409
|
-
* Install a permission set to user-level central storage.
|
|
410
|
-
*/
|
|
411
324
|
export function installPermissionSet(sourcePath, name) {
|
|
412
325
|
ensurePermissionsDir();
|
|
413
326
|
const set = parsePermissionSet(sourcePath);
|
|
@@ -423,10 +336,6 @@ export function installPermissionSet(sourcePath, name) {
|
|
|
423
336
|
return { success: false, error: err.message };
|
|
424
337
|
}
|
|
425
338
|
}
|
|
426
|
-
/**
|
|
427
|
-
* Remove a permission set from user-level central storage. System-shipped
|
|
428
|
-
* sets are intentionally not deletable from user commands.
|
|
429
|
-
*/
|
|
430
339
|
export function removePermissionSet(name) {
|
|
431
340
|
const groupsDir = path.join(getUserPermissionsDir(), 'groups');
|
|
432
341
|
for (const ext of ['.yml', '.yaml']) {
|
|
@@ -443,26 +352,12 @@ export function removePermissionSet(name) {
|
|
|
443
352
|
}
|
|
444
353
|
return { success: false, error: `Permission set '${name}' not found` };
|
|
445
354
|
}
|
|
446
|
-
// ============================================================================
|
|
447
|
-
// Agent-specific converters
|
|
448
|
-
// ============================================================================
|
|
449
|
-
/**
|
|
450
|
-
* Map a canonical rule to Claude settings.json syntax.
|
|
451
|
-
* Claude's file-permission checks only match Edit(path) rules — an Edit rule
|
|
452
|
-
* covers every file-editing tool (Write, Edit, NotebookEdit) — and Claude
|
|
453
|
-
* warns at startup about unmatched Write(path) rules. Canonical Write(path)
|
|
454
|
-
* stays for other agents' converters; for Claude it is emitted as Edit(path).
|
|
455
|
-
*/
|
|
456
355
|
function canonicalToClaudeRule(perm) {
|
|
457
356
|
if (perm.startsWith('Write(')) {
|
|
458
357
|
return perm.replace(/^Write/, 'Edit');
|
|
459
358
|
}
|
|
460
359
|
return perm;
|
|
461
360
|
}
|
|
462
|
-
/**
|
|
463
|
-
* Convert canonical permission set to Claude format.
|
|
464
|
-
* Claude uses: { permissions: { allow: ["Bash(*)", "Read(**)"], deny: [] } }
|
|
465
|
-
*/
|
|
466
361
|
export function convertToClaudeFormat(set) {
|
|
467
362
|
const permissions = {
|
|
468
363
|
allow: [...new Set(set.allow.map(canonicalToClaudeRule))],
|
|
@@ -473,29 +368,18 @@ export function convertToClaudeFormat(set) {
|
|
|
473
368
|
}
|
|
474
369
|
return { permissions };
|
|
475
370
|
}
|
|
476
|
-
/**
|
|
477
|
-
* Map a canonical rule to Cursor CLI syntax.
|
|
478
|
-
* Cursor uses Shell(...) instead of Bash(...); other tools keep TitleCase names.
|
|
479
|
-
* https://cursor.com/docs/cli/reference/permissions
|
|
480
|
-
*/
|
|
481
371
|
function canonicalToCursorRule(perm) {
|
|
482
372
|
if (perm === 'Bash' || perm.startsWith('Bash(')) {
|
|
483
373
|
return perm.replace(/^Bash/, 'Shell');
|
|
484
374
|
}
|
|
485
|
-
// Canonical WebSearch maps to WebFetch family for network allow.
|
|
486
375
|
if (perm.startsWith('WebSearch(')) {
|
|
487
376
|
return perm.replace(/^WebSearch/, 'WebFetch');
|
|
488
377
|
}
|
|
489
|
-
// Cursor has no Edit prefix — file writes use Write(...).
|
|
490
378
|
if (perm === 'Edit' || perm.startsWith('Edit(')) {
|
|
491
379
|
return perm.replace(/^Edit/, 'Write');
|
|
492
380
|
}
|
|
493
381
|
return perm;
|
|
494
382
|
}
|
|
495
|
-
/**
|
|
496
|
-
* Convert canonical permission set to Cursor CLI format
|
|
497
|
-
* (`~/.cursor/cli-config.json` permissions.allow/deny).
|
|
498
|
-
*/
|
|
499
383
|
export function convertToCursorFormat(set) {
|
|
500
384
|
return {
|
|
501
385
|
permissions: {
|
|
@@ -504,24 +388,13 @@ export function convertToCursorFormat(set) {
|
|
|
504
388
|
},
|
|
505
389
|
};
|
|
506
390
|
}
|
|
507
|
-
/**
|
|
508
|
-
* Parse canonical permission pattern to extract tool and pattern.
|
|
509
|
-
* "Bash(git *)" -> { tool: "bash", pattern: "git *" }
|
|
510
|
-
* "Read(**)" -> { tool: "read", pattern: "**" }
|
|
511
|
-
*/
|
|
512
391
|
function parseCanonicalPattern(permission) {
|
|
513
392
|
const match = permission.match(/^(\w+)\((.+)\)$/);
|
|
514
393
|
if (!match)
|
|
515
394
|
return null;
|
|
516
395
|
return { tool: match[1].toLowerCase(), pattern: match[2] };
|
|
517
396
|
}
|
|
518
|
-
/** Blanket-Bash canonical forms that mean "allow any bash command". */
|
|
519
397
|
const BLANKET_BASH_FORMS = new Set(['Bash', 'Bash(*)', 'Bash(**)']);
|
|
520
|
-
/**
|
|
521
|
-
* Strip Claude's `:*` subcommand-wildcard suffix and return a space-glob form.
|
|
522
|
-
* "mq:*" -> "mq *", "git status" -> "git status", "*" -> "*".
|
|
523
|
-
* Used by serializers whose native pattern grammar uses ` *` instead of `:*`.
|
|
524
|
-
*/
|
|
525
398
|
function normalizeBashPattern(pattern) {
|
|
526
399
|
if (pattern === '*' || pattern === '**')
|
|
527
400
|
return '*';
|
|
@@ -612,7 +485,6 @@ export function convertToCopilotFormat(set, location) {
|
|
|
612
485
|
},
|
|
613
486
|
};
|
|
614
487
|
}
|
|
615
|
-
/** Convert canonical Bash rules into Droid's command arrays. */
|
|
616
488
|
export function convertToDroidFormat(set) {
|
|
617
489
|
const commands = (permissions) => {
|
|
618
490
|
const result = new Set();
|
|
@@ -632,23 +504,10 @@ export function convertToDroidFormat(set) {
|
|
|
632
504
|
commandDenylist: commands(set.deny ?? []),
|
|
633
505
|
};
|
|
634
506
|
}
|
|
635
|
-
/**
|
|
636
|
-
* Convert canonical permission set to OpenClaw's `tools.alsoAllow`/`tools.deny`.
|
|
637
|
-
*
|
|
638
|
-
* OpenClaw's allowlist is tool-level only, so ONLY blanket (whole-tool) rules
|
|
639
|
-
* map — a rule is blanket iff it's a bare tool with no parens (`Bash`), it's in
|
|
640
|
-
* BLANKET_BASH_FORMS, or its pattern is `*`/`**` (`Read(**)`, `Write(*)`).
|
|
641
|
-
* Sub-command/path/domain rules (`Bash(git:*)`, `Write(secrets/**)`,
|
|
642
|
-
* `WebFetch(domain:x)`) are SKIPPED — coarse-mapping a specific deny to a whole
|
|
643
|
-
* tool would wrongly gate every use of that tool. Output arrays are deduped and
|
|
644
|
-
* sorted for deterministic writes/tests.
|
|
645
|
-
*/
|
|
646
507
|
export function convertToOpenClawFormat(set) {
|
|
647
508
|
const map = (permissions) => {
|
|
648
509
|
const tools = new Set();
|
|
649
510
|
for (const perm of permissions) {
|
|
650
|
-
// Bare tool name with no parens (e.g. "Bash", "Read") is a blanket grant;
|
|
651
|
-
// parseCanonicalPattern requires parens, so handle it first.
|
|
652
511
|
const bare = perm.match(/^(\w+)$/);
|
|
653
512
|
if (bare) {
|
|
654
513
|
const id = CANONICAL_TO_OPENCLAW_TOOL[bare[1].toLowerCase()];
|
|
@@ -692,18 +551,6 @@ export function convertToHermesFormat(set) {
|
|
|
692
551
|
approvals: { deny: commands(set.deny ?? []) },
|
|
693
552
|
};
|
|
694
553
|
}
|
|
695
|
-
/**
|
|
696
|
-
* Convert canonical permission set to Antigravity format.
|
|
697
|
-
* Antigravity reads ~/.gemini/antigravity-cli/settings.json with
|
|
698
|
-
* { permissions: { allow: [...], deny: [...] } }
|
|
699
|
-
* where each entry is action-namespaced: command(...), read_file(...),
|
|
700
|
-
* write_file(...), read_url(...), mcp(...).
|
|
701
|
-
* Bash maps to `command`, Read to `read_file`, Write to `write_file`,
|
|
702
|
-
* WebFetch to `read_url`. Other canonical tools are skipped.
|
|
703
|
-
* Note: Antigravity matches `command(npm install)` as an exact string,
|
|
704
|
-
* not a prefix — `Bash(npm:*)` becomes `command(npm *)` which is a glob
|
|
705
|
-
* but Antigravity upstream has a known exact-match bug for some forms.
|
|
706
|
-
*/
|
|
707
554
|
export function convertToAntigravityFormat(set) {
|
|
708
555
|
const allow = serializeAntigravityEntries(set.allow);
|
|
709
556
|
const deny = set.deny ? serializeAntigravityEntries(set.deny) : [];
|
|
@@ -737,14 +584,6 @@ function serializeAntigravityEntries(perms) {
|
|
|
737
584
|
}
|
|
738
585
|
return Array.from(out);
|
|
739
586
|
}
|
|
740
|
-
/**
|
|
741
|
-
* Convert canonical permission set to Grok format.
|
|
742
|
-
* Grok reads ~/.grok/config.toml with
|
|
743
|
-
* [permission]
|
|
744
|
-
* rules = [ { action = "allow", tool = "bash", pattern = "git *" }, ... ]
|
|
745
|
-
* Tool names are lowercase: bash, read, edit, grep, mcptool, webfetch.
|
|
746
|
-
* Canonical Write maps to Grok's `edit` tool.
|
|
747
|
-
*/
|
|
748
587
|
export function convertToGrokFormat(set) {
|
|
749
588
|
const rules = [];
|
|
750
589
|
for (const perm of set.allow) {
|
|
@@ -763,15 +602,6 @@ export function convertToGrokFormat(set) {
|
|
|
763
602
|
}
|
|
764
603
|
function canonicalToGrokRule(perm, action) {
|
|
765
604
|
if (BLANKET_BASH_FORMS.has(perm)) {
|
|
766
|
-
// Grok's `*` is a SINGLE-LEVEL wildcard, so a `pattern: '*'` bash rule does
|
|
767
|
-
// NOT auto-approve a multi-token command like `ssh host cmd` or `scp a b`
|
|
768
|
-
// (PHNX-3294 — verified: two boxes carrying the identical `pattern="*"` rule
|
|
769
|
-
// differed only by `[ui].permission_mode`, and only the always-approve box
|
|
770
|
-
// ran ssh without prompting). Grok's documented "bare prefix matches all
|
|
771
|
-
// invocations" idiom is a rule with NO `pattern` key — the true allow-all
|
|
772
|
-
// shell form, matching how kimi (bare `Bash`), droid (`*`) and claude
|
|
773
|
-
// express a blanket Bash grant. This reads back as `Bash(*)` via the
|
|
774
|
-
// registry's pattern-less path, so the round-trip is unchanged.
|
|
775
605
|
return { action, tool: 'bash' };
|
|
776
606
|
}
|
|
777
607
|
const parsed = parseCanonicalPattern(perm);
|
|
@@ -786,34 +616,12 @@ function canonicalToGrokRule(perm, action) {
|
|
|
786
616
|
}
|
|
787
617
|
return { action, tool, pattern };
|
|
788
618
|
}
|
|
789
|
-
/**
|
|
790
|
-
* Parse a canonical permission string preserving the tool's original casing.
|
|
791
|
-
* `parseCanonicalPattern` lowercases the tool name, which is fine for Grok
|
|
792
|
-
* (lowercase tool vocabulary) but wrong for Kimi, whose tool names are
|
|
793
|
-
* capitalized (`Bash`, `Read`, `Grep`). Bare tool names (no parens, e.g.
|
|
794
|
-
* `Read` or an MCP id like `mcp__server__tool`) return `pattern: null`.
|
|
795
|
-
*/
|
|
796
619
|
function parseCanonicalPreserveCase(perm) {
|
|
797
620
|
const m = perm.match(/^([\w-]+)\((.*)\)$/);
|
|
798
621
|
if (m)
|
|
799
622
|
return { tool: m[1], pattern: m[2] };
|
|
800
623
|
return { tool: perm, pattern: null };
|
|
801
624
|
}
|
|
802
|
-
/**
|
|
803
|
-
* Translate a canonical Bash arg-glob (`cmd:*`) into the Kimi pattern(s) that
|
|
804
|
-
* actually match that command's invocations.
|
|
805
|
-
*
|
|
806
|
-
* Kimi matches Bash arg-globs with picomatch, where `*` does NOT cross `/` and a
|
|
807
|
-
* `**` only globstars when it is its own path segment (`*/**`, `**/`). A plain
|
|
808
|
-
* `cmd*` therefore matches `git status -s` but NOT `git push origin feat/x` or
|
|
809
|
-
* `cat dir/file` — any argument containing a slash falls through to a prompt
|
|
810
|
-
* (verified interactively against kimi 0.12.1). We emit TWO patterns so the
|
|
811
|
-
* command auto-approves whether its args contain a slash or not:
|
|
812
|
-
* - `cmd*` — no-slash args (and the bare command; `*` is zero-or-more).
|
|
813
|
-
* - `cmd*/**` — args with a path: `*` consumes up to the first `/`, then the
|
|
814
|
-
* bounded globstar crosses the remaining slashes.
|
|
815
|
-
* "git push:*" -> ["git push*", "git push*/**"].
|
|
816
|
-
*/
|
|
817
625
|
function kimiBashPatterns(pattern) {
|
|
818
626
|
if (pattern === '*' || pattern === '**')
|
|
819
627
|
return ['*'];
|
|
@@ -821,7 +629,6 @@ function kimiBashPatterns(pattern) {
|
|
|
821
629
|
const prefix = pattern.slice(0, -2);
|
|
822
630
|
return [`${prefix}*`, `${prefix}*/**`];
|
|
823
631
|
}
|
|
824
|
-
// Exact command (no `:*`, e.g. `env`, `pwd`, `true`) — no path args expected.
|
|
825
632
|
return [pattern];
|
|
826
633
|
}
|
|
827
634
|
function canonicalToKimiRules(perm, decision) {
|
|
@@ -829,8 +636,6 @@ function canonicalToKimiRules(perm, decision) {
|
|
|
829
636
|
return [{ decision, pattern: 'Bash' }];
|
|
830
637
|
}
|
|
831
638
|
const { tool, pattern } = parseCanonicalPreserveCase(perm);
|
|
832
|
-
// Bare tool name (no parens) — name-only match. Covers `Read`, `Grep`, and
|
|
833
|
-
// MCP tool ids, which Kimi can only match by name anyway.
|
|
834
639
|
if (pattern === null) {
|
|
835
640
|
return [{ decision, pattern: tool }];
|
|
836
641
|
}
|
|
@@ -840,28 +645,11 @@ function canonicalToKimiRules(perm, decision) {
|
|
|
840
645
|
pattern: p === '*' ? 'Bash' : `Bash(${p})`,
|
|
841
646
|
}));
|
|
842
647
|
}
|
|
843
|
-
// Non-Bash built-ins (Read/Write/Edit/Grep/Glob/WebFetch...) share Kimi's
|
|
844
|
-
// capitalized tool vocabulary, so pass the tool+pattern through. A `**`/`*`
|
|
845
|
-
// glob means "any" — collapse to a name-only rule.
|
|
846
648
|
if (pattern === '*' || pattern === '**') {
|
|
847
649
|
return [{ decision, pattern: tool }];
|
|
848
650
|
}
|
|
849
651
|
return [{ decision, pattern: `${tool}(${pattern})` }];
|
|
850
652
|
}
|
|
851
|
-
/**
|
|
852
|
-
* Convert a canonical permission set to Kimi Code's `[permission].rules` format.
|
|
853
|
-
* Kimi (`~/.kimi-code/config.toml`) reads rules of the form
|
|
854
|
-
* [[permission.rules]]
|
|
855
|
-
* decision = "allow"
|
|
856
|
-
* pattern = "Bash(git status*)"
|
|
857
|
-
* Tool names are capitalized and the Bash arg-glob uses a trailing `*` (no
|
|
858
|
-
* Claude `:*` separator). Without this conversion the canonical strings match
|
|
859
|
-
* nothing in Kimi's engine and every tool call falls through to a prompt.
|
|
860
|
-
*
|
|
861
|
-
* Each `:*` Bash rule expands to TWO patterns (`cmd*` and `cmd*/**`) so the
|
|
862
|
-
* command auto-approves whether or not its arguments contain a slash — see
|
|
863
|
-
* `kimiBashPatterns` for why Kimi's picomatch matcher needs both.
|
|
864
|
-
*/
|
|
865
653
|
export function convertToKimiFormat(set) {
|
|
866
654
|
const rules = [];
|
|
867
655
|
for (const perm of set.allow) {
|
|
@@ -874,17 +662,10 @@ export function convertToKimiFormat(set) {
|
|
|
874
662
|
}
|
|
875
663
|
return { permission: { rules } };
|
|
876
664
|
}
|
|
877
|
-
/**
|
|
878
|
-
* Convert canonical permission set to OpenCode format.
|
|
879
|
-
* OpenCode uses: { permission: { bash: { "git *": "allow", "rm *": "deny" } } }
|
|
880
|
-
*/
|
|
881
665
|
export function convertToOpenCodeFormat(set) {
|
|
882
666
|
const bashPermissions = {};
|
|
883
|
-
// Process allow list
|
|
884
667
|
for (const perm of set.allow) {
|
|
885
668
|
if (BLANKET_BASH_FORMS.has(perm)) {
|
|
886
|
-
// Bare "Bash" has no parens so parseCanonicalPattern returns null;
|
|
887
|
-
// normalize all three blanket forms to "*".
|
|
888
669
|
bashPermissions['*'] = 'allow';
|
|
889
670
|
continue;
|
|
890
671
|
}
|
|
@@ -893,7 +674,6 @@ export function convertToOpenCodeFormat(set) {
|
|
|
893
674
|
bashPermissions[parsed.pattern] = 'allow';
|
|
894
675
|
}
|
|
895
676
|
}
|
|
896
|
-
// Process deny list
|
|
897
677
|
if (set.deny) {
|
|
898
678
|
for (const perm of set.deny) {
|
|
899
679
|
const parsed = parseCanonicalPattern(perm);
|
|
@@ -908,18 +688,6 @@ export function convertToOpenCodeFormat(set) {
|
|
|
908
688
|
},
|
|
909
689
|
};
|
|
910
690
|
}
|
|
911
|
-
/**
|
|
912
|
-
* Default extra writable roots for Codex's `workspace-write` sandbox: the
|
|
913
|
-
* regenerable package/toolchain caches that build/test/install write OUTSIDE the
|
|
914
|
-
* workspace (cargo registry, npm/bun/pnpm caches, GOPATH/GOCACHE, the OS cache
|
|
915
|
-
* root, …). Without these, a sandboxed `cargo build` / `go build` / `npm install`
|
|
916
|
-
* fails on its cache write, which is what pushes users to `--mode full` (YOLO).
|
|
917
|
-
*
|
|
918
|
-
* Credential dirs (`~/.ssh`, `~/.aws`, `~/.gnupg`, `~/.config`, `~/.netrc`) are
|
|
919
|
-
* deliberately EXCLUDED so the sandbox stays meaningful — this is far from
|
|
920
|
-
* danger-full-access. Resolved per platform + home; each box regenerates its own
|
|
921
|
-
* Codex config on sync, so the paths always match the box Codex runs on.
|
|
922
|
-
*/
|
|
923
691
|
export function codexDefaultWritableRoots(home = HOME, platform = process.platform) {
|
|
924
692
|
const shared = ['.cargo', '.rustup', '.npm', '.bun', 'go', '.deno', '.gradle', '.m2', '.gem'];
|
|
925
693
|
const roots = shared.map((d) => path.join(home, d));
|
|
@@ -927,18 +695,10 @@ export function codexDefaultWritableRoots(home = HOME, platform = process.platfo
|
|
|
927
695
|
roots.push(path.join(home, 'Library', 'Caches'), path.join(home, 'Library', 'pnpm'));
|
|
928
696
|
}
|
|
929
697
|
else {
|
|
930
|
-
// Linux/XDG: ~/.cache covers pip, uv, go-build, ms-playwright, etc.
|
|
931
698
|
roots.push(path.join(home, '.cache'), path.join(home, '.local', 'share'), path.join(home, '.local', 'state'));
|
|
932
699
|
}
|
|
933
700
|
return roots;
|
|
934
701
|
}
|
|
935
|
-
/**
|
|
936
|
-
* Merge Codex `[sandbox_workspace_write]` config, UNIONing `writable_roots` so a
|
|
937
|
-
* baseline cache root never clobbers a root the user configured directly (a
|
|
938
|
-
* plain object spread would overwrite the whole array), while merging scalar
|
|
939
|
-
* keys (`network_access`) normally. Shared by the user- and version-scoped Codex
|
|
940
|
-
* config writers so the two can't drift.
|
|
941
|
-
*/
|
|
942
702
|
function mergeCodexSandboxWrite(existing, incoming) {
|
|
943
703
|
const existingRoots = Array.isArray(existing?.writable_roots)
|
|
944
704
|
? existing.writable_roots
|
|
@@ -950,17 +710,8 @@ function mergeCodexSandboxWrite(existing, incoming) {
|
|
|
950
710
|
...(unionRoots.length > 0 ? { writable_roots: unionRoots } : {}),
|
|
951
711
|
};
|
|
952
712
|
}
|
|
953
|
-
/**
|
|
954
|
-
* Convert canonical permission set to Codex format.
|
|
955
|
-
* Codex uses coarse-grained modes, so we infer the best fit.
|
|
956
|
-
*/
|
|
957
713
|
export function convertToCodexFormat(set, cwd) {
|
|
958
714
|
const result = {};
|
|
959
|
-
// Check for broad bash permissions -> suggest full-auto.
|
|
960
|
-
// Treat the bare blanket form "Bash" the same as "Bash(*)" / "Bash(**)";
|
|
961
|
-
// parseCanonicalPattern requires parens so "Bash" alone wouldn't match
|
|
962
|
-
// otherwise — the difference determines whether a pod runs unattended
|
|
963
|
-
// (approval_policy: 'never') or stalls on interactive approvals.
|
|
964
715
|
const hasBroadBash = set.allow.some((p) => {
|
|
965
716
|
if (BLANKET_BASH_FORMS.has(p))
|
|
966
717
|
return true;
|
|
@@ -975,7 +726,6 @@ export function convertToCodexFormat(set, cwd) {
|
|
|
975
726
|
result.approval_policy = 'on-request';
|
|
976
727
|
result.sandbox_mode = 'workspace-write';
|
|
977
728
|
}
|
|
978
|
-
// Check for network/web permissions
|
|
979
729
|
const hasNetwork = set.allow.some((p) => {
|
|
980
730
|
const parsed = parseCanonicalPattern(p);
|
|
981
731
|
return parsed && (parsed.tool === 'websearch' || parsed.tool === 'webfetch');
|
|
@@ -985,23 +735,12 @@ export function convertToCodexFormat(set, cwd) {
|
|
|
985
735
|
network_access: true,
|
|
986
736
|
};
|
|
987
737
|
}
|
|
988
|
-
// Baseline (unconditional): always grant the regenerable build/test/install
|
|
989
|
-
// caches as writable roots so `agents run codex` in workspace-write can build,
|
|
990
|
-
// test, and install without escalating to danger-full-access. Merged with
|
|
991
|
-
// network_access above when set; applyCodexPermissions unions these with any
|
|
992
|
-
// writable_roots the user configured directly.
|
|
993
738
|
result.sandbox_workspace_write = {
|
|
994
739
|
...result.sandbox_workspace_write,
|
|
995
740
|
writable_roots: codexDefaultWritableRoots(),
|
|
996
741
|
};
|
|
997
742
|
return result;
|
|
998
743
|
}
|
|
999
|
-
// ============================================================================
|
|
1000
|
-
// Read agent permissions from native configs
|
|
1001
|
-
// ============================================================================
|
|
1002
|
-
/**
|
|
1003
|
-
* Read Claude's current permissions from settings.json.
|
|
1004
|
-
*/
|
|
1005
744
|
function readClaudePermissions(scope = 'user', cwd, options) {
|
|
1006
745
|
const home = options?.home || HOME;
|
|
1007
746
|
const configPath = scope === 'user'
|
|
@@ -1027,9 +766,6 @@ function readClaudePermissions(scope = 'user', cwd, options) {
|
|
|
1027
766
|
return null;
|
|
1028
767
|
}
|
|
1029
768
|
}
|
|
1030
|
-
/**
|
|
1031
|
-
* Read OpenCode's current permissions from opencode.jsonc.
|
|
1032
|
-
*/
|
|
1033
769
|
function readOpenCodePermissions(scope = 'user', cwd, options) {
|
|
1034
770
|
const home = options?.home || HOME;
|
|
1035
771
|
const configPath = openCodeConfigPath(scope, cwd, home);
|
|
@@ -1052,9 +788,6 @@ function readOpenCodePermissions(scope = 'user', cwd, options) {
|
|
|
1052
788
|
return null;
|
|
1053
789
|
}
|
|
1054
790
|
}
|
|
1055
|
-
/**
|
|
1056
|
-
* Read Codex's current permissions from config.toml.
|
|
1057
|
-
*/
|
|
1058
791
|
function readCodexPermissions(scope = 'user', cwd, options) {
|
|
1059
792
|
const home = options?.home || HOME;
|
|
1060
793
|
const configPath = scope === 'user'
|
|
@@ -1086,19 +819,6 @@ function readCodexPermissions(scope = 'user', cwd, options) {
|
|
|
1086
819
|
return null;
|
|
1087
820
|
}
|
|
1088
821
|
}
|
|
1089
|
-
/**
|
|
1090
|
-
* Read an agent's currently installed permissions.
|
|
1091
|
-
*
|
|
1092
|
-
* claude/opencode/codex return their NATIVE shape, because `agents permissions
|
|
1093
|
-
* list` renders those three specially — Codex especially, whose config records a
|
|
1094
|
-
* sandbox mode rather than a rule list, so its own fields say more than the
|
|
1095
|
-
* blanket grants that mode widens into.
|
|
1096
|
-
*
|
|
1097
|
-
* Every other allowlist-capable harness returns the canonical `PermissionSet`
|
|
1098
|
-
* that `PERMISSION_TARGETS` reads back. Before RUSH-2676 they returned `null`,
|
|
1099
|
-
* so permissions written for cursor, antigravity, grok, kimi, droid,
|
|
1100
|
-
* copilot, openclaw and hermes were reported as absent.
|
|
1101
|
-
*/
|
|
1102
822
|
export function readAgentPermissions(agentId, scope = 'user', cwd, options) {
|
|
1103
823
|
switch (agentId) {
|
|
1104
824
|
case 'claude':
|
|
@@ -1111,23 +831,15 @@ export function readAgentPermissions(agentId, scope = 'user', cwd, options) {
|
|
|
1111
831
|
return readCanonicalPermissions(agentId, scope, cwd, options?.home);
|
|
1112
832
|
}
|
|
1113
833
|
}
|
|
1114
|
-
// ============================================================================
|
|
1115
|
-
// Apply permissions to agents
|
|
1116
|
-
// ============================================================================
|
|
1117
|
-
/**
|
|
1118
|
-
* Apply a permission set to Claude's settings.json.
|
|
1119
|
-
*/
|
|
1120
834
|
export function applyClaudePermissions(set, scope = 'user', cwd, merge = true) {
|
|
1121
835
|
const configDir = scope === 'user'
|
|
1122
836
|
? path.join(HOME, '.claude')
|
|
1123
837
|
: path.join(cwd || process.cwd(), '.claude');
|
|
1124
838
|
const configPath = path.join(configDir, 'settings.json');
|
|
1125
839
|
try {
|
|
1126
|
-
// Ensure directory exists
|
|
1127
840
|
if (!fs.existsSync(configDir)) {
|
|
1128
841
|
fs.mkdirSync(configDir, { recursive: true });
|
|
1129
842
|
}
|
|
1130
|
-
// Read existing config
|
|
1131
843
|
let config = {};
|
|
1132
844
|
if (fs.existsSync(configPath)) {
|
|
1133
845
|
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
@@ -1135,7 +847,6 @@ export function applyClaudePermissions(set, scope = 'user', cwd, merge = true) {
|
|
|
1135
847
|
const newPermissions = convertToClaudeFormat(set);
|
|
1136
848
|
if (merge && config.permissions) {
|
|
1137
849
|
const existing = config.permissions;
|
|
1138
|
-
// Rewrite stale Write(path) rules already installed in settings.json too.
|
|
1139
850
|
const mergedAllow = new Set([...(existing.allow || []).map(canonicalToClaudeRule), ...newPermissions.permissions.allow]);
|
|
1140
851
|
const mergedDeny = new Set([...(existing.deny || []).map(canonicalToClaudeRule), ...newPermissions.permissions.deny]);
|
|
1141
852
|
config.permissions = {
|
|
@@ -1153,12 +864,6 @@ export function applyClaudePermissions(set, scope = 'user', cwd, merge = true) {
|
|
|
1153
864
|
return { success: false, error: err.message };
|
|
1154
865
|
}
|
|
1155
866
|
}
|
|
1156
|
-
/**
|
|
1157
|
-
* Path OpenCode actually loads for global config:
|
|
1158
|
-
* ~/.config/opencode/opencode.jsonc (or .json)
|
|
1159
|
-
* Project: <cwd>/opencode.jsonc (or .json) at project root — not .opencode/.
|
|
1160
|
-
* See https://opencode.ai/docs/config/
|
|
1161
|
-
*/
|
|
1162
867
|
export function openCodeConfigPath(scope, cwd, home = HOME) {
|
|
1163
868
|
if (scope === 'project') {
|
|
1164
869
|
const root = cwd || process.cwd();
|
|
@@ -1177,18 +882,13 @@ export function openCodeConfigPath(scope, cwd, home = HOME) {
|
|
|
1177
882
|
}
|
|
1178
883
|
return path.join(globalDir, 'opencode.jsonc');
|
|
1179
884
|
}
|
|
1180
|
-
/**
|
|
1181
|
-
* Apply a permission set to OpenCode's opencode.jsonc.
|
|
1182
|
-
*/
|
|
1183
885
|
function applyOpenCodePermissions(set, scope = 'user', cwd, merge = true) {
|
|
1184
886
|
const configPath = openCodeConfigPath(scope, cwd);
|
|
1185
887
|
const configDir = path.dirname(configPath);
|
|
1186
888
|
try {
|
|
1187
|
-
// Ensure directory exists
|
|
1188
889
|
if (!fs.existsSync(configDir)) {
|
|
1189
890
|
fs.mkdirSync(configDir, { recursive: true });
|
|
1190
891
|
}
|
|
1191
|
-
// Read existing config
|
|
1192
892
|
let config = {};
|
|
1193
893
|
if (fs.existsSync(configPath)) {
|
|
1194
894
|
const content = stripJsonComments(fs.readFileSync(configPath, 'utf-8'));
|
|
@@ -1208,7 +908,6 @@ function applyOpenCodePermissions(set, scope = 'user', cwd, merge = true) {
|
|
|
1208
908
|
else {
|
|
1209
909
|
config.permission = newPermissions.permission;
|
|
1210
910
|
}
|
|
1211
|
-
// Write without comments (they'll be lost)
|
|
1212
911
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
1213
912
|
return { success: true };
|
|
1214
913
|
}
|
|
@@ -1216,27 +915,21 @@ function applyOpenCodePermissions(set, scope = 'user', cwd, merge = true) {
|
|
|
1216
915
|
return { success: false, error: err.message };
|
|
1217
916
|
}
|
|
1218
917
|
}
|
|
1219
|
-
/**
|
|
1220
|
-
* Apply a permission set to Codex's config.toml.
|
|
1221
|
-
*/
|
|
1222
918
|
function applyCodexPermissions(set, scope = 'user', cwd, merge = true) {
|
|
1223
919
|
const configDir = scope === 'user'
|
|
1224
920
|
? path.join(HOME, '.codex')
|
|
1225
921
|
: path.join(cwd || process.cwd(), '.codex');
|
|
1226
922
|
const configPath = path.join(configDir, 'config.toml');
|
|
1227
923
|
try {
|
|
1228
|
-
// Ensure directory exists
|
|
1229
924
|
if (!fs.existsSync(configDir)) {
|
|
1230
925
|
fs.mkdirSync(configDir, { recursive: true });
|
|
1231
926
|
}
|
|
1232
|
-
// Read existing config
|
|
1233
927
|
let config = {};
|
|
1234
928
|
if (fs.existsSync(configPath)) {
|
|
1235
929
|
const content = fs.readFileSync(configPath, 'utf-8');
|
|
1236
930
|
config = TOML.parse(content);
|
|
1237
931
|
}
|
|
1238
932
|
const newPermissions = convertToCodexFormat(set, cwd);
|
|
1239
|
-
// Merge or replace
|
|
1240
933
|
if (newPermissions.approval_policy) {
|
|
1241
934
|
config.approval_policy = newPermissions.approval_policy;
|
|
1242
935
|
}
|
|
@@ -1245,8 +938,6 @@ function applyCodexPermissions(set, scope = 'user', cwd, merge = true) {
|
|
|
1245
938
|
}
|
|
1246
939
|
if (newPermissions.sandbox_workspace_write) {
|
|
1247
940
|
const existing = config.sandbox_workspace_write;
|
|
1248
|
-
// merge=false is a deliberate full replace (drops any user-custom roots);
|
|
1249
|
-
// production sync always passes merge=true, taking the union path.
|
|
1250
941
|
config.sandbox_workspace_write = merge
|
|
1251
942
|
? mergeCodexSandboxWrite(existing, newPermissions.sandbox_workspace_write)
|
|
1252
943
|
: newPermissions.sandbox_workspace_write;
|
|
@@ -1259,9 +950,6 @@ function applyCodexPermissions(set, scope = 'user', cwd, merge = true) {
|
|
|
1259
950
|
return { success: false, error: err.message };
|
|
1260
951
|
}
|
|
1261
952
|
}
|
|
1262
|
-
/**
|
|
1263
|
-
* Apply a permission set to an agent (global config).
|
|
1264
|
-
*/
|
|
1265
953
|
function applyPermissionsToAgent(agentId, set, scope = 'user', cwd, merge = true) {
|
|
1266
954
|
switch (agentId) {
|
|
1267
955
|
case 'claude':
|
|
@@ -1274,10 +962,6 @@ function applyPermissionsToAgent(agentId, set, scope = 'user', cwd, merge = true
|
|
|
1274
962
|
return { success: false, error: `Agent '${agentId}' does not support permissions` };
|
|
1275
963
|
}
|
|
1276
964
|
}
|
|
1277
|
-
/**
|
|
1278
|
-
* Apply a permission set to a specific version's home directory.
|
|
1279
|
-
* This writes to {versionHome}/.{agent}/settings.json (or equivalent).
|
|
1280
|
-
*/
|
|
1281
965
|
export function applyPermissionsToVersion(agentId, set, versionHome, merge = true, cwd) {
|
|
1282
966
|
if (!supports(agentId, 'allowlist').ok) {
|
|
1283
967
|
return { success: false, error: `Agent '${agentId}' does not support permissions` };
|
|
@@ -1294,7 +978,6 @@ export function applyPermissionsToVersion(agentId, set, versionHome, merge = tru
|
|
|
1294
978
|
const newPermissions = convertToClaudeFormat(set);
|
|
1295
979
|
if (merge && config.permissions) {
|
|
1296
980
|
const existing = config.permissions;
|
|
1297
|
-
// Rewrite stale Write(path) rules already installed in settings.json too.
|
|
1298
981
|
const mergedAllow = new Set([...(existing.allow || []).map(canonicalToClaudeRule), ...newPermissions.permissions.allow]);
|
|
1299
982
|
const mergedDeny = new Set([...(existing.deny || []).map(canonicalToClaudeRule), ...newPermissions.permissions.deny]);
|
|
1300
983
|
const mergedDirs = new Set([...(existing.additionalDirectories || []), ...(newPermissions.permissions.additionalDirectories || [])]);
|
|
@@ -1314,8 +997,6 @@ export function applyPermissionsToVersion(agentId, set, versionHome, merge = tru
|
|
|
1314
997
|
return { success: true };
|
|
1315
998
|
}
|
|
1316
999
|
if (agentId === 'opencode') {
|
|
1317
|
-
// OpenCode loads ~/.config/opencode/opencode.jsonc under the version home
|
|
1318
|
-
// (HOME isolation), not ~/.opencode/opencode.jsonc.
|
|
1319
1000
|
const configPath = openCodeConfigPath('user', undefined, versionHome);
|
|
1320
1001
|
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
1321
1002
|
let config = {};
|
|
@@ -1356,8 +1037,6 @@ export function applyPermissionsToVersion(agentId, set, versionHome, merge = tru
|
|
|
1356
1037
|
}
|
|
1357
1038
|
if (newPermissions.sandbox_workspace_write) {
|
|
1358
1039
|
const existing = config.sandbox_workspace_write;
|
|
1359
|
-
// merge=false is a deliberate full replace (drops any user-custom roots);
|
|
1360
|
-
// production sync always passes merge=true, taking the union path.
|
|
1361
1040
|
config.sandbox_workspace_write = merge
|
|
1362
1041
|
? mergeCodexSandboxWrite(existing, newPermissions.sandbox_workspace_write)
|
|
1363
1042
|
: newPermissions.sandbox_workspace_write;
|
|
@@ -1460,14 +1139,13 @@ export function applyPermissionsToVersion(agentId, set, versionHome, merge = tru
|
|
|
1460
1139
|
return { success: true };
|
|
1461
1140
|
}
|
|
1462
1141
|
if (agentId === 'cursor') {
|
|
1463
|
-
// Cursor CLI permissions live in ~/.cursor/cli-config.json
|
|
1464
1142
|
const configPath = path.join(configDir, 'cli-config.json');
|
|
1465
1143
|
let config = {};
|
|
1466
1144
|
if (fs.existsSync(configPath)) {
|
|
1467
1145
|
try {
|
|
1468
1146
|
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
1469
1147
|
}
|
|
1470
|
-
catch {
|
|
1148
|
+
catch { }
|
|
1471
1149
|
}
|
|
1472
1150
|
const converted = convertToCursorFormat(set);
|
|
1473
1151
|
if (merge && config.permissions && typeof config.permissions === 'object') {
|
|
@@ -1549,10 +1227,6 @@ export function applyPermissionsToVersion(agentId, set, versionHome, merge = tru
|
|
|
1549
1227
|
return { success: true };
|
|
1550
1228
|
}
|
|
1551
1229
|
if (agentId === 'openclaw') {
|
|
1552
|
-
// OpenClaw's allowlist lives in ~/.openclaw/openclaw.json under `tools`.
|
|
1553
|
-
// Only blanket tool-level rules map (see convertToOpenClawFormat). We
|
|
1554
|
-
// read-modify-write to preserve all other keys (mcp, exec, agents, …) and
|
|
1555
|
-
// never touch `tools.allow` (the absolute allowlist that replaces defaults).
|
|
1556
1230
|
const configPath = path.join(versionHome, '.openclaw', 'openclaw.json');
|
|
1557
1231
|
let config = {};
|
|
1558
1232
|
if (fs.existsSync(configPath)) {
|
|
@@ -1574,8 +1248,6 @@ export function applyPermissionsToVersion(agentId, set, versionHome, merge = tru
|
|
|
1574
1248
|
alsoAllow = converted.alsoAllow;
|
|
1575
1249
|
deny = converted.deny;
|
|
1576
1250
|
}
|
|
1577
|
-
// Set or delete each key: avoid writing empty arrays (churn). On a
|
|
1578
|
-
// non-merge replace with nothing to write, delete the stale key.
|
|
1579
1251
|
const tools = { ...existingTools };
|
|
1580
1252
|
if (alsoAllow.length > 0)
|
|
1581
1253
|
tools.alsoAllow = alsoAllow;
|
|
@@ -1627,12 +1299,6 @@ export function applyPermissionsToVersion(agentId, set, versionHome, merge = tru
|
|
|
1627
1299
|
return { success: false, error: err.message };
|
|
1628
1300
|
}
|
|
1629
1301
|
}
|
|
1630
|
-
// ============================================================================
|
|
1631
|
-
// Export canonical format from agent
|
|
1632
|
-
// ============================================================================
|
|
1633
|
-
/**
|
|
1634
|
-
* Convert Claude permissions back to canonical format.
|
|
1635
|
-
*/
|
|
1636
1302
|
export function claudeToCanonical(perms) {
|
|
1637
1303
|
const result = {
|
|
1638
1304
|
name: 'exported',
|
|
@@ -1644,9 +1310,6 @@ export function claudeToCanonical(perms) {
|
|
|
1644
1310
|
}
|
|
1645
1311
|
return result;
|
|
1646
1312
|
}
|
|
1647
|
-
/**
|
|
1648
|
-
* Convert OpenCode permissions back to canonical format.
|
|
1649
|
-
*/
|
|
1650
1313
|
export function openCodeToCanonical(perms) {
|
|
1651
1314
|
const allow = [];
|
|
1652
1315
|
const deny = [];
|
|
@@ -1664,9 +1327,6 @@ export function openCodeToCanonical(perms) {
|
|
|
1664
1327
|
deny: deny.length > 0 ? deny : undefined,
|
|
1665
1328
|
};
|
|
1666
1329
|
}
|
|
1667
|
-
/**
|
|
1668
|
-
* Convert Codex permissions back to canonical format (approximation).
|
|
1669
|
-
*/
|
|
1670
1330
|
export function codexToCanonical(perms) {
|
|
1671
1331
|
const allow = [];
|
|
1672
1332
|
if (perms.approval_policy === 'never' || perms.sandbox_mode === 'danger-full-access') {
|
|
@@ -1688,14 +1348,6 @@ export function codexToCanonical(perms) {
|
|
|
1688
1348
|
allow,
|
|
1689
1349
|
};
|
|
1690
1350
|
}
|
|
1691
|
-
/**
|
|
1692
|
-
* Export permissions from a specific config file path to canonical format,
|
|
1693
|
-
* auto-detecting the harness from the path.
|
|
1694
|
-
*
|
|
1695
|
-
* Detection walks `PERMISSION_TARGETS` and matches each harness's own declared
|
|
1696
|
-
* filename + parent directory, so it covers all 13 rather than the three
|
|
1697
|
-
* hardcoded `.claude`/`.opencode`/`.codex` fragments it used to know about.
|
|
1698
|
-
*/
|
|
1699
1351
|
export function exportPermissionsFromPath(filePath) {
|
|
1700
1352
|
if (!fs.existsSync(filePath))
|
|
1701
1353
|
return null;
|
|
@@ -1704,18 +1356,11 @@ export function exportPermissionsFromPath(filePath) {
|
|
|
1704
1356
|
return null;
|
|
1705
1357
|
return PERMISSION_TARGETS[agentId].toCanonical(filePath);
|
|
1706
1358
|
}
|
|
1707
|
-
/**
|
|
1708
|
-
* Which harness owns `filePath`, by comparing against the trailing path segments
|
|
1709
|
-
* each registry target declares. Longer (more specific) suffixes win, so
|
|
1710
|
-
*/
|
|
1711
1359
|
export function detectPermissionAgentFromPath(filePath) {
|
|
1712
1360
|
const normalized = path.resolve(filePath).split(path.sep).join('/');
|
|
1713
1361
|
let best = null;
|
|
1714
1362
|
for (const [agent, target] of Object.entries(PERMISSION_TARGETS)) {
|
|
1715
1363
|
const agentId = agent;
|
|
1716
|
-
// `altSuffixes` first: home()/project() may probe the filesystem to choose
|
|
1717
|
-
// between accepted spellings, and with an empty root that probe resolves
|
|
1718
|
-
// against process.cwd() -- so detection must not depend on it.
|
|
1719
1364
|
const candidates = [
|
|
1720
1365
|
...(target.altSuffixes ?? []),
|
|
1721
1366
|
target.home(''),
|
|
@@ -1733,9 +1378,6 @@ export function detectPermissionAgentFromPath(filePath) {
|
|
|
1733
1378
|
}
|
|
1734
1379
|
return best?.agentId ?? null;
|
|
1735
1380
|
}
|
|
1736
|
-
/**
|
|
1737
|
-
* Save a permission set to central storage.
|
|
1738
|
-
*/
|
|
1739
1381
|
function savePermissionSet(set) {
|
|
1740
1382
|
ensurePermissionsDir();
|
|
1741
1383
|
const filePath = safeJoin(path.join(getUserPermissionsDir(), 'groups'), set.name + '.yml');
|
|
@@ -1753,11 +1395,7 @@ function savePermissionSet(set) {
|
|
|
1753
1395
|
return { success: false, error: err.message };
|
|
1754
1396
|
}
|
|
1755
1397
|
}
|
|
1756
|
-
/** Name used for the default permission set in central storage. */
|
|
1757
1398
|
const DEFAULT_PERMISSION_SET_NAME = 'default';
|
|
1758
|
-
/**
|
|
1759
|
-
* Get the default permission set from central storage.
|
|
1760
|
-
*/
|
|
1761
1399
|
export function getDefaultPermissionSet() {
|
|
1762
1400
|
const existing = getPermissionSet(DEFAULT_PERMISSION_SET_NAME);
|
|
1763
1401
|
if (existing) {
|
|
@@ -1770,10 +1408,6 @@ export function getDefaultPermissionSet() {
|
|
|
1770
1408
|
deny: [],
|
|
1771
1409
|
};
|
|
1772
1410
|
}
|
|
1773
|
-
/**
|
|
1774
|
-
* Compute diff between existing and new permissions.
|
|
1775
|
-
* Returns { added, existing, removed } for both allow and deny rules.
|
|
1776
|
-
*/
|
|
1777
1411
|
export function computePermissionsDiff(existing, incoming) {
|
|
1778
1412
|
const existingAllowSet = new Set(existing.allow);
|
|
1779
1413
|
const existingDenySet = new Set(existing.deny || []);
|
|
@@ -1787,9 +1421,6 @@ export function computePermissionsDiff(existing, incoming) {
|
|
|
1787
1421
|
deny: { added: denyAdded, existing: denyExisting },
|
|
1788
1422
|
};
|
|
1789
1423
|
}
|
|
1790
|
-
/**
|
|
1791
|
-
* Merge incoming permissions into existing, deduplicating.
|
|
1792
|
-
*/
|
|
1793
1424
|
export function mergePermissionSets(existing, incoming) {
|
|
1794
1425
|
const allowSet = new Set([...existing.allow, ...incoming.allow]);
|
|
1795
1426
|
const denySet = new Set([...(existing.deny || []), ...(incoming.deny || [])]);
|
|
@@ -1805,31 +1436,10 @@ export function mergePermissionSets(existing, incoming) {
|
|
|
1805
1436
|
}
|
|
1806
1437
|
return result;
|
|
1807
1438
|
}
|
|
1808
|
-
/**
|
|
1809
|
-
* Save the default permission set.
|
|
1810
|
-
*/
|
|
1811
1439
|
export function saveDefaultPermissionSet(set) {
|
|
1812
1440
|
set.name = DEFAULT_PERMISSION_SET_NAME;
|
|
1813
1441
|
return savePermissionSet(set);
|
|
1814
1442
|
}
|
|
1815
|
-
// ============================================================================
|
|
1816
|
-
// Content-drift check (agents doctor, PHNX-3504)
|
|
1817
|
-
// ============================================================================
|
|
1818
|
-
/**
|
|
1819
|
-
* Harnesses whose native permission file carries a per-rule allow/deny list the
|
|
1820
|
-
* writer emits verbatim, so `agents doctor` can verify a group's rules survived
|
|
1821
|
-
* into the version home rule-for-rule. The compare is done in the harness's OWN
|
|
1822
|
-
* native vocabulary (Cursor `Shell(...)`, Droid command arrays, …) — NOT
|
|
1823
|
-
* canonical — because every target's canonical round-trip is lossy
|
|
1824
|
-
* (`lossyBecause` in `permissions-registry.ts`), so a canonical subset check
|
|
1825
|
-
* would false-diff a correctly-synced home.
|
|
1826
|
-
*
|
|
1827
|
-
* Every other allowlist harness (codex/grok/kimi/antigravity/hermes/copilot)
|
|
1828
|
-
* stores a lossy projection — a sandbox flag, whole-tool gate, per-directory
|
|
1829
|
-
* approval, or a split/merged pattern — with no faithful per-group provenance, so
|
|
1830
|
-
* doctor stays presence-only there and says so (`detail: 'format cannot verify
|
|
1831
|
-
* content'`) rather than faking `ok`.
|
|
1832
|
-
*/
|
|
1833
1443
|
export const PERMISSIONS_REPRESENTABLE = new Set([
|
|
1834
1444
|
'claude',
|
|
1835
1445
|
'opencode',
|
|
@@ -1848,7 +1458,6 @@ function readJsonFileSafe(filePath) {
|
|
|
1848
1458
|
return null;
|
|
1849
1459
|
}
|
|
1850
1460
|
}
|
|
1851
|
-
/** allow/deny rule strings in `agent`'s NATIVE vocabulary from its version home. */
|
|
1852
1461
|
function homeNativePermissionRules(agent, versionHome) {
|
|
1853
1462
|
const target = PERMISSION_TARGETS[agent];
|
|
1854
1463
|
if (!target)
|
|
@@ -1895,7 +1504,6 @@ function homeNativePermissionRules(agent, versionHome) {
|
|
|
1895
1504
|
return null;
|
|
1896
1505
|
}
|
|
1897
1506
|
}
|
|
1898
|
-
/** allow/deny rule strings in `agent`'s NATIVE vocabulary the writer WOULD emit. */
|
|
1899
1507
|
function expectedNativePermissionRules(agent, set) {
|
|
1900
1508
|
switch (agent) {
|
|
1901
1509
|
case 'claude': {
|
|
@@ -1930,23 +1538,12 @@ function expectedNativePermissionRules(agent, set) {
|
|
|
1930
1538
|
return { allow: new Set(), deny: new Set() };
|
|
1931
1539
|
}
|
|
1932
1540
|
}
|
|
1933
|
-
/**
|
|
1934
|
-
* True when permission GROUP `groupName` is faithfully present in `agent`'s
|
|
1935
|
-
* version home — every rule the group renders into that harness's native format
|
|
1936
|
-
* is on disk. Only meaningful for {@link PERMISSIONS_REPRESENTABLE} agents (the
|
|
1937
|
-
* caller keeps the lossy harnesses presence-only); returns true for a lossy
|
|
1938
|
-
* harness or an empty/header group so the caller does not down-rank it.
|
|
1939
|
-
*
|
|
1940
|
-
* The expected rules are re-derived from the CURRENT source group every call
|
|
1941
|
-
* (never a stored hash), so a rule edited/added in the source group surfaces as
|
|
1942
|
-
* drift even though the group name is unchanged (PHNX-3504).
|
|
1943
|
-
*/
|
|
1944
1541
|
export function permissionsGroupMatches(agent, versionHome, groupName) {
|
|
1945
1542
|
if (!PERMISSIONS_REPRESENTABLE.has(agent))
|
|
1946
1543
|
return true;
|
|
1947
1544
|
const expected = expectedNativePermissionRules(agent, buildPermissionsFromGroups([groupName]));
|
|
1948
1545
|
if (expected.allow.size === 0 && expected.deny.size === 0)
|
|
1949
|
-
return true;
|
|
1546
|
+
return true;
|
|
1950
1547
|
const home = homeNativePermissionRules(agent, versionHome);
|
|
1951
1548
|
if (!home)
|
|
1952
1549
|
return false;
|