diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index b0e3bfe7..d75cf666 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -50,6 +50,7 @@ cat .cursor/rules/AI-Assistance.mdc 5. **Remove tests without asking** - Always get permission first 6. **NODE_ENV** - To check if the CLI is in test mode, use the `isTestMode()` helper function. 7. **`process.exit`** - When creating a command, use `this.exit()` for consistent test mode handling. +8. **`console.log` / `console.error`** - In commands, always use `this.log()` (stdout) and `this.logToStderr()` (stderr). `console.*` bypasses oclif and can't be captured by tests. ## ✅ Correct Practices @@ -204,6 +205,46 @@ If this is part of a workspace, there may be: But focus on THIS project unless specifically asked about others. +## CLI Output & Flag Conventions + +### Output patterns (use helpers from src/utils/output.ts) +- **Progress**: `progress("Attaching to channel: " + resource(name))` — no color on action text, `progress()` appends `...` automatically. Never manually write `"Doing something..."` — always use `progress("Doing something")`. +- **Success**: `success("Message published to channel " + resource(name) + ".")` — green ✓, **must** end with `.` (not `!`). Never use `chalk.green("✓ ...")` directly — always use the `success()` helper. +- **Listening**: `listening("Listening for messages.")` — dim, includes "Press Ctrl+C to exit." Don't combine listening text inside a `success()` call — use a separate `listening()` call. +- **Resource names**: Always `resource(name)` (cyan), never quoted — including in `logCliEvent` messages. +- **Timestamps**: `formatTimestamp(ts)` — dim `[timestamp]` for event streams. Exported as `formatTimestamp` to avoid clashing with local `timestamp` variables. +- **JSON guard**: All human-readable output (progress, success, listening messages) must be wrapped in `if (!this.shouldOutputJson(flags))` so it doesn't pollute `--json` output. Only JSON payloads should be emitted when `--json` is active. + +### Additional output patterns (direct chalk, not helpers) +- **Secondary labels**: `chalk.dim("Label:")` — for field names in structured output (e.g., `${chalk.dim("Profile:")} ${value}`) +- **Client IDs**: `chalk.blue(clientId)` — for user/client identifiers in events +- **Event types**: `chalk.yellow(eventType)` — for action/event type labels +- **Warnings**: `chalk.yellow("Warning: ...")` — for non-fatal warnings +- **Errors**: Use `this.error()` (oclif standard) for fatal errors, not `this.log(chalk.red(...))` +- **No app error**: `'No app specified. Use --app flag or select an app with "ably apps switch"'` + +### Help output theme +Help colors are configured via `package.json > oclif.theme` (oclif's built-in theme system). The custom help class in `src/help.ts` also applies colors to COMMANDS sections it builds manually. Color scheme: +- **Commands/bin/topics**: cyan — primary actionable items +- **Flags/args**: whiteBright — bright but secondary to commands +- **Section headers**: bold — USAGE, FLAGS, COMMANDS, etc. +- **Command summaries**: whiteBright — descriptions in command listings +- **Defaults/options**: yellow — `[default: N]`, `` +- **Required flags**: red — `(required)` marker +- **`$` prompt**: green — shell prompt in examples/usage +- **Flag separator**: dim — comma between `-c, --count` + +When adding COMMANDS sections in `src/help.ts`, use `chalk.bold()` for headers, `chalk.cyan()` for command names, and `chalk.whiteBright()` for descriptions to stay consistent. + +### Flag conventions +- All flags kebab-case: `--my-flag` (never camelCase) +- `--app`: `"The app ID or name (defaults to current app)"` (for commands with `resolveAppId`), `"The app ID (defaults to current app)"` (for commands without) +- `--limit`: `"Maximum number of results to return (default: N)"` +- `--duration`: `"Automatically exit after N seconds (0 = run indefinitely)"`, alias `-D` +- `--rewind`: `"Number of messages to rewind when subscribing (default: 0)"` +- Channels use "publish", Rooms use "send" (matches SDK terminology) +- Command descriptions: imperative mood, sentence case, no trailing period (e.g., `"Subscribe to presence events on a channel"`) + ## ✓ Before Marking Complete - [ ] `pnpm prepare` succeeds diff --git a/.cursor/rules/AI-Assistance.mdc b/.cursor/rules/AI-Assistance.mdc index 7b71bbc7..846ad710 100644 --- a/.cursor/rules/AI-Assistance.mdc +++ b/.cursor/rules/AI-Assistance.mdc @@ -109,6 +109,32 @@ This document provides guidance for AI assistants working with the Ably CLI code const url = `https://${controlHost}/v1/apps` ``` +## CLI Output & Flag Conventions + +### Output patterns (use helpers from src/utils/output.ts) +- **Progress**: `progress("Attaching to channel: " + resource(name))` — no color on action text, ends with `...` +- **Success**: `success("Message published to channel " + resource(name) + ".")` — green ✓, ends with `.` +- **Listening**: `listening("Listening for messages.")` — dim, includes "Press Ctrl+C to exit." +- **Resource names**: Always `resource(name)` (cyan), never quoted +- **Timestamps**: `formatTimestamp(ts)` — dim `[timestamp]` for event streams. Import as `formatTimestamp` to avoid clashing with local `timestamp` variables. + +### Additional output patterns (direct chalk, not helpers) +- **Secondary labels**: `chalk.dim("Label:")` — for field names in structured output (e.g., `${chalk.dim("Profile:")} ${value}`) +- **Client IDs**: `chalk.blue(clientId)` — for user/client identifiers in events +- **Event types**: `chalk.yellow(eventType)` — for action/event type labels +- **Warnings**: `chalk.yellow("Warning: ...")` — for non-fatal warnings +- **Errors**: Use `this.error()` (oclif standard) for fatal errors, not `this.log(chalk.red(...))` +- **No app error**: `'No app specified. Use --app flag or select an app with "ably apps switch"'` + +### Flag conventions +- All flags kebab-case: `--my-flag` (never camelCase) +- `--app`: `"The app ID or name (defaults to current app)"` (for commands with `resolveAppId`), `"The app ID (defaults to current app)"` (for commands without) +- `--limit`: `"Maximum number of results to return (default: N)"` +- `--duration`: `"Automatically exit after N seconds (0 = run indefinitely)"`, alias `-D` +- `--rewind`: `"Number of messages to rewind when subscribing (default: 0)"` +- Channels use "publish", Rooms use "send" (matches SDK terminology) +- Command descriptions: imperative mood, sentence case, no trailing period (e.g., `"Subscribe to presence events on a channel"`) + ## Effective Testing 1. **Mocking Ably SDK Example**: diff --git a/README.md b/README.md index 252f88e0..c253aa4e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ * [CLI Usage](#cli-usage) * [Commands](#commands) * [Contributing](#contributing) -* [or](#or) # CLI Usage @@ -218,11 +217,11 @@ EXAMPLES $ ably accounts switch my-account COMMANDS - ably accounts current Show the current Ably account - ably accounts list List locally configured Ably accounts - ably accounts login Log in to your Ably account - ably accounts logout Log out from an Ably account - ably accounts switch Switch to a different Ably account + ably accounts current Show the current Ably account + ably accounts list List locally configured Ably accounts + ably accounts login Log in to your Ably account + ably accounts logout Log out from an Ably account + ably accounts switch Switch to a different Ably account ``` _See code: [src/commands/accounts/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/accounts/index.ts)_ @@ -402,14 +401,14 @@ EXAMPLES $ ably apps switch my-app COMMANDS - ably apps channel-rules Manage Ably channel rules (namespaces) - ably apps create Create a new app - ably apps current Show the currently selected app - ably apps delete Delete an app - ably apps list List all apps in the current account - ably apps set-apns-p12 Upload Apple Push Notification Service P12 certificate for an app - ably apps switch Switch to a different Ably app - ably apps update Update an app + ably apps channel-rules Manage Ably channel rules (namespaces) + ably apps create Create a new app + ably apps current Show the currently selected app + ably apps delete Delete an app + ably apps list List all apps in the current account + ably apps set-apns-p12 Upload Apple Push Notification Service P12 certificate for an app + ably apps switch Switch to a different Ably app + ably apps update Update an app ``` _See code: [src/commands/apps/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/apps/index.ts)_ @@ -450,7 +449,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID or name to create the channel rule in + --app= The app ID or name (defaults to current app) --authenticated Whether channels matching this rule require clients to be authenticated --batching-enabled Whether to enable batching for messages on channels matching this rule --batching-interval= The batching interval for messages on channels matching this rule @@ -494,7 +493,7 @@ ARGUMENTS FLAGS -f, --force Force deletion without confirmation -v, --verbose Output verbose logs - --app= App ID or name to delete the channel rule from + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -521,7 +520,10 @@ List channel rules for an app ``` USAGE - $ ably apps channel-rules list + $ ably apps channel-rules list [--app ] + +FLAGS + --app= The app ID or name (defaults to current app) DESCRIPTION List channel rules for an app @@ -529,7 +531,7 @@ DESCRIPTION EXAMPLES $ ably apps:channel-rules:list - $ ably apps:channel-rules:list --app-id my-app-id + $ ably apps:channel-rules:list --app my-app-id $ ably apps:channel-rules:list --json @@ -554,7 +556,7 @@ ARGUMENTS FLAGS -v, --verbose Output verbose logs - --app= App ID or name to update the channel rule in + --app= The app ID or name (defaults to current app) --[no-]authenticated Whether channels matching this rule require clients to be authenticated --[no-]batching-enabled Whether to enable batching for messages on channels matching this rule --batching-interval= The batching interval for messages on channels matching this rule @@ -651,7 +653,7 @@ ARGUMENTS FLAGS -f, --force Skip confirmation prompt -v, --verbose Output verbose logs - --app= App ID to delete (overrides argument and current app) + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -814,17 +816,17 @@ EXAMPLES $ ably auth issue-ably-token COMMANDS - ably auth issue-ably-token Creates an Ably Token with capabilities - ably auth issue-jwt-token Creates an Ably JWT token with capabilities - ably auth keys Key management commands - ably auth revoke-token Revokes the token provided + ably auth issue-ably-token Create an Ably Token with capabilities + ably auth issue-jwt-token Create an Ably JWT token with capabilities + ably auth keys Key management commands + ably auth revoke-token Revoke a token ``` _See code: [src/commands/auth/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/auth/index.ts)_ ## `ably auth issue-ably-token` -Creates an Ably Token with capabilities +Create an Ably Token with capabilities ``` USAGE @@ -833,7 +835,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID to use (uses current app if not specified) + --app= The app ID or name (defaults to current app) --capability= [default: {"*":["*"]}] Capabilities JSON string (e.g. {"channel":["publish","subscribe"]}) --client-id= Client ID to associate with the token. Use "none" to explicitly issue a token with no client ID, otherwise a default will be generated. @@ -843,7 +845,7 @@ FLAGS --ttl= [default: 3600] Time to live in seconds (default: 3600, 1 hour) DESCRIPTION - Creates an Ably Token with capabilities + Create an Ably Token with capabilities EXAMPLES $ ably auth issue-ably-token @@ -869,7 +871,7 @@ _See code: [src/commands/auth/issue-ably-token.ts](https://github.com/ably/ably- ## `ably auth issue-jwt-token` -Creates an Ably JWT token with capabilities +Create an Ably JWT token with capabilities ``` USAGE @@ -878,7 +880,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID to use (uses current app if not specified) + --app= The app ID or name (defaults to current app) --capability= [default: {"*":["*"]}] Capabilities JSON string (e.g. {"channel":["publish","subscribe"]}) --client-id= Client ID to associate with the token. Use "none" to explicitly issue a token with no client ID, otherwise a default will be generated. @@ -888,7 +890,7 @@ FLAGS --ttl= [default: 3600] Time to live in seconds (default: 3600, 1 hour) DESCRIPTION - Creates an Ably JWT token with capabilities + Create an Ably JWT token with capabilities EXAMPLES $ ably auth issue-jwt-token @@ -947,7 +949,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID the key belongs to (uses current app if not specified) + --app= The app ID or name (defaults to current app) --capabilities= [default: {"*":["*"]}] Capability object as a JSON string. Example: '{"channel:*":["publish"]}' --json Output in JSON format @@ -989,7 +991,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID to check key for (uses current app if not specified) + --app= The app ID (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1017,11 +1019,11 @@ USAGE $ ably auth keys get KEYNAMEORVALUE [-v] [--json | --pretty-json] [--app ] ARGUMENTS - KEYNAMEORVALUE Key name (APP_ID.KEY_ID) or full value of the key to get details for + KEYNAMEORVALUE Key name (APP_ID.KEY_ID), key ID, key label (e.g. Root), or full key value to get details for FLAGS -v, --verbose Output verbose logs - --app= App ID the key belongs to (uses current app if not specified) + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1031,11 +1033,11 @@ DESCRIPTION EXAMPLES $ ably auth keys get APP_ID.KEY_ID + $ ably auth keys get Root --app APP_ID + $ ably auth keys get KEY_ID --app APP_ID $ ably auth keys get APP_ID.KEY_ID --json - - $ ably auth keys get APP_ID.KEY_ID --pretty-json ``` _See code: [src/commands/auth/keys/get.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/auth/keys/get.ts)_ @@ -1050,7 +1052,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID to list keys for (uses current app if not specified) + --app= The app ID (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1082,7 +1084,7 @@ ARGUMENTS FLAGS -v, --verbose Output verbose logs - --app= App ID the key belongs to (uses current app if not specified) + --app= The app ID (defaults to current app) --force Skip confirmation prompt --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1117,7 +1119,7 @@ ARGUMENTS FLAGS -v, --verbose Output verbose logs - --app= App ID to switch keys for (uses current app if not specified) + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1148,7 +1150,7 @@ ARGUMENTS FLAGS -v, --verbose Output verbose logs - --app= App ID the key belongs to (uses current app if not specified) + --app= The app ID (defaults to current app) --capabilities= New capabilities for the key (comma-separated list) --json Output in JSON format --name= New name for the key @@ -1169,7 +1171,7 @@ _See code: [src/commands/auth/keys/update.ts](https://github.com/ably/ably-cli/b ## `ably auth revoke-token TOKEN` -Revokes the token provided +Revoke a token ``` USAGE @@ -1181,13 +1183,13 @@ ARGUMENTS FLAGS -c, --client-id= Client ID to revoke tokens for -v, --verbose Output verbose logs - --app= App ID to use (uses current app if not specified) + --app= The app ID or name (defaults to current app) --debug Show debug information --json Output in JSON format --pretty-json Output in colorized JSON format DESCRIPTION - Revokes the token provided + Revoke a token EXAMPLES $ ably auth revoke-token TOKEN @@ -1249,8 +1251,8 @@ EXAMPLES $ ably bench subscriber my-channel COMMANDS - ably bench publisher Run a publisher benchmark test - ably bench subscriber Run a subscriber benchmark test + ably bench publisher Run a publisher benchmark test + ably bench subscriber Run a subscriber benchmark test ``` _See code: [src/commands/bench/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/bench/index.ts)_ @@ -1297,13 +1299,13 @@ Run a subscriber benchmark test ``` USAGE - $ ably bench subscriber CHANNEL [-v] [--json | --pretty-json] [-d ] + $ ably bench subscriber CHANNEL [-v] [--json | --pretty-json] [-D ] ARGUMENTS CHANNEL The channel name to subscribe to FLAGS - -d, --duration= Duration to subscribe for in seconds (default: indefinite until Ctrl+C) + -D, --duration= Automatically exit after N seconds (0 = run indefinitely) -v, --verbose Output verbose logs --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1336,14 +1338,14 @@ EXAMPLES $ ably channels list COMMANDS - ably channels batch-publish Publish messages to multiple Ably channels with a single request - ably channels history Retrieve message history for a channel - ably channels inspect Open the Ably dashboard to inspect a specific channel - ably channels list List active channels using the channel enumeration API - ably channels occupancy Get occupancy metrics for a channel - ably channels presence Manage presence on Ably channels - ably channels publish Publish a message to an Ably channel - ably channels subscribe Subscribe to messages published on one or more Ably channels + ably channels batch-publish Publish messages to multiple Ably channels with a single request + ably channels history Retrieve message history for a channel + ably channels inspect Open the Ably dashboard to inspect a specific channel + ably channels list List active channels using the channel enumeration API + ably channels occupancy Get occupancy metrics for a channel + ably channels presence Manage presence on Ably channels + ably channels publish Publish a message to an Ably channel + ably channels subscribe Subscribe to messages published on one or more Ably channels ``` _See code: [src/commands/channels/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/channels/index.ts)_ @@ -1412,7 +1414,7 @@ FLAGS --end= End time for the history query (ISO 8601 format) --json Output in JSON format - --limit= [default: 50] Maximum number of messages to retrieve (default: 50) + --limit= [default: 50] Maximum number of results to return (default: 50) --pretty-json Output in colorized JSON format --start= Start time for the history query (ISO 8601 format) @@ -1448,7 +1450,7 @@ ARGUMENTS FLAGS -v, --verbose Output verbose logs - --app= App ID to use (uses current app if not specified) + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1473,7 +1475,7 @@ FLAGS -p, --prefix= Filter channels by prefix -v, --verbose Output verbose logs --json Output in JSON format - --limit= [default: 100] Maximum number of channels to return (default: 100) + --limit= [default: 100] Maximum number of results to return (default: 100) --pretty-json Output in colorized JSON format DESCRIPTION @@ -1555,7 +1557,7 @@ ARGUMENTS CHANNEL Channel name to subscribe to occupancy events FLAGS - -D, --duration= Automatically exit after the given number of seconds (0 = run indefinitely) + -D, --duration= Automatically exit after N seconds (0 = run indefinitely) -v, --verbose Output verbose logs --json Output in JSON format --pretty-json Output in colorized JSON format @@ -1609,7 +1611,7 @@ ARGUMENTS CHANNEL Channel to enter presence on FLAGS - -D, --duration= Automatically exit after the given number of seconds (0 = run indefinitely) + -D, --duration= Automatically exit after N seconds (0 = run indefinitely) -v, --verbose Output verbose logs --client-id= Overrides any default client ID when using API authentication. Use "none" to explicitly set no client ID. Not applicable when using token authentication. @@ -1652,7 +1654,7 @@ ARGUMENTS CHANNEL Channel name to subscribe to presence events FLAGS - -D, --duration= Automatically exit after the given number of seconds (0 = run indefinitely) + -D, --duration= Automatically exit after N seconds (0 = run indefinitely) -v, --verbose Output verbose logs --client-id= Overrides any default client ID when using API authentication. Use "none" to explicitly set no client ID. Not applicable when using token authentication. @@ -1747,7 +1749,7 @@ ARGUMENTS CHANNELS... Channel name(s) to subscribe to FLAGS - -D, --duration= Automatically exit after the given number of seconds (0 = run indefinitely) + -D, --duration= Automatically exit after N seconds (0 = run indefinitely) -v, --verbose Output verbose logs --cipher-algorithm= [default: aes] Encryption algorithm to use (default: aes) --cipher-key= Encryption key for decrypting messages (hex-encoded) @@ -1808,8 +1810,8 @@ EXAMPLES $ ably config show COMMANDS - ably config path Print the path to the Ably CLI config file - ably config show Display the contents of the Ably CLI config file + ably config path Print the path to the Ably CLI config file + ably config show Display the contents of the Ably CLI config file ``` _See code: [src/commands/config/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/config/index.ts)_ @@ -1883,7 +1885,7 @@ EXAMPLES $ ably connections test COMMANDS - ably connections test Test connection to Ably + ably connections test Test connection to Ably ``` _See code: [src/commands/connections/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/connections/index.ts)_ @@ -1961,11 +1963,11 @@ EXAMPLES $ ably integrations create COMMANDS - ably integrations create Create an integration - ably integrations delete Delete an integration - ably integrations get Get an integration rule by ID - ably integrations list List all integrations - ably integrations update Update an integration rule + ably integrations create Create an integration + ably integrations delete Delete an integration + ably integrations get Get an integration rule by ID + ably integrations list List all integrations + ably integrations update Update an integration rule ``` _See code: [src/commands/integrations/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/integrations/index.ts)_ @@ -1983,7 +1985,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID or name to create the integration in + --app= The app ID or name (defaults to current app) --channel-filter= Channel filter pattern --json Output in JSON format --pretty-json Output in colorized JSON format @@ -2022,7 +2024,7 @@ ARGUMENTS FLAGS -f, --force Force deletion without confirmation -v, --verbose Output verbose logs - --app= App ID or name to delete the integration from + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -2052,7 +2054,7 @@ ARGUMENTS FLAGS -v, --verbose Output verbose logs - --app= App ID or name to get the integration rule from + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -2079,7 +2081,7 @@ USAGE FLAGS -v, --verbose Output verbose logs - --app= App ID or name to list integrations for + --app= The app ID or name (defaults to current app) --json Output in JSON format --pretty-json Output in colorized JSON format @@ -2110,7 +2112,7 @@ ARGUMENTS FLAGS -v, --verbose Output verbose logs - --app= App ID or name of the app containing the integration rule + --app= The app ID or name (defaults to current app) --channel-filter= Channel filter pattern --json Output in JSON format --pretty-json Output in colorized JSON format @@ -2182,11 +2184,11 @@ EXAMPLES $ ably logs channel-lifecycle subscribe COMMANDS - ably logs channel-lifecycle Stream logs from [meta]channel.lifecycle meta channel - ably logs connection-lifecycleStream logs from [meta]connection.lifecycle meta channel - ably logs history Retrieve application log history - ably logs push Stream or retrieve push notification logs from [meta]log:push - ably logs subscribe Subscribe to live app logs + ably logs channel-lifecycle Stream logs from [meta]channel.lifecycle meta channel + ably logs connection-lifecycle Stream logs from [meta]connection.lifecycle meta channel + ably logs history Retrieve application log history + ably logs push Stream or retrieve push notification logs from [meta]log:push + ably logs subscribe Subscribe to live app logs ``` _See code: [src/commands/logs/index.ts](https://github.com/ably/ably-cli/blob/v0.16.0/src/commands/logs/index.ts)_ @@ -2216,13 +2218,13 @@ Stream logs from [meta]channel.lifecycle meta channel ``` USAGE - $ ably logs channel-lifecycle subscribe [-v] [--pretty-json | --json] [--rewind ] + $ ably logs channel-lifecycle subscribe [-v] [--json | --pretty-json] [--rewind ] FLAGS -v, --verbose Output verbose logs - --json Output results as JSON + --json Output in JSON format --pretty-json Output in colorized JSON format - --rewind= Number of messages to rewind when subscribing + --rewind= Number of messages to rewind when subscribing (default: 0) DESCRIPTION Stream logs from [meta]channel.lifecycle meta channel @@ -2268,7 +2270,7 @@ FLAGS --direction=