diff --git a/REFERENCE.md b/REFERENCE.md index 615e5629..362c7082 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -2197,9 +2197,6 @@ The token grants access to that tenant's data and is valid for 24 hours. Treat i as a credential: it is intended for your own backend to hand to a tenant's session, not to be pasted into a shell history or shared. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -2236,9 +2233,6 @@ The URL grants access to that tenant's portal session, so treat it as a credenti This requires a portal custom domain to be configured for the project; see 'hookdeck outpost config custom-domain'. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -2664,9 +2658,6 @@ list' to see the outcome. The destination must be enabled and must subscribe to the event's topic. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -2775,9 +2766,6 @@ other outpost command. The credentials stored by 'hookdeck login' are not accepted by the publish API, so pass `--api-key` or set HOOKDECK_API_KEY. You can create a Project API key in the Hookdeck dashboard under project settings. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -2847,9 +2835,6 @@ Dimensions: tenant_id, topic, destination_id Omit `--granularity` for a single total over the whole range; set it (1h, 5m, 1d) to bucket the results over time. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -2889,9 +2874,6 @@ Dimensions: tenant_id, destination_id, destination_type, topic, status, code, ma Omit `--granularity` for a single total over the whole range; set it (1h, 5m, 1d) to bucket the results over time. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -2927,9 +2909,6 @@ Show this project's Outpost configuration. Pass a key to print just that value, which is convenient in scripts. Unset keys are omitted unless you ask for one by name. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -2969,9 +2948,6 @@ see exactly what would change. Some keys are managed for you and are rejected if set directly; the API says which when that happens. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -3009,9 +2985,6 @@ hookdeck outpost config set --unset MAX_RETRY_LIMIT Show the custom domain configured for the tenant portal, if any. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -3037,9 +3010,6 @@ Configure a custom hostname for the tenant portal. The response includes the DNS records to create. The domain is not usable until they have propagated and been verified. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -3070,9 +3040,6 @@ Remove the tenant portal's custom domain. Tenant portal URLs stop working until another domain is configured. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -3102,9 +3069,6 @@ Worth checking first when something is not behaving: configuration changes take a short while to reach the deployment, and the status reports when it is still being applied. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash @@ -3165,9 +3129,6 @@ hookdeck_ prefix here as it does in 'hookdeck gateway mcp'. Protocol traffic uses stdout only (JSON-RPC); status and errors from the CLI before the server runs go to stderr. -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues - **Usage:** ```bash diff --git a/pkg/cmd/attempt.go b/pkg/cmd/attempt.go index fbb5d329..b4bf6330 100644 --- a/pkg/cmd/attempt.go +++ b/pkg/cmd/attempt.go @@ -17,8 +17,8 @@ func newAttemptCmd() *attemptCmd { Use: "attempt", Aliases: []string{"attempts"}, Args: validators.NoArgs, - Short: ShortBeta("Inspect delivery attempts"), - Long: LongBeta(`List or get attempts (single delivery tries for an event). Use --event-id to list attempts for an event.`), + Short: "Inspect delivery attempts", + Long: `List or get attempts (single delivery tries for an event). Use --event-id to list attempts for an event.`, } ac.cmd.AddCommand(newAttemptListCmd().cmd) diff --git a/pkg/cmd/connection.go b/pkg/cmd/connection.go index 897c70da..438d0e40 100644 --- a/pkg/cmd/connection.go +++ b/pkg/cmd/connection.go @@ -22,12 +22,12 @@ func newConnectionCmd() *connectionCmd { Use: "connection", Aliases: []string{"connections"}, Args: validators.NoArgs, - Short: ShortBeta("Manage your connections"), - Long: LongBeta(`Manage connections between sources and destinations. + Short: "Manage your connections", + Long: `Manage connections between sources and destinations. A connection links a source to a destination and defines how webhooks are routed. You can create connections with inline source and destination creation, or reference -existing resources.`), +existing resources.`, PersistentPreRun: func(cmd *cobra.Command, args []string) { initTelemetry(cmd) if shouldShowConnectionDeprecation() { diff --git a/pkg/cmd/destination.go b/pkg/cmd/destination.go index aacd867c..07ab77e9 100644 --- a/pkg/cmd/destination.go +++ b/pkg/cmd/destination.go @@ -17,11 +17,11 @@ func newDestinationCmd() *destinationCmd { Use: "destination", Aliases: []string{"destinations"}, Args: validators.NoArgs, - Short: ShortBeta("Manage your destinations"), - Long: LongBeta(`Manage webhook and event destinations. + Short: "Manage your destinations", + Long: `Manage webhook and event destinations. Destinations define where Hookdeck forwards events. Create destinations with a type (HTTP, CLI, MOCK_API), -optional URL and authentication, then connect them to sources via connections.`), +optional URL and authentication, then connect them to sources via connections.`, } dc.cmd.AddCommand(newDestinationListCmd().cmd) diff --git a/pkg/cmd/event.go b/pkg/cmd/event.go index aeadfbb2..119014bd 100644 --- a/pkg/cmd/event.go +++ b/pkg/cmd/event.go @@ -17,9 +17,9 @@ func newEventCmd() *eventCmd { Use: "event", Aliases: []string{"events"}, Args: validators.NoArgs, - Short: ShortBeta("Inspect and manage events"), - Long: LongBeta(`List, get, retry, cancel, or mute events (processed webhook deliveries). -Filter by connection ID (--connection-id), status, source, or destination.`), + Short: "Inspect and manage events", + Long: `List, get, retry, cancel, or mute events (processed webhook deliveries). +Filter by connection ID (--connection-id), status, source, or destination.`, } ec.cmd.AddCommand(newEventListCmd().cmd) diff --git a/pkg/cmd/helptext.go b/pkg/cmd/helptext.go index a117ab12..de7a4b6e 100644 --- a/pkg/cmd/helptext.go +++ b/pkg/cmd/helptext.go @@ -62,19 +62,3 @@ func LongEnableIntro(resource string) string { func LongUpsertIntro(resource string) string { return "Create a new " + resource + " or update an existing one by name (idempotent)." } - -// Beta help text for gateway/connection commands. Centralised so the feedback URL and wording stay consistent. -const BetaFeedbackSuffix = ` - -[BETA] This feature is in beta. Please share bugs and feedback via: -https://github.com/hookdeck/hookdeck-cli/issues` - -// ShortBeta appends [BETA] to a short description for use in Cobra Short. -func ShortBeta(short string) string { - return short + " [BETA]" -} - -// LongBeta appends the beta feedback paragraph to a long description for use in Cobra Long. -func LongBeta(long string) string { - return long + BetaFeedbackSuffix -} diff --git a/pkg/cmd/issue.go b/pkg/cmd/issue.go index 6b5d0585..d6ad0e82 100644 --- a/pkg/cmd/issue.go +++ b/pkg/cmd/issue.go @@ -17,12 +17,12 @@ func newIssueCmd() *issueCmd { Use: "issue", Aliases: []string{"issues"}, Args: validators.NoArgs, - Short: ShortBeta("Manage your issues"), - Long: LongBeta(`Manage Hookdeck issues. + Short: "Manage your issues", + Long: `Manage Hookdeck issues. Issues are automatically created when delivery failures, transformation errors, or backpressure conditions are detected. Use these commands to list, inspect, -update the status of, or dismiss issues.`), +update the status of, or dismiss issues.`, } ic.cmd.AddCommand(newIssueListCmd().cmd) diff --git a/pkg/cmd/mcp.go b/pkg/cmd/mcp.go index 4d1dcc0c..912c4e4b 100644 --- a/pkg/cmd/mcp.go +++ b/pkg/cmd/mcp.go @@ -21,8 +21,8 @@ func newMCPCmd() *mcpCmd { mc.cmd = &cobra.Command{ Use: "mcp", Args: validators.NoArgs, - Short: ShortBeta("Start an MCP server for AI agent access to Hookdeck"), - Long: LongBeta(`Starts a Model Context Protocol (MCP) server over stdio. + Short: "Start an MCP server for AI agent access to Hookdeck", + Long: `Starts a Model Context Protocol (MCP) server over stdio. The server exposes Hookdeck Event Gateway resources — connections, sources, destinations, events, requests, and more — as MCP tools that AI agents and @@ -48,7 +48,7 @@ traffic uses stdout only (JSON-RPC); status and errors from the CLI before the server runs go to stderr. hookdeck_login stays registered after sign-in so you can call it with reauth: true -to replace credentials (e.g. when project listing fails with a narrow API key).`), +to replace credentials (e.g. when project listing fails with a narrow API key).`, Example: ` # Start the MCP server, read-only (stdio transport) hookdeck gateway mcp diff --git a/pkg/cmd/metrics.go b/pkg/cmd/metrics.go index 76d0228e..c02d463b 100644 --- a/pkg/cmd/metrics.go +++ b/pkg/cmd/metrics.go @@ -170,12 +170,12 @@ func newMetricsCmd() *metricsCmd { mc.cmd = &cobra.Command{ Use: "metrics", Args: validators.NoArgs, - Short: ShortBeta("Query Event Gateway metrics"), - Long: LongBeta(`Query metrics for events, requests, attempts, and transformations. + Short: "Query Event Gateway metrics", + Long: `Query metrics for events, requests, attempts, and transformations. Requires --start and --end (ISO 8601 date-time). Use subcommands to choose the metric type. For event metrics you can query volume, queue depth, pending over time, or per-issue; -use --measures, --dimensions, and --issue-id on the events subcommand.`), +use --measures, --dimensions, and --issue-id on the events subcommand.`, } mc.cmd.AddCommand(newMetricsEventsCmd().cmd) diff --git a/pkg/cmd/metrics_attempts.go b/pkg/cmd/metrics_attempts.go index 8c7b19f9..081ba5c0 100644 --- a/pkg/cmd/metrics_attempts.go +++ b/pkg/cmd/metrics_attempts.go @@ -18,8 +18,8 @@ func newMetricsAttemptsCmd() *metricsAttemptsCmd { c.cmd = &cobra.Command{ Use: "attempts", Args: cobra.NoArgs, - Short: ShortBeta("Query attempt metrics"), - Long: LongBeta(`Query metrics for delivery attempts (latency, success/failure). Measures: ` + hookdeck.AttemptMetricsMeasures + `.`), + Short: "Query attempt metrics", + Long: `Query metrics for delivery attempts (latency, success/failure). Measures: ` + hookdeck.AttemptMetricsMeasures + `.`, RunE: c.runE, } addMetricsCommonFlags(c.cmd, &c.flags, hookdeck.AttemptMetricsFilters, hookdeck.AttemptMetricsDimensions, hookdeck.AttemptStatusValues) diff --git a/pkg/cmd/metrics_events.go b/pkg/cmd/metrics_events.go index 8e6a8482..ecb00986 100644 --- a/pkg/cmd/metrics_events.go +++ b/pkg/cmd/metrics_events.go @@ -21,8 +21,8 @@ func newMetricsEventsCmd() *metricsEventsCmd { c.cmd = &cobra.Command{ Use: "events", Args: cobra.NoArgs, - Short: ShortBeta("Query event metrics"), - Long: LongBeta(`Query event metrics: volume and success/failure counts, error rate, queue depth, + Short: "Query event metrics", + Long: `Query event metrics: volume and success/failure counts, error rate, queue depth, pending over time, or per-issue. Use --measures and --dimensions to choose what to query. Requires --start and --end. @@ -33,7 +33,7 @@ them: queue_depth, max_depth, max_age and pending each select their own, and none of them can be combined with per-issue (--dimensions issue_id, --issue-id). Measures: ` + hookdeck.EventMetricsMeasures + `. -Dimensions: ` + metricsEventsDimensions + `.`), +Dimensions: ` + metricsEventsDimensions + `.`, RunE: c.runE, } addMetricsCommonFlags(c.cmd, &c.flags, hookdeck.EventMetricsFilters, hookdeck.EventMetricsDimensions, hookdeck.EventStatusValues) diff --git a/pkg/cmd/metrics_requests.go b/pkg/cmd/metrics_requests.go index 68aa8c7d..7af87af6 100644 --- a/pkg/cmd/metrics_requests.go +++ b/pkg/cmd/metrics_requests.go @@ -18,8 +18,8 @@ func newMetricsRequestsCmd() *metricsRequestsCmd { c.cmd = &cobra.Command{ Use: "requests", Args: cobra.NoArgs, - Short: ShortBeta("Query request metrics"), - Long: LongBeta(`Query metrics for requests (acceptance, rejection, etc.). Measures: ` + hookdeck.RequestMetricsMeasures + `.`), + Short: "Query request metrics", + Long: `Query metrics for requests (acceptance, rejection, etc.). Measures: ` + hookdeck.RequestMetricsMeasures + `.`, RunE: c.runE, } addMetricsCommonFlags(c.cmd, &c.flags, hookdeck.RequestMetricsFilters, hookdeck.RequestMetricsDimensions, hookdeck.RequestStatusValues) diff --git a/pkg/cmd/metrics_transformations.go b/pkg/cmd/metrics_transformations.go index 6ffbce05..09af26a5 100644 --- a/pkg/cmd/metrics_transformations.go +++ b/pkg/cmd/metrics_transformations.go @@ -18,8 +18,8 @@ func newMetricsTransformationsCmd() *metricsTransformationsCmd { c.cmd = &cobra.Command{ Use: "transformations", Args: cobra.NoArgs, - Short: ShortBeta("Query transformation metrics"), - Long: LongBeta(`Query metrics for transformations. Measures: ` + hookdeck.TransformationMetricsMeasures + `.`), + Short: "Query transformation metrics", + Long: `Query metrics for transformations. Measures: ` + hookdeck.TransformationMetricsMeasures + `.`, RunE: c.runE, } addMetricsCommonFlags(c.cmd, &c.flags, hookdeck.TransformationMetricsFilters, hookdeck.TransformationMetricsDimensions, hookdeck.TransformationStatusValues) diff --git a/pkg/cmd/outpost.go b/pkg/cmd/outpost.go index 87d60dc6..abf19b96 100644 --- a/pkg/cmd/outpost.go +++ b/pkg/cmd/outpost.go @@ -114,14 +114,14 @@ func newOutpostCmd() *outpostCmd { oc.cmd = &cobra.Command{ Use: "outpost", Args: validators.NoArgs, - Short: ShortBeta("Manage your Hookdeck Outpost resources"), - Long: LongBeta(`Commands for managing Hookdeck Outpost tenants, destinations, events, + Short: "Manage your Hookdeck Outpost resources", + Long: `Commands for managing Hookdeck Outpost tenants, destinations, events, attempts, topics, metrics, and project configuration. Outpost delivers events to your users' destinations. Each of your users is a tenant, and each tenant owns the destinations their events are delivered to. -These commands require an Outpost project. Use 'hookdeck project use' to switch.`), +These commands require an Outpost project. Use 'hookdeck project use' to switch.`, Example: ` # List tenants hookdeck outpost tenant list diff --git a/pkg/cmd/outpost_attempt.go b/pkg/cmd/outpost_attempt.go index 5df27052..7b7fd0d9 100644 --- a/pkg/cmd/outpost_attempt.go +++ b/pkg/cmd/outpost_attempt.go @@ -23,11 +23,11 @@ func newOutpostAttemptCmd() *outpostAttemptCmd { Use: "attempt", Aliases: []string{"attempts"}, Args: validators.NoArgs, - Short: ShortBeta("Inspect delivery attempts"), - Long: LongBeta(`Inspect delivery attempts — each try at delivering an event to a destination. + Short: "Inspect delivery attempts", + Long: `Inspect delivery attempts — each try at delivering an event to a destination. This is where to look when a destination is not receiving events: attempts carry -the response code and body the destination returned.`), +the response code and body the destination returned.`, } ac.cmd.AddCommand(newOutpostAttemptListCmd().cmd) diff --git a/pkg/cmd/outpost_config.go b/pkg/cmd/outpost_config.go index e683ec67..08a7bc0e 100644 --- a/pkg/cmd/outpost_config.go +++ b/pkg/cmd/outpost_config.go @@ -26,12 +26,12 @@ func newOutpostConfigCmd() *outpostConfigCmd { Use: "config", Aliases: []string{"configs"}, Args: validators.NoArgs, - Short: ShortBeta("Manage Outpost project configuration"), - Long: LongBeta(`Read and change this project's Outpost configuration. + Short: "Manage Outpost project configuration", + Long: `Read and change this project's Outpost configuration. These settings apply to the whole project — every tenant and destination — so a change here affects all delivery. Changes take a short while to reach the -deployment; 'hookdeck outpost status' reports when it is still being applied.`), +deployment; 'hookdeck outpost status' reports when it is still being applied.`, } cc.cmd.AddCommand(newOutpostConfigGetCmd().cmd) @@ -53,11 +53,11 @@ func newOutpostConfigGetCmd() *outpostConfigGetCmd { cc.cmd = &cobra.Command{ Use: "get [key]", Args: validators.MaximumNArgs(1), - Short: ShortBeta("Show project configuration"), - Long: LongBeta(`Show this project's Outpost configuration. + Short: "Show project configuration", + Long: `Show this project's Outpost configuration. Pass a key to print just that value, which is convenient in scripts. Unset keys -are omitted unless you ask for one by name.`), +are omitted unless you ask for one by name.`, RunE: cc.run, Example: ` # Show everything that is set hookdeck outpost config get @@ -139,8 +139,8 @@ func newOutpostConfigSetCmd() *outpostConfigSetCmd { cc.cmd = &cobra.Command{ Use: "set [KEY=VALUE ...]", - Short: ShortBeta("Change project configuration"), - Long: LongBeta(`Change this project's Outpost configuration. + Short: "Change project configuration", + Long: `Change this project's Outpost configuration. Only the keys you pass are changed. --unset returns a key to its default. @@ -148,7 +148,7 @@ This affects delivery for every tenant in the project, so use --dry-run first to see exactly what would change. Some keys are managed for you and are rejected if set directly; the API says -which when that happens.`), +which when that happens.`, PreRunE: cc.validateFlags, RunE: cc.run, Example: ` # Set the topics destinations can subscribe to diff --git a/pkg/cmd/outpost_custom_domain.go b/pkg/cmd/outpost_custom_domain.go index f1345602..6d708926 100644 --- a/pkg/cmd/outpost_custom_domain.go +++ b/pkg/cmd/outpost_custom_domain.go @@ -19,12 +19,12 @@ func newOutpostCustomDomainCmd() *outpostCustomDomainCmd { cc.cmd = &cobra.Command{ Use: "custom-domain", Args: validators.NoArgs, - Short: ShortBeta("Manage the tenant portal's custom domain"), - Long: LongBeta(`Manage the custom hostname that serves your tenants' portal. + Short: "Manage the tenant portal's custom domain", + Long: `Manage the custom hostname that serves your tenants' portal. A custom domain is required before 'hookdeck outpost tenant portal' can return a URL. Adding one returns the DNS records to create; the domain starts working -once they have propagated and been verified.`), +once they have propagated and been verified.`, } cc.cmd.AddCommand(newOutpostCustomDomainGetCmd().cmd) @@ -46,8 +46,8 @@ func newOutpostCustomDomainGetCmd() *outpostCustomDomainGetCmd { cc.cmd = &cobra.Command{ Use: "get", Args: validators.NoArgs, - Short: ShortBeta("Show the portal custom domain"), - Long: LongBeta(`Show the custom domain configured for the tenant portal, if any.`), + Short: "Show the portal custom domain", + Long: `Show the custom domain configured for the tenant portal, if any.`, RunE: cc.run, Example: ` # Show the configured custom domain hookdeck outpost config custom-domain get`, @@ -98,11 +98,11 @@ func newOutpostCustomDomainSetCmd() *outpostCustomDomainSetCmd { cc.cmd = &cobra.Command{ Use: "set ", Args: validators.ExactArgs(1), - Short: ShortBeta("Set the portal custom domain"), - Long: LongBeta(`Configure a custom hostname for the tenant portal. + Short: "Set the portal custom domain", + Long: `Configure a custom hostname for the tenant portal. The response includes the DNS records to create. The domain is not usable until -they have propagated and been verified.`), +they have propagated and been verified.`, RunE: cc.run, Example: ` # Configure a custom domain hookdeck outpost config custom-domain set portal.example.com`, @@ -148,10 +148,10 @@ func newOutpostCustomDomainDeleteCmd() *outpostCustomDomainDeleteCmd { cc.cmd = &cobra.Command{ Use: "delete", Args: validators.NoArgs, - Short: ShortBeta("Remove the portal custom domain"), - Long: LongBeta(`Remove the tenant portal's custom domain. + Short: "Remove the portal custom domain", + Long: `Remove the tenant portal's custom domain. -Tenant portal URLs stop working until another domain is configured.`), +Tenant portal URLs stop working until another domain is configured.`, RunE: cc.run, Example: ` # Remove the custom domain, with a confirmation prompt hookdeck outpost config custom-domain delete diff --git a/pkg/cmd/outpost_destination.go b/pkg/cmd/outpost_destination.go index 48cbe949..50b28a19 100644 --- a/pkg/cmd/outpost_destination.go +++ b/pkg/cmd/outpost_destination.go @@ -21,14 +21,14 @@ func newOutpostDestinationCmd() *outpostDestinationCmd { Use: "destination", Aliases: []string{"destinations"}, Args: validators.NoArgs, - Short: ShortBeta("Manage your Outpost destinations"), - Long: LongBeta(`Manage the destinations events are delivered to. + Short: "Manage your Outpost destinations", + Long: `Manage the destinations events are delivered to. Destinations belong to a tenant, so every command here takes --tenant-id. Config and credential fields depend on the destination type. Pass them as repeatable key=value pairs — for example '--config url=https://example.com' — and -run 'hookdeck outpost destination-type get ' to see what a type accepts.`), +run 'hookdeck outpost destination-type get ' to see what a type accepts.`, } dc.cmd.PersistentFlags().StringVar(&dc.tenantID, "tenant-id", "", "The tenant that owns the destination (required)") diff --git a/pkg/cmd/outpost_destination_type.go b/pkg/cmd/outpost_destination_type.go index 502aa64e..4eeaf08a 100644 --- a/pkg/cmd/outpost_destination_type.go +++ b/pkg/cmd/outpost_destination_type.go @@ -24,11 +24,11 @@ func newOutpostDestinationTypeCmd() *outpostDestinationTypeCmd { Use: "destination-type", Aliases: []string{"destination-types"}, Args: validators.NoArgs, - Short: ShortBeta("Inspect available destination types"), - Long: LongBeta(`Inspect the destination types this project can create, and the fields each accepts. + Short: "Inspect available destination types", + Long: `Inspect the destination types this project can create, and the fields each accepts. Destination types are defined by the Outpost deployment rather than the CLI, so -this is the authoritative list — it stays correct as new types are added.`), +this is the authoritative list — it stays correct as new types are added.`, } dc.cmd.AddCommand(newOutpostDestinationTypeListCmd().cmd) diff --git a/pkg/cmd/outpost_event.go b/pkg/cmd/outpost_event.go index a51520ed..2c87f09d 100644 --- a/pkg/cmd/outpost_event.go +++ b/pkg/cmd/outpost_event.go @@ -17,11 +17,11 @@ func newOutpostEventCmd() *outpostEventCmd { Use: "event", Aliases: []string{"events"}, Args: validators.NoArgs, - Short: ShortBeta("Inspect published events"), - Long: LongBeta(`Inspect events published to your tenants' destinations. + Short: "Inspect published events", + Long: `Inspect events published to your tenants' destinations. Events are created by publishing, so there is no create command here. Publishing -is asynchronous, so a freshly published event can take a moment to appear.`), +is asynchronous, so a freshly published event can take a moment to appear.`, } ec.cmd.AddCommand(newOutpostEventListCmd().cmd) diff --git a/pkg/cmd/outpost_event_retry.go b/pkg/cmd/outpost_event_retry.go index e82e1add..d2ced9bb 100644 --- a/pkg/cmd/outpost_event_retry.go +++ b/pkg/cmd/outpost_event_retry.go @@ -24,14 +24,14 @@ func newOutpostEventRetryCmd() *outpostEventRetryCmd { ec.cmd = &cobra.Command{ Use: "retry", Args: validators.NoArgs, - Short: ShortBeta("Retry delivering an event to a destination"), - Long: LongBeta(`Deliver an event to a destination again. + Short: "Retry delivering an event to a destination", + Long: `Deliver an event to a destination again. The retry is queued rather than performed inline, so a successful response means it was accepted, not that it has been delivered. Use 'hookdeck outpost attempt list' to see the outcome. -The destination must be enabled and must subscribe to the event's topic.`), +The destination must be enabled and must subscribe to the event's topic.`, PreRunE: ec.validateFlags, RunE: ec.run, Example: ` # Retry one delivery diff --git a/pkg/cmd/outpost_mcp.go b/pkg/cmd/outpost_mcp.go index cb62f327..23f768ef 100644 --- a/pkg/cmd/outpost_mcp.go +++ b/pkg/cmd/outpost_mcp.go @@ -31,8 +31,8 @@ func newOutpostMCPCmd() *outpostMCPCmd { mc.cmd = &cobra.Command{ Use: "mcp", Args: validators.NoArgs, - Short: ShortBeta("Start an MCP server for AI agent access to Outpost"), - Long: LongBeta(`Starts a Model Context Protocol (MCP) server over stdio. + Short: "Start an MCP server for AI agent access to Outpost", + Long: `Starts a Model Context Protocol (MCP) server over stdio. The server exposes Hookdeck Outpost resources — tenants, destinations, events, attempts, topics, metrics and project configuration — as MCP tools that AI @@ -60,7 +60,7 @@ not, the server still starts and hookdeck_login initiates browser-based sign-in. Signing in is a Hookdeck operation rather than an Outpost one, so it keeps the hookdeck_ prefix here as it does in 'hookdeck gateway mcp'. Protocol traffic uses stdout only (JSON-RPC); status and errors from the CLI -before the server runs go to stderr.`), +before the server runs go to stderr.`, Example: ` # Start the MCP server, read-only (stdio transport) hookdeck outpost mcp diff --git a/pkg/cmd/outpost_metrics.go b/pkg/cmd/outpost_metrics.go index d45ee72d..69ce47eb 100644 --- a/pkg/cmd/outpost_metrics.go +++ b/pkg/cmd/outpost_metrics.go @@ -21,11 +21,11 @@ func newOutpostMetricsCmd() *outpostMetricsCmd { mc.cmd = &cobra.Command{ Use: "metrics", Args: validators.NoArgs, - Short: ShortBeta("Query aggregate metrics"), - Long: LongBeta(`Query aggregated metrics over a time range. + Short: "Query aggregate metrics", + Long: `Query aggregated metrics over a time range. Both subcommands require --start, --end and at least one --measures value, and -can group results with --dimensions.`), +can group results with --dimensions.`, } mc.cmd.AddCommand(newOutpostMetricsResourceCmd("events", @@ -61,15 +61,15 @@ func newOutpostMetricsResourceCmd(resource, summary, measures, dimensions string mc.cmd = &cobra.Command{ Use: resource, Args: validators.NoArgs, - Short: ShortBeta(summary), - Long: LongBeta(fmt.Sprintf(`%s + Short: summary, + Long: fmt.Sprintf(`%s Measures: %s Dimensions: %s Omit --granularity for a single total over the whole range; set it (1h, 5m, 1d) -to bucket the results over time.`, summary, measures, dimensions)), +to bucket the results over time.`, summary, measures, dimensions), PreRunE: mc.validateFlags, RunE: mc.run, Example: fmt.Sprintf(` # Total over the last week diff --git a/pkg/cmd/outpost_publish.go b/pkg/cmd/outpost_publish.go index 885599ae..d5d1f388 100644 --- a/pkg/cmd/outpost_publish.go +++ b/pkg/cmd/outpost_publish.go @@ -34,8 +34,8 @@ func newOutpostPublishCmd() *outpostPublishCmd { pc.cmd = &cobra.Command{ Use: "publish", Args: validators.NoArgs, - Short: ShortBeta("Publish an event"), - Long: LongBeta(`Publish an event to a topic, for delivery to a tenant's matching destinations. + Short: "Publish an event", + Long: `Publish an event to a topic, for delivery to a tenant's matching destinations. Publishing is asynchronous: a successful response means the event was accepted, not that it has been delivered. @@ -43,7 +43,7 @@ not that it has been delivered. This command needs a Hookdeck Project API key, which is different from every other outpost command. The credentials stored by 'hookdeck login' are not accepted by the publish API, so pass --api-key or set HOOKDECK_API_KEY. You can -create a Project API key in the Hookdeck dashboard under project settings.`), +create a Project API key in the Hookdeck dashboard under project settings.`, PreRunE: pc.validateFlags, RunE: pc.run, Example: ` # Publish an event diff --git a/pkg/cmd/outpost_status.go b/pkg/cmd/outpost_status.go index e011b6e7..7050d08d 100644 --- a/pkg/cmd/outpost_status.go +++ b/pkg/cmd/outpost_status.go @@ -23,12 +23,12 @@ func newOutpostStatusCmd() *outpostStatusCmd { sc.cmd = &cobra.Command{ Use: "status", Args: validators.NoArgs, - Short: ShortBeta("Show the Outpost deployment status"), - Long: LongBeta(`Show the status of this project's Outpost deployment. + Short: "Show the Outpost deployment status", + Long: `Show the status of this project's Outpost deployment. Worth checking first when something is not behaving: configuration changes take a short while to reach the deployment, and the status reports when it is still -being applied.`), +being applied.`, RunE: sc.run, Example: ` # Check deployment status hookdeck outpost status`, diff --git a/pkg/cmd/outpost_tenant.go b/pkg/cmd/outpost_tenant.go index aad07edf..35898f9a 100644 --- a/pkg/cmd/outpost_tenant.go +++ b/pkg/cmd/outpost_tenant.go @@ -17,11 +17,11 @@ func newOutpostTenantCmd() *outpostTenantCmd { Use: "tenant", Aliases: []string{"tenants"}, Args: validators.NoArgs, - Short: ShortBeta("Manage your Outpost tenants"), - Long: LongBeta(`Manage tenants — the end users events are delivered on behalf of. + Short: "Manage your Outpost tenants", + Long: `Manage tenants — the end users events are delivered on behalf of. Each tenant owns its own destinations. Tenant IDs are chosen by you rather than -generated, so use 'upsert' to create one: it is idempotent and safe to re-run.`), +generated, so use 'upsert' to create one: it is idempotent and safe to re-run.`, } tc.cmd.AddCommand(newOutpostTenantListCmd().cmd) diff --git a/pkg/cmd/outpost_tenant_portal.go b/pkg/cmd/outpost_tenant_portal.go index 854774fc..432972f0 100644 --- a/pkg/cmd/outpost_tenant_portal.go +++ b/pkg/cmd/outpost_tenant_portal.go @@ -27,13 +27,13 @@ func newOutpostTenantPortalCmd() *outpostTenantPortalCmd { tc.cmd = &cobra.Command{ Use: "portal ", Args: validators.ExactArgs(1), - Short: ShortBeta("Get a tenant's portal URL"), - Long: LongBeta(`Get a redirect URL for a tenant's portal, where they manage their own destinations. + Short: "Get a tenant's portal URL", + Long: `Get a redirect URL for a tenant's portal, where they manage their own destinations. The URL grants access to that tenant's portal session, so treat it as a credential. This requires a portal custom domain to be configured for the project; see -'hookdeck outpost config custom-domain'.`), +'hookdeck outpost config custom-domain'.`, PreRunE: tc.validateFlags, RunE: tc.runOutpostTenantPortalCmd, Example: ` # Print the portal URL diff --git a/pkg/cmd/outpost_tenant_token.go b/pkg/cmd/outpost_tenant_token.go index 61159375..6f7fe092 100644 --- a/pkg/cmd/outpost_tenant_token.go +++ b/pkg/cmd/outpost_tenant_token.go @@ -21,12 +21,12 @@ func newOutpostTenantTokenCmd() *outpostTenantTokenCmd { tc.cmd = &cobra.Command{ Use: "token ", Args: validators.ExactArgs(1), - Short: ShortBeta("Mint a JWT for a tenant"), - Long: LongBeta(`Mint a short-lived JWT scoped to a single tenant. + Short: "Mint a JWT for a tenant", + Long: `Mint a short-lived JWT scoped to a single tenant. The token grants access to that tenant's data and is valid for 24 hours. Treat it as a credential: it is intended for your own backend to hand to a tenant's session, -not to be pasted into a shell history or shared.`), +not to be pasted into a shell history or shared.`, RunE: tc.runOutpostTenantTokenCmd, Example: ` # Mint a token for a tenant hookdeck outpost tenant token acme diff --git a/pkg/cmd/outpost_topic.go b/pkg/cmd/outpost_topic.go index 7f8e6ebb..107cb14c 100644 --- a/pkg/cmd/outpost_topic.go +++ b/pkg/cmd/outpost_topic.go @@ -22,11 +22,11 @@ func newOutpostTopicCmd() *outpostTopicCmd { Use: "topic", Aliases: []string{"topics"}, Args: validators.NoArgs, - Short: ShortBeta("Inspect available topics"), - Long: LongBeta(`Inspect the topics destinations can subscribe to. + Short: "Inspect available topics", + Long: `Inspect the topics destinations can subscribe to. Topics are project configuration rather than a resource, so there is no create -command. Change them with 'hookdeck outpost config set TOPICS=a,b,c'.`), +command. Change them with 'hookdeck outpost config set TOPICS=a,b,c'.`, } tc.cmd.AddCommand(newOutpostTopicListCmd().cmd) diff --git a/pkg/cmd/request.go b/pkg/cmd/request.go index d0284e0c..d421091b 100644 --- a/pkg/cmd/request.go +++ b/pkg/cmd/request.go @@ -17,8 +17,8 @@ func newRequestCmd() *requestCmd { Use: "request", Aliases: []string{"requests"}, Args: validators.NoArgs, - Short: ShortBeta("Inspect and manage requests"), - Long: LongBeta(`List, get, and retry requests (raw inbound webhooks). View events or ignored events for a request.`), + Short: "Inspect and manage requests", + Long: `List, get, and retry requests (raw inbound webhooks). View events or ignored events for a request.`, } rc.cmd.AddCommand(newRequestListCmd().cmd) diff --git a/pkg/cmd/source.go b/pkg/cmd/source.go index 35158b39..47e7b9e4 100644 --- a/pkg/cmd/source.go +++ b/pkg/cmd/source.go @@ -17,11 +17,11 @@ func newSourceCmd() *sourceCmd { Use: "source", Aliases: []string{"sources"}, Args: validators.NoArgs, - Short: ShortBeta("Manage your sources"), - Long: LongBeta(`Manage webhook and event sources. + Short: "Manage your sources", + Long: `Manage webhook and event sources. Sources receive incoming webhooks and events. Create sources with a type (e.g. WEBHOOK, STRIPE) -and optional authentication config, then connect them to destinations via connections.`), +and optional authentication config, then connect them to destinations via connections.`, } sc.cmd.AddCommand(newSourceListCmd().cmd) diff --git a/pkg/cmd/transformation.go b/pkg/cmd/transformation.go index 6c7b3760..157afc47 100644 --- a/pkg/cmd/transformation.go +++ b/pkg/cmd/transformation.go @@ -17,11 +17,11 @@ func newTransformationCmd() *transformationCmd { Use: "transformation", Aliases: []string{"transformations"}, Args: validators.NoArgs, - Short: ShortBeta("Manage your transformations"), - Long: LongBeta(`Manage JavaScript transformations for request/response processing. + Short: "Manage your transformations", + Long: `Manage JavaScript transformations for request/response processing. Transformations run custom code to modify event payloads. Create with --name and --code (or --code-file), -then attach to connections via rules. Use 'transformation run' to test code locally.`), +then attach to connections via rules. Use 'transformation run' to test code locally.`, } tc.cmd.AddCommand(newTransformationListCmd().cmd)