@phnx-labs/agents-cli 1.22.35 → 1.22.37
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 +666 -2
- package/README.md +75 -35
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.d.ts +15 -0
- package/dist/bootstrap.js +1211 -0
- package/dist/commands/accounts.d.ts +4 -11
- package/dist/commands/accounts.js +159 -27
- package/dist/commands/attach.js +17 -4
- package/dist/commands/audit.d.ts +8 -8
- package/dist/commands/audit.js +57 -47
- package/dist/commands/browser.js +15 -11
- package/dist/commands/cloud.js +1 -1
- package/dist/commands/commands.js +0 -11
- package/dist/commands/computer-actions.js +33 -0
- package/dist/commands/computer-sessions-picker.d.ts +21 -0
- package/dist/commands/computer-sessions-picker.js +141 -0
- package/dist/commands/computer.d.ts +16 -0
- package/dist/commands/computer.js +37 -0
- package/dist/commands/config.d.ts +17 -0
- package/dist/commands/config.js +401 -0
- package/dist/commands/cp.d.ts +84 -0
- package/dist/commands/cp.js +231 -0
- package/dist/commands/daemon.js +243 -14
- package/dist/commands/detach-core.d.ts +1 -1
- package/dist/commands/detach-core.js +12 -2
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +64 -5
- package/dist/commands/events.d.ts +24 -12
- package/dist/commands/events.js +144 -28
- package/dist/commands/exec.js +85 -41
- package/dist/commands/feed.d.ts +1 -1
- package/dist/commands/feed.js +16 -8
- package/dist/commands/focus.d.ts +33 -1
- package/dist/commands/focus.js +177 -17
- package/dist/commands/funnel.d.ts +1 -1
- package/dist/commands/go.js +9 -8
- package/dist/commands/harness-wizard.d.ts +1 -0
- package/dist/commands/harness-wizard.js +18 -20
- package/dist/commands/harness.d.ts +2 -0
- package/dist/commands/harness.js +59 -26
- package/dist/commands/hooks.js +0 -11
- package/dist/commands/inspect.d.ts +94 -1
- package/dist/commands/inspect.js +866 -40
- package/dist/commands/lease.d.ts +4 -4
- package/dist/commands/lease.js +6 -6
- package/dist/commands/login.js +0 -13
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +2 -2
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/memory.js +7 -2
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +37 -6
- package/dist/commands/models.js +4 -0
- package/dist/commands/monitors.d.ts +0 -1
- package/dist/commands/monitors.js +199 -16
- package/dist/commands/open.d.ts +18 -0
- package/dist/commands/open.js +57 -0
- package/dist/commands/packages.js +2 -107
- package/dist/commands/plugins.js +6 -3
- package/dist/commands/profiles.d.ts +1 -0
- package/dist/commands/profiles.js +16 -160
- package/dist/commands/projects.d.ts +28 -0
- package/dist/commands/projects.js +125 -5
- package/dist/commands/reconnect.js +9 -3
- package/dist/commands/repo.js +42 -1
- package/dist/commands/resource-view.d.ts +17 -0
- package/dist/commands/resource-view.js +36 -14
- package/dist/commands/resume.js +9 -2
- package/dist/commands/routines.d.ts +0 -2
- package/dist/commands/routines.js +473 -289
- package/dist/commands/secrets.js +52 -9
- package/dist/commands/sessions-export.d.ts +47 -0
- package/dist/commands/sessions-export.js +116 -6
- package/dist/commands/sessions-import.d.ts +17 -0
- package/dist/commands/sessions-import.js +114 -6
- package/dist/commands/sessions-migrate.d.ts +27 -0
- package/dist/commands/sessions-migrate.js +50 -9
- package/dist/commands/sessions-picker.js +23 -4
- package/dist/commands/sessions-resume.d.ts +5 -3
- package/dist/commands/sessions-resume.js +30 -8
- package/dist/commands/sessions-watch.d.ts +2 -0
- package/dist/commands/sessions-watch.js +53 -0
- package/dist/commands/sessions.d.ts +66 -3
- package/dist/commands/sessions.js +298 -47
- package/dist/commands/set.d.ts +1 -1
- package/dist/commands/set.js +2 -2
- package/dist/commands/setup-browser.js +2 -2
- package/dist/commands/setup-mine.js +0 -1
- package/dist/commands/setup-preferences.js +1 -1
- package/dist/commands/setup-share.js +34 -4
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.js +26 -0
- package/dist/commands/share.d.ts +67 -0
- package/dist/commands/share.js +275 -12
- package/dist/commands/skills.js +0 -11
- package/dist/commands/snapshot.js +1 -1
- package/dist/commands/ssh.d.ts +18 -0
- package/dist/commands/ssh.js +549 -210
- package/dist/commands/sync.d.ts +5 -0
- package/dist/commands/sync.js +212 -32
- package/dist/commands/teams.d.ts +13 -0
- package/dist/commands/teams.js +187 -30
- package/dist/commands/tickets.d.ts +2 -0
- package/dist/commands/tickets.js +43 -0
- package/dist/commands/update.js +2 -4
- package/dist/commands/usage.js +5 -3
- package/dist/commands/versions.js +11 -5
- package/dist/commands/view.js +15 -7
- package/dist/commands/webhook.d.ts +2 -2
- package/dist/commands/webhook.js +7 -7
- package/dist/index.d.ts +18 -2
- package/dist/index.js +53 -1264
- package/dist/lib/account-catalog.d.ts +18 -0
- package/dist/lib/account-catalog.js +38 -0
- package/dist/lib/account-provider-registry.d.ts +18 -0
- package/dist/lib/account-provider-registry.js +59 -0
- package/dist/lib/account-registry.d.ts +40 -0
- package/dist/lib/account-registry.js +239 -0
- package/dist/lib/account-schema.d.ts +44 -0
- package/dist/lib/account-schema.js +91 -0
- package/dist/lib/account-state-service.d.ts +21 -0
- package/dist/lib/account-state-service.js +60 -0
- package/dist/lib/activity.d.ts +1 -1
- package/dist/lib/activity.js +8 -1
- package/dist/lib/add-dir.d.ts +80 -0
- package/dist/lib/add-dir.js +241 -0
- package/dist/lib/agent-cli-commands.d.ts +11 -0
- package/dist/lib/agent-cli-commands.js +30 -0
- package/dist/lib/agents.js +44 -36
- package/dist/lib/answer-router.js +1 -1
- package/dist/lib/audit/log.d.ts +10 -27
- package/dist/lib/audit/log.js +20 -33
- package/dist/lib/auth-health.d.ts +9 -2
- package/dist/lib/auth-health.js +42 -9
- package/dist/lib/auto-pull-worker.js +7 -3
- package/dist/lib/auto-pull.d.ts +44 -3
- package/dist/lib/auto-pull.js +88 -5
- package/dist/lib/binary-shadow.d.ts +28 -0
- package/dist/lib/binary-shadow.js +121 -0
- package/dist/lib/brand.js +9 -3
- package/dist/lib/browser/ipc.d.ts +30 -0
- package/dist/lib/browser/ipc.js +81 -4
- package/dist/lib/browser/profiles.d.ts +3 -2
- package/dist/lib/browser/profiles.js +65 -22
- package/dist/lib/browser/service.d.ts +4 -0
- package/dist/lib/browser/service.js +30 -3
- package/dist/lib/browser/sessions-list.d.ts +22 -2
- package/dist/lib/browser/sessions-list.js +54 -6
- package/dist/lib/browser/stream.d.ts +2 -0
- package/dist/lib/browser/stream.js +1 -0
- package/dist/lib/browser/types.d.ts +19 -0
- package/dist/lib/byok-usage.d.ts +9 -2
- package/dist/lib/byok-usage.js +133 -31
- package/dist/lib/cli-entry.d.ts +11 -0
- package/dist/lib/cli-entry.js +46 -0
- package/dist/lib/cloud/host.d.ts +1 -1
- package/dist/lib/cloud/host.js +2 -2
- package/dist/lib/cloud/registry.js +1 -1
- package/dist/lib/cloud/types.d.ts +1 -1
- package/dist/lib/commands.d.ts +2 -0
- package/dist/lib/commands.js +2 -0
- package/dist/lib/computer/sessions-list.d.ts +150 -0
- package/dist/lib/computer/sessions-list.js +363 -0
- package/dist/lib/config-keys.d.ts +86 -0
- package/dist/lib/config-keys.js +193 -0
- package/dist/lib/config-machine-keys.d.ts +12 -0
- package/dist/lib/config-machine-keys.js +17 -0
- package/dist/lib/config-transfer.js +3 -4
- package/dist/lib/crabbox/cli.d.ts +2 -2
- package/dist/lib/crabbox/cli.js +3 -3
- package/dist/lib/daemon-health.d.ts +22 -0
- package/dist/lib/daemon-health.js +33 -3
- package/dist/lib/daemon-services.d.ts +50 -0
- package/dist/lib/daemon-services.js +147 -0
- package/dist/lib/daemon-ticks.d.ts +35 -66
- package/dist/lib/daemon-ticks.js +77 -159
- package/dist/lib/daemon.d.ts +72 -4
- package/dist/lib/daemon.js +792 -202
- package/dist/lib/deeplink/register.d.ts +49 -0
- package/dist/lib/deeplink/register.js +253 -0
- package/dist/lib/deeplink/url.d.ts +34 -0
- package/dist/lib/deeplink/url.js +78 -0
- package/dist/lib/device-config.d.ts +124 -29
- package/dist/lib/device-config.js +346 -141
- package/dist/lib/devices/config-migration.d.ts +42 -0
- package/dist/lib/devices/config-migration.js +203 -0
- package/dist/lib/devices/connect.js +14 -7
- package/dist/lib/devices/doctor-findings.d.ts +4 -1
- package/dist/lib/devices/doctor-findings.js +20 -1
- package/dist/lib/devices/harness-inventory.d.ts +11 -2
- package/dist/lib/devices/harness-inventory.js +0 -0
- package/dist/lib/devices/health.d.ts +1 -1
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/pending.d.ts +22 -1
- package/dist/lib/devices/pending.js +67 -2
- package/dist/lib/devices/registry.d.ts +0 -25
- package/dist/lib/devices/registry.js +2 -83
- package/dist/lib/devices/resolve-profile.d.ts +20 -0
- package/dist/lib/devices/resolve-profile.js +44 -0
- package/dist/lib/devices/rollout-verify.d.ts +101 -0
- package/dist/lib/devices/rollout-verify.js +193 -0
- package/dist/lib/devices/ssh-config.js +10 -6
- package/dist/lib/event-families.d.ts +28 -0
- package/dist/lib/event-families.js +159 -0
- package/dist/lib/event-stream.d.ts +9 -1
- package/dist/lib/event-stream.js +26 -9
- package/dist/lib/events.d.ts +9 -1
- package/dist/lib/events.js +21 -6
- package/dist/lib/exec.d.ts +30 -0
- package/dist/lib/exec.js +219 -121
- package/dist/lib/feed-broadcast.d.ts +25 -0
- package/dist/lib/feed-broadcast.js +33 -0
- package/dist/lib/feed.d.ts +1 -1
- package/dist/lib/feed.js +12 -2
- package/dist/lib/fleet/capture.js +15 -0
- package/dist/lib/fleet/manifest.js +9 -0
- package/dist/lib/fleet/types.d.ts +9 -0
- package/dist/lib/fleet-status.js +10 -8
- package/dist/lib/git.d.ts +20 -6
- package/dist/lib/git.js +121 -17
- package/dist/lib/hosts/dispatch.d.ts +8 -3
- package/dist/lib/hosts/dispatch.js +29 -3
- package/dist/lib/hosts/logs.d.ts +2 -2
- package/dist/lib/hosts/logs.js +2 -2
- package/dist/lib/hosts/option.js +1 -1
- package/dist/lib/hosts/passthrough.d.ts +2 -3
- package/dist/lib/hosts/passthrough.js +10 -24
- package/dist/lib/hosts/progress.js +2 -2
- package/dist/lib/hosts/providers/devices.d.ts +3 -3
- package/dist/lib/hosts/providers/devices.js +18 -12
- package/dist/lib/hosts/ready.d.ts +5 -1
- package/dist/lib/hosts/ready.js +9 -3
- package/dist/lib/hosts/reconcile.d.ts +2 -2
- package/dist/lib/hosts/reconcile.js +2 -2
- package/dist/lib/hosts/registry.js +14 -9
- package/dist/lib/hosts/remote-cmd.js +1 -1
- package/dist/lib/hosts/remote-os.d.ts +9 -6
- package/dist/lib/hosts/remote-os.js +13 -6
- package/dist/lib/hosts/routing-flag.d.ts +23 -0
- package/dist/lib/hosts/routing-flag.js +41 -0
- package/dist/lib/hosts/run-target.js +1 -1
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/tasks.d.ts +6 -6
- package/dist/lib/hosts/tasks.js +4 -4
- package/dist/lib/hosts/types.js +1 -2
- package/dist/lib/installations/resolve.js +2 -8
- package/dist/lib/isolation-boundary-report.js +0 -1
- package/dist/lib/linear-cache.d.ts +7 -0
- package/dist/lib/linear-cache.js +31 -4
- package/dist/lib/linear-project-counts.d.ts +1 -1
- package/dist/lib/linear-project-counts.js +2 -3
- package/dist/lib/linear-projects.js +1 -1
- package/dist/lib/loop.d.ts +2 -2
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-target.d.ts +1 -1
- package/dist/lib/mailbox-target.js +1 -1
- package/dist/lib/manifest.js +7 -4
- 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/snapshot.d.ts +3 -2
- package/dist/lib/menubar/snapshot.js +6 -2
- package/dist/lib/migrate-fold.d.ts +33 -0
- package/dist/lib/migrate-fold.js +130 -0
- package/dist/lib/migrate.d.ts +34 -34
- package/dist/lib/migrate.js +106 -128
- package/dist/lib/model-tier-overrides.d.ts +1 -1
- package/dist/lib/model-tier-overrides.js +15 -2
- package/dist/lib/monitors/config.d.ts +17 -3
- package/dist/lib/monitors/config.js +52 -18
- package/dist/lib/monitors/engine.d.ts +32 -1
- package/dist/lib/monitors/engine.js +94 -11
- package/dist/lib/monitors/fingerprint.d.ts +46 -0
- package/dist/lib/monitors/fingerprint.js +100 -0
- package/dist/lib/monitors/remote.d.ts +47 -0
- package/dist/lib/monitors/remote.js +81 -0
- package/dist/lib/monitors/state.d.ts +39 -0
- package/dist/lib/monitors/state.js +56 -0
- package/dist/lib/onepassword.d.ts +17 -0
- package/dist/lib/onepassword.js +52 -22
- package/dist/lib/open-url.js +1 -1
- package/dist/lib/picker.d.ts +14 -2
- package/dist/lib/picker.js +35 -13
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +32 -0
- package/dist/lib/pr-land-detach.js +79 -0
- package/dist/lib/profiles-presets.js +13 -0
- package/dist/lib/profiles.d.ts +2 -0
- package/dist/lib/profiles.js +44 -1
- package/dist/lib/project-focus.d.ts +1 -1
- package/dist/lib/project-focus.js +1 -1
- package/dist/lib/project-probe.d.ts +4 -1
- package/dist/lib/project-probe.js +5 -4
- package/dist/lib/project-resources.js +2 -18
- package/dist/lib/project-root.d.ts +16 -0
- package/dist/lib/project-root.js +20 -2
- package/dist/lib/projects.d.ts +20 -1
- package/dist/lib/projects.js +78 -1
- package/dist/lib/refresh-coordinator.d.ts +24 -0
- package/dist/lib/refresh-coordinator.js +52 -0
- package/dist/lib/registry.d.ts +2 -2
- package/dist/lib/registry.js +1 -1
- package/dist/lib/resource-aliases.d.ts +13 -0
- package/dist/lib/resource-aliases.js +26 -0
- package/dist/lib/resources/types.d.ts +1 -1
- package/dist/lib/resources.d.ts +16 -0
- package/dist/lib/resources.js +66 -10
- package/dist/lib/rotate.d.ts +3 -4
- package/dist/lib/rotate.js +4 -5
- package/dist/lib/routine-activation.d.ts +22 -2
- package/dist/lib/routine-activation.js +63 -16
- package/dist/lib/routine-context.d.ts +9 -2
- package/dist/lib/routine-context.js +21 -6
- package/dist/lib/routines-project.d.ts +58 -48
- package/dist/lib/routines-project.js +190 -159
- package/dist/lib/routines.d.ts +41 -6
- package/dist/lib/routines.js +92 -34
- package/dist/lib/run-defaults.d.ts +5 -0
- package/dist/lib/run-defaults.js +11 -1
- package/dist/lib/runner.d.ts +10 -8
- package/dist/lib/runner.js +122 -39
- 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.d.ts +10 -3
- package/dist/lib/secrets/agent.js +43 -8
- package/dist/lib/secrets/bundles.d.ts +1 -0
- package/dist/lib/secrets/bundles.js +92 -80
- package/dist/lib/secrets/index.js +32 -9
- package/dist/lib/secrets/install-helper.d.ts +4 -4
- package/dist/lib/secrets/install-helper.js +4 -4
- package/dist/lib/secrets/push.d.ts +40 -6
- package/dist/lib/secrets/push.js +58 -11
- package/dist/lib/secrets/read-backoff.d.ts +1 -1
- package/dist/lib/secrets/read-backoff.js +1 -1
- package/dist/lib/secrets/remote.d.ts +24 -0
- package/dist/lib/secrets/remote.js +54 -4
- package/dist/lib/self-update.d.ts +108 -0
- package/dist/lib/self-update.js +276 -1
- package/dist/lib/session/active.d.ts +89 -5
- package/dist/lib/session/active.js +165 -10
- package/dist/lib/session/actor-sidecar.d.ts +1 -1
- package/dist/lib/session/actor-sidecar.js +2 -1
- package/dist/lib/session/db.d.ts +176 -2
- package/dist/lib/session/db.js +484 -17
- package/dist/lib/session/discover.js +27 -4
- package/dist/lib/session/hook-sessions.js +2 -2
- package/dist/lib/session/host-link.d.ts +2 -2
- package/dist/lib/session/host-link.js +2 -2
- package/dist/lib/session/pid-registry.d.ts +21 -0
- package/dist/lib/session/pid-registry.js +57 -0
- package/dist/lib/session/remote-active.js +15 -1
- package/dist/lib/session/remote.js +2 -2
- package/dist/lib/session/session-cache.d.ts +14 -7
- package/dist/lib/session/session-cache.js +51 -9
- package/dist/lib/session/state.d.ts +2 -2
- package/dist/lib/session/state.js +1 -1
- package/dist/lib/session/sync/config.d.ts +10 -10
- package/dist/lib/session/sync/config.js +10 -10
- package/dist/lib/session/sync/r2.d.ts +34 -0
- package/dist/lib/session/sync/r2.js +123 -0
- package/dist/lib/session/throughput.d.ts +1 -1
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/types.d.ts +23 -1
- package/dist/lib/session/types.js +15 -0
- package/dist/lib/session/viewing-in.d.ts +1 -1
- package/dist/lib/session/viewing-in.js +1 -1
- package/dist/lib/session/watch.d.ts +101 -0
- package/dist/lib/session/watch.js +242 -0
- package/dist/lib/share/config.d.ts +4 -0
- package/dist/lib/share/config.js +1 -0
- package/dist/lib/share/provision.d.ts +38 -0
- package/dist/lib/share/provision.js +50 -0
- package/dist/lib/share/publish.d.ts +40 -1
- package/dist/lib/share/publish.js +116 -3
- package/dist/lib/share/worker-template.js +71 -6
- package/dist/lib/shims.d.ts +17 -3
- package/dist/lib/shims.js +98 -26
- package/dist/lib/signin-badge.js +3 -2
- package/dist/lib/skills.js +2 -0
- package/dist/lib/smart-launch.d.ts +8 -8
- package/dist/lib/smart-launch.js +80 -59
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +1 -1
- package/dist/lib/staleness/prune.d.ts +88 -0
- package/dist/lib/staleness/prune.js +69 -0
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/commands.js +34 -2
- package/dist/lib/staleness/writers/hooks.js +16 -0
- package/dist/lib/staleness/writers/kinds.d.ts +6 -0
- package/dist/lib/staleness/writers/skills.js +19 -0
- package/dist/lib/staleness/writers/subagents.d.ts +2 -3
- package/dist/lib/staleness/writers/subagents.js +0 -4
- package/dist/lib/staleness/writers/types.d.ts +32 -0
- package/dist/lib/startup/command-registry.d.ts +6 -12
- package/dist/lib/startup/command-registry.js +11 -31
- package/dist/lib/startup/dev-build.d.ts +10 -0
- package/dist/lib/startup/dev-build.js +13 -1
- package/dist/lib/startup/spellcheck.d.ts +18 -0
- package/dist/lib/startup/spellcheck.js +45 -0
- package/dist/lib/state.d.ts +36 -9
- package/dist/lib/state.js +96 -46
- package/dist/lib/subagents-registry.d.ts +0 -7
- package/dist/lib/subagents-registry.js +38 -65
- package/dist/lib/subagents.d.ts +0 -33
- package/dist/lib/subagents.js +0 -75
- package/dist/lib/sync-umbrella.js +1 -1
- package/dist/lib/teams/agents.d.ts +41 -1
- package/dist/lib/teams/agents.js +187 -9
- package/dist/lib/teams/api.d.ts +11 -1
- package/dist/lib/teams/api.js +11 -2
- package/dist/lib/teams/delivery.d.ts +41 -0
- package/dist/lib/teams/delivery.js +60 -0
- package/dist/lib/teams/registry.d.ts +14 -0
- package/dist/lib/teams/registry.js +51 -1
- package/dist/lib/teams/remoteWorktree.d.ts +19 -0
- package/dist/lib/teams/remoteWorktree.js +29 -0
- package/dist/lib/teams/scheduler.d.ts +1 -1
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/worktree.d.ts +24 -0
- package/dist/lib/teams/worktree.js +42 -0
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
- package/dist/lib/terminal/engine.d.ts +4 -0
- package/dist/lib/terminal/engine.js +8 -2
- package/dist/lib/terminal/types.d.ts +21 -2
- package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
- package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
- package/dist/lib/tickets/list.d.ts +53 -0
- package/dist/lib/tickets/list.js +153 -0
- package/dist/lib/tmux/orphan-reap.d.ts +320 -0
- package/dist/lib/tmux/orphan-reap.js +644 -0
- package/dist/lib/tmux/session.d.ts +68 -3
- package/dist/lib/tmux/session.js +95 -5
- package/dist/lib/triggers/handlers.d.ts +20 -0
- package/dist/lib/triggers/handlers.js +6 -1
- package/dist/lib/types.d.ts +46 -34
- package/dist/lib/usage-fleet.d.ts +32 -0
- package/dist/lib/usage-fleet.js +125 -0
- package/dist/lib/usage-refresh.d.ts +3 -3
- package/dist/lib/usage-refresh.js +19 -16
- package/dist/lib/usage.d.ts +51 -47
- package/dist/lib/usage.js +145 -153
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/versions.d.ts +56 -13
- package/dist/lib/versions.js +195 -45
- package/dist/lib/watchdog/log.d.ts +1 -1
- package/dist/lib/watchdog/log.js +3 -3
- package/dist/lib/watchdog/rotate.d.ts +6 -6
- package/dist/lib/watchdog/rotate.js +6 -6
- package/dist/lib/workflows.d.ts +1 -1
- package/dist/lib/yaml-io.d.ts +47 -0
- package/dist/lib/yaml-io.js +55 -0
- package/package.json +2 -1
- package/scripts/install-helper.js +2 -2
- package/scripts/postinstall.js +23 -20
- package/dist/commands/defaults.d.ts +0 -7
- package/dist/commands/defaults.js +0 -107
- package/dist/commands/export.d.ts +0 -11
- package/dist/commands/export.js +0 -215
- package/dist/commands/helper.d.ts +0 -12
- package/dist/commands/helper.js +0 -87
- package/dist/commands/hosts.d.ts +0 -11
- package/dist/commands/hosts.js +0 -330
- package/dist/commands/lock.d.ts +0 -12
- package/dist/commands/lock.js +0 -70
- package/dist/commands/pull.d.ts +0 -17
- package/dist/commands/pull.js +0 -39
- package/dist/commands/push.d.ts +0 -14
- package/dist/commands/push.js +0 -30
- package/dist/commands/wallet.d.ts +0 -20
- package/dist/commands/wallet.js +0 -216
- package/dist/commands/worktree.d.ts +0 -19
- package/dist/commands/worktree.js +0 -272
- package/dist/lib/account-labels.d.ts +0 -24
- package/dist/lib/account-labels.js +0 -72
- package/dist/lib/auto-dispatch-linear.d.ts +0 -18
- package/dist/lib/auto-dispatch-linear.js +0 -107
- package/dist/lib/auto-dispatch-provider.d.ts +0 -10
- package/dist/lib/auto-dispatch-provider.js +0 -30
- package/dist/lib/auto-dispatch.d.ts +0 -93
- package/dist/lib/auto-dispatch.js +0 -128
- package/dist/lib/export.d.ts +0 -72
- package/dist/lib/export.js +0 -269
- package/dist/lib/lock.d.ts +0 -93
- package/dist/lib/lock.js +0 -207
- package/dist/lib/wallet/index.d.ts +0 -78
- package/dist/lib/wallet/index.js +0 -253
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Concrete Linear gateway for auto-dispatch.
|
|
3
|
-
*
|
|
4
|
-
* Talks to the Linear GraphQL API. The API key is read from the LINEAR_API_KEY
|
|
5
|
-
* env var, falling back to the macOS keychain generic-password `linear-api-key`
|
|
6
|
-
* (how the rest of the stack stores it). If no key is resolvable, the gateway is
|
|
7
|
-
* absent and the daemon skips auto-dispatch entirely.
|
|
8
|
-
*
|
|
9
|
-
* "Started" (Doing) and "unstarted" (Todo) are Linear state *types*, so we never
|
|
10
|
-
* hardcode a team's custom state names. `startIssue` resolves the team's first
|
|
11
|
-
* started-type state (cached per team) and moves the issue there — the existing
|
|
12
|
-
* factory webhook turns that transition into a real run.
|
|
13
|
-
*/
|
|
14
|
-
import { execFileSync } from 'child_process';
|
|
15
|
-
const LINEAR_API = 'https://api.linear.app/graphql';
|
|
16
|
-
/** Resolve the Linear API key from env or (on macOS) the keychain. Null if absent. */
|
|
17
|
-
export function resolveLinearApiKey() {
|
|
18
|
-
const fromEnv = process.env.LINEAR_API_KEY?.trim();
|
|
19
|
-
if (fromEnv)
|
|
20
|
-
return fromEnv;
|
|
21
|
-
if (process.platform === 'darwin') {
|
|
22
|
-
try {
|
|
23
|
-
const out = execFileSync('security', ['find-generic-password', '-s', 'linear-api-key', '-w'], {
|
|
24
|
-
encoding: 'utf-8',
|
|
25
|
-
stdio: ['ignore', 'pipe', 'ignore'],
|
|
26
|
-
});
|
|
27
|
-
const key = out.trim();
|
|
28
|
-
if (key)
|
|
29
|
-
return key;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
// not in keychain — fall through
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
async function gql(apiKey, query, variables) {
|
|
38
|
-
const res = await fetch(LINEAR_API, {
|
|
39
|
-
method: 'POST',
|
|
40
|
-
headers: { Authorization: apiKey, 'Content-Type': 'application/json' },
|
|
41
|
-
body: JSON.stringify({ query, variables }),
|
|
42
|
-
});
|
|
43
|
-
if (!res.ok)
|
|
44
|
-
throw new Error(`Linear API HTTP ${res.status}`);
|
|
45
|
-
const json = (await res.json());
|
|
46
|
-
if (json.errors?.length)
|
|
47
|
-
throw new Error(`Linear API: ${json.errors.map((e) => e.message).join('; ')}`);
|
|
48
|
-
if (!json.data)
|
|
49
|
-
throw new Error('Linear API: empty response');
|
|
50
|
-
return json.data;
|
|
51
|
-
}
|
|
52
|
-
/** Build a real Linear gateway, or null when no API key is configured. */
|
|
53
|
-
export function createLinearGateway() {
|
|
54
|
-
const apiKey = resolveLinearApiKey();
|
|
55
|
-
if (!apiKey)
|
|
56
|
-
return null;
|
|
57
|
-
// Cache the resolved started-state id per team so we don't re-query each dispatch.
|
|
58
|
-
const startedStateByTeam = new Map();
|
|
59
|
-
async function resolveStartedState(teamId) {
|
|
60
|
-
const cached = startedStateByTeam.get(teamId);
|
|
61
|
-
if (cached)
|
|
62
|
-
return cached;
|
|
63
|
-
const data = await gql(apiKey, `query($t:String!){ workflowStates(filter:{ team:{ id:{ eq:$t } }, type:{ eq:"started" } }, first:10){ nodes{ id type position } } }`, { t: teamId });
|
|
64
|
-
const nodes = data.workflowStates.nodes.slice().sort((a, b) => a.position - b.position);
|
|
65
|
-
const state = nodes[0];
|
|
66
|
-
if (!state)
|
|
67
|
-
throw new Error(`no started-type workflow state for team ${teamId}`);
|
|
68
|
-
startedStateByTeam.set(teamId, state.id);
|
|
69
|
-
return state.id;
|
|
70
|
-
}
|
|
71
|
-
// team id per issue, captured during fetchDelegatedTodo, so startIssue can resolve state.
|
|
72
|
-
const teamByIssue = new Map();
|
|
73
|
-
return {
|
|
74
|
-
async countInFlight(linearProjectId) {
|
|
75
|
-
const data = await gql(apiKey, `query($p:ID!){ issues(filter:{ project:{ id:{ eq:$p } }, state:{ type:{ eq:"started" } }, delegate:{ null:false } }, first:250){ nodes{ id } } }`, { p: linearProjectId });
|
|
76
|
-
return data.issues.nodes.length;
|
|
77
|
-
},
|
|
78
|
-
async fetchDelegatedTodo(linearProjectId) {
|
|
79
|
-
const data = await gql(apiKey, `query($p:ID!){ issues(filter:{ project:{ id:{ eq:$p } }, state:{ type:{ eq:"unstarted" } }, delegate:{ null:false } }, first:50){ nodes{ id identifier title priority delegate{ name } team{ id } } } }`, { p: linearProjectId });
|
|
80
|
-
const out = [];
|
|
81
|
-
for (const n of data.issues.nodes) {
|
|
82
|
-
if (!n.delegate?.name)
|
|
83
|
-
continue;
|
|
84
|
-
if (n.team?.id)
|
|
85
|
-
teamByIssue.set(n.id, n.team.id);
|
|
86
|
-
out.push({ id: n.id, identifier: n.identifier, title: n.title ?? '', priority: n.priority ?? 0, delegateName: n.delegate.name });
|
|
87
|
-
}
|
|
88
|
-
return out;
|
|
89
|
-
},
|
|
90
|
-
async markStarted(issueId, delegateName) {
|
|
91
|
-
const teamId = teamByIssue.get(issueId);
|
|
92
|
-
if (!teamId)
|
|
93
|
-
throw new Error(`unknown team for issue ${issueId} (fetch it first)`);
|
|
94
|
-
const stateId = await resolveStartedState(teamId);
|
|
95
|
-
const data = await gql(apiKey, `mutation($id:String!,$s:String!){ issueUpdate(id:$id, input:{ stateId:$s }){ success } }`, { id: issueId, s: stateId });
|
|
96
|
-
if (!data.issueUpdate.success)
|
|
97
|
-
throw new Error(`issueUpdate failed for ${issueId}`);
|
|
98
|
-
// Leave a trail so the auto-dispatch is visible in the ticket history.
|
|
99
|
-
try {
|
|
100
|
-
await gql(apiKey, `mutation($i:String!,$b:String!){ commentCreate(input:{ issueId:$i, body:$b }){ success } }`, { i: issueId, b: `Auto-dispatched to **${delegateName}** by the factory (moved Todo → Doing).` });
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
// comment is best-effort — the state change is what matters
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Concrete Dispatcher for auto-dispatch — runs a ticket through agents-cli's own
|
|
3
|
-
* cloud-provider abstraction (`resolveProvider().dispatch()`), the same layer as
|
|
4
|
-
* `agents cloud run`. Rush (Prix) is one provider among rush/codex/factory; a
|
|
5
|
-
* project pins its provider via `provider` in projects.json, else the delegate
|
|
6
|
-
* agent's native cloud is used. This is what removes the hidden Prix coupling —
|
|
7
|
-
* auto-dispatch no longer depends on the prix/api webhook.
|
|
8
|
-
*/
|
|
9
|
-
import type { Dispatcher } from './auto-dispatch.js';
|
|
10
|
-
export declare function createProviderDispatcher(): Dispatcher;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Concrete Dispatcher for auto-dispatch — runs a ticket through agents-cli's own
|
|
3
|
-
* cloud-provider abstraction (`resolveProvider().dispatch()`), the same layer as
|
|
4
|
-
* `agents cloud run`. Rush (Prix) is one provider among rush/codex/factory; a
|
|
5
|
-
* project pins its provider via `provider` in projects.json, else the delegate
|
|
6
|
-
* agent's native cloud is used. This is what removes the hidden Prix coupling —
|
|
7
|
-
* auto-dispatch no longer depends on the prix/api webhook.
|
|
8
|
-
*/
|
|
9
|
-
import { resolveProvider } from './cloud/registry.js';
|
|
10
|
-
export function createProviderDispatcher() {
|
|
11
|
-
return {
|
|
12
|
-
async dispatch({ agent, prompt, repo, provider, host }) {
|
|
13
|
-
const p = resolveProvider(provider, agent);
|
|
14
|
-
const caps = p.capabilities();
|
|
15
|
-
if (!caps.available) {
|
|
16
|
-
throw new Error(`cloud provider '${p.id}' is not available (auth/binary missing)`);
|
|
17
|
-
}
|
|
18
|
-
if (!caps.dispatch) {
|
|
19
|
-
throw new Error(`cloud provider '${p.id}' does not support dispatch`);
|
|
20
|
-
}
|
|
21
|
-
// The host provider clones nothing — a repo target is meaningless there
|
|
22
|
-
// and its dispatch() rejects it; a ticket project pinned to 'host' relies
|
|
23
|
-
// on the machine's own checkout (the project's `host` names the machine).
|
|
24
|
-
const task = p.id === 'host'
|
|
25
|
-
? await p.dispatch({ agent, prompt, providerOptions: { host } })
|
|
26
|
-
: await p.dispatch({ agent, prompt, repo });
|
|
27
|
-
return { id: task.id };
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-dispatch — pull side of the factory dispatch loop.
|
|
3
|
-
*
|
|
4
|
-
* Polls Linear for issues that are delegated to an agent and still in Todo for a
|
|
5
|
-
* managed project, and — up to a per-project concurrency cap — DISPATCHES each
|
|
6
|
-
* through agents-cli's own cloud-provider abstraction (`resolveProvider().dispatch()`),
|
|
7
|
-
* then marks the ticket Doing so it isn't picked up twice.
|
|
8
|
-
*
|
|
9
|
-
* The dispatch goes through the same provider layer as `agents cloud run`, so Rush
|
|
10
|
-
* (Prix) is just one provider among rush/codex/factory — NOT a hidden requirement.
|
|
11
|
-
* A project pins its provider via `dispatch.provider` in its
|
|
12
|
-
* ~/.agents/projects/<name>.yaml definition.
|
|
13
|
-
*
|
|
14
|
-
* OPT-IN: a project auto-dispatches ONLY when `dispatch.enabled: true` AND
|
|
15
|
-
* `dispatch.maxAgents > 0` AND it has a `linear.projectId`. Nothing is on by default.
|
|
16
|
-
*/
|
|
17
|
-
/** The subset of a project definition this module needs. */
|
|
18
|
-
export interface AutoDispatchProject {
|
|
19
|
-
id: string;
|
|
20
|
-
name: string;
|
|
21
|
-
linearProjectId?: string;
|
|
22
|
-
repoSlug?: string;
|
|
23
|
-
autoDispatch?: boolean;
|
|
24
|
-
maxAgents?: number;
|
|
25
|
-
provider?: string;
|
|
26
|
-
host?: string;
|
|
27
|
-
}
|
|
28
|
-
/** A Linear issue that is a candidate for dispatch. */
|
|
29
|
-
export interface DelegatedIssue {
|
|
30
|
-
id: string;
|
|
31
|
-
identifier: string;
|
|
32
|
-
title: string;
|
|
33
|
-
delegateName: string;
|
|
34
|
-
priority: number;
|
|
35
|
-
}
|
|
36
|
-
/** One planned dispatch: which issue, to which agent, in which project. */
|
|
37
|
-
export interface PlannedDispatch {
|
|
38
|
-
projectId: string;
|
|
39
|
-
repoSlug?: string;
|
|
40
|
-
provider?: string;
|
|
41
|
-
host?: string;
|
|
42
|
-
issueId: string;
|
|
43
|
-
identifier: string;
|
|
44
|
-
title: string;
|
|
45
|
-
delegateName: string;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Read auto-dispatch candidates from canonical project YAML definitions
|
|
49
|
-
* (~/.agents/projects/<name>.yaml). Only projects with `dispatch.enabled: true`
|
|
50
|
-
* are returned; the caller's `isEligible` gate then checks the cap and Linear id.
|
|
51
|
-
*/
|
|
52
|
-
export declare function readAutoDispatchProjects(): AutoDispatchProject[];
|
|
53
|
-
/** A project is eligible only when it has explicitly opted in with a positive cap. */
|
|
54
|
-
export declare function isEligible(p: AutoDispatchProject): boolean;
|
|
55
|
-
/**
|
|
56
|
-
* PURE planner. Given eligible projects, in-flight counts, and delegated-Todo
|
|
57
|
-
* issues per project, decide which issues to dispatch — never exceeding
|
|
58
|
-
* `maxAgents` in-flight. Highest Linear priority first.
|
|
59
|
-
*/
|
|
60
|
-
export declare function planAutoDispatch(projects: AutoDispatchProject[], inFlightByProject: Record<string, number>, delegatedTodoByProject: Record<string, DelegatedIssue[]>): PlannedDispatch[];
|
|
61
|
-
/** Map Linear priority to a sortable rank (urgent first, none last). */
|
|
62
|
-
export declare function priorityRank(priority: number): number;
|
|
63
|
-
/** Build the prompt an auto-dispatched agent receives for a ticket. */
|
|
64
|
-
export declare function dispatchPrompt(identifier: string, title: string): string;
|
|
65
|
-
/** Linear I/O surface — discovery + bookkeeping (NOT the dispatch trigger). */
|
|
66
|
-
export interface LinearGateway {
|
|
67
|
-
/** Count issues in a started ("Doing") state whose delegate is set, per project. */
|
|
68
|
-
countInFlight(linearProjectId: string): Promise<number>;
|
|
69
|
-
/** Fetch delegated issues in an unstarted ("Todo") state for a project. */
|
|
70
|
-
fetchDelegatedTodo(linearProjectId: string): Promise<DelegatedIssue[]>;
|
|
71
|
-
/** After a successful dispatch: move the issue Todo -> Doing so it isn't re-picked. */
|
|
72
|
-
markStarted(issueId: string, delegateName: string): Promise<void>;
|
|
73
|
-
}
|
|
74
|
-
/** Dispatch surface — runs a ticket through agents-cli's cloud/local provider layer. */
|
|
75
|
-
export interface Dispatcher {
|
|
76
|
-
dispatch(opts: {
|
|
77
|
-
agent: string;
|
|
78
|
-
prompt: string;
|
|
79
|
-
repo?: string;
|
|
80
|
-
provider?: string;
|
|
81
|
-
host?: string;
|
|
82
|
-
}): Promise<{
|
|
83
|
-
id: string;
|
|
84
|
-
}>;
|
|
85
|
-
}
|
|
86
|
-
export interface AutoDispatchDeps {
|
|
87
|
-
projects: AutoDispatchProject[];
|
|
88
|
-
linear: LinearGateway;
|
|
89
|
-
dispatcher: Dispatcher;
|
|
90
|
-
log?: (level: 'INFO' | 'WARN' | 'ERROR', msg: string) => void;
|
|
91
|
-
}
|
|
92
|
-
/** One tick: read state per eligible project, plan, dispatch, then mark started. */
|
|
93
|
-
export declare function autoDispatchTick(deps: AutoDispatchDeps): Promise<PlannedDispatch[]>;
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-dispatch — pull side of the factory dispatch loop.
|
|
3
|
-
*
|
|
4
|
-
* Polls Linear for issues that are delegated to an agent and still in Todo for a
|
|
5
|
-
* managed project, and — up to a per-project concurrency cap — DISPATCHES each
|
|
6
|
-
* through agents-cli's own cloud-provider abstraction (`resolveProvider().dispatch()`),
|
|
7
|
-
* then marks the ticket Doing so it isn't picked up twice.
|
|
8
|
-
*
|
|
9
|
-
* The dispatch goes through the same provider layer as `agents cloud run`, so Rush
|
|
10
|
-
* (Prix) is just one provider among rush/codex/factory — NOT a hidden requirement.
|
|
11
|
-
* A project pins its provider via `dispatch.provider` in its
|
|
12
|
-
* ~/.agents/projects/<name>.yaml definition.
|
|
13
|
-
*
|
|
14
|
-
* OPT-IN: a project auto-dispatches ONLY when `dispatch.enabled: true` AND
|
|
15
|
-
* `dispatch.maxAgents > 0` AND it has a `linear.projectId`. Nothing is on by default.
|
|
16
|
-
*/
|
|
17
|
-
import { listProjectDefs } from './projects.js';
|
|
18
|
-
/**
|
|
19
|
-
* Read auto-dispatch candidates from canonical project YAML definitions
|
|
20
|
-
* (~/.agents/projects/<name>.yaml). Only projects with `dispatch.enabled: true`
|
|
21
|
-
* are returned; the caller's `isEligible` gate then checks the cap and Linear id.
|
|
22
|
-
*/
|
|
23
|
-
export function readAutoDispatchProjects() {
|
|
24
|
-
return listProjectDefs()
|
|
25
|
-
.filter((d) => d.dispatch?.enabled === true)
|
|
26
|
-
.map((d) => ({
|
|
27
|
-
id: d.name,
|
|
28
|
-
name: d.name,
|
|
29
|
-
linearProjectId: d.linear?.projectId,
|
|
30
|
-
repoSlug: d.repo ?? d.repos?.[0]?.slug,
|
|
31
|
-
autoDispatch: d.dispatch?.enabled ?? false,
|
|
32
|
-
maxAgents: d.dispatch?.maxAgents,
|
|
33
|
-
provider: d.dispatch?.provider,
|
|
34
|
-
host: d.dispatch?.host,
|
|
35
|
-
}));
|
|
36
|
-
}
|
|
37
|
-
/** A project is eligible only when it has explicitly opted in with a positive cap. */
|
|
38
|
-
export function isEligible(p) {
|
|
39
|
-
return p.autoDispatch === true && typeof p.maxAgents === 'number' && p.maxAgents > 0 && !!p.linearProjectId;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* PURE planner. Given eligible projects, in-flight counts, and delegated-Todo
|
|
43
|
-
* issues per project, decide which issues to dispatch — never exceeding
|
|
44
|
-
* `maxAgents` in-flight. Highest Linear priority first.
|
|
45
|
-
*/
|
|
46
|
-
export function planAutoDispatch(projects, inFlightByProject, delegatedTodoByProject) {
|
|
47
|
-
const plan = [];
|
|
48
|
-
for (const p of projects) {
|
|
49
|
-
if (!isEligible(p))
|
|
50
|
-
continue;
|
|
51
|
-
const cap = p.maxAgents;
|
|
52
|
-
const slots = cap - (inFlightByProject[p.id] ?? 0);
|
|
53
|
-
if (slots <= 0)
|
|
54
|
-
continue;
|
|
55
|
-
const candidates = (delegatedTodoByProject[p.id] ?? [])
|
|
56
|
-
.slice()
|
|
57
|
-
.sort((a, b) => priorityRank(a.priority) - priorityRank(b.priority));
|
|
58
|
-
for (const issue of candidates.slice(0, slots)) {
|
|
59
|
-
plan.push({
|
|
60
|
-
projectId: p.id,
|
|
61
|
-
repoSlug: p.repoSlug,
|
|
62
|
-
provider: p.provider,
|
|
63
|
-
host: p.host,
|
|
64
|
-
issueId: issue.id,
|
|
65
|
-
identifier: issue.identifier,
|
|
66
|
-
title: issue.title,
|
|
67
|
-
delegateName: issue.delegateName,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return plan;
|
|
72
|
-
}
|
|
73
|
-
/** Map Linear priority to a sortable rank (urgent first, none last). */
|
|
74
|
-
export function priorityRank(priority) {
|
|
75
|
-
return priority === 0 ? 5 : priority;
|
|
76
|
-
}
|
|
77
|
-
/** Build the prompt an auto-dispatched agent receives for a ticket. */
|
|
78
|
-
export function dispatchPrompt(identifier, title) {
|
|
79
|
-
return `Work on Linear ticket ${identifier}: ${title}. Read the ticket for full context, implement it, and open a PR when done.`;
|
|
80
|
-
}
|
|
81
|
-
/** One tick: read state per eligible project, plan, dispatch, then mark started. */
|
|
82
|
-
export async function autoDispatchTick(deps) {
|
|
83
|
-
const log = deps.log ?? (() => { });
|
|
84
|
-
const eligible = deps.projects.filter(isEligible);
|
|
85
|
-
if (eligible.length === 0)
|
|
86
|
-
return [];
|
|
87
|
-
const inFlight = {};
|
|
88
|
-
const todo = {};
|
|
89
|
-
for (const p of eligible) {
|
|
90
|
-
const pid = p.linearProjectId;
|
|
91
|
-
try {
|
|
92
|
-
inFlight[p.id] = await deps.linear.countInFlight(pid);
|
|
93
|
-
todo[p.id] = await deps.linear.fetchDelegatedTodo(pid);
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
96
|
-
log('WARN', `auto-dispatch: failed to read Linear state for '${p.name}': ${err.message}`);
|
|
97
|
-
inFlight[p.id] = Number.MAX_SAFE_INTEGER; // fail closed for this project
|
|
98
|
-
todo[p.id] = [];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const plan = planAutoDispatch(eligible, inFlight, todo);
|
|
102
|
-
const dispatched = [];
|
|
103
|
-
for (const d of plan) {
|
|
104
|
-
try {
|
|
105
|
-
const task = await deps.dispatcher.dispatch({
|
|
106
|
-
agent: d.delegateName.trim().toLowerCase(),
|
|
107
|
-
prompt: dispatchPrompt(d.identifier, d.title),
|
|
108
|
-
repo: d.repoSlug,
|
|
109
|
-
provider: d.provider,
|
|
110
|
-
host: d.host,
|
|
111
|
-
});
|
|
112
|
-
// Bookkeeping only — dispatch already happened; moving to Doing keeps the
|
|
113
|
-
// ticket out of the next Todo poll. A failure here is non-fatal.
|
|
114
|
-
try {
|
|
115
|
-
await deps.linear.markStarted(d.issueId, d.delegateName);
|
|
116
|
-
}
|
|
117
|
-
catch (err) {
|
|
118
|
-
log('WARN', `auto-dispatch: dispatched ${d.identifier} but failed to mark Doing: ${err.message}`);
|
|
119
|
-
}
|
|
120
|
-
dispatched.push(d);
|
|
121
|
-
log('INFO', `auto-dispatch: dispatched ${d.identifier} to ${d.delegateName} (task ${task.id})`);
|
|
122
|
-
}
|
|
123
|
-
catch (err) {
|
|
124
|
-
log('WARN', `auto-dispatch: failed to dispatch ${d.identifier}: ${err.message}`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return dispatched;
|
|
128
|
-
}
|
package/dist/lib/export.d.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { AgentId } from './types.js';
|
|
2
|
-
export type ExportMode = 'merge' | 'replace' | 'staged';
|
|
3
|
-
/** Filename of the provenance receipt written into the agent's config dir. */
|
|
4
|
-
export declare const RECEIPT_NAME = ".agents-cli-export.json";
|
|
5
|
-
/** Suffix for the incoming copy of a file the user already has. */
|
|
6
|
-
export declare const CONFLICT_SUFFIX = ".from-agents-cli";
|
|
7
|
-
/** Why an export cannot proceed. Each maps to a distinct user-facing remedy. */
|
|
8
|
-
export type ExportBlocker = {
|
|
9
|
-
kind: 'not-installed';
|
|
10
|
-
} | {
|
|
11
|
-
kind: 'not-isolated';
|
|
12
|
-
} | {
|
|
13
|
-
kind: 'no-config';
|
|
14
|
-
source: string;
|
|
15
|
-
} | {
|
|
16
|
-
kind: 'dest-adopted';
|
|
17
|
-
realPath: string;
|
|
18
|
-
adoptedVersion: string;
|
|
19
|
-
};
|
|
20
|
-
/** What the destination `~/.<agent>` currently is. */
|
|
21
|
-
export type DestKind = 'absent' | 'real-dir' | 'foreign-symlink';
|
|
22
|
-
/** One file the export would place, relative to the config dir root. */
|
|
23
|
-
export interface ExportEntry {
|
|
24
|
-
/** Path relative to the config dir, e.g. `prompts/review.md`. */
|
|
25
|
-
rel: string;
|
|
26
|
-
/** Absolute source file inside the isolated home. */
|
|
27
|
-
source: string;
|
|
28
|
-
/** Absolute path this file will be written to. */
|
|
29
|
-
target: string;
|
|
30
|
-
/**
|
|
31
|
-
* Set when the user already has `rel`. `target` then points at the
|
|
32
|
-
* `.from-agents-cli` sibling, and `existing` is the untouched original.
|
|
33
|
-
*/
|
|
34
|
-
existing?: string;
|
|
35
|
-
}
|
|
36
|
-
export interface ExportPlan {
|
|
37
|
-
agent: AgentId;
|
|
38
|
-
version: string;
|
|
39
|
-
mode: ExportMode;
|
|
40
|
-
/** The isolated config dir, e.g. `<versionDir>/home/.codex`. */
|
|
41
|
-
source: string;
|
|
42
|
-
/** The user's real config dir, e.g. `~/.codex`. */
|
|
43
|
-
dest: string;
|
|
44
|
-
destKind: DestKind;
|
|
45
|
-
/** Files with no counterpart in `dest` — written in place. */
|
|
46
|
-
writes: ExportEntry[];
|
|
47
|
-
/** Files the user already has — written alongside, never over. */
|
|
48
|
-
conflicts: ExportEntry[];
|
|
49
|
-
/** replace mode only: where `dest` gets moved first. */
|
|
50
|
-
backupPath: string | null;
|
|
51
|
-
/** staged mode only: the subdirectory receiving the whole tree. */
|
|
52
|
-
stagedPath: string | null;
|
|
53
|
-
receiptPath: string;
|
|
54
|
-
blocker: ExportBlocker | null;
|
|
55
|
-
}
|
|
56
|
-
export interface ExportResult {
|
|
57
|
-
exported: boolean;
|
|
58
|
-
dest: string;
|
|
59
|
-
written: string[];
|
|
60
|
-
conflicts: Array<{
|
|
61
|
-
path: string;
|
|
62
|
-
theirs: string;
|
|
63
|
-
}>;
|
|
64
|
-
backupPath: string | null;
|
|
65
|
-
stagedPath: string | null;
|
|
66
|
-
receiptPath: string | null;
|
|
67
|
-
errors: string[];
|
|
68
|
-
}
|
|
69
|
-
/** Build a read-only plan. Performs no mutations. */
|
|
70
|
-
export declare function planExport(agent: AgentId, version: string, timestamp: number, mode?: ExportMode): ExportPlan;
|
|
71
|
-
/** Execute a plan from {@link planExport}. */
|
|
72
|
-
export declare function executeExport(plan: ExportPlan, timestamp: number): ExportResult;
|