feat: add apps list, orgs list, deployments list subcommands#94
Merged
Conversation
This was referenced May 13, 2026
dabbbef to
3594eb9
Compare
3b79e96 to
83f452e
Compare
3594eb9 to
9494816
Compare
Make the CLI usable by AI agents and CI bots:
- Global `--json` flag emits a single JSON object/array on stdout and a
structured `{ error: { code, message, hint, traceId } }` envelope on
stderr. Suppresses spinners, progress bars, and ANSI color so output
pipes cleanly into `jq`. Wired into `publish` (final result with
revisionId, URL, status, timelines) and `create` (including
`--dry-run`, which now emits the resolved build config as JSON).
- Global `-y, --non-interactive, --yes` flag makes `requireInteractive()`
fail fast with a clear `NON_INTERACTIVE_REQUIRED` error instead of
hanging on stdin, even on a TTY. Same flag on both `deploy` and
`sandbox` roots.
- `ExitCode` enum (OK=0, GENERIC=1, USAGE=2, AUTH=3, NOT_FOUND=4,
CONFLICT=5, NETWORK=6). `error()` accepts `{ code, errorCode, hint,
response }` and exits with the matching numeric code. tRPC errors are
mapped via `mapTrpcError()`: 401/403/NOT_AUTHENTICATED/TOKEN_EXPIRED →
AUTH, 404 → NOT_FOUND, 409 → CONFLICT, 5xx → NETWORK. Invalid-token
path emits `AUTH_INVALID_TOKEN` with an explicit hint pointing at
`DENO_DEPLOY_TOKEN` rather than retrying through a browser.
- Move the keychain-unavailable warning from stdout to stderr so it
doesn't pollute machine-readable output.
Adds `tests/agent.test.ts` covering JSON dry-run, non-interactive
short-circuit, `AUTH_INVALID_TOKEN` envelope, and the `-y` alias.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9a106de to
141abc7
Compare
Fourth slice of the agent-ergonomics series. Adds the three list/inspect
commands an agent typically needs to navigate the resource hierarchy:
- `deno deploy apps list [--limit N] [--cursor C]` — paginated apps in
the current org. JSON: `{ items, nextCursor, org }`. Uses
`apps.listByPage`.
- `deno deploy orgs list` — orgs reachable by the token. JSON:
`[{ id, slug, name, plan }]`. Uses `orgs.list`.
- `deno deploy deployments list [--app A] [--limit N] [--cursor C] [--status S]`
— paginated revisions. JSON: `{ items, nextCursor, org, app }`.
Uses `revisions.listByPage`.
All three honor the global `--json` flag and the global error envelope
from the foundation PR.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
141abc7 to
26b8cd0
Compare
crowlKats
approved these changes
May 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Stacked on #93 (which is stacked on #92 → #91). Adds the three list/inspect commands an agent typically needs to navigate the resource hierarchy without having seen the dashboard.
What's in this PR
All three honor the global `--json` flag (human tables via `tablePrinter` otherwise), and the global error envelope from #91 maps any NOT_AUTHENTICATED/NOT_FOUND/NETWORK responses without per-command code.
Test plan
Notes
`apps`/`orgs`/`deployments` are introduced as new top-level subcommands rather than extending the existing `switch` or `logs` patterns, because each has its own pagination/filter shape and the help surface stays cleaner that way.
🤖 Generated with Claude Code