@phnx-labs/agents-cli 1.22.113 → 1.22.115
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 +139 -0
- package/README.md +32 -113
- package/dist/browser.js +0 -0
- package/dist/cli/command-registry.d.ts +0 -60
- package/dist/cli/command-registry.js +57 -66
- package/dist/commands/accounts.d.ts +3 -77
- package/dist/commands/accounts.js +13 -366
- package/dist/commands/apply.d.ts +0 -4
- package/dist/commands/apply.js +3 -3
- package/dist/commands/audit.js +1 -1
- package/dist/commands/auth.js +0 -2
- package/dist/commands/browser-picker.d.ts +3 -6
- package/dist/commands/browser-picker.js +2 -2
- package/dist/commands/browser-sessions-picker.d.ts +2 -1
- package/dist/commands/browser.d.ts +53 -0
- package/dist/commands/browser.js +199 -9
- package/dist/commands/computer-sessions-picker.d.ts +2 -1
- package/dist/commands/computer.d.ts +14 -19
- package/dist/commands/computer.js +65 -10
- package/dist/commands/config.js +46 -2
- package/dist/commands/daemon.d.ts +0 -23
- package/dist/commands/daemon.js +1 -1
- package/dist/commands/detach-core.d.ts +2 -1
- package/dist/commands/detach.d.ts +0 -3
- package/dist/commands/detach.js +3 -3
- package/dist/commands/doctor.d.ts +2 -3
- package/dist/commands/doctor.js +0 -11
- package/dist/commands/events.d.ts +1 -3
- package/dist/commands/events.js +4 -7
- package/dist/commands/exec.d.ts +0 -1
- package/dist/commands/exec.js +2 -7
- package/dist/commands/feed-watch.js +52 -8
- package/dist/commands/feed.d.ts +3 -3
- package/dist/commands/feed.js +1 -1
- package/dist/commands/focus.d.ts +4 -4
- package/dist/commands/focus.js +1 -1
- package/dist/commands/go.d.ts +0 -17
- package/dist/commands/go.js +2 -19
- package/dist/commands/harness-hooks.d.ts +0 -7
- package/dist/commands/harness-hooks.js +1 -1
- package/dist/commands/harness-wizard.d.ts +2 -2
- package/dist/commands/harness.d.ts +3 -8
- package/dist/commands/harness.js +1 -1
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +1 -1
- package/dist/commands/logs.js +1 -1
- package/dist/commands/mcp.js +8 -83
- package/dist/commands/memory.js +4 -47
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +7 -7
- package/dist/commands/plugins.js +1 -93
- package/dist/commands/projects.d.ts +2 -18
- package/dist/commands/projects.js +89 -3
- package/dist/commands/repo.js +0 -44
- package/dist/commands/resource-view.d.ts +3 -2
- package/dist/commands/resume.d.ts +0 -1
- package/dist/commands/resume.js +5 -2
- package/dist/commands/routines.d.ts +1 -3
- package/dist/commands/routines.js +1 -1
- package/dist/commands/run-account-picker.d.ts +2 -1
- package/dist/commands/run-broadcast.d.ts +2 -1
- package/dist/commands/run-device-picker.d.ts +2 -1
- package/dist/commands/secrets-passthrough.d.ts +14 -0
- package/dist/commands/secrets-passthrough.js +23 -4
- package/dist/commands/send.d.ts +4 -4
- package/dist/commands/send.js +6 -51
- package/dist/commands/sessions-backfill.d.ts +2 -35
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-backup-setup.js +1 -1
- package/dist/commands/sessions-bookmark.d.ts +0 -10
- package/dist/commands/sessions-bookmark.js +1 -1
- package/dist/commands/sessions-inject.d.ts +2 -3
- package/dist/commands/sessions-inject.js +8 -17
- package/dist/commands/sessions-picker-factory.d.ts +4 -14
- package/dist/commands/sessions-picker-factory.js +2 -2
- package/dist/commands/sessions-picker.d.ts +3 -9
- package/dist/commands/sessions-picker.js +2 -2
- package/dist/commands/sessions-resume.d.ts +2 -4
- package/dist/commands/sessions-resume.js +0 -6
- package/dist/commands/sessions-share.d.ts +5 -7
- package/dist/commands/sessions-share.js +98 -49
- package/dist/commands/sessions-stats.d.ts +2 -1
- package/dist/commands/sessions-stop.d.ts +0 -3
- package/dist/commands/sessions-stop.js +1 -1
- package/dist/commands/sessions-tail.d.ts +2 -1
- package/dist/commands/sessions-trace.d.ts +4 -6
- package/dist/commands/sessions-trace.js +1 -1
- package/dist/commands/sessions.d.ts +13 -104
- package/dist/commands/sessions.js +11 -18
- package/dist/commands/setup-browser.js +18 -2
- package/dist/commands/setup-computer.js +20 -6
- package/dist/commands/setup-mine.d.ts +0 -6
- package/dist/commands/setup-mine.js +1 -1
- package/dist/commands/setup-secrets.js +24 -4
- package/dist/commands/setup-terminal.d.ts +3 -0
- package/dist/commands/setup-terminal.js +22 -0
- package/dist/commands/setup.d.ts +3 -4
- package/dist/commands/setup.js +21 -11
- package/dist/commands/skills.js +0 -8
- package/dist/commands/ssh.d.ts +6 -0
- package/dist/commands/ssh.js +92 -233
- package/dist/commands/sync.js +14 -5
- package/dist/commands/teams-picker.d.ts +2 -5
- package/dist/commands/teams-picker.js +2 -2
- package/dist/commands/teams.d.ts +1 -7
- package/dist/commands/teams.js +2 -2
- package/dist/commands/tmux.d.ts +1 -1
- package/dist/commands/tmux.js +1 -1
- package/dist/commands/traces.js +1 -1
- package/dist/commands/upgrade.d.ts +2 -1
- package/dist/commands/utils.d.ts +1 -1
- package/dist/commands/utils.js +1 -1
- package/dist/lib/account-capabilities.d.ts +2 -1
- package/dist/lib/account-catalog.d.ts +4 -13
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +3 -4
- package/dist/lib/account-registry.js +1 -1
- package/dist/lib/accounting/account-launch.d.ts +4 -3
- package/dist/lib/accounting/account-pool.d.ts +2 -1
- package/dist/lib/accounting/rotate.d.ts +3 -9
- package/dist/lib/accounting/rotate.js +2 -14
- package/dist/lib/accounting/usage-sync.d.ts +5 -4
- package/dist/lib/accounting/usage.d.ts +7 -31
- package/dist/lib/accounting/usage.js +4 -4
- package/dist/lib/accounts/add.d.ts +0 -5
- package/dist/lib/accounts/add.js +1 -7
- package/dist/lib/accounts/migrate.d.ts +8 -8
- package/dist/lib/accounts/migrate.js +1 -1
- package/dist/lib/acp/client.d.ts +3 -2
- package/dist/lib/acp/harnesses.d.ts +2 -2
- package/dist/lib/acp/harnesses.js +1 -1
- package/dist/lib/acp/run.d.ts +2 -1
- package/dist/lib/actor.d.ts +3 -2
- package/dist/lib/add-dir.d.ts +2 -17
- package/dist/lib/add-dir.js +2 -6
- package/dist/lib/address.d.ts +56 -0
- package/dist/lib/address.js +143 -0
- package/dist/lib/agent-spec/agents.d.ts +12 -28
- package/dist/lib/agent-spec/agents.js +2 -6
- package/dist/lib/agent-spec/primitives.d.ts +0 -7
- package/dist/lib/agent-spec/primitives.js +0 -6
- package/dist/lib/agent-spec/types.d.ts +2 -1
- package/dist/lib/analytics/dashboard.d.ts +1 -5
- package/dist/lib/analytics/dashboard.js +0 -2
- package/dist/lib/analytics/mix-commands.d.ts +0 -7
- package/dist/lib/analytics/mix-commands.js +3 -3
- package/dist/lib/analytics/recipes.d.ts +0 -12
- package/dist/lib/analytics/recipes.js +7 -31
- package/dist/lib/analytics/usage-db.d.ts +5 -32
- package/dist/lib/analytics/usage-db.js +1 -70
- package/dist/lib/answer-router.d.ts +7 -6
- package/dist/lib/answer-router.js +5 -11
- package/dist/lib/artifact-actions.d.ts +0 -4
- package/dist/lib/artifacts-client.d.ts +20 -0
- package/dist/lib/artifacts-client.js +46 -0
- package/dist/lib/ask-classifier.d.ts +3 -4
- package/dist/lib/ask-classifier.js +0 -7
- package/dist/lib/auth-health.d.ts +3 -46
- package/dist/lib/auth-health.js +3 -3
- package/dist/lib/auth-mint.d.ts +6 -6
- package/dist/lib/auth-mint.js +7 -7
- package/dist/lib/bench/runner.d.ts +2 -2
- package/dist/lib/bench/runner.js +1 -1
- package/dist/lib/bench/storage.d.ts +0 -1
- package/dist/lib/bench/storage.js +1 -1
- package/dist/lib/boot-profile.d.ts +0 -2
- package/dist/lib/boot-profile.js +0 -4
- package/dist/lib/brand.d.ts +0 -6
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/arc-discovery.d.ts +4 -12
- package/dist/lib/browser/arc-discovery.js +1 -1
- package/dist/lib/browser/cdp.d.ts +1 -1
- package/dist/lib/browser/chrome.d.ts +2 -2
- package/dist/lib/browser/chrome.js +0 -4
- package/dist/lib/browser/chromium-discovery.d.ts +3 -2
- package/dist/lib/browser/drivers/arc.d.ts +3 -20
- package/dist/lib/browser/drivers/arc.js +2 -7
- package/dist/lib/browser/drivers/firefox.d.ts +2 -6
- package/dist/lib/browser/drivers/firefox.js +1 -1
- package/dist/lib/browser/drivers/local.d.ts +2 -1
- package/dist/lib/browser/drivers/ssh.d.ts +2 -3
- package/dist/lib/browser/drivers/ssh.js +0 -7
- package/dist/lib/browser/firefox-discovery.d.ts +4 -3
- package/dist/lib/browser/har.d.ts +8 -7
- package/dist/lib/browser/hygiene.d.ts +2 -3
- package/dist/lib/browser/hygiene.js +1 -1
- package/dist/lib/browser/ipc.d.ts +4 -3
- package/dist/lib/browser/ipc.js +1 -1
- package/dist/lib/browser/login-detection.d.ts +1 -8
- package/dist/lib/browser/registry.d.ts +2 -1
- package/dist/lib/browser/remote-control.d.ts +0 -7
- package/dist/lib/browser/remote-control.js +2 -2
- package/dist/lib/browser/resolve-target.d.ts +2 -6
- package/dist/lib/browser/resolve-target.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +59 -4
- package/dist/lib/browser/runtime-state.js +99 -18
- package/dist/lib/browser/service.d.ts +4 -4
- package/dist/lib/browser/service.js +21 -1
- package/dist/lib/browser/sessions-list.d.ts +0 -10
- package/dist/lib/browser/sessions-list.js +3 -3
- package/dist/lib/browser/stream.d.ts +2 -1
- package/dist/lib/browser/task-index.d.ts +4 -4
- package/dist/lib/browser/task-index.js +1 -1
- package/dist/lib/browser/types.d.ts +0 -20
- package/dist/lib/browser/types.js +1 -34
- package/dist/lib/browser/upload.d.ts +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -2
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/budget/live-cloud.d.ts +2 -1
- package/dist/lib/budget/preflight.d.ts +3 -5
- package/dist/lib/budget/preflight.js +1 -1
- package/dist/lib/catchup.d.ts +2 -1
- package/dist/lib/channels/owner-forward.d.ts +5 -4
- package/dist/lib/channels/owner-sink.js +2 -2
- package/dist/lib/channels/providers/desktop.js +1 -1
- package/dist/lib/channels/providers/rush.d.ts +2 -1
- package/dist/lib/channels/registry.d.ts +1 -1
- package/dist/lib/channels/registry.js +1 -1
- package/dist/lib/channels/resolve.d.ts +3 -2
- package/dist/lib/channels/send.d.ts +5 -4
- package/dist/lib/cli-resources.d.ts +3 -9
- package/dist/lib/cli-resources.js +4 -2
- package/dist/lib/cloud/cursor.d.ts +1 -2
- package/dist/lib/cloud/cursor.js +1 -1
- package/dist/lib/cloud/dispatch.d.ts +2 -1
- package/dist/lib/cloud/dispatch.js +1 -1
- package/dist/lib/cloud/factory.d.ts +0 -2
- package/dist/lib/cloud/factory.js +1 -1
- package/dist/lib/cloud/rush.d.ts +3 -11
- package/dist/lib/cloud/rush.js +1 -1
- package/dist/lib/cloud/session-index.d.ts +2 -1
- package/dist/lib/cloud/types.d.ts +2 -1
- package/dist/lib/cloudflare/creds.d.ts +10 -0
- package/dist/lib/cloudflare/creds.js +46 -0
- package/dist/lib/cloudflare/provision.d.ts +35 -0
- package/dist/lib/cloudflare/provision.js +144 -0
- package/dist/lib/codex-policy.d.ts +2 -1
- package/dist/lib/commands.d.ts +7 -7
- package/dist/lib/commands.js +1 -1
- package/dist/lib/comms-render.d.ts +1 -1
- package/dist/lib/computer/context.d.ts +11 -3
- package/dist/lib/computer/context.js +2 -2
- package/dist/lib/computer/policy.d.ts +0 -12
- package/dist/lib/computer/policy.js +1 -1
- package/dist/lib/computer/sessions-list.d.ts +55 -0
- package/dist/lib/computer/sessions-list.js +168 -1
- package/dist/lib/computer-client.d.ts +3 -3
- package/dist/lib/computer-client.js +0 -1
- package/dist/lib/concurrency.d.ts +2 -1
- package/dist/lib/config-keys.d.ts +16 -3
- package/dist/lib/config-keys.js +47 -2
- package/dist/lib/convert.d.ts +0 -12
- package/dist/lib/convert.js +1 -12
- package/dist/lib/crabbox/cli.d.ts +6 -24
- package/dist/lib/crabbox/cli.js +2 -28
- package/dist/lib/crabbox/lease.d.ts +5 -6
- package/dist/lib/crabbox/lease.js +1 -1
- package/dist/lib/crabbox/progress.d.ts +2 -1
- package/dist/lib/crabbox/setup-copy.d.ts +2 -3
- package/dist/lib/crabbox/setup-copy.js +1 -1
- package/dist/lib/daemon/account-state-daemon-service.d.ts +1 -1
- package/dist/lib/daemon/attention-notify-service.d.ts +2 -1
- package/dist/lib/daemon/catchup-service.d.ts +2 -1
- package/dist/lib/daemon/daemon.d.ts +4 -4
- package/dist/lib/daemon/daemon.js +9 -2
- package/dist/lib/daemon/feed-stream-service.d.ts +23 -0
- package/dist/lib/daemon/feed-stream-service.js +40 -0
- package/dist/lib/daemon/harness-update-service.d.ts +2 -19
- package/dist/lib/daemon/harness-update-service.js +3 -3
- package/dist/lib/daemon/runner.d.ts +3 -3
- package/dist/lib/daemon/self-update-service.d.ts +1 -16
- package/dist/lib/daemon/self-update-service.js +6 -6
- package/dist/lib/daemon/state-dir-check-service.d.ts +2 -1
- package/dist/lib/daemon/supervisor.d.ts +3 -2
- package/dist/lib/daemon-services.d.ts +3 -2
- package/dist/lib/daemon-services.js +5 -0
- package/dist/lib/daemon-webhooks.d.ts +1 -1
- package/dist/lib/deeplink/register.d.ts +3 -13
- package/dist/lib/deeplink/register.js +3 -3
- package/dist/lib/deeplink/url.d.ts +3 -2
- package/dist/lib/device-config.d.ts +4 -15
- package/dist/lib/device-config.js +164 -8
- package/dist/lib/devices/connect.d.ts +51 -6
- package/dist/lib/devices/connect.js +169 -21
- package/dist/lib/devices/discovery-policy.d.ts +3 -2
- package/dist/lib/devices/doctor-findings.js +1 -1
- package/dist/lib/devices/doctor-overview-cache.d.ts +3 -2
- package/dist/lib/devices/fleet-divergence.d.ts +2 -1
- package/dist/lib/devices/fleet.d.ts +3 -4
- package/dist/lib/devices/fleet.js +1 -1
- package/dist/lib/devices/harness-inventory.d.ts +3 -2
- package/dist/lib/devices/health-report.d.ts +3 -2
- package/dist/lib/devices/health.d.ts +1 -8
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/interactive-host.d.ts +0 -2
- package/dist/lib/devices/interactive-host.js +1 -1
- package/dist/lib/devices/known-hosts.d.ts +2 -20
- package/dist/lib/devices/known-hosts.js +2 -2
- package/dist/lib/devices/pool.d.ts +2 -1
- package/dist/lib/devices/resolve-target.d.ts +2 -2
- package/dist/lib/devices/rollout-verify.d.ts +3 -2
- package/dist/lib/devices/stats-cache.d.ts +3 -2
- package/dist/lib/devices/sync.d.ts +6 -5
- package/dist/lib/devices/worker-pick.d.ts +3 -12
- package/dist/lib/devices/worker-pick.js +1 -1
- package/dist/lib/diff-text.d.ts +2 -1
- package/dist/lib/doctor-diff.d.ts +2 -1
- package/dist/lib/drift-sync.d.ts +3 -2
- package/dist/lib/drift.d.ts +3 -3
- package/dist/lib/drift.js +1 -1
- package/dist/lib/event-families.d.ts +0 -6
- package/dist/lib/event-families.js +3 -3
- package/dist/lib/event-provenance.d.ts +2 -1
- package/dist/lib/events-ingest.d.ts +4 -3
- package/dist/lib/exec-account-home.d.ts +2 -4
- package/dist/lib/exec-account-home.js +1 -1
- package/dist/lib/exec-bounded.d.ts +3 -4
- package/dist/lib/exec-bounded.js +1 -1
- package/dist/lib/exec.d.ts +6 -18
- package/dist/lib/exec.js +1 -1
- package/dist/lib/factory/snapshot.d.ts +2 -2
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/feed/activity-stream.d.ts +2 -5
- package/dist/lib/feed/activity-stream.js +2 -2
- package/dist/lib/feed/activity.d.ts +8 -33
- package/dist/lib/feed/activity.js +8 -8
- package/dist/lib/feed/answer.d.ts +3 -2
- package/dist/lib/feed/attention.js +5 -1
- package/dist/lib/feed/envelope.d.ts +79 -0
- package/dist/lib/feed/envelope.js +23 -0
- package/dist/lib/feed/events.d.ts +8 -47
- package/dist/lib/feed/events.js +9 -141
- package/dist/lib/feed/feed.d.ts +9 -42
- package/dist/lib/feed/feed.js +1 -60
- package/dist/lib/feed/hub-server.d.ts +86 -0
- package/dist/lib/feed/hub-server.js +334 -0
- package/dist/lib/feed/hub.d.ts +95 -0
- package/dist/lib/feed/hub.js +255 -0
- package/dist/lib/feed/pr-status.d.ts +0 -2
- package/dist/lib/feed/pr-status.js +1 -5
- package/dist/lib/feed/tool-activity.d.ts +108 -0
- package/dist/lib/feed/tool-activity.js +313 -0
- package/dist/lib/feed/tools.d.ts +198 -0
- package/dist/lib/feed/tools.js +265 -0
- package/dist/lib/feed/watch.d.ts +51 -52
- package/dist/lib/feed/watch.js +147 -17
- package/dist/lib/feed-broadcast.d.ts +5 -47
- package/dist/lib/feed-broadcast.js +9 -9
- package/dist/lib/feed-outcome.d.ts +3 -6
- package/dist/lib/feed-outcome.js +2 -2
- package/dist/lib/feed-policy.d.ts +5 -6
- package/dist/lib/feed-policy.js +2 -2
- package/dist/lib/feed-post.d.ts +3 -4
- package/dist/lib/feed-post.js +1 -1
- package/dist/lib/feed-ranking.d.ts +2 -2
- package/dist/lib/feed-ranking.js +1 -1
- package/dist/lib/fleet/apply.d.ts +5 -6
- package/dist/lib/fleet/apply.js +4 -4
- package/dist/lib/fleet/manifest.d.ts +2 -1
- package/dist/lib/fleet/remote-login.d.ts +18 -36
- package/dist/lib/fleet/remote-login.js +20 -19
- package/dist/lib/fleet/types.d.ts +0 -8
- package/dist/lib/fleet-cache.d.ts +1 -18
- package/dist/lib/fleet-cache.js +0 -5
- package/dist/lib/fleet-shared-repo-sync.d.ts +3 -3
- package/dist/lib/fleet-shared-repo-sync.js +1 -1
- package/dist/lib/fleet-shared-state.d.ts +3 -2
- package/dist/lib/format.d.ts +3 -2
- package/dist/lib/format.js +1 -1
- package/dist/lib/friction-heuristics.d.ts +2 -1
- package/dist/lib/fs-walk.d.ts +2 -1
- package/dist/lib/fuzzy.d.ts +2 -1
- package/dist/lib/gemini-settings.d.ts +0 -1
- package/dist/lib/gemini-settings.js +1 -1
- package/dist/lib/git.d.ts +7 -81
- package/dist/lib/git.js +2 -199
- package/dist/lib/github/gh-overload.d.ts +0 -4
- package/dist/lib/github/gh-overload.js +2 -2
- package/dist/lib/github/project-prs.d.ts +118 -0
- package/dist/lib/github/project-prs.js +173 -0
- package/dist/lib/github/rest.d.ts +2 -1
- package/dist/lib/harness/exec-config-version.d.ts +2 -1
- package/dist/lib/harness-auth-capabilities.d.ts +5 -4
- package/dist/lib/harness-connection-test.d.ts +2 -1
- package/dist/lib/heal.d.ts +3 -20
- package/dist/lib/heal.js +2 -39
- package/dist/lib/help.d.ts +3 -2
- package/dist/lib/helper-download.d.ts +0 -12
- package/dist/lib/helper-download.js +2 -2
- package/dist/lib/helper-versions.d.ts +2 -1
- package/dist/lib/helper-versions.js +1 -1
- package/dist/lib/hooks/install.d.ts +8 -49
- package/dist/lib/hooks/install.js +2 -96
- package/dist/lib/hooks/match.d.ts +2 -1
- package/dist/lib/hosts/credential-transport.d.ts +0 -2
- package/dist/lib/hosts/credential-transport.js +1 -1
- package/dist/lib/hosts/dispatch.d.ts +2 -24
- package/dist/lib/hosts/dispatch.js +2 -2
- package/dist/lib/hosts/logs.d.ts +2 -1
- package/dist/lib/hosts/passthrough.d.ts +1 -1
- package/dist/lib/hosts/passthrough.js +0 -1
- package/dist/lib/hosts/progress.d.ts +0 -5
- package/dist/lib/hosts/progress.js +1 -1
- package/dist/lib/hosts/ready.d.ts +3 -4
- package/dist/lib/hosts/ready.js +0 -8
- package/dist/lib/hosts/reconcile.d.ts +2 -8
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +4 -11
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +1 -1
- package/dist/lib/hosts/remote-cmd.d.ts +55 -4
- package/dist/lib/hosts/remote-cmd.js +125 -8
- package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +2 -0
- package/dist/lib/hosts/remote-cmd.test-fixture.js +22 -0
- package/dist/lib/hosts/session-index.d.ts +3 -2
- package/dist/lib/hosts/ssh-config.d.ts +2 -3
- package/dist/lib/hosts/ssh-config.js +0 -10
- package/dist/lib/humans.d.ts +0 -2
- package/dist/lib/humans.js +2 -2
- package/dist/lib/import.d.ts +4 -3
- package/dist/lib/installations/installation-lock.d.ts +0 -2
- package/dist/lib/installations/installation-lock.js +2 -2
- package/dist/lib/installations/launch-gate.d.ts +0 -9
- package/dist/lib/installations/launch-gate.js +1 -1
- package/dist/lib/installations/migrate.d.ts +0 -11
- package/dist/lib/installations/migrate.js +1 -1
- package/dist/lib/installations/shims.d.ts +1 -1
- package/dist/lib/installations/shims.js +2 -2
- package/dist/lib/installations/update-runtime.js +1 -1
- package/dist/lib/linear-cache.d.ts +2 -1
- package/dist/lib/linux-userns.d.ts +2 -3
- package/dist/lib/linux-userns.js +0 -4
- package/dist/lib/loop.d.ts +2 -1
- package/dist/lib/mailbox-gc.d.ts +2 -1
- package/dist/lib/mailbox-target.d.ts +2 -1
- package/dist/lib/mailbox.d.ts +0 -6
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/manifest.d.ts +0 -14
- package/dist/lib/manifest.js +2 -2
- package/dist/lib/mcp-registry.d.ts +2 -1
- package/dist/lib/mcp.js +17 -11
- package/dist/lib/memory.d.ts +2 -13
- package/dist/lib/memory.js +4 -4
- package/dist/lib/menubar/download-menubar.d.ts +0 -2
- package/dist/lib/menubar/download-menubar.js +1 -5
- package/dist/lib/menubar/install-menubar.d.ts +3 -14
- package/dist/lib/menubar/install-menubar.js +3 -3
- package/dist/lib/menubar/migrate-prefs.d.ts +53 -0
- package/dist/lib/menubar/migrate-prefs.js +168 -0
- package/dist/lib/menubar/resolve-version.d.ts +1 -9
- package/dist/lib/menubar/resolve-version.js +4 -4
- package/dist/lib/menubar/snapshot.d.ts +24 -2
- package/dist/lib/menubar/snapshot.js +26 -0
- package/dist/lib/model-tier-overrides.d.ts +3 -2
- package/dist/lib/monitors/config.d.ts +0 -2
- package/dist/lib/monitors/config.js +0 -4
- package/dist/lib/monitors/engine.d.ts +1 -1
- package/dist/lib/monitors/remote.d.ts +3 -2
- package/dist/lib/monitors/sources/webhook.d.ts +2 -15
- package/dist/lib/monitors/sources/webhook.js +1 -38
- package/dist/lib/monitors/state.d.ts +4 -7
- package/dist/lib/monitors/state.js +2 -2
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/notify.js +1 -1
- package/dist/lib/onepassword.d.ts +5 -14
- package/dist/lib/onepassword.js +0 -64
- package/dist/lib/open-url.d.ts +3 -2
- package/dist/lib/openclaw-keychain.d.ts +4 -17
- package/dist/lib/openclaw-keychain.js +3 -33
- package/dist/lib/operator.d.ts +2 -2
- package/dist/lib/operator.js +1 -1
- package/dist/lib/output/git-output.d.ts +4 -14
- package/dist/lib/output/git-output.js +1 -1
- package/dist/lib/owner-message.d.ts +3 -29
- package/dist/lib/owner-message.js +3 -3
- package/dist/lib/packages/output-home.d.ts +2 -4
- package/dist/lib/packages/output-home.js +2 -2
- package/dist/lib/perf/db.d.ts +0 -2
- package/dist/lib/perf/db.js +2 -7
- package/dist/lib/permissions-registry.d.ts +2 -3
- package/dist/lib/permissions-registry.js +0 -4
- package/dist/lib/permissions.d.ts +6 -16
- package/dist/lib/permissions.js +2 -15
- package/dist/lib/picker.d.ts +6 -5
- package/dist/lib/placement.d.ts +3 -6
- package/dist/lib/placement.js +0 -17
- package/dist/lib/platform/posixpath.d.ts +2 -1
- package/dist/lib/platform/winpath.d.ts +2 -1
- package/dist/lib/plugins/plugin-marketplace.d.ts +2 -2
- package/dist/lib/plugins/plugin-marketplace.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +2 -1
- package/dist/lib/probe.d.ts +4 -1
- package/dist/lib/probe.js +5 -2
- package/dist/lib/profiles-presets.d.ts +2 -1
- package/dist/lib/profiles.d.ts +3 -9
- package/dist/lib/profiles.js +1 -9
- package/dist/lib/project-doctor.d.ts +2 -1
- package/dist/lib/project-launch.d.ts +2 -2
- package/dist/lib/project-probe.d.ts +4 -3
- package/dist/lib/project-pull.d.ts +2 -1
- package/dist/lib/project-resources.d.ts +2 -2
- package/dist/lib/project-resources.js +1 -1
- package/dist/lib/project-root.d.ts +2 -6
- package/dist/lib/project-root.js +1 -1
- package/dist/lib/project-schedule.d.ts +2 -1
- package/dist/lib/project-status.d.ts +2 -16
- package/dist/lib/project-status.js +3 -3
- package/dist/lib/pwsh.d.ts +33 -0
- package/dist/lib/pwsh.js +56 -0
- package/dist/lib/reconcile-and-repair.d.ts +5 -4
- package/dist/lib/redact.d.ts +15 -1
- package/dist/lib/redact.js +105 -3
- package/dist/lib/refresh-coordinator.d.ts +2 -1
- package/dist/lib/refresh.d.ts +9 -4
- package/dist/lib/refresh.js +92 -72
- package/dist/lib/remote-agents-json.d.ts +3 -2
- package/dist/lib/reserved-stores.d.ts +0 -2
- package/dist/lib/reserved-stores.js +3 -5
- package/dist/lib/resource-content-diff.d.ts +0 -2
- package/dist/lib/resource-content-diff.js +1 -1
- package/dist/lib/resource-patterns.d.ts +2 -1
- package/dist/lib/resource-profiles.d.ts +2 -8
- package/dist/lib/resource-profiles.js +3 -27
- package/dist/lib/resources/workflows.d.ts +1 -1
- package/dist/lib/resources.d.ts +4 -9
- package/dist/lib/resources.js +1 -1
- package/dist/lib/routine-context.d.ts +2 -5
- package/dist/lib/routine-context.js +2 -2
- package/dist/lib/routine-notify-owner.d.ts +8 -7
- package/dist/lib/routine-notify-owner.js +5 -5
- package/dist/lib/routine-process-cleanup.d.ts +2 -1
- package/dist/lib/routine-readiness.d.ts +0 -2
- package/dist/lib/routine-readiness.js +0 -7
- package/dist/lib/routines-project.d.ts +3 -4
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +3 -25
- package/dist/lib/rules/compile.js +1 -1
- package/dist/lib/rules/compose.d.ts +3 -9
- package/dist/lib/rules/rules.d.ts +4 -15
- package/dist/lib/rules/rules.js +1 -64
- package/dist/lib/run-defaults.d.ts +1 -1
- package/dist/lib/run-notify.d.ts +2 -1
- package/dist/lib/run-trace-sync.d.ts +1 -1
- package/dist/lib/run-trace-sync.js +1 -1
- package/dist/lib/scheduler.d.ts +2 -1
- package/dist/lib/scheduling/routines.d.ts +9 -21
- package/dist/lib/scheduling/routines.js +3 -46
- package/dist/lib/secrets-cli.d.ts +11 -0
- package/dist/lib/secrets-cli.js +30 -0
- package/dist/lib/secrets-client.d.ts +0 -17
- package/dist/lib/secrets-client.js +7 -28
- package/dist/lib/secrets-policy.d.ts +12 -17
- package/dist/lib/secrets-policy.js +5 -5
- package/dist/lib/secrets-types.d.ts +3 -2
- package/dist/lib/secrets-types.js +2 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -1
- package/dist/lib/self-heal/registry.d.ts +3 -2
- package/dist/lib/self-heal/types.d.ts +1 -1
- package/dist/lib/self-heal/types.js +1 -1
- package/dist/lib/self-update.d.ts +5 -5
- package/dist/lib/self-update.js +4 -4
- package/dist/lib/session/actor-sidecar.d.ts +3 -2
- package/dist/lib/session/artifacts.d.ts +0 -2
- package/dist/lib/session/artifacts.js +1 -1
- package/dist/lib/session/bash-command.d.ts +2 -7
- package/dist/lib/session/bundle.d.ts +4 -6
- package/dist/lib/session/bundle.js +1 -5
- package/dist/lib/session/cloud.d.ts +0 -4
- package/dist/lib/session/cloud.js +2 -15
- package/dist/lib/session/detached.d.ts +9 -1
- package/dist/lib/session/detached.js +31 -2
- package/dist/lib/session/digest.d.ts +2 -2
- package/dist/lib/session/digest.js +1 -1
- package/dist/lib/session/fork.d.ts +3 -2
- package/dist/lib/session/highlights.d.ts +6 -5
- package/dist/lib/session/hook-sessions.d.ts +2 -1
- package/dist/lib/session/host-link.d.ts +2 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/inject.js +1 -1
- package/dist/lib/session/insights.d.ts +3 -15
- package/dist/lib/session/insights.js +2 -2
- package/dist/lib/session/local-tmux-attach.d.ts +2 -18
- package/dist/lib/session/local-tmux-attach.js +1 -1
- package/dist/lib/session/migrations.d.ts +0 -1
- package/dist/lib/session/migrations.js +1 -1
- package/dist/lib/session/mirror.d.ts +5 -8
- package/dist/lib/session/mirror.js +2 -2
- package/dist/lib/session/parse.d.ts +1 -32
- package/dist/lib/session/parse.js +4 -4
- package/dist/lib/session/presence.d.ts +2 -1
- package/dist/lib/session/prompt.d.ts +3 -2
- package/dist/lib/session/prompt.js +38 -1
- package/dist/lib/session/recovery.d.ts +3 -2
- package/dist/lib/session/remote/peer-stream.d.ts +26 -7
- package/dist/lib/session/remote/peer-stream.js +35 -8
- package/dist/lib/session/remote/remote-bundle.d.ts +2 -1
- package/dist/lib/session/remote/remote-list.d.ts +5 -5
- package/dist/lib/session/remote/remote.d.ts +4 -3
- package/dist/lib/session/remote/watch.d.ts +2 -7
- package/dist/lib/session/remote/watch.js +3 -3
- package/dist/lib/session/remote-active.d.ts +2 -1
- package/dist/lib/session/render.d.ts +2 -2
- package/dist/lib/session/render.js +1 -1
- package/dist/lib/session/resume-owner.d.ts +1 -1
- package/dist/lib/session/resume-owner.js +1 -1
- package/dist/lib/session/run-names.d.ts +2 -1
- package/dist/lib/session/session-cache.d.ts +7 -26
- package/dist/lib/session/session-cache.js +2 -8
- package/dist/lib/session/share-html.d.ts +1 -21
- package/dist/lib/session/share-html.js +1 -1
- package/dist/lib/session/shell-programs.d.ts +2 -1
- package/dist/lib/session/state.d.ts +41 -8
- package/dist/lib/session/state.js +112 -11
- package/dist/lib/session/stream-render.d.ts +2 -1
- package/dist/lib/session/sync/agents.d.ts +0 -4
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +8 -8
- package/dist/lib/session/sync/backend.js +3 -3
- package/dist/lib/session/sync/managed-config.d.ts +0 -8
- package/dist/lib/session/sync/managed-key.d.ts +0 -2
- package/dist/lib/session/sync/managed-key.js +1 -1
- package/dist/lib/session/sync/provision.d.ts +1 -1
- package/dist/lib/session/sync/provision.js +2 -2
- package/dist/lib/session/sync/r2.d.ts +4 -1
- package/dist/lib/session/sync/r2.js +4 -7
- package/dist/lib/session/sync/transcript-crypto.d.ts +2 -1
- package/dist/lib/session/tail.d.ts +2 -1
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/throughput.d.ts +2 -3
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/timeline-pass.d.ts +3 -42
- package/dist/lib/session/timeline-pass.js +4 -4
- package/dist/lib/session/timeline.d.ts +3 -13
- package/dist/lib/session/timeline.js +3 -3
- package/dist/lib/session/tool-calls.d.ts +2 -2
- package/dist/lib/session/tool-calls.js +1 -1
- package/dist/lib/session/tool-index.d.ts +0 -8
- package/dist/lib/session/tool-index.js +2 -2
- package/dist/lib/session/tool-store.d.ts +2 -1
- package/dist/lib/session/trajectory-compare.d.ts +2 -1
- package/dist/lib/session/trajectory-lineage.d.ts +2 -1
- package/dist/lib/session/trajectory-text.d.ts +3 -2
- package/dist/lib/session/trajectory.d.ts +2 -1
- package/dist/lib/session/viewing-in.d.ts +2 -1
- package/dist/lib/sessions-client.js +0 -3
- package/dist/lib/settings-manifest.d.ts +2 -1
- package/dist/lib/setup-tool-install.d.ts +3 -0
- package/dist/lib/setup-tool-install.js +26 -0
- package/dist/lib/setup-tool-status.d.ts +22 -0
- package/dist/lib/setup-tool-status.js +215 -0
- package/dist/lib/share-runtime.d.ts +11 -0
- package/dist/lib/share-runtime.js +63 -0
- package/dist/lib/shim-heal.d.ts +1 -5
- package/dist/lib/shim-heal.js +0 -6
- package/dist/lib/smart-launch.d.ts +5 -10
- package/dist/lib/smart-launch.js +4 -12
- package/dist/lib/snapshot.d.ts +3 -2
- package/dist/lib/ssh-exec.d.ts +49 -4
- package/dist/lib/ssh-exec.js +119 -0
- package/dist/lib/ssh-tunnel.d.ts +3 -2
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -2
- package/dist/lib/staleness/checkers/permissions.js +1 -1
- package/dist/lib/staleness/fingerprint.d.ts +0 -7
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/prune.d.ts +3 -2
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/sources.d.ts +0 -8
- package/dist/lib/staleness/writers/sources.js +1 -1
- package/dist/lib/startup/command-registry.d.ts +6 -4
- package/dist/lib/startup/command-registry.js +11 -8
- package/dist/lib/state.d.ts +1 -3
- package/dist/lib/state.js +3 -6
- package/dist/lib/storage/selection.d.ts +2 -2
- package/dist/lib/storage/selection.js +2 -2
- package/dist/lib/subagents-registry.d.ts +4 -3
- package/dist/lib/subagents.d.ts +2 -1
- package/dist/lib/subagents.js +3 -2
- package/dist/lib/summarizer/pass.d.ts +3 -6
- package/dist/lib/summarizer/pass.js +2 -2
- package/dist/lib/summarizer/summarize.d.ts +4 -3
- package/dist/lib/sync-passphrase.d.ts +3 -2
- package/dist/lib/sync-status.d.ts +3 -16
- package/dist/lib/sync-status.js +2 -2
- package/dist/lib/sync-umbrella.d.ts +9 -3
- package/dist/lib/sync-umbrella.js +18 -10
- package/dist/lib/system-run-sync.d.ts +2 -1
- package/dist/lib/teams/agents.d.ts +2 -4
- package/dist/lib/teams/agents.js +1 -1
- package/dist/lib/teams/forEach.d.ts +3 -2
- package/dist/lib/teams/pr-watch.d.ts +4 -11
- package/dist/lib/teams/pr-watch.js +4 -4
- package/dist/lib/teams/registry.d.ts +2 -3
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/teams/remoteWorktree.d.ts +0 -16
- package/dist/lib/teams/remoteWorktree.js +3 -3
- package/dist/lib/teams/scheduler.d.ts +6 -5
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/supervisor.d.ts +4 -3
- package/dist/lib/teams/worktree.d.ts +0 -9
- package/dist/lib/teams/worktree.js +0 -32
- package/dist/lib/term-client.d.ts +44 -0
- package/dist/lib/term-client.js +117 -0
- package/dist/lib/terminal/inject.d.ts +3 -16
- package/dist/lib/terminal/inject.js +1 -29
- package/dist/lib/terminal/resolve.d.ts +3 -9
- package/dist/lib/terminal/resolve.js +3 -7
- package/dist/lib/tmux/binary.d.ts +2 -1
- package/dist/lib/tmux/orphan-reap.d.ts +6 -7
- package/dist/lib/tmux/orphan-reap.js +1 -1
- package/dist/lib/tmux/session.d.ts +4 -3
- package/dist/lib/traces/backend.d.ts +1 -2
- package/dist/lib/traces/backend.js +1 -2
- package/dist/lib/traces/classify.d.ts +3 -2
- package/dist/lib/traces/config.d.ts +0 -8
- package/dist/lib/traces/insights.d.ts +2 -1
- package/dist/lib/traces/phenotype.d.ts +3 -3
- package/dist/lib/traces/provision.d.ts +2 -4
- package/dist/lib/traces/provision.js +3 -3
- package/dist/lib/traces/schema2-build.d.ts +1 -1
- package/dist/lib/traces/schema2-danger.d.ts +2 -1
- package/dist/lib/traces/schema2.d.ts +5 -4
- package/dist/lib/traces/segments.d.ts +4 -20
- package/dist/lib/traces/segments.js +3 -3
- package/dist/lib/traces/sync.d.ts +2 -3
- package/dist/lib/traces/sync.js +1 -1
- package/dist/lib/triggers/handlers.d.ts +4 -13
- package/dist/lib/triggers/handlers.js +1 -1
- package/dist/lib/triggers/webhook.d.ts +5 -27
- package/dist/lib/triggers/webhook.js +4 -4
- package/dist/lib/types.d.ts +11 -9
- package/dist/lib/usage-refresh.d.ts +4 -10
- package/dist/lib/usage-refresh.js +3 -8
- package/dist/lib/verbs.d.ts +2 -1
- package/dist/lib/version-duplicates.d.ts +2 -3
- package/dist/lib/version-duplicates.js +3 -33
- package/dist/lib/version.d.ts +2 -1
- package/dist/lib/warn-unpushed.d.ts +2 -1
- package/dist/lib/watchdog/history.d.ts +3 -2
- package/dist/lib/watchdog/log.d.ts +0 -6
- package/dist/lib/watchdog/log.js +1 -1
- package/dist/lib/watchdog/rotate.d.ts +2 -26
- package/dist/lib/watchdog/rotate.js +4 -12
- package/dist/lib/watchdog/runner.d.ts +0 -7
- package/dist/lib/watchdog/runner.js +4 -4
- package/dist/lib/watchdog/service.d.ts +2 -2
- package/dist/lib/watchdog/service.js +1 -1
- package/dist/lib/watchdog/watchdog-agent.d.ts +2 -1
- package/dist/lib/watchdog/watchdog.d.ts +2 -1
- package/dist/lib/watchdog/watchdogTail.d.ts +2 -1
- package/dist/lib/workflows-registry.d.ts +3 -2
- package/dist/lib/workflows.d.ts +4 -7
- package/dist/lib/workflows.js +1 -1
- package/dist/lib/worktree/held.d.ts +4 -28
- package/dist/lib/worktree/held.js +3 -3
- package/package.json +3 -5
- package/scripts/postinstall.js +5 -4
- package/dist/commands/artifacts-setup.d.ts +0 -53
- package/dist/commands/artifacts-setup.js +0 -161
- package/dist/commands/artifacts.d.ts +0 -18
- package/dist/commands/artifacts.js +0 -58
- package/dist/commands/attach.d.ts +0 -12
- package/dist/commands/attach.js +0 -86
- package/dist/commands/auth-mint.d.ts +0 -12
- package/dist/commands/auth-mint.js +0 -108
- package/dist/commands/pty.d.ts +0 -20
- package/dist/commands/pty.js +0 -404
- package/dist/commands/reconnect.d.ts +0 -46
- package/dist/commands/reconnect.js +0 -115
- package/dist/commands/share.d.ts +0 -293
- package/dist/commands/share.js +0 -1424
- package/dist/lib/config-machine-keys.d.ts +0 -14
- package/dist/lib/config-machine-keys.js +0 -21
- package/dist/lib/pty-client.d.ts +0 -49
- package/dist/lib/pty-client.js +0 -315
- package/dist/lib/pty-server.d.ts +0 -59
- package/dist/lib/pty-server.js +0 -653
- package/dist/lib/share/analytics.d.ts +0 -13
- package/dist/lib/share/analytics.js +0 -45
- package/dist/lib/share/backend.d.ts +0 -120
- package/dist/lib/share/backend.js +0 -176
- package/dist/lib/share/capture.d.ts +0 -31
- package/dist/lib/share/capture.js +0 -174
- package/dist/lib/share/config.d.ts +0 -72
- package/dist/lib/share/config.js +0 -211
- package/dist/lib/share/delete.d.ts +0 -122
- package/dist/lib/share/delete.js +0 -173
- package/dist/lib/share/html.d.ts +0 -22
- package/dist/lib/share/html.js +0 -88
- package/dist/lib/share/http-error.d.ts +0 -52
- package/dist/lib/share/http-error.js +0 -65
- package/dist/lib/share/og.d.ts +0 -25
- package/dist/lib/share/og.js +0 -84
- package/dist/lib/share/provision.d.ts +0 -127
- package/dist/lib/share/provision.js +0 -285
- package/dist/lib/share/publish.d.ts +0 -388
- package/dist/lib/share/publish.js +0 -818
- package/dist/lib/share/worker-template.d.ts +0 -27
- package/dist/lib/share/worker-template.js +0 -2424
- package/dist/lib/storage/index.d.ts +0 -14
- package/dist/lib/storage/index.js +0 -14
- package/dist/lib/storage/visibility.d.ts +0 -82
- package/dist/lib/storage/visibility.js +0 -99
package/dist/lib/git.js
CHANGED
|
@@ -269,7 +269,7 @@ export function parseSource(source) {
|
|
|
269
269
|
throw new Error(`Invalid source: ${source}. Supported formats: gh:owner/repo, owner/repo, github.com/owner/repo, https://github.com/owner/repo, or local path`);
|
|
270
270
|
}
|
|
271
271
|
/** Clone a remote repo or pull updates if it already exists locally. */
|
|
272
|
-
|
|
272
|
+
async function cloneOrPull(source, targetDir) {
|
|
273
273
|
const git = simpleGit();
|
|
274
274
|
if (source.type === 'local') {
|
|
275
275
|
return { isNew: false, commit: 'local' };
|
|
@@ -313,24 +313,6 @@ export async function cloneRepo(source) {
|
|
|
313
313
|
isNew: result.isNew,
|
|
314
314
|
};
|
|
315
315
|
}
|
|
316
|
-
/** Clone a package from a source string into the packages directory. */
|
|
317
|
-
export async function clonePackage(source) {
|
|
318
|
-
const parsed = parseSource(source);
|
|
319
|
-
if (parsed.type === 'local') {
|
|
320
|
-
return {
|
|
321
|
-
localPath: parsed.url,
|
|
322
|
-
commit: 'local',
|
|
323
|
-
isNew: false,
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
const localPath = getPackageLocalPath(source);
|
|
327
|
-
const result = await cloneOrPull(parsed, localPath);
|
|
328
|
-
return {
|
|
329
|
-
localPath,
|
|
330
|
-
commit: result.commit,
|
|
331
|
-
isNew: result.isNew,
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
316
|
/** Get the short commit hash (8 chars) of the latest commit in a repo. */
|
|
335
317
|
export async function getRepoCommit(repoPath) {
|
|
336
318
|
try {
|
|
@@ -407,64 +389,6 @@ export function resolveSnapshotSha(repoRoot) {
|
|
|
407
389
|
export function _resetSnapshotShaCacheForTest() {
|
|
408
390
|
_snapshotShaCache.clear();
|
|
409
391
|
}
|
|
410
|
-
/**
|
|
411
|
-
* Get the current GitHub username using gh CLI.
|
|
412
|
-
* Returns null if gh is not installed or user is not authenticated.
|
|
413
|
-
*/
|
|
414
|
-
export async function getGitHubUsername() {
|
|
415
|
-
try {
|
|
416
|
-
const { exec } = await import('child_process');
|
|
417
|
-
const { promisify } = await import('util');
|
|
418
|
-
const execAsync = promisify(exec);
|
|
419
|
-
const { stdout } = await execAsync('gh api user --jq ".login"');
|
|
420
|
-
return stdout.trim() || null;
|
|
421
|
-
}
|
|
422
|
-
catch {
|
|
423
|
-
/* gh CLI not installed or not authenticated */
|
|
424
|
-
return null;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
const GITHUB_USER_ENV = 'AGENTS_SHARE_GITHUB_USER';
|
|
428
|
-
/** Best-effort sync read of `github.user` from git config. */
|
|
429
|
-
function readGitConfigUser() {
|
|
430
|
-
try {
|
|
431
|
-
return execFileSync('git', ['config', '--global', 'github.user'], { stdio: ['ignore', 'pipe', 'ignore'] })
|
|
432
|
-
.toString()
|
|
433
|
-
.trim() || null;
|
|
434
|
-
}
|
|
435
|
-
catch {
|
|
436
|
-
return null;
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
/**
|
|
440
|
-
* Resolve the GitHub username synchronously for `agents artifacts share`. Order:
|
|
441
|
-
* 1. `AGENTS_SHARE_GITHUB_USER` env override
|
|
442
|
-
* 2. `git config --global github.user`
|
|
443
|
-
* Falls back to null so callers can decide whether to require auth or proceed
|
|
444
|
-
* without a namespace.
|
|
445
|
-
*/
|
|
446
|
-
export function resolveGitHubUsernameSync() {
|
|
447
|
-
const env = process.env[GITHUB_USER_ENV]?.trim();
|
|
448
|
-
if (env)
|
|
449
|
-
return env;
|
|
450
|
-
return readGitConfigUser();
|
|
451
|
-
}
|
|
452
|
-
/**
|
|
453
|
-
* Resolve the GitHub username asynchronously. Order:
|
|
454
|
-
* 1. `AGENTS_SHARE_GITHUB_USER` env override
|
|
455
|
-
* 2. `gh api user --jq ".login"`
|
|
456
|
-
* 3. `git config --global github.user`
|
|
457
|
-
* Returns null if none succeed.
|
|
458
|
-
*/
|
|
459
|
-
export async function resolveGitHubUsername() {
|
|
460
|
-
const env = process.env[GITHUB_USER_ENV]?.trim();
|
|
461
|
-
if (env)
|
|
462
|
-
return env;
|
|
463
|
-
const gh = await getGitHubUsername();
|
|
464
|
-
if (gh)
|
|
465
|
-
return gh;
|
|
466
|
-
return readGitConfigUser();
|
|
467
|
-
}
|
|
468
392
|
/**
|
|
469
393
|
* Get the remote URL for origin in a git repo.
|
|
470
394
|
*/
|
|
@@ -480,16 +404,6 @@ export async function getRemoteUrl(repoPath) {
|
|
|
480
404
|
return null;
|
|
481
405
|
}
|
|
482
406
|
}
|
|
483
|
-
/** The repo's checked-out branch, or 'main' on a detached HEAD / read failure. */
|
|
484
|
-
export async function getCurrentBranch(repoPath) {
|
|
485
|
-
try {
|
|
486
|
-
const status = await simpleGit(repoPath).status();
|
|
487
|
-
return status.current || 'main';
|
|
488
|
-
}
|
|
489
|
-
catch {
|
|
490
|
-
return 'main';
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
407
|
/**
|
|
494
408
|
* Canonical `host/owner/repo` form of a git remote, transport-agnostic, so the
|
|
495
409
|
* same repo cloned over SSH vs HTTPS compares equal. Strips protocol, any
|
|
@@ -570,36 +484,6 @@ export function sameGitRemote(a, b) {
|
|
|
570
484
|
return false;
|
|
571
485
|
return canonicalGitRemote(a) === canonicalGitRemote(b);
|
|
572
486
|
}
|
|
573
|
-
/**
|
|
574
|
-
* Set the remote URL for origin in a git repo.
|
|
575
|
-
*/
|
|
576
|
-
export async function setRemoteUrl(repoPath, url) {
|
|
577
|
-
const git = simpleGit(repoPath);
|
|
578
|
-
const remotes = await git.getRemotes(true);
|
|
579
|
-
const hasOrigin = remotes.some(r => r.name === 'origin');
|
|
580
|
-
if (hasOrigin) {
|
|
581
|
-
await git.remote(['set-url', 'origin', url]);
|
|
582
|
-
}
|
|
583
|
-
else {
|
|
584
|
-
await git.remote(['add', 'origin', url]);
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
/**
|
|
588
|
-
* Check if a GitHub repo exists.
|
|
589
|
-
*/
|
|
590
|
-
export async function checkGitHubRepoExists(owner, repo) {
|
|
591
|
-
try {
|
|
592
|
-
const { execFile } = await import('child_process');
|
|
593
|
-
const { promisify } = await import('util');
|
|
594
|
-
const execFileAsync = promisify(execFile);
|
|
595
|
-
await execFileAsync('gh', ['repo', 'view', `${owner}/${repo}`, '--json', 'name']);
|
|
596
|
-
return true;
|
|
597
|
-
}
|
|
598
|
-
catch {
|
|
599
|
-
/* repo not found or gh CLI unavailable */
|
|
600
|
-
return false;
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
487
|
/**
|
|
604
488
|
* Commit (if dirty) and push a repo.
|
|
605
489
|
*
|
|
@@ -1136,20 +1020,6 @@ export async function isSystemRepoOrigin(dir) {
|
|
|
1136
1020
|
return false;
|
|
1137
1021
|
}
|
|
1138
1022
|
}
|
|
1139
|
-
/**
|
|
1140
|
-
* Check if repo has uncommitted changes (including untracked files).
|
|
1141
|
-
*/
|
|
1142
|
-
export async function hasLocalChanges(dir) {
|
|
1143
|
-
try {
|
|
1144
|
-
const git = simpleGit(dir);
|
|
1145
|
-
const status = await git.status();
|
|
1146
|
-
return !status.isClean();
|
|
1147
|
-
}
|
|
1148
|
-
catch {
|
|
1149
|
-
/* not a git repo */
|
|
1150
|
-
return false;
|
|
1151
|
-
}
|
|
1152
|
-
}
|
|
1153
1023
|
/**
|
|
1154
1024
|
* Render an absolute path in ~-relative form with forward slashes, matching the
|
|
1155
1025
|
* way the rest of the CLI prints home-anchored paths (e.g. `~/.agents/.system`).
|
|
@@ -1587,79 +1457,12 @@ export async function getTrackedFiles(dir, subdir) {
|
|
|
1587
1457
|
return [];
|
|
1588
1458
|
}
|
|
1589
1459
|
}
|
|
1590
|
-
/**
|
|
1591
|
-
* Check if upstream remote is configured.
|
|
1592
|
-
*/
|
|
1593
|
-
export async function hasUpstreamRemote(dir) {
|
|
1594
|
-
try {
|
|
1595
|
-
const git = simpleGit(dir);
|
|
1596
|
-
const remotes = await git.getRemotes(true);
|
|
1597
|
-
return remotes.some(r => r.name === 'upstream');
|
|
1598
|
-
}
|
|
1599
|
-
catch {
|
|
1600
|
-
/* not a git repo */
|
|
1601
|
-
return false;
|
|
1602
|
-
}
|
|
1603
|
-
}
|
|
1604
|
-
/**
|
|
1605
|
-
* Get the upstream remote fetch URL, or null if none configured.
|
|
1606
|
-
*/
|
|
1607
|
-
export async function getUpstreamUrl(dir) {
|
|
1608
|
-
try {
|
|
1609
|
-
const git = simpleGit(dir);
|
|
1610
|
-
const remotes = await git.getRemotes(true);
|
|
1611
|
-
const upstream = remotes.find(r => r.name === 'upstream');
|
|
1612
|
-
return upstream?.refs?.fetch ?? null;
|
|
1613
|
-
}
|
|
1614
|
-
catch {
|
|
1615
|
-
return null;
|
|
1616
|
-
}
|
|
1617
|
-
}
|
|
1618
|
-
/**
|
|
1619
|
-
* Add or update the upstream remote.
|
|
1620
|
-
*/
|
|
1621
|
-
export async function setUpstreamRemote(dir, url) {
|
|
1622
|
-
const git = simpleGit(dir);
|
|
1623
|
-
const remotes = await git.getRemotes(true);
|
|
1624
|
-
const hasUpstream = remotes.some(r => r.name === 'upstream');
|
|
1625
|
-
if (hasUpstream) {
|
|
1626
|
-
await git.remote(['set-url', 'upstream', url]);
|
|
1627
|
-
}
|
|
1628
|
-
else {
|
|
1629
|
-
await git.remote(['add', 'upstream', url]);
|
|
1630
|
-
}
|
|
1631
|
-
}
|
|
1632
|
-
/**
|
|
1633
|
-
* Pull from upstream remote (merge updates from system repo).
|
|
1634
|
-
*/
|
|
1635
|
-
export async function pullFromUpstream(dir) {
|
|
1636
|
-
try {
|
|
1637
|
-
const git = simpleGit(dir);
|
|
1638
|
-
// Check if upstream exists
|
|
1639
|
-
const remotes = await git.getRemotes(true);
|
|
1640
|
-
const upstream = remotes.find(r => r.name === 'upstream');
|
|
1641
|
-
if (!upstream) {
|
|
1642
|
-
return { success: false, commit: '', error: 'No upstream remote configured. Run `agents fork` first.' };
|
|
1643
|
-
}
|
|
1644
|
-
// Fetch and merge from upstream
|
|
1645
|
-
await git.fetch('upstream');
|
|
1646
|
-
await git.merge(['upstream/main']);
|
|
1647
|
-
const log = await git.log({ maxCount: 1 });
|
|
1648
|
-
return {
|
|
1649
|
-
success: true,
|
|
1650
|
-
commit: log.latest?.hash.slice(0, 8) || 'unknown',
|
|
1651
|
-
};
|
|
1652
|
-
}
|
|
1653
|
-
catch (err) {
|
|
1654
|
-
return { success: false, commit: '', error: err.message };
|
|
1655
|
-
}
|
|
1656
|
-
}
|
|
1657
1460
|
/**
|
|
1658
1461
|
* Try to auto-pull a git repo if it's clean and has a remote.
|
|
1659
1462
|
* Uses --ff-only for safety (fails if diverged instead of creating merge commits).
|
|
1660
1463
|
* Returns silently on success, returns error message on failure.
|
|
1661
1464
|
*/
|
|
1662
|
-
|
|
1465
|
+
async function tryAutoPull(dir) {
|
|
1663
1466
|
// Must be a git repo
|
|
1664
1467
|
if (!isGitRepo(dir)) {
|
|
1665
1468
|
return { pulled: false };
|
|
@@ -49,10 +49,6 @@ export declare function renderRollup(input: RollupItem[], json: boolean): string
|
|
|
49
49
|
* forever and never posts a run, exactly what `gh pr checks` also ignores.
|
|
50
50
|
*/
|
|
51
51
|
export declare function isSettled(rollup: RollupItem[], pendingSuites: number): boolean;
|
|
52
|
-
/** Eager REST watch: poll to a terminal state, re-anchored to the live head SHA. */
|
|
53
|
-
export declare function watchChecks(target: Target, json: boolean, realGh: string): Promise<number>;
|
|
54
|
-
/** Lazy one-shot: real gh first; translate to REST only on the exact rate-limit signal. */
|
|
55
|
-
export declare function checksOnce(target: Target | null, json: boolean, realGh: string, ghArgs: string[]): Promise<number>;
|
|
56
52
|
/** Entry point for the `__gh` early branch in index.ts. */
|
|
57
53
|
export declare function runGhOverload(argv: string[], cwd?: string): Promise<number>;
|
|
58
54
|
export {};
|
|
@@ -168,7 +168,7 @@ export function isSettled(rollup, pendingSuites) {
|
|
|
168
168
|
}
|
|
169
169
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
170
170
|
/** Eager REST watch: poll to a terminal state, re-anchored to the live head SHA. */
|
|
171
|
-
|
|
171
|
+
async function watchChecks(target, json, realGh) {
|
|
172
172
|
const gh = restExec(realGh);
|
|
173
173
|
const deadline = Date.now() + 30 * 60_000; // 30-min guard against a hung matrix
|
|
174
174
|
let last = '';
|
|
@@ -201,7 +201,7 @@ export async function watchChecks(target, json, realGh) {
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
/** Lazy one-shot: real gh first; translate to REST only on the exact rate-limit signal. */
|
|
204
|
-
|
|
204
|
+
async function checksOnce(target, json, realGh, ghArgs) {
|
|
205
205
|
// Try real gh, capturing output so we can detect the rate-limit signal.
|
|
206
206
|
try {
|
|
207
207
|
const { stdout } = await execFileAsync(realGh, ghArgs, { env: ghChildEnv(), maxBuffer: 16 * 1024 * 1024 });
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agents projects prs <PROJECT>` — every OPEN pull request across a project's
|
|
3
|
+
* attached repositories, as one machine-readable envelope for AGI Menu.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists: `agents projects status`'s `openPrs` only carries the PRs the
|
|
6
|
+
* fleet's own SESSIONS opened (the session rollup), so a project's board of open
|
|
7
|
+
* PRs — drafts, other people's PRs, anything not tied to a live session — is
|
|
8
|
+
* invisible to it. This reads the truth straight from GitHub.
|
|
9
|
+
*
|
|
10
|
+
* Design constraints (see docs conventions + the contract in
|
|
11
|
+
* `.agents/scratch/contracts-status.json`):
|
|
12
|
+
* - Repos come ONLY from the ProjectDef's own attached slugs
|
|
13
|
+
* ({@link projectRepoSlugs}); `--repo` is refused unless it is one of them.
|
|
14
|
+
* - The list is REST + paginated (`gh api repos/{repo}/pulls?state=open
|
|
15
|
+
* --paginate`), includes drafts, and applies NO author filter — it is the
|
|
16
|
+
* whole open board, not this user's mergeable set. REST is the budget the
|
|
17
|
+
* fleet's GraphQL poll loops do not drain (PHNX-3501).
|
|
18
|
+
* - `checks` / `reviewDecision` are null in the list; `--number N` enriches
|
|
19
|
+
* exactly that one PR against its live head SHA (checks via REST
|
|
20
|
+
* {@link rollupForSha}, reviewDecision via a single lazy `gh pr view`).
|
|
21
|
+
* - A per-repo fetch failure is reported as `repositories[].error` and flips
|
|
22
|
+
* `partial` — it is NEVER relabeled as "zero open PRs".
|
|
23
|
+
*/
|
|
24
|
+
import { type GhExec } from './pr-mergeable.js';
|
|
25
|
+
import { type RollupItem } from './rest.js';
|
|
26
|
+
import type { ProjectDef } from '../projects.js';
|
|
27
|
+
/** The author of a PR, as the menu renders it (login + avatar). */
|
|
28
|
+
export interface ProjectPrAuthor {
|
|
29
|
+
login: string;
|
|
30
|
+
avatarUrl: string;
|
|
31
|
+
}
|
|
32
|
+
/** One open PR row. `checks`/`reviewDecision` are null unless the PR was enriched. */
|
|
33
|
+
export interface ProjectPr {
|
|
34
|
+
number: number;
|
|
35
|
+
title: string;
|
|
36
|
+
url: string;
|
|
37
|
+
isDraft: boolean;
|
|
38
|
+
/** Upper-cased GitHub state — always `OPEN` here (only open PRs are listed). */
|
|
39
|
+
state: string;
|
|
40
|
+
updatedAt: string;
|
|
41
|
+
author: ProjectPrAuthor;
|
|
42
|
+
headRefName: string;
|
|
43
|
+
baseRefName: string;
|
|
44
|
+
headSha: string;
|
|
45
|
+
body: string;
|
|
46
|
+
/** Populated only for the `--number` PR: the head-SHA status-check rollup. */
|
|
47
|
+
checks: RollupItem[] | null;
|
|
48
|
+
/** Populated only for the `--number` PR: GitHub's computed review decision. */
|
|
49
|
+
reviewDecision: string | null;
|
|
50
|
+
}
|
|
51
|
+
/** One repository's open PRs, or the error that stopped its fetch. */
|
|
52
|
+
export interface ProjectRepoPrs {
|
|
53
|
+
slug: string;
|
|
54
|
+
pullRequests: ProjectPr[];
|
|
55
|
+
/** Non-null when the fetch failed — the list is then NOT authoritative. */
|
|
56
|
+
error: string | null;
|
|
57
|
+
}
|
|
58
|
+
/** The full `projects prs --json` envelope. */
|
|
59
|
+
export interface ProjectPrsEnvelope {
|
|
60
|
+
project: {
|
|
61
|
+
name: string;
|
|
62
|
+
linearProjectId: string | null;
|
|
63
|
+
};
|
|
64
|
+
repositories: ProjectRepoPrs[];
|
|
65
|
+
/** True when at least one repository fetch failed (its list is incomplete). */
|
|
66
|
+
partial: boolean;
|
|
67
|
+
}
|
|
68
|
+
/** Options for one `projects prs` run. `number` requires `repo`. */
|
|
69
|
+
export interface ProjectPrsOptions {
|
|
70
|
+
/** Restrict to one attached repo (canonicalized, membership-checked). */
|
|
71
|
+
repo?: string;
|
|
72
|
+
/** Lazy detail: enrich exactly this PR's checks + reviewDecision. */
|
|
73
|
+
number?: number;
|
|
74
|
+
}
|
|
75
|
+
/** Build a {@link ProjectPr} from the flattened jq row. checks/reviewDecision start null. */
|
|
76
|
+
export declare function rowToProjectPr(row: Record<string, unknown>): ProjectPr;
|
|
77
|
+
/**
|
|
78
|
+
* Every OPEN PR for one repo, over REST, fully paginated, drafts included, no
|
|
79
|
+
* author filter. `--paginate` follows Link headers; `--jq` streams one flattened
|
|
80
|
+
* object per line so a multi-page result stays parseable.
|
|
81
|
+
*/
|
|
82
|
+
export declare function listOpenPrs(repo: string, gh?: GhExec): Promise<ProjectPr[]>;
|
|
83
|
+
/** One PR by number, over REST (`GET repos/{repo}/pulls/{n}`). Throws if it is gone. */
|
|
84
|
+
export declare function fetchOnePr(repo: string, number: number, gh?: GhExec): Promise<ProjectPr>;
|
|
85
|
+
/**
|
|
86
|
+
* GitHub's computed review decision AND the PR's current head oid, from ONE lazy
|
|
87
|
+
* `gh pr view` (GraphQL). reviewDecision is deliberately NOT REST-derived: it is
|
|
88
|
+
* a branch-protection / CODEOWNERS decision REST cannot compute, and
|
|
89
|
+
* approximating it could mislead a merge decision (PHNX-3501 note). `headRefOid`
|
|
90
|
+
* rides the same call so the checks and the review verdict can be anchored to the
|
|
91
|
+
* SAME head — a PR that advanced between the REST read and this call would
|
|
92
|
+
* otherwise pair a stale check rollup with a current review. One call per
|
|
93
|
+
* `--number`, never a poll loop, so it does not drain the shared GraphQL budget.
|
|
94
|
+
*/
|
|
95
|
+
export declare function fetchReviewAndHead(repo: string, number: number, gh?: GhExec): Promise<{
|
|
96
|
+
reviewDecision: string | null;
|
|
97
|
+
headRefOid: string | null;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Enrich one PR with its checks + reviewDecision, both anchored to the SAME head.
|
|
101
|
+
* `gh pr view` gives the authoritative current head oid; the check rollup is run
|
|
102
|
+
* against THAT (not the possibly-staler REST head SHA), and `headSha` is updated
|
|
103
|
+
* to match, so checks and reviewDecision can never describe two different heads.
|
|
104
|
+
*/
|
|
105
|
+
export declare function enrichPr(repo: string, pr: ProjectPr, gh?: GhExec): Promise<ProjectPr>;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve which repositories a run targets, restricted to the project's own
|
|
108
|
+
* attached repos. Slugs are canonicalized (a renamed repo lists nothing under
|
|
109
|
+
* its old name — `phnx-labs/agents-cli` → `phnx-labs/agi-cli`). A `--repo` that
|
|
110
|
+
* is not one of the project's attached repos (raw or canonical) is refused.
|
|
111
|
+
*/
|
|
112
|
+
export declare function resolveTargetSlugs(def: ProjectDef, repo: string | undefined, gh: GhExec): Promise<string[]>;
|
|
113
|
+
/**
|
|
114
|
+
* Build the full envelope. `number` (which the command requires alongside
|
|
115
|
+
* `repo`) fetches and enriches exactly that one PR; otherwise every target
|
|
116
|
+
* repo's open PRs are listed with checks/reviewDecision left null.
|
|
117
|
+
*/
|
|
118
|
+
export declare function buildProjectPrs(def: ProjectDef, opts?: ProjectPrsOptions, gh?: GhExec): Promise<ProjectPrsEnvelope>;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agents projects prs <PROJECT>` — every OPEN pull request across a project's
|
|
3
|
+
* attached repositories, as one machine-readable envelope for AGI Menu.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists: `agents projects status`'s `openPrs` only carries the PRs the
|
|
6
|
+
* fleet's own SESSIONS opened (the session rollup), so a project's board of open
|
|
7
|
+
* PRs — drafts, other people's PRs, anything not tied to a live session — is
|
|
8
|
+
* invisible to it. This reads the truth straight from GitHub.
|
|
9
|
+
*
|
|
10
|
+
* Design constraints (see docs conventions + the contract in
|
|
11
|
+
* `.agents/scratch/contracts-status.json`):
|
|
12
|
+
* - Repos come ONLY from the ProjectDef's own attached slugs
|
|
13
|
+
* ({@link projectRepoSlugs}); `--repo` is refused unless it is one of them.
|
|
14
|
+
* - The list is REST + paginated (`gh api repos/{repo}/pulls?state=open
|
|
15
|
+
* --paginate`), includes drafts, and applies NO author filter — it is the
|
|
16
|
+
* whole open board, not this user's mergeable set. REST is the budget the
|
|
17
|
+
* fleet's GraphQL poll loops do not drain (PHNX-3501).
|
|
18
|
+
* - `checks` / `reviewDecision` are null in the list; `--number N` enriches
|
|
19
|
+
* exactly that one PR against its live head SHA (checks via REST
|
|
20
|
+
* {@link rollupForSha}, reviewDecision via a single lazy `gh pr view`).
|
|
21
|
+
* - A per-repo fetch failure is reported as `repositories[].error` and flips
|
|
22
|
+
* `partial` — it is NEVER relabeled as "zero open PRs".
|
|
23
|
+
*/
|
|
24
|
+
import { ghExec, canonicalizeRepo, projectRepoSlugs } from './pr-mergeable.js';
|
|
25
|
+
import { rollupForSha } from './rest.js';
|
|
26
|
+
/** The jq projection that flattens a REST PR object into {@link ProjectPr}'s scalars. */
|
|
27
|
+
const PR_JQ = '{number, title, url: .html_url, isDraft: (.draft // false), ' +
|
|
28
|
+
'state: (.state // "" | ascii_upcase), updatedAt: (.updated_at // ""), ' +
|
|
29
|
+
'login: (.user.login // ""), avatarUrl: (.user.avatar_url // ""), ' +
|
|
30
|
+
'headRefName: (.head.ref // ""), baseRefName: (.base.ref // ""), ' +
|
|
31
|
+
'headSha: (.head.sha // ""), body: (.body // "")}';
|
|
32
|
+
/** Parse newline-delimited JSON (gh `--jq` streams one object per line/page). */
|
|
33
|
+
function parseNdjson(out) {
|
|
34
|
+
const rows = [];
|
|
35
|
+
for (const line of out.split('\n')) {
|
|
36
|
+
const t = line.trim();
|
|
37
|
+
if (!t)
|
|
38
|
+
continue;
|
|
39
|
+
rows.push(JSON.parse(t));
|
|
40
|
+
}
|
|
41
|
+
return rows;
|
|
42
|
+
}
|
|
43
|
+
/** Build a {@link ProjectPr} from the flattened jq row. checks/reviewDecision start null. */
|
|
44
|
+
export function rowToProjectPr(row) {
|
|
45
|
+
return {
|
|
46
|
+
number: Number(row.number),
|
|
47
|
+
title: String(row.title ?? ''),
|
|
48
|
+
url: String(row.url ?? ''),
|
|
49
|
+
isDraft: Boolean(row.isDraft),
|
|
50
|
+
state: String(row.state ?? ''),
|
|
51
|
+
updatedAt: String(row.updatedAt ?? ''),
|
|
52
|
+
author: { login: String(row.login ?? ''), avatarUrl: String(row.avatarUrl ?? '') },
|
|
53
|
+
headRefName: String(row.headRefName ?? ''),
|
|
54
|
+
baseRefName: String(row.baseRefName ?? ''),
|
|
55
|
+
headSha: String(row.headSha ?? ''),
|
|
56
|
+
body: String(row.body ?? ''),
|
|
57
|
+
checks: null,
|
|
58
|
+
reviewDecision: null,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Every OPEN PR for one repo, over REST, fully paginated, drafts included, no
|
|
63
|
+
* author filter. `--paginate` follows Link headers; `--jq` streams one flattened
|
|
64
|
+
* object per line so a multi-page result stays parseable.
|
|
65
|
+
*/
|
|
66
|
+
export async function listOpenPrs(repo, gh = ghExec) {
|
|
67
|
+
const out = await gh([
|
|
68
|
+
'api',
|
|
69
|
+
`repos/${repo}/pulls?state=open&per_page=100`,
|
|
70
|
+
'--paginate',
|
|
71
|
+
'--jq',
|
|
72
|
+
`.[] | ${PR_JQ}`,
|
|
73
|
+
]);
|
|
74
|
+
return parseNdjson(out).map(rowToProjectPr);
|
|
75
|
+
}
|
|
76
|
+
/** One PR by number, over REST (`GET repos/{repo}/pulls/{n}`). Throws if it is gone. */
|
|
77
|
+
export async function fetchOnePr(repo, number, gh = ghExec) {
|
|
78
|
+
const out = await gh(['api', `repos/${repo}/pulls/${number}`, '--jq', PR_JQ]);
|
|
79
|
+
const rows = parseNdjson(out);
|
|
80
|
+
if (rows.length === 0)
|
|
81
|
+
throw new Error(`no PR ${repo}#${number}`);
|
|
82
|
+
return rowToProjectPr(rows[0]);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* GitHub's computed review decision AND the PR's current head oid, from ONE lazy
|
|
86
|
+
* `gh pr view` (GraphQL). reviewDecision is deliberately NOT REST-derived: it is
|
|
87
|
+
* a branch-protection / CODEOWNERS decision REST cannot compute, and
|
|
88
|
+
* approximating it could mislead a merge decision (PHNX-3501 note). `headRefOid`
|
|
89
|
+
* rides the same call so the checks and the review verdict can be anchored to the
|
|
90
|
+
* SAME head — a PR that advanced between the REST read and this call would
|
|
91
|
+
* otherwise pair a stale check rollup with a current review. One call per
|
|
92
|
+
* `--number`, never a poll loop, so it does not drain the shared GraphQL budget.
|
|
93
|
+
*/
|
|
94
|
+
export async function fetchReviewAndHead(repo, number, gh = ghExec) {
|
|
95
|
+
const out = (await gh([
|
|
96
|
+
'pr', 'view', String(number), '--repo', repo, '--json', 'reviewDecision,headRefOid',
|
|
97
|
+
])).trim();
|
|
98
|
+
const parsed = out ? JSON.parse(out) : {};
|
|
99
|
+
return {
|
|
100
|
+
reviewDecision: parsed.reviewDecision || null,
|
|
101
|
+
headRefOid: parsed.headRefOid || null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Enrich one PR with its checks + reviewDecision, both anchored to the SAME head.
|
|
106
|
+
* `gh pr view` gives the authoritative current head oid; the check rollup is run
|
|
107
|
+
* against THAT (not the possibly-staler REST head SHA), and `headSha` is updated
|
|
108
|
+
* to match, so checks and reviewDecision can never describe two different heads.
|
|
109
|
+
*/
|
|
110
|
+
export async function enrichPr(repo, pr, gh = ghExec) {
|
|
111
|
+
const { reviewDecision, headRefOid } = await fetchReviewAndHead(repo, pr.number, gh);
|
|
112
|
+
const head = headRefOid || pr.headSha;
|
|
113
|
+
const checks = await rollupForSha(repo, head, gh);
|
|
114
|
+
return { ...pr, headSha: head, checks, reviewDecision };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Resolve which repositories a run targets, restricted to the project's own
|
|
118
|
+
* attached repos. Slugs are canonicalized (a renamed repo lists nothing under
|
|
119
|
+
* its old name — `phnx-labs/agents-cli` → `phnx-labs/agi-cli`). A `--repo` that
|
|
120
|
+
* is not one of the project's attached repos (raw or canonical) is refused.
|
|
121
|
+
*/
|
|
122
|
+
export async function resolveTargetSlugs(def, repo, gh) {
|
|
123
|
+
const raw = projectRepoSlugs([def]);
|
|
124
|
+
// Canonicalize CONCURRENTLY — each `gh repo view` can take up to gh's 30s
|
|
125
|
+
// timeout, so a sequential walk of N repos would stack N×30s and blow past a
|
|
126
|
+
// native caller's bounded deadline. Repo count per project is small.
|
|
127
|
+
const canonPairs = await Promise.all(raw.map(async (slug) => [slug, await canonicalizeRepo(slug, gh)]));
|
|
128
|
+
const canon = new Map(canonPairs);
|
|
129
|
+
const canonical = [...new Set(canon.values())];
|
|
130
|
+
if (!repo)
|
|
131
|
+
return canonical;
|
|
132
|
+
const requested = await canonicalizeRepo(repo, gh);
|
|
133
|
+
const attached = raw.includes(repo) ||
|
|
134
|
+
canonical.includes(requested) ||
|
|
135
|
+
[...canon.keys()].some((k) => k === repo);
|
|
136
|
+
if (!attached) {
|
|
137
|
+
const list = raw.length ? raw.join(', ') : '(none)';
|
|
138
|
+
throw new Error(`Repo "${repo}" is not attached to project "${def.name}". Attached repos: ${list}.`);
|
|
139
|
+
}
|
|
140
|
+
return [requested];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Build the full envelope. `number` (which the command requires alongside
|
|
144
|
+
* `repo`) fetches and enriches exactly that one PR; otherwise every target
|
|
145
|
+
* repo's open PRs are listed with checks/reviewDecision left null.
|
|
146
|
+
*/
|
|
147
|
+
export async function buildProjectPrs(def, opts = {}, gh = ghExec) {
|
|
148
|
+
const project = { name: def.name, linearProjectId: def.linear?.projectId ?? null };
|
|
149
|
+
const slugs = await resolveTargetSlugs(def, opts.repo, gh);
|
|
150
|
+
// Fetch repos in PARALLEL so a native caller's overall deadline scales with the
|
|
151
|
+
// slowest repo, not the sum — a serial multi-repo walk of 30s gh calls can blow
|
|
152
|
+
// past a bounded caller timeout and lose the whole result. Repo count is small
|
|
153
|
+
// (a project's attached repos), so this is a bounded fan-out, not unbounded.
|
|
154
|
+
const repositories = await Promise.all(slugs.map(async (slug) => {
|
|
155
|
+
try {
|
|
156
|
+
let pullRequests;
|
|
157
|
+
if (opts.number !== undefined) {
|
|
158
|
+
const pr = await fetchOnePr(slug, opts.number, gh);
|
|
159
|
+
pullRequests = [await enrichPr(slug, pr, gh)];
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
pullRequests = await listOpenPrs(slug, gh);
|
|
163
|
+
}
|
|
164
|
+
return { slug, pullRequests, error: null };
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
// A fetch failure is reported, never relabeled as zero open PRs.
|
|
168
|
+
return { slug, pullRequests: [], error: err instanceof Error ? err.message : String(err) };
|
|
169
|
+
}
|
|
170
|
+
}));
|
|
171
|
+
const partial = repositories.some((r) => r.error !== null);
|
|
172
|
+
return { project, repositories, partial };
|
|
173
|
+
}
|
|
@@ -27,7 +27,7 @@ export interface RollupItem extends StatusCheck {
|
|
|
27
27
|
link?: string;
|
|
28
28
|
}
|
|
29
29
|
/** PR head identity — the SHA every check query must anchor to. */
|
|
30
|
-
|
|
30
|
+
interface PrHead {
|
|
31
31
|
number: number;
|
|
32
32
|
sha: string;
|
|
33
33
|
}
|
|
@@ -62,3 +62,4 @@ export declare function rollupForSha(repo: string, sha: string, gh?: GhExec): Pr
|
|
|
62
62
|
export declare function pendingCheckSuites(repo: string, sha: string, gh?: GhExec): Promise<number>;
|
|
63
63
|
/** True when gh stderr is the rate-limit outcome the shim should switch to REST on. */
|
|
64
64
|
export declare function isRateLimitError(stderr: string): boolean;
|
|
65
|
+
export {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { AgentId } from '../types.js';
|
|
2
|
-
|
|
2
|
+
interface ResolvedConfigVersion {
|
|
3
3
|
/** The version to pin, or null when unresolved / not installed. */
|
|
4
4
|
version: string | null;
|
|
5
5
|
/** The version home for that version, or null. */
|
|
6
6
|
versionHome: string | null;
|
|
7
7
|
}
|
|
8
8
|
export declare function resolveConfigVersion(agent: AgentId, cwd: string, optionsVersion?: string): ResolvedConfigVersion;
|
|
9
|
+
export {};
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
* working until T4 folds connect into `accounts add`.
|
|
14
14
|
*/
|
|
15
15
|
import type { AgentId } from './types.js';
|
|
16
|
-
|
|
16
|
+
type HarnessIdentityKind = 'strong' | 'email' | 'opaque';
|
|
17
17
|
/**
|
|
18
18
|
* Durable worker credential, or `none` when the harness must log in per box.
|
|
19
19
|
* Codex is both: an API key (portable, bills the API) OR a per-device
|
|
20
20
|
* ChatGPT-plan device-auth login (the plan seat; never stored in the reserved
|
|
21
21
|
* store because it is a rotating session).
|
|
22
22
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
type HarnessWorkerKind = 'setup-token' | 'none' | `api-key:${string}` | `per-device${'' | `:${string}`}`;
|
|
24
|
+
type HarnessWorker = HarnessWorkerKind | HarnessWorkerKind[];
|
|
25
|
+
interface HarnessAuthCapability {
|
|
26
26
|
/** argv after the harness binary to start native login, or null when there is no finite login command. */
|
|
27
27
|
login: string[] | null;
|
|
28
28
|
/** argv to probe login status, or null when the CLI has no status command. */
|
|
@@ -59,3 +59,4 @@ export interface LoginInvocation {
|
|
|
59
59
|
hint?: string;
|
|
60
60
|
}
|
|
61
61
|
export declare const LOGIN_INVOCATIONS: Partial<Record<AgentId, LoginInvocation>>;
|
|
62
|
+
export {};
|
|
@@ -40,7 +40,7 @@ export declare const CONNECTION_TEST_PROMPT = "say alive in one word";
|
|
|
40
40
|
*/
|
|
41
41
|
export declare function classifyConnectionOutput(exitCode: number | null, output: string): ConnectionTestResult;
|
|
42
42
|
/** Options for {@link runHarnessConnectionTest}. */
|
|
43
|
-
|
|
43
|
+
interface ConnectionTestOptions {
|
|
44
44
|
/** Agent-side timeout passed to `agents run --timeout`. Default `60s`. */
|
|
45
45
|
timeout?: string;
|
|
46
46
|
/** Hard wall-clock cap (ms) on the child, above the agent timeout. Default 90s. */
|
|
@@ -55,3 +55,4 @@ export interface ConnectionTestOptions {
|
|
|
55
55
|
* (the request hung).
|
|
56
56
|
*/
|
|
57
57
|
export declare function runHarnessConnectionTest(name: string, opts?: ConnectionTestOptions): Promise<ConnectionTestResult>;
|
|
58
|
+
export {};
|