@phnx-labs/agents-cli 1.22.38 → 1.22.40
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 +302 -0
- package/README.md +111 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +46 -27
- package/dist/browser.js +2 -2
- package/dist/cli/command-registry.d.ts +135 -0
- package/dist/cli/command-registry.js +260 -0
- package/dist/commands/accounts.d.ts +20 -0
- package/dist/commands/accounts.js +186 -25
- package/dist/commands/apply.d.ts +3 -3
- package/dist/commands/apply.js +20 -63
- package/dist/commands/browser.js +206 -94
- package/dist/commands/budget.d.ts +7 -6
- package/dist/commands/budget.js +8 -7
- package/dist/commands/cloud.js +17 -20
- package/dist/commands/commands.js +1 -1
- package/dist/commands/computer-actions.d.ts +1 -35
- package/dist/commands/computer-actions.js +13 -181
- package/dist/commands/computer.d.ts +28 -3
- package/dist/commands/computer.js +93 -65
- package/dist/commands/config.js +47 -4
- package/dist/commands/cost.d.ts +2 -1
- package/dist/commands/cost.js +7 -6
- package/dist/commands/daemon.js +151 -4
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +19 -11
- package/dist/commands/events.js +1 -1
- package/dist/commands/exec.d.ts +2 -50
- package/dist/commands/exec.js +161 -216
- package/dist/commands/factory.js +1 -1
- package/dist/commands/feed.d.ts +2 -2
- package/dist/commands/feed.js +9 -12
- package/dist/commands/fleet-capture.js +25 -27
- package/dist/commands/focus.d.ts +2 -3
- package/dist/commands/focus.js +34 -9
- package/dist/commands/go.js +15 -5
- package/dist/commands/harness.d.ts +3 -3
- package/dist/commands/harness.js +53 -5
- package/dist/commands/hooks.js +1 -1
- package/dist/commands/import.js +2 -2
- package/dist/commands/insights.d.ts +5 -5
- package/dist/commands/insights.js +15 -9
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +4 -16
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +9 -9
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/memory.js +1 -1
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +7 -7
- package/dist/commands/mine.d.ts +11 -8
- package/dist/commands/mine.js +11 -10
- package/dist/commands/models.js +1 -1
- package/dist/commands/modes.js +1 -1
- package/dist/commands/monitors.js +23 -6
- package/dist/commands/output.d.ts +7 -6
- package/dist/commands/output.js +11 -10
- package/dist/commands/packages.js +4 -4
- package/dist/commands/perf.js +1 -1
- package/dist/commands/permissions.js +49 -32
- package/dist/commands/plugins.d.ts +1 -1
- package/dist/commands/plugins.js +3 -3
- package/dist/commands/profiles.d.ts +6 -9
- package/dist/commands/profiles.js +8 -321
- package/dist/commands/projects.d.ts +9 -0
- package/dist/commands/projects.js +140 -8
- package/dist/commands/prune.js +5 -13
- package/dist/commands/refresh-rules.js +1 -1
- package/dist/commands/repo.d.ts +5 -7
- package/dist/commands/repo.js +34 -18
- package/dist/commands/resource-view.js +4 -0
- package/dist/commands/resume.d.ts +11 -7
- package/dist/commands/resume.js +82 -98
- package/dist/commands/route.d.ts +12 -0
- package/dist/commands/route.js +261 -0
- package/dist/commands/routines.d.ts +2 -3
- package/dist/commands/routines.js +120 -145
- package/dist/commands/rules.js +1 -1
- package/dist/commands/run-account-picker.d.ts +1 -1
- package/dist/commands/run-account-picker.js +2 -2
- package/dist/commands/run-broadcast.d.ts +21 -0
- package/dist/commands/run-broadcast.js +89 -0
- package/dist/commands/run-cloud.js +1 -1
- package/dist/commands/secrets-vault.d.ts +10 -0
- package/dist/commands/{login.js → secrets-vault.js} +34 -14
- package/dist/commands/secrets.d.ts +4 -4
- package/dist/commands/secrets.js +72 -63
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-browser.d.ts +1 -1
- package/dist/commands/sessions-browser.js +9 -5
- package/dist/commands/sessions-export.js +2 -2
- package/dist/commands/sessions-inject.js +4 -5
- package/dist/commands/sessions-migrate.js +16 -27
- package/dist/commands/sessions-picker.d.ts +13 -0
- package/dist/commands/sessions-picker.js +182 -8
- package/dist/commands/sessions-resume.d.ts +7 -3
- package/dist/commands/sessions-resume.js +81 -33
- package/dist/commands/sessions-stats.js +2 -2
- package/dist/commands/sessions.d.ts +75 -68
- package/dist/commands/sessions.js +142 -180
- package/dist/commands/setup-computer.js +1 -1
- package/dist/commands/setup-fleet.js +3 -0
- package/dist/commands/setup-mine.d.ts +7 -3
- package/dist/commands/setup-mine.js +13 -8
- package/dist/commands/setup-secrets.js +2 -2
- package/dist/commands/setup-watchdog.js +2 -2
- package/dist/commands/setup.js +7 -2
- package/dist/commands/share.d.ts +65 -0
- package/dist/commands/share.js +253 -20
- package/dist/commands/skills.js +3 -3
- package/dist/commands/snapshot.d.ts +2 -2
- package/dist/commands/snapshot.js +9 -9
- package/dist/commands/ssh.d.ts +1 -1
- package/dist/commands/ssh.js +318 -48
- package/dist/commands/subagents.js +1 -1
- package/dist/commands/sync.js +24 -9
- package/dist/commands/teams.d.ts +2 -2
- package/dist/commands/teams.js +9 -18
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/trash.js +1 -1
- package/dist/commands/usage.d.ts +1 -1
- package/dist/commands/usage.js +2 -2
- package/dist/commands/utils.d.ts +4 -14
- package/dist/commands/utils.js +6 -27
- package/dist/commands/versions.js +2 -2
- package/dist/commands/view.d.ts +9 -77
- package/dist/commands/view.js +23 -8
- package/dist/commands/watchdog.js +1 -1
- package/dist/commands/webhook.js +11 -25
- package/dist/commands/workflows.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/account-capabilities.d.ts +39 -0
- package/dist/lib/account-capabilities.js +59 -0
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +66 -0
- package/dist/lib/account-registry.js +151 -5
- package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
- package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
- package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
- package/dist/lib/{usage.js → accounting/usage.js} +11 -11
- package/dist/lib/agent-spec/provider.js +1 -1
- package/dist/lib/agents.d.ts +72 -4
- package/dist/lib/agents.js +231 -199
- package/dist/lib/answer-router.d.ts +2 -2
- package/dist/lib/ask-classifier.d.ts +1 -1
- package/dist/lib/ask-classifier.js +1 -1
- package/dist/lib/audit/log.js +1 -1
- package/dist/lib/auth-health.d.ts +1 -1
- package/dist/lib/auth-health.js +2 -2
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/caller-identity.d.ts +28 -0
- package/dist/lib/browser/caller-identity.js +156 -0
- package/dist/lib/browser/cdp.js +1 -1
- package/dist/lib/browser/drivers/ssh.d.ts +1 -1
- package/dist/lib/browser/drivers/ssh.js +2 -2
- package/dist/lib/browser/hygiene.d.ts +10 -2
- package/dist/lib/browser/hygiene.js +7 -4
- package/dist/lib/browser/ipc.d.ts +22 -2
- package/dist/lib/browser/ipc.js +185 -21
- package/dist/lib/browser/profiles.d.ts +67 -3
- package/dist/lib/browser/profiles.js +129 -7
- package/dist/lib/browser/remote-control.d.ts +2 -2
- package/dist/lib/browser/remote-control.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +79 -0
- package/dist/lib/browser/runtime-state.js +119 -1
- package/dist/lib/browser/service.d.ts +113 -1
- package/dist/lib/browser/service.js +454 -40
- package/dist/lib/browser/sessions-list.d.ts +2 -1
- package/dist/lib/browser/sessions-list.js +4 -13
- package/dist/lib/browser/types.d.ts +18 -0
- package/dist/lib/budget/config.js +1 -1
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/byok-usage.js +1 -1
- package/dist/lib/capabilities.js +3 -15
- package/dist/lib/catchup.d.ts +1 -1
- package/dist/lib/catchup.js +1 -1
- package/dist/lib/cloud/dispatch.js +1 -1
- package/dist/lib/cloud/host.d.ts +3 -3
- package/dist/lib/cloud/host.js +5 -5
- package/dist/lib/cloud/rush.d.ts +9 -21
- package/dist/lib/cloud/rush.js +33 -120
- package/dist/lib/cloud/types.d.ts +2 -2
- package/dist/lib/commands.js +3 -13
- package/dist/lib/computer/actions.d.ts +36 -0
- package/dist/lib/computer/actions.js +162 -0
- package/dist/lib/computer/dispatch.d.ts +2 -2
- package/dist/lib/computer/dispatch.js +2 -2
- package/dist/lib/computer/sessions-list.d.ts +3 -3
- package/dist/lib/computer/sessions-list.js +2 -2
- package/dist/lib/config-keys.d.ts +12 -3
- package/dist/lib/config-keys.js +29 -6
- package/dist/lib/config-machine-keys.d.ts +4 -2
- package/dist/lib/config-machine-keys.js +6 -2
- package/dist/lib/crabbox/lease.js +9 -1
- package/dist/lib/crabbox/runtimes.d.ts +32 -7
- package/dist/lib/crabbox/runtimes.js +72 -30
- package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
- package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
- package/dist/lib/daemon-services.d.ts +1 -1
- package/dist/lib/daemon-services.js +5 -0
- package/dist/lib/daemon-ticks.d.ts +25 -0
- package/dist/lib/daemon-ticks.js +31 -1
- package/dist/lib/daemon-webhooks.d.ts +102 -0
- package/dist/lib/daemon-webhooks.js +210 -0
- package/dist/lib/device-config.d.ts +116 -72
- package/dist/lib/device-config.js +366 -132
- package/dist/lib/devices/config-migration.d.ts +29 -34
- package/dist/lib/devices/config-migration.js +209 -130
- package/dist/lib/devices/connect.d.ts +2 -2
- package/dist/lib/devices/connect.js +2 -2
- package/dist/lib/devices/discovery-policy.d.ts +30 -0
- package/dist/lib/devices/discovery-policy.js +101 -0
- package/dist/lib/devices/fleet-inventory.js +8 -3
- package/dist/lib/devices/harness-inventory.d.ts +1 -1
- package/dist/lib/devices/harness-inventory.js +12 -3
- package/dist/lib/devices/known-hosts.js +1 -1
- package/dist/lib/devices/pool.d.ts +61 -0
- package/dist/lib/devices/pool.js +83 -0
- package/dist/lib/devices/registry.d.ts +1 -1
- package/dist/lib/devices/registry.js +1 -1
- package/dist/lib/devices/resolve-profile.d.ts +2 -2
- package/dist/lib/devices/resolve-profile.js +2 -2
- package/dist/lib/devices/resolve-target.d.ts +1 -1
- package/dist/lib/devices/resolve-target.js +4 -4
- package/dist/lib/devices/self-host.d.ts +1 -1
- package/dist/lib/devices/self-host.js +3 -3
- package/dist/lib/devices/ssh-config.d.ts +1 -1
- package/dist/lib/devices/stats-cache.js +1 -1
- package/dist/lib/devices/sync.d.ts +3 -1
- package/dist/lib/devices/sync.js +3 -3
- package/dist/lib/doctor-diff.js +4 -4
- package/dist/lib/drift-sync.js +2 -2
- package/dist/lib/drift.js +2 -2
- package/dist/lib/event-families.d.ts +1 -1
- package/dist/lib/event-stream.d.ts +1 -1
- package/dist/lib/event-stream.js +2 -2
- package/dist/lib/events-ingest.js +2 -2
- package/dist/lib/exec.d.ts +8 -5
- package/dist/lib/exec.js +19 -13
- package/dist/lib/factory/snapshot.d.ts +1 -1
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
- package/dist/lib/{activity.js → feed/activity.js} +7 -7
- package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
- package/dist/lib/{events.js → feed/events.js} +5 -5
- package/dist/lib/{feed.js → feed/feed.js} +4 -4
- package/dist/lib/feed-outcome.d.ts +1 -1
- package/dist/lib/feed-policy.d.ts +1 -1
- package/dist/lib/feed-policy.js +1 -1
- package/dist/lib/feed-post.d.ts +1 -1
- package/dist/lib/feed-post.js +1 -1
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -6
- package/dist/lib/fleet/apply.js +18 -45
- package/dist/lib/fleet/auth-sync.d.ts +16 -35
- package/dist/lib/fleet/auth-sync.js +16 -75
- package/dist/lib/fleet/capture.js +8 -6
- package/dist/lib/fleet/manifest.js +23 -11
- package/dist/lib/fleet/types.d.ts +19 -7
- package/dist/lib/fleet-cache.d.ts +1 -1
- package/dist/lib/fleet-cache.js +1 -1
- package/dist/lib/format.d.ts +19 -0
- package/dist/lib/format.js +44 -1
- package/dist/lib/friction-heuristics.d.ts +1 -1
- package/dist/lib/git.d.ts +24 -1
- package/dist/lib/git.js +82 -38
- package/dist/lib/heal.js +3 -3
- package/dist/lib/hooks.d.ts +18 -0
- package/dist/lib/hooks.js +113 -1
- package/dist/lib/hosts/credentials.d.ts +30 -10
- package/dist/lib/hosts/credentials.js +38 -26
- package/dist/lib/hosts/dispatch.d.ts +3 -3
- package/dist/lib/hosts/dispatch.js +3 -3
- package/dist/lib/hosts/option.d.ts +3 -3
- package/dist/lib/hosts/option.js +7 -8
- package/dist/lib/hosts/passthrough.d.ts +17 -17
- package/dist/lib/hosts/passthrough.js +67 -50
- package/dist/lib/hosts/providers/devices.d.ts +1 -1
- package/dist/lib/hosts/providers/devices.js +1 -1
- package/dist/lib/hosts/reconcile.d.ts +1 -1
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +1 -1
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +5 -5
- package/dist/lib/hosts/registry.js +5 -5
- package/dist/lib/hosts/remote-cmd.d.ts +10 -10
- package/dist/lib/hosts/remote-cmd.js +25 -18
- package/dist/lib/hosts/remote-os.d.ts +4 -4
- package/dist/lib/hosts/remote-os.js +4 -4
- package/dist/lib/hosts/remote-session-id.d.ts +2 -2
- package/dist/lib/hosts/remote-session-id.js +2 -2
- package/dist/lib/hosts/routing-flag.d.ts +3 -3
- package/dist/lib/hosts/routing-flag.js +4 -5
- package/dist/lib/hosts/run-target.d.ts +4 -4
- package/dist/lib/hosts/run-target.js +4 -4
- package/dist/lib/hosts/session-index.d.ts +2 -2
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/session-marker.d.ts +1 -1
- package/dist/lib/hosts/session-marker.js +1 -1
- package/dist/lib/hosts/types.d.ts +2 -2
- package/dist/lib/hosts/types.js +2 -2
- package/dist/lib/import.js +1 -1
- package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +49 -1
- package/dist/lib/{migrate.js → installations/migrate.js} +265 -38
- package/dist/lib/installations/resolve.js +1 -1
- package/dist/lib/installations/strategies.js +1 -1
- package/dist/lib/installations/update.js +2 -2
- package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
- package/dist/lib/{versions.js → installations/versions.js} +51 -31
- package/dist/lib/isolation-boundary-report.js +1 -1
- package/dist/lib/linear-projects.d.ts +28 -0
- package/dist/lib/linear-projects.js +30 -0
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-gc.js +1 -1
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/mcp-registry.d.ts +62 -0
- package/dist/lib/mcp-registry.js +177 -0
- package/dist/lib/mcp.d.ts +5 -0
- package/dist/lib/mcp.js +124 -307
- package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
- package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
- package/dist/lib/menubar/install-menubar.d.ts +7 -0
- package/dist/lib/menubar/install-menubar.js +24 -6
- package/dist/lib/menubar/snapshot.d.ts +7 -0
- package/dist/lib/menubar/snapshot.js +8 -6
- package/dist/lib/models.js +1 -1
- package/dist/lib/monitors/config.d.ts +12 -0
- package/dist/lib/monitors/config.js +3 -0
- package/dist/lib/monitors/dispatch.js +26 -5
- package/dist/lib/monitors/engine.js +10 -0
- package/dist/lib/monitors/sources/webhook.d.ts +1 -1
- package/dist/lib/monitors/state.d.ts +42 -0
- package/dist/lib/monitors/state.js +30 -0
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/observe-aliases.d.ts +2 -2
- package/dist/lib/observe-aliases.js +2 -11
- package/dist/lib/output/git-output.js +2 -2
- package/dist/lib/overdue.d.ts +1 -1
- package/dist/lib/overdue.js +1 -1
- package/dist/lib/permissions-registry.d.ts +65 -0
- package/dist/lib/permissions-registry.js +599 -0
- package/dist/lib/permissions.d.ts +24 -13
- package/dist/lib/permissions.js +52 -271
- package/dist/lib/picker.d.ts +16 -0
- package/dist/lib/picker.js +33 -3
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +4 -4
- package/dist/lib/platform/paths.d.ts +8 -0
- package/dist/lib/platform/paths.js +11 -0
- package/dist/lib/platform/posixpath.js +3 -3
- package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
- package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
- package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
- package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
- package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
- package/dist/lib/{skills.js → plugins/skills.js} +7 -7
- package/dist/lib/pricing/cost.d.ts +1 -1
- package/dist/lib/pricing/cost.js +1 -1
- package/dist/lib/profiles-presets.d.ts +1 -1
- package/dist/lib/profiles-presets.js +1 -1
- package/dist/lib/profiles.js +2 -2
- package/dist/lib/project-import.js +4 -1
- package/dist/lib/project-launch.d.ts +1 -1
- package/dist/lib/project-launch.js +3 -3
- package/dist/lib/project-pull.d.ts +128 -0
- package/dist/lib/project-pull.js +384 -0
- package/dist/lib/project-root.d.ts +2 -2
- package/dist/lib/project-root.js +2 -2
- package/dist/lib/project-status.js +1 -1
- package/dist/lib/projects.d.ts +23 -0
- package/dist/lib/projects.js +29 -6
- package/dist/lib/refresh.d.ts +12 -1
- package/dist/lib/refresh.js +16 -9
- package/dist/lib/registry.d.ts +9 -2
- package/dist/lib/registry.js +11 -4
- package/dist/lib/resources.d.ts +2 -2
- package/dist/lib/resources.js +2 -2
- package/dist/lib/routers.d.ts +81 -0
- package/dist/lib/routers.js +153 -0
- package/dist/lib/routine-context.d.ts +1 -0
- package/dist/lib/routine-context.js +7 -2
- package/dist/lib/routine-notify-owner.d.ts +1 -1
- package/dist/lib/routine-notify.d.ts +1 -1
- package/dist/lib/routine-notify.js +1 -1
- package/dist/lib/routine-process-cleanup.d.ts +1 -1
- package/dist/lib/routine-readiness.d.ts +1 -1
- package/dist/lib/routine-readiness.js +11 -4
- package/dist/lib/routines-placement.d.ts +12 -2
- package/dist/lib/routines-placement.js +20 -3
- package/dist/lib/routines-project.d.ts +1 -1
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +1 -0
- package/dist/lib/rules/compile.js +10 -2
- package/dist/lib/rules/rules.js +1 -1
- package/dist/lib/run-notify.js +1 -1
- package/dist/lib/runner.d.ts +80 -2
- package/dist/lib/runner.js +241 -62
- package/dist/lib/sandbox.d.ts +1 -1
- package/dist/lib/scheduler.d.ts +1 -1
- package/dist/lib/scheduler.js +1 -1
- package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
- package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
- package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
- package/dist/lib/secrets/agent.js +2 -2
- package/dist/lib/secrets/audit.js +1 -1
- package/dist/lib/secrets/bundles.d.ts +3 -3
- package/dist/lib/secrets/bundles.js +7 -7
- package/dist/lib/secrets/index.js +1 -1
- package/dist/lib/secrets/list-filter.d.ts +1 -1
- package/dist/lib/secrets/list-filter.js +2 -2
- package/dist/lib/secrets/push.d.ts +1 -1
- package/dist/lib/secrets/push.js +10 -12
- package/dist/lib/secrets/remote.d.ts +12 -10
- package/dist/lib/secrets/remote.js +21 -14
- package/dist/lib/secrets/vault.js +2 -2
- package/dist/lib/self-heal/checks/shadowing.js +1 -1
- package/dist/lib/self-heal/checks/shims.js +1 -1
- package/dist/lib/self-update.d.ts +39 -4
- package/dist/lib/self-update.js +78 -25
- package/dist/lib/serve/control.d.ts +1 -1
- package/dist/lib/serve/control.js +4 -4
- package/dist/lib/serve/data.d.ts +1 -1
- package/dist/lib/serve/data.js +1 -1
- package/dist/lib/serve/stream.js +1 -1
- package/dist/lib/service-manifest.d.ts +29 -0
- package/dist/lib/service-manifest.js +80 -0
- package/dist/lib/session/active.d.ts +59 -7
- package/dist/lib/session/active.js +158 -17
- package/dist/lib/session/bash-command.js +1 -1
- package/dist/lib/session/claude-accounts.d.ts +1 -1
- package/dist/lib/session/claude-accounts.js +1 -1
- package/dist/lib/session/db.d.ts +10 -2
- package/dist/lib/session/db.js +25 -6
- package/dist/lib/session/discover.d.ts +77 -0
- package/dist/lib/session/discover.js +130 -25
- package/dist/lib/session/fork.js +1 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/insights.d.ts +1 -1
- package/dist/lib/session/insights.js +1 -1
- package/dist/lib/session/live-metadata.d.ts +15 -0
- package/dist/lib/session/live-metadata.js +76 -0
- package/dist/lib/session/migrate-targets.d.ts +1 -1
- package/dist/lib/session/recovery.d.ts +1 -1
- package/dist/lib/session/recovery.js +2 -2
- package/dist/lib/session/remote-active.d.ts +10 -1
- package/dist/lib/session/remote-active.js +8 -3
- package/dist/lib/session/remote-bundle.d.ts +1 -1
- package/dist/lib/session/remote-bundle.js +2 -2
- package/dist/lib/session/remote-list.d.ts +15 -4
- package/dist/lib/session/remote-list.js +40 -3
- package/dist/lib/session/remote.d.ts +5 -5
- package/dist/lib/session/remote.js +13 -17
- package/dist/lib/session/resume-command.d.ts +3 -2
- package/dist/lib/session/resume-command.js +4 -3
- package/dist/lib/session/resume-owner.d.ts +3 -3
- package/dist/lib/session/resume-owner.js +3 -3
- package/dist/lib/session/session-cache.d.ts +12 -0
- package/dist/lib/session/session-cache.js +2 -0
- package/dist/lib/session/shell-programs.js +1 -1
- package/dist/lib/session/state.js +5 -5
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/team-filter.js +1 -1
- package/dist/lib/session/types.d.ts +3 -3
- package/dist/lib/session/width.d.ts +2 -2
- package/dist/lib/session/width.js +2 -2
- package/dist/lib/share/delete.d.ts +21 -0
- package/dist/lib/share/delete.js +42 -0
- package/dist/lib/share/publish.d.ts +82 -0
- package/dist/lib/share/publish.js +170 -18
- package/dist/lib/share/worker-template.js +172 -9
- package/dist/lib/shims.js +35 -7
- package/dist/lib/smart-launch.d.ts +36 -6
- package/dist/lib/smart-launch.js +65 -8
- package/dist/lib/snapshot.d.ts +4 -4
- package/dist/lib/snapshot.js +2 -2
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +2 -2
- package/dist/lib/ssh-tunnel.d.ts +10 -10
- package/dist/lib/ssh-tunnel.js +12 -12
- package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
- package/dist/lib/staleness/checkers/hooks.js +1 -1
- package/dist/lib/staleness/detectors/permissions.js +0 -23
- package/dist/lib/staleness/detectors/plugins.js +1 -1
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/layers.d.ts +1 -1
- package/dist/lib/staleness/layers.js +1 -1
- package/dist/lib/staleness/writers/mcp.js +3 -1
- package/dist/lib/staleness/writers/plugins.js +1 -1
- package/dist/lib/staleness/writers/types.d.ts +8 -0
- package/dist/lib/startup/command-registry.d.ts +5 -147
- package/dist/lib/startup/command-registry.js +38 -303
- package/dist/lib/startup/dev-build.d.ts +0 -21
- package/dist/lib/startup/dev-build.js +29 -8
- package/dist/lib/state.d.ts +19 -1
- package/dist/lib/state.js +120 -51
- package/dist/lib/subagents.js +1 -1
- package/dist/lib/sync-status.js +1 -1
- package/dist/lib/sync-umbrella.d.ts +6 -1
- package/dist/lib/sync-umbrella.js +9 -4
- package/dist/lib/teams/agents.js +2 -2
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
- package/dist/lib/terminal/engine.js +1 -1
- package/dist/lib/terminal/index.d.ts +4 -0
- package/dist/lib/terminal/index.js +3 -0
- package/dist/lib/terminal/inject.d.ts +2 -2
- package/dist/lib/terminal/inject.js +2 -2
- package/dist/lib/terminal/transport.js +1 -1
- package/dist/lib/tmux/index.d.ts +1 -1
- package/dist/lib/tmux/index.js +1 -1
- package/dist/lib/tmux/session.d.ts +21 -5
- package/dist/lib/tmux/session.js +76 -22
- package/dist/lib/triggers/handlers.d.ts +1 -1
- package/dist/lib/triggers/handlers.js +2 -2
- package/dist/lib/triggers/webhook.d.ts +36 -2
- package/dist/lib/triggers/webhook.js +97 -42
- package/dist/lib/types.d.ts +18 -6
- package/dist/lib/usage-fleet.d.ts +1 -1
- package/dist/lib/usage-fleet.js +1 -1
- package/dist/lib/usage-refresh.d.ts +1 -1
- package/dist/lib/usage-refresh.js +3 -3
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/view-types.d.ts +56 -0
- package/dist/lib/view-types.js +1 -0
- package/dist/lib/watchdog/rotate.d.ts +2 -2
- package/dist/lib/watchdog/rotate.js +3 -3
- package/dist/lib/watchdog/runner.d.ts +2 -3
- package/dist/lib/watchdog/runner.js +3 -4
- package/dist/lib/workflows.js +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.js +2 -2
- package/dist/commands/bench.d.ts +0 -2
- package/dist/commands/bench.js +0 -101
- package/dist/commands/cp.d.ts +0 -84
- package/dist/commands/cp.js +0 -231
- package/dist/commands/login.d.ts +0 -2
- package/dist/lib/resources/commands.d.ts +0 -46
- package/dist/lib/resources/commands.js +0 -211
- package/dist/lib/resources/hooks.d.ts +0 -16
- package/dist/lib/resources/hooks.js +0 -153
- package/dist/lib/resources/mcp.d.ts +0 -34
- package/dist/lib/resources/mcp.js +0 -250
- package/dist/lib/resources/memory.d.ts +0 -15
- package/dist/lib/resources/memory.js +0 -46
- package/dist/lib/resources/permissions.d.ts +0 -13
- package/dist/lib/resources/permissions.js +0 -202
- package/dist/lib/resources/rules.d.ts +0 -46
- package/dist/lib/resources/rules.js +0 -179
- package/dist/lib/resources/skills.d.ts +0 -37
- package/dist/lib/resources/skills.js +0 -247
- package/dist/lib/resources/subagents.d.ts +0 -46
- package/dist/lib/resources/subagents.js +0 -202
- /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory resource handler — knowledge/facts store (not rules/instructions).
|
|
3
|
-
*
|
|
4
|
-
* Canonical source: layered `memory/` dirs under project/user/system agents
|
|
5
|
-
* roots. Sync copies into each capable agent's version home (see memory.ts).
|
|
6
|
-
*/
|
|
7
|
-
import * as fs from 'fs';
|
|
8
|
-
import { listMemoryFacts, readMemoryFact, syncMemoryToVersionHome, memoryTargetDir, } from '../memory.js';
|
|
9
|
-
function toItem(fact) {
|
|
10
|
-
let content = '';
|
|
11
|
-
try {
|
|
12
|
-
content = fs.readFileSync(fact.path, 'utf-8');
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
content = '';
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
name: fact.name,
|
|
19
|
-
item: { name: fact.name, content, summary: fact.summary },
|
|
20
|
-
layer: fact.layer,
|
|
21
|
-
path: fact.path,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
export const MemoryHandler = {
|
|
25
|
-
kind: 'memory',
|
|
26
|
-
listAll(_agent, cwd) {
|
|
27
|
-
return listMemoryFacts(cwd).map(toItem);
|
|
28
|
-
},
|
|
29
|
-
resolve(_agent, name, cwd) {
|
|
30
|
-
const fact = readMemoryFact(name, cwd);
|
|
31
|
-
return fact ? toItem(fact) : null;
|
|
32
|
-
},
|
|
33
|
-
sync(agent, versionHome, cwd) {
|
|
34
|
-
syncMemoryToVersionHome(agent, versionHome, cwd);
|
|
35
|
-
},
|
|
36
|
-
format(_agent) {
|
|
37
|
-
return 'md';
|
|
38
|
-
},
|
|
39
|
-
targetDir(agent) {
|
|
40
|
-
return memoryTargetDir(agent);
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
/** Convenience: list fact names for a cwd. */
|
|
44
|
-
export function listMemoryNames(cwd) {
|
|
45
|
-
return listMemoryFacts(cwd).map((f) => f.name);
|
|
46
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PermissionsHandler - ResourceHandler implementation for permissions.
|
|
3
|
-
*
|
|
4
|
-
* Permissions are stored as YAML files in permissions/ directories at each layer.
|
|
5
|
-
* Resolution: project > user > system (higher layer wins on name conflict).
|
|
6
|
-
* Unlike other resources, permissions merge into agent-specific config files
|
|
7
|
-
* (Claude: settings.json, Codex: config.toml, OpenCode: opencode.jsonc).
|
|
8
|
-
*/
|
|
9
|
-
import type { ResourceHandler } from './types.js';
|
|
10
|
-
import type { PermissionSet } from '../types.js';
|
|
11
|
-
export type PermissionItem = PermissionSet;
|
|
12
|
-
export declare const PermissionsHandler: ResourceHandler<PermissionItem>;
|
|
13
|
-
export default PermissionsHandler;
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PermissionsHandler - ResourceHandler implementation for permissions.
|
|
3
|
-
*
|
|
4
|
-
* Permissions are stored as YAML files in permissions/ directories at each layer.
|
|
5
|
-
* Resolution: project > user > system (higher layer wins on name conflict).
|
|
6
|
-
* Unlike other resources, permissions merge into agent-specific config files
|
|
7
|
-
* (Claude: settings.json, Codex: config.toml, OpenCode: opencode.jsonc).
|
|
8
|
-
*/
|
|
9
|
-
import * as fs from 'fs';
|
|
10
|
-
import * as path from 'path';
|
|
11
|
-
import { getSystemAgentsDir, getUserAgentsDir, getProjectAgentsDir, getEnabledExtraRepos, } from '../state.js';
|
|
12
|
-
import { parsePermissionSet, applyPermissionsToVersion, mergePermissionSets, } from '../permissions.js';
|
|
13
|
-
import { isCapable } from '../capabilities.js';
|
|
14
|
-
/**
|
|
15
|
-
* Get the permissions directory for a given layer root.
|
|
16
|
-
*/
|
|
17
|
-
function getPermissionsDirForRoot(root) {
|
|
18
|
-
return path.join(root, 'permissions');
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Get layer directories for permission resolution.
|
|
22
|
-
*/
|
|
23
|
-
function getLayerDirs(cwd) {
|
|
24
|
-
return {
|
|
25
|
-
system: getSystemAgentsDir(),
|
|
26
|
-
user: getUserAgentsDir(),
|
|
27
|
-
project: cwd ? getProjectAgentsDir(cwd) : null,
|
|
28
|
-
extra: getEnabledExtraRepos().map((e) => e.dir),
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* List permission files in a directory.
|
|
33
|
-
* Returns only YAML files, stripping the extension for the name.
|
|
34
|
-
*/
|
|
35
|
-
function listPermissionsInDir(dir) {
|
|
36
|
-
if (!fs.existsSync(dir))
|
|
37
|
-
return [];
|
|
38
|
-
try {
|
|
39
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
40
|
-
const permissions = [];
|
|
41
|
-
for (const entry of entries) {
|
|
42
|
-
if (!entry.isFile())
|
|
43
|
-
continue;
|
|
44
|
-
if (entry.name.startsWith('.'))
|
|
45
|
-
continue;
|
|
46
|
-
if (entry.name.endsWith('.yaml') || entry.name.endsWith('.yml')) {
|
|
47
|
-
permissions.push({
|
|
48
|
-
name: entry.name.replace(/\.(yaml|yml)$/, ''),
|
|
49
|
-
path: path.join(dir, entry.name),
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return permissions;
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return [];
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Get the config file path for an agent's permissions.
|
|
61
|
-
*/
|
|
62
|
-
function getAgentConfigPath(agent, versionHome) {
|
|
63
|
-
switch (agent) {
|
|
64
|
-
case 'claude':
|
|
65
|
-
return path.join(versionHome, '.claude', 'settings.json');
|
|
66
|
-
case 'codex':
|
|
67
|
-
return path.join(versionHome, '.codex', 'config.toml');
|
|
68
|
-
case 'opencode':
|
|
69
|
-
return path.join(versionHome, '.config', 'opencode', 'opencode.jsonc');
|
|
70
|
-
case 'kimi':
|
|
71
|
-
return path.join(versionHome, '.kimi-code', 'config.toml');
|
|
72
|
-
case 'droid':
|
|
73
|
-
return path.join(versionHome, '.factory', 'settings.json');
|
|
74
|
-
case 'kiro':
|
|
75
|
-
return path.join(versionHome, '.kiro', 'settings', 'permissions.yaml');
|
|
76
|
-
case 'openclaw':
|
|
77
|
-
return path.join(versionHome, '.openclaw', 'openclaw.json');
|
|
78
|
-
case 'copilot':
|
|
79
|
-
return path.join(versionHome, '.copilot', 'permissions-config.json');
|
|
80
|
-
case 'hermes':
|
|
81
|
-
return path.join(versionHome, '.hermes', 'config.yaml');
|
|
82
|
-
case 'goose':
|
|
83
|
-
return path.join(versionHome, '.config', 'goose', 'permission.yaml');
|
|
84
|
-
case 'muse':
|
|
85
|
-
// Muse approval defaults live in settings.json; no separate permissions file.
|
|
86
|
-
return path.join(versionHome, '.config', 'muse', 'settings.json');
|
|
87
|
-
default:
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
export const PermissionsHandler = {
|
|
92
|
-
kind: 'permission',
|
|
93
|
-
/**
|
|
94
|
-
* List all permissions across layers, with higher layer winning on name conflict.
|
|
95
|
-
* Returns a union of all permissions, deduplicated by name.
|
|
96
|
-
*/
|
|
97
|
-
listAll(agent, cwd) {
|
|
98
|
-
const layers = getLayerDirs(cwd);
|
|
99
|
-
const seen = new Set();
|
|
100
|
-
const results = [];
|
|
101
|
-
// Build layer roots in precedence order: project > user > system > extras
|
|
102
|
-
const roots = [];
|
|
103
|
-
if (layers.project) {
|
|
104
|
-
roots.push({ dir: getPermissionsDirForRoot(layers.project), layer: 'project' });
|
|
105
|
-
}
|
|
106
|
-
roots.push({ dir: getPermissionsDirForRoot(layers.user), layer: 'user' });
|
|
107
|
-
roots.push({ dir: getPermissionsDirForRoot(layers.system), layer: 'system' });
|
|
108
|
-
for (const extraDir of layers.extra) {
|
|
109
|
-
roots.push({ dir: getPermissionsDirForRoot(extraDir), layer: 'system' });
|
|
110
|
-
}
|
|
111
|
-
for (const { dir, layer } of roots) {
|
|
112
|
-
const permissions = listPermissionsInDir(dir);
|
|
113
|
-
for (const perm of permissions) {
|
|
114
|
-
if (seen.has(perm.name))
|
|
115
|
-
continue;
|
|
116
|
-
seen.add(perm.name);
|
|
117
|
-
const item = parsePermissionSet(perm.path);
|
|
118
|
-
if (item) {
|
|
119
|
-
results.push({
|
|
120
|
-
name: perm.name,
|
|
121
|
-
item,
|
|
122
|
-
layer,
|
|
123
|
-
path: perm.path,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return results.sort((a, b) => a.name.localeCompare(b.name));
|
|
129
|
-
},
|
|
130
|
-
/**
|
|
131
|
-
* Resolve a single permission by name.
|
|
132
|
-
* Returns the winning layer's version, or null if not found.
|
|
133
|
-
*/
|
|
134
|
-
resolve(agent, name, cwd) {
|
|
135
|
-
const layers = getLayerDirs(cwd);
|
|
136
|
-
// Build candidate paths in precedence order: project > user > system > extras
|
|
137
|
-
const candidates = [];
|
|
138
|
-
if (layers.project) {
|
|
139
|
-
candidates.push({ dir: getPermissionsDirForRoot(layers.project), layer: 'project' });
|
|
140
|
-
}
|
|
141
|
-
candidates.push({ dir: getPermissionsDirForRoot(layers.user), layer: 'user' });
|
|
142
|
-
candidates.push({ dir: getPermissionsDirForRoot(layers.system), layer: 'system' });
|
|
143
|
-
for (const extraDir of layers.extra) {
|
|
144
|
-
candidates.push({ dir: getPermissionsDirForRoot(extraDir), layer: 'system' });
|
|
145
|
-
}
|
|
146
|
-
for (const { dir, layer } of candidates) {
|
|
147
|
-
// Try .yaml first, then .yml
|
|
148
|
-
for (const ext of ['.yaml', '.yml']) {
|
|
149
|
-
const filePath = path.join(dir, `${name}${ext}`);
|
|
150
|
-
const item = parsePermissionSet(filePath);
|
|
151
|
-
if (item) {
|
|
152
|
-
return { name, item, layer, path: filePath };
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return null;
|
|
157
|
-
},
|
|
158
|
-
/**
|
|
159
|
-
* Sync resolved permissions to the agent's version home config file.
|
|
160
|
-
* Merges all resolved permissions into a single set and applies to the agent's config.
|
|
161
|
-
*/
|
|
162
|
-
sync(agent, versionHome, cwd) {
|
|
163
|
-
// Only sync to agents that support permissions
|
|
164
|
-
if (!isCapable(agent, 'allowlist')) {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
const resolved = this.listAll(agent, cwd);
|
|
168
|
-
if (resolved.length === 0)
|
|
169
|
-
return;
|
|
170
|
-
// Merge all permission sets into one
|
|
171
|
-
let merged = {
|
|
172
|
-
name: 'merged',
|
|
173
|
-
description: 'Merged from all layers',
|
|
174
|
-
allow: [],
|
|
175
|
-
deny: [],
|
|
176
|
-
};
|
|
177
|
-
for (const r of resolved) {
|
|
178
|
-
merged = mergePermissionSets(merged, r.item);
|
|
179
|
-
}
|
|
180
|
-
// Apply to the agent's config file
|
|
181
|
-
applyPermissionsToVersion(agent, merged, versionHome, true, cwd);
|
|
182
|
-
},
|
|
183
|
-
/**
|
|
184
|
-
* Permissions use YAML format.
|
|
185
|
-
*/
|
|
186
|
-
format(_agent) {
|
|
187
|
-
return 'yaml';
|
|
188
|
-
},
|
|
189
|
-
/**
|
|
190
|
-
* Permissions directory name.
|
|
191
|
-
*/
|
|
192
|
-
targetDir(_agent) {
|
|
193
|
-
return 'permissions';
|
|
194
|
-
},
|
|
195
|
-
/**
|
|
196
|
-
* Return the config file path where permissions are merged.
|
|
197
|
-
*/
|
|
198
|
-
configPath(agent, versionHome) {
|
|
199
|
-
return getAgentConfigPath(agent, versionHome);
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
export default PermissionsHandler;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rules resource handler.
|
|
3
|
-
*
|
|
4
|
-
* Rules are .md files in `<repo>/rules/subrules/` directories that get composed
|
|
5
|
-
* into the agent's instructions file (AGENTS.md -> CLAUDE.md/GEMINI.md/etc).
|
|
6
|
-
*
|
|
7
|
-
* Layer resolution: project > user > extras > system
|
|
8
|
-
* - Same-named subrule at higher layer wins (override)
|
|
9
|
-
* - All unique subrules across layers are unioned
|
|
10
|
-
*/
|
|
11
|
-
import type { Layer, ResolvedItem, ResourceHandler } from './types.js';
|
|
12
|
-
/** A rule item is a subrule markdown fragment. */
|
|
13
|
-
export interface RuleItem {
|
|
14
|
-
/** The subrule name (without .md extension). */
|
|
15
|
-
name: string;
|
|
16
|
-
/** The full content of the rule file. */
|
|
17
|
-
content: string;
|
|
18
|
-
}
|
|
19
|
-
/** Layer directory entry for rules resolution. */
|
|
20
|
-
export interface RulesLayerDir {
|
|
21
|
-
layer: Layer;
|
|
22
|
-
dir: string;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* List subrule names in a directory.
|
|
26
|
-
*
|
|
27
|
-
* A name comes from either the flat form `<name>.md` OR the dir form
|
|
28
|
-
* `<name>/rule.md`; a directory without `rule.md` is not a subrule. Returns
|
|
29
|
-
* names without the .md extension.
|
|
30
|
-
*/
|
|
31
|
-
export declare function listSubrulesInDir(subrulesDir: string): string[];
|
|
32
|
-
/**
|
|
33
|
-
* Get layer directories for rules resolution using production paths.
|
|
34
|
-
*/
|
|
35
|
-
export declare function getLayerDirs(cwd?: string): RulesLayerDir[];
|
|
36
|
-
/**
|
|
37
|
-
* List all rules from the given layer directories.
|
|
38
|
-
* Higher layers win on name collision.
|
|
39
|
-
*/
|
|
40
|
-
export declare function listAllRules(layers: RulesLayerDir[]): ResolvedItem<RuleItem>[];
|
|
41
|
-
/**
|
|
42
|
-
* Resolve a single rule by name from the given layer directories.
|
|
43
|
-
* Higher layers win.
|
|
44
|
-
*/
|
|
45
|
-
export declare function resolveRule(name: string, layers: RulesLayerDir[]): ResolvedItem<RuleItem> | null;
|
|
46
|
-
export declare const RulesHandler: ResourceHandler<RuleItem>;
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rules resource handler.
|
|
3
|
-
*
|
|
4
|
-
* Rules are .md files in `<repo>/rules/subrules/` directories that get composed
|
|
5
|
-
* into the agent's instructions file (AGENTS.md -> CLAUDE.md/GEMINI.md/etc).
|
|
6
|
-
*
|
|
7
|
-
* Layer resolution: project > user > extras > system
|
|
8
|
-
* - Same-named subrule at higher layer wins (override)
|
|
9
|
-
* - All unique subrules across layers are unioned
|
|
10
|
-
*/
|
|
11
|
-
import * as fs from 'fs';
|
|
12
|
-
import { agentConfigDirName, isAgentHardDeprecated } from '../agents.js';
|
|
13
|
-
import * as path from 'path';
|
|
14
|
-
import { getSystemRulesDir, getUserRulesDir, getProjectAgentsDir, getEnabledExtraRepos, } from '../state.js';
|
|
15
|
-
const SUBRULES_DIR = 'subrules';
|
|
16
|
-
const SUBRULES_README = 'README.md';
|
|
17
|
-
/** Inside a dir-form subrule, the prose file. */
|
|
18
|
-
const SUBRULE_RULE_FILE = 'rule.md';
|
|
19
|
-
/**
|
|
20
|
-
* Resolve the prose file path for a subrule named `name` under `subrulesDir`.
|
|
21
|
-
*
|
|
22
|
-
* Dir form `<name>/rule.md` wins when present; otherwise the flat `<name>.md`.
|
|
23
|
-
* Returns null when neither exists.
|
|
24
|
-
*/
|
|
25
|
-
function resolveSubruleFile(subrulesDir, name) {
|
|
26
|
-
const dirForm = path.join(subrulesDir, name, SUBRULE_RULE_FILE);
|
|
27
|
-
if (fs.existsSync(dirForm))
|
|
28
|
-
return dirForm;
|
|
29
|
-
const flatForm = path.join(subrulesDir, `${name}.md`);
|
|
30
|
-
if (fs.existsSync(flatForm))
|
|
31
|
-
return flatForm;
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* List subrule names in a directory.
|
|
36
|
-
*
|
|
37
|
-
* A name comes from either the flat form `<name>.md` OR the dir form
|
|
38
|
-
* `<name>/rule.md`; a directory without `rule.md` is not a subrule. Returns
|
|
39
|
-
* names without the .md extension.
|
|
40
|
-
*/
|
|
41
|
-
export function listSubrulesInDir(subrulesDir) {
|
|
42
|
-
if (!fs.existsSync(subrulesDir))
|
|
43
|
-
return [];
|
|
44
|
-
try {
|
|
45
|
-
const names = new Set();
|
|
46
|
-
for (const entry of fs.readdirSync(subrulesDir, { withFileTypes: true })) {
|
|
47
|
-
if (entry.isDirectory()) {
|
|
48
|
-
if (fs.existsSync(path.join(subrulesDir, entry.name, SUBRULE_RULE_FILE))) {
|
|
49
|
-
names.add(entry.name);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
else if (entry.name.endsWith('.md') && entry.name !== SUBRULES_README) {
|
|
53
|
-
names.add(entry.name.slice(0, -3));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return [...names].sort();
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get layer directories for rules resolution using production paths.
|
|
64
|
-
*/
|
|
65
|
-
export function getLayerDirs(cwd) {
|
|
66
|
-
const dirs = [];
|
|
67
|
-
// Project layer (highest priority)
|
|
68
|
-
const projectDir = getProjectAgentsDir(cwd);
|
|
69
|
-
if (projectDir) {
|
|
70
|
-
const rulesDir = path.join(projectDir, 'rules');
|
|
71
|
-
if (fs.existsSync(rulesDir)) {
|
|
72
|
-
dirs.push({ layer: 'project', dir: rulesDir });
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// User layer
|
|
76
|
-
const userDir = getUserRulesDir();
|
|
77
|
-
if (fs.existsSync(userDir)) {
|
|
78
|
-
dirs.push({ layer: 'user', dir: userDir });
|
|
79
|
-
}
|
|
80
|
-
// Extra repos (treated as user-level in layering)
|
|
81
|
-
for (const extra of getEnabledExtraRepos()) {
|
|
82
|
-
const rulesDir = path.join(extra.dir, 'rules');
|
|
83
|
-
if (fs.existsSync(rulesDir)) {
|
|
84
|
-
dirs.push({ layer: 'user', dir: rulesDir });
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
// System layer (lowest priority)
|
|
88
|
-
const systemDir = getSystemRulesDir();
|
|
89
|
-
if (fs.existsSync(systemDir)) {
|
|
90
|
-
dirs.push({ layer: 'system', dir: systemDir });
|
|
91
|
-
}
|
|
92
|
-
return dirs;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* List all rules from the given layer directories.
|
|
96
|
-
* Higher layers win on name collision.
|
|
97
|
-
*/
|
|
98
|
-
export function listAllRules(layers) {
|
|
99
|
-
const seen = new Set();
|
|
100
|
-
const results = [];
|
|
101
|
-
for (const { layer, dir } of layers) {
|
|
102
|
-
const subrulesDir = path.join(dir, SUBRULES_DIR);
|
|
103
|
-
for (const name of listSubrulesInDir(subrulesDir)) {
|
|
104
|
-
if (seen.has(name))
|
|
105
|
-
continue;
|
|
106
|
-
seen.add(name);
|
|
107
|
-
const filePath = resolveSubruleFile(subrulesDir, name);
|
|
108
|
-
if (!filePath)
|
|
109
|
-
continue;
|
|
110
|
-
let content = '';
|
|
111
|
-
try {
|
|
112
|
-
content = fs.readFileSync(filePath, 'utf-8');
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
results.push({
|
|
118
|
-
name,
|
|
119
|
-
item: { name, content },
|
|
120
|
-
layer,
|
|
121
|
-
path: filePath,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return results;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Resolve a single rule by name from the given layer directories.
|
|
129
|
-
* Higher layers win.
|
|
130
|
-
*/
|
|
131
|
-
export function resolveRule(name, layers) {
|
|
132
|
-
for (const { layer, dir } of layers) {
|
|
133
|
-
const filePath = resolveSubruleFile(path.join(dir, SUBRULES_DIR), name);
|
|
134
|
-
if (filePath) {
|
|
135
|
-
let content = '';
|
|
136
|
-
try {
|
|
137
|
-
content = fs.readFileSync(filePath, 'utf-8');
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
name,
|
|
144
|
-
item: { name, content },
|
|
145
|
-
layer,
|
|
146
|
-
path: filePath,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return null;
|
|
151
|
-
}
|
|
152
|
-
export const RulesHandler = {
|
|
153
|
-
kind: 'rule',
|
|
154
|
-
listAll(_agent, cwd) {
|
|
155
|
-
return listAllRules(getLayerDirs(cwd));
|
|
156
|
-
},
|
|
157
|
-
resolve(_agent, name, cwd) {
|
|
158
|
-
return resolveRule(name, getLayerDirs(cwd));
|
|
159
|
-
},
|
|
160
|
-
sync(agent, versionHome, _cwd) {
|
|
161
|
-
if (isAgentHardDeprecated(agent)) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
// Rules sync is handled by the compose module and syncResourcesToVersion.
|
|
165
|
-
// This method ensures the agent config directory exists.
|
|
166
|
-
// The actual composition and write happens in versions.ts via composeRulesFromState().
|
|
167
|
-
const targetDir = path.join(versionHome, agentConfigDirName(agent));
|
|
168
|
-
if (!fs.existsSync(targetDir)) {
|
|
169
|
-
fs.mkdirSync(targetDir, { recursive: true });
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
format(_agent) {
|
|
173
|
-
return 'md';
|
|
174
|
-
},
|
|
175
|
-
targetDir(agent) {
|
|
176
|
-
// Rules don't have a target subdirectory - they're written to the instructions file
|
|
177
|
-
return agentConfigDirName(agent);
|
|
178
|
-
},
|
|
179
|
-
};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skills resource handler.
|
|
3
|
-
*
|
|
4
|
-
* Skills are directory bundles with a SKILL.md containing YAML frontmatter.
|
|
5
|
-
* Format is the same for all agents. Resolution order: project > user > system.
|
|
6
|
-
*/
|
|
7
|
-
import type { ResourceHandler } from './types.js';
|
|
8
|
-
import type { SkillMetadata } from '../types.js';
|
|
9
|
-
/**
|
|
10
|
-
* Layer directory provider for dependency injection in tests.
|
|
11
|
-
*/
|
|
12
|
-
export interface LayerDirProvider {
|
|
13
|
-
getSystemSkillsDir(): string;
|
|
14
|
-
getUserSkillsDir(): string;
|
|
15
|
-
getProjectAgentsDir(cwd?: string): string | null;
|
|
16
|
-
getEnabledExtraRepos(): Array<{
|
|
17
|
-
alias: string;
|
|
18
|
-
dir: string;
|
|
19
|
-
url: string;
|
|
20
|
-
}>;
|
|
21
|
-
}
|
|
22
|
-
/** A resolved skill item with parsed metadata. */
|
|
23
|
-
export interface SkillItem {
|
|
24
|
-
/** Parsed SKILL.md frontmatter metadata. */
|
|
25
|
-
metadata: SkillMetadata;
|
|
26
|
-
/** Number of rule files in the skill's rules/ subdirectory. */
|
|
27
|
-
ruleCount: number;
|
|
28
|
-
/** Number of additional bundled files (beyond SKILL.md). */
|
|
29
|
-
fileCount: number;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Create a SkillsHandler with the given layer directory provider.
|
|
33
|
-
* Useful for testing with custom directory structures.
|
|
34
|
-
*/
|
|
35
|
-
export declare function createSkillsHandler(provider?: LayerDirProvider): ResourceHandler<SkillItem>;
|
|
36
|
-
/** Default handler using real state module paths. */
|
|
37
|
-
export declare const SkillsHandler: ResourceHandler<SkillItem>;
|