@swarmify/agents-cli 1.13.3 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -319
- package/bin/agents.js +2 -0
- package/package.json +13 -79
- package/scripts/postinstall.js +4 -71
- package/CHANGELOG.md +0 -316
- package/LICENSE +0 -21
- package/dist/commands/__tests__/sessions-tail.test.d.ts +0 -2
- package/dist/commands/__tests__/sessions-tail.test.d.ts.map +0 -1
- package/dist/commands/__tests__/sessions-tail.test.js +0 -108
- package/dist/commands/__tests__/sessions-tail.test.js.map +0 -1
- package/dist/commands/__tests__/sessions.test.d.ts +0 -2
- package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
- package/dist/commands/__tests__/sessions.test.js +0 -636
- package/dist/commands/__tests__/sessions.test.js.map +0 -1
- package/dist/commands/cloud.d.ts +0 -11
- package/dist/commands/cloud.d.ts.map +0 -1
- package/dist/commands/cloud.js +0 -363
- package/dist/commands/cloud.js.map +0 -1
- package/dist/commands/commands.d.ts +0 -12
- package/dist/commands/commands.d.ts.map +0 -1
- package/dist/commands/commands.js +0 -629
- package/dist/commands/commands.js.map +0 -1
- package/dist/commands/daemon.d.ts +0 -11
- package/dist/commands/daemon.d.ts.map +0 -1
- package/dist/commands/daemon.js +0 -119
- package/dist/commands/daemon.js.map +0 -1
- package/dist/commands/drive.d.ts +0 -11
- package/dist/commands/drive.d.ts.map +0 -1
- package/dist/commands/drive.js +0 -175
- package/dist/commands/drive.js.map +0 -1
- package/dist/commands/exec.d.ts +0 -11
- package/dist/commands/exec.d.ts.map +0 -1
- package/dist/commands/exec.js +0 -251
- package/dist/commands/exec.js.map +0 -1
- package/dist/commands/factory.d.ts +0 -11
- package/dist/commands/factory.d.ts.map +0 -1
- package/dist/commands/factory.js +0 -445
- package/dist/commands/factory.js.map +0 -1
- package/dist/commands/fork.d.ts +0 -11
- package/dist/commands/fork.d.ts.map +0 -1
- package/dist/commands/fork.js +0 -147
- package/dist/commands/fork.js.map +0 -1
- package/dist/commands/hooks.d.ts +0 -12
- package/dist/commands/hooks.d.ts.map +0 -1
- package/dist/commands/hooks.js +0 -690
- package/dist/commands/hooks.js.map +0 -1
- package/dist/commands/init.d.ts +0 -15
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -137
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -12
- package/dist/commands/mcp.d.ts.map +0 -1
- package/dist/commands/mcp.js +0 -583
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/models.d.ts +0 -11
- package/dist/commands/models.d.ts.map +0 -1
- package/dist/commands/models.js +0 -170
- package/dist/commands/models.js.map +0 -1
- package/dist/commands/packages.d.ts +0 -11
- package/dist/commands/packages.d.ts.map +0 -1
- package/dist/commands/packages.js +0 -551
- package/dist/commands/packages.js.map +0 -1
- package/dist/commands/permissions.d.ts +0 -12
- package/dist/commands/permissions.d.ts.map +0 -1
- package/dist/commands/permissions.js +0 -724
- package/dist/commands/permissions.js.map +0 -1
- package/dist/commands/plugins.d.ts +0 -11
- package/dist/commands/plugins.d.ts.map +0 -1
- package/dist/commands/plugins.js +0 -393
- package/dist/commands/plugins.js.map +0 -1
- package/dist/commands/profiles.d.ts +0 -12
- package/dist/commands/profiles.d.ts.map +0 -1
- package/dist/commands/profiles.js +0 -255
- package/dist/commands/profiles.js.map +0 -1
- package/dist/commands/pty.d.ts +0 -21
- package/dist/commands/pty.d.ts.map +0 -1
- package/dist/commands/pty.js +0 -391
- package/dist/commands/pty.js.map +0 -1
- package/dist/commands/pull.d.ts +0 -11
- package/dist/commands/pull.d.ts.map +0 -1
- package/dist/commands/pull.js +0 -456
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/push.d.ts +0 -11
- package/dist/commands/push.d.ts.map +0 -1
- package/dist/commands/push.js +0 -188
- package/dist/commands/push.js.map +0 -1
- package/dist/commands/refresh-memory.d.ts +0 -16
- package/dist/commands/refresh-memory.d.ts.map +0 -1
- package/dist/commands/refresh-memory.js +0 -52
- package/dist/commands/refresh-memory.js.map +0 -1
- package/dist/commands/resource-view.d.ts +0 -39
- package/dist/commands/resource-view.d.ts.map +0 -1
- package/dist/commands/resource-view.js +0 -197
- package/dist/commands/resource-view.js.map +0 -1
- package/dist/commands/routines.d.ts +0 -11
- package/dist/commands/routines.d.ts.map +0 -1
- package/dist/commands/routines.js +0 -590
- package/dist/commands/routines.js.map +0 -1
- package/dist/commands/rules.d.ts +0 -12
- package/dist/commands/rules.d.ts.map +0 -1
- package/dist/commands/rules.js +0 -489
- package/dist/commands/rules.js.map +0 -1
- package/dist/commands/secrets.d.ts +0 -11
- package/dist/commands/secrets.d.ts.map +0 -1
- package/dist/commands/secrets.js +0 -352
- package/dist/commands/secrets.js.map +0 -1
- package/dist/commands/sessions-picker.d.ts +0 -18
- package/dist/commands/sessions-picker.d.ts.map +0 -1
- package/dist/commands/sessions-picker.js +0 -265
- package/dist/commands/sessions-picker.js.map +0 -1
- package/dist/commands/sessions-tail.d.ts +0 -20
- package/dist/commands/sessions-tail.d.ts.map +0 -1
- package/dist/commands/sessions-tail.js +0 -236
- package/dist/commands/sessions-tail.js.map +0 -1
- package/dist/commands/sessions.d.ts +0 -18
- package/dist/commands/sessions.d.ts.map +0 -1
- package/dist/commands/sessions.js +0 -1173
- package/dist/commands/sessions.js.map +0 -1
- package/dist/commands/skills.d.ts +0 -12
- package/dist/commands/skills.d.ts.map +0 -1
- package/dist/commands/skills.js +0 -717
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/status.d.ts +0 -10
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -26
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/subagents.d.ts +0 -11
- package/dist/commands/subagents.d.ts.map +0 -1
- package/dist/commands/subagents.js +0 -361
- package/dist/commands/subagents.js.map +0 -1
- package/dist/commands/sync.d.ts +0 -11
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -70
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/teams-picker.d.ts +0 -18
- package/dist/commands/teams-picker.d.ts.map +0 -1
- package/dist/commands/teams-picker.js +0 -290
- package/dist/commands/teams-picker.js.map +0 -1
- package/dist/commands/teams.d.ts +0 -18
- package/dist/commands/teams.d.ts.map +0 -1
- package/dist/commands/teams.js +0 -1144
- package/dist/commands/teams.js.map +0 -1
- package/dist/commands/utils.d.ts +0 -45
- package/dist/commands/utils.d.ts.map +0 -1
- package/dist/commands/utils.js +0 -106
- package/dist/commands/utils.js.map +0 -1
- package/dist/commands/versions.d.ts +0 -11
- package/dist/commands/versions.d.ts.map +0 -1
- package/dist/commands/versions.js +0 -701
- package/dist/commands/versions.js.map +0 -1
- package/dist/commands/view.d.ts +0 -43
- package/dist/commands/view.d.ts.map +0 -1
- package/dist/commands/view.js +0 -894
- package/dist/commands/view.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -496
- package/dist/index.js.map +0 -1
- package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
- package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
- package/dist/lib/__tests__/bugfixes.test.js +0 -192
- package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
- package/dist/lib/__tests__/exec.test.d.ts +0 -2
- package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
- package/dist/lib/__tests__/exec.test.js +0 -446
- package/dist/lib/__tests__/exec.test.js.map +0 -1
- package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
- package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
- package/dist/lib/__tests__/git-sync.test.js +0 -138
- package/dist/lib/__tests__/git-sync.test.js.map +0 -1
- package/dist/lib/__tests__/hooks.test.d.ts +0 -2
- package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
- package/dist/lib/__tests__/hooks.test.js +0 -203
- package/dist/lib/__tests__/hooks.test.js.map +0 -1
- package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
- package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
- package/dist/lib/__tests__/memory-compile.test.js +0 -95
- package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
- package/dist/lib/__tests__/models.test.d.ts +0 -2
- package/dist/lib/__tests__/models.test.d.ts.map +0 -1
- package/dist/lib/__tests__/models.test.js +0 -239
- package/dist/lib/__tests__/models.test.js.map +0 -1
- package/dist/lib/__tests__/rotate.test.d.ts +0 -2
- package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
- package/dist/lib/__tests__/rotate.test.js +0 -80
- package/dist/lib/__tests__/rotate.test.js.map +0 -1
- package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
- package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
- package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
- package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
- package/dist/lib/__tests__/secrets.test.d.ts +0 -2
- package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
- package/dist/lib/__tests__/secrets.test.js +0 -90
- package/dist/lib/__tests__/secrets.test.js.map +0 -1
- package/dist/lib/__tests__/shims.test.d.ts +0 -2
- package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
- package/dist/lib/__tests__/shims.test.js +0 -57
- package/dist/lib/__tests__/shims.test.js.map +0 -1
- package/dist/lib/__tests__/usage.test.d.ts +0 -2
- package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
- package/dist/lib/__tests__/usage.test.js +0 -220
- package/dist/lib/__tests__/usage.test.js.map +0 -1
- package/dist/lib/__tests__/versions.test.d.ts +0 -2
- package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
- package/dist/lib/__tests__/versions.test.js +0 -63
- package/dist/lib/__tests__/versions.test.js.map +0 -1
- package/dist/lib/agents.d.ts +0 -158
- package/dist/lib/agents.d.ts.map +0 -1
- package/dist/lib/agents.js +0 -1159
- package/dist/lib/agents.js.map +0 -1
- package/dist/lib/artifact-actions.d.ts +0 -27
- package/dist/lib/artifact-actions.d.ts.map +0 -1
- package/dist/lib/artifact-actions.js +0 -58
- package/dist/lib/artifact-actions.js.map +0 -1
- package/dist/lib/cloud/codex.d.ts +0 -26
- package/dist/lib/cloud/codex.d.ts.map +0 -1
- package/dist/lib/cloud/codex.js +0 -237
- package/dist/lib/cloud/codex.js.map +0 -1
- package/dist/lib/cloud/factory.d.ts +0 -32
- package/dist/lib/cloud/factory.d.ts.map +0 -1
- package/dist/lib/cloud/factory.js +0 -43
- package/dist/lib/cloud/factory.js.map +0 -1
- package/dist/lib/cloud/registry.d.ts +0 -16
- package/dist/lib/cloud/registry.d.ts.map +0 -1
- package/dist/lib/cloud/registry.js +0 -68
- package/dist/lib/cloud/registry.js.map +0 -1
- package/dist/lib/cloud/rush.d.ts +0 -37
- package/dist/lib/cloud/rush.d.ts.map +0 -1
- package/dist/lib/cloud/rush.js +0 -230
- package/dist/lib/cloud/rush.js.map +0 -1
- package/dist/lib/cloud/rush.test.d.ts +0 -2
- package/dist/lib/cloud/rush.test.d.ts.map +0 -1
- package/dist/lib/cloud/rush.test.js +0 -63
- package/dist/lib/cloud/rush.test.js.map +0 -1
- package/dist/lib/cloud/store.d.ts +0 -23
- package/dist/lib/cloud/store.d.ts.map +0 -1
- package/dist/lib/cloud/store.js +0 -116
- package/dist/lib/cloud/store.js.map +0 -1
- package/dist/lib/cloud/stream.d.ts +0 -24
- package/dist/lib/cloud/stream.d.ts.map +0 -1
- package/dist/lib/cloud/stream.js +0 -145
- package/dist/lib/cloud/stream.js.map +0 -1
- package/dist/lib/cloud/types.d.ts +0 -109
- package/dist/lib/cloud/types.d.ts.map +0 -1
- package/dist/lib/cloud/types.js +0 -33
- package/dist/lib/cloud/types.js.map +0 -1
- package/dist/lib/cloud/types.test.d.ts +0 -2
- package/dist/lib/cloud/types.test.d.ts.map +0 -1
- package/dist/lib/cloud/types.test.js +0 -41
- package/dist/lib/cloud/types.test.js.map +0 -1
- package/dist/lib/commands.d.ts +0 -141
- package/dist/lib/commands.d.ts.map +0 -1
- package/dist/lib/commands.js +0 -514
- package/dist/lib/commands.js.map +0 -1
- package/dist/lib/convert.d.ts +0 -21
- package/dist/lib/convert.d.ts.map +0 -1
- package/dist/lib/convert.js +0 -54
- package/dist/lib/convert.js.map +0 -1
- package/dist/lib/daemon.d.ts +0 -43
- package/dist/lib/daemon.d.ts.map +0 -1
- package/dist/lib/daemon.js +0 -332
- package/dist/lib/daemon.js.map +0 -1
- package/dist/lib/drive-sync.d.ts +0 -46
- package/dist/lib/drive-sync.d.ts.map +0 -1
- package/dist/lib/drive-sync.js +0 -209
- package/dist/lib/drive-sync.js.map +0 -1
- package/dist/lib/exec.d.ts +0 -101
- package/dist/lib/exec.d.ts.map +0 -1
- package/dist/lib/exec.js +0 -450
- package/dist/lib/exec.js.map +0 -1
- package/dist/lib/factory/__tests__/config.test.d.ts +0 -2
- package/dist/lib/factory/__tests__/config.test.d.ts.map +0 -1
- package/dist/lib/factory/__tests__/config.test.js +0 -128
- package/dist/lib/factory/__tests__/config.test.js.map +0 -1
- package/dist/lib/factory/config.d.ts +0 -49
- package/dist/lib/factory/config.d.ts.map +0 -1
- package/dist/lib/factory/config.js +0 -127
- package/dist/lib/factory/config.js.map +0 -1
- package/dist/lib/factory.d.ts +0 -57
- package/dist/lib/factory.d.ts.map +0 -1
- package/dist/lib/factory.js +0 -107
- package/dist/lib/factory.js.map +0 -1
- package/dist/lib/git.d.ts +0 -157
- package/dist/lib/git.d.ts.map +0 -1
- package/dist/lib/git.js +0 -647
- package/dist/lib/git.js.map +0 -1
- package/dist/lib/help.d.ts +0 -10
- package/dist/lib/help.d.ts.map +0 -1
- package/dist/lib/help.js +0 -66
- package/dist/lib/help.js.map +0 -1
- package/dist/lib/hooks.d.ts +0 -125
- package/dist/lib/hooks.d.ts.map +0 -1
- package/dist/lib/hooks.js +0 -846
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/ledger/__tests__/local.test.d.ts +0 -2
- package/dist/lib/ledger/__tests__/local.test.d.ts.map +0 -1
- package/dist/lib/ledger/__tests__/local.test.js +0 -177
- package/dist/lib/ledger/__tests__/local.test.js.map +0 -1
- package/dist/lib/ledger/__tests__/sync.test.d.ts +0 -2
- package/dist/lib/ledger/__tests__/sync.test.d.ts.map +0 -1
- package/dist/lib/ledger/__tests__/sync.test.js +0 -117
- package/dist/lib/ledger/__tests__/sync.test.js.map +0 -1
- package/dist/lib/ledger/index.d.ts +0 -18
- package/dist/lib/ledger/index.d.ts.map +0 -1
- package/dist/lib/ledger/index.js +0 -32
- package/dist/lib/ledger/index.js.map +0 -1
- package/dist/lib/ledger/local.d.ts +0 -22
- package/dist/lib/ledger/local.d.ts.map +0 -1
- package/dist/lib/ledger/local.js +0 -333
- package/dist/lib/ledger/local.js.map +0 -1
- package/dist/lib/ledger/r2.d.ts +0 -41
- package/dist/lib/ledger/r2.d.ts.map +0 -1
- package/dist/lib/ledger/r2.js +0 -335
- package/dist/lib/ledger/r2.js.map +0 -1
- package/dist/lib/ledger/sync.d.ts +0 -33
- package/dist/lib/ledger/sync.d.ts.map +0 -1
- package/dist/lib/ledger/sync.js +0 -106
- package/dist/lib/ledger/sync.js.map +0 -1
- package/dist/lib/ledger/types.d.ts +0 -100
- package/dist/lib/ledger/types.d.ts.map +0 -1
- package/dist/lib/ledger/types.js +0 -21
- package/dist/lib/ledger/types.js.map +0 -1
- package/dist/lib/manifest.d.ts +0 -14
- package/dist/lib/manifest.d.ts.map +0 -1
- package/dist/lib/manifest.js +0 -48
- package/dist/lib/manifest.js.map +0 -1
- package/dist/lib/markdown.d.ts +0 -5
- package/dist/lib/markdown.d.ts.map +0 -1
- package/dist/lib/markdown.js +0 -17
- package/dist/lib/markdown.js.map +0 -1
- package/dist/lib/mcp.d.ts +0 -64
- package/dist/lib/mcp.d.ts.map +0 -1
- package/dist/lib/mcp.js +0 -327
- package/dist/lib/mcp.js.map +0 -1
- package/dist/lib/memory-compile.d.ts +0 -65
- package/dist/lib/memory-compile.d.ts.map +0 -1
- package/dist/lib/memory-compile.js +0 -174
- package/dist/lib/memory-compile.js.map +0 -1
- package/dist/lib/memory.d.ts +0 -64
- package/dist/lib/memory.d.ts.map +0 -1
- package/dist/lib/memory.js +0 -275
- package/dist/lib/memory.js.map +0 -1
- package/dist/lib/models.d.ts +0 -98
- package/dist/lib/models.d.ts.map +0 -1
- package/dist/lib/models.js +0 -728
- package/dist/lib/models.js.map +0 -1
- package/dist/lib/permissions.d.ts +0 -227
- package/dist/lib/permissions.d.ts.map +0 -1
- package/dist/lib/permissions.js +0 -1071
- package/dist/lib/permissions.js.map +0 -1
- package/dist/lib/picker.d.ts +0 -27
- package/dist/lib/picker.d.ts.map +0 -1
- package/dist/lib/picker.js +0 -110
- package/dist/lib/picker.js.map +0 -1
- package/dist/lib/plugins.d.ts +0 -80
- package/dist/lib/plugins.d.ts.map +0 -1
- package/dist/lib/plugins.js +0 -556
- package/dist/lib/plugins.js.map +0 -1
- package/dist/lib/profiles-keychain.d.ts +0 -11
- package/dist/lib/profiles-keychain.d.ts.map +0 -1
- package/dist/lib/profiles-keychain.js +0 -14
- package/dist/lib/profiles-keychain.js.map +0 -1
- package/dist/lib/profiles-presets.d.ts +0 -25
- package/dist/lib/profiles-presets.d.ts.map +0 -1
- package/dist/lib/profiles-presets.js +0 -104
- package/dist/lib/profiles-presets.js.map +0 -1
- package/dist/lib/profiles.d.ts +0 -70
- package/dist/lib/profiles.d.ts.map +0 -1
- package/dist/lib/profiles.js +0 -145
- package/dist/lib/profiles.js.map +0 -1
- package/dist/lib/pty-client.d.ts +0 -23
- package/dist/lib/pty-client.d.ts.map +0 -1
- package/dist/lib/pty-client.js +0 -181
- package/dist/lib/pty-client.js.map +0 -1
- package/dist/lib/pty-server.d.ts +0 -21
- package/dist/lib/pty-server.d.ts.map +0 -1
- package/dist/lib/pty-server.js +0 -427
- package/dist/lib/pty-server.js.map +0 -1
- package/dist/lib/registry.d.ts +0 -45
- package/dist/lib/registry.d.ts.map +0 -1
- package/dist/lib/registry.js +0 -220
- package/dist/lib/registry.js.map +0 -1
- package/dist/lib/resources.d.ts +0 -55
- package/dist/lib/resources.d.ts.map +0 -1
- package/dist/lib/resources.js +0 -103
- package/dist/lib/resources.js.map +0 -1
- package/dist/lib/rotate.d.ts +0 -58
- package/dist/lib/rotate.d.ts.map +0 -1
- package/dist/lib/rotate.js +0 -93
- package/dist/lib/rotate.js.map +0 -1
- package/dist/lib/routines.d.ts +0 -99
- package/dist/lib/routines.d.ts.map +0 -1
- package/dist/lib/routines.js +0 -352
- package/dist/lib/routines.js.map +0 -1
- package/dist/lib/runner.d.ts +0 -26
- package/dist/lib/runner.d.ts.map +0 -1
- package/dist/lib/runner.js +0 -325
- package/dist/lib/runner.js.map +0 -1
- package/dist/lib/sandbox.d.ts +0 -26
- package/dist/lib/sandbox.d.ts.map +0 -1
- package/dist/lib/sandbox.js +0 -218
- package/dist/lib/sandbox.js.map +0 -1
- package/dist/lib/scheduler.d.ts +0 -26
- package/dist/lib/scheduler.d.ts.map +0 -1
- package/dist/lib/scheduler.js +0 -77
- package/dist/lib/scheduler.js.map +0 -1
- package/dist/lib/secrets-bundles.d.ts +0 -38
- package/dist/lib/secrets-bundles.d.ts.map +0 -1
- package/dist/lib/secrets-bundles.js +0 -176
- package/dist/lib/secrets-bundles.js.map +0 -1
- package/dist/lib/secrets.d.ts +0 -53
- package/dist/lib/secrets.d.ts.map +0 -1
- package/dist/lib/secrets.js +0 -140
- package/dist/lib/secrets.js.map +0 -1
- package/dist/lib/session/__tests__/db.test.d.ts +0 -2
- package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/db.test.js +0 -54
- package/dist/lib/session/__tests__/db.test.js.map +0 -1
- package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
- package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/discover.test.js +0 -63
- package/dist/lib/session/__tests__/discover.test.js.map +0 -1
- package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
- package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/prompt.test.js +0 -44
- package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
- package/dist/lib/session/__tests__/render.test.d.ts +0 -2
- package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/render.test.js +0 -602
- package/dist/lib/session/__tests__/render.test.js.map +0 -1
- package/dist/lib/session/active.d.ts +0 -44
- package/dist/lib/session/active.d.ts.map +0 -1
- package/dist/lib/session/active.js +0 -379
- package/dist/lib/session/active.js.map +0 -1
- package/dist/lib/session/artifacts.d.ts +0 -15
- package/dist/lib/session/artifacts.d.ts.map +0 -1
- package/dist/lib/session/artifacts.js +0 -86
- package/dist/lib/session/artifacts.js.map +0 -1
- package/dist/lib/session/db.d.ts +0 -140
- package/dist/lib/session/db.d.ts.map +0 -1
- package/dist/lib/session/db.js +0 -599
- package/dist/lib/session/db.js.map +0 -1
- package/dist/lib/session/discover.d.ts +0 -72
- package/dist/lib/session/discover.d.ts.map +0 -1
- package/dist/lib/session/discover.js +0 -1315
- package/dist/lib/session/discover.js.map +0 -1
- package/dist/lib/session/parse.d.ts +0 -34
- package/dist/lib/session/parse.d.ts.map +0 -1
- package/dist/lib/session/parse.js +0 -663
- package/dist/lib/session/parse.js.map +0 -1
- package/dist/lib/session/prompt.d.ts +0 -13
- package/dist/lib/session/prompt.d.ts.map +0 -1
- package/dist/lib/session/prompt.js +0 -79
- package/dist/lib/session/prompt.js.map +0 -1
- package/dist/lib/session/prompt.test.d.ts +0 -2
- package/dist/lib/session/prompt.test.d.ts.map +0 -1
- package/dist/lib/session/prompt.test.js +0 -57
- package/dist/lib/session/prompt.test.js.map +0 -1
- package/dist/lib/session/render.d.ts +0 -103
- package/dist/lib/session/render.d.ts.map +0 -1
- package/dist/lib/session/render.js +0 -798
- package/dist/lib/session/render.js.map +0 -1
- package/dist/lib/session/team-filter.d.ts +0 -35
- package/dist/lib/session/team-filter.d.ts.map +0 -1
- package/dist/lib/session/team-filter.js +0 -75
- package/dist/lib/session/team-filter.js.map +0 -1
- package/dist/lib/session/team-filter.test.d.ts +0 -2
- package/dist/lib/session/team-filter.test.d.ts.map +0 -1
- package/dist/lib/session/team-filter.test.js +0 -157
- package/dist/lib/session/team-filter.test.js.map +0 -1
- package/dist/lib/session/types.d.ts +0 -84
- package/dist/lib/session/types.d.ts.map +0 -1
- package/dist/lib/session/types.js +0 -11
- package/dist/lib/session/types.js.map +0 -1
- package/dist/lib/shims.d.ts +0 -272
- package/dist/lib/shims.d.ts.map +0 -1
- package/dist/lib/shims.js +0 -1322
- package/dist/lib/shims.js.map +0 -1
- package/dist/lib/skills.d.ts +0 -142
- package/dist/lib/skills.d.ts.map +0 -1
- package/dist/lib/skills.js +0 -791
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/state.d.ts +0 -87
- package/dist/lib/state.d.ts.map +0 -1
- package/dist/lib/state.js +0 -333
- package/dist/lib/state.js.map +0 -1
- package/dist/lib/subagents.d.ts +0 -84
- package/dist/lib/subagents.d.ts.map +0 -1
- package/dist/lib/subagents.js +0 -410
- package/dist/lib/subagents.js.map +0 -1
- package/dist/lib/teams/__tests__/oracle.test.d.ts +0 -2
- package/dist/lib/teams/__tests__/oracle.test.d.ts.map +0 -1
- package/dist/lib/teams/__tests__/oracle.test.js +0 -89
- package/dist/lib/teams/__tests__/oracle.test.js.map +0 -1
- package/dist/lib/teams/__tests__/supervisor.test.d.ts +0 -2
- package/dist/lib/teams/__tests__/supervisor.test.d.ts.map +0 -1
- package/dist/lib/teams/__tests__/supervisor.test.js +0 -179
- package/dist/lib/teams/__tests__/supervisor.test.js.map +0 -1
- package/dist/lib/teams/agents.d.ts +0 -247
- package/dist/lib/teams/agents.d.ts.map +0 -1
- package/dist/lib/teams/agents.js +0 -1244
- package/dist/lib/teams/agents.js.map +0 -1
- package/dist/lib/teams/api.d.ts +0 -91
- package/dist/lib/teams/api.d.ts.map +0 -1
- package/dist/lib/teams/api.js +0 -239
- package/dist/lib/teams/api.js.map +0 -1
- package/dist/lib/teams/cloud.d.ts +0 -11
- package/dist/lib/teams/cloud.d.ts.map +0 -1
- package/dist/lib/teams/cloud.js +0 -169
- package/dist/lib/teams/cloud.js.map +0 -1
- package/dist/lib/teams/debug.d.ts +0 -8
- package/dist/lib/teams/debug.d.ts.map +0 -1
- package/dist/lib/teams/debug.js +0 -12
- package/dist/lib/teams/debug.js.map +0 -1
- package/dist/lib/teams/file_ops.d.ts +0 -13
- package/dist/lib/teams/file_ops.d.ts.map +0 -1
- package/dist/lib/teams/file_ops.js +0 -66
- package/dist/lib/teams/file_ops.js.map +0 -1
- package/dist/lib/teams/index.d.ts +0 -16
- package/dist/lib/teams/index.d.ts.map +0 -1
- package/dist/lib/teams/index.js +0 -15
- package/dist/lib/teams/index.js.map +0 -1
- package/dist/lib/teams/oracle.d.ts +0 -20
- package/dist/lib/teams/oracle.d.ts.map +0 -1
- package/dist/lib/teams/oracle.js +0 -59
- package/dist/lib/teams/oracle.js.map +0 -1
- package/dist/lib/teams/parsers.d.ts +0 -9
- package/dist/lib/teams/parsers.d.ts.map +0 -1
- package/dist/lib/teams/parsers.js +0 -837
- package/dist/lib/teams/parsers.js.map +0 -1
- package/dist/lib/teams/persistence.d.ts +0 -43
- package/dist/lib/teams/persistence.d.ts.map +0 -1
- package/dist/lib/teams/persistence.js +0 -299
- package/dist/lib/teams/persistence.js.map +0 -1
- package/dist/lib/teams/ralph.d.ts +0 -8
- package/dist/lib/teams/ralph.d.ts.map +0 -1
- package/dist/lib/teams/ralph.js +0 -59
- package/dist/lib/teams/ralph.js.map +0 -1
- package/dist/lib/teams/registry.d.ts +0 -18
- package/dist/lib/teams/registry.d.ts.map +0 -1
- package/dist/lib/teams/registry.js +0 -68
- package/dist/lib/teams/registry.js.map +0 -1
- package/dist/lib/teams/summarizer.d.ts +0 -73
- package/dist/lib/teams/summarizer.d.ts.map +0 -1
- package/dist/lib/teams/summarizer.js +0 -780
- package/dist/lib/teams/summarizer.js.map +0 -1
- package/dist/lib/teams/supervisor.d.ts +0 -49
- package/dist/lib/teams/supervisor.d.ts.map +0 -1
- package/dist/lib/teams/supervisor.js +0 -74
- package/dist/lib/teams/supervisor.js.map +0 -1
- package/dist/lib/template.d.ts +0 -27
- package/dist/lib/template.d.ts.map +0 -1
- package/dist/lib/template.js +0 -60
- package/dist/lib/template.js.map +0 -1
- package/dist/lib/types.d.ts +0 -331
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js +0 -29
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/usage.d.ts +0 -105
- package/dist/lib/usage.d.ts.map +0 -1
- package/dist/lib/usage.js +0 -686
- package/dist/lib/usage.js.map +0 -1
- package/dist/lib/versions.d.ts +0 -253
- package/dist/lib/versions.d.ts.map +0 -1
- package/dist/lib/versions.js +0 -1796
- package/dist/lib/versions.js.map +0 -1
- package/scripts/rebuild-sqlite.sh +0 -46
|
@@ -1,724 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import ora from 'ora';
|
|
3
|
-
import * as fs from 'fs';
|
|
4
|
-
import * as os from 'os';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
import { confirm, checkbox } from '@inquirer/prompts';
|
|
7
|
-
import { AGENTS, resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
|
|
8
|
-
import { cloneRepo } from '../lib/git.js';
|
|
9
|
-
import { PERMISSIONS_CAPABLE_AGENTS, listInstalledPermissions, discoverPermissionsFromRepo, installPermissionSet, removePermissionSet, applyPermissionsToVersion, readAgentPermissions, exportPermissionsFromPath, getDefaultPermissionSet, computePermissionsDiff, mergePermissionSets, saveDefaultPermissionSet, } from '../lib/permissions.js';
|
|
10
|
-
import { listInstalledVersions, getGlobalDefault, getVersionHomePath, promptAgentVersionSelection, resolveAgentVersionTargets, } from '../lib/versions.js';
|
|
11
|
-
import { recordVersionResources } from '../lib/state.js';
|
|
12
|
-
import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, } from './utils.js';
|
|
13
|
-
/** Register the `agents permissions` command tree (list, add, remove, view). */
|
|
14
|
-
export function registerPermissionsCommands(program) {
|
|
15
|
-
const permissionsCmd = program
|
|
16
|
-
.command('permissions')
|
|
17
|
-
.description('Control what agents can access with allow/deny rules for bash, tools, and filesystem')
|
|
18
|
-
.addHelpText('after', `
|
|
19
|
-
Permissions define the boundary of what an agent can touch. Rules are organized into named sets stored in ~/.agents/permissions/ as YAML files. Apply sets to specific agent versions to reduce permission prompts or lock down behavior.
|
|
20
|
-
|
|
21
|
-
Examples:
|
|
22
|
-
# List permission sets in central storage
|
|
23
|
-
agents permissions list
|
|
24
|
-
|
|
25
|
-
# Check active permissions for an agent
|
|
26
|
-
agents permissions list claude@2.1.112
|
|
27
|
-
|
|
28
|
-
# Import permissions from an existing agent config
|
|
29
|
-
agents permissions add ~/.claude/settings.json --agents claude
|
|
30
|
-
|
|
31
|
-
# Install a permission set from GitHub
|
|
32
|
-
agents permissions add gh:team/permissions --agents codex,claude
|
|
33
|
-
|
|
34
|
-
# Apply a stored set to multiple versions
|
|
35
|
-
agents permissions add --names default --agents claude@2.1.112,codex@0.116.0
|
|
36
|
-
|
|
37
|
-
When to use:
|
|
38
|
-
- Reducing prompts: extract your allow list with 'agents permissions add ~/.claude/settings.json'
|
|
39
|
-
- Team sync: share permission sets via 'agents permissions add gh:team/perms'
|
|
40
|
-
- Version isolation: apply stricter permissions to experimental versions
|
|
41
|
-
`);
|
|
42
|
-
permissionsCmd
|
|
43
|
-
.command('list [agent]')
|
|
44
|
-
.description('Show permission sets in storage or active permissions for an agent version')
|
|
45
|
-
.option('-s, --scope <scope>', 'user (global) or project (repo-specific)', 'user')
|
|
46
|
-
.action(async (agentArg, options) => {
|
|
47
|
-
const cwd = process.cwd();
|
|
48
|
-
// Helper to render permissions for a specific version
|
|
49
|
-
const renderVersionPermissions = (agentId, version, isDefault, home, scope) => {
|
|
50
|
-
const agent = AGENTS[agentId];
|
|
51
|
-
const defaultLabel = isDefault ? ' default' : '';
|
|
52
|
-
const versionStr = chalk.gray(` (${version}${defaultLabel})`);
|
|
53
|
-
const perms = readAgentPermissions(agentId, scope, cwd, { home });
|
|
54
|
-
if (!perms) {
|
|
55
|
-
console.log(` ${chalk.bold(agentLabel(agent.id))}${versionStr}: ${chalk.gray('none')}`);
|
|
56
|
-
console.log();
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
console.log(` ${chalk.bold(agentLabel(agent.id))}${versionStr}:`);
|
|
60
|
-
if (agentId === 'claude') {
|
|
61
|
-
const claudePerms = perms;
|
|
62
|
-
if (claudePerms.permissions.allow.length > 0) {
|
|
63
|
-
console.log(chalk.green(' Allow:'));
|
|
64
|
-
for (const p of claudePerms.permissions.allow) {
|
|
65
|
-
console.log(` ${chalk.cyan(p)}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (claudePerms.permissions.deny.length > 0) {
|
|
69
|
-
console.log(chalk.red(' Deny:'));
|
|
70
|
-
for (const p of claudePerms.permissions.deny) {
|
|
71
|
-
console.log(` ${chalk.yellow(p)}`);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
else if (agentId === 'opencode') {
|
|
76
|
-
const ocPerms = perms;
|
|
77
|
-
console.log(chalk.gray(' Bash commands:'));
|
|
78
|
-
for (const [pattern, action] of Object.entries(ocPerms.permission.bash)) {
|
|
79
|
-
const color = action === 'allow' ? chalk.green : action === 'deny' ? chalk.red : chalk.yellow;
|
|
80
|
-
console.log(` ${chalk.cyan(pattern)}: ${color(action)}`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else if (agentId === 'codex') {
|
|
84
|
-
const codexPerms = perms;
|
|
85
|
-
if (codexPerms.approval_policy) {
|
|
86
|
-
console.log(` ${chalk.gray('approval_policy:')} ${chalk.cyan(codexPerms.approval_policy)}`);
|
|
87
|
-
}
|
|
88
|
-
if (codexPerms.sandbox_mode) {
|
|
89
|
-
console.log(` ${chalk.gray('sandbox_mode:')} ${chalk.cyan(codexPerms.sandbox_mode)}`);
|
|
90
|
-
}
|
|
91
|
-
if (codexPerms.sandbox_workspace_write) {
|
|
92
|
-
const sw = codexPerms.sandbox_workspace_write;
|
|
93
|
-
if (sw.network_access !== undefined) {
|
|
94
|
-
console.log(` ${chalk.gray('network_access:')} ${chalk.cyan(String(sw.network_access))}`);
|
|
95
|
-
}
|
|
96
|
-
if (sw.writable_roots && sw.writable_roots.length > 0) {
|
|
97
|
-
console.log(` ${chalk.gray('writable_roots:')}`);
|
|
98
|
-
for (const r of sw.writable_roots) {
|
|
99
|
-
console.log(` ${chalk.cyan(r)}`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
console.log();
|
|
105
|
-
};
|
|
106
|
-
if (agentArg) {
|
|
107
|
-
// Parse agent@version syntax
|
|
108
|
-
const parts = agentArg.split('@');
|
|
109
|
-
const agentName = parts[0];
|
|
110
|
-
const requestedVersion = parts[1] || null;
|
|
111
|
-
const agentId = resolveAgentName(agentName);
|
|
112
|
-
if (!agentId) {
|
|
113
|
-
console.log(chalk.red(formatAgentError(agentName, PERMISSIONS_CAPABLE_AGENTS)));
|
|
114
|
-
process.exit(1);
|
|
115
|
-
}
|
|
116
|
-
if (!PERMISSIONS_CAPABLE_AGENTS.includes(agentId)) {
|
|
117
|
-
console.log(chalk.yellow(`${AGENTS[agentId].name} does not support fine-grained permissions`));
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const agent = AGENTS[agentId];
|
|
121
|
-
const installedVersions = listInstalledVersions(agentId);
|
|
122
|
-
const defaultVer = getGlobalDefault(agentId);
|
|
123
|
-
console.log(chalk.bold(`Installed Permissions for ${agentLabel(agent.id)} (${options.scope}):\n`));
|
|
124
|
-
if (installedVersions.length === 0) {
|
|
125
|
-
// Not version-managed - use default home
|
|
126
|
-
const perms = readAgentPermissions(agentId, options.scope, cwd);
|
|
127
|
-
if (!perms) {
|
|
128
|
-
console.log(chalk.gray(` No permissions configured`));
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
console.log(` ${chalk.bold(agentLabel(agent.id))}:`);
|
|
132
|
-
if (agentId === 'claude') {
|
|
133
|
-
const claudePerms = perms;
|
|
134
|
-
if (claudePerms.permissions.allow.length > 0) {
|
|
135
|
-
console.log(chalk.green(' Allow:'));
|
|
136
|
-
for (const p of claudePerms.permissions.allow) {
|
|
137
|
-
console.log(` ${chalk.cyan(p)}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (claudePerms.permissions.deny.length > 0) {
|
|
141
|
-
console.log(chalk.red(' Deny:'));
|
|
142
|
-
for (const p of claudePerms.permissions.deny) {
|
|
143
|
-
console.log(` ${chalk.yellow(p)}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
// Version-managed: determine which versions to show
|
|
150
|
-
let versionsToShow;
|
|
151
|
-
if (requestedVersion === 'default') {
|
|
152
|
-
if (!defaultVer) {
|
|
153
|
-
console.log(chalk.yellow(` No default version set for ${agentLabel(agent.id)}. Run: agents use ${agentId}@<version>`));
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
versionsToShow = [defaultVer];
|
|
157
|
-
}
|
|
158
|
-
else if (requestedVersion) {
|
|
159
|
-
if (!installedVersions.includes(requestedVersion)) {
|
|
160
|
-
console.log(chalk.red(` Version ${requestedVersion} not installed for ${agentLabel(agent.id)}.`));
|
|
161
|
-
console.log(chalk.gray(` Installed versions: ${installedVersions.join(', ')}`));
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
versionsToShow = [requestedVersion];
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
// Show all versions, default first
|
|
168
|
-
versionsToShow = [...installedVersions].sort((a, b) => {
|
|
169
|
-
if (a === defaultVer)
|
|
170
|
-
return -1;
|
|
171
|
-
if (b === defaultVer)
|
|
172
|
-
return 1;
|
|
173
|
-
return 0;
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
for (const version of versionsToShow) {
|
|
177
|
-
const home = getVersionHomePath(agentId, version);
|
|
178
|
-
renderVersionPermissions(agentId, version, version === defaultVer, home, options.scope);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
// List central permission sets
|
|
183
|
-
const sets = listInstalledPermissions();
|
|
184
|
-
if (sets.length === 0) {
|
|
185
|
-
console.log(chalk.gray('No permission sets installed.'));
|
|
186
|
-
console.log(chalk.gray('Use `agents permissions add <source>` to add permission sets.'));
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
console.log(chalk.bold('Installed Permission Sets:\n'));
|
|
190
|
-
for (const perm of sets) {
|
|
191
|
-
const desc = perm.set.description ? ` - ${chalk.gray(perm.set.description)}` : '';
|
|
192
|
-
console.log(` ${chalk.cyan(perm.name)}${desc}`);
|
|
193
|
-
console.log(` ${chalk.gray(`${perm.set.allow.length} allow, ${perm.set.deny?.length || 0} deny rules`)}`);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
permissionsCmd
|
|
198
|
-
.command('add [source]')
|
|
199
|
-
.description('Import permissions from an agent config, YAML, or GitHub, then apply to versions')
|
|
200
|
-
.option('-a, --agents <list>', 'Targets: claude, codex@0.116.0, or gemini@default')
|
|
201
|
-
.option('--names <list>', 'Permission set names from ~/.agents/permissions/ (comma-separated)')
|
|
202
|
-
.option('--all', 'Apply to all installed versions instead of just defaults')
|
|
203
|
-
.option('--replace', 'Replace managed permission block instead of merging (drops rules no longer in the set)')
|
|
204
|
-
.option('-y, --yes', 'Skip all prompts and confirmations')
|
|
205
|
-
.addHelpText('after', `
|
|
206
|
-
Examples:
|
|
207
|
-
# Import from an existing agent config (merges into default.yml)
|
|
208
|
-
agents permissions add ~/.claude/settings.json --agents claude
|
|
209
|
-
|
|
210
|
-
# Install permission YAML from GitHub
|
|
211
|
-
agents permissions add gh:team/permissions --agents codex,claude
|
|
212
|
-
|
|
213
|
-
# Apply a stored set to specific versions
|
|
214
|
-
agents permissions add --names default --agents claude@2.1.112,codex@0.116.0
|
|
215
|
-
|
|
216
|
-
# Apply to all installed versions non-interactively
|
|
217
|
-
agents permissions add --names default --all --yes
|
|
218
|
-
|
|
219
|
-
# Replace (don't merge) — drop rules no longer in the central set
|
|
220
|
-
agents permissions add --names default --agents claude@default --replace --yes
|
|
221
|
-
`)
|
|
222
|
-
.action(async (source, options) => {
|
|
223
|
-
try {
|
|
224
|
-
const skipPrompts = options.yes || !isInteractiveTerminal();
|
|
225
|
-
// Interactive mode: pick from central storage
|
|
226
|
-
if (!source) {
|
|
227
|
-
const installedSets = listInstalledPermissions();
|
|
228
|
-
if (installedSets.length === 0) {
|
|
229
|
-
console.log(chalk.yellow('No permission sets in ~/.agents/permissions/'));
|
|
230
|
-
console.log(chalk.gray('\nTo add permissions from a file or repo:'));
|
|
231
|
-
console.log(chalk.cyan(' agents permissions add ~/.claude/settings.json'));
|
|
232
|
-
console.log(chalk.cyan(' agents permissions add gh:user/repo'));
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
const availableSetNames = installedSets.map((set) => set.name);
|
|
236
|
-
const requestedNames = parseCommaSeparatedList(options.names);
|
|
237
|
-
let selectedNames;
|
|
238
|
-
if (requestedNames.length > 0) {
|
|
239
|
-
const missing = requestedNames.filter((name) => !availableSetNames.includes(name));
|
|
240
|
-
if (missing.length > 0) {
|
|
241
|
-
console.log(chalk.red(`Unknown permission set(s): ${missing.join(', ')}`));
|
|
242
|
-
console.log(chalk.gray(`Available: ${availableSetNames.join(', ')}`));
|
|
243
|
-
process.exit(1);
|
|
244
|
-
}
|
|
245
|
-
selectedNames = requestedNames;
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
if (!isInteractiveTerminal()) {
|
|
249
|
-
requireInteractiveSelection('Selecting permission sets from ~/.agents/permissions/', [
|
|
250
|
-
'agents permissions add --names default --agents codex',
|
|
251
|
-
'agents permissions add ./permissions/default.yml --agents codex',
|
|
252
|
-
]);
|
|
253
|
-
}
|
|
254
|
-
const choices = installedSets.map((installed) => ({
|
|
255
|
-
value: installed.name,
|
|
256
|
-
name: installed.set.description
|
|
257
|
-
? `${installed.name} ${chalk.gray(installed.set.description.slice(0, 40))}`
|
|
258
|
-
: `${installed.name} ${chalk.gray(`${installed.set.allow.length} allow, ${installed.set.deny?.length || 0} deny`)}`,
|
|
259
|
-
}));
|
|
260
|
-
const selected = await checkbox({
|
|
261
|
-
message: 'Select permission sets to apply',
|
|
262
|
-
choices: [
|
|
263
|
-
{ value: '__all__', name: chalk.bold('Select All') },
|
|
264
|
-
...choices,
|
|
265
|
-
],
|
|
266
|
-
});
|
|
267
|
-
if (selected.length === 0) {
|
|
268
|
-
console.log(chalk.gray('No permission sets selected.'));
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
selectedNames = selected.includes('__all__')
|
|
272
|
-
? availableSetNames
|
|
273
|
-
: selected.filter((s) => s !== '__all__');
|
|
274
|
-
}
|
|
275
|
-
let selectedAgents;
|
|
276
|
-
let versionSelections;
|
|
277
|
-
if (options.agents) {
|
|
278
|
-
const result = resolveAgentVersionTargets(options.agents, PERMISSIONS_CAPABLE_AGENTS, {
|
|
279
|
-
allVersions: options.all,
|
|
280
|
-
});
|
|
281
|
-
selectedAgents = result.selectedAgents;
|
|
282
|
-
versionSelections = result.versionSelections;
|
|
283
|
-
}
|
|
284
|
-
else if (options.all) {
|
|
285
|
-
selectedAgents = [...PERMISSIONS_CAPABLE_AGENTS];
|
|
286
|
-
versionSelections = new Map();
|
|
287
|
-
for (const agentId of selectedAgents) {
|
|
288
|
-
const versions = listInstalledVersions(agentId);
|
|
289
|
-
if (versions.length > 0) {
|
|
290
|
-
versionSelections.set(agentId, [...versions]);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
const result = await promptAgentVersionSelection(PERMISSIONS_CAPABLE_AGENTS, { skipPrompts });
|
|
296
|
-
selectedAgents = result.selectedAgents;
|
|
297
|
-
versionSelections = result.versionSelections;
|
|
298
|
-
}
|
|
299
|
-
if (selectedAgents.length === 0) {
|
|
300
|
-
console.log(chalk.yellow('\nNo agents selected.'));
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
// Apply selected permission sets
|
|
304
|
-
let applied = 0;
|
|
305
|
-
for (const setName of selectedNames) {
|
|
306
|
-
const installed = installedSets.find((s) => s.name === setName);
|
|
307
|
-
if (!installed)
|
|
308
|
-
continue;
|
|
309
|
-
for (const [agentId, versions] of versionSelections) {
|
|
310
|
-
for (const version of versions) {
|
|
311
|
-
const versionHome = getVersionHomePath(agentId, version);
|
|
312
|
-
const applyResult = applyPermissionsToVersion(agentId, installed.set, versionHome, !options.replace);
|
|
313
|
-
if (applyResult.success) {
|
|
314
|
-
console.log(chalk.green(` Applied ${setName} to ${agentLabel(agentId)}@${version}`));
|
|
315
|
-
recordVersionResources(agentId, version, 'permissions', [setName]);
|
|
316
|
-
applied++;
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
console.log(chalk.red(` Failed: ${agentLabel(agentId)}@${version}: ${applyResult.error}`));
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
console.log(chalk.green(`\nApplied permissions to ${applied} version(s).`));
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
const spinner = ora('Fetching permissions...').start();
|
|
328
|
-
const isGitRepo = source.startsWith('gh:') || source.startsWith('git:') ||
|
|
329
|
-
source.startsWith('ssh:') || source.startsWith('https://') ||
|
|
330
|
-
source.startsWith('http://');
|
|
331
|
-
let localPath;
|
|
332
|
-
if (isGitRepo) {
|
|
333
|
-
const result = await cloneRepo(source);
|
|
334
|
-
localPath = result.localPath;
|
|
335
|
-
spinner.succeed('Repository cloned');
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
localPath = source.startsWith('~')
|
|
339
|
-
? path.join(os.homedir(), source.slice(1))
|
|
340
|
-
: path.resolve(source);
|
|
341
|
-
if (!fs.existsSync(localPath)) {
|
|
342
|
-
spinner.fail(`Path not found: ${localPath}`);
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
spinner.succeed('Using local path');
|
|
346
|
-
}
|
|
347
|
-
// Check if this is an agent config file
|
|
348
|
-
const isAgentConfig = localPath.endsWith('.json') || localPath.endsWith('.jsonc') || localPath.endsWith('.toml');
|
|
349
|
-
const looksLikeAgentConfig = localPath.includes('.claude') || localPath.includes('.opencode') || localPath.includes('.codex');
|
|
350
|
-
if (isAgentConfig && looksLikeAgentConfig) {
|
|
351
|
-
// Handle agent config file - convert, diff, merge into default set
|
|
352
|
-
const incoming = exportPermissionsFromPath(localPath);
|
|
353
|
-
if (!incoming || (incoming.allow.length === 0 && (!incoming.deny || incoming.deny.length === 0))) {
|
|
354
|
-
console.log(chalk.yellow(`\nNo permissions found in ${localPath}`));
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
// Get existing default permission set
|
|
358
|
-
const existing = getDefaultPermissionSet();
|
|
359
|
-
// Compute diff
|
|
360
|
-
const diff = computePermissionsDiff(existing, incoming);
|
|
361
|
-
const totalNew = diff.allow.added.length + diff.deny.added.length;
|
|
362
|
-
const totalExisting = diff.allow.existing.length + diff.deny.existing.length;
|
|
363
|
-
if (totalNew === 0) {
|
|
364
|
-
console.log(chalk.gray('\nAll permissions already exist in central storage.'));
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
// Show diff
|
|
368
|
-
console.log(chalk.bold('\nPermissions to add:\n'));
|
|
369
|
-
if (diff.allow.added.length > 0) {
|
|
370
|
-
console.log(chalk.green(' New allow rules:'));
|
|
371
|
-
for (const rule of diff.allow.added.slice(0, 20)) {
|
|
372
|
-
console.log(chalk.green(` + ${rule}`));
|
|
373
|
-
}
|
|
374
|
-
if (diff.allow.added.length > 20) {
|
|
375
|
-
console.log(chalk.green(` ... and ${diff.allow.added.length - 20} more`));
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
if (diff.deny.added.length > 0) {
|
|
379
|
-
console.log(chalk.red('\n New deny rules:'));
|
|
380
|
-
for (const rule of diff.deny.added) {
|
|
381
|
-
console.log(chalk.red(` + ${rule}`));
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
if (totalExisting > 0) {
|
|
385
|
-
console.log(chalk.gray(`\n (${totalExisting} rules already exist, will be skipped)`));
|
|
386
|
-
}
|
|
387
|
-
console.log();
|
|
388
|
-
// Confirm
|
|
389
|
-
if (!skipPrompts) {
|
|
390
|
-
const proceed = await confirm({
|
|
391
|
-
message: `Add ${totalNew} new permission rule${totalNew === 1 ? '' : 's'}?`,
|
|
392
|
-
default: true,
|
|
393
|
-
});
|
|
394
|
-
if (!proceed) {
|
|
395
|
-
console.log(chalk.gray('Cancelled.'));
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
// Merge and save
|
|
400
|
-
const merged = mergePermissionSets(existing, incoming);
|
|
401
|
-
const result = saveDefaultPermissionSet(merged);
|
|
402
|
-
if (!result.success) {
|
|
403
|
-
console.log(chalk.red(`Failed to save: ${result.error}`));
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
console.log(chalk.green(`Added ${totalNew} permission${totalNew === 1 ? '' : 's'} to ~/.agents/permissions/default.yml`));
|
|
407
|
-
// Apply to agent versions
|
|
408
|
-
let selectedAgents;
|
|
409
|
-
let versionSelections;
|
|
410
|
-
if (options.agents) {
|
|
411
|
-
const result = resolveAgentVersionTargets(options.agents, PERMISSIONS_CAPABLE_AGENTS, {
|
|
412
|
-
allVersions: options.all,
|
|
413
|
-
});
|
|
414
|
-
selectedAgents = result.selectedAgents;
|
|
415
|
-
versionSelections = result.versionSelections;
|
|
416
|
-
}
|
|
417
|
-
else if (options.all) {
|
|
418
|
-
selectedAgents = [...PERMISSIONS_CAPABLE_AGENTS];
|
|
419
|
-
versionSelections = new Map();
|
|
420
|
-
for (const agentId of selectedAgents) {
|
|
421
|
-
const versions = listInstalledVersions(agentId);
|
|
422
|
-
if (versions.length > 0) {
|
|
423
|
-
versionSelections.set(agentId, [...versions]);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
else if (!skipPrompts) {
|
|
428
|
-
const applyNow = await confirm({
|
|
429
|
-
message: 'Apply permissions to agent versions now?',
|
|
430
|
-
default: true,
|
|
431
|
-
});
|
|
432
|
-
if (applyNow) {
|
|
433
|
-
const result = await promptAgentVersionSelection(PERMISSIONS_CAPABLE_AGENTS, { skipPrompts: false });
|
|
434
|
-
selectedAgents = result.selectedAgents;
|
|
435
|
-
versionSelections = result.versionSelections;
|
|
436
|
-
}
|
|
437
|
-
else {
|
|
438
|
-
selectedAgents = [];
|
|
439
|
-
versionSelections = new Map();
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
else {
|
|
443
|
-
selectedAgents = [];
|
|
444
|
-
versionSelections = new Map();
|
|
445
|
-
}
|
|
446
|
-
if (selectedAgents.length > 0) {
|
|
447
|
-
let applied = 0;
|
|
448
|
-
for (const [agentId, versions] of versionSelections) {
|
|
449
|
-
for (const version of versions) {
|
|
450
|
-
const versionHome = getVersionHomePath(agentId, version);
|
|
451
|
-
const applyResult = applyPermissionsToVersion(agentId, merged, versionHome, !options.replace);
|
|
452
|
-
if (applyResult.success) {
|
|
453
|
-
console.log(chalk.green(` Applied to ${agentLabel(agentId)}@${version}`));
|
|
454
|
-
recordVersionResources(agentId, version, 'permissions', [merged.name || 'default']);
|
|
455
|
-
applied++;
|
|
456
|
-
}
|
|
457
|
-
else {
|
|
458
|
-
console.log(chalk.red(` Failed: ${agentLabel(agentId)}@${version}: ${applyResult.error}`));
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
console.log(chalk.gray(`\nApplied permissions to ${applied} version(s).`));
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
else {
|
|
466
|
-
// Handle permission YAML files or repo
|
|
467
|
-
let permissions;
|
|
468
|
-
if (localPath.endsWith('.yml') || localPath.endsWith('.yaml')) {
|
|
469
|
-
const { parsePermissionSet } = await import('../lib/permissions.js');
|
|
470
|
-
const set = parsePermissionSet(localPath);
|
|
471
|
-
if (set) {
|
|
472
|
-
permissions = [{ name: set.name, path: localPath, set }];
|
|
473
|
-
}
|
|
474
|
-
else {
|
|
475
|
-
console.log(chalk.red('Invalid permission file'));
|
|
476
|
-
return;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
else {
|
|
480
|
-
permissions = discoverPermissionsFromRepo(localPath);
|
|
481
|
-
}
|
|
482
|
-
if (permissions.length === 0) {
|
|
483
|
-
console.log(chalk.yellow('\nNo permission sets found'));
|
|
484
|
-
return;
|
|
485
|
-
}
|
|
486
|
-
console.log(chalk.bold(`\nFound ${permissions.length} permission set(s):`));
|
|
487
|
-
for (const perm of permissions) {
|
|
488
|
-
const desc = perm.set.description ? ` - ${perm.set.description}` : '';
|
|
489
|
-
console.log(` ${chalk.cyan(perm.name)}${desc}`);
|
|
490
|
-
console.log(` ${chalk.gray(`${perm.set.allow.length} allow, ${perm.set.deny?.length || 0} deny rules`)}`);
|
|
491
|
-
}
|
|
492
|
-
// Confirm installation
|
|
493
|
-
if (!skipPrompts) {
|
|
494
|
-
const proceed = await confirm({
|
|
495
|
-
message: 'Install these permission sets?',
|
|
496
|
-
default: true,
|
|
497
|
-
});
|
|
498
|
-
if (!proceed) {
|
|
499
|
-
console.log(chalk.gray('Cancelled.'));
|
|
500
|
-
return;
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
const installSpinner = ora('Installing permission sets...').start();
|
|
504
|
-
let installed = 0;
|
|
505
|
-
for (const perm of permissions) {
|
|
506
|
-
const result = installPermissionSet(perm.path, perm.name);
|
|
507
|
-
if (result.success) {
|
|
508
|
-
installed++;
|
|
509
|
-
}
|
|
510
|
-
else {
|
|
511
|
-
installSpinner.stop();
|
|
512
|
-
console.log(chalk.red(` Failed to install ${perm.name}: ${result.error}`));
|
|
513
|
-
installSpinner.start();
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
installSpinner.succeed(`Installed ${installed} permission set(s) to ~/.agents/permissions/`);
|
|
517
|
-
// Apply to agent versions
|
|
518
|
-
let selectedAgents;
|
|
519
|
-
let versionSelections;
|
|
520
|
-
if (options.agents) {
|
|
521
|
-
const result = resolveAgentVersionTargets(options.agents, PERMISSIONS_CAPABLE_AGENTS, {
|
|
522
|
-
allVersions: options.all,
|
|
523
|
-
});
|
|
524
|
-
selectedAgents = result.selectedAgents;
|
|
525
|
-
versionSelections = result.versionSelections;
|
|
526
|
-
}
|
|
527
|
-
else if (options.all) {
|
|
528
|
-
selectedAgents = [...PERMISSIONS_CAPABLE_AGENTS];
|
|
529
|
-
versionSelections = new Map();
|
|
530
|
-
for (const agentId of selectedAgents) {
|
|
531
|
-
const versions = listInstalledVersions(agentId);
|
|
532
|
-
if (versions.length > 0) {
|
|
533
|
-
versionSelections.set(agentId, [...versions]);
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
else if (!skipPrompts) {
|
|
538
|
-
const applyNow = await confirm({
|
|
539
|
-
message: 'Apply these permissions to agent versions now?',
|
|
540
|
-
default: true,
|
|
541
|
-
});
|
|
542
|
-
if (applyNow) {
|
|
543
|
-
const result = await promptAgentVersionSelection(PERMISSIONS_CAPABLE_AGENTS, { skipPrompts: false });
|
|
544
|
-
selectedAgents = result.selectedAgents;
|
|
545
|
-
versionSelections = result.versionSelections;
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
548
|
-
selectedAgents = [];
|
|
549
|
-
versionSelections = new Map();
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
else {
|
|
553
|
-
selectedAgents = [];
|
|
554
|
-
versionSelections = new Map();
|
|
555
|
-
}
|
|
556
|
-
if (selectedAgents.length > 0) {
|
|
557
|
-
let applied = 0;
|
|
558
|
-
for (const perm of permissions) {
|
|
559
|
-
for (const [agentId, versions] of versionSelections) {
|
|
560
|
-
for (const version of versions) {
|
|
561
|
-
const versionHome = getVersionHomePath(agentId, version);
|
|
562
|
-
const applyResult = applyPermissionsToVersion(agentId, perm.set, versionHome, !options.replace);
|
|
563
|
-
if (applyResult.success) {
|
|
564
|
-
console.log(chalk.green(` Applied ${perm.name} to ${agentLabel(agentId)}@${version}`));
|
|
565
|
-
recordVersionResources(agentId, version, 'permissions', [perm.name]);
|
|
566
|
-
applied++;
|
|
567
|
-
}
|
|
568
|
-
else {
|
|
569
|
-
console.log(chalk.red(` Failed: ${agentLabel(agentId)}@${version}: ${applyResult.error}`));
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
console.log(chalk.gray(`\nApplied permissions to ${applied} version(s).`));
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
catch (err) {
|
|
579
|
-
if (isPromptCancelled(err)) {
|
|
580
|
-
console.log(chalk.gray('\nCancelled.'));
|
|
581
|
-
return;
|
|
582
|
-
}
|
|
583
|
-
console.error(chalk.red(`Error: ${err.message}`));
|
|
584
|
-
}
|
|
585
|
-
});
|
|
586
|
-
permissionsCmd
|
|
587
|
-
.command('remove [name]')
|
|
588
|
-
.description('Delete a permission set from ~/.agents/permissions/ (interactive picker if no name given)')
|
|
589
|
-
.addHelpText('after', `
|
|
590
|
-
Examples:
|
|
591
|
-
# Remove a set by name
|
|
592
|
-
agents permissions remove default
|
|
593
|
-
|
|
594
|
-
# Interactive picker
|
|
595
|
-
agents permissions remove
|
|
596
|
-
`)
|
|
597
|
-
.action(async (name) => {
|
|
598
|
-
let setsToRemove;
|
|
599
|
-
if (name) {
|
|
600
|
-
setsToRemove = [name];
|
|
601
|
-
}
|
|
602
|
-
else {
|
|
603
|
-
// Interactive picker
|
|
604
|
-
const installedSets = listInstalledPermissions();
|
|
605
|
-
if (installedSets.length === 0) {
|
|
606
|
-
console.log(chalk.yellow('No permission sets installed.'));
|
|
607
|
-
return;
|
|
608
|
-
}
|
|
609
|
-
if (!isInteractiveTerminal()) {
|
|
610
|
-
requireInteractiveSelection('Selecting permission sets to remove', [
|
|
611
|
-
'agents permissions remove default',
|
|
612
|
-
]);
|
|
613
|
-
}
|
|
614
|
-
try {
|
|
615
|
-
const selected = await checkbox({
|
|
616
|
-
message: 'Select permission sets to remove',
|
|
617
|
-
choices: installedSets.map((perm) => ({
|
|
618
|
-
value: perm.name,
|
|
619
|
-
name: perm.set.description
|
|
620
|
-
? `${perm.name} - ${perm.set.description}`
|
|
621
|
-
: perm.name,
|
|
622
|
-
})),
|
|
623
|
-
});
|
|
624
|
-
if (selected.length === 0) {
|
|
625
|
-
console.log(chalk.gray('No permission sets selected.'));
|
|
626
|
-
return;
|
|
627
|
-
}
|
|
628
|
-
setsToRemove = selected;
|
|
629
|
-
}
|
|
630
|
-
catch (err) {
|
|
631
|
-
if (isPromptCancelled(err)) {
|
|
632
|
-
console.log(chalk.gray('Cancelled'));
|
|
633
|
-
return;
|
|
634
|
-
}
|
|
635
|
-
throw err;
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
for (const setName of setsToRemove) {
|
|
639
|
-
const result = removePermissionSet(setName);
|
|
640
|
-
if (result.success) {
|
|
641
|
-
console.log(chalk.green(`Removed permission set '${setName}'`));
|
|
642
|
-
}
|
|
643
|
-
else {
|
|
644
|
-
console.log(chalk.red(result.error));
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
});
|
|
648
|
-
permissionsCmd
|
|
649
|
-
.command('view [name]')
|
|
650
|
-
.description('Read the allow and deny rules for a stored permission set')
|
|
651
|
-
.addHelpText('after', `
|
|
652
|
-
Examples:
|
|
653
|
-
# View a specific permission set
|
|
654
|
-
agents permissions view default
|
|
655
|
-
|
|
656
|
-
# Interactive picker
|
|
657
|
-
agents permissions view
|
|
658
|
-
`)
|
|
659
|
-
.action(async (name) => {
|
|
660
|
-
const installedSets = listInstalledPermissions();
|
|
661
|
-
if (installedSets.length === 0) {
|
|
662
|
-
console.log(chalk.yellow('No permission sets installed'));
|
|
663
|
-
return;
|
|
664
|
-
}
|
|
665
|
-
// If no name provided, show interactive select
|
|
666
|
-
if (!name) {
|
|
667
|
-
if (!isInteractiveTerminal()) {
|
|
668
|
-
requireInteractiveSelection('Selecting a permission set to view', [
|
|
669
|
-
'agents permissions view default',
|
|
670
|
-
]);
|
|
671
|
-
}
|
|
672
|
-
try {
|
|
673
|
-
const { select } = await import('@inquirer/prompts');
|
|
674
|
-
name = await select({
|
|
675
|
-
message: 'Select a permission set to view',
|
|
676
|
-
choices: installedSets.map((perm) => ({
|
|
677
|
-
value: perm.name,
|
|
678
|
-
name: perm.set.description
|
|
679
|
-
? `${perm.name} - ${perm.set.description}`
|
|
680
|
-
: perm.name,
|
|
681
|
-
})),
|
|
682
|
-
});
|
|
683
|
-
}
|
|
684
|
-
catch (err) {
|
|
685
|
-
if (isPromptCancelled(err)) {
|
|
686
|
-
console.log(chalk.gray('Cancelled'));
|
|
687
|
-
return;
|
|
688
|
-
}
|
|
689
|
-
throw err;
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
const perm = installedSets.find((p) => p.name === name);
|
|
693
|
-
if (!perm) {
|
|
694
|
-
console.log(chalk.yellow(`Permission set '${name}' not found`));
|
|
695
|
-
return;
|
|
696
|
-
}
|
|
697
|
-
// Build output
|
|
698
|
-
const lines = [];
|
|
699
|
-
lines.push(chalk.bold(`\n${perm.name}\n`));
|
|
700
|
-
if (perm.set.description) {
|
|
701
|
-
lines.push(` ${perm.set.description}`);
|
|
702
|
-
}
|
|
703
|
-
lines.push('');
|
|
704
|
-
if (perm.set.allow.length > 0) {
|
|
705
|
-
lines.push(chalk.green(' Allow rules:'));
|
|
706
|
-
for (const rule of perm.set.allow) {
|
|
707
|
-
lines.push(` ${chalk.cyan(rule)}`);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
if (perm.set.deny && perm.set.deny.length > 0) {
|
|
711
|
-
lines.push(chalk.red('\n Deny rules:'));
|
|
712
|
-
for (const rule of perm.set.deny) {
|
|
713
|
-
lines.push(` ${chalk.yellow(rule)}`);
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
lines.push('');
|
|
717
|
-
const output = lines.join('\n');
|
|
718
|
-
printWithPager(output, lines.length);
|
|
719
|
-
});
|
|
720
|
-
// Deprecated alias handler for 'perms'
|
|
721
|
-
// Note: This needs to be registered at the program level, not as a subcommand
|
|
722
|
-
// The actual deprecation message is shown in index.ts
|
|
723
|
-
}
|
|
724
|
-
//# sourceMappingURL=permissions.js.map
|