Skip to content

Commit c4b5f72

Browse files
leggetterclaude
andauthored
Rename telemetry command arguments and environment variable (#235)
* chore: bump version to 2.0.0-beta.0 and add comprehensive PR description Update package.json version from 1.10.0-beta.4 to 2.0.0-beta.0 to reflect the breaking changes in this release branch. Add PR_DESCRIPTION.md capturing the full scope of changes for the v2.0.0 release, including: - MCP server with 11 LLM-callable tools - Issues CLI (list, get, count, update, dismiss) - Telemetry instrumentation with opt-out support - Metrics consolidation (7 subcommands → 4) - Deprecated Hookdeck Go SDK removal (API 2024-03-01 → 2025-07-01) - Breaking change: --config flag renamed to --hookdeck-config https://claude.ai/code/session_012a587AhAbbWdqYx76cexPG * feat(mcp): add beta wrapping to MCP command and remove PR_DESCRIPTION.md Add ShortBeta/LongBeta wrapping to the MCP command for consistency with all other gateway subcommands. Remove PR_DESCRIPTION.md as it doesn't belong in the codebase. https://claude.ai/code/session_012a587AhAbbWdqYx76cexPG * refactor(telemetry): rename env var to HOOKDECK_CLI_TELEMETRY_DISABLED and use enabled/disabled args - Rename HOOKDECK_CLI_TELEMETRY_OPTOUT to HOOKDECK_CLI_TELEMETRY_DISABLED to match Next.js convention and align with the config key name - Change `hookdeck telemetry enable|disable` to `hookdeck telemetry enabled|disabled` - Update all tests and README accordingly https://claude.ai/code/session_012a587AhAbbWdqYx76cexPG --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent e3f7b26 commit c4b5f72

8 files changed

Lines changed: 29 additions & 29 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,13 +1101,13 @@ The Hookdeck CLI collects anonymous telemetry to help improve the tool. You can
11011101

11021102
```sh
11031103
# Disable telemetry
1104-
hookdeck telemetry disable
1104+
hookdeck telemetry disabled
11051105

11061106
# Re-enable telemetry
1107-
hookdeck telemetry enable
1107+
hookdeck telemetry enabled
11081108
```
11091109

1110-
You can also disable telemetry by setting the `HOOKDECK_CLI_TELEMETRY_OPTOUT` environment variable to `1` or `true`.
1110+
You can also disable telemetry by setting the `HOOKDECK_CLI_TELEMETRY_DISABLED` environment variable to `1` or `true`.
11111111

11121112
## Configuration files
11131113

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hookdeck-cli",
3-
"version": "1.10.0-beta.4",
3+
"version": "2.0.0-beta.0",
44
"description": "Hookdeck CLI",
55
"repository": {
66
"type": "git",

pkg/cmd/mcp.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ func newMCPCmd() *mcpCmd {
1717
mc.cmd = &cobra.Command{
1818
Use: "mcp",
1919
Args: validators.NoArgs,
20-
Short: "Start an MCP server for AI agent access to Hookdeck",
21-
Long: `Starts a Model Context Protocol (MCP) server over stdio.
20+
Short: ShortBeta("Start an MCP server for AI agent access to Hookdeck"),
21+
Long: LongBeta(`Starts a Model Context Protocol (MCP) server over stdio.
2222
2323
The server exposes Hookdeck Event Gateway resources — connections, sources,
2424
destinations, events, requests, and more — as MCP tools that AI agents and
2525
LLM-based clients can invoke.
2626
2727
If the CLI is already authenticated, all tools are available immediately.
2828
If not, a hookdeck_login tool is provided that initiates browser-based
29-
authentication so the user can log in without leaving the MCP session.`,
29+
authentication so the user can log in without leaving the MCP session.`),
3030
Example: ` # Start the MCP server (stdio transport)
3131
hookdeck gateway mcp
3232

pkg/cmd/telemetry.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ func newTelemetryCmd() *telemetryCmd {
1414
tc := &telemetryCmd{}
1515

1616
tc.cmd = &cobra.Command{
17-
Use: "telemetry [enable|disable]",
17+
Use: "telemetry [enabled|disabled]",
1818
Short: "Manage anonymous telemetry settings",
19-
Long: "Enable or disable anonymous telemetry that helps improve the Hookdeck CLI. Telemetry is enabled by default. You can also set the HOOKDECK_CLI_TELEMETRY_OPTOUT environment variable to 1 or true.",
20-
Example: ` $ hookdeck telemetry disable
21-
$ hookdeck telemetry enable`,
19+
Long: "Enable or disable anonymous telemetry that helps improve the Hookdeck CLI. Telemetry is enabled by default. You can also set the HOOKDECK_CLI_TELEMETRY_DISABLED environment variable to 1 or true.",
20+
Example: ` $ hookdeck telemetry disabled
21+
$ hookdeck telemetry enabled`,
2222
Args: cobra.ExactArgs(1),
23-
ValidArgs: []string{"enable", "disable"},
23+
ValidArgs: []string{"enabled", "disabled"},
2424
RunE: tc.runTelemetryCmd,
2525
}
2626

@@ -29,18 +29,18 @@ func newTelemetryCmd() *telemetryCmd {
2929

3030
func (tc *telemetryCmd) runTelemetryCmd(cmd *cobra.Command, args []string) error {
3131
switch args[0] {
32-
case "disable":
32+
case "disabled":
3333
if err := Config.SetTelemetryDisabled(true); err != nil {
3434
return fmt.Errorf("failed to disable telemetry: %w", err)
3535
}
3636
fmt.Println("Telemetry has been disabled.")
37-
case "enable":
37+
case "enabled":
3838
if err := Config.SetTelemetryDisabled(false); err != nil {
3939
return fmt.Errorf("failed to enable telemetry: %w", err)
4040
}
4141
fmt.Println("Telemetry has been enabled.")
4242
default:
43-
return fmt.Errorf("invalid argument %q: must be \"enable\" or \"disable\"", args[0])
43+
return fmt.Errorf("invalid argument %q: must be \"enabled\" or \"disabled\"", args[0])
4444
}
4545
return nil
4646
}

pkg/gateway/mcp/telemetry_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func parseTelemetryHeader(t *testing.T, raw string) hookdeck.CLITelemetry {
183183

184184
func TestMCPToolCall_TelemetryHeaderSentToAPI(t *testing.T) {
185185
// Ensure env-var opt-out is disabled so telemetry flows.
186-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
186+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
187187

188188
capture := &headerCapture{}
189189

@@ -213,7 +213,7 @@ func TestMCPToolCall_TelemetryHeaderSentToAPI(t *testing.T) {
213213
}
214214

215215
func TestMCPToolCall_EachCallGetsUniqueInvocationID(t *testing.T) {
216-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
216+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
217217

218218
capture := &headerCapture{}
219219

@@ -243,7 +243,7 @@ func TestMCPToolCall_EachCallGetsUniqueInvocationID(t *testing.T) {
243243
}
244244

245245
func TestMCPToolCall_TelemetryHeaderReflectsAction(t *testing.T) {
246-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
246+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
247247

248248
capture := &headerCapture{}
249249

@@ -274,7 +274,7 @@ func TestMCPToolCall_TelemetryHeaderReflectsAction(t *testing.T) {
274274
}
275275

276276
func TestMCPToolCall_TelemetryDisabledByConfig(t *testing.T) {
277-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
277+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
278278

279279
capture := &headerCapture{}
280280

@@ -298,7 +298,7 @@ func TestMCPToolCall_TelemetryDisabledByConfig(t *testing.T) {
298298
}
299299

300300
func TestMCPToolCall_TelemetryDisabledByEnvVar(t *testing.T) {
301-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "true")
301+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "true")
302302

303303
capture := &headerCapture{}
304304

@@ -320,7 +320,7 @@ func TestMCPToolCall_TelemetryDisabledByEnvVar(t *testing.T) {
320320
func TestMCPToolCall_MultipleAPICallsSameInvocation(t *testing.T) {
321321
// The "projects use" action makes 2 API calls (list projects, then update).
322322
// Both should carry the same invocation ID.
323-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
323+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
324324

325325
capture := &headerCapture{}
326326

pkg/hookdeck/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func (c *Client) PerformRequest(ctx context.Context, req *http.Request) (*http.R
129129
}
130130

131131
singletonDisabled := GetTelemetryInstance().Disabled
132-
if !telemetryOptedOut(os.Getenv("HOOKDECK_CLI_TELEMETRY_OPTOUT"), c.TelemetryDisabled || singletonDisabled) {
132+
if !telemetryOptedOut(os.Getenv("HOOKDECK_CLI_TELEMETRY_DISABLED"), c.TelemetryDisabled || singletonDisabled) {
133133
var telemetryHdr string
134134
var telErr error
135135
if c.Telemetry != nil {

pkg/hookdeck/client_telemetry_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func TestPerformRequestUsesTelemetryOverride(t *testing.T) {
7676
require.NoError(t, err)
7777

7878
// Clear opt-out env var
79-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
79+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
8080

8181
_, err = client.PerformRequest(context.Background(), req)
8282
require.NoError(t, err)
@@ -107,7 +107,7 @@ func TestPerformRequestTelemetryDisabledByConfig(t *testing.T) {
107107
TelemetryDisabled: true,
108108
}
109109

110-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
110+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
111111

112112
req, err := http.NewRequest(http.MethodGet, server.URL+"/test", nil)
113113
require.NoError(t, err)
@@ -132,7 +132,7 @@ func TestPerformRequestTelemetryDisabledByEnvVar(t *testing.T) {
132132
APIKey: "test",
133133
}
134134

135-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "true")
135+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "true")
136136

137137
req, err := http.NewRequest(http.MethodGet, server.URL+"/test", nil)
138138
require.NoError(t, err)
@@ -166,7 +166,7 @@ func TestPerformRequestFallsBackToSingleton(t *testing.T) {
166166
tel.SetDeviceName("test-host")
167167
tel.SetInvocationID("inv_singleton_test")
168168

169-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
169+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
170170

171171
req, err := http.NewRequest(http.MethodGet, server.URL+"/test", nil)
172172
require.NoError(t, err)
@@ -205,7 +205,7 @@ func TestPerformRequestTelemetryDisabledBySingleton(t *testing.T) {
205205
tel := GetTelemetryInstance()
206206
tel.SetDisabled(true)
207207

208-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
208+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
209209

210210
req, err := http.NewRequest(http.MethodGet, server.URL+"/test", nil)
211211
require.NoError(t, err)

pkg/hookdeck/telemetry_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func TestResetTelemetrySingletonThenRequest(t *testing.T) {
176176
}))
177177
defer server.Close()
178178

179-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
179+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
180180

181181
// Reset the singleton from any prior test state
182182
ResetTelemetryInstanceForTesting()
@@ -217,7 +217,7 @@ func TestResetTelemetrySingletonThenRequest(t *testing.T) {
217217
func TestResetTelemetrySingletonIsolation(t *testing.T) {
218218
// Simulates two sequential CLI command invocations.
219219
// Each should have its own telemetry context.
220-
t.Setenv("HOOKDECK_CLI_TELEMETRY_OPTOUT", "")
220+
t.Setenv("HOOKDECK_CLI_TELEMETRY_DISABLED", "")
221221

222222
headers := make([]string, 2)
223223

0 commit comments

Comments
 (0)