@phnx-labs/agents-cli 1.22.120 → 1.22.121
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 +227 -0
- package/README.md +19 -2
- package/dist/bootstrap.d.ts +0 -15
- package/dist/bootstrap.js +10 -409
- package/dist/cli/command-registry.d.ts +0 -58
- package/dist/cli/command-registry.js +2 -74
- package/dist/commands/accounts.d.ts +0 -17
- package/dist/commands/accounts.js +1 -52
- package/dist/commands/alias.d.ts +0 -12
- package/dist/commands/alias.js +0 -6
- package/dist/commands/apply.d.ts +0 -15
- package/dist/commands/apply.js +0 -63
- package/dist/commands/audit.d.ts +0 -12
- package/dist/commands/audit.js +0 -13
- package/dist/commands/auth.js +4 -12
- package/dist/commands/beta.d.ts +0 -6
- package/dist/commands/beta.js +2 -6
- package/dist/commands/browser-sessions-picker.d.ts +0 -8
- package/dist/commands/browser-sessions-picker.js +0 -26
- package/dist/commands/browser.d.ts +0 -57
- package/dist/commands/browser.js +0 -80
- package/dist/commands/budget.d.ts +0 -13
- package/dist/commands/budget.js +0 -2
- package/dist/commands/cli.d.ts +0 -12
- package/dist/commands/cli.js +0 -4
- package/dist/commands/cloud.d.ts +0 -9
- package/dist/commands/cloud.js +0 -43
- package/dist/commands/commands.d.ts +0 -9
- package/dist/commands/commands.js +0 -18
- package/dist/commands/computer-sessions-picker.d.ts +0 -11
- package/dist/commands/computer-sessions-picker.js +0 -29
- package/dist/commands/computer.d.ts +0 -62
- package/dist/commands/computer.js +3 -114
- package/dist/commands/config.d.ts +0 -14
- package/dist/commands/config.js +21 -60
- package/dist/commands/cost.d.ts +0 -11
- package/dist/commands/cost.js +1 -17
- package/dist/commands/daemon-test-harness.d.ts +0 -32
- package/dist/commands/daemon-test-harness.js +1 -36
- package/dist/commands/daemon.d.ts +0 -46
- package/dist/commands/daemon.js +8 -255
- package/dist/commands/detach-core.d.ts +0 -28
- package/dist/commands/detach-core.js +0 -30
- package/dist/commands/detach.d.ts +1 -12
- package/dist/commands/detach.js +16 -52
- package/dist/commands/device-config-test-harness.js +0 -12
- package/dist/commands/doctor.d.ts +0 -103
- package/dist/commands/doctor.js +3 -279
- package/dist/commands/events.d.ts +0 -29
- package/dist/commands/events.js +1 -55
- package/dist/commands/exec.d.ts +0 -163
- package/dist/commands/exec.js +15 -964
- package/dist/commands/factory.d.ts +0 -6
- package/dist/commands/factory.js +0 -2
- package/dist/commands/feed-watch.js +0 -20
- package/dist/commands/feed.d.ts +0 -38
- package/dist/commands/feed.js +1 -151
- package/dist/commands/feedback.d.ts +0 -5
- package/dist/commands/feedback.js +0 -5
- package/dist/commands/fleet-capture.d.ts +0 -12
- package/dist/commands/fleet-capture.js +1 -39
- package/dist/commands/focus.d.ts +6 -94
- package/dist/commands/focus.js +13 -183
- package/dist/commands/fork.d.ts +0 -21
- package/dist/commands/fork.js +0 -45
- package/dist/commands/funnel.d.ts +0 -3
- package/dist/commands/go.d.ts +2 -71
- package/dist/commands/go.js +5 -99
- package/dist/commands/harness-hooks.d.ts +0 -41
- package/dist/commands/harness-hooks.js +0 -48
- package/dist/commands/harness-wizard.d.ts +0 -137
- package/dist/commands/harness-wizard.js +0 -109
- package/dist/commands/harness.d.ts +0 -63
- package/dist/commands/harness.js +0 -103
- package/dist/commands/hooks.d.ts +0 -9
- package/dist/commands/hooks.js +0 -26
- package/dist/commands/humans.d.ts +0 -8
- package/dist/commands/humans.js +0 -8
- package/dist/commands/import.d.ts +0 -22
- package/dist/commands/import.js +0 -79
- package/dist/commands/insights.d.ts +0 -37
- package/dist/commands/insights.js +3 -115
- package/dist/commands/inspect.d.ts +0 -117
- package/dist/commands/inspect.js +2 -448
- package/dist/commands/lease.d.ts +0 -28
- package/dist/commands/lease.js +0 -43
- package/dist/commands/logs.d.ts +0 -23
- package/dist/commands/logs.js +0 -30
- package/dist/commands/mailboxes.d.ts +0 -18
- package/dist/commands/mailboxes.js +0 -29
- package/dist/commands/mcp.d.ts +0 -9
- package/dist/commands/mcp.js +0 -53
- package/dist/commands/memory.d.ts +0 -7
- package/dist/commands/memory.js +0 -7
- package/dist/commands/menubar.d.ts +0 -8
- package/dist/commands/menubar.js +0 -24
- package/dist/commands/message.d.ts +0 -23
- package/dist/commands/message.js +0 -50
- package/dist/commands/mine.d.ts +0 -22
- package/dist/commands/mine.js +0 -21
- package/dist/commands/models.d.ts +0 -8
- package/dist/commands/models.js +0 -33
- package/dist/commands/modes.d.ts +0 -10
- package/dist/commands/modes.js +0 -13
- package/dist/commands/monitors.d.ts +0 -9
- package/dist/commands/monitors.js +3 -160
- package/dist/commands/open.d.ts +0 -26
- package/dist/commands/open.js +0 -10
- package/dist/commands/output.d.ts +0 -18
- package/dist/commands/output.js +1 -34
- package/dist/commands/packages-materialize.d.ts +0 -11
- package/dist/commands/packages-materialize.js +0 -3
- package/dist/commands/packages.d.ts +0 -10
- package/dist/commands/packages.js +0 -50
- package/dist/commands/perf.d.ts +0 -41
- package/dist/commands/perf.js +0 -55
- package/dist/commands/permissions.d.ts +0 -9
- package/dist/commands/permissions.js +0 -43
- package/dist/commands/plugins.d.ts +0 -14
- package/dist/commands/plugins.js +2 -55
- package/dist/commands/profiles.d.ts +0 -25
- package/dist/commands/profiles.js +0 -27
- package/dist/commands/projects-todo.d.ts +2 -0
- package/dist/commands/projects-todo.js +132 -0
- package/dist/commands/projects.d.ts +0 -85
- package/dist/commands/projects.js +344 -291
- package/dist/commands/prune.js +0 -30
- package/dist/commands/ps-roster.d.ts +92 -0
- package/dist/commands/ps-roster.js +744 -0
- package/dist/commands/ps.d.ts +6 -0
- package/dist/commands/ps.js +98 -0
- package/dist/commands/refresh-rules.d.ts +0 -13
- package/dist/commands/refresh-rules.js +0 -14
- package/dist/commands/reminders.d.ts +0 -7
- package/dist/commands/repo.d.ts +0 -89
- package/dist/commands/repo.js +7 -205
- package/dist/commands/resource-view.d.ts +0 -33
- package/dist/commands/resource-view.js +0 -49
- package/dist/commands/resume.d.ts +1 -19
- package/dist/commands/resume.js +0 -50
- package/dist/commands/route.d.ts +0 -10
- package/dist/commands/route.js +0 -19
- package/dist/commands/routines.d.ts +0 -42
- package/dist/commands/routines.js +5 -290
- package/dist/commands/routines.test-fixture.d.ts +0 -34
- package/dist/commands/routines.test-fixture.js +4 -100
- package/dist/commands/rules.d.ts +0 -9
- package/dist/commands/rules.js +1 -6
- package/dist/commands/run-account-picker.d.ts +0 -59
- package/dist/commands/run-account-picker.js +0 -71
- package/dist/commands/run-broadcast.d.ts +0 -9
- package/dist/commands/run-broadcast.js +0 -7
- package/dist/commands/run-cloud.d.ts +0 -15
- package/dist/commands/run-cloud.js +0 -37
- package/dist/commands/run-device-picker.d.ts +0 -25
- package/dist/commands/run-device-picker.js +1 -53
- package/dist/commands/secrets-passthrough.d.ts +0 -31
- package/dist/commands/secrets-passthrough.js +0 -10
- package/dist/commands/send.d.ts +0 -20
- package/dist/commands/send.js +14 -18
- package/dist/commands/sessions-backfill.d.ts +0 -7
- package/dist/commands/sessions-backfill.js +1 -16
- package/dist/commands/sessions-backup-setup.js +0 -11
- package/dist/commands/sessions-bookmark.d.ts +0 -8
- package/dist/commands/sessions-bookmark.js +0 -28
- package/dist/commands/sessions-browser.d.ts +2 -117
- package/dist/commands/sessions-browser.js +5 -243
- package/dist/commands/sessions-export.d.ts +1 -26
- package/dist/commands/sessions-export.js +3 -81
- package/dist/commands/sessions-import.d.ts +0 -14
- package/dist/commands/sessions-import.js +0 -59
- package/dist/commands/sessions-inject.d.ts +0 -60
- package/dist/commands/sessions-inject.js +3 -96
- package/dist/commands/sessions-migrate.d.ts +2 -37
- package/dist/commands/sessions-migrate.js +7 -159
- package/dist/commands/sessions-optimize.d.ts +0 -12
- package/dist/commands/sessions-picker-factory.d.ts +0 -7
- package/dist/commands/sessions-picker-factory.js +0 -8
- package/dist/commands/sessions-picker.d.ts +4 -103
- package/dist/commands/sessions-picker.js +13 -352
- package/dist/commands/sessions-render.d.ts +1 -2
- package/dist/commands/sessions-render.js +3 -7
- package/dist/commands/sessions-resume.d.ts +1 -24
- package/dist/commands/sessions-resume.js +2 -65
- package/dist/commands/sessions-share.d.ts +1 -9
- package/dist/commands/sessions-share.js +1 -45
- package/dist/commands/sessions-stats.d.ts +0 -24
- package/dist/commands/sessions-stats.js +0 -49
- package/dist/commands/sessions-stop.d.ts +1 -20
- package/dist/commands/sessions-stop.js +4 -9
- package/dist/commands/sessions-tail.d.ts +1 -19
- package/dist/commands/sessions-tail.js +3 -36
- package/dist/commands/sessions-trace.d.ts +5 -36
- package/dist/commands/sessions-trace.js +7 -82
- package/dist/commands/sessions.d.ts +1 -666
- package/dist/commands/sessions.js +30 -2279
- package/dist/commands/sessions.test-fixture.d.ts +0 -9
- package/dist/commands/sessions.test-fixture.js +8 -23
- package/dist/commands/setup-accounts.d.ts +0 -6
- package/dist/commands/setup-browser.d.ts +0 -23
- package/dist/commands/setup-browser.js +0 -28
- package/dist/commands/setup-computer.d.ts +0 -16
- package/dist/commands/setup-computer.js +0 -28
- package/dist/commands/setup-fleet.d.ts +0 -8
- package/dist/commands/setup-fleet.js +0 -11
- package/dist/commands/setup-mine.d.ts +0 -14
- package/dist/commands/setup-mine.js +0 -25
- package/dist/commands/setup-preferences.d.ts +0 -47
- package/dist/commands/setup-preferences.js +0 -53
- package/dist/commands/setup-secrets.d.ts +2 -24
- package/dist/commands/setup-secrets.js +0 -24
- package/dist/commands/setup-term.d.ts +0 -21
- package/dist/commands/setup-term.js +0 -21
- package/dist/commands/setup-terminal.d.ts +0 -1
- package/dist/commands/setup-terminal.js +0 -1
- package/dist/commands/setup-tools.d.ts +2 -0
- package/dist/commands/setup-tools.js +73 -0
- package/dist/commands/setup.d.ts +0 -20
- package/dist/commands/setup.js +4 -57
- package/dist/commands/skills.d.ts +0 -9
- package/dist/commands/skills.js +1 -22
- package/dist/commands/snapshot.d.ts +0 -9
- package/dist/commands/snapshot.js +0 -10
- package/dist/commands/ssh.d.ts +0 -64
- package/dist/commands/ssh.js +9 -420
- package/dist/commands/status.d.ts +0 -12
- package/dist/commands/status.js +0 -26
- package/dist/commands/subagents.d.ts +0 -8
- package/dist/commands/subagents.js +0 -31
- package/dist/commands/sync.d.ts +0 -37
- package/dist/commands/sync.js +0 -256
- package/dist/commands/teams-picker.d.ts +0 -3
- package/dist/commands/teams-picker.js +0 -34
- package/dist/commands/teams.d.ts +1 -76
- package/dist/commands/teams.js +9 -477
- package/dist/commands/tmux.d.ts +0 -25
- package/dist/commands/tmux.js +0 -46
- package/dist/commands/traces.js +0 -19
- package/dist/commands/trash.d.ts +0 -17
- package/dist/commands/trash.js +1 -11
- package/dist/commands/uninstall.d.ts +0 -9
- package/dist/commands/uninstall.js +0 -6
- package/dist/commands/update.d.ts +0 -22
- package/dist/commands/update.js +0 -44
- package/dist/commands/upgrade.d.ts +0 -1
- package/dist/commands/upgrade.js +0 -1
- package/dist/commands/utils.d.ts +0 -85
- package/dist/commands/utils.js +1 -95
- package/dist/commands/versions.d.ts +0 -16
- package/dist/commands/versions.js +0 -134
- package/dist/commands/view.d.ts +0 -90
- package/dist/commands/view.js +4 -343
- package/dist/commands/watchdog.d.ts +0 -19
- package/dist/commands/watchdog.js +3 -43
- package/dist/commands/webhook.d.ts +0 -8
- package/dist/commands/webhook.js +0 -14
- package/dist/commands/workflows.d.ts +0 -8
- package/dist/commands/workflows.js +0 -6
- package/dist/index.d.ts +0 -25
- package/dist/index.js +5 -119
- package/dist/lib/account-capabilities.d.ts +0 -34
- package/dist/lib/account-capabilities.js +0 -32
- package/dist/lib/account-catalog.d.ts +0 -128
- package/dist/lib/account-catalog.js +8 -154
- package/dist/lib/account-provider-registry.d.ts +0 -14
- package/dist/lib/account-provider-registry.js +0 -8
- package/dist/lib/account-registry.d.ts +0 -74
- package/dist/lib/account-registry.js +14 -189
- package/dist/lib/account-schema.d.ts +0 -19
- package/dist/lib/account-schema.js +0 -43
- package/dist/lib/accounting/account-launch.d.ts +0 -15
- package/dist/lib/accounting/account-launch.js +1 -3
- package/dist/lib/accounting/account-pool-collect.d.ts +0 -26
- package/dist/lib/accounting/account-pool-collect.js +0 -42
- package/dist/lib/accounting/account-pool.d.ts +0 -41
- package/dist/lib/accounting/account-pool.js +0 -17
- package/dist/lib/accounting/capacity.d.ts +0 -32
- package/dist/lib/accounting/capacity.js +0 -32
- package/dist/lib/accounting/rotate.d.ts +0 -518
- package/dist/lib/accounting/rotate.js +4 -598
- package/dist/lib/accounting/usage-ingest.d.ts +0 -1
- package/dist/lib/accounting/usage-ingest.js +0 -44
- package/dist/lib/accounting/usage-sync.d.ts +0 -60
- package/dist/lib/accounting/usage-sync.js +4 -51
- package/dist/lib/accounting/usage.d.ts +0 -632
- package/dist/lib/accounting/usage.js +14 -1055
- package/dist/lib/accounts/add.d.ts +0 -60
- package/dist/lib/accounts/add.js +0 -127
- package/dist/lib/accounts/auth-operation-lock.d.ts +0 -1
- package/dist/lib/accounts/auth-operation-lock.js +0 -4
- package/dist/lib/accounts/migrate.d.ts +0 -9
- package/dist/lib/accounts/migrate.js +3 -42
- package/dist/lib/accounts/slots.d.ts +0 -25
- package/dist/lib/accounts/slots.js +1 -49
- package/dist/lib/acp/client.d.ts +0 -16
- package/dist/lib/acp/client.js +0 -29
- package/dist/lib/acp/harnesses.d.ts +0 -15
- package/dist/lib/acp/harnesses.js +0 -16
- package/dist/lib/acp/run.d.ts +0 -8
- package/dist/lib/acp/run.js +0 -8
- package/dist/lib/actor.d.ts +1 -71
- package/dist/lib/actor.js +1 -99
- package/dist/lib/add-dir.d.ts +0 -46
- package/dist/lib/add-dir.js +1 -70
- package/dist/lib/address.d.ts +0 -17
- package/dist/lib/address.js +0 -15
- package/dist/lib/agent-cli-commands.d.ts +0 -10
- package/dist/lib/agent-cli-commands.js +0 -10
- package/dist/lib/agent-modes.d.ts +0 -29
- package/dist/lib/agent-modes.js +0 -31
- package/dist/lib/agent-spec/agents.d.ts +0 -426
- package/dist/lib/agent-spec/agents.js +37 -924
- package/dist/lib/agent-spec/index.d.ts +0 -5
- package/dist/lib/agent-spec/index.js +0 -14
- package/dist/lib/agent-spec/materialize.d.ts +0 -10
- package/dist/lib/agent-spec/materialize.js +2 -139
- package/dist/lib/agent-spec/package-resolve.d.ts +0 -8
- package/dist/lib/agent-spec/package-resolve.js +1 -44
- package/dist/lib/agent-spec/package-schema.d.ts +0 -2
- package/dist/lib/agent-spec/package-schema.js +0 -11
- package/dist/lib/agent-spec/package-types.d.ts +0 -27
- package/dist/lib/agent-spec/package-types.js +0 -1
- package/dist/lib/agent-spec/primitives.d.ts +0 -18
- package/dist/lib/agent-spec/primitives.js +0 -27
- package/dist/lib/agent-spec/provider.js +0 -2
- package/dist/lib/agent-spec/resolve.d.ts +0 -23
- package/dist/lib/agent-spec/resolve.js +0 -41
- package/dist/lib/agent-spec/types.d.ts +0 -34
- package/dist/lib/agent-spec/types.js +0 -6
- package/dist/lib/agents.d.ts +0 -1
- package/dist/lib/agents.js +0 -1
- package/dist/lib/analytics/mix-commands.d.ts +0 -23
- package/dist/lib/analytics/mix-commands.js +0 -26
- package/dist/lib/analytics/recipes.d.ts +0 -1
- package/dist/lib/analytics/recipes.js +5 -10
- package/dist/lib/analytics/usage-db.js +4 -6
- package/dist/lib/answer-router.d.ts +0 -61
- package/dist/lib/answer-router.js +0 -57
- package/dist/lib/app-bundle-install.d.ts +0 -13
- package/dist/lib/app-bundle-install.js +0 -50
- package/dist/lib/artifact-actions.d.ts +0 -15
- package/dist/lib/artifact-actions.js +0 -18
- package/dist/lib/artifacts-client.d.ts +0 -10
- package/dist/lib/artifacts-client.js +0 -17
- package/dist/lib/ask-classifier.d.ts +0 -38
- package/dist/lib/ask-classifier.js +0 -27
- package/dist/lib/audit/log.d.ts +0 -47
- package/dist/lib/audit/log.js +1 -59
- package/dist/lib/auth-health.d.ts +0 -213
- package/dist/lib/auth-health.js +16 -266
- package/dist/lib/auth-mint.d.ts +0 -83
- package/dist/lib/auth-mint.js +8 -85
- package/dist/lib/auto-pull-worker.d.ts +0 -10
- package/dist/lib/auto-pull-worker.js +3 -48
- package/dist/lib/auto-pull.d.ts +0 -64
- package/dist/lib/auto-pull.js +0 -79
- package/dist/lib/beta.d.ts +0 -9
- package/dist/lib/beta.js +0 -9
- package/dist/lib/binary-shadow.d.ts +0 -22
- package/dist/lib/binary-shadow.js +4 -34
- package/dist/lib/boot-profile.d.ts +0 -10
- package/dist/lib/boot-profile.js +1 -31
- package/dist/lib/brand.d.ts +0 -20
- package/dist/lib/brand.js +0 -50
- package/dist/lib/browser/context.d.ts +0 -54
- package/dist/lib/browser/context.js +0 -49
- package/dist/lib/browser/paths.d.ts +0 -21
- package/dist/lib/browser/paths.js +0 -26
- package/dist/lib/browser/record.d.ts +0 -34
- package/dist/lib/browser/record.js +0 -38
- package/dist/lib/browser/sessions-list.d.ts +1 -79
- package/dist/lib/browser/sessions-list.js +2 -98
- package/dist/lib/browser-client.d.ts +0 -112
- package/dist/lib/browser-client.js +1 -90
- package/dist/lib/budget/config.d.ts +0 -6
- package/dist/lib/budget/config.js +0 -29
- package/dist/lib/budget/enforce.d.ts +0 -50
- package/dist/lib/budget/enforce.js +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -23
- package/dist/lib/budget/ledger.js +0 -28
- package/dist/lib/budget/live-cloud.d.ts +0 -26
- package/dist/lib/budget/live-cloud.js +0 -12
- package/dist/lib/budget/live-team.d.ts +0 -17
- package/dist/lib/budget/live-team.js +1 -35
- package/dist/lib/budget/preflight.d.ts +0 -51
- package/dist/lib/budget/preflight.js +0 -36
- package/dist/lib/byok-usage.d.ts +0 -20
- package/dist/lib/byok-usage.js +1 -24
- package/dist/lib/capabilities.d.ts +0 -24
- package/dist/lib/capabilities.js +0 -29
- package/dist/lib/catchup.d.ts +0 -87
- package/dist/lib/catchup.js +1 -81
- package/dist/lib/channels/owner-forward.d.ts +0 -70
- package/dist/lib/channels/owner-forward.js +1 -43
- package/dist/lib/channels/owner-sink.js +0 -21
- package/dist/lib/channels/providers/desktop.d.ts +0 -37
- package/dist/lib/channels/providers/desktop.js +0 -72
- package/dist/lib/channels/providers/index.d.ts +0 -1
- package/dist/lib/channels/providers/index.js +2 -6
- package/dist/lib/channels/providers/mailbox.js +0 -7
- package/dist/lib/channels/providers/openclaw-telegram.js +0 -8
- package/dist/lib/channels/providers/rush.d.ts +0 -2
- package/dist/lib/channels/providers/rush.js +0 -26
- package/dist/lib/channels/providers/session.d.ts +2 -0
- package/dist/lib/channels/providers/session.js +26 -0
- package/dist/lib/channels/registry.d.ts +0 -27
- package/dist/lib/channels/registry.js +0 -10
- package/dist/lib/channels/resolve.d.ts +0 -19
- package/dist/lib/channels/resolve.js +0 -2
- package/dist/lib/channels/send.d.ts +0 -50
- package/dist/lib/channels/send.js +0 -25
- package/dist/lib/checkpoint.d.ts +0 -36
- package/dist/lib/checkpoint.js +0 -28
- package/dist/lib/claude-account-token.d.ts +0 -98
- package/dist/lib/claude-account-token.js +7 -169
- package/dist/lib/claude-statusline.d.ts +0 -41
- package/dist/lib/claude-statusline.js +0 -68
- package/dist/lib/cli-entry.d.ts +0 -26
- package/dist/lib/cli-entry.js +1 -61
- package/dist/lib/cli-resources.d.ts +31 -89
- package/dist/lib/cli-resources.js +116 -152
- package/dist/lib/cloud/antigravity.d.ts +0 -29
- package/dist/lib/cloud/antigravity.js +0 -36
- package/dist/lib/cloud/codex.d.ts +0 -8
- package/dist/lib/cloud/codex.js +0 -41
- package/dist/lib/cloud/cursor.d.ts +0 -5
- package/dist/lib/cloud/cursor.js +2 -7
- package/dist/lib/cloud/dispatch.d.ts +0 -13
- package/dist/lib/cloud/dispatch.js +1 -48
- package/dist/lib/cloud/factory.d.ts +0 -52
- package/dist/lib/cloud/factory.js +3 -67
- package/dist/lib/cloud/host.d.ts +0 -39
- package/dist/lib/cloud/host.js +5 -48
- package/dist/lib/cloud/registry.d.ts +0 -25
- package/dist/lib/cloud/registry.js +0 -29
- package/dist/lib/cloud/rush.d.ts +0 -47
- package/dist/lib/cloud/rush.js +1 -82
- package/dist/lib/cloud/session-index.d.ts +0 -27
- package/dist/lib/cloud/session-index.js +1 -32
- package/dist/lib/cloud/store.d.ts +0 -18
- package/dist/lib/cloud/store.js +0 -28
- package/dist/lib/cloud/stream.d.ts +0 -14
- package/dist/lib/cloud/stream.js +0 -25
- package/dist/lib/cloud/types.d.ts +0 -168
- package/dist/lib/cloud/types.js +0 -46
- package/dist/lib/cloudflare/creds.d.ts +0 -2
- package/dist/lib/cloudflare/creds.js +0 -14
- package/dist/lib/cloudflare/provision.d.ts +0 -8
- package/dist/lib/cloudflare/provision.js +1 -19
- package/dist/lib/codex-home.d.ts +0 -60
- package/dist/lib/codex-home.js +2 -72
- package/dist/lib/codex-policy.d.ts +0 -10
- package/dist/lib/codex-policy.js +0 -13
- package/dist/lib/command-skills.d.ts +0 -10
- package/dist/lib/command-skills.js +0 -10
- package/dist/lib/commands.d.ts +0 -74
- package/dist/lib/commands.js +0 -112
- package/dist/lib/comms-render.d.ts +0 -5
- package/dist/lib/comms-render.js +0 -5
- package/dist/lib/computer/context.d.ts +0 -23
- package/dist/lib/computer/context.js +0 -14
- package/dist/lib/computer/policy.d.ts +0 -20
- package/dist/lib/computer/policy.js +0 -53
- package/dist/lib/computer/record.d.ts +0 -33
- package/dist/lib/computer/record.js +1 -48
- package/dist/lib/computer/sessions-list.d.ts +1 -128
- package/dist/lib/computer/sessions-list.js +6 -165
- package/dist/lib/computer-client.d.ts +0 -106
- package/dist/lib/computer-client.js +5 -86
- package/dist/lib/concurrency.d.ts +0 -14
- package/dist/lib/concurrency.js +0 -3
- package/dist/lib/config-drift.d.ts +0 -31
- package/dist/lib/config-drift.js +0 -32
- package/dist/lib/config-keys.d.ts +1 -65
- package/dist/lib/config-keys.js +6 -52
- package/dist/lib/config-transfer.d.ts +0 -14
- package/dist/lib/config-transfer.js +0 -26
- package/dist/lib/convert.d.ts +0 -17
- package/dist/lib/convert.js +0 -18
- package/dist/lib/crabbox/cli.d.ts +0 -156
- package/dist/lib/crabbox/cli.js +1 -188
- package/dist/lib/crabbox/config.d.ts +0 -18
- package/dist/lib/crabbox/config.js +1 -19
- package/dist/lib/crabbox/lease.d.ts +0 -93
- package/dist/lib/crabbox/lease.js +4 -148
- package/dist/lib/crabbox/progress.d.ts +0 -56
- package/dist/lib/crabbox/progress.js +2 -49
- package/dist/lib/crabbox/runtimes.d.ts +0 -94
- package/dist/lib/crabbox/runtimes.js +1 -111
- package/dist/lib/crabbox/setup-copy.d.ts +0 -64
- package/dist/lib/crabbox/setup-copy.js +1 -53
- package/dist/lib/daemon/account-state-daemon-service.d.ts +0 -48
- package/dist/lib/daemon/account-state-daemon-service.js +2 -63
- package/dist/lib/daemon/attention-notify-service.d.ts +0 -12
- package/dist/lib/daemon/attention-notify-service.js +1 -24
- package/dist/lib/daemon/auth-sync-service.d.ts +0 -28
- package/dist/lib/daemon/auth-sync-service.js +0 -56
- package/dist/lib/daemon/catchup-service.d.ts +0 -34
- package/dist/lib/daemon/catchup-service.js +0 -30
- package/dist/lib/daemon/daemon.d.ts +0 -374
- package/dist/lib/daemon/daemon.js +44 -1049
- package/dist/lib/daemon/daemon.test-fixture.d.ts +0 -19
- package/dist/lib/daemon/daemon.test-fixture.js +1 -24
- package/dist/lib/daemon/device-probe-service.d.ts +0 -16
- package/dist/lib/daemon/device-probe-service.js +0 -20
- package/dist/lib/daemon/feed-stream-service.d.ts +0 -15
- package/dist/lib/daemon/feed-stream-service.js +0 -20
- package/dist/lib/daemon/harness-update-service.d.ts +2 -61
- package/dist/lib/daemon/harness-update-service.js +6 -86
- package/dist/lib/daemon/heartbeat-service.d.ts +0 -1
- package/dist/lib/daemon/heartbeat-service.js +0 -1
- package/dist/lib/daemon/leaked-daemons.d.ts +0 -46
- package/dist/lib/daemon/leaked-daemons.js +2 -78
- package/dist/lib/daemon/monitor-engine-service.d.ts +0 -13
- package/dist/lib/daemon/monitor-engine-service.js +3 -15
- package/dist/lib/daemon/runner.d.ts +0 -194
- package/dist/lib/daemon/runner.js +39 -760
- package/dist/lib/daemon/self-heal-service.d.ts +18 -17
- package/dist/lib/daemon/self-heal-service.js +83 -37
- package/dist/lib/daemon/self-update-service.d.ts +1 -131
- package/dist/lib/daemon/self-update-service.js +26 -189
- package/dist/lib/daemon/service.d.ts +0 -73
- package/dist/lib/daemon/service.js +0 -34
- package/dist/lib/daemon/session-index-service.d.ts +0 -12
- package/dist/lib/daemon/session-index-service.js +0 -23
- package/dist/lib/daemon/session-state-service.d.ts +0 -8
- package/dist/lib/daemon/session-state-service.js +0 -8
- package/dist/lib/daemon/session-summarizer-service.d.ts +0 -14
- package/dist/lib/daemon/session-summarizer-service.js +1 -19
- package/dist/lib/daemon/session-title-service.d.ts +0 -25
- package/dist/lib/daemon/session-title-service.js +0 -32
- package/dist/lib/daemon/state-dir-check-service.d.ts +0 -24
- package/dist/lib/daemon/state-dir-check-service.js +0 -29
- package/dist/lib/daemon/supervisor.d.ts +0 -112
- package/dist/lib/daemon/supervisor.js +4 -147
- package/dist/lib/daemon/testdata/process-view-daemon.js +0 -2
- package/dist/lib/daemon/testdata/process-view-start.js +0 -5
- package/dist/lib/daemon/tmux-reap-service.d.ts +0 -1
- package/dist/lib/daemon/tmux-reap-service.js +0 -1
- package/dist/lib/daemon/usage-sync-service.d.ts +0 -23
- package/dist/lib/daemon/usage-sync-service.js +0 -26
- package/dist/lib/daemon/watchdog-service.d.ts +0 -9
- package/dist/lib/daemon/watchdog-service.js +0 -13
- package/dist/lib/daemon/webhook-receiver-service.d.ts +0 -1
- package/dist/lib/daemon/webhook-receiver-service.js +0 -1
- package/dist/lib/daemon-health.d.ts +0 -55
- package/dist/lib/daemon-health.js +4 -77
- package/dist/lib/daemon-services.d.ts +0 -36
- package/dist/lib/daemon-services.js +0 -45
- package/dist/lib/daemon-ticks.d.ts +0 -126
- package/dist/lib/daemon-ticks.js +1 -156
- package/dist/lib/daemon-webhooks.d.ts +0 -57
- package/dist/lib/daemon-webhooks.js +2 -54
- package/dist/lib/deeplink/register.d.ts +0 -15
- package/dist/lib/deeplink/register.js +0 -60
- package/dist/lib/deeplink/url.d.ts +0 -24
- package/dist/lib/deeplink/url.js +1 -33
- package/dist/lib/device-config.d.ts +1 -192
- package/dist/lib/device-config.js +86 -240
- package/dist/lib/devices/config-migration.d.ts +0 -43
- package/dist/lib/devices/config-migration.js +7 -127
- package/dist/lib/devices/connect.d.ts +0 -168
- package/dist/lib/devices/connect.js +6 -254
- package/dist/lib/devices/device-docs.d.ts +0 -24
- package/dist/lib/devices/device-docs.js +0 -46
- package/dist/lib/devices/discovery-policy.d.ts +0 -30
- package/dist/lib/devices/discovery-policy.js +3 -34
- package/dist/lib/devices/doctor-findings.d.ts +0 -109
- package/dist/lib/devices/doctor-findings.js +30 -326
- package/dist/lib/devices/doctor-overview-cache.d.ts +0 -33
- package/dist/lib/devices/doctor-overview-cache.js +0 -81
- package/dist/lib/devices/fleet-divergence.d.ts +0 -89
- package/dist/lib/devices/fleet-divergence.js +1 -60
- package/dist/lib/devices/fleet-inventory.d.ts +0 -27
- package/dist/lib/devices/fleet-inventory.js +0 -38
- package/dist/lib/devices/fleet.d.ts +0 -95
- package/dist/lib/devices/fleet.js +0 -79
- package/dist/lib/devices/harness-inventory.d.ts +0 -75
- package/dist/lib/devices/harness-inventory.js +0 -101
- package/dist/lib/devices/health-report.d.ts +0 -37
- package/dist/lib/devices/health-report.js +0 -73
- package/dist/lib/devices/health.d.ts +0 -71
- package/dist/lib/devices/health.js +2 -82
- package/dist/lib/devices/interactive-host.d.ts +0 -10
- package/dist/lib/devices/interactive-host.js +0 -34
- package/dist/lib/devices/known-hosts.d.ts +0 -45
- package/dist/lib/devices/known-hosts.js +0 -77
- package/dist/lib/devices/pending.d.ts +0 -31
- package/dist/lib/devices/pending.js +7 -67
- package/dist/lib/devices/pool.d.ts +0 -36
- package/dist/lib/devices/pool.js +0 -30
- package/dist/lib/devices/reachability.d.ts +0 -25
- package/dist/lib/devices/reachability.js +0 -14
- package/dist/lib/devices/registry.d.ts +0 -141
- package/dist/lib/devices/registry.js +4 -151
- package/dist/lib/devices/resolve-profile.d.ts +0 -18
- package/dist/lib/devices/resolve-profile.js +0 -18
- package/dist/lib/devices/resolve-target.d.ts +0 -20
- package/dist/lib/devices/resolve-target.js +1 -51
- package/dist/lib/devices/rollout-verify.d.ts +1 -81
- package/dist/lib/devices/rollout-verify.js +0 -77
- package/dist/lib/devices/self-host.d.ts +0 -7
- package/dist/lib/devices/self-host.js +1 -29
- package/dist/lib/devices/ssh-config.d.ts +0 -18
- package/dist/lib/devices/ssh-config.js +0 -9
- package/dist/lib/devices/stats-cache.d.ts +0 -48
- package/dist/lib/devices/stats-cache.js +0 -80
- package/dist/lib/devices/sync.d.ts +0 -97
- package/dist/lib/devices/sync.js +0 -88
- package/dist/lib/devices/tailscale.d.ts +0 -18
- package/dist/lib/devices/tailscale.js +1 -38
- package/dist/lib/devices/terminfo.d.ts +0 -27
- package/dist/lib/devices/terminfo.js +2 -64
- package/dist/lib/devices/worker-pick.d.ts +0 -15
- package/dist/lib/devices/worker-pick.js +0 -48
- package/dist/lib/diff-text.d.ts +0 -18
- package/dist/lib/diff-text.js +0 -15
- package/dist/lib/doctor-diff.d.ts +0 -79
- package/dist/lib/doctor-diff.js +2 -181
- package/dist/lib/drift-sync.d.ts +0 -29
- package/dist/lib/drift-sync.js +0 -40
- package/dist/lib/drift.d.ts +0 -43
- package/dist/lib/drift.js +0 -31
- package/dist/lib/event-families.d.ts +0 -17
- package/dist/lib/event-families.js +0 -33
- package/dist/lib/event-provenance.d.ts +0 -4
- package/dist/lib/event-provenance.js +0 -5
- package/dist/lib/event-stream.d.ts +0 -29
- package/dist/lib/event-stream.js +0 -36
- package/dist/lib/events-ingest.d.ts +0 -27
- package/dist/lib/events-ingest.js +0 -54
- package/dist/lib/exec-account-home.d.ts +0 -24
- package/dist/lib/exec-account-home.js +0 -41
- package/dist/lib/exec-bounded.d.ts +1 -37
- package/dist/lib/exec-bounded.js +10 -46
- package/dist/lib/exec.d.ts +3 -583
- package/dist/lib/exec.js +18 -1025
- package/dist/lib/factory/snapshot.js +1 -15
- package/dist/lib/feed/activity-stream.d.ts +0 -27
- package/dist/lib/feed/activity-stream.js +4 -80
- package/dist/lib/feed/activity.d.ts +1 -243
- package/dist/lib/feed/activity.js +8 -273
- package/dist/lib/feed/answer.d.ts +0 -103
- package/dist/lib/feed/answer.js +0 -267
- package/dist/lib/feed/attention.d.ts +0 -56
- package/dist/lib/feed/attention.js +0 -161
- package/dist/lib/feed/envelope.d.ts +2 -17
- package/dist/lib/feed/envelope.js +0 -14
- package/dist/lib/feed/events.d.ts +0 -118
- package/dist/lib/feed/events.js +13 -213
- package/dist/lib/feed/feed.d.ts +1 -250
- package/dist/lib/feed/feed.js +24 -334
- package/dist/lib/feed/hub-server.d.ts +0 -100
- package/dist/lib/feed/hub-server.js +1 -191
- package/dist/lib/feed/hub.d.ts +0 -53
- package/dist/lib/feed/hub.js +0 -89
- package/dist/lib/feed/pr-status.d.ts +1 -19
- package/dist/lib/feed/pr-status.js +0 -18
- package/dist/lib/feed/tool-activity.d.ts +0 -59
- package/dist/lib/feed/tool-activity.js +1 -119
- package/dist/lib/feed/tools.d.ts +0 -100
- package/dist/lib/feed/tools.js +0 -89
- package/dist/lib/feed/watch.d.ts +0 -33
- package/dist/lib/feed/watch.js +2 -94
- package/dist/lib/feed-broadcast.d.ts +0 -148
- package/dist/lib/feed-broadcast.js +1 -283
- package/dist/lib/feed-outcome.d.ts +0 -50
- package/dist/lib/feed-outcome.js +1 -67
- package/dist/lib/feed-policy.d.ts +0 -6
- package/dist/lib/feed-policy.js +1 -27
- package/dist/lib/feed-post.d.ts +0 -61
- package/dist/lib/feed-post.js +4 -61
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -64
- package/dist/lib/fleet/apply.js +0 -125
- package/dist/lib/fleet/auth-sync.d.ts +0 -48
- package/dist/lib/fleet/auth-sync.js +4 -49
- package/dist/lib/fleet/capture.d.ts +0 -26
- package/dist/lib/fleet/capture.js +1 -36
- package/dist/lib/fleet/manifest.d.ts +0 -38
- package/dist/lib/fleet/manifest.js +0 -40
- package/dist/lib/fleet/types.d.ts +1 -138
- package/dist/lib/fleet/types.js +0 -12
- package/dist/lib/fleet-cache.d.ts +0 -12
- package/dist/lib/fleet-cache.js +0 -24
- package/dist/lib/fleet-shared-state.d.ts +6 -59
- package/dist/lib/fleet-shared-state.js +5 -51
- package/dist/lib/fleet-status.d.ts +0 -27
- package/dist/lib/fleet-status.js +0 -48
- package/dist/lib/format.d.ts +0 -74
- package/dist/lib/format.js +3 -77
- package/dist/lib/friction-heuristics.d.ts +0 -20
- package/dist/lib/friction-heuristics.js +0 -8
- package/dist/lib/fs-atomic.d.ts +0 -51
- package/dist/lib/fs-atomic.js +8 -66
- package/dist/lib/fs-walk.d.ts +0 -13
- package/dist/lib/fs-walk.js +0 -22
- package/dist/lib/fuzzy.d.ts +0 -29
- package/dist/lib/fuzzy.js +0 -31
- package/dist/lib/gemini-settings.js +0 -12
- package/dist/lib/git.d.ts +0 -366
- package/dist/lib/git.js +7 -574
- package/dist/lib/github/ci-failure.d.ts +30 -0
- package/dist/lib/github/ci-failure.js +95 -0
- package/dist/lib/github/gh-overload.d.ts +0 -38
- package/dist/lib/github/gh-overload.js +3 -55
- package/dist/lib/github/pr-mergeable.d.ts +3 -34
- package/dist/lib/github/pr-mergeable.js +2 -42
- package/dist/lib/github/pr-verdict.d.ts +0 -44
- package/dist/lib/github/pr-verdict.js +0 -36
- package/dist/lib/github/project-prs.d.ts +135 -105
- package/dist/lib/github/project-prs.js +530 -170
- package/dist/lib/github/release-drift.d.ts +45 -0
- package/dist/lib/github/release-drift.js +91 -0
- package/dist/lib/github/rest.d.ts +0 -50
- package/dist/lib/github/rest.js +0 -49
- package/dist/lib/github/viewer.d.ts +27 -0
- package/dist/lib/github/viewer.js +101 -0
- package/dist/lib/goose-commands.d.ts +0 -29
- package/dist/lib/goose-commands.js +3 -48
- package/dist/lib/harness/adapter.d.ts +0 -151
- package/dist/lib/harness/adapter.js +0 -41
- package/dist/lib/harness/adapters/claude.d.ts +0 -8
- package/dist/lib/harness/adapters/claude.js +0 -89
- package/dist/lib/harness/adapters/codex.js +0 -18
- package/dist/lib/harness/adapters/copilot.js +0 -3
- package/dist/lib/harness/adapters/cursor.js +0 -16
- package/dist/lib/harness/adapters/droid.js +0 -3
- package/dist/lib/harness/adapters/kimi.js +0 -19
- package/dist/lib/harness/adapters/muse.js +0 -9
- package/dist/lib/harness/adapters/opencode.js +0 -2
- package/dist/lib/harness/exec-config-version.d.ts +0 -2
- package/dist/lib/harness/exec-config-version.js +0 -13
- package/dist/lib/harness/index.js +0 -10
- package/dist/lib/harness-auth-capabilities.d.ts +0 -26
- package/dist/lib/harness-auth-capabilities.js +0 -18
- package/dist/lib/harness-connection-test.d.ts +0 -27
- package/dist/lib/harness-connection-test.js +2 -20
- package/dist/lib/heal.d.ts +0 -45
- package/dist/lib/heal.js +2 -82
- package/dist/lib/help.d.ts +0 -32
- package/dist/lib/help.js +0 -41
- package/dist/lib/helper-download.d.ts +0 -85
- package/dist/lib/helper-download.js +0 -95
- package/dist/lib/helper-versions.d.ts +0 -51
- package/dist/lib/helper-versions.js +1 -45
- package/dist/lib/hooks/cache.d.ts +0 -40
- package/dist/lib/hooks/cache.js +8 -122
- package/dist/lib/hooks/install.d.ts +0 -253
- package/dist/lib/hooks/install.js +49 -822
- package/dist/lib/hooks/match.d.ts +0 -24
- package/dist/lib/hooks/match.js +0 -31
- package/dist/lib/hooks/profile.d.ts +0 -21
- package/dist/lib/hooks/profile.js +0 -28
- package/dist/lib/hosts/credential-transport.d.ts +0 -6
- package/dist/lib/hosts/credential-transport.js +0 -17
- package/dist/lib/hosts/credentials.d.ts +0 -35
- package/dist/lib/hosts/credentials.js +0 -38
- package/dist/lib/hosts/dispatch.d.ts +0 -140
- package/dist/lib/hosts/dispatch.js +0 -176
- package/dist/lib/hosts/logs.d.ts +0 -25
- package/dist/lib/hosts/logs.js +1 -51
- package/dist/lib/hosts/option.d.ts +0 -12
- package/dist/lib/hosts/option.js +0 -12
- package/dist/lib/hosts/passthrough.d.ts +0 -129
- package/dist/lib/hosts/passthrough.js +12 -249
- package/dist/lib/hosts/progress.d.ts +0 -90
- package/dist/lib/hosts/progress.js +5 -115
- package/dist/lib/hosts/providers/devices.d.ts +0 -19
- package/dist/lib/hosts/providers/devices.js +1 -34
- package/dist/lib/hosts/providers/local.d.ts +0 -14
- package/dist/lib/hosts/providers/local.js +0 -22
- package/dist/lib/hosts/ready.d.ts +0 -99
- package/dist/lib/hosts/ready.js +0 -101
- package/dist/lib/hosts/reconcile.d.ts +0 -38
- package/dist/lib/hosts/reconcile.js +1 -50
- package/dist/lib/hosts/reconnect.d.ts +0 -75
- package/dist/lib/hosts/reconnect.js +0 -98
- package/dist/lib/hosts/registry.d.ts +0 -74
- package/dist/lib/hosts/registry.js +0 -110
- package/dist/lib/hosts/remote-cmd.d.ts +1 -228
- package/dist/lib/hosts/remote-cmd.js +19 -294
- package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +0 -1
- package/dist/lib/hosts/remote-cmd.test-fixture.js +0 -12
- package/dist/lib/hosts/remote-os.d.ts +0 -19
- package/dist/lib/hosts/remote-os.js +0 -22
- package/dist/lib/hosts/remote-session-id.d.ts +0 -22
- package/dist/lib/hosts/remote-session-id.js +0 -24
- package/dist/lib/hosts/routing-flag.d.ts +0 -21
- package/dist/lib/hosts/routing-flag.js +0 -21
- package/dist/lib/hosts/run-target.d.ts +0 -53
- package/dist/lib/hosts/run-target.js +0 -56
- package/dist/lib/hosts/session-index.d.ts +1 -53
- package/dist/lib/hosts/session-index.js +2 -59
- package/dist/lib/hosts/session-marker.d.ts +0 -31
- package/dist/lib/hosts/session-marker.js +0 -32
- package/dist/lib/hosts/ssh-config.d.ts +0 -25
- package/dist/lib/hosts/ssh-config.js +1 -32
- package/dist/lib/hosts/tasks.d.ts +0 -54
- package/dist/lib/hosts/tasks.js +0 -35
- package/dist/lib/hosts/types.d.ts +0 -39
- package/dist/lib/hosts/types.js +0 -22
- package/dist/lib/humans.d.ts +0 -21
- package/dist/lib/humans.js +0 -30
- package/dist/lib/identity/client.d.ts +1 -35
- package/dist/lib/identity/client.js +3 -29
- package/dist/lib/identity/index.d.ts +3 -27
- package/dist/lib/identity/index.js +8 -24
- package/dist/lib/import.d.ts +0 -104
- package/dist/lib/import.js +1 -137
- package/dist/lib/installations/active-check.d.ts +0 -53
- package/dist/lib/installations/active-check.js +0 -49
- package/dist/lib/installations/index.d.ts +0 -9
- package/dist/lib/installations/index.js +0 -9
- package/dist/lib/installations/installation-lock.js +0 -8
- package/dist/lib/installations/launch-gate.d.ts +0 -56
- package/dist/lib/installations/launch-gate.js +0 -83
- package/dist/lib/installations/migrate.d.ts +0 -100
- package/dist/lib/installations/migrate.js +105 -572
- package/dist/lib/installations/native-command.d.ts +0 -1
- package/dist/lib/installations/native-command.js +0 -6
- package/dist/lib/installations/resolve.d.ts +0 -24
- package/dist/lib/installations/resolve.js +0 -24
- package/dist/lib/installations/shims.d.ts +0 -395
- package/dist/lib/installations/shims.js +30 -957
- package/dist/lib/installations/store.d.ts +0 -199
- package/dist/lib/installations/store.js +1 -297
- package/dist/lib/installations/strategies.d.ts +0 -44
- package/dist/lib/installations/strategies.js +0 -87
- package/dist/lib/installations/types.d.ts +1 -67
- package/dist/lib/installations/types.js +0 -6
- package/dist/lib/installations/update-cancellation.d.ts +0 -74
- package/dist/lib/installations/update-cancellation.js +0 -74
- package/dist/lib/installations/update-policy.d.ts +0 -57
- package/dist/lib/installations/update-policy.js +0 -62
- package/dist/lib/installations/update-runtime.d.ts +0 -88
- package/dist/lib/installations/update-runtime.js +1 -127
- package/dist/lib/installations/update.d.ts +0 -53
- package/dist/lib/installations/update.js +0 -95
- package/dist/lib/installations/versions.d.ts +0 -310
- package/dist/lib/installations/versions.js +14 -837
- package/dist/lib/isolation-boundary-report.d.ts +0 -7
- package/dist/lib/isolation-boundary-report.js +0 -7
- package/dist/lib/launch-identity.d.ts +0 -8
- package/dist/lib/launch-identity.js +0 -8
- package/dist/lib/linear-autoclose.d.ts +0 -25
- package/dist/lib/linear-autoclose.js +0 -19
- package/dist/lib/linear-cache.d.ts +0 -57
- package/dist/lib/linear-cache.js +1 -81
- package/dist/lib/linear-project-counts.d.ts +0 -83
- package/dist/lib/linear-project-counts.js +2 -64
- package/dist/lib/linear-projects.d.ts +0 -62
- package/dist/lib/linear-projects.js +0 -85
- package/dist/lib/linear-rate-limit.d.ts +0 -21
- package/dist/lib/linear-rate-limit.js +1 -93
- package/dist/lib/linux-userns.d.ts +1 -42
- package/dist/lib/linux-userns.js +0 -47
- package/dist/lib/lock-compromise.d.ts +0 -7
- package/dist/lib/lock-compromise.js +0 -7
- package/dist/lib/log-follow.d.ts +0 -2
- package/dist/lib/log-follow.js +5 -15
- package/dist/lib/loop.d.ts +0 -106
- package/dist/lib/loop.js +0 -135
- package/dist/lib/machine-id.d.ts +0 -19
- package/dist/lib/machine-id.js +0 -19
- package/dist/lib/mailbox-gc.d.ts +0 -7
- package/dist/lib/mailbox-gc.js +0 -25
- package/dist/lib/mailbox-target.d.ts +0 -31
- package/dist/lib/mailbox-target.js +0 -27
- package/dist/lib/mailbox.d.ts +0 -77
- package/dist/lib/mailbox.js +5 -105
- package/dist/lib/manifest.d.ts +0 -4
- package/dist/lib/manifest.js +0 -36
- package/dist/lib/markdown.d.ts +0 -3
- package/dist/lib/markdown.js +0 -9
- package/dist/lib/mcp-registry.d.ts +1 -50
- package/dist/lib/mcp-registry.js +0 -64
- package/dist/lib/mcp.d.ts +0 -115
- package/dist/lib/mcp.js +3 -199
- package/dist/lib/memory-cache.d.ts +0 -11
- package/dist/lib/memory-cache.js +0 -9
- package/dist/lib/memory.d.ts +0 -52
- package/dist/lib/memory.js +12 -74
- package/dist/lib/menubar/download-menubar.d.ts +0 -35
- package/dist/lib/menubar/download-menubar.js +0 -38
- package/dist/lib/menubar/install-menubar.d.ts +0 -405
- package/dist/lib/menubar/install-menubar.js +25 -667
- package/dist/lib/menubar/migrate-prefs.d.ts +0 -47
- package/dist/lib/menubar/migrate-prefs.js +1 -70
- package/dist/lib/menubar/notify-desktop.d.ts +0 -82
- package/dist/lib/menubar/notify-desktop.js +0 -68
- package/dist/lib/menubar/resolve-version.d.ts +0 -41
- package/dist/lib/menubar/resolve-version.js +2 -44
- package/dist/lib/menubar/snapshot.d.ts +13 -66
- package/dist/lib/menubar/snapshot.js +45 -39
- package/dist/lib/merged-resources.d.ts +0 -10
- package/dist/lib/merged-resources.js +0 -10
- package/dist/lib/migrate-fold.d.ts +0 -31
- package/dist/lib/migrate-fold.js +6 -38
- package/dist/lib/model-tier-overrides.d.ts +0 -30
- package/dist/lib/model-tier-overrides.js +0 -14
- package/dist/lib/model-tiers.d.ts +0 -43
- package/dist/lib/model-tiers.js +5 -78
- package/dist/lib/models.d.ts +0 -145
- package/dist/lib/models.js +3 -333
- package/dist/lib/monitors/config.d.ts +0 -187
- package/dist/lib/monitors/config.js +4 -101
- package/dist/lib/monitors/dispatch.d.ts +0 -22
- package/dist/lib/monitors/dispatch.js +0 -35
- package/dist/lib/monitors/engine.d.ts +1 -53
- package/dist/lib/monitors/engine.js +17 -106
- package/dist/lib/monitors/fingerprint.d.ts +0 -43
- package/dist/lib/monitors/fingerprint.js +0 -57
- package/dist/lib/monitors/pid-watch.d.ts +0 -31
- package/dist/lib/monitors/pid-watch.js +0 -31
- package/dist/lib/monitors/remote.d.ts +0 -52
- package/dist/lib/monitors/remote.js +0 -42
- package/dist/lib/monitors/sources/command.d.ts +2 -9
- package/dist/lib/monitors/sources/command.js +13 -34
- package/dist/lib/monitors/sources/device.d.ts +0 -10
- package/dist/lib/monitors/sources/device.js +0 -14
- package/dist/lib/monitors/sources/failure.d.ts +0 -27
- package/dist/lib/monitors/sources/failure.js +0 -27
- package/dist/lib/monitors/sources/file.d.ts +0 -10
- package/dist/lib/monitors/sources/file.js +0 -11
- package/dist/lib/monitors/sources/http.d.ts +0 -7
- package/dist/lib/monitors/sources/http.js +0 -9
- package/dist/lib/monitors/sources/index.d.ts +0 -9
- package/dist/lib/monitors/sources/index.js +0 -9
- package/dist/lib/monitors/sources/poll.d.ts +0 -8
- package/dist/lib/monitors/sources/poll.js +0 -8
- package/dist/lib/monitors/sources/types.d.ts +0 -18
- package/dist/lib/monitors/sources/types.js +0 -8
- package/dist/lib/monitors/sources/webhook.d.ts +0 -7
- package/dist/lib/monitors/sources/webhook.js +0 -7
- package/dist/lib/monitors/sources/ws.d.ts +0 -10
- package/dist/lib/monitors/sources/ws.js +3 -13
- package/dist/lib/monitors/state.d.ts +0 -132
- package/dist/lib/monitors/state.js +2 -86
- package/dist/lib/native-accounts.d.ts +0 -32
- package/dist/lib/native-accounts.js +0 -17
- package/dist/lib/net-close.d.ts +0 -9
- package/dist/lib/net-close.js +0 -5
- package/dist/lib/notify.d.ts +0 -47
- package/dist/lib/notify.js +0 -30
- package/dist/lib/onepassword.d.ts +0 -14
- package/dist/lib/onepassword.js +0 -12
- package/dist/lib/open-url.d.ts +0 -38
- package/dist/lib/open-url.js +1 -69
- package/dist/lib/openclaw-keychain.js +2 -7
- package/dist/lib/operator.d.ts +0 -9
- package/dist/lib/operator.js +0 -34
- package/dist/lib/origin-machine.d.ts +0 -16
- package/dist/lib/origin-machine.js +0 -16
- package/dist/lib/output/git-output.d.ts +0 -31
- package/dist/lib/output/git-output.js +4 -43
- package/dist/lib/overdue.d.ts +0 -35
- package/dist/lib/overdue.js +0 -60
- package/dist/lib/owner-message.d.ts +0 -20
- package/dist/lib/owner-message.js +1 -40
- package/dist/lib/packages/output-home.d.ts +0 -28
- package/dist/lib/packages/output-home.js +0 -114
- package/dist/lib/paths.d.ts +0 -26
- package/dist/lib/paths.js +1 -27
- package/dist/lib/percentile.d.ts +0 -11
- package/dist/lib/percentile.js +0 -11
- package/dist/lib/perf/db.d.ts +0 -16
- package/dist/lib/perf/db.js +3 -32
- package/dist/lib/perf/spool.d.ts +0 -12
- package/dist/lib/perf/spool.js +0 -13
- package/dist/lib/perf/types.d.ts +0 -26
- package/dist/lib/perf/types.js +0 -1
- package/dist/lib/permissions-registry.d.ts +0 -48
- package/dist/lib/permissions-registry.js +0 -108
- package/dist/lib/permissions.d.ts +0 -215
- package/dist/lib/permissions.js +4 -407
- package/dist/lib/picker.d.ts +0 -124
- package/dist/lib/picker.js +0 -140
- package/dist/lib/placement.d.ts +0 -57
- package/dist/lib/placement.js +0 -47
- package/dist/lib/platform/exec.d.ts +0 -73
- package/dist/lib/platform/exec.js +0 -80
- package/dist/lib/platform/index.d.ts +0 -14
- package/dist/lib/platform/index.js +0 -14
- package/dist/lib/platform/ipc.d.ts +0 -10
- package/dist/lib/platform/ipc.js +0 -13
- package/dist/lib/platform/links.d.ts +0 -14
- package/dist/lib/platform/links.js +0 -25
- package/dist/lib/platform/paths.d.ts +0 -48
- package/dist/lib/platform/paths.js +0 -52
- package/dist/lib/platform/posixpath.d.ts +0 -18
- package/dist/lib/platform/posixpath.js +0 -62
- package/dist/lib/platform/process.d.ts +0 -67
- package/dist/lib/platform/process.js +5 -99
- package/dist/lib/platform/winpath.d.ts +0 -50
- package/dist/lib/platform/winpath.js +0 -81
- package/dist/lib/plugins/plugin-marketplace.d.ts +0 -165
- package/dist/lib/plugins/plugin-marketplace.js +10 -238
- package/dist/lib/plugins/plugins.d.ts +0 -238
- package/dist/lib/plugins/plugins.js +20 -454
- package/dist/lib/plugins/skills.d.ts +0 -86
- package/dist/lib/plugins/skills.js +1 -139
- package/dist/lib/pr-land-detach.d.ts +0 -17
- package/dist/lib/pr-land-detach.js +0 -30
- package/dist/lib/pricing/cost.d.ts +0 -29
- package/dist/lib/pricing/cost.js +0 -38
- package/dist/lib/pricing/index.d.ts +0 -6
- package/dist/lib/pricing/index.js +0 -6
- package/dist/lib/pricing/table.d.ts +0 -8
- package/dist/lib/pricing/table.js +3 -56
- package/dist/lib/probe.d.ts +0 -5
- package/dist/lib/probe.js +0 -40
- package/dist/lib/profiles-presets.d.ts +0 -20
- package/dist/lib/profiles-presets.js +1 -36
- package/dist/lib/profiles.d.ts +0 -185
- package/dist/lib/profiles.js +1 -158
- package/dist/lib/project-doctor.d.ts +0 -29
- package/dist/lib/project-doctor.js +0 -26
- package/dist/lib/project-focus.d.ts +0 -41
- package/dist/lib/project-focus.js +0 -49
- package/dist/lib/project-import.d.ts +0 -41
- package/dist/lib/project-import.js +0 -36
- package/dist/lib/project-key.d.ts +0 -65
- package/dist/lib/project-key.js +0 -70
- package/dist/lib/project-launch.d.ts +0 -49
- package/dist/lib/project-launch.js +2 -91
- package/dist/lib/project-probe.d.ts +0 -86
- package/dist/lib/project-probe.js +1 -88
- package/dist/lib/project-pull.d.ts +0 -96
- package/dist/lib/project-pull.js +0 -122
- package/dist/lib/project-resources.d.ts +0 -44
- package/dist/lib/project-resources.js +7 -171
- package/dist/lib/project-root.d.ts +0 -95
- package/dist/lib/project-root.js +0 -101
- package/dist/lib/project-schedule.d.ts +0 -43
- package/dist/lib/project-schedule.js +0 -52
- package/dist/lib/project-status.d.ts +0 -108
- package/dist/lib/project-status.js +0 -117
- package/dist/lib/projects.d.ts +0 -197
- package/dist/lib/projects.js +1 -213
- package/dist/lib/pwsh.d.ts +0 -41
- package/dist/lib/pwsh.js +0 -51
- package/dist/lib/quick-todo.d.ts +84 -0
- package/dist/lib/quick-todo.js +243 -0
- package/dist/lib/reconcile-and-repair.d.ts +0 -78
- package/dist/lib/reconcile-and-repair.js +3 -66
- package/dist/lib/redact.d.ts +0 -29
- package/dist/lib/redact.js +0 -54
- package/dist/lib/refresh-coordinator.d.ts +0 -15
- package/dist/lib/refresh-coordinator.js +0 -10
- package/dist/lib/refresh.d.ts +0 -39
- package/dist/lib/refresh.js +0 -45
- package/dist/lib/registry.d.ts +0 -65
- package/dist/lib/registry.js +0 -127
- package/dist/lib/reminders.d.ts +0 -21
- package/dist/lib/reminders.js +0 -30
- package/dist/lib/remote-agents-json.d.ts +0 -44
- package/dist/lib/remote-agents-json.js +1 -44
- package/dist/lib/reserved-stores.d.ts +0 -28
- package/dist/lib/reserved-stores.js +2 -28
- package/dist/lib/resource-aliases.d.ts +0 -12
- package/dist/lib/resource-aliases.js +0 -12
- package/dist/lib/resource-content-diff.d.ts +0 -28
- package/dist/lib/resource-content-diff.js +7 -34
- package/dist/lib/resource-inventory.d.ts +0 -51
- package/dist/lib/resource-inventory.js +0 -45
- package/dist/lib/resource-patterns.d.ts +0 -32
- package/dist/lib/resource-patterns.js +0 -34
- package/dist/lib/resource-profiles.d.ts +0 -7
- package/dist/lib/resource-profiles.js +0 -11
- package/dist/lib/resources/types.d.ts +0 -50
- package/dist/lib/resources/types.js +0 -7
- package/dist/lib/resources/workflows.d.ts +0 -7
- package/dist/lib/resources/workflows.js +0 -13
- package/dist/lib/resources.d.ts +0 -65
- package/dist/lib/resources.js +0 -78
- package/dist/lib/routers.d.ts +0 -67
- package/dist/lib/routers.js +0 -60
- package/dist/lib/routine-activation.d.ts +0 -23
- package/dist/lib/routine-activation.js +0 -24
- package/dist/lib/routine-context.d.ts +1 -91
- package/dist/lib/routine-context.js +0 -107
- package/dist/lib/routine-notify-owner.d.ts +0 -79
- package/dist/lib/routine-notify-owner.js +1 -103
- package/dist/lib/routine-notify.d.ts +0 -70
- package/dist/lib/routine-notify.js +1 -75
- package/dist/lib/routine-process-cleanup.d.ts +0 -1
- package/dist/lib/routine-process-cleanup.js +1 -4
- package/dist/lib/routine-readiness.d.ts +0 -63
- package/dist/lib/routine-readiness.js +4 -86
- package/dist/lib/routines-format.d.ts +0 -40
- package/dist/lib/routines-format.js +0 -67
- package/dist/lib/routines-placement.d.ts +0 -33
- package/dist/lib/routines-placement.js +0 -40
- package/dist/lib/routines-project.d.ts +0 -57
- package/dist/lib/routines-project.js +6 -80
- package/dist/lib/rules/compile.d.ts +0 -66
- package/dist/lib/rules/compile.js +6 -118
- package/dist/lib/rules/compose.d.ts +0 -56
- package/dist/lib/rules/compose.js +2 -83
- package/dist/lib/rules/rules.d.ts +0 -23
- package/dist/lib/rules/rules.js +0 -35
- package/dist/lib/rules/run-sync.d.ts +0 -16
- package/dist/lib/rules/run-sync.js +1 -44
- package/dist/lib/run-config.d.ts +0 -7
- package/dist/lib/run-config.js +0 -8
- package/dist/lib/run-defaults.d.ts +0 -14
- package/dist/lib/run-defaults.js +0 -14
- package/dist/lib/run-notify.d.ts +0 -18
- package/dist/lib/run-notify.js +0 -36
- package/dist/lib/run-trace-sync.d.ts +0 -21
- package/dist/lib/run-trace-sync.js +2 -66
- package/dist/lib/rush-session.d.ts +0 -26
- package/dist/lib/rush-session.js +0 -28
- package/dist/lib/sandbox.d.ts +0 -45
- package/dist/lib/sandbox.js +5 -93
- package/dist/lib/scheduler.d.ts +0 -28
- package/dist/lib/scheduler.js +0 -45
- package/dist/lib/scheduling/routines.d.ts +0 -652
- package/dist/lib/scheduling/routines.js +8 -475
- package/dist/lib/secrets-cli.d.ts +3 -8
- package/dist/lib/secrets-cli.js +1 -19
- package/dist/lib/secrets-client.d.ts +0 -117
- package/dist/lib/secrets-client.js +4 -275
- package/dist/lib/secrets-policy.d.ts +0 -142
- package/dist/lib/secrets-policy.js +4 -237
- package/dist/lib/secrets-types.d.ts +0 -87
- package/dist/lib/secrets-types.js +0 -13
- package/dist/lib/self-heal/checks/hook-manifest.js +0 -25
- package/dist/lib/self-heal/checks/hook-runtime.js +0 -5
- package/dist/lib/self-heal/checks/install-staging.d.ts +0 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -28
- package/dist/lib/self-heal/checks/menubar-helper.js +0 -5
- package/dist/lib/self-heal/checks/path.js +0 -9
- package/dist/lib/self-heal/checks/resources.js +0 -5
- package/dist/lib/self-heal/checks/shadowing.js +2 -16
- package/dist/lib/self-heal/checks/shims.js +0 -14
- package/dist/lib/self-heal/child.d.ts +12 -0
- package/dist/lib/self-heal/child.js +23 -0
- package/dist/lib/self-heal/registry.d.ts +0 -9
- package/dist/lib/self-heal/registry.js +0 -16
- package/dist/lib/self-heal/types.d.ts +0 -12
- package/dist/lib/self-heal/types.js +0 -15
- package/dist/lib/self-update.d.ts +0 -312
- package/dist/lib/self-update.js +9 -360
- package/dist/lib/service-manifest.d.ts +0 -39
- package/dist/lib/service-manifest.js +0 -72
- package/dist/lib/session/active.d.ts +13 -869
- package/dist/lib/session/active.js +17 -976
- package/dist/lib/session/actor-sidecar.d.ts +1 -32
- package/dist/lib/session/actor-sidecar.js +1 -41
- package/dist/lib/session/bookmarks.d.ts +0 -33
- package/dist/lib/session/bookmarks.js +0 -37
- package/dist/lib/session/bundle.d.ts +0 -86
- package/dist/lib/session/bundle.js +0 -54
- package/dist/lib/session/claude-accounts.d.ts +0 -40
- package/dist/lib/session/claude-accounts.js +0 -49
- package/dist/lib/session/cloud.d.ts +1 -23
- package/dist/lib/session/cloud.js +0 -26
- package/dist/lib/session/db.d.ts +5 -658
- package/dist/lib/session/db.js +22 -1443
- package/dist/lib/session/detached.d.ts +0 -21
- package/dist/lib/session/detached.js +0 -29
- package/dist/lib/session/discover.d.ts +3 -420
- package/dist/lib/session/discover.js +30 -1123
- package/dist/lib/session/fork.d.ts +1 -41
- package/dist/lib/session/fork.js +0 -19
- package/dist/lib/session/ghostty-tabs.d.ts +0 -24
- package/dist/lib/session/ghostty-tabs.js +0 -37
- package/dist/lib/session/glance-files.d.ts +19 -0
- package/dist/lib/session/glance-files.js +258 -0
- package/dist/lib/session/hook-sessions.d.ts +0 -33
- package/dist/lib/session/hook-sessions.js +4 -99
- package/dist/lib/session/host-link.d.ts +1 -94
- package/dist/lib/session/host-link.js +1 -81
- package/dist/lib/session/inject-target.d.ts +8 -0
- package/dist/lib/session/inject-target.js +32 -0
- package/dist/lib/session/inject.d.ts +0 -15
- package/dist/lib/session/inject.js +0 -15
- package/dist/lib/session/live-metadata.d.ts +1 -34
- package/dist/lib/session/live-metadata.js +1 -73
- package/dist/lib/session/local-tmux-attach.d.ts +0 -37
- package/dist/lib/session/local-tmux-attach.js +1 -76
- package/dist/lib/session/migrate-targets.d.ts +0 -46
- package/dist/lib/session/migrate-targets.js +0 -24
- package/dist/lib/session/migrations.d.ts +0 -12
- package/dist/lib/session/migrations.js +1 -20
- package/dist/lib/session/mirror.d.ts +0 -32
- package/dist/lib/session/mirror.js +0 -77
- package/dist/lib/session/origin-machine.js +0 -3
- package/dist/lib/session/pid-registry.d.ts +0 -80
- package/dist/lib/session/pid-registry.js +2 -81
- package/dist/lib/session/presence.d.ts +0 -39
- package/dist/lib/session/presence.js +2 -52
- package/dist/lib/session/process-view.d.ts +0 -11
- package/dist/lib/session/process-view.js +0 -25
- package/dist/lib/session/projection.d.ts +0 -3
- package/dist/lib/session/projection.js +0 -10
- package/dist/lib/session/provenance.d.ts +1 -37
- package/dist/lib/session/provenance.js +0 -69
- package/dist/lib/session/recovery.d.ts +1 -40
- package/dist/lib/session/recovery.js +2 -80
- package/dist/lib/session/relative-time.js +0 -3
- package/dist/lib/session/remote/peer-stream.d.ts +0 -42
- package/dist/lib/session/remote/peer-stream.js +0 -64
- package/dist/lib/session/remote/remote-bundle.d.ts +0 -6
- package/dist/lib/session/remote/remote-bundle.js +0 -21
- package/dist/lib/session/remote/remote-list.d.ts +1 -110
- package/dist/lib/session/remote/remote-list.js +5 -139
- package/dist/lib/session/remote/remote.d.ts +0 -98
- package/dist/lib/session/remote/remote.js +3 -119
- package/dist/lib/session/remote/watch.d.ts +1 -34
- package/dist/lib/session/remote/watch.js +12 -72
- package/dist/lib/session/remote-active.d.ts +0 -35
- package/dist/lib/session/remote-active.js +0 -48
- package/dist/lib/session/remote-bundle.js +0 -2
- package/dist/lib/session/remote-list.js +0 -2
- package/dist/lib/session/remote-preview-cache.d.ts +0 -7
- package/dist/lib/session/remote-preview-cache.js +1 -76
- package/dist/lib/session/remote.js +0 -2
- package/dist/lib/session/resume-command.d.ts +0 -6
- package/dist/lib/session/resume-command.js +0 -6
- package/dist/lib/session/resume-owner.d.ts +1 -52
- package/dist/lib/session/resume-owner.js +0 -56
- package/dist/lib/session/run-names.d.ts +0 -24
- package/dist/lib/session/run-names.js +0 -26
- package/dist/lib/session/session-cache.d.ts +2 -146
- package/dist/lib/session/session-cache.js +26 -203
- package/dist/lib/session/short-id.js +0 -3
- package/dist/lib/session/sync/agents.d.ts +0 -68
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +0 -39
- package/dist/lib/session/sync/backend.js +0 -45
- package/dist/lib/session/sync/config.d.ts +0 -27
- package/dist/lib/session/sync/config.js +0 -56
- package/dist/lib/session/sync/managed-config.d.ts +0 -17
- package/dist/lib/session/sync/managed-config.js +0 -17
- package/dist/lib/session/sync/managed-key.d.ts +0 -38
- package/dist/lib/session/sync/managed-key.js +1 -42
- package/dist/lib/session/sync/net-client.d.ts +0 -36
- package/dist/lib/session/sync/net-client.js +0 -30
- package/dist/lib/session/sync/provision.d.ts +0 -2
- package/dist/lib/session/sync/provision.js +0 -13
- package/dist/lib/session/sync/r2.d.ts +0 -20
- package/dist/lib/session/sync/r2.js +0 -20
- package/dist/lib/session/sync/transcript-crypto.d.ts +0 -37
- package/dist/lib/session/sync/transcript-crypto.js +5 -37
- package/dist/lib/session/sync/worker-template.d.ts +0 -5
- package/dist/lib/session/sync/worker-template.js +0 -40
- package/dist/lib/session/testdata/pid-registry-namespace.js +0 -2
- package/dist/lib/session/testdata/process-view-private.js +0 -1
- package/dist/lib/session/throughput.d.ts +0 -24
- package/dist/lib/session/throughput.js +1 -25
- package/dist/lib/session/timeline-pass.d.ts +1 -63
- package/dist/lib/session/timeline-pass.js +161 -148
- package/dist/lib/session/title.d.ts +0 -182
- package/dist/lib/session/title.js +0 -139
- package/dist/lib/session/tool-index.d.ts +2 -21
- package/dist/lib/session/tool-index.js +3 -75
- package/dist/lib/session/tool-store.d.ts +2 -48
- package/dist/lib/session/tool-store.js +1 -33
- package/dist/lib/session/viewing-in.d.ts +0 -67
- package/dist/lib/session/viewing-in.js +1 -71
- package/dist/lib/session/watch.js +0 -2
- package/dist/lib/session/width.js +0 -3
- package/dist/lib/sessions-client.d.ts +0 -46
- package/dist/lib/sessions-client.js +36 -113
- package/dist/lib/settings-manifest.d.ts +1 -17
- package/dist/lib/settings-manifest.js +4 -57
- package/dist/lib/setup-tool-install.d.ts +0 -1
- package/dist/lib/setup-tool-install.js +2 -7
- package/dist/lib/setup-tool-status.d.ts +0 -3
- package/dist/lib/setup-tool-status.js +4 -14
- package/dist/lib/sha256-asset.d.ts +0 -20
- package/dist/lib/sha256-asset.js +0 -20
- package/dist/lib/share-runtime.d.ts +0 -10
- package/dist/lib/share-runtime.js +1 -27
- package/dist/lib/shim-heal.d.ts +0 -15
- package/dist/lib/shim-heal.js +3 -29
- package/dist/lib/signin-badge.d.ts +0 -72
- package/dist/lib/signin-badge.js +0 -86
- package/dist/lib/sink-format.d.ts +0 -32
- package/dist/lib/sink-format.js +0 -14
- package/dist/lib/smart-launch.d.ts +0 -75
- package/dist/lib/smart-launch.js +1 -83
- package/dist/lib/snapshot.d.ts +0 -46
- package/dist/lib/snapshot.js +5 -31
- package/dist/lib/spinner.d.ts +0 -37
- package/dist/lib/spinner.js +0 -37
- package/dist/lib/sqlite.d.ts +0 -13
- package/dist/lib/sqlite.js +3 -71
- package/dist/lib/ssh-exec.d.ts +0 -209
- package/dist/lib/ssh-exec.js +11 -248
- package/dist/lib/ssh-tunnel.d.ts +0 -43
- package/dist/lib/ssh-tunnel.js +2 -48
- package/dist/lib/staleness/checkers/commands.d.ts +0 -4
- package/dist/lib/staleness/checkers/commands.js +0 -4
- package/dist/lib/staleness/checkers/hooks.d.ts +0 -10
- package/dist/lib/staleness/checkers/hooks.js +0 -15
- package/dist/lib/staleness/checkers/mcp.d.ts +0 -9
- package/dist/lib/staleness/checkers/mcp.js +0 -9
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -12
- package/dist/lib/staleness/checkers/permissions.js +0 -13
- package/dist/lib/staleness/checkers/plugins.d.ts +0 -8
- package/dist/lib/staleness/checkers/plugins.js +0 -8
- package/dist/lib/staleness/checkers/rules.d.ts +0 -15
- package/dist/lib/staleness/checkers/rules.js +0 -26
- package/dist/lib/staleness/checkers/skills.d.ts +0 -4
- package/dist/lib/staleness/checkers/skills.js +0 -4
- package/dist/lib/staleness/checkers/subagents.d.ts +0 -9
- package/dist/lib/staleness/checkers/subagents.js +0 -9
- package/dist/lib/staleness/checkers/types.d.ts +0 -34
- package/dist/lib/staleness/checkers/types.js +0 -19
- package/dist/lib/staleness/checkers/workflows.d.ts +0 -7
- package/dist/lib/staleness/checkers/workflows.js +0 -7
- package/dist/lib/staleness/detectors/commands.js +0 -17
- package/dist/lib/staleness/detectors/hooks.js +1 -6
- package/dist/lib/staleness/detectors/mcp.js +0 -4
- package/dist/lib/staleness/detectors/permissions.js +10 -23
- package/dist/lib/staleness/detectors/rules.js +0 -6
- package/dist/lib/staleness/detectors/skills.d.ts +0 -1
- package/dist/lib/staleness/detectors/skills.js +1 -12
- package/dist/lib/staleness/detectors/types.d.ts +0 -10
- package/dist/lib/staleness/fingerprint.d.ts +0 -19
- package/dist/lib/staleness/fingerprint.js +0 -35
- package/dist/lib/staleness/index.d.ts +0 -28
- package/dist/lib/staleness/index.js +1 -45
- package/dist/lib/staleness/layers.d.ts +0 -23
- package/dist/lib/staleness/layers.js +0 -34
- package/dist/lib/staleness/prune.d.ts +0 -71
- package/dist/lib/staleness/prune.js +2 -27
- package/dist/lib/staleness/registry.d.ts +0 -10
- package/dist/lib/staleness/registry.js +3 -33
- package/dist/lib/staleness/types.d.ts +0 -36
- package/dist/lib/staleness/types.js +0 -5
- package/dist/lib/staleness/writers/commands.js +1 -48
- package/dist/lib/staleness/writers/hooks.js +1 -18
- package/dist/lib/staleness/writers/kinds.d.ts +0 -12
- package/dist/lib/staleness/writers/kinds.js +0 -1
- package/dist/lib/staleness/writers/lazy-map.d.ts +0 -11
- package/dist/lib/staleness/writers/mcp.js +0 -13
- package/dist/lib/staleness/writers/plugins.js +0 -4
- package/dist/lib/staleness/writers/rules.d.ts +0 -1
- package/dist/lib/staleness/writers/rules.js +1 -19
- package/dist/lib/staleness/writers/skills.js +3 -14
- package/dist/lib/staleness/writers/sources.d.ts +0 -11
- package/dist/lib/staleness/writers/sources.js +0 -32
- package/dist/lib/staleness/writers/subagents.js +0 -16
- package/dist/lib/staleness/writers/types.d.ts +0 -58
- package/dist/lib/staleness/writers/workflows.js +1 -1
- package/dist/lib/standalone-tools.d.ts +24 -0
- package/dist/lib/standalone-tools.js +58 -0
- package/dist/lib/star-nudge.d.ts +0 -32
- package/dist/lib/star-nudge.js +2 -36
- package/dist/lib/startup/command-registry.d.ts +0 -45
- package/dist/lib/startup/command-registry.js +1 -46
- package/dist/lib/startup/dev-build.d.ts +0 -9
- package/dist/lib/startup/dev-build.js +1 -42
- package/dist/lib/startup/root-command.d.ts +0 -19
- package/dist/lib/startup/root-command.js +0 -19
- package/dist/lib/startup/spellcheck.d.ts +0 -13
- package/dist/lib/startup/spellcheck.js +0 -13
- package/dist/lib/state.d.ts +0 -376
- package/dist/lib/state.js +19 -737
- package/dist/lib/storage/selection.d.ts +0 -40
- package/dist/lib/storage/selection.js +0 -29
- package/dist/lib/subagents-registry.d.ts +0 -56
- package/dist/lib/subagents-registry.js +0 -99
- package/dist/lib/subagents.d.ts +0 -128
- package/dist/lib/subagents.js +1 -158
- package/dist/lib/summarizer/config.d.ts +0 -37
- package/dist/lib/summarizer/config.js +0 -37
- package/dist/lib/summarizer/pass.d.ts +0 -20
- package/dist/lib/summarizer/pass.js +1 -34
- package/dist/lib/summarizer/summarize.d.ts +1 -49
- package/dist/lib/summarizer/summarize.js +0 -35
- package/dist/lib/sync-passphrase.d.ts +0 -16
- package/dist/lib/sync-passphrase.js +1 -18
- package/dist/lib/sync-status.d.ts +0 -72
- package/dist/lib/sync-status.js +0 -55
- package/dist/lib/sync-umbrella.d.ts +0 -54
- package/dist/lib/sync-umbrella.js +0 -48
- package/dist/lib/system-run-sync.d.ts +0 -5
- package/dist/lib/system-run-sync.js +1 -31
- package/dist/lib/teams/agents.d.ts +1 -444
- package/dist/lib/teams/agents.js +11 -871
- package/dist/lib/teams/api.d.ts +2 -52
- package/dist/lib/teams/api.js +4 -63
- package/dist/lib/teams/debug.d.ts +0 -6
- package/dist/lib/teams/debug.js +0 -6
- package/dist/lib/teams/delivery.d.ts +0 -41
- package/dist/lib/teams/delivery.js +0 -32
- package/dist/lib/teams/file_ops.d.ts +0 -11
- package/dist/lib/teams/file_ops.js +0 -11
- package/dist/lib/teams/forEach.d.ts +0 -76
- package/dist/lib/teams/forEach.js +1 -77
- package/dist/lib/teams/index.d.ts +1 -7
- package/dist/lib/teams/index.js +1 -7
- package/dist/lib/teams/parsers.d.ts +0 -4
- package/dist/lib/teams/parsers.js +0 -81
- package/dist/lib/teams/persistence.d.ts +0 -2
- package/dist/lib/teams/persistence.js +0 -12
- package/dist/lib/teams/placement-probe.d.ts +0 -12
- package/dist/lib/teams/placement-probe.js +1 -51
- package/dist/lib/teams/pr-watch.d.ts +0 -107
- package/dist/lib/teams/pr-watch.js +1 -107
- package/dist/lib/teams/registry.d.ts +0 -36
- package/dist/lib/teams/registry.js +0 -47
- package/dist/lib/teams/remoteWorktree.d.ts +0 -50
- package/dist/lib/teams/remoteWorktree.js +1 -96
- package/dist/lib/teams/scheduler.d.ts +0 -111
- package/dist/lib/teams/scheduler.js +2 -125
- package/dist/lib/teams/summarizer.d.ts +0 -22
- package/dist/lib/teams/summarizer.js +6 -50
- package/dist/lib/teams/supervisor.d.ts +0 -38
- package/dist/lib/teams/supervisor.js +0 -21
- package/dist/lib/teams/worktree.d.ts +0 -95
- package/dist/lib/teams/worktree.js +3 -110
- package/dist/lib/template.d.ts +0 -21
- package/dist/lib/template.js +0 -23
- package/dist/lib/term-client.d.ts +0 -26
- package/dist/lib/term-client.js +0 -48
- package/dist/lib/term-driver.d.ts +0 -5
- package/dist/lib/term-driver.js +0 -8
- package/dist/lib/terminal/backends/ghostty.d.ts +0 -2
- package/dist/lib/terminal/backends/ghostty.js +0 -12
- package/dist/lib/terminal/backends/index.d.ts +0 -17
- package/dist/lib/terminal/backends/index.js +0 -15
- package/dist/lib/terminal/backends/iterm.d.ts +0 -2
- package/dist/lib/terminal/backends/iterm.js +0 -10
- package/dist/lib/terminal/backends/terminal-app.d.ts +0 -10
- package/dist/lib/terminal/backends/terminal-app.js +0 -30
- package/dist/lib/terminal/backends/tmux.d.ts +0 -10
- package/dist/lib/terminal/backends/tmux.js +0 -2
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +0 -25
- package/dist/lib/terminal/backends/vscodium-agent.js +0 -36
- package/dist/lib/terminal/engine.d.ts +0 -17
- package/dist/lib/terminal/engine.js +0 -10
- package/dist/lib/terminal/index.d.ts +0 -8
- package/dist/lib/terminal/inject.d.ts +1 -173
- package/dist/lib/terminal/inject.js +0 -146
- package/dist/lib/terminal/policy.d.ts +0 -8
- package/dist/lib/terminal/policy.js +0 -1
- package/dist/lib/terminal/preferred.d.ts +0 -66
- package/dist/lib/terminal/preferred.js +0 -30
- package/dist/lib/terminal/quote.d.ts +0 -8
- package/dist/lib/terminal/quote.js +0 -8
- package/dist/lib/terminal/resolve.d.ts +0 -46
- package/dist/lib/terminal/resolve.js +0 -30
- package/dist/lib/terminal/run-surface.d.ts +0 -56
- package/dist/lib/terminal/run-surface.js +0 -46
- package/dist/lib/terminal/shell.d.ts +0 -3
- package/dist/lib/terminal/shell.js +0 -13
- package/dist/lib/terminal/transport.d.ts +0 -14
- package/dist/lib/terminal/transport.js +1 -30
- package/dist/lib/terminal/types.d.ts +0 -40
- package/dist/lib/terminal/types.js +0 -10
- package/dist/lib/text/relative-time.d.ts +0 -36
- package/dist/lib/text/relative-time.js +0 -43
- package/dist/lib/text/short-id.d.ts +0 -16
- package/dist/lib/text/short-id.js +0 -16
- package/dist/lib/text/width.d.ts +0 -24
- package/dist/lib/text/width.js +10 -52
- package/dist/lib/tmux/binary.d.ts +0 -36
- package/dist/lib/tmux/binary.js +0 -28
- package/dist/lib/tmux/index.d.ts +0 -5
- package/dist/lib/tmux/index.js +0 -5
- package/dist/lib/tmux/orphan-reap.d.ts +0 -253
- package/dist/lib/tmux/orphan-reap.js +3 -299
- package/dist/lib/tmux/paths.d.ts +0 -14
- package/dist/lib/tmux/paths.js +0 -14
- package/dist/lib/tmux/session.d.ts +0 -263
- package/dist/lib/tmux/session.js +6 -344
- package/dist/lib/traces/backend.d.ts +0 -20
- package/dist/lib/traces/backend.js +0 -23
- package/dist/lib/traces/classify.d.ts +0 -20
- package/dist/lib/traces/classify.js +0 -7
- package/dist/lib/traces/insights.d.ts +1 -84
- package/dist/lib/traces/insights.js +0 -126
- package/dist/lib/traces/phenotype.d.ts +0 -69
- package/dist/lib/traces/phenotype.js +0 -150
- package/dist/lib/traces/provision.d.ts +0 -1
- package/dist/lib/traces/provision.js +0 -5
- package/dist/lib/traces/schema2-build.d.ts +3 -60
- package/dist/lib/traces/schema2-build.js +8 -149
- package/dist/lib/traces/schema2-danger.d.ts +0 -30
- package/dist/lib/traces/schema2-danger.js +1 -63
- package/dist/lib/traces/schema2.d.ts +0 -11
- package/dist/lib/traces/segments.d.ts +0 -44
- package/dist/lib/traces/segments.js +0 -65
- package/dist/lib/traces/sync.d.ts +2 -239
- package/dist/lib/traces/sync.js +15 -237
- package/dist/lib/traces/worker-template.d.ts +0 -3
- package/dist/lib/traces/worker-template.js +0 -29
- package/dist/lib/triggers/handlers.d.ts +0 -82
- package/dist/lib/triggers/handlers.js +0 -75
- package/dist/lib/triggers/webhook.d.ts +0 -158
- package/dist/lib/triggers/webhook.js +0 -143
- package/dist/lib/types.d.ts +0 -736
- package/dist/lib/types.js +0 -50
- package/dist/lib/uninstall.d.ts +0 -17
- package/dist/lib/uninstall.js +0 -75
- package/dist/lib/usage-backoff.d.ts +0 -20
- package/dist/lib/usage-backoff.js +3 -60
- package/dist/lib/usage-refresh.d.ts +0 -154
- package/dist/lib/usage-refresh.js +8 -212
- package/dist/lib/verbs.d.ts +0 -12
- package/dist/lib/verbs.js +0 -12
- package/dist/lib/version-duplicates.d.ts +0 -6
- package/dist/lib/version-duplicates.js +0 -6
- package/dist/lib/version.d.ts +0 -55
- package/dist/lib/version.js +1 -58
- package/dist/lib/view-types.d.ts +0 -48
- package/dist/lib/warn-unpushed.d.ts +0 -27
- package/dist/lib/warn-unpushed.js +1 -45
- package/dist/lib/watchdog/history.d.ts +0 -1
- package/dist/lib/watchdog/history.js +0 -3
- package/dist/lib/watchdog/index.js +0 -2
- package/dist/lib/watchdog/log.d.ts +0 -19
- package/dist/lib/watchdog/log.js +0 -34
- package/dist/lib/watchdog/read.d.ts +0 -27
- package/dist/lib/watchdog/read.js +3 -58
- package/dist/lib/watchdog/rotate.d.ts +0 -139
- package/dist/lib/watchdog/rotate.js +2 -151
- package/dist/lib/watchdog/runner.d.ts +0 -125
- package/dist/lib/watchdog/runner.js +3 -223
- package/dist/lib/watchdog/service.d.ts +0 -1
- package/dist/lib/watchdog/service.js +0 -2
- package/dist/lib/watchdog/watchdog-agent.d.ts +0 -31
- package/dist/lib/watchdog/watchdog-agent.js +0 -27
- package/dist/lib/watchdog/watchdog.d.ts +0 -7
- package/dist/lib/watchdog/watchdog.js +0 -10
- package/dist/lib/watchdog/watchdogTail.js +0 -7
- package/dist/lib/whats-new.d.ts +0 -10
- package/dist/lib/whats-new.js +0 -21
- package/dist/lib/workflows-registry.d.ts +0 -45
- package/dist/lib/workflows-registry.js +0 -60
- package/dist/lib/workflows.d.ts +0 -282
- package/dist/lib/workflows.js +3 -213
- package/dist/lib/worktree/held.d.ts +0 -89
- package/dist/lib/worktree/held.js +1 -103
- package/dist/lib/wrap.d.ts +0 -32
- package/dist/lib/wrap.js +0 -32
- package/dist/lib/yaml-io.d.ts +0 -45
- package/dist/lib/yaml-io.js +0 -47
- package/dist/session-tracker/dist/adapters/claude.js +0 -2
- package/dist/session-tracker/dist/hook.sh +4 -37
- package/dist/session-tracker/dist/index.d.ts +0 -7
- package/dist/session-tracker/dist/index.js +0 -5
- package/dist/session-tracker/dist/install-hook.d.ts +0 -5
- package/dist/session-tracker/dist/install-hook.js +1 -15
- package/dist/session-tracker/dist/prune-state.js +0 -4
- package/dist/session-tracker/dist/reader.js +0 -4
- package/dist/session-tracker/dist/state-file.d.ts +0 -3
- package/dist/session-tracker/dist/state-file.js +3 -8
- package/package.json +3 -4
- package/scripts/postinstall.js +8 -116
- package/dist/lib/session/artifacts.d.ts +0 -14
- package/dist/lib/session/artifacts.js +0 -101
- package/dist/lib/session/bash-command.d.ts +0 -63
- package/dist/lib/session/bash-command.js +0 -490
- package/dist/lib/session/digest.d.ts +0 -66
- package/dist/lib/session/digest.js +0 -328
- package/dist/lib/session/highlights.d.ts +0 -151
- package/dist/lib/session/highlights.js +0 -391
- package/dist/lib/session/insights.d.ts +0 -165
- package/dist/lib/session/insights.js +0 -563
- package/dist/lib/session/linear.d.ts +0 -19
- package/dist/lib/session/linear.js +0 -99
- package/dist/lib/session/parse.d.ts +0 -224
- package/dist/lib/session/parse.js +0 -2408
- package/dist/lib/session/prompt.d.ts +0 -213
- package/dist/lib/session/prompt.js +0 -601
- package/dist/lib/session/render.d.ts +0 -133
- package/dist/lib/session/render.js +0 -1047
- package/dist/lib/session/share-html.d.ts +0 -35
- package/dist/lib/session/share-html.js +0 -319
- package/dist/lib/session/shell-programs.d.ts +0 -33
- package/dist/lib/session/shell-programs.js +0 -380
- package/dist/lib/session/state.d.ts +0 -269
- package/dist/lib/session/state.js +0 -777
- package/dist/lib/session/stream-render.d.ts +0 -4
- package/dist/lib/session/stream-render.js +0 -131
- package/dist/lib/session/tail.d.ts +0 -88
- package/dist/lib/session/tail.js +0 -294
- package/dist/lib/session/team-filter.d.ts +0 -129
- package/dist/lib/session/team-filter.js +0 -269
- package/dist/lib/session/timeline.d.ts +0 -172
- package/dist/lib/session/timeline.js +0 -636
- package/dist/lib/session/tool-calls.d.ts +0 -132
- package/dist/lib/session/tool-calls.js +0 -674
- package/dist/lib/session/trajectory-compare.d.ts +0 -48
- package/dist/lib/session/trajectory-compare.js +0 -116
- package/dist/lib/session/trajectory-html.d.ts +0 -19
- package/dist/lib/session/trajectory-html.js +0 -771
- package/dist/lib/session/trajectory-lineage.d.ts +0 -93
- package/dist/lib/session/trajectory-lineage.js +0 -195
- package/dist/lib/session/trajectory-text.d.ts +0 -38
- package/dist/lib/session/trajectory-text.js +0 -284
- package/dist/lib/session/trajectory.d.ts +0 -145
- package/dist/lib/session/trajectory.js +0 -394
- package/dist/lib/session/types.d.ts +0 -627
- package/dist/lib/session/types.js +0 -43
|
@@ -1,41 +1,19 @@
|
|
|
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
1
|
import * as fs from 'fs';
|
|
25
2
|
import * as path from 'path';
|
|
26
3
|
import { ghExec, canonicalizeRepo, projectRepoSlugs } from './pr-mergeable.js';
|
|
27
|
-
import { rollupForSha } from './rest.js';
|
|
4
|
+
import { isRateLimitError, rollupForSha } from './rest.js';
|
|
5
|
+
import { cachedViewer, fetchViewerProfile } from './viewer.js';
|
|
28
6
|
import { repoPathClaims } from '../projects.js';
|
|
29
7
|
import { getCacheDir } from '../state.js';
|
|
30
8
|
import { atomicWriteFileSync } from '../fs-atomic.js';
|
|
31
|
-
|
|
9
|
+
import { npmView as defaultNpmView, readLatestTag, withMergesSince } from './release-drift.js';
|
|
32
10
|
const PR_JQ = '{number, title, url: .html_url, isDraft: (.draft // false), ' +
|
|
33
11
|
'state: (.state // "" | ascii_upcase), createdAt: (.created_at // ""), updatedAt: (.updated_at // ""), ' +
|
|
34
12
|
'login: (.user.login // ""), avatarUrl: (.user.avatar_url // ""), ' +
|
|
35
13
|
'headRefName: (.head.ref // ""), baseRefName: (.base.ref // ""), ' +
|
|
36
14
|
'headSha: (.head.sha // ""), body: (.body // ""), ' +
|
|
37
|
-
'mergeable: .mergeable, mergeableState: .mergeable_state
|
|
38
|
-
|
|
15
|
+
'mergeable: .mergeable, mergeableState: .mergeable_state, ' +
|
|
16
|
+
'autoMerge: (if .auto_merge then {enabledBy: (.auto_merge.enabled_by.login // ""), method: (.auto_merge.merge_method // "")} else null end)}';
|
|
39
17
|
function parseNdjson(out) {
|
|
40
18
|
const rows = [];
|
|
41
19
|
for (const line of out.split('\n')) {
|
|
@@ -46,7 +24,6 @@ function parseNdjson(out) {
|
|
|
46
24
|
}
|
|
47
25
|
return rows;
|
|
48
26
|
}
|
|
49
|
-
/** Build a {@link ProjectPr} from the flattened jq row. checks/reviewDecision start null. */
|
|
50
27
|
export function rowToProjectPr(row) {
|
|
51
28
|
return {
|
|
52
29
|
number: Number(row.number),
|
|
@@ -66,24 +43,24 @@ export function rowToProjectPr(row) {
|
|
|
66
43
|
mergeableState: typeof row.mergeableState === 'string' ? row.mergeableState : null,
|
|
67
44
|
checks: null,
|
|
68
45
|
reviewDecision: null,
|
|
46
|
+
ciState: null,
|
|
47
|
+
failingChecks: [],
|
|
48
|
+
autoMerge: isRecord(row.autoMerge)
|
|
49
|
+
? { enabledBy: String(row.autoMerge.enabledBy ?? ''), method: String(row.autoMerge.method ?? '') }
|
|
50
|
+
: null,
|
|
69
51
|
};
|
|
70
52
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Every OPEN PR for one repo, over REST, fully paginated, drafts included, no
|
|
73
|
-
* author filter. `--paginate` follows Link headers; `--jq` streams one flattened
|
|
74
|
-
* object per line so a multi-page result stays parseable.
|
|
75
|
-
*/
|
|
76
53
|
export async function listOpenPrs(repo, gh = ghExec) {
|
|
77
54
|
const out = await gh([
|
|
78
55
|
'api',
|
|
79
56
|
`repos/${repo}/pulls?state=open&per_page=100`,
|
|
80
57
|
'--paginate',
|
|
58
|
+
'--cache', '60s',
|
|
81
59
|
'--jq',
|
|
82
60
|
`.[] | ${PR_JQ}`,
|
|
83
61
|
]);
|
|
84
62
|
return parseNdjson(out).map(rowToProjectPr);
|
|
85
63
|
}
|
|
86
|
-
/** One PR by number, over REST (`GET repos/{repo}/pulls/{n}`). Throws if it is gone. */
|
|
87
64
|
export async function fetchOnePr(repo, number, gh = ghExec) {
|
|
88
65
|
const out = await gh(['api', `repos/${repo}/pulls/${number}`, '--jq', PR_JQ]);
|
|
89
66
|
const rows = parseNdjson(out);
|
|
@@ -91,16 +68,6 @@ export async function fetchOnePr(repo, number, gh = ghExec) {
|
|
|
91
68
|
throw new Error(`no PR ${repo}#${number}`);
|
|
92
69
|
return rowToProjectPr(rows[0]);
|
|
93
70
|
}
|
|
94
|
-
/**
|
|
95
|
-
* GitHub's computed review decision AND the PR's current head oid, from ONE lazy
|
|
96
|
-
* `gh pr view` (GraphQL). reviewDecision is deliberately NOT REST-derived: it is
|
|
97
|
-
* a branch-protection / CODEOWNERS decision REST cannot compute, and
|
|
98
|
-
* approximating it could mislead a merge decision (PHNX-3501 note). `headRefOid`
|
|
99
|
-
* rides the same call so the checks and the review verdict can be anchored to the
|
|
100
|
-
* SAME head — a PR that advanced between the REST read and this call would
|
|
101
|
-
* otherwise pair a stale check rollup with a current review. One call per
|
|
102
|
-
* `--number`, never a poll loop, so it does not drain the shared GraphQL budget.
|
|
103
|
-
*/
|
|
104
71
|
export async function fetchReviewAndHead(repo, number, gh = ghExec) {
|
|
105
72
|
const out = (await gh([
|
|
106
73
|
'pr', 'view', String(number), '--repo', repo, '--json', 'reviewDecision,headRefOid',
|
|
@@ -111,29 +78,221 @@ export async function fetchReviewAndHead(repo, number, gh = ghExec) {
|
|
|
111
78
|
headRefOid: parsed.headRefOid || null,
|
|
112
79
|
};
|
|
113
80
|
}
|
|
114
|
-
/**
|
|
115
|
-
* Enrich one PR with its checks + reviewDecision, both anchored to the SAME head.
|
|
116
|
-
* `gh pr view` gives the authoritative current head oid; the check rollup is run
|
|
117
|
-
* against THAT (not the possibly-staler REST head SHA), and `headSha` is updated
|
|
118
|
-
* to match, so checks and reviewDecision can never describe two different heads.
|
|
119
|
-
*/
|
|
120
81
|
export async function enrichPr(repo, pr, gh = ghExec) {
|
|
121
82
|
const { reviewDecision, headRefOid } = await fetchReviewAndHead(repo, pr.number, gh);
|
|
122
83
|
const head = headRefOid || pr.headSha;
|
|
123
84
|
const checks = await rollupForSha(repo, head, gh);
|
|
124
|
-
return { ...pr, headSha: head, checks, reviewDecision };
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
85
|
+
return { ...pr, headSha: head, checks, reviewDecision, ...ciFromRollupItems(checks) };
|
|
86
|
+
}
|
|
87
|
+
export const MERGED_WINDOW_DAYS = 7;
|
|
88
|
+
export const MERGED_LIMIT = 20;
|
|
89
|
+
export const MERGED_PAGE_CAP = 3;
|
|
90
|
+
export const FAILING_CONCLUSIONS = new Set(['FAILURE', 'TIMED_OUT', 'CANCELLED', 'ACTION_REQUIRED', 'STARTUP_FAILURE']);
|
|
91
|
+
export const FAILING_STATES = new Set(['FAILURE', 'ERROR']);
|
|
92
|
+
const NO_CI = { ciState: null, failingChecks: [] };
|
|
93
|
+
const isCheckRun = (item) => item.state === undefined;
|
|
94
|
+
export function ciFromRollupItems(items) {
|
|
95
|
+
if (items.length === 0)
|
|
96
|
+
return NO_CI;
|
|
97
|
+
const failing = [];
|
|
98
|
+
let failed = false;
|
|
99
|
+
let pending = false;
|
|
100
|
+
for (const item of items) {
|
|
101
|
+
const run = isCheckRun(item);
|
|
102
|
+
if (run ? FAILING_CONCLUSIONS.has(item.conclusion ?? '') : FAILING_STATES.has(item.state ?? '')) {
|
|
103
|
+
failing.push(item.name);
|
|
104
|
+
if (run || item.state === 'FAILURE')
|
|
105
|
+
failed = true;
|
|
106
|
+
}
|
|
107
|
+
else if (run ? item.status !== 'COMPLETED' : item.state === 'PENDING') {
|
|
108
|
+
pending = true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (failing.length > 0)
|
|
112
|
+
return { ciState: failed ? 'FAILURE' : 'ERROR', failingChecks: failing };
|
|
113
|
+
return { ciState: pending ? 'PENDING' : 'SUCCESS', failingChecks: [] };
|
|
114
|
+
}
|
|
115
|
+
const PASSING_CONCLUSIONS = new Set(['SUCCESS', 'NEUTRAL', 'SKIPPED']);
|
|
116
|
+
export function isPassingRollup(items) {
|
|
117
|
+
return items.length > 0 && items.every((i) => (isCheckRun(i)
|
|
118
|
+
? i.status === 'COMPLETED' && PASSING_CONCLUSIONS.has(i.conclusion ?? '')
|
|
119
|
+
: i.state === 'SUCCESS'));
|
|
120
|
+
}
|
|
121
|
+
export const PASSING_ROLLUP_TTL_MS = 60 * 60 * 1000;
|
|
122
|
+
export const FAILING_ROLLUP_TTL_MS = 5 * 60 * 1000;
|
|
123
|
+
export function isFinishedRollup(items) {
|
|
124
|
+
return items.length > 0 && items.every((i) => (isCheckRun(i) ? i.status === 'COMPLETED' : i.state !== 'PENDING'));
|
|
125
|
+
}
|
|
126
|
+
function rollupTtlMs(items) {
|
|
127
|
+
return isPassingRollup(items) ? PASSING_ROLLUP_TTL_MS : FAILING_ROLLUP_TTL_MS;
|
|
128
|
+
}
|
|
129
|
+
const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
130
|
+
const isFileList = (v) => Array.isArray(v) && v.every((f) => typeof f === 'string');
|
|
131
|
+
const isCachedRollup = (v) => isRecord(v) && typeof v.readAt === 'number' && Array.isArray(v.items) &&
|
|
132
|
+
v.items.every((i) => isRecord(i) && typeof i.name === 'string');
|
|
133
|
+
const isNpmRead = (v) => isRecord(v) && typeof v.readAt === 'number' && (v.version === null || typeof v.version === 'string') &&
|
|
134
|
+
(v.error === null || typeof v.error === 'string');
|
|
135
|
+
const isMergedDetail = (v) => isRecord(v) && (v.mergedBy === null || typeof v.mergedBy === 'string') &&
|
|
136
|
+
typeof v.additions === 'number' && typeof v.deletions === 'number';
|
|
137
|
+
export class KeyedCache {
|
|
138
|
+
file;
|
|
139
|
+
sep;
|
|
140
|
+
entries = {};
|
|
141
|
+
dirty = false;
|
|
142
|
+
constructor(dir, name, sep, isValid) {
|
|
143
|
+
this.file = path.join(dir, name);
|
|
144
|
+
this.sep = sep;
|
|
145
|
+
let parsed;
|
|
146
|
+
try {
|
|
147
|
+
parsed = JSON.parse(fs.readFileSync(this.file, 'utf-8'));
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (!isRecord(parsed))
|
|
153
|
+
return;
|
|
154
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
155
|
+
if (isValid(value))
|
|
156
|
+
this.entries[key] = value;
|
|
157
|
+
else
|
|
158
|
+
this.dirty = true;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
get(slug, id) {
|
|
162
|
+
return this.entries[`${slug}${this.sep}${id}`];
|
|
163
|
+
}
|
|
164
|
+
set(slug, id, value) {
|
|
165
|
+
this.entries[`${slug}${this.sep}${id}`] = value;
|
|
166
|
+
this.dirty = true;
|
|
167
|
+
}
|
|
168
|
+
prune(slug, listed) {
|
|
169
|
+
for (const key of Object.keys(this.entries)) {
|
|
170
|
+
const at = key.lastIndexOf(this.sep);
|
|
171
|
+
if (key.slice(0, at) === slug && !listed.has(key.slice(at + 1))) {
|
|
172
|
+
delete this.entries[key];
|
|
173
|
+
this.dirty = true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
save() {
|
|
178
|
+
if (!this.dirty)
|
|
179
|
+
return;
|
|
180
|
+
fs.mkdirSync(path.dirname(this.file), { recursive: true });
|
|
181
|
+
atomicWriteFileSync(this.file, JSON.stringify(this.entries));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
class CiErrors {
|
|
185
|
+
message = null;
|
|
186
|
+
record(err) {
|
|
187
|
+
const msg = ghFailure(err);
|
|
188
|
+
if (this.message === null || (isRateLimited(msg) && !isRateLimited(this.message)))
|
|
189
|
+
this.message = msg;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function isRateLimited(message) {
|
|
193
|
+
return isRateLimitError(message) || /API rate limit exceeded/i.test(message);
|
|
194
|
+
}
|
|
195
|
+
function readCi(ci, sha) {
|
|
196
|
+
if (!sha)
|
|
197
|
+
return Promise.resolve(NO_CI);
|
|
198
|
+
let read = ci.reads.get(sha);
|
|
199
|
+
if (!read) {
|
|
200
|
+
read = readCiUncached(ci, sha);
|
|
201
|
+
ci.reads.set(sha, read);
|
|
202
|
+
}
|
|
203
|
+
return read;
|
|
204
|
+
}
|
|
205
|
+
async function readCiUncached(ci, sha) {
|
|
206
|
+
const hit = ci.rollups.get(ci.slug, sha);
|
|
207
|
+
const age = hit ? ci.nowMs - hit.readAt : -1;
|
|
208
|
+
if (hit && age >= 0 && age < rollupTtlMs(hit.items))
|
|
209
|
+
return ciFromRollupItems(hit.items);
|
|
210
|
+
try {
|
|
211
|
+
const items = await rollupForSha(ci.slug, sha, ci.gh);
|
|
212
|
+
if (isFinishedRollup(items))
|
|
213
|
+
ci.rollups.set(ci.slug, sha, { items, readAt: ci.nowMs });
|
|
214
|
+
return ciFromRollupItems(items);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
ci.errors.record(err);
|
|
218
|
+
return NO_CI;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const CLOSED_JQ = '.[] | {number, title, url: .html_url, login: (.user.login // ""), avatarUrl: (.user.avatar_url // ""), ' +
|
|
222
|
+
'headRefName: (.head.ref // ""), headSha: (.head.sha // ""), baseRefName: (.base.ref // ""), ' +
|
|
223
|
+
'mergedAt: .merged_at, mergeCommitSha: .merge_commit_sha, updatedAt: .updated_at}';
|
|
224
|
+
export async function listRecentlyMerged(repo, sinceMs, gh = ghExec) {
|
|
225
|
+
const rows = [];
|
|
226
|
+
let truncated = false;
|
|
227
|
+
for (let page = 1; page <= MERGED_PAGE_CAP; page++) {
|
|
228
|
+
const pageRows = parseNdjson(await gh([
|
|
229
|
+
'api', `repos/${repo}/pulls?state=closed&sort=updated&direction=desc&per_page=100&page=${page}`,
|
|
230
|
+
'--cache', '60s', '--jq', CLOSED_JQ,
|
|
231
|
+
]));
|
|
232
|
+
rows.push(...pageRows);
|
|
233
|
+
const oldest = pageRows.at(-1)?.updatedAt;
|
|
234
|
+
if (pageRows.length < 100 || typeof oldest !== 'string' || Date.parse(oldest) < sinceMs)
|
|
235
|
+
break;
|
|
236
|
+
truncated = page === MERGED_PAGE_CAP;
|
|
237
|
+
}
|
|
238
|
+
const merged = rows
|
|
239
|
+
.filter((r) => typeof r.mergedAt === 'string' && Date.parse(r.mergedAt) >= sinceMs)
|
|
240
|
+
.sort((a, b) => Date.parse(String(b.mergedAt)) - Date.parse(String(a.mergedAt)))
|
|
241
|
+
.map((r) => ({
|
|
242
|
+
headSha: String(r.headSha ?? ''),
|
|
243
|
+
pr: {
|
|
244
|
+
number: Number(r.number),
|
|
245
|
+
title: String(r.title ?? ''),
|
|
246
|
+
url: String(r.url ?? ''),
|
|
247
|
+
author: { login: String(r.login ?? ''), avatarUrl: String(r.avatarUrl ?? '') },
|
|
248
|
+
headRefName: String(r.headRefName ?? ''),
|
|
249
|
+
baseRefName: String(r.baseRefName ?? ''),
|
|
250
|
+
mergedAt: String(r.mergedAt),
|
|
251
|
+
mergedBy: null,
|
|
252
|
+
mergeCommitSha: typeof r.mergeCommitSha === 'string' && r.mergeCommitSha ? r.mergeCommitSha : null,
|
|
253
|
+
ciState: null,
|
|
254
|
+
failingChecks: [],
|
|
255
|
+
additions: 0,
|
|
256
|
+
deletions: 0,
|
|
257
|
+
scope: null,
|
|
258
|
+
},
|
|
259
|
+
}));
|
|
260
|
+
return { merged, truncated };
|
|
261
|
+
}
|
|
262
|
+
async function readMergedDetail(slug, number, gh, details, errors) {
|
|
263
|
+
const hit = details.get(slug, number);
|
|
264
|
+
if (hit)
|
|
265
|
+
return hit;
|
|
266
|
+
try {
|
|
267
|
+
const row = JSON.parse((await gh([
|
|
268
|
+
'api', `repos/${slug}/pulls/${number}`, '--jq', '{mergedBy: .merged_by.login, additions, deletions}',
|
|
269
|
+
])).trim());
|
|
270
|
+
const detail = { mergedBy: row.mergedBy || null, additions: Number(row.additions ?? 0), deletions: Number(row.deletions ?? 0) };
|
|
271
|
+
details.set(slug, number, detail);
|
|
272
|
+
return detail;
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
errors.record(err);
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
async function readDefaultBranch(ci) {
|
|
280
|
+
try {
|
|
281
|
+
const name = (await ci.gh(['api', `repos/${ci.slug}`, '--cache', '1h', '--jq', '.default_branch'])).trim();
|
|
282
|
+
if (!name)
|
|
283
|
+
throw new Error(`${ci.slug} reports no default branch`);
|
|
284
|
+
const sha = (await ci.gh(['api', `repos/${ci.slug}/branches/${name}`, '--jq', '.commit.sha'])).trim();
|
|
285
|
+
if (!sha)
|
|
286
|
+
throw new Error(`${ci.slug}@${name} has no head commit`);
|
|
287
|
+
return { name, sha, ...await readCi(ci, sha) };
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
ci.errors.record(err);
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
132
294
|
export async function resolveTargetSlugs(def, repo, gh) {
|
|
133
295
|
const raw = projectRepoSlugs([def]);
|
|
134
|
-
// Canonicalize CONCURRENTLY — each repo read can take up to gh's 30s
|
|
135
|
-
// timeout, so a sequential walk of N repos would stack N×30s and blow past a
|
|
136
|
-
// native caller's bounded deadline. Repo count per project is small.
|
|
137
296
|
const canonPairs = await Promise.all(raw.map(async (slug) => [slug, await canonicalizeRepo(slug, gh)]));
|
|
138
297
|
const canon = new Map(canonPairs);
|
|
139
298
|
const canonical = [...new Set(canon.values())];
|
|
@@ -149,11 +308,6 @@ export async function resolveTargetSlugs(def, repo, gh) {
|
|
|
149
308
|
}
|
|
150
309
|
return [requested];
|
|
151
310
|
}
|
|
152
|
-
/**
|
|
153
|
-
* Classify one PR of a shared repository by the files it changes. `own` are
|
|
154
|
-
* this project's prefixes, `others` every other sharing project's. Returns
|
|
155
|
-
* null when the PR belongs only to another project.
|
|
156
|
-
*/
|
|
157
311
|
export function scopeForFiles(files, own, others) {
|
|
158
312
|
const under = (prefixes) => files.some((f) => prefixes.some((p) => f.startsWith(p)));
|
|
159
313
|
if (under(own))
|
|
@@ -162,55 +316,20 @@ export function scopeForFiles(files, own, others) {
|
|
|
162
316
|
return null;
|
|
163
317
|
return 'repo-wide';
|
|
164
318
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
* for heads that are no longer open in that repo are pruned on write.
|
|
169
|
-
*/
|
|
170
|
-
class PrFilesCache {
|
|
171
|
-
file = path.join(getCacheDir(), 'project-pr-files.json');
|
|
172
|
-
entries = {};
|
|
173
|
-
dirty = false;
|
|
174
|
-
constructor() {
|
|
175
|
-
// A missing or unreadable cache only costs re-reads; it never fails a list.
|
|
176
|
-
try {
|
|
177
|
-
const parsed = JSON.parse(fs.readFileSync(this.file, 'utf-8'));
|
|
178
|
-
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed))
|
|
179
|
-
this.entries = parsed;
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
this.entries = {};
|
|
183
|
-
}
|
|
319
|
+
class PrFilesCache extends KeyedCache {
|
|
320
|
+
constructor(dir) {
|
|
321
|
+
super(dir, 'project-pr-files.json', '@', isFileList);
|
|
184
322
|
}
|
|
185
323
|
async files(slug, pr, gh) {
|
|
186
|
-
const
|
|
187
|
-
const hit = this.entries[key];
|
|
324
|
+
const hit = this.get(slug, pr.headSha);
|
|
188
325
|
if (hit)
|
|
189
326
|
return hit;
|
|
190
|
-
// A rename counts on both sides: moving a file out of a project's path touches that project.
|
|
191
327
|
const out = await gh(['api', `repos/${slug}/pulls/${pr.number}/files?per_page=100`, '--paginate', '--jq', '.[] | .filename, (.previous_filename // empty)']);
|
|
192
328
|
const files = out.split('\n').map((l) => l.trim()).filter(Boolean);
|
|
193
|
-
this.
|
|
194
|
-
this.dirty = true;
|
|
329
|
+
this.set(slug, pr.headSha, files);
|
|
195
330
|
return files;
|
|
196
331
|
}
|
|
197
|
-
prune(slug, openHeads) {
|
|
198
|
-
for (const key of Object.keys(this.entries)) {
|
|
199
|
-
const at = key.lastIndexOf('@');
|
|
200
|
-
if (key.slice(0, at) === slug && !openHeads.has(key.slice(at + 1))) {
|
|
201
|
-
delete this.entries[key];
|
|
202
|
-
this.dirty = true;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
save() {
|
|
207
|
-
if (!this.dirty)
|
|
208
|
-
return;
|
|
209
|
-
fs.mkdirSync(path.dirname(this.file), { recursive: true });
|
|
210
|
-
atomicWriteFileSync(this.file, JSON.stringify(this.entries));
|
|
211
|
-
}
|
|
212
332
|
}
|
|
213
|
-
/** Run `fn` over `items` with at most `limit` in flight, preserving order. */
|
|
214
333
|
async function mapBounded(items, limit, fn) {
|
|
215
334
|
const results = new Array(items.length);
|
|
216
335
|
let next = 0;
|
|
@@ -223,19 +342,9 @@ async function mapBounded(items, limit, fn) {
|
|
|
223
342
|
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));
|
|
224
343
|
return results;
|
|
225
344
|
}
|
|
226
|
-
/** The authenticated login, from a REST read gh caches for a day. */
|
|
227
345
|
export async function fetchViewer(gh = ghExec) {
|
|
228
|
-
|
|
229
|
-
return (await gh(['api', 'user', '--cache', '24h', '--jq', '.login'])).trim() || null;
|
|
230
|
-
}
|
|
231
|
-
catch {
|
|
232
|
-
return null;
|
|
233
|
-
}
|
|
346
|
+
return (await fetchViewerProfile(gh))?.login ?? null;
|
|
234
347
|
}
|
|
235
|
-
/**
|
|
236
|
-
* The repository paths `def` claims, keyed by canonical slug. Canonicalization
|
|
237
|
-
* is cached, so this costs no network after the first run of the day.
|
|
238
|
-
*/
|
|
239
348
|
async function canonicalClaims(def, gh) {
|
|
240
349
|
const out = new Map();
|
|
241
350
|
for (const { slug, prefix } of repoPathClaims(def)) {
|
|
@@ -244,7 +353,6 @@ async function canonicalClaims(def, gh) {
|
|
|
244
353
|
}
|
|
245
354
|
return out;
|
|
246
355
|
}
|
|
247
|
-
/** For each canonical slug, the other projects attached to it and the paths they claim. */
|
|
248
356
|
async function repoPeers(def, peers, gh) {
|
|
249
357
|
const bySlug = new Map();
|
|
250
358
|
await Promise.all(peers.filter((p) => p.name !== def.name).map(async (peer) => {
|
|
@@ -263,92 +371,195 @@ async function repoPeers(def, peers, gh) {
|
|
|
263
371
|
entry.names.sort();
|
|
264
372
|
return bySlug;
|
|
265
373
|
}
|
|
266
|
-
|
|
267
|
-
* Build the full envelope. `number` (which the command requires alongside
|
|
268
|
-
* `repo`) fetches and enriches exactly that one PR; otherwise every target
|
|
269
|
-
* repo's open PRs are listed with checks/reviewDecision left null.
|
|
270
|
-
*
|
|
271
|
-
* `peers` are every project definition. A repository attached to more than one
|
|
272
|
-
* project is scoped: when this project claims part of it ({@link repoPathClaims}),
|
|
273
|
-
* its list keeps only PRs that touch those paths (`scope: project`) or touch no
|
|
274
|
-
* sharing project's paths (`scope: repo-wide`).
|
|
275
|
-
*/
|
|
276
|
-
export async function buildProjectPrs(def, opts = {}, gh = ghExec, peers = []) {
|
|
374
|
+
export async function buildProjectPrs(def, opts = {}, gh = ghExec, peers = [], ctx = {}) {
|
|
277
375
|
const project = { name: def.name, linearProjectId: def.linear?.projectId ?? null };
|
|
278
376
|
const slugs = await resolveTargetSlugs(def, opts.repo, gh);
|
|
279
377
|
if (slugs.length === 0)
|
|
280
378
|
return { project, viewer: null, repositories: [], partial: false };
|
|
281
379
|
const viewerRead = fetchViewer(gh);
|
|
282
380
|
const [shared, ownClaims] = await Promise.all([repoPeers(def, peers, gh), canonicalClaims(def, gh)]);
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
381
|
+
const cacheDir = ctx.cacheDir ?? getCacheDir();
|
|
382
|
+
const filesCache = new PrFilesCache(cacheDir);
|
|
383
|
+
const rollups = new KeyedCache(cacheDir, 'project-pr-ci.json', '@', isCachedRollup);
|
|
384
|
+
const details = new KeyedCache(cacheDir, 'project-pr-merged.json', '#', isMergedDetail);
|
|
385
|
+
const npmVersions = new KeyedCache(cacheDir, 'project-npm-versions.json', '#', isNpmRead);
|
|
386
|
+
const nowMs = ctx.nowMs ?? Date.now();
|
|
387
|
+
const npm = {
|
|
388
|
+
view: ctx.npmView ?? defaultNpmView,
|
|
389
|
+
nowMs,
|
|
390
|
+
cache: { get: (name) => npmVersions.get('npm', name), set: (name, v) => npmVersions.set('npm', name, v) },
|
|
391
|
+
};
|
|
392
|
+
const sinceMs = nowMs - MERGED_WINDOW_DAYS * 24 * 60 * 60 * 1000;
|
|
288
393
|
const repositories = await Promise.all(slugs.map(async (slug) => {
|
|
289
394
|
const peer = shared.get(slug);
|
|
290
395
|
const sharedWith = peer?.names ?? [];
|
|
291
396
|
try {
|
|
292
|
-
|
|
397
|
+
const mergeRead = readRepoMergeAbility(slug, gh).then((merge) => ({ merge, error: null }), (err) => ({ merge: null, error: err }));
|
|
293
398
|
if (opts.number !== undefined) {
|
|
294
399
|
const pr = await fetchOnePr(slug, opts.number, gh);
|
|
295
|
-
|
|
400
|
+
const enriched = await enrichPr(slug, pr, gh);
|
|
401
|
+
const { merge, error: mergeError } = await mergeRead;
|
|
402
|
+
return {
|
|
403
|
+
slug, sharedWith, pullRequests: [enriched], merge,
|
|
404
|
+
recentlyMerged: [], defaultBranch: null, ciError: mergeError === null ? null : ghFailure(mergeError), truncated: false, release: null, releaseError: null, error: null,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
const errors = new CiErrors();
|
|
408
|
+
const ci = { slug, gh, rollups, errors, nowMs, reads: new Map() };
|
|
409
|
+
const tagRead = readLatestTag(slug, gh, npm)
|
|
410
|
+
.then((tag) => ({ tag, error: null }), (err) => ({ tag: null, error: ghFailure(err) }));
|
|
411
|
+
const [listed, mergedRead, defaultBranch] = await Promise.all([
|
|
412
|
+
listOpenPrs(slug, gh),
|
|
413
|
+
listRecentlyMerged(slug, sinceMs, gh).catch((err) => {
|
|
414
|
+
errors.record(err);
|
|
415
|
+
return null;
|
|
416
|
+
}),
|
|
417
|
+
readDefaultBranch(ci),
|
|
418
|
+
]);
|
|
419
|
+
const mergedListed = mergedRead?.merged ?? null;
|
|
420
|
+
let pullRequests = listed;
|
|
421
|
+
let merged = mergedListed ?? [];
|
|
422
|
+
const own = ownClaims.get(slug);
|
|
423
|
+
if (peer && own) {
|
|
424
|
+
if (mergedListed)
|
|
425
|
+
filesCache.prune(slug, new Set([...listed.map((pr) => pr.headSha), ...merged.map((m) => m.headSha)]));
|
|
426
|
+
const scopeOf = async (pr) => scopeForFiles(await filesCache.files(slug, pr, gh), own, peer.prefixes);
|
|
427
|
+
const [openScopes, mergedScopes] = await Promise.all([
|
|
428
|
+
mapBounded(pullRequests, 8, scopeOf),
|
|
429
|
+
mapBounded(merged, 8, (m) => scopeOf({ number: m.pr.number, headSha: m.headSha })),
|
|
430
|
+
]);
|
|
431
|
+
pullRequests = pullRequests
|
|
432
|
+
.map((pr, i) => ({ ...pr, scope: openScopes[i] }))
|
|
433
|
+
.filter((pr) => pr.scope !== null);
|
|
434
|
+
merged = merged
|
|
435
|
+
.map((m, i) => ({ ...m, pr: { ...m.pr, scope: mergedScopes[i] } }))
|
|
436
|
+
.filter((m) => m.pr.scope !== null);
|
|
296
437
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
438
|
+
const { tag, error: releaseError } = await tagRead;
|
|
439
|
+
const release = tag
|
|
440
|
+
? withMergesSince(tag, mergedListed ? merged.map((m) => m.pr) : null, { sinceMs, truncated: mergedRead?.truncated ?? false, base: defaultBranch?.name ?? null })
|
|
441
|
+
: null;
|
|
442
|
+
merged = merged.slice(0, MERGED_LIMIT);
|
|
443
|
+
const [openCi, recentlyMerged] = await Promise.all([
|
|
444
|
+
mapBounded(pullRequests, 8, (pr) => readCi(ci, pr.headSha)),
|
|
445
|
+
mapBounded(merged, 8, async (m) => {
|
|
446
|
+
const [detail, mergeCi] = await Promise.all([
|
|
447
|
+
readMergedDetail(slug, m.pr.number, gh, details, errors),
|
|
448
|
+
readCi(ci, m.pr.mergeCommitSha),
|
|
449
|
+
]);
|
|
450
|
+
return { ...m.pr, ...(detail ?? {}), ...mergeCi };
|
|
451
|
+
}),
|
|
452
|
+
]);
|
|
453
|
+
pullRequests = pullRequests.map((pr, i) => ({ ...pr, ...openCi[i] }));
|
|
454
|
+
const { merge, error: mergeError } = await mergeRead;
|
|
455
|
+
if (mergeError !== null)
|
|
456
|
+
errors.record(mergeError);
|
|
457
|
+
if (mergedListed) {
|
|
458
|
+
details.prune(slug, new Set(mergedListed.map((m) => String(m.pr.number))));
|
|
459
|
+
if (defaultBranch) {
|
|
460
|
+
rollups.prune(slug, new Set([
|
|
461
|
+
...listed.map((pr) => pr.headSha),
|
|
462
|
+
...mergedListed.flatMap((m) => (m.pr.mergeCommitSha ? [m.pr.mergeCommitSha] : [])),
|
|
463
|
+
defaultBranch.sha,
|
|
464
|
+
]));
|
|
306
465
|
}
|
|
307
466
|
}
|
|
308
|
-
return {
|
|
467
|
+
return {
|
|
468
|
+
slug, sharedWith, pullRequests, merge, recentlyMerged, defaultBranch,
|
|
469
|
+
ciError: errors.message, truncated: mergedRead?.truncated ?? false, release, releaseError, error: null,
|
|
470
|
+
};
|
|
309
471
|
}
|
|
310
472
|
catch (err) {
|
|
311
|
-
|
|
312
|
-
|
|
473
|
+
return {
|
|
474
|
+
slug, sharedWith, pullRequests: [], merge: null, recentlyMerged: [], defaultBranch: null, ciError: null, truncated: false,
|
|
475
|
+
release: null, releaseError: null, error: err instanceof Error ? err.message : String(err),
|
|
476
|
+
};
|
|
313
477
|
}
|
|
314
478
|
}));
|
|
315
479
|
filesCache.save();
|
|
480
|
+
rollups.save();
|
|
481
|
+
details.save();
|
|
482
|
+
npmVersions.save();
|
|
316
483
|
const partial = repositories.some((r) => r.error !== null);
|
|
317
484
|
return { project, viewer: await viewerRead, repositories, partial };
|
|
318
485
|
}
|
|
319
|
-
/** How a PR is merged; the default is the first of these the repository allows. */
|
|
320
486
|
export const MERGE_METHODS = ['rebase', 'squash', 'merge'];
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
const allowed = JSON.parse((await gh([
|
|
487
|
+
async function readRepoMergeSettings(repo, gh) {
|
|
488
|
+
const row = JSON.parse((await gh([
|
|
324
489
|
'api', `repos/${repo}`, '--cache', '1h',
|
|
325
|
-
'--jq', '{rebase: .allow_rebase_merge, squash: .allow_squash_merge, merge: .allow_merge_commit
|
|
490
|
+
'--jq', '{rebase: .allow_rebase_merge, squash: .allow_squash_merge, merge: .allow_merge_commit, ' +
|
|
491
|
+
'admin: (.permissions.admin // false), autoMerge: (.allow_auto_merge // false), defaultBranch: (.default_branch // "")}',
|
|
326
492
|
])).trim());
|
|
327
|
-
|
|
493
|
+
return {
|
|
494
|
+
methods: MERGE_METHODS.filter((m) => row[m]),
|
|
495
|
+
viewerIsAdmin: row.admin === true,
|
|
496
|
+
autoMergeAllowed: row.autoMerge === true,
|
|
497
|
+
defaultBranch: row.defaultBranch ?? '',
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
export async function defaultMergeMethod(repo, gh = ghExec) {
|
|
501
|
+
const method = (await readRepoMergeSettings(repo, gh)).methods[0];
|
|
328
502
|
if (!method)
|
|
329
503
|
throw new Error(`${repo} allows no merge method this token can see.`);
|
|
330
504
|
return method;
|
|
331
505
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
506
|
+
export async function readRepoMergeAbility(repo, gh = ghExec) {
|
|
507
|
+
const settings = await readRepoMergeSettings(repo, gh);
|
|
508
|
+
let adminBypass = false;
|
|
509
|
+
if (settings.viewerIsAdmin) {
|
|
510
|
+
if (!settings.defaultBranch)
|
|
511
|
+
throw new Error(`${repo} reports no default branch`);
|
|
512
|
+
try {
|
|
513
|
+
const enforced = (await gh([
|
|
514
|
+
'api', `repos/${repo}/branches/${settings.defaultBranch}/protection`, '--cache', '1h', '--jq', '.enforce_admins.enabled',
|
|
515
|
+
])).trim();
|
|
516
|
+
adminBypass = enforced !== 'true';
|
|
517
|
+
}
|
|
518
|
+
catch (err) {
|
|
519
|
+
if (!/\(HTTP 404\)/.test(ghFailure(err)))
|
|
520
|
+
throw err;
|
|
521
|
+
adminBypass = true;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return {
|
|
525
|
+
viewerIsAdmin: settings.viewerIsAdmin,
|
|
526
|
+
adminBypass,
|
|
527
|
+
autoMergeAllowed: settings.autoMergeAllowed,
|
|
528
|
+
methods: settings.methods,
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
export function ghFailure(err) {
|
|
338
532
|
const stderr = err?.stderr;
|
|
339
533
|
const text = typeof stderr === 'string' && stderr.trim() ? stderr : err instanceof Error ? err.message : String(err);
|
|
340
534
|
const lines = text.trim().split('\n').map((l) => l.trim()).filter(Boolean);
|
|
341
535
|
const line = lines.find((l) => /\(HTTP \d{3}\)/.test(l)) ?? lines[0] ?? text;
|
|
342
536
|
return line.replace(/^gh:\s*/, '');
|
|
343
537
|
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
538
|
+
export const BLOCKED_WITHOUT_ADMIN = 'Blocked by branch protection; pass --admin to merge as an admin';
|
|
539
|
+
const MERGEABLE_STATES = new Set(['clean', 'unstable', 'has_hooks']);
|
|
540
|
+
export function mergeRefusalWithoutAdmin(state) {
|
|
541
|
+
if (MERGEABLE_STATES.has(state))
|
|
542
|
+
return null;
|
|
543
|
+
switch (state) {
|
|
544
|
+
case 'blocked': return BLOCKED_WITHOUT_ADMIN;
|
|
545
|
+
case 'dirty': return 'Has merge conflicts';
|
|
546
|
+
case 'behind': return 'The branch is behind its base; update it, or pass --admin to merge as an admin';
|
|
547
|
+
case 'draft': return 'Draft: mark it ready for review first';
|
|
548
|
+
default: return 'GitHub is still computing mergeability; try again in a moment';
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
export function readableMergeRefusal(message) {
|
|
552
|
+
const checks = /Required status checks? (.+?) (?:is|are) expected/i.exec(message);
|
|
553
|
+
if (checks && /\(HTTP 405\)/.test(message)) {
|
|
554
|
+
const names = checks[1].replace(/"/g, '');
|
|
555
|
+
const plural = names.includes(',') ? 'checks' : 'check';
|
|
556
|
+
return `Required ${plural} ${names} ${plural === 'check' ? "hasn't" : "haven't"} passed (HTTP 405)`;
|
|
557
|
+
}
|
|
558
|
+
if (/\(HTTP 409\)/.test(message))
|
|
559
|
+
return 'The head moved since you looked; reload the PR and try again (HTTP 409)';
|
|
560
|
+
return message;
|
|
561
|
+
}
|
|
562
|
+
export async function mergeProjectPr(repo, number, sha, method, opts = {}, gh = ghExec) {
|
|
352
563
|
let chosen;
|
|
353
564
|
try {
|
|
354
565
|
chosen = method ?? await defaultMergeMethod(repo, gh);
|
|
@@ -356,6 +567,18 @@ export async function mergeProjectPr(repo, number, sha, method, gh = ghExec) {
|
|
|
356
567
|
catch (err) {
|
|
357
568
|
return { repo, number, method: method ?? MERGE_METHODS[0], merged: false, sha: null, message: ghFailure(err) };
|
|
358
569
|
}
|
|
570
|
+
if (!opts.admin) {
|
|
571
|
+
let state;
|
|
572
|
+
try {
|
|
573
|
+
state = (await gh(['api', `repos/${repo}/pulls/${number}`, '--jq', '.mergeable_state // ""'])).trim();
|
|
574
|
+
}
|
|
575
|
+
catch (err) {
|
|
576
|
+
return { repo, number, method: chosen, merged: false, sha: null, message: ghFailure(err) };
|
|
577
|
+
}
|
|
578
|
+
const refusal = mergeRefusalWithoutAdmin(state);
|
|
579
|
+
if (refusal !== null)
|
|
580
|
+
return { repo, number, method: chosen, merged: false, sha: null, message: refusal };
|
|
581
|
+
}
|
|
359
582
|
let out;
|
|
360
583
|
try {
|
|
361
584
|
out = await gh([
|
|
@@ -364,8 +587,145 @@ export async function mergeProjectPr(repo, number, sha, method, gh = ghExec) {
|
|
|
364
587
|
]);
|
|
365
588
|
}
|
|
366
589
|
catch (err) {
|
|
367
|
-
return { repo, number, method: chosen, merged: false, sha: null, message: ghFailure(err) };
|
|
590
|
+
return { repo, number, method: chosen, merged: false, sha: null, message: readableMergeRefusal(ghFailure(err)) };
|
|
368
591
|
}
|
|
369
|
-
// GitHub answers this endpoint 200 only once the PR is merged; anything else made gh exit non-zero.
|
|
370
592
|
return { repo, number, method: chosen, merged: true, sha: out.trim() || null, message: 'Merged' };
|
|
371
593
|
}
|
|
594
|
+
function assertHeadIs(repo, number, live, seen) {
|
|
595
|
+
if (!live.toLowerCase().startsWith(seen.toLowerCase())) {
|
|
596
|
+
throw new Error(`${repo}#${number} moved to ${live.slice(0, 7)} since you looked at ${seen.slice(0, 7)}; reload it and try again.`);
|
|
597
|
+
}
|
|
598
|
+
return live;
|
|
599
|
+
}
|
|
600
|
+
export async function setProjectPrAutoMerge(repo, number, opts, gh = ghExec) {
|
|
601
|
+
const base = { repo, number };
|
|
602
|
+
let pr;
|
|
603
|
+
try {
|
|
604
|
+
pr = JSON.parse((await gh([
|
|
605
|
+
'api', `repos/${repo}/pulls/${number}`, '--jq',
|
|
606
|
+
'{sha: .head.sha, nodeId: .node_id, state: .state, merged: (.merged // false), autoMethod: (.auto_merge.merge_method // null)}',
|
|
607
|
+
])).trim());
|
|
608
|
+
}
|
|
609
|
+
catch (err) {
|
|
610
|
+
return { ...base, enabled: false, method: null, message: ghFailure(err) };
|
|
611
|
+
}
|
|
612
|
+
const current = { enabled: pr.autoMethod !== null, method: pr.autoMethod };
|
|
613
|
+
if (pr.state !== 'open')
|
|
614
|
+
return { ...base, ...current, message: pr.merged ? 'Already merged' : 'The pull request is closed' };
|
|
615
|
+
if (!opts.enable) {
|
|
616
|
+
if (!current.enabled)
|
|
617
|
+
return { ...base, enabled: false, method: null, message: 'Auto-merge was not on' };
|
|
618
|
+
try {
|
|
619
|
+
await gh([
|
|
620
|
+
'api', 'graphql',
|
|
621
|
+
'-f', 'query=mutation($id: ID!) { disablePullRequestAutoMerge(input: {pullRequestId: $id}) { pullRequest { autoMergeRequest { mergeMethod } } } }',
|
|
622
|
+
'-f', `id=${pr.nodeId}`,
|
|
623
|
+
'--jq', '.data.disablePullRequestAutoMerge.pullRequest.autoMergeRequest',
|
|
624
|
+
]);
|
|
625
|
+
}
|
|
626
|
+
catch (err) {
|
|
627
|
+
return { ...base, ...current, message: ghFailure(err) };
|
|
628
|
+
}
|
|
629
|
+
return { ...base, enabled: false, method: null, message: 'Auto-merge turned off' };
|
|
630
|
+
}
|
|
631
|
+
let head;
|
|
632
|
+
let chosen;
|
|
633
|
+
try {
|
|
634
|
+
if (!opts.sha)
|
|
635
|
+
throw new Error('Auto-merge is pinned to the head you reviewed; pass its SHA.');
|
|
636
|
+
head = assertHeadIs(repo, number, pr.sha, opts.sha);
|
|
637
|
+
chosen = opts.method ?? await defaultMergeMethod(repo, gh);
|
|
638
|
+
}
|
|
639
|
+
catch (err) {
|
|
640
|
+
return { ...base, ...current, message: ghFailure(err) };
|
|
641
|
+
}
|
|
642
|
+
try {
|
|
643
|
+
await gh([
|
|
644
|
+
'api', 'graphql',
|
|
645
|
+
'-f', 'query=mutation($id: ID!, $method: PullRequestMergeMethod!, $head: GitObjectID!) { enablePullRequestAutoMerge(input: {pullRequestId: $id, mergeMethod: $method, expectedHeadOid: $head}) { pullRequest { autoMergeRequest { mergeMethod } } } }',
|
|
646
|
+
'-f', `id=${pr.nodeId}`,
|
|
647
|
+
'-f', `method=${chosen.toUpperCase()}`,
|
|
648
|
+
'-f', `head=${head}`,
|
|
649
|
+
'--jq', '.data.enablePullRequestAutoMerge.pullRequest.autoMergeRequest.mergeMethod',
|
|
650
|
+
]);
|
|
651
|
+
}
|
|
652
|
+
catch (err) {
|
|
653
|
+
return { ...base, ...current, message: ghFailure(err) };
|
|
654
|
+
}
|
|
655
|
+
return { ...base, enabled: true, method: chosen, message: `Auto-merge on (${chosen}); it merges once the required checks pass` };
|
|
656
|
+
}
|
|
657
|
+
export async function markProjectPrReady(repo, number, sha, gh = ghExec) {
|
|
658
|
+
let head;
|
|
659
|
+
try {
|
|
660
|
+
head = JSON.parse((await gh([
|
|
661
|
+
'api', `repos/${repo}/pulls/${number}`, '--jq',
|
|
662
|
+
'{sha: .head.sha, draft: (.draft // false), nodeId: .node_id, state: .state, merged: (.merged // false)}',
|
|
663
|
+
])).trim());
|
|
664
|
+
if (sha)
|
|
665
|
+
assertHeadIs(repo, number, head.sha, sha);
|
|
666
|
+
}
|
|
667
|
+
catch (err) {
|
|
668
|
+
return { repo, number, ready: false, sha: null, message: ghFailure(err) };
|
|
669
|
+
}
|
|
670
|
+
if (head.state !== 'open') {
|
|
671
|
+
return { repo, number, ready: false, sha: head.sha, message: head.merged ? 'Already merged' : 'The pull request is closed' };
|
|
672
|
+
}
|
|
673
|
+
if (!head.draft)
|
|
674
|
+
return { repo, number, ready: true, sha: head.sha, message: 'Already ready for review' };
|
|
675
|
+
try {
|
|
676
|
+
await gh([
|
|
677
|
+
'api', 'graphql',
|
|
678
|
+
'-f', 'query=mutation($id: ID!) { markPullRequestReadyForReview(input: {pullRequestId: $id}) { pullRequest { isDraft } } }',
|
|
679
|
+
'-f', `id=${head.nodeId}`,
|
|
680
|
+
'--jq', '.data.markPullRequestReadyForReview.pullRequest.isDraft',
|
|
681
|
+
]);
|
|
682
|
+
}
|
|
683
|
+
catch (err) {
|
|
684
|
+
return { repo, number, ready: false, sha: head.sha, message: ghFailure(err) };
|
|
685
|
+
}
|
|
686
|
+
return { repo, number, ready: true, sha: head.sha, message: 'Marked ready for review' };
|
|
687
|
+
}
|
|
688
|
+
export const OWN_PR_APPROVAL = "GitHub doesn't let you approve your own pull request";
|
|
689
|
+
export async function approveProjectPr(repo, number, sha, body, gh = ghExec, viewerLogin = async () => (await cachedViewer())?.login ?? null) {
|
|
690
|
+
const base = { repo, number, event: 'APPROVE' };
|
|
691
|
+
let commitId;
|
|
692
|
+
try {
|
|
693
|
+
const [live, viewer] = await Promise.all([
|
|
694
|
+
gh(['api', `repos/${repo}/pulls/${number}`, '--jq', '{sha: .head.sha, author: (.user.login // "")}'])
|
|
695
|
+
.then((out) => JSON.parse(out.trim())),
|
|
696
|
+
viewerLogin(),
|
|
697
|
+
]);
|
|
698
|
+
if (viewer && live.author && viewer.toLowerCase() === live.author.toLowerCase()) {
|
|
699
|
+
return { ...base, submitted: false, sha: live.sha, id: null, url: null, message: OWN_PR_APPROVAL };
|
|
700
|
+
}
|
|
701
|
+
if (!live.sha)
|
|
702
|
+
throw new Error(`no head SHA for ${repo}#${number}`);
|
|
703
|
+
commitId = assertHeadIs(repo, number, live.sha, sha);
|
|
704
|
+
}
|
|
705
|
+
catch (err) {
|
|
706
|
+
return { ...base, submitted: false, sha: null, id: null, url: null, message: ghFailure(err) };
|
|
707
|
+
}
|
|
708
|
+
const args = ['api', '-X', 'POST', `repos/${repo}/pulls/${number}/reviews`, '-f', 'event=APPROVE', '-f', `commit_id=${commitId}`];
|
|
709
|
+
if (body)
|
|
710
|
+
args.push('-f', `body=${body}`);
|
|
711
|
+
let posted;
|
|
712
|
+
try {
|
|
713
|
+
posted = JSON.parse((await gh([...args, '--jq', '{id, url: .html_url}'])).trim());
|
|
714
|
+
}
|
|
715
|
+
catch (err) {
|
|
716
|
+
return { ...base, submitted: false, sha: commitId, id: null, url: null, message: ghFailure(err) };
|
|
717
|
+
}
|
|
718
|
+
return { ...base, submitted: true, sha: commitId, id: posted.id ?? null, url: posted.url || null, message: 'Approved' };
|
|
719
|
+
}
|
|
720
|
+
export async function commentOnProjectPr(repo, number, body, gh = ghExec) {
|
|
721
|
+
let posted;
|
|
722
|
+
try {
|
|
723
|
+
posted = JSON.parse((await gh([
|
|
724
|
+
'api', '-X', 'POST', `repos/${repo}/issues/${number}/comments`, '-f', `body=${body}`, '--jq', '{id, url: .html_url}',
|
|
725
|
+
])).trim());
|
|
726
|
+
}
|
|
727
|
+
catch (err) {
|
|
728
|
+
return { repo, number, commented: false, id: null, url: null, message: ghFailure(err) };
|
|
729
|
+
}
|
|
730
|
+
return { repo, number, commented: true, id: posted.id ?? null, url: posted.url || null, message: 'Commented' };
|
|
731
|
+
}
|