Skip to content

Commit f73b2a7

Browse files
cevianclaude
andauthored
Add MCP install command and next steps after login (#26)
* Add tiger mcp install command specification - Add new `tiger mcp install <editor>` command to automate MCP configuration - Support for claude-code/claude and cursor editors - Automatic detection of configuration file locations - Backup creation by default with --no-backup option - Custom configuration path support with --config-path - Merges with existing MCP server configurations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Implement tiger mcp install command with toolhive integration - Add complete MCP install functionality in mcp_install.go - Support for Claude Code, Cursor, and Windsurf editors - Use toolhive library for client discovery and configuration - Implement robust JSON patching with hujson for config updates - Add file locking for concurrent safety using gofrs/flock - Use atomic writes with renameio/v2 for data integrity - Create config-driven editor mapping for maintainability - Add dynamic help text generation from supported clients config - Optimize to skip toolhive discovery when explicit config path provided - Move directory creation into addTigerMCPServer for better organization - Add comprehensive error handling and validation - Include proper Apache License 2.0 attribution for toolhive code 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Implement timestamp-based backup naming to prevent overwrites - Modify createConfigBackup to return actual backup path created - Use Unix timestamp in backup filename (config.backup.1758790175) - Update success message to show actual backup filename with timestamp - Ensure unique backups on each run without overwriting previous ones - Simplify backup logic compared to incremental numbering approach 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Add Codex MCP support with generic CLI-based installation framework - Create TigerMCPClient enum to handle both toolhive and custom clients - Add InstallCommand and ConfigPaths fields to clientConfig for flexibility - Implement generic addTigerMCPServerViaCLI for any CLI-based MCP installation - Add Codex support using `codex mcp add tigerdata tiger mcp` command - Support CODEX_HOME environment variable and ~/.codex/config.toml fallback - Refactor installation logic to use presence of InstallCommand vs toolhive approach - Add path expansion utilities for environment variables and home directory - Create config-driven approach that makes adding new CLI clients trivial Key improvements: - Installation method determined by InstallCommand presence (not toolhive absence) - Config discovery determined by ConfigPaths presence (not toolhive absence) - More explicit and intention-revealing conditional logic - Unified framework supports both JSON patching and CLI command approaches 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove toolhive dependency from MCP install system - Replace toolhive discovery with internal ConfigPaths system for all clients - Migrate ClaudeCode, Cursor, and Windsurf to use ConfigPaths instead of toolhive - Remove unused toolhive imports and struct fields from production code - Add comprehensive tests validating ConfigPaths equivalence and fallback behavior - Simplify client configuration by removing ToolhiveClientType field - Maintain toolhive dependency only for test validation (test-only import) - Add safety check for clients missing both ConfigPaths and InstallCommand All clients now use internal systems: ConfigPaths for JSON clients, CLI commands for others. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Clean up naming and migrate ClaudeCode to CLI-based installation - Rename TigerMCPClient type to MCPClient for cleaner naming - Rename TigerClientType field to ClientType in all configurations - Remove Tiger prefix from all constants: ClaudeCode, Cursor, Windsurf, Codex - Migrate ClaudeCode to use InstallCommand with claude CLI instead of JSON manipulation - Keep ConfigPaths for ClaudeCode to support backup functionality - Remove MCPServersPathPrefix for CLI-based clients (ClaudeCode, Codex) System now uses CLI commands for ClaudeCode and Codex, JSON manipulation for Cursor and Windsurf. All clients maintain ConfigPaths for backup discovery regardless of installation method. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Add comprehensive test coverage for MCP install functions - Add 100% coverage for mapEditorToTigerClientType, findOurClientConfig, addTigerMCPServerViaCLI, and findClientConfigFile functions - Add 90%+ coverage for ensurePathExists function - Add integration tests for installMCPForEditor using Cursor JSON config - Improve overall package coverage from 58.2% to 62.3% - Add tests for edge cases, error handling, and boundary conditions - Include comprehensive validation of client config structure - Add environment variable and path expansion testing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Enhance MCP install success message with comprehensive usage examples - Add structured examples showing users what they can ask their AI assistant - Organize capabilities into three clear categories: • Service management (list, create, manage TigerData services) • Documentation queries (PostgreSQL and TigerData docs access) • AI guides for common workflows (schema creation, hypertables setup) - Update MCP server command to use "mcp start" for proper server initialization - Improve user onboarding by providing concrete, actionable examples 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Use full Tiger executable path in MCP server configurations - Add getTigerExecutablePath() function to get current executable path - Update addTigerMCPServer() to use full path instead of assuming "tiger" in PATH - Update addTigerMCPServerViaCLI() to replace "tiger" placeholder with full path - Ensures MCP server configurations work regardless of PATH environment - Fixes potential issues when Tiger is not globally installed or accessible This prevents MCP server startup failures when the "tiger" command is not available in the user's PATH environment variable. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Add interactive editor selection to MCP install command - Change 'tiger mcp install <editor>' to 'tiger mcp install [editor]' - Add Bubble Tea-based interactive chooser when no editor specified - Support same navigation as project picker (arrows, numbers, q to quit) - Display editors in alphabetical order for consistent UX - Maintain backward compatibility with explicit editor arguments - Clean, minimal display showing just editor names without redundant descriptions Users can now run 'tiger mcp install' for interactive selection or continue using 'tiger mcp install <editor>' for direct installation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Add Gemini CLI and VS Code support, fix CLI-only client handling - Add Gemini CLI with 'gemini mcp add -s user' command format - Add VS Code with 'code --add-mcp' JSON command format - Fix logic to properly handle CLI-only clients with empty ConfigPaths - Skip backup creation for CLI-only clients (no config file to backup) - Improve success messages for CLI-only vs JSON-based clients - Add go run detection to use 'tiger' instead of temp executable paths - Support JSON command argument replacement for VS Code format - New clients available in interactive chooser: Gemini CLI, VS Code Fixes issue where CLI-only clients would error out due to empty ConfigPaths before reaching InstallCommand logic. Now supports hybrid approach where clients can have both config paths (for backup) and install commands. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix test failures and improve function naming for MCP installation - Rename addTigerMCPServer to addTigerMCPServerViaJSON for clarity - Add testing.Testing() detection to return "tiger" for consistent test results - Update all test expectations to match new "mcp start" args format - Fix client config validation to allow empty ConfigPaths for CLI-only clients - Ensure all tests pass with new Gemini CLI and VS Code support This commit resolves test failures caused by: 1. Dynamic executable paths in test environments 2. Updated MCP server command arguments 3. New CLI-only client validation requirements All tests now pass consistently across different environments while maintaining production functionality with full executable paths. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Add helpful next steps message after successful login After a user successfully logs in via 'tiger auth login', display a message with suggested next steps: - Install MCP server for AI coding tools - List existing services - Create a new service This helps guide users on what to do after authentication. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Address PR feedback for MCP installation command - Remove testing package import from production code - Refactor getTigerExecutablePath to use function variable for test overrides - Update tests to override the function instead of using testing.Testing() - Add ValidArgs field for better shell completions - Dynamically generate ValidArgs from supportedClients configuration - Improves tab completion experience for users - Fix alias display formatting in help text - Simplify to only show primary client name - Remove confusing nested parentheses formatting - Update terminology from "editor" to "client" - Support broader MCP client types beyond just code editors - Rename functions, variables, and user-facing text consistently - Update error messages and help text 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove 'claude' alias to differentiate Claude Code from Claude Desktop - Remove 'claude' from Claude Code EditorNames array - Keep only 'claude-code' as the supported name - Update help text examples to remove 'claude' alias - Update tests to remove 'claude' test cases This clarifies that Claude Code and Claude Desktop are separate clients with different configuration methods. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Consolidate client lookup functions to reduce code duplication - Merge mapClientToTigerClientType and findOurClientConfig into single findClientConfig function - Both functions were looping over supportedClients separately - New function directly returns *clientConfig from client name in one pass - Update all tests to use consolidated function - Simplifies code and improves performance 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove outdated toolhive references from comments - Remove "extends beyond toolhive support" from MCPClient comment - Update "toolhive-supported clients" to "JSON-config clients" - Keep toolhive reference in supportedClients comment as it's still useful 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Simplify conditional logic by removing no-op branch - Convert InstallCommand check from positive to negative condition - Remove redundant assignment of empty string to configPath - Make code flow clearer by checking for error case directly 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Change config path selection to use first path as default Updated the logic to use the first path in ConfigPaths array as the default when no existing config file is found, instead of using the last path. This follows a more intuitive "priority order" pattern where the preferred default path is listed first. Changes: - Reversed Codex ConfigPaths order to put default first - Updated findClientConfigFile to use configPaths[0] instead of last - Updated tests to expect first path as default 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Omit empty MCPServersPathPrefix fields in client configs Removed explicit empty string assignments for MCPServersPathPrefix in CLI-based client configs (Claude Code, Codex, Gemini, VS Code). These clients don't use JSON path manipulation so the field can be omitted entirely, making the config cleaner and the distinction clearer. The field is still present and populated for JSON-config clients (Cursor, Windsurf) where it's actually used. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Use filepath.Clean to normalize paths for cross-platform compatibility Added filepath.Clean after path expansion to ensure proper path normalization on Windows. Also added empty string check to preserve empty path behavior (Clean converts "" to "."). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Replace os.IsNotExist with errors.Is(err, fs.ErrNotExist) Updated to use the modern error checking pattern as recommended by Go docs. The os.IsNotExist function predates errors.Is and only supports errors from the os package. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Check for fs.ErrNotExist before using empty JSON fallback Added proper error checking before falling back to empty JSON. If the error is something other than file not existing (e.g., permission denied), we should return the error instead of overwriting the file with an empty object. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove renameio dependency for Windows compatibility Replaced renameio.WriteFile with os.WriteFile. The renameio library doesn't work on Windows, and atomic writes aren't critical here since: 1. We don't use atomic writes elsewhere in the codebase 2. The file locking already prevents concurrent modifications 3. Simpler code is preferable 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove flock dependency to simplify code Removed file locking as it: 1. Only prevents concurrent Tiger CLI instances, not other programs 2. Users won't run `tiger mcp install` concurrently in practice 3. Lock files may not be cleaned up if program exits unexpectedly 4. Has platform-specific behaviors that can cause issues Simpler code is more maintainable and eliminates a dependency. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove gjson dependency and simplify JSON manipulation Replaced gjson with hujson's built-in Find method for checking path existence. This reduces dependencies while maintaining functionality. - Removed the ensurePathExists function entirely - Use hujson.Find() to check if parent path exists - Only create parent path if it doesn't exist - Added test to verify multiple sibling servers are preserved 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Refactor: Move password storage to dedicated package and consolidate path expansion This commit addresses PR review feedback by restructuring the codebase to eliminate import cycles and consolidate duplicate functionality: - Move password storage functionality from util to new dedicated password package - Breaks import cycle: util tests → api → config → util - Create shared util/path.go for path expansion logic - Remove duplicate expandPath implementations from config and mcp_install - Update all imports to use new password package structure - Fix test types to avoid cross-package dependencies The restructuring improves code organization and maintainability while resolving circular dependency issues that emerged during testing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix Claude Code MCP installation to use User scope The Claude CLI defaults to Local scope when adding MCP servers, but we want Tiger MCP to be available across all projects. This commit adds the `-s user` flag to ensure User scope installation. Also clarified in the help text that Claude Code installs with User scope. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Update MCP spec to list all supported editors The spec now includes all 6 editors/clients that the MCP install command supports: - Claude Code - Cursor - Windsurf - Codex - Gemini CLI - VS Code Also added the interactive editor selection option to the examples section. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Address Copilot PR feedback for MCP install command - Fix spec_mcp.md examples to show correct args ["mcp", "start"] - Add comprehensive idempotency test verifying config value updates - Fix loop variable pointer issue in findClientConfig - Update misleading comment about file locking - Add proper error handling for os.UserHomeDir in path.go - Fix test comment from "last path" to "first path" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Address latest Copilot and Nathan's PR feedback Copilot feedback: - Expand --config-path for ~ and environment variables - Preserve original file permissions for backups and config files - Use UnixNano timestamps for backups to avoid collisions - Use getValidEditorNames() instead of duplicated code Nathan's feedback: - Unify ExpandPath error handling (both cases use if err == nil) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix comment grammar per Copilot nitpick - Capitalize acronyms (IDE, CLI) - Add space after // 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Address remaining PR feedback - Update spec to recommend CLI install instead of manual config - Make ESC key quit the editor selector (matches help text) - Fix backup test to expect preserved file permissions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Refactor MCP install command builder to use function-based approach Replace static InstallCommand arrays with buildInstallCommand functions to avoid ambiguity between binary name and server name (both "tiger"). Changes: - Add buildInstallCommand function field to clientConfig - Replace static command arrays with builder functions that take tigerPath - Remove complex string replacement logic from addTigerMCPServerViaCLI - Update all client configs to use builder functions - Change server name from "tigerdata" to "tiger" for consistency - Export ServerName constant for reuse across packages - Update tests to use new builder pattern - Update spec documentation to recommend CLI install approach This ensures server name and binary path are explicitly constructed in the right positions, preventing accidental replacement of the server name with the full binary path. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 460a6ef commit f73b2a7

20 files changed

+2282
-165
lines changed

go.mod

Lines changed: 125 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,81 +3,178 @@ module github.com/timescale/tiger-cli
33
go 1.25.1
44

55
require (
6-
github.com/charmbracelet/bubbletea v1.3.6
6+
github.com/charmbracelet/bubbletea v1.3.10
7+
github.com/google/jsonschema-go v0.2.3
78
github.com/jackc/pgx/v5 v5.7.5
89
github.com/modelcontextprotocol/go-sdk v0.5.0
910
github.com/oapi-codegen/oapi-codegen/v2 v2.5.0
1011
github.com/oapi-codegen/runtime v1.1.2
1112
github.com/olekukonko/tablewriter v1.0.9
12-
github.com/spf13/cobra v1.9.1
13-
github.com/spf13/viper v1.20.1
13+
github.com/spf13/cobra v1.10.1
14+
github.com/spf13/pflag v1.0.10
15+
github.com/spf13/viper v1.21.0
16+
github.com/stacklok/toolhive v0.3.5
17+
github.com/stretchr/testify v1.11.1
18+
github.com/tailscale/hujson v0.0.0-20250605163823-992244df8c5a
1419
github.com/zalando/go-keyring v0.2.6
15-
go.uber.org/mock v0.5.2
20+
go.uber.org/mock v0.6.0
1621
go.uber.org/zap v1.27.0
17-
golang.org/x/oauth2 v0.30.0
18-
golang.org/x/term v0.33.0
22+
golang.org/x/oauth2 v0.31.0
23+
golang.org/x/term v0.35.0
1924
gopkg.in/yaml.v3 v3.0.1
2025
)
2126

2227
require (
23-
al.essio.dev/pkg/shellescape v1.5.1 // indirect
28+
al.essio.dev/pkg/shellescape v1.6.0 // indirect
29+
github.com/1password/onepassword-sdk-go v0.3.1 // indirect
30+
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
31+
github.com/Microsoft/go-winio v0.6.2 // indirect
32+
github.com/adrg/xdg v0.5.3 // indirect
2433
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
2534
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
35+
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
2636
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
2737
github.com/charmbracelet/lipgloss v1.1.0 // indirect
28-
github.com/charmbracelet/x/ansi v0.9.3 // indirect
38+
github.com/charmbracelet/x/ansi v0.10.1 // indirect
2939
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
3040
github.com/charmbracelet/x/term v0.2.1 // indirect
41+
github.com/containerd/errdefs v1.0.0 // indirect
42+
github.com/containerd/errdefs/pkg v0.3.0 // indirect
43+
github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
3144
github.com/danieljoos/wincred v1.2.2 // indirect
45+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
46+
github.com/distribution/reference v0.6.0 // indirect
47+
github.com/docker/cli v28.2.2+incompatible // indirect
48+
github.com/docker/distribution v2.8.3+incompatible // indirect
49+
github.com/docker/docker v28.4.0+incompatible // indirect
50+
github.com/docker/docker-credential-helpers v0.9.3 // indirect
51+
github.com/docker/go-connections v0.6.0 // indirect
52+
github.com/docker/go-units v0.5.0 // indirect
3253
github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936 // indirect
54+
github.com/dylibso/observe-sdk/go v0.0.0-20240819160327-2d926c5d788a // indirect
55+
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
3356
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
34-
github.com/fatih/color v1.15.0 // indirect
35-
github.com/fsnotify/fsnotify v1.8.0 // indirect
57+
github.com/extism/go-sdk v1.7.0 // indirect
58+
github.com/fatih/color v1.18.0 // indirect
59+
github.com/felixge/httpsnoop v1.0.4 // indirect
60+
github.com/fsnotify/fsnotify v1.9.0 // indirect
61+
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
3662
github.com/getkin/kin-openapi v0.132.0 // indirect
37-
github.com/go-openapi/jsonpointer v0.21.0 // indirect
38-
github.com/go-openapi/swag v0.23.0 // indirect
39-
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
63+
github.com/go-logr/logr v1.4.3 // indirect
64+
github.com/go-logr/stdr v1.2.2 // indirect
65+
github.com/go-logr/zapr v1.3.0 // indirect
66+
github.com/go-openapi/jsonpointer v0.21.1 // indirect
67+
github.com/go-openapi/jsonreference v0.21.0 // indirect
68+
github.com/go-openapi/swag v0.24.1 // indirect
69+
github.com/go-openapi/swag/cmdutils v0.24.0 // indirect
70+
github.com/go-openapi/swag/conv v0.24.0 // indirect
71+
github.com/go-openapi/swag/fileutils v0.24.0 // indirect
72+
github.com/go-openapi/swag/jsonname v0.24.0 // indirect
73+
github.com/go-openapi/swag/jsonutils v0.24.0 // indirect
74+
github.com/go-openapi/swag/loading v0.24.0 // indirect
75+
github.com/go-openapi/swag/mangling v0.24.0 // indirect
76+
github.com/go-openapi/swag/netutils v0.24.0 // indirect
77+
github.com/go-openapi/swag/stringutils v0.24.0 // indirect
78+
github.com/go-openapi/swag/typeutils v0.24.0 // indirect
79+
github.com/go-openapi/swag/yamlutils v0.24.0 // indirect
80+
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
81+
github.com/gobwas/glob v0.2.3 // indirect
4082
github.com/godbus/dbus/v5 v5.1.0 // indirect
41-
github.com/google/jsonschema-go v0.2.3 // indirect
83+
github.com/gofrs/flock v0.12.1 // indirect
84+
github.com/gogo/protobuf v1.3.2 // indirect
85+
github.com/google/gnostic-models v0.7.0 // indirect
86+
github.com/google/go-cmp v0.7.0 // indirect
87+
github.com/google/go-containerregistry v0.20.6 // indirect
4288
github.com/google/uuid v1.6.0 // indirect
89+
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
90+
github.com/ianlancetaylor/demangle v0.0.0-20250417193237-f615e6bd150b // indirect
4391
github.com/inconshreveable/mousetrap v1.1.0 // indirect
4492
github.com/jackc/pgpassfile v1.0.0 // indirect
4593
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
4694
github.com/josharian/intern v1.0.0 // indirect
95+
github.com/jpillora/backoff v1.0.0 // indirect
96+
github.com/json-iterator/go v1.1.12 // indirect
97+
github.com/klauspost/compress v1.18.0 // indirect
4798
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
48-
github.com/mailru/easyjson v0.7.7 // indirect
49-
github.com/mattn/go-colorable v0.1.13 // indirect
99+
github.com/mailru/easyjson v0.9.0 // indirect
100+
github.com/mattn/go-colorable v0.1.14 // indirect
50101
github.com/mattn/go-isatty v0.0.20 // indirect
51102
github.com/mattn/go-localereader v0.0.1 // indirect
52103
github.com/mattn/go-runewidth v0.0.16 // indirect
104+
github.com/mitchellh/go-homedir v1.1.0 // indirect
105+
github.com/moby/docker-image-spec v1.3.1 // indirect
106+
github.com/moby/spdystream v0.5.0 // indirect
107+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
108+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
53109
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
54110
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
55111
github.com/muesli/cancelreader v0.2.2 // indirect
56112
github.com/muesli/termenv v0.16.0 // indirect
113+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
114+
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
57115
github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect
58116
github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect
59117
github.com/olekukonko/errors v1.1.0 // indirect
60118
github.com/olekukonko/ll v0.0.9 // indirect
61-
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
119+
github.com/opencontainers/go-digest v1.0.0 // indirect
120+
github.com/opencontainers/image-spec v1.1.1 // indirect
121+
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
62122
github.com/perimeterx/marshmallow v1.1.5 // indirect
123+
github.com/pkg/errors v0.9.1 // indirect
124+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
63125
github.com/rivo/uniseg v0.4.7 // indirect
64-
github.com/sagikazarmark/locafero v0.7.0 // indirect
65-
github.com/sourcegraph/conc v0.3.0 // indirect
126+
github.com/sagikazarmark/locafero v0.11.0 // indirect
127+
github.com/sirupsen/logrus v1.9.3 // indirect
128+
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
66129
github.com/speakeasy-api/jsonpath v0.6.0 // indirect
67130
github.com/speakeasy-api/openapi-overlay v0.10.2 // indirect
68-
github.com/spf13/afero v1.12.0 // indirect
69-
github.com/spf13/cast v1.7.1 // indirect
70-
github.com/spf13/pflag v1.0.6 // indirect
131+
github.com/spf13/afero v1.15.0 // indirect
132+
github.com/spf13/cast v1.10.0 // indirect
71133
github.com/subosito/gotenv v1.6.0 // indirect
134+
github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // indirect
135+
github.com/tetratelabs/wazero v1.9.0 // indirect
136+
github.com/tidwall/gjson v1.18.0 // indirect
137+
github.com/tidwall/match v1.1.1 // indirect
138+
github.com/tidwall/pretty v1.2.1 // indirect
139+
github.com/vbatts/tar-split v0.12.1 // indirect
72140
github.com/vmware-labs/yaml-jsonpath v0.3.2 // indirect
141+
github.com/x448/float16 v0.8.4 // indirect
73142
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
74143
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
144+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
145+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect
146+
go.opentelemetry.io/otel v1.38.0 // indirect
147+
go.opentelemetry.io/otel/metric v1.38.0 // indirect
148+
go.opentelemetry.io/otel/trace v1.38.0 // indirect
149+
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
75150
go.uber.org/multierr v1.11.0 // indirect
76-
golang.org/x/crypto v0.37.0 // indirect
77-
golang.org/x/mod v0.25.0 // indirect
78-
golang.org/x/sync v0.16.0 // indirect
79-
golang.org/x/sys v0.34.0 // indirect
80-
golang.org/x/text v0.27.0 // indirect
81-
golang.org/x/tools v0.34.0 // indirect
151+
go.yaml.in/yaml/v2 v2.4.2 // indirect
152+
go.yaml.in/yaml/v3 v3.0.4 // indirect
153+
golang.ngrok.com/muxado/v2 v2.0.1 // indirect
154+
golang.ngrok.com/ngrok/v2 v2.1.0 // indirect
155+
golang.org/x/crypto v0.42.0 // indirect
156+
golang.org/x/exp/event v0.0.0-20250819193227-8b4c13bb791b // indirect
157+
golang.org/x/exp/jsonrpc2 v0.0.0-20250911091902-df9299821621 // indirect
158+
golang.org/x/mod v0.28.0 // indirect
159+
golang.org/x/net v0.43.0 // indirect
160+
golang.org/x/sync v0.17.0 // indirect
161+
golang.org/x/sys v0.36.0 // indirect
162+
golang.org/x/text v0.29.0 // indirect
163+
golang.org/x/time v0.12.0 // indirect
164+
golang.org/x/tools v0.36.0 // indirect
165+
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
166+
google.golang.org/protobuf v1.36.8 // indirect
167+
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
168+
gopkg.in/inf.v0 v0.9.1 // indirect
82169
gopkg.in/yaml.v2 v2.4.0 // indirect
170+
k8s.io/api v0.34.1 // indirect
171+
k8s.io/apimachinery v0.34.1 // indirect
172+
k8s.io/client-go v0.34.1 // indirect
173+
k8s.io/klog/v2 v2.130.1 // indirect
174+
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
175+
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d // indirect
176+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
177+
sigs.k8s.io/randfill v1.0.0 // indirect
178+
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
179+
sigs.k8s.io/yaml v1.6.0 // indirect
83180
)

0 commit comments

Comments
 (0)