@phnx-labs/agents-cli 1.22.39 → 1.22.41
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 +316 -0
- package/README.md +116 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +45 -27
- package/dist/browser.js +2 -2
- package/dist/cli/command-registry.d.ts +135 -0
- package/dist/cli/command-registry.js +259 -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.d.ts +15 -0
- package/dist/commands/browser.js +318 -131
- 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 +16 -3
- 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 +160 -215
- package/dist/commands/factory.js +1 -1
- package/dist/commands/feed.d.ts +2 -2
- package/dist/commands/feed.js +12 -23
- 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 +158 -159
- 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 +14 -0
- package/dist/commands/sessions-picker.js +209 -13
- package/dist/commands/sessions-resume.d.ts +7 -3
- package/dist/commands/sessions-resume.js +81 -33
- package/dist/commands/sessions-share.d.ts +25 -0
- package/dist/commands/sessions-share.js +166 -0
- package/dist/commands/sessions-stats.js +2 -2
- package/dist/commands/sessions.d.ts +75 -68
- package/dist/commands/sessions.js +144 -180
- package/dist/commands/setup-browser.js +1 -1
- 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-preferences.js +2 -2
- 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 +186 -64
- 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 +25 -34
- 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 +5 -1
- package/dist/lib/browser/chrome.js +12 -1
- package/dist/lib/browser/drivers/ssh.d.ts +1 -1
- package/dist/lib/browser/drivers/ssh.js +3 -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 +69 -5
- package/dist/lib/browser/profiles.js +135 -13
- 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 +137 -2
- package/dist/lib/browser/service.js +492 -54
- 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 +19 -1
- 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 +2 -1
- package/dist/lib/config-keys.js +8 -4
- package/dist/lib/config-machine-keys.d.ts +4 -2
- package/dist/lib/config-machine-keys.js +5 -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 +104 -0
- package/dist/lib/daemon-webhooks.js +215 -0
- package/dist/lib/device-config.d.ts +85 -75
- package/dist/lib/device-config.js +280 -142
- 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 +10 -5
- package/dist/lib/devices/pool.js +5 -7
- 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 +4 -4
- package/dist/lib/exec.js +11 -11
- 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} +13 -1
- package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
- 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 +3 -3
- package/dist/lib/observe-aliases.js +3 -21
- 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-key.js +7 -0
- 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 +261 -67
- 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 +4 -4
- package/dist/lib/secrets/bundles.js +8 -8
- package/dist/lib/secrets/headless.d.ts +16 -0
- package/dist/lib/secrets/headless.js +21 -0
- 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 +21 -17
- package/dist/lib/secrets/remote.js +39 -23
- 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/share-html.d.ts +55 -0
- package/dist/lib/session/share-html.js +319 -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/settings-manifest.d.ts +2 -0
- package/dist/lib/settings-manifest.js +81 -3
- package/dist/lib/share/delete.d.ts +21 -0
- package/dist/lib/share/delete.js +42 -0
- package/dist/lib/share/publish.d.ts +120 -0
- package/dist/lib/share/publish.js +243 -18
- package/dist/lib/share/worker-template.js +172 -9
- package/dist/lib/shims.js +35 -7
- package/dist/lib/smart-launch.d.ts +4 -4
- package/dist/lib/smart-launch.js +6 -4
- 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 +6 -147
- package/dist/lib/startup/command-registry.js +40 -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 +38 -3
- package/dist/lib/triggers/handlers.js +58 -7
- package/dist/lib/triggers/webhook.d.ts +113 -5
- package/dist/lib/triggers/webhook.js +223 -44
- package/dist/lib/types.d.ts +19 -7
- 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/dist/lib/wrap.d.ts +33 -0
- package/dist/lib/wrap.js +70 -0
- 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
package/dist/commands/share.js
CHANGED
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
// provisioning door lives beside it at `agents artifacts setup`
|
|
6
6
|
// (commands/artifacts-setup.ts), which calls `runShareProvision` below.
|
|
7
7
|
import { existsSync } from 'node:fs';
|
|
8
|
+
import { formatBytes } from '../lib/format.js';
|
|
8
9
|
import chalk from 'chalk';
|
|
9
10
|
import { DEFAULT_BUCKET_NAME, DEFAULT_CF_BUNDLE, DEFAULT_SHARE_DOMAIN, DEFAULT_WORKER_NAME, generateWriteToken, readCloudflareCreds, readShareConfig, readWriteToken, readWriteTokenEnv, readWriteTokenFromBundle, storeWriteToken, writeShareConfig, } from '../lib/share/config.js';
|
|
10
11
|
import { addCustomDomain, configureBucketLifecycle, createBucket, deployWorker, enableWorkersDev, findZoneId, hashWorkerScript, updateWorker, setWorkerSecret, } from '../lib/share/provision.js';
|
|
11
|
-
import { publishFile, resolveShareUsername } from '../lib/share/publish.js';
|
|
12
|
-
import { deleteShare } from '../lib/share/delete.js';
|
|
12
|
+
import { publishFile, resolveShareUsername, parseMetaEntries } from '../lib/share/publish.js';
|
|
13
|
+
import { deleteShare, resolveDeleteTarget } from '../lib/share/delete.js';
|
|
13
14
|
import { renderWorkerScript } from '../lib/share/worker-template.js';
|
|
14
15
|
import { analyticsEnabled } from '../lib/share/analytics.js';
|
|
15
16
|
import { resolveGitHubUsername } from '../lib/git.js';
|
|
@@ -18,6 +19,10 @@ export function formatSharePublishResult(result, json = false) {
|
|
|
18
19
|
if (json)
|
|
19
20
|
return JSON.stringify(result, null, 2);
|
|
20
21
|
const lines = [chalk.green(result.url)];
|
|
22
|
+
if (result.label) {
|
|
23
|
+
const hint = result.labelSource === 'derived' ? chalk.dim(' (derived — pass --label to set one)') : '';
|
|
24
|
+
lines.push(chalk.dim(` "${result.label}"`) + hint);
|
|
25
|
+
}
|
|
21
26
|
if (result.coverUrl)
|
|
22
27
|
lines.push(chalk.dim(` cover ${result.coverUrl}`));
|
|
23
28
|
if (result.expiresAt)
|
|
@@ -47,6 +52,18 @@ async function defaultListingFetch(url) {
|
|
|
47
52
|
const res = await fetch(url, { headers: { accept: 'application/json' } });
|
|
48
53
|
return { status: res.status, contentType: res.headers.get('content-type') ?? '', body: await res.text() };
|
|
49
54
|
}
|
|
55
|
+
/** Normalize the Worker's `meta` field (arbitrary `--meta key=value` entries,
|
|
56
|
+
* RUSH-2683) into a plain string record — `{}` for a missing/malformed field
|
|
57
|
+
* (a deployed Worker that predates it, or a non-object value), never throws. */
|
|
58
|
+
function parseMetaField(raw) {
|
|
59
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
60
|
+
return {};
|
|
61
|
+
const out = {};
|
|
62
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
63
|
+
out[k] = String(v);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
50
67
|
/** Parse the Worker's listing JSON into a validated result, failing loud (with the
|
|
51
68
|
* outdated-template hint) on any body that isn't the expected shape — an old Worker
|
|
52
69
|
* serves the HTML gallery for a non-empty namespace, which must not be silently
|
|
@@ -72,6 +89,13 @@ export function parseShareListing(user, body) {
|
|
|
72
89
|
contentType: item.contentType == null ? null : String(item.contentType),
|
|
73
90
|
publishedAt: String(item.publishedAt ?? ''),
|
|
74
91
|
expiresAt: item.expiresAt == null ? null : String(item.expiresAt),
|
|
92
|
+
label: item.label == null ? null : String(item.label),
|
|
93
|
+
agent: item.agent == null ? null : String(item.agent),
|
|
94
|
+
session: item.session == null ? null : String(item.session),
|
|
95
|
+
host: item.host == null ? null : String(item.host),
|
|
96
|
+
repo: item.repo == null ? null : String(item.repo),
|
|
97
|
+
revisionCount: typeof item.revisionCount === 'number' ? item.revisionCount : 0,
|
|
98
|
+
meta: parseMetaField(item.meta),
|
|
75
99
|
};
|
|
76
100
|
});
|
|
77
101
|
return { user, count: objects.length, objects };
|
|
@@ -118,20 +142,38 @@ export async function runShareList(opts = {}) {
|
|
|
118
142
|
// the HTML gallery — the deployed template is outdated.
|
|
119
143
|
throw new Error(OUTDATED_TEMPLATE_HINT);
|
|
120
144
|
}
|
|
121
|
-
|
|
145
|
+
const parsed = parseShareListing(user, res.body);
|
|
146
|
+
return applyShareListFilters(parsed, opts);
|
|
147
|
+
}
|
|
148
|
+
/** Client-side filtering over an already-fetched listing (RUSH-2683) — the
|
|
149
|
+
* Worker has no query surface for this, so it narrows the fetched set instead
|
|
150
|
+
* of a second round trip. `count` reflects the FILTERED set, matching what the
|
|
151
|
+
* caller actually sees. */
|
|
152
|
+
function applyShareListFilters(result, filters) {
|
|
153
|
+
let objects = result.objects;
|
|
154
|
+
if (filters.agent) {
|
|
155
|
+
const needle = filters.agent.toLowerCase();
|
|
156
|
+
objects = objects.filter((o) => (o.agent ?? '').toLowerCase() === needle);
|
|
157
|
+
}
|
|
158
|
+
if (filters.session) {
|
|
159
|
+
objects = objects.filter((o) => o.session === filters.session);
|
|
160
|
+
}
|
|
161
|
+
if (filters.label) {
|
|
162
|
+
const needle = filters.label.toLowerCase();
|
|
163
|
+
objects = objects.filter((o) => (o.label ?? '').toLowerCase().includes(needle));
|
|
164
|
+
}
|
|
165
|
+
return { user: result.user, count: objects.length, objects };
|
|
122
166
|
}
|
|
123
167
|
/** Human-readable bytes, e.g. `1.2 KB`, `640 B`. */
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
return `${value < 10 ? value.toFixed(1) : Math.round(value)} ${units[unit]}`;
|
|
168
|
+
/** Render an arbitrary `--meta` map as `k=v k2=v2` for a human table row, or
|
|
169
|
+
* undefined when there's nothing to show (RUSH-2683). */
|
|
170
|
+
function formatMetaPairs(meta) {
|
|
171
|
+
if (!meta)
|
|
172
|
+
return undefined;
|
|
173
|
+
const entries = Object.entries(meta);
|
|
174
|
+
if (entries.length === 0)
|
|
175
|
+
return undefined;
|
|
176
|
+
return entries.map(([k, v]) => `${k}=${v}`).join(' ');
|
|
135
177
|
}
|
|
136
178
|
export function formatShareList(result, json = false) {
|
|
137
179
|
if (json)
|
|
@@ -143,8 +185,97 @@ export function formatShareList(result, json = false) {
|
|
|
143
185
|
chalk.dim(` ${result.count} published ${result.count === 1 ? 'page' : 'pages'}`);
|
|
144
186
|
const rows = result.objects.map((o) => {
|
|
145
187
|
const when = o.publishedAt ? o.publishedAt.slice(0, 10) : 'unknown';
|
|
146
|
-
const
|
|
147
|
-
|
|
188
|
+
const bits = [when, formatBytes(o.size)];
|
|
189
|
+
if (o.agent)
|
|
190
|
+
bits.push(o.agent);
|
|
191
|
+
if (o.revisionCount > 0)
|
|
192
|
+
bits.push(`${o.revisionCount} ${o.revisionCount === 1 ? 'revision' : 'revisions'}`);
|
|
193
|
+
if (o.expiresAt)
|
|
194
|
+
bits.push(`expires ${o.expiresAt.slice(0, 10)}`);
|
|
195
|
+
const metaPairs = formatMetaPairs(o.meta);
|
|
196
|
+
if (metaPairs)
|
|
197
|
+
bits.push(metaPairs);
|
|
198
|
+
const line = bits.join(' · ');
|
|
199
|
+
const title = o.label ? `${chalk.bold(o.label)}\n ` : '';
|
|
200
|
+
return `${title}${chalk.cyan(o.slug)} ${chalk.dim(line)}\n ${chalk.green(o.url)}`;
|
|
201
|
+
});
|
|
202
|
+
return [header, ...rows].join('\n');
|
|
203
|
+
}
|
|
204
|
+
/** Parse the Worker's `?revisions=json` payload, failing loud (with the same
|
|
205
|
+
* outdated-template hint as {@link parseShareListing}) on an unexpected shape. */
|
|
206
|
+
export function parseShareRevisions(key, body) {
|
|
207
|
+
let data;
|
|
208
|
+
try {
|
|
209
|
+
data = JSON.parse(body);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
throw new Error(OUTDATED_TEMPLATE_HINT);
|
|
213
|
+
}
|
|
214
|
+
const revisionsRaw = data?.revisions;
|
|
215
|
+
if (!data || typeof data !== 'object' || !Array.isArray(revisionsRaw)) {
|
|
216
|
+
throw new Error(OUTDATED_TEMPLATE_HINT);
|
|
217
|
+
}
|
|
218
|
+
const revisions = revisionsRaw.map((o) => {
|
|
219
|
+
const item = o;
|
|
220
|
+
return {
|
|
221
|
+
key: String(item.key ?? ''),
|
|
222
|
+
url: String(item.url ?? ''),
|
|
223
|
+
size: typeof item.size === 'number' ? item.size : 0,
|
|
224
|
+
contentType: item.contentType == null ? null : String(item.contentType),
|
|
225
|
+
uploadedAt: String(item.uploadedAt ?? ''),
|
|
226
|
+
expiresAt: item.expiresAt == null ? null : String(item.expiresAt),
|
|
227
|
+
label: item.label == null ? null : String(item.label),
|
|
228
|
+
agent: item.agent == null ? null : String(item.agent),
|
|
229
|
+
session: item.session == null ? null : String(item.session),
|
|
230
|
+
host: item.host == null ? null : String(item.host),
|
|
231
|
+
repo: item.repo == null ? null : String(item.repo),
|
|
232
|
+
meta: parseMetaField(item.meta),
|
|
233
|
+
};
|
|
234
|
+
});
|
|
235
|
+
return { key, count: revisions.length, revisions };
|
|
236
|
+
}
|
|
237
|
+
/** Fetch and parse the retained prior versions of one published slug. `target`
|
|
238
|
+
* accepts the same three forms as `agents unshare` (a full URL, `<user>/<slug>`,
|
|
239
|
+
* or a bare slug resolved against the caller's own namespace) — reuses
|
|
240
|
+
* {@link resolveDeleteTarget} rather than re-deriving the key. */
|
|
241
|
+
export async function runShareRevisions(target, opts = {}) {
|
|
242
|
+
const cfg = opts.config ?? readShareConfig();
|
|
243
|
+
if (!cfg) {
|
|
244
|
+
throw new Error("Not set up yet. Run 'agents artifacts setup' (provision your own endpoint) or 'agents artifacts share join' (use an existing one).");
|
|
245
|
+
}
|
|
246
|
+
const templateStatus = shareTemplateStatus(cfg);
|
|
247
|
+
if (templateStatus === 'outdated') {
|
|
248
|
+
throw new Error(OUTDATED_TEMPLATE_HINT);
|
|
249
|
+
}
|
|
250
|
+
const { key } = await resolveDeleteTarget(target, { githubUser: opts.githubUser });
|
|
251
|
+
const revUrl = `${cfg.baseUrl.replace(/\/+$/, '')}/${key}?revisions=json`;
|
|
252
|
+
const fetchListing = opts.fetchListing ?? defaultListingFetch;
|
|
253
|
+
const res = await fetchListing(revUrl);
|
|
254
|
+
if (res.status !== 200) {
|
|
255
|
+
throw new Error(`Revisions lookup failed (${res.status}) for ${revUrl}. Check the endpoint is reachable, or that 'agents artifacts setup' completed.`);
|
|
256
|
+
}
|
|
257
|
+
if (!/application\/json/i.test(res.contentType)) {
|
|
258
|
+
throw new Error(OUTDATED_TEMPLATE_HINT);
|
|
259
|
+
}
|
|
260
|
+
return parseShareRevisions(key, res.body);
|
|
261
|
+
}
|
|
262
|
+
export function formatShareRevisions(result, json = false) {
|
|
263
|
+
if (json)
|
|
264
|
+
return JSON.stringify(result, null, 2);
|
|
265
|
+
if (result.count === 0) {
|
|
266
|
+
return chalk.dim(`No retained revisions for ${result.key} (only the current version exists).`);
|
|
267
|
+
}
|
|
268
|
+
const header = chalk.bold(result.key) + chalk.dim(` ${result.count} retained ${result.count === 1 ? 'revision' : 'revisions'}`);
|
|
269
|
+
const rows = result.revisions.map((r) => {
|
|
270
|
+
const bits = [r.uploadedAt ? r.uploadedAt.slice(0, 10) : 'unknown', formatBytes(r.size)];
|
|
271
|
+
if (r.agent)
|
|
272
|
+
bits.push(r.agent);
|
|
273
|
+
if (r.label)
|
|
274
|
+
bits.push(r.label);
|
|
275
|
+
const metaPairs = formatMetaPairs(r.meta);
|
|
276
|
+
if (metaPairs)
|
|
277
|
+
bits.push(metaPairs);
|
|
278
|
+
return `${chalk.cyan(r.uploadedAt || r.key)} ${chalk.dim(bits.join(' · '))}\n ${chalk.green(r.url)}`;
|
|
148
279
|
});
|
|
149
280
|
return [header, ...rows].join('\n');
|
|
150
281
|
}
|
|
@@ -159,6 +290,9 @@ export function formatShareDeleteResult(result, json = false) {
|
|
|
159
290
|
? chalk.dim(` cover deleted ${result.cover.url}`)
|
|
160
291
|
: chalk.dim(` cover (none) ${result.cover.url}`));
|
|
161
292
|
}
|
|
293
|
+
if (result.revisions?.length) {
|
|
294
|
+
lines.push(chalk.dim(` ${result.revisions.length} retained ${result.revisions.length === 1 ? 'revision' : 'revisions'} deleted`));
|
|
295
|
+
}
|
|
162
296
|
return lines.join('\n');
|
|
163
297
|
}
|
|
164
298
|
/** Shared handler for `agents artifacts share delete <targets...>` and the
|
|
@@ -175,6 +309,7 @@ export async function runShareDelete(targets, opts, deleteFn = deleteShare) {
|
|
|
175
309
|
try {
|
|
176
310
|
const result = await deleteFn(target, {
|
|
177
311
|
keepCover: opts.keepCover === true,
|
|
312
|
+
keepRevisions: opts.keepRevisions === true,
|
|
178
313
|
ifExists: opts.ifExists === true,
|
|
179
314
|
githubUser: opts.githubUser,
|
|
180
315
|
});
|
|
@@ -198,12 +333,13 @@ export async function runShareDelete(targets, opts, deleteFn = deleteShare) {
|
|
|
198
333
|
function registerShareDeleteOptions(cmd) {
|
|
199
334
|
return cmd
|
|
200
335
|
.option('--keep-cover', 'leave the sibling <slug>.png OG cover in place (default: delete it too)')
|
|
336
|
+
.option('--keep-revisions', 'leave retained revisions (<slug>/rev-*) in place (default: delete them too)')
|
|
201
337
|
.option('--if-exists', 'treat an already-missing target as a no-op success instead of an error')
|
|
202
338
|
.option('--github-user <user>', 'GitHub username for resolving a bare-slug target (default: resolved from gh/git config)')
|
|
203
339
|
.option('--json', 'emit machine-readable results');
|
|
204
340
|
}
|
|
205
341
|
const SHARE_DELETE_EXAMPLES = `
|
|
206
|
-
# Delete by full URL — also takes down the sibling OG cover
|
|
342
|
+
# Delete by full URL — also takes down the sibling OG cover and any retained revisions
|
|
207
343
|
agents artifacts share delete https://share.agents-cli.sh/octocat/my-plan-a1b2
|
|
208
344
|
|
|
209
345
|
# Delete by <user>/<slug>, or a bare slug in your own namespace
|
|
@@ -216,6 +352,9 @@ const SHARE_DELETE_EXAMPLES = `
|
|
|
216
352
|
# Keep the cover image up (rare — you usually want both gone)
|
|
217
353
|
agents unshare my-plan-a1b2 --keep-cover
|
|
218
354
|
|
|
355
|
+
# Keep retained revisions up too (rare — they're world-readable by URL like the page itself)
|
|
356
|
+
agents unshare my-plan-a1b2 --keep-revisions
|
|
357
|
+
|
|
219
358
|
# Don't error if it's already gone
|
|
220
359
|
agents unshare my-plan-a1b2 --if-exists
|
|
221
360
|
`;
|
|
@@ -224,6 +363,12 @@ const SHARE_DELETE_NOTES = `
|
|
|
224
363
|
Worker's DELETE is idempotent and returns {"ok":true} even for a key that was
|
|
225
364
|
never there, so that response alone is never proof of a takedown.
|
|
226
365
|
|
|
366
|
+
Also deletes any retained revisions of the target (RUSH-2683) — a share that was
|
|
367
|
+
republished at least once leaves its prior version(s) live at their own URL until
|
|
368
|
+
they're purged too, so leaving them up would defeat the point of taking the page
|
|
369
|
+
down. Pass --keep-revisions to leave them (they still expire via the bucket's
|
|
370
|
+
lifecycle rule on their own schedule either way).
|
|
371
|
+
|
|
227
372
|
agents artifacts share delete === agents unshare (same command, different name).
|
|
228
373
|
`;
|
|
229
374
|
/**
|
|
@@ -245,6 +390,10 @@ export function registerShareCommands(artifactsCmd) {
|
|
|
245
390
|
.option('--force', 'publish even when the file contains emails or credential-shaped strings')
|
|
246
391
|
.option('--no-cover', 'skip the OG preview image (HTML pages get one by default)')
|
|
247
392
|
.option('--no-analytics', 'skip injecting the Cloudflare Web Analytics beacon')
|
|
393
|
+
.option('--label <text>', 'human display title, shown in the gallery and `share list` (default: derived from the HTML <title>, frontmatter title, or filename)')
|
|
394
|
+
.option('--title <text>', 'alias of --label')
|
|
395
|
+
.option('--meta <key=value>', 'structured metadata (repeatable), e.g. --meta kind=plan --meta ticket=RUSH-2683. Recommended keys: kind (plan|report|visual|screenshot|recording|deck|doc), project, ticket, status (draft|final). Reserved (set automatically, not settable): agent, session, host, repo, date, label', (val, prev) => [...prev, val], [])
|
|
396
|
+
.option('--no-revision', "overwrite an existing slug in place — skip keeping the prior version as a <slug>/rev-<ts> backup (default: keep it, see 'agents artifacts share revisions')")
|
|
248
397
|
.option('--json', 'emit machine-readable publish result for plan-render hooks and scripts')
|
|
249
398
|
.action(async (file, opts) => {
|
|
250
399
|
if (!file) {
|
|
@@ -257,6 +406,7 @@ export function registerShareCommands(artifactsCmd) {
|
|
|
257
406
|
return;
|
|
258
407
|
}
|
|
259
408
|
try {
|
|
409
|
+
const meta = parseMetaEntries(opts.meta);
|
|
260
410
|
const result = await publishFile(file, {
|
|
261
411
|
slug: opts.slug,
|
|
262
412
|
githubUser: opts.githubUser,
|
|
@@ -265,6 +415,9 @@ export function registerShareCommands(artifactsCmd) {
|
|
|
265
415
|
force: opts.force,
|
|
266
416
|
cover: opts.cover,
|
|
267
417
|
analytics: opts.analytics,
|
|
418
|
+
label: opts.label ?? opts.title,
|
|
419
|
+
meta,
|
|
420
|
+
noRevision: opts.revision === false,
|
|
268
421
|
});
|
|
269
422
|
console.log(formatSharePublishResult(result, Boolean(opts.json)));
|
|
270
423
|
}
|
|
@@ -286,6 +439,12 @@ export function registerShareCommands(artifactsCmd) {
|
|
|
286
439
|
|
|
287
440
|
# Custom slug, expiring in 7 days
|
|
288
441
|
agents artifacts share ./out/report.html --slug q3-report --expire 7d
|
|
442
|
+
|
|
443
|
+
# Human title + structured metadata, shown in the gallery and share list
|
|
444
|
+
agents artifacts share ./out/plan.html --label "Q3 fleet plan" --meta kind=plan --meta ticket=RUSH-2683
|
|
445
|
+
|
|
446
|
+
# Republish without keeping the previous version as a revision
|
|
447
|
+
agents artifacts share ./out/plan.html --slug q3-report --no-revision
|
|
289
448
|
${SHARE_DELETE_EXAMPLES}
|
|
290
449
|
# One-time setup (or join an existing endpoint)
|
|
291
450
|
agents artifacts setup
|
|
@@ -300,6 +459,13 @@ ${SHARE_DELETE_EXAMPLES}
|
|
|
300
459
|
and agents artifacts share list; the direct URL is still world-readable
|
|
301
460
|
(unlisted, not secret). A pre-publish scan refuses emails and credential-shaped
|
|
302
461
|
strings unless --force is passed.
|
|
462
|
+
|
|
463
|
+
Every publish carries provenance auto-captured from the exec env/git/clock
|
|
464
|
+
(agent, session, host, repo, date) — never invented, only sent when present —
|
|
465
|
+
plus a label (explicit --label/--title, else derived from the HTML <title>,
|
|
466
|
+
frontmatter title, or filename; never blocks on a prompt) and any --meta
|
|
467
|
+
key=value pairs. Republishing an existing slug keeps the prior version as a
|
|
468
|
+
retained revision by default; see 'agents artifacts share revisions'.
|
|
303
469
|
${SHARE_DELETE_NOTES}
|
|
304
470
|
`,
|
|
305
471
|
});
|
|
@@ -391,10 +557,25 @@ ${SHARE_DELETE_NOTES}
|
|
|
391
557
|
.command('list')
|
|
392
558
|
.description("List the pages you've published to your share namespace (human table; --json for scripts).")
|
|
393
559
|
.option('--github-user <user>', 'GitHub username whose namespace to list (default: resolved from gh/git config)')
|
|
394
|
-
.option('--
|
|
560
|
+
.option('--agent <name>', 'filter to shares published by this agent/harness (case-insensitive)')
|
|
561
|
+
.option('--session <id>', 'filter to shares published from this session id')
|
|
562
|
+
// Named --label-contains, not --label: `share <file>` (the parent) already owns
|
|
563
|
+
// `--label`/`--title`, and commander's argv scanner resolves an option name
|
|
564
|
+
// against the WHOLE ancestor chain, not per-command — a same-named child option
|
|
565
|
+
// is silently dropped (verified; see RUSH-2683 PR notes). Fixing that properly
|
|
566
|
+
// needs `enablePositionalOptions()` on the root program, a CLI-wide change out
|
|
567
|
+
// of scope here (a pre-existing instance of it already affects --json/
|
|
568
|
+
// --github-user on list/update/delete — tracked as a follow-up).
|
|
569
|
+
.option('--label-contains <substr>', 'filter to shares whose label contains this text (case-insensitive)')
|
|
570
|
+
.option('--json', 'emit the machine-readable listing (slug, url, size, contentType, publishedAt, expiresAt, label, agent, session, host, repo, revisionCount, meta)')
|
|
395
571
|
.action(async (opts) => {
|
|
396
572
|
try {
|
|
397
|
-
const result = await runShareList({
|
|
573
|
+
const result = await runShareList({
|
|
574
|
+
githubUser: opts.githubUser,
|
|
575
|
+
agent: opts.agent,
|
|
576
|
+
session: opts.session,
|
|
577
|
+
label: opts.labelContains,
|
|
578
|
+
});
|
|
398
579
|
console.log(formatShareList(result, Boolean(opts.json)));
|
|
399
580
|
}
|
|
400
581
|
catch (e) {
|
|
@@ -412,6 +593,10 @@ ${SHARE_DELETE_NOTES}
|
|
|
412
593
|
|
|
413
594
|
# List another namespace
|
|
414
595
|
agents artifacts share list --github-user octocat
|
|
596
|
+
|
|
597
|
+
# Narrow by who/what published it
|
|
598
|
+
agents artifacts share list --agent claude
|
|
599
|
+
agents artifacts share list --label-contains "fleet plan"
|
|
415
600
|
`,
|
|
416
601
|
notes: `
|
|
417
602
|
Lists the ACTIVE pages in your namespace — expired links and the sibling .png OG
|
|
@@ -420,6 +605,54 @@ ${SHARE_DELETE_NOTES}
|
|
|
420
605
|
Worker predates this feature the command says so and points you at 'agents
|
|
421
606
|
artifacts share update' (RUSH-2449) rather than returning a wrong or empty result
|
|
422
607
|
— see 'agents artifacts share status' for whether an update is due.
|
|
608
|
+
|
|
609
|
+
--agent/--session/--label-contains filter the fetched listing client-side; --json's
|
|
610
|
+
count reflects the filtered set.
|
|
611
|
+
`,
|
|
612
|
+
});
|
|
613
|
+
const shareRevisionsCmd = shareCmd
|
|
614
|
+
.command('revisions <target>')
|
|
615
|
+
.description('Show the retained prior versions of a published slug, newest first (human table; --revisions-json for scripts).')
|
|
616
|
+
// Named --for-user / --revisions-json, not --github-user / --json: `share
|
|
617
|
+
// <file>` (the parent) already owns both those long names, and commander's
|
|
618
|
+
// argv scanner resolves an option name against the WHOLE ancestor chain —
|
|
619
|
+
// a same-named child option is silently dropped even when it parses alone
|
|
620
|
+
// (verified with a real program.parseAsync(), see share.test.ts). Unlike
|
|
621
|
+
// `list`'s pre-existing --json/--github-user collision (RUSH-2687, left
|
|
622
|
+
// as a tracked follow-up because it predates this diff), `revisions` is
|
|
623
|
+
// brand-new here, so it gets non-colliding names from the start instead
|
|
624
|
+
// of shipping a silently-broken flag.
|
|
625
|
+
.option('--for-user <user>', 'GitHub username for resolving a bare-slug target (default: resolved from gh/git config)')
|
|
626
|
+
.option('--revisions-json', 'emit the machine-readable revision list')
|
|
627
|
+
.action(async (target, opts) => {
|
|
628
|
+
try {
|
|
629
|
+
const result = await runShareRevisions(target, { githubUser: opts.forUser });
|
|
630
|
+
console.log(formatShareRevisions(result, Boolean(opts.revisionsJson)));
|
|
631
|
+
}
|
|
632
|
+
catch (e) {
|
|
633
|
+
console.error(chalk.red(e.message));
|
|
634
|
+
process.exitCode = 1;
|
|
635
|
+
}
|
|
636
|
+
});
|
|
637
|
+
setHelpSections(shareRevisionsCmd, {
|
|
638
|
+
examples: `
|
|
639
|
+
# Prior versions kept under this slug (bare slug — your own namespace)
|
|
640
|
+
agents artifacts share revisions q3-report
|
|
641
|
+
|
|
642
|
+
# By <user>/<slug> or full URL, same target forms as 'agents unshare'
|
|
643
|
+
agents artifacts share revisions octocat/q3-report
|
|
644
|
+
agents artifacts share revisions https://share.agents-cli.sh/octocat/q3-report
|
|
645
|
+
|
|
646
|
+
# Machine-readable, and a bare slug resolved against another namespace
|
|
647
|
+
agents artifacts share revisions q3-report --revisions-json
|
|
648
|
+
agents artifacts share revisions q3-report --for-user octocat
|
|
649
|
+
`,
|
|
650
|
+
notes: `
|
|
651
|
+
A revision is created automatically on every republish of an existing slug
|
|
652
|
+
(pass --no-revision at publish time to skip it) — this is history, never
|
|
653
|
+
shown on the public gallery or in 'agents artifacts share list' beyond its
|
|
654
|
+
count. Each revision's own URL is still directly reachable and honors its own
|
|
655
|
+
recorded expiry.
|
|
423
656
|
`,
|
|
424
657
|
});
|
|
425
658
|
shareCmd
|
|
@@ -521,7 +754,7 @@ export async function runShareProvision(opts) {
|
|
|
521
754
|
storeWriteToken(token);
|
|
522
755
|
console.log(chalk.green(`\nShare endpoint ready → ${chalk.bold(baseUrl)}`));
|
|
523
756
|
console.log(chalk.dim('Publish with: ') + chalk.cyan('agents artifacts share <file>'));
|
|
524
|
-
console.log(chalk.dim(`Fleet: push the token with 'agents secrets export share --
|
|
757
|
+
console.log(chalk.dim(`Fleet: push the token with 'agents secrets export share --device <box>' and pull config with 'agents repo pull'.`));
|
|
525
758
|
}
|
|
526
759
|
catch (e) {
|
|
527
760
|
spin.fail('Provisioning failed');
|
package/dist/commands/skills.js
CHANGED
|
@@ -7,8 +7,8 @@ import { select, checkbox } from '@inquirer/prompts';
|
|
|
7
7
|
import { AGENTS, resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
|
|
8
8
|
import { capableAgents } from '../lib/capabilities.js';
|
|
9
9
|
import { cloneRepo } from '../lib/git.js';
|
|
10
|
-
import { discoverSkillsFromRepo, installSkillCentrally, listInstalledSkills, listInstalledSkillsWithScope, getSkillInfo, getSkillRules, getSkillsDir, countSkillFiles, tryParseSkillMetadata, diffVersionSkills, iterSkillsCapableVersions, removeSkillFromVersion, } from '../lib/skills.js';
|
|
11
|
-
import { getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, } from '../lib/versions.js';
|
|
10
|
+
import { discoverSkillsFromRepo, installSkillCentrally, listInstalledSkills, listInstalledSkillsWithScope, getSkillInfo, getSkillRules, getSkillsDir, countSkillFiles, tryParseSkillMetadata, diffVersionSkills, iterSkillsCapableVersions, removeSkillFromVersion, } from '../lib/plugins/skills.js';
|
|
11
|
+
import { getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, } from '../lib/installations/versions.js';
|
|
12
12
|
import { recordVersionResources } from '../lib/state.js';
|
|
13
13
|
import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, resolveAgentTargetsAutoInstalling, promptRemovalTargets, resolveListFilterOrExit, } from './utils.js';
|
|
14
14
|
import { showResourceList, buildTargetsSection, } from './resource-view.js';
|
|
@@ -180,7 +180,7 @@ Examples:
|
|
|
180
180
|
const skillMdPath = path.join(localPath, 'SKILL.md');
|
|
181
181
|
if (fs.existsSync(skillMdPath)) {
|
|
182
182
|
const skillName = path.basename(localPath);
|
|
183
|
-
const { validateSkillMetadata, countSkillRules } = await import('../lib/skills.js');
|
|
183
|
+
const { validateSkillMetadata, countSkillRules } = await import('../lib/plugins/skills.js');
|
|
184
184
|
const parseResult = tryParseSkillMetadata(localPath);
|
|
185
185
|
const validation = validateSkillMetadata(parseResult.metadata, skillName);
|
|
186
186
|
// Warn if YAML is invalid
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `agents snapshot` — one-process consumer snapshot for pollers.
|
|
2
|
+
* `agents devices snapshot` — one-process consumer snapshot for pollers.
|
|
3
3
|
*
|
|
4
4
|
* Replaces the N× `view --json` + `sessions --active --json` (+ optional feed)
|
|
5
5
|
* fork storm with a single command. Does NOT replace `agents status`, which
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
* JSON shape: {@link FleetSnapshot} in `lib/snapshot.ts` (version: 1).
|
|
9
9
|
*/
|
|
10
10
|
import type { Command } from 'commander';
|
|
11
|
-
export declare function registerSnapshotCommand(
|
|
11
|
+
export declare function registerSnapshotCommand(devicesCmd: Command): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `agents snapshot` — one-process consumer snapshot for pollers.
|
|
2
|
+
* `agents devices snapshot` — one-process consumer snapshot for pollers.
|
|
3
3
|
*
|
|
4
4
|
* Replaces the N× `view --json` + `sessions --active --json` (+ optional feed)
|
|
5
5
|
* fork storm with a single command. Does NOT replace `agents status`, which
|
|
@@ -59,11 +59,11 @@ function renderHuman(snap) {
|
|
|
59
59
|
: 'system ok';
|
|
60
60
|
console.log(` ${'Sync'.padEnd(12)} ${sys} · ${need} version${need === 1 ? '' : 's'} need sync`);
|
|
61
61
|
}
|
|
62
|
-
console.log(chalk.gray('\n Machine-readable: agents snapshot --json\n' +
|
|
62
|
+
console.log(chalk.gray('\n Machine-readable: agents devices snapshot --json\n' +
|
|
63
63
|
' Sync-only (unchanged): agents status --json'));
|
|
64
64
|
}
|
|
65
|
-
export function registerSnapshotCommand(
|
|
66
|
-
const cmd = addHostOption(
|
|
65
|
+
export function registerSnapshotCommand(devicesCmd) {
|
|
66
|
+
const cmd = addHostOption(devicesCmd
|
|
67
67
|
.command('snapshot')
|
|
68
68
|
.description('One-process poll snapshot: install inventory + active sessions (optional feed/sync). Not the sync-status command — use `agents status` for drift.'))
|
|
69
69
|
.option('--json', 'Emit the machine-readable FleetSnapshot contract (version 1)')
|
|
@@ -74,19 +74,19 @@ export function registerSnapshotCommand(program) {
|
|
|
74
74
|
setHelpSections(cmd, {
|
|
75
75
|
examples: `
|
|
76
76
|
# One-shot inventory + local active sessions (JSON)
|
|
77
|
-
agents snapshot --json
|
|
77
|
+
agents devices snapshot --json
|
|
78
78
|
|
|
79
79
|
# Same, plus open feed blocks for needs-you polls
|
|
80
|
-
agents snapshot --json --with-feed
|
|
80
|
+
agents devices snapshot --json --with-feed
|
|
81
81
|
|
|
82
82
|
# Fleet-wide active sessions (matches sessions --active scope)
|
|
83
|
-
agents snapshot --json --all-hosts
|
|
83
|
+
agents devices snapshot --json --all-hosts
|
|
84
84
|
|
|
85
85
|
# Inventory for one harness only (an AGI EXT-style usage poll)
|
|
86
|
-
agents snapshot --json --agent claude
|
|
86
|
+
agents devices snapshot --json --agent claude
|
|
87
87
|
|
|
88
88
|
# Run the whole snapshot on another device
|
|
89
|
-
agents snapshot --json --
|
|
89
|
+
agents devices snapshot --json --device yosemite-s0
|
|
90
90
|
`,
|
|
91
91
|
});
|
|
92
92
|
cmd.action(async (opts, command) => {
|
package/dist/commands/ssh.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* (offline → fail fast instead of a 2-minute hang), platform-aware exec
|
|
8
8
|
* (PowerShell on Windows), and password-from-bundle auth via an askpass shim.
|
|
9
9
|
* Rendering the registry to an ssh_config include also lets plain ssh / scp /
|
|
10
|
-
* rsync / `agents sessions --
|
|
10
|
+
* rsync / `agents sessions --device` resolve the same logical names.
|
|
11
11
|
*/
|
|
12
12
|
import type { Command } from 'commander';
|
|
13
13
|
import { type FanOutDeviceTarget } from '../lib/devices/fleet.js';
|