From d2c0553b6da7cdb568cf340d2fc0bcea322c7133 Mon Sep 17 00:00:00 2001 From: Snider Date: Thu, 29 Jan 2026 18:13:51 +0000 Subject: [PATCH] refactor: flatten CLI to root, simplify pkg/mcp for CLI-only use - Move cmd/core/cmd/* to cmd/* (flatten directory structure) - Update module path from github.com/host-uk/core/cmd/core to github.com/host-uk/core - Remove go.mod files from pkg/* (single module now) - Simplify pkg/mcp to file operations only (no GUI deps) - GUI features (display, webview, process) stay in core-gui/pkg/mcp - Fix import aliases (sdkpkg) for package name conflicts - Remove old backup directory (cmdbk) Co-Authored-By: Claude Opus 4.5 --- cmd/{core/cmd => }/Taskfile.yml | 0 cmd/{core/cmd => }/ai/agentic.go | 2 +- cmd/{core/cmd => }/ai/commands.go | 0 cmd/{core/cmd => }/ci/ci_release.go | 0 cmd/{core/cmd => }/ci/commands.go | 0 cmd/{core/cmd => }/commands_ci.go | 8 +- cmd/{core/cmd => }/commands_dev.go | 26 +- cmd/core/README.md | 270 ------ cmd/core/Taskfile.yml | 39 - cmd/core/bin/.gitkeep | 0 cmd/core/go.mod | 45 - cmd/core/go.sum | 135 --- cmd/core/main.go | 12 - cmd/{core/cmd => }/dev/api.go | 0 cmd/{core/cmd => }/dev/ci.go | 0 cmd/{core/cmd => }/dev/commands.go | 0 cmd/{core/cmd => }/dev/commit.go | 0 cmd/{core/cmd => }/dev/dev.go | 0 cmd/{core/cmd => }/dev/health.go | 0 cmd/{core/cmd => }/dev/impact.go | 0 cmd/{core/cmd => }/dev/issues.go | 0 cmd/{core/cmd => }/dev/pull.go | 0 cmd/{core/cmd => }/dev/push.go | 0 cmd/{core/cmd => }/dev/reviews.go | 0 cmd/{core/cmd => }/dev/sync.go | 0 cmd/{core/cmd => }/dev/work.go | 0 cmd/{core/cmd => }/docs/commands.go | 0 cmd/{core/cmd => }/docs/docs.go | 2 +- cmd/{core/cmd => }/doctor/commands.go | 0 cmd/{core/cmd => }/doctor/doctor.go | 2 +- cmd/{core/cmd => }/go/commands.go | 0 cmd/{core/cmd => }/go/go.go | 2 +- cmd/{core/cmd => }/php/commands.go | 0 cmd/{core/cmd => }/php/php.go | 2 +- cmd/{core/cmd => }/pkg/commands.go | 0 cmd/{core/cmd => }/pkg/pkg.go | 2 +- cmd/{core/cmd => }/root.go | 0 cmd/{core/cmd => }/sdk/commands.go | 0 cmd/{core/cmd => }/sdk/sdk.go | 6 +- cmd/{core/cmd => }/setup/commands.go | 0 cmd/{core/cmd => }/setup/setup.go | 2 +- cmd/{core/cmd => }/shared/styles.go | 0 cmd/{core/cmd => }/shared/utils.go | 0 cmd/{core/cmd => }/test/commands.go | 0 cmd/{core/cmd => }/test/test.go | 0 cmd/{core/cmd => }/vm/commands.go | 0 cmd/{core/cmd => }/vm/container.go | 0 cmd/{core/cmd => }/vm/templates.go | 2 +- go.mod | 80 +- go.sum | 202 ++++- main.go | 2 +- pkg/agentic/go.mod | 19 - pkg/agentic/go.sum | 23 - pkg/build/go.mod | 18 - pkg/build/go.sum | 23 - pkg/cache/go.mod | 3 - pkg/devops/go.mod | 18 - pkg/devops/go.sum | 15 - pkg/errors/go.mod | 3 - pkg/git/go.mod | 3 - pkg/mcp/go.mod | 12 - pkg/mcp/go.sum | 12 - pkg/mcp/mcp.go | 1186 +------------------------ pkg/repos/go.mod | 11 - pkg/repos/go.sum | 17 - pkg/sdk/go.mod | 37 - pkg/sdk/go.sum | 65 -- pkg/updater/go.mod | 41 - pkg/updater/go.sum | 131 --- 69 files changed, 268 insertions(+), 2210 deletions(-) rename cmd/{core/cmd => }/Taskfile.yml (100%) rename cmd/{core/cmd => }/ai/agentic.go (99%) rename cmd/{core/cmd => }/ai/commands.go (100%) rename cmd/{core/cmd => }/ci/ci_release.go (100%) rename cmd/{core/cmd => }/ci/commands.go (100%) rename cmd/{core/cmd => }/commands_ci.go (69%) rename cmd/{core/cmd => }/commands_dev.go (55%) delete mode 100644 cmd/core/README.md delete mode 100644 cmd/core/Taskfile.yml delete mode 100644 cmd/core/bin/.gitkeep delete mode 100644 cmd/core/go.mod delete mode 100644 cmd/core/go.sum delete mode 100644 cmd/core/main.go rename cmd/{core/cmd => }/dev/api.go (100%) rename cmd/{core/cmd => }/dev/ci.go (100%) rename cmd/{core/cmd => }/dev/commands.go (100%) rename cmd/{core/cmd => }/dev/commit.go (100%) rename cmd/{core/cmd => }/dev/dev.go (100%) rename cmd/{core/cmd => }/dev/health.go (100%) rename cmd/{core/cmd => }/dev/impact.go (100%) rename cmd/{core/cmd => }/dev/issues.go (100%) rename cmd/{core/cmd => }/dev/pull.go (100%) rename cmd/{core/cmd => }/dev/push.go (100%) rename cmd/{core/cmd => }/dev/reviews.go (100%) rename cmd/{core/cmd => }/dev/sync.go (100%) rename cmd/{core/cmd => }/dev/work.go (100%) rename cmd/{core/cmd => }/docs/commands.go (100%) rename cmd/{core/cmd => }/docs/docs.go (99%) rename cmd/{core/cmd => }/doctor/commands.go (100%) rename cmd/{core/cmd => }/doctor/doctor.go (99%) rename cmd/{core/cmd => }/go/commands.go (100%) rename cmd/{core/cmd => }/go/go.go (99%) rename cmd/{core/cmd => }/php/commands.go (100%) rename cmd/{core/cmd => }/php/php.go (99%) rename cmd/{core/cmd => }/pkg/commands.go (100%) rename cmd/{core/cmd => }/pkg/pkg.go (99%) rename cmd/{core/cmd => }/root.go (100%) rename cmd/{core/cmd => }/sdk/commands.go (100%) rename cmd/{core/cmd => }/sdk/sdk.go (95%) rename cmd/{core/cmd => }/setup/commands.go (100%) rename cmd/{core/cmd => }/setup/setup.go (99%) rename cmd/{core/cmd => }/shared/styles.go (100%) rename cmd/{core/cmd => }/shared/utils.go (100%) rename cmd/{core/cmd => }/test/commands.go (100%) rename cmd/{core/cmd => }/test/test.go (100%) rename cmd/{core/cmd => }/vm/commands.go (100%) rename cmd/{core/cmd => }/vm/container.go (100%) rename cmd/{core/cmd => }/vm/templates.go (99%) delete mode 100644 pkg/agentic/go.mod delete mode 100644 pkg/agentic/go.sum delete mode 100644 pkg/build/go.mod delete mode 100644 pkg/build/go.sum delete mode 100644 pkg/cache/go.mod delete mode 100644 pkg/devops/go.mod delete mode 100644 pkg/devops/go.sum delete mode 100644 pkg/errors/go.mod delete mode 100644 pkg/git/go.mod delete mode 100644 pkg/mcp/go.mod delete mode 100644 pkg/mcp/go.sum delete mode 100644 pkg/repos/go.mod delete mode 100644 pkg/repos/go.sum delete mode 100644 pkg/sdk/go.mod delete mode 100644 pkg/sdk/go.sum delete mode 100644 pkg/updater/go.mod delete mode 100644 pkg/updater/go.sum diff --git a/cmd/core/cmd/Taskfile.yml b/cmd/Taskfile.yml similarity index 100% rename from cmd/core/cmd/Taskfile.yml rename to cmd/Taskfile.yml diff --git a/cmd/core/cmd/ai/agentic.go b/cmd/ai/agentic.go similarity index 99% rename from cmd/core/cmd/ai/agentic.go rename to cmd/ai/agentic.go index 94800b5..b2c10f8 100644 --- a/cmd/core/cmd/ai/agentic.go +++ b/cmd/ai/agentic.go @@ -12,7 +12,7 @@ import ( "time" "github.com/charmbracelet/lipgloss" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" "github.com/host-uk/core/pkg/agentic" "github.com/leaanthony/clir" ) diff --git a/cmd/core/cmd/ai/commands.go b/cmd/ai/commands.go similarity index 100% rename from cmd/core/cmd/ai/commands.go rename to cmd/ai/commands.go diff --git a/cmd/core/cmd/ci/ci_release.go b/cmd/ci/ci_release.go similarity index 100% rename from cmd/core/cmd/ci/ci_release.go rename to cmd/ci/ci_release.go diff --git a/cmd/core/cmd/ci/commands.go b/cmd/ci/commands.go similarity index 100% rename from cmd/core/cmd/ci/commands.go rename to cmd/ci/commands.go diff --git a/cmd/core/cmd/commands_ci.go b/cmd/commands_ci.go similarity index 69% rename from cmd/core/cmd/commands_ci.go rename to cmd/commands_ci.go index 51b2e43..278ed63 100644 --- a/cmd/core/cmd/commands_ci.go +++ b/cmd/commands_ci.go @@ -3,10 +3,10 @@ package cmd import ( - "github.com/host-uk/core/cmd/core/cmd/build" - "github.com/host-uk/core/cmd/core/cmd/ci" - "github.com/host-uk/core/cmd/core/cmd/doctor" - "github.com/host-uk/core/cmd/core/cmd/sdk" + "github.com/host-uk/core/cmd/build" + "github.com/host-uk/core/cmd/ci" + "github.com/host-uk/core/cmd/doctor" + "github.com/host-uk/core/cmd/sdk" "github.com/leaanthony/clir" ) diff --git a/cmd/core/cmd/commands_dev.go b/cmd/commands_dev.go similarity index 55% rename from cmd/core/cmd/commands_dev.go rename to cmd/commands_dev.go index 1288d73..21e927c 100644 --- a/cmd/core/cmd/commands_dev.go +++ b/cmd/commands_dev.go @@ -3,19 +3,19 @@ package cmd import ( - "github.com/host-uk/core/cmd/core/cmd/ai" - "github.com/host-uk/core/cmd/core/cmd/build" - "github.com/host-uk/core/cmd/core/cmd/ci" - "github.com/host-uk/core/cmd/core/cmd/dev" - "github.com/host-uk/core/cmd/core/cmd/docs" - "github.com/host-uk/core/cmd/core/cmd/doctor" - gocmd "github.com/host-uk/core/cmd/core/cmd/go" - "github.com/host-uk/core/cmd/core/cmd/php" - "github.com/host-uk/core/cmd/core/cmd/pkg" - "github.com/host-uk/core/cmd/core/cmd/sdk" - "github.com/host-uk/core/cmd/core/cmd/setup" - testcmd "github.com/host-uk/core/cmd/core/cmd/test" - "github.com/host-uk/core/cmd/core/cmd/vm" + "github.com/host-uk/core/cmd/ai" + "github.com/host-uk/core/cmd/build" + "github.com/host-uk/core/cmd/ci" + "github.com/host-uk/core/cmd/dev" + "github.com/host-uk/core/cmd/docs" + "github.com/host-uk/core/cmd/doctor" + gocmd "github.com/host-uk/core/cmd/go" + "github.com/host-uk/core/cmd/php" + "github.com/host-uk/core/cmd/pkg" + "github.com/host-uk/core/cmd/sdk" + "github.com/host-uk/core/cmd/setup" + testcmd "github.com/host-uk/core/cmd/test" + "github.com/host-uk/core/cmd/vm" "github.com/leaanthony/clir" ) diff --git a/cmd/core/README.md b/cmd/core/README.md deleted file mode 100644 index 81bb971..0000000 --- a/cmd/core/README.md +++ /dev/null @@ -1,270 +0,0 @@ -# Core CLI - -Multi-repository management tool for the Core Framework ecosystem. - -## Installation - -```bash -go install github.com/Snider/Core/cmd/core@latest -``` - -Or build from source: - -```bash -cd cmd/core && go build . -``` - -## Configuration - -The CLI looks for `repos.yaml` in: -1. Current directory and parent directories -2. `~/Code/host-uk/repos.yaml` -3. `~/.config/core/repos.yaml` - -If no `repos.yaml` is found, it scans the current directory for git repositories. - -### repos.yaml format - -```yaml -version: 1 -org: host-uk -base_path: ~/Code/host-uk - -repos: - core-php: - type: foundation - description: Core PHP framework - depends_on: [] - docs: true - - core-tenant: - type: module - depends_on: [core-php] - description: Multi-tenancy support - -defaults: - ci: github-actions - branch: main -``` - -## Commands - -### Health Check - -Quick summary of repository health: - -```bash -core health # Summary: "18 repos │ clean │ synced │ up to date" -core health --verbose # Include list of dirty/ahead repos -``` - -### Work (All-in-One) - -Status, commit, and push workflow: - -```bash -core work # Show status table + push repos with commits -core work --status # Status only, no push -core work --commit # Use Claude to commit dirty repos first -``` - -### Commit - -Claude-assisted commits across repositories: - -```bash -core commit # Show dirty repos, confirm, Claude commits each -core commit --all # Skip confirmation -``` - -Reads `AGENTS.md` from the registry directory for commit context. - -### Push - -Push commits to remote: - -```bash -core push # Show repos to push, confirm, push all -core push --force # Skip confirmation -``` - -### Pull - -Pull updates from remote: - -```bash -core pull # Pull only repos that are behind -core pull --all # Pull all repos -``` - -### Impact Analysis - -Show dependency impact of changing a repository: - -```bash -core impact core-php # Show what depends on core-php -core impact core-tenant # Show direct and transitive dependents -``` - -Output: -``` -Impact analysis for core-php -Core PHP framework - events, modules, lifecycle - -● 16 direct dependent(s): - core-admin - core-tenant - ... - -Summary: Changes to core-php affect 16/17 repos -``` - -### Issues - -List open GitHub issues across repositories: - -```bash -core issues # All open issues -core issues --assignee @me # Filter by assignee -core issues --limit 5 # Limit per repo -``` - -### Reviews - -List open PRs with review status: - -```bash -core reviews # All open PRs -core reviews --author me # Filter by author -core reviews --all # Include draft PRs -``` - -### CI Status - -Check GitHub Actions workflow status: - -```bash -core ci # Status for all repos (main branch) -core ci --branch dev # Check specific branch -core ci --failed # Show only failing runs -``` - -### Documentation - -Manage documentation across repositories: - -```bash -core docs list # Show docs coverage -core docs sync # Sync to ./docs-build -core docs sync --dry-run # Preview without copying -core docs sync --output ./site # Custom output directory -``` - -### Setup - -Bootstrap a workspace by cloning all repos from registry: - -```bash -core setup # Clone all repos into packages/ -core setup --dry-run # Show what would be cloned -core setup --only module,product # Filter by type -``` - -### Doctor - -Check development environment: - -```bash -core doctor # Check all requirements -core doctor --verbose # Show version details -``` - -Checks: git, gh, php, composer, node, SSH keys, gh auth status. - -### Search - -Search GitHub for repositories: - -```bash -core search --org host-uk # List all repos in org -core search --org host-uk --pattern 'core-*' # Filter by name pattern -core search --org host-uk --type service # Filter by type in name -core search --org host-uk --refresh # Bypass cache -``` - -Results are cached in `.core/cache/` for 1 hour. - -### Install - -Install individual repositories: - -```bash -core install --repo host-uk/core-php # Clone to packages/ -core install --repo host-uk/core-mcp --add # Clone and add to repos.yaml -core install --repo host-uk/core-api --dir . # Clone to current directory -``` - -Uses `gh` with HTTPS (no SSH key required). - -## Global Flags - -All commands support: - -```bash ---registry # Explicit path to repos.yaml -``` - -## Requirements - -- Go 1.25+ -- `gh` CLI for GitHub operations (issues, reviews, ci) -- `claude` CLI for AI-assisted commits - -## Cache - -API responses are cached in the workspace `.core/` directory: - -``` -/ -├── .core/ -│ └── cache/ -│ └── github/ -│ └── / -│ └── repos.json # Cached repo list (1 hour TTL) -├── repos.yaml -└── packages/ -``` - -The `.core/` directory should be gitignored. - -## Architecture - -``` -cmd/core/ -├── cmd/ -│ ├── root.go # CLI setup -│ ├── work.go # work command -│ ├── health.go # health command -│ ├── commit.go # commit command -│ ├── push.go # push command -│ ├── pull.go # pull command -│ ├── impact.go # impact command -│ ├── issues.go # issues command -│ ├── reviews.go # reviews command -│ ├── ci.go # ci command -│ ├── docs.go # docs command -│ ├── setup.go # setup command -│ ├── doctor.go # doctor command -│ ├── search.go # search command -│ └── install.go # install command -├── go.mod -└── main.go - -pkg/ -├── cache/ -│ └── cache.go # File-based cache with TTL -├── git/ -│ └── git.go # Parallel git operations -└── repos/ - └── registry.go # repos.yaml parser + dependency graph -``` diff --git a/cmd/core/Taskfile.yml b/cmd/core/Taskfile.yml deleted file mode 100644 index afb356d..0000000 --- a/cmd/core/Taskfile.yml +++ /dev/null @@ -1,39 +0,0 @@ -version: '3' - -includes: - cmd: "./cmd/Taskfile.yml" - -tasks: - build: - summary: Builds the core executable - cmds: - - task: cmd:build - - build:dev: - summary: Builds the core executable - cmds: - - task: cmd:build:dev - - run: - summary: Builds and runs the core executable - cmds: - - task: build - - cmd: chmod +x {{.TASKFILE_DIR}}/bin/core - platforms: [linux, darwin] - - "{{.TASKFILE_DIR}}/bin/core {{.CLI_ARGS}}" - - sync: - summary: Updates the public API Go files - deps: [build] - cmds: - - cmd: chmod +x {{.TASKFILE_DIR}}/bin/core - platforms: [linux, darwin] - - "{{.TASKFILE_DIR}}/bin/core dev sync" - - test-gen: - summary: Generates tests for the public API - deps: [build] - cmds: - - cmd: chmod +x {{.TASKFILE_DIR}}/bin/core - platforms: [linux, darwin] - - "{{.TASKFILE_DIR}}/bin/core dev test-gen" diff --git a/cmd/core/bin/.gitkeep b/cmd/core/bin/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/cmd/core/go.mod b/cmd/core/go.mod deleted file mode 100644 index 17ae718..0000000 --- a/cmd/core/go.mod +++ /dev/null @@ -1,45 +0,0 @@ -module github.com/host-uk/core/cmd/core - -go 1.25.5 - -require ( - github.com/charmbracelet/lipgloss v1.1.0 - github.com/host-uk/core/pkg/build v0.0.0 - github.com/host-uk/core/pkg/cache v0.0.0-20260128153551-31712611be1c - github.com/host-uk/core/pkg/git v0.0.0 - github.com/host-uk/core/pkg/repos v0.0.0 - github.com/leaanthony/clir v1.7.0 - github.com/leaanthony/debme v1.2.1 - github.com/leaanthony/gosod v1.0.4 - github.com/rivo/tview v0.42.0 - golang.org/x/net v0.49.0 - golang.org/x/text v0.33.0 -) - -require ( - github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect - github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect - github.com/charmbracelet/x/ansi v0.8.0 // indirect - github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect - github.com/charmbracelet/x/term v0.2.1 // indirect - github.com/gdamore/encoding v1.0.1 // indirect - github.com/gdamore/tcell/v2 v2.8.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/muesli/termenv v0.16.0 // indirect - github.com/rivo/uniseg v0.4.7 // indirect - github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect - golang.org/x/sys v0.40.0 // indirect - golang.org/x/term v0.39.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) - -replace ( - github.com/host-uk/core => ../../ - github.com/host-uk/core/pkg/build => ../../pkg/build - github.com/host-uk/core/pkg/git => ../../pkg/git - github.com/host-uk/core/pkg/repos => ../../pkg/repos -) diff --git a/cmd/core/go.sum b/cmd/core/go.sum deleted file mode 100644 index d522676..0000000 --- a/cmd/core/go.sum +++ /dev/null @@ -1,135 +0,0 @@ -github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= -github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= -github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= -github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= -github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= -github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= -github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= -github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= -github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8= -github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= -github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= -github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw= -github.com/gdamore/encoding v1.0.1/go.mod h1:0Z0cMFinngz9kS1QfMjCP8TY7em3bZYeeklsSDPivEo= -github.com/gdamore/tcell/v2 v2.8.1 h1:KPNxyqclpWpWQlPLx6Xui1pMk8S+7+R37h3g07997NU= -github.com/gdamore/tcell/v2 v2.8.1/go.mod h1:bj8ori1BG3OYMjmb3IklZVWfZUJ1UBQt9JXrOCOhGWw= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/host-uk/core/pkg/cache v0.0.0-20260128153551-31712611be1c h1:VPqkoWMBZ1f+LG3wEGqbwybsfdGog2QFVVyJ2rT0+5I= -github.com/host-uk/core/pkg/cache v0.0.0-20260128153551-31712611be1c/go.mod h1:jXl2UpzWLT/RK6Ufqxew+/JJqxDE03wvMHjmqQCTDP0= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leaanthony/clir v1.7.0 h1:xiAnhl7ryPwuH3ERwPWZp/pCHk8wTeiwuAOt6MiNyAw= -github.com/leaanthony/clir v1.7.0/go.mod h1:k/RBkdkFl18xkkACMCLt09bhiZnrGORoxmomeMvDpE0= -github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= -github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= -github.com/leaanthony/gosod v1.0.4 h1:YLAbVyd591MRffDgxUOU1NwLhT9T1/YiwjKZpkNFeaI= -github.com/leaanthony/gosod v1.0.4/go.mod h1:GKuIL0zzPj3O1SdWQOdgURSuhkF+Urizzxh26t9f1cw= -github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= -github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= -github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= -github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/rivo/tview v0.42.0 h1:b/ftp+RxtDsHSaynXTbJb+/n/BxDEi+W3UfF5jILK6c= -github.com/rivo/tview v0.42.0/go.mod h1:cSfIYfhpSGCjp3r/ECJb+GKS7cGJnqV8vfjQPwoXyfY= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= -github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= -github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cmd/core/main.go b/cmd/core/main.go deleted file mode 100644 index 0f7dae4..0000000 --- a/cmd/core/main.go +++ /dev/null @@ -1,12 +0,0 @@ -package main - -import ( - "github.com/host-uk/core/cmd/core/cmd" -) - -func main() { - err := cmd.Execute() - if err != nil { - return - } -} diff --git a/cmd/core/cmd/dev/api.go b/cmd/dev/api.go similarity index 100% rename from cmd/core/cmd/dev/api.go rename to cmd/dev/api.go diff --git a/cmd/core/cmd/dev/ci.go b/cmd/dev/ci.go similarity index 100% rename from cmd/core/cmd/dev/ci.go rename to cmd/dev/ci.go diff --git a/cmd/core/cmd/dev/commands.go b/cmd/dev/commands.go similarity index 100% rename from cmd/core/cmd/dev/commands.go rename to cmd/dev/commands.go diff --git a/cmd/core/cmd/dev/commit.go b/cmd/dev/commit.go similarity index 100% rename from cmd/core/cmd/dev/commit.go rename to cmd/dev/commit.go diff --git a/cmd/core/cmd/dev/dev.go b/cmd/dev/dev.go similarity index 100% rename from cmd/core/cmd/dev/dev.go rename to cmd/dev/dev.go diff --git a/cmd/core/cmd/dev/health.go b/cmd/dev/health.go similarity index 100% rename from cmd/core/cmd/dev/health.go rename to cmd/dev/health.go diff --git a/cmd/core/cmd/dev/impact.go b/cmd/dev/impact.go similarity index 100% rename from cmd/core/cmd/dev/impact.go rename to cmd/dev/impact.go diff --git a/cmd/core/cmd/dev/issues.go b/cmd/dev/issues.go similarity index 100% rename from cmd/core/cmd/dev/issues.go rename to cmd/dev/issues.go diff --git a/cmd/core/cmd/dev/pull.go b/cmd/dev/pull.go similarity index 100% rename from cmd/core/cmd/dev/pull.go rename to cmd/dev/pull.go diff --git a/cmd/core/cmd/dev/push.go b/cmd/dev/push.go similarity index 100% rename from cmd/core/cmd/dev/push.go rename to cmd/dev/push.go diff --git a/cmd/core/cmd/dev/reviews.go b/cmd/dev/reviews.go similarity index 100% rename from cmd/core/cmd/dev/reviews.go rename to cmd/dev/reviews.go diff --git a/cmd/core/cmd/dev/sync.go b/cmd/dev/sync.go similarity index 100% rename from cmd/core/cmd/dev/sync.go rename to cmd/dev/sync.go diff --git a/cmd/core/cmd/dev/work.go b/cmd/dev/work.go similarity index 100% rename from cmd/core/cmd/dev/work.go rename to cmd/dev/work.go diff --git a/cmd/core/cmd/docs/commands.go b/cmd/docs/commands.go similarity index 100% rename from cmd/core/cmd/docs/commands.go rename to cmd/docs/commands.go diff --git a/cmd/core/cmd/docs/docs.go b/cmd/docs/docs.go similarity index 99% rename from cmd/core/cmd/docs/docs.go rename to cmd/docs/docs.go index 984f3de..cf53462 100644 --- a/cmd/core/cmd/docs/docs.go +++ b/cmd/docs/docs.go @@ -9,7 +9,7 @@ import ( "strings" "github.com/charmbracelet/lipgloss" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" "github.com/host-uk/core/pkg/repos" "github.com/leaanthony/clir" ) diff --git a/cmd/core/cmd/doctor/commands.go b/cmd/doctor/commands.go similarity index 100% rename from cmd/core/cmd/doctor/commands.go rename to cmd/doctor/commands.go diff --git a/cmd/core/cmd/doctor/doctor.go b/cmd/doctor/doctor.go similarity index 99% rename from cmd/core/cmd/doctor/doctor.go rename to cmd/doctor/doctor.go index 0241184..7634361 100644 --- a/cmd/core/cmd/doctor/doctor.go +++ b/cmd/doctor/doctor.go @@ -9,7 +9,7 @@ import ( "runtime" "strings" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" "github.com/host-uk/core/pkg/repos" "github.com/leaanthony/clir" ) diff --git a/cmd/core/cmd/go/commands.go b/cmd/go/commands.go similarity index 100% rename from cmd/core/cmd/go/commands.go rename to cmd/go/commands.go diff --git a/cmd/core/cmd/go/go.go b/cmd/go/go.go similarity index 99% rename from cmd/core/cmd/go/go.go rename to cmd/go/go.go index bd3a633..52e0aae 100644 --- a/cmd/core/cmd/go/go.go +++ b/cmd/go/go.go @@ -12,7 +12,7 @@ import ( "strings" "github.com/charmbracelet/lipgloss" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" "github.com/leaanthony/clir" ) diff --git a/cmd/core/cmd/php/commands.go b/cmd/php/commands.go similarity index 100% rename from cmd/core/cmd/php/commands.go rename to cmd/php/commands.go diff --git a/cmd/core/cmd/php/php.go b/cmd/php/php.go similarity index 99% rename from cmd/core/cmd/php/php.go rename to cmd/php/php.go index 086fc62..aa18e47 100644 --- a/cmd/core/cmd/php/php.go +++ b/cmd/php/php.go @@ -12,7 +12,7 @@ import ( "time" "github.com/charmbracelet/lipgloss" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" phppkg "github.com/host-uk/core/pkg/php" "github.com/leaanthony/clir" ) diff --git a/cmd/core/cmd/pkg/commands.go b/cmd/pkg/commands.go similarity index 100% rename from cmd/core/cmd/pkg/commands.go rename to cmd/pkg/commands.go diff --git a/cmd/core/cmd/pkg/pkg.go b/cmd/pkg/pkg.go similarity index 99% rename from cmd/core/cmd/pkg/pkg.go rename to cmd/pkg/pkg.go index edc4d1c..0f7f9a4 100644 --- a/cmd/core/cmd/pkg/pkg.go +++ b/cmd/pkg/pkg.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" "github.com/host-uk/core/pkg/cache" "github.com/host-uk/core/pkg/repos" "github.com/leaanthony/clir" diff --git a/cmd/core/cmd/root.go b/cmd/root.go similarity index 100% rename from cmd/core/cmd/root.go rename to cmd/root.go diff --git a/cmd/core/cmd/sdk/commands.go b/cmd/sdk/commands.go similarity index 100% rename from cmd/core/cmd/sdk/commands.go rename to cmd/sdk/commands.go diff --git a/cmd/core/cmd/sdk/sdk.go b/cmd/sdk/sdk.go similarity index 95% rename from cmd/core/cmd/sdk/sdk.go rename to cmd/sdk/sdk.go index 03d90e9..017945f 100644 --- a/cmd/core/cmd/sdk/sdk.go +++ b/cmd/sdk/sdk.go @@ -61,7 +61,7 @@ func runSDKDiff(basePath, specPath string) error { // Detect current spec if not provided if specPath == "" { - s := sdk.New(projectDir, nil) + s := sdkpkg.New(projectDir, nil) specPath, err = s.DetectSpec() if err != nil { return err @@ -77,7 +77,7 @@ func runSDKDiff(basePath, specPath string) error { fmt.Printf(" Current: %s\n", sdkDimStyle.Render(specPath)) fmt.Println() - result, err := sdk.Diff(basePath, specPath) + result, err := sdkpkg.Diff(basePath, specPath) if err != nil { fmt.Printf("%s %v\n", sdkErrorStyle.Render("Error:"), err) os.Exit(2) @@ -101,7 +101,7 @@ func runSDKValidate(specPath string) error { return fmt.Errorf("failed to get working directory: %w", err) } - s := sdk.New(projectDir, &sdk.Config{Spec: specPath}) + s := sdkpkg.New(projectDir, &sdkpkg.Config{Spec: specPath}) fmt.Printf("%s Validating OpenAPI spec\n", sdkHeaderStyle.Render("SDK:")) diff --git a/cmd/core/cmd/setup/commands.go b/cmd/setup/commands.go similarity index 100% rename from cmd/core/cmd/setup/commands.go rename to cmd/setup/commands.go diff --git a/cmd/core/cmd/setup/setup.go b/cmd/setup/setup.go similarity index 99% rename from cmd/core/cmd/setup/setup.go rename to cmd/setup/setup.go index 7a639dc..14f1236 100644 --- a/cmd/core/cmd/setup/setup.go +++ b/cmd/setup/setup.go @@ -9,7 +9,7 @@ import ( "path/filepath" "strings" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" "github.com/host-uk/core/pkg/repos" "github.com/leaanthony/clir" ) diff --git a/cmd/core/cmd/shared/styles.go b/cmd/shared/styles.go similarity index 100% rename from cmd/core/cmd/shared/styles.go rename to cmd/shared/styles.go diff --git a/cmd/core/cmd/shared/utils.go b/cmd/shared/utils.go similarity index 100% rename from cmd/core/cmd/shared/utils.go rename to cmd/shared/utils.go diff --git a/cmd/core/cmd/test/commands.go b/cmd/test/commands.go similarity index 100% rename from cmd/core/cmd/test/commands.go rename to cmd/test/commands.go diff --git a/cmd/core/cmd/test/test.go b/cmd/test/test.go similarity index 100% rename from cmd/core/cmd/test/test.go rename to cmd/test/test.go diff --git a/cmd/core/cmd/vm/commands.go b/cmd/vm/commands.go similarity index 100% rename from cmd/core/cmd/vm/commands.go rename to cmd/vm/commands.go diff --git a/cmd/core/cmd/vm/container.go b/cmd/vm/container.go similarity index 100% rename from cmd/core/cmd/vm/container.go rename to cmd/vm/container.go diff --git a/cmd/core/cmd/vm/templates.go b/cmd/vm/templates.go similarity index 99% rename from cmd/core/cmd/vm/templates.go rename to cmd/vm/templates.go index 548ead6..49315af 100644 --- a/cmd/core/cmd/vm/templates.go +++ b/cmd/vm/templates.go @@ -10,7 +10,7 @@ import ( "text/tabwriter" "github.com/charmbracelet/lipgloss" - "github.com/host-uk/core/cmd/core/cmd/shared" + "github.com/host-uk/core/cmd/shared" "github.com/host-uk/core/pkg/container" "github.com/leaanthony/clir" ) diff --git a/go.mod b/go.mod index 330c24e..eff6cf0 100644 --- a/go.mod +++ b/go.mod @@ -1,54 +1,80 @@ -module github.com/host-uk/core/cmd/core +module github.com/host-uk/core go 1.25.5 require ( - github.com/charmbracelet/huh v0.8.0 + github.com/Snider/Borg v0.1.0 github.com/charmbracelet/lipgloss v1.1.0 - github.com/host-uk/core/pkg/build v0.0.0 - github.com/host-uk/core/pkg/cache v0.0.0-20260128153551-31712611be1c - github.com/host-uk/core/pkg/git v0.0.0 - github.com/host-uk/core/pkg/repos v0.0.0 + github.com/getkin/kin-openapi v0.133.0 github.com/leaanthony/clir v1.7.0 github.com/leaanthony/debme v1.2.1 github.com/leaanthony/gosod v1.0.4 + github.com/minio/selfupdate v0.6.0 + github.com/modelcontextprotocol/go-sdk v1.2.0 + github.com/oasdiff/oasdiff v1.11.8 + github.com/spf13/cobra v1.10.2 + github.com/stretchr/testify v1.11.1 + golang.org/x/mod v0.31.0 golang.org/x/net v0.49.0 - golang.org/x/term v0.39.0 + golang.org/x/oauth2 v0.34.0 golang.org/x/text v0.33.0 + gopkg.in/yaml.v3 v3.0.1 ) require ( - github.com/atotto/clipboard v0.1.4 // indirect + aead.dev/minisign v0.2.0 // indirect + cloud.google.com/go v0.123.0 // indirect + dario.cat/mergo v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/ProtonMail/go-crypto v1.3.0 // indirect + github.com/TwiN/go-color v1.4.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect - github.com/catppuccin/go v0.3.0 // indirect - github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 // indirect - github.com/charmbracelet/bubbletea v1.3.6 // indirect github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect github.com/charmbracelet/x/ansi v0.9.3 // indirect github.com/charmbracelet/x/cellbuf v0.0.13 // indirect - github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 // indirect github.com/charmbracelet/x/term v0.2.1 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect - github.com/kr/text v0.2.0 // indirect + github.com/cloudflare/circl v1.6.1 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.6.2 // indirect + github.com/go-git/go-git/v5 v5.16.3 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect + github.com/google/jsonschema-go v0.3.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect - github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect - github.com/muesli/cancelreader v0.2.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/muesli/termenv v0.16.0 // indirect + github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect + github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect + github.com/perimeterx/marshmallow v1.1.5 // indirect + github.com/pjbgf/sha1cd v0.3.2 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.7 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/skeema/knownhosts v1.3.1 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/tidwall/gjson v1.18.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/wI2L/jsondiff v0.7.0 // indirect + github.com/woodsbury/decimal128 v1.3.0 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/yargevad/filepathx v1.0.0 // indirect + github.com/yosida95/uritemplate/v3 v3.0.2 // indirect + golang.org/x/crypto v0.47.0 // indirect golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect - golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.40.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) - -replace ( - github.com/host-uk/core/pkg/build => ./pkg/build - github.com/host-uk/core/pkg/git => ./pkg/git - github.com/host-uk/core/pkg/repos => ./pkg/repos + gopkg.in/warnings.v0 v0.1.2 // indirect ) diff --git a/go.sum b/go.sum index 1c35757..69f70da 100644 --- a/go.sum +++ b/go.sum @@ -1,45 +1,86 @@ -github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= -github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= -github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +aead.dev/minisign v0.2.0 h1:kAWrq/hBRu4AARY6AlciO83xhNnW9UaC8YipS2uhLPk= +aead.dev/minisign v0.2.0/go.mod h1:zdq6LdSd9TbuSxchxwhpA9zEb9YXcVGoE8JakuiGaIQ= +cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= +cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= +github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= +github.com/Snider/Borg v0.1.0 h1:tLvrytPMIM2To0xByYP+KHLcT9pg9P9y9uRTyG6r9oc= +github.com/Snider/Borg v0.1.0/go.mod h1:0GMzdXYzdFZpR25IFne7ErqV/YFQHsX1THm1BbncMPo= +github.com/TwiN/go-color v1.4.1 h1:mqG0P/KBgHKVqmtL5ye7K0/Gr4l6hTksPgTgMk3mUzc= +github.com/TwiN/go-color v1.4.1/go.mod h1:WcPf/jtiW95WBIsEeY1Lc/b8aaWoiqQpu5cf8WFxu+s= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= -github.com/aymanbagabas/go-udiff v0.3.1 h1:LV+qyBQ2pqe0u42ZsUEtPiCaUoqgA9gYRDs3vj1nolY= -github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY= -github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc= -github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 h1:JFgG/xnwFfbezlUnFMJy0nusZvytYysV4SCS2cYbvws= -github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7/go.mod h1:ISC1gtLcVilLOf23wvTfoQuYbW2q0JevFxPfUzZ9Ybw= -github.com/charmbracelet/bubbletea v1.3.6 h1:VkHIxPJQeDt0aFJIsVxw8BQdh/F/L2KKZGsK6et5taU= -github.com/charmbracelet/bubbletea v1.3.6/go.mod h1:oQD9VCRQFF8KplacJLo28/jofOI2ToOfGYeFgBBxHOc= github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= -github.com/charmbracelet/huh v0.8.0 h1:Xz/Pm2h64cXQZn/Jvele4J3r7DDiqFCNIVteYukxDvY= -github.com/charmbracelet/huh v0.8.0/go.mod h1:5YVc+SlZ1IhQALxRPpkGwwEKftN/+OlJlnJYlDRFqN4= github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0= github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= -github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U= -github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA= -github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ= -github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 h1:qko3AQ4gK1MTS/de7F5hPGx6/k1u0w4TeYmBFwzYVP4= -github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0/go.mod h1:pBhA0ybfXv6hDjQUZ7hk1lVxBiUbupdw5R31yPUViVQ= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= -github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= -github.com/charmbracelet/x/xpty v0.1.2 h1:Pqmu4TEJ8KeA9uSkISKMU3f+C1F6OGBn8ABuGlqCbtI= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= +github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= -github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= -github.com/host-uk/core/pkg/cache v0.0.0-20260128153551-31712611be1c h1:VPqkoWMBZ1f+LG3wEGqbwybsfdGog2QFVVyJ2rT0+5I= -github.com/host-uk/core/pkg/cache v0.0.0-20260128153551-31712611be1c/go.mod h1:jXl2UpzWLT/RK6Ufqxew+/JJqxDE03wvMHjmqQCTDP0= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= +github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/getkin/kin-openapi v0.133.0 h1:pJdmNohVIJ97r4AUFtEXRXwESr8b0bD721u/Tz6k8PQ= +github.com/getkin/kin-openapi v0.133.0/go.mod h1:boAciF6cXk5FhPqe/NQeBTeenbjqU4LhWBf09ILVvWE= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= +github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= +github.com/go-git/go-git/v5 v5.16.3 h1:Z8BtvxZ09bYm/yYNgPKCzgWtaRqDTgIKRgIRHBfU6Z8= +github.com/go-git/go-git/v5 v5.16.3/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= +github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/jsonschema-go v0.3.0 h1:6AH2TxVNtk3IlvkkhjrtbUc4S8AvO0Xii0DxIygDg+Q= +github.com/google/jsonschema-go v0.3.0/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leaanthony/clir v1.7.0 h1:xiAnhl7ryPwuH3ERwPWZp/pCHk8wTeiwuAOt6MiNyAw= @@ -48,53 +89,136 @@ github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oO github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= github.com/leaanthony/gosod v1.0.4 h1:YLAbVyd591MRffDgxUOU1NwLhT9T1/YiwjKZpkNFeaI= github.com/leaanthony/gosod v1.0.4/go.mod h1:GKuIL0zzPj3O1SdWQOdgURSuhkF+Urizzxh26t9f1cw= -github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= +github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js= +github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= -github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= -github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= -github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= -github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= -github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= -github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/minio/selfupdate v0.6.0 h1:i76PgT0K5xO9+hjzKcacQtO7+MjJ4JKA8Ak8XQ9DDwU= +github.com/minio/selfupdate v0.6.0/go.mod h1:bO02GTIPCMQFTEvE5h4DjYB58bCoZ35XLeBf0buTDdM= +github.com/modelcontextprotocol/go-sdk v1.2.0 h1:Y23co09300CEk8iZ/tMxIX1dVmKZkzoSBZOpJwUnc/s= +github.com/modelcontextprotocol/go-sdk v1.2.0/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/oasdiff/oasdiff v1.11.8 h1:3LalSR0yYVM5sAYNInlIG4TVckLCJBkgjcnst2GKWVg= +github.com/oasdiff/oasdiff v1.11.8/go.mod h1:YtP/1VnQo8FCdSWGJ11a98HFgLnFvUffH//FTDuEpls= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= +github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= +github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/wI2L/jsondiff v0.7.0 h1:1lH1G37GhBPqCfp/lrs91rf/2j3DktX6qYAKZkLuCQQ= +github.com/wI2L/jsondiff v0.7.0/go.mod h1:KAEIojdQq66oJiHhDyQez2x+sRit0vIzC9KeK0yizxM= +github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0= +github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yargevad/filepathx v1.0.0 h1:SYcT+N3tYGi+NvazubCNlvgIPbzAk7i7y2dwg3I5FYc= +github.com/yargevad/filepathx v1.0.0/go.mod h1:BprfX/gpYNJHJfc35GjRRpVcwWXS89gGulUIU5tK3tA= +github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= +github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= +golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= +golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= +golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210228012217-479acdf4ea46/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= +golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 0f7dae4..cad1354 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main import ( - "github.com/host-uk/core/cmd/core/cmd" + "github.com/host-uk/core/cmd" ) func main() { diff --git a/pkg/agentic/go.mod b/pkg/agentic/go.mod deleted file mode 100644 index 1cdd86b..0000000 --- a/pkg/agentic/go.mod +++ /dev/null @@ -1,19 +0,0 @@ -module github.com/host-uk/core/pkg/agentic - -go 1.25 - -require ( - github.com/host-uk/core/pkg/errors v0.0.0 - github.com/stretchr/testify v1.11.1 - gopkg.in/yaml.v3 v3.0.1 -) - -require ( - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect -) - -replace github.com/host-uk/core/pkg/errors => ../errors diff --git a/pkg/agentic/go.sum b/pkg/agentic/go.sum deleted file mode 100644 index 5a10c39..0000000 --- a/pkg/agentic/go.sum +++ /dev/null @@ -1,23 +0,0 @@ -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/build/go.mod b/pkg/build/go.mod deleted file mode 100644 index ad6639e..0000000 --- a/pkg/build/go.mod +++ /dev/null @@ -1,18 +0,0 @@ -module github.com/host-uk/core/pkg/build - -go 1.25 - -require ( - github.com/stretchr/testify v1.11.1 - gopkg.in/yaml.v3 v3.0.1 -) - -require ( - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect -) - -replace github.com/host-uk/core/pkg/errors => ../errors diff --git a/pkg/build/go.sum b/pkg/build/go.sum deleted file mode 100644 index 5a10c39..0000000 --- a/pkg/build/go.sum +++ /dev/null @@ -1,23 +0,0 @@ -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/cache/go.mod b/pkg/cache/go.mod deleted file mode 100644 index 78fc07b..0000000 --- a/pkg/cache/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/host-uk/core/pkg/cache - -go 1.24 diff --git a/pkg/devops/go.mod b/pkg/devops/go.mod deleted file mode 100644 index 8b172ef..0000000 --- a/pkg/devops/go.mod +++ /dev/null @@ -1,18 +0,0 @@ -module github.com/host-uk/core/pkg/devops - -go 1.25.5 - -require ( - github.com/host-uk/core v0.0.0 - github.com/stretchr/testify v1.11.1 -) - -require ( - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/kr/text v0.2.0 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect -) - -require gopkg.in/yaml.v3 v3.0.1 - -replace github.com/host-uk/core => ../.. diff --git a/pkg/devops/go.sum b/pkg/devops/go.sum deleted file mode 100644 index 072f3cd..0000000 --- a/pkg/devops/go.sum +++ /dev/null @@ -1,15 +0,0 @@ -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/errors/go.mod b/pkg/errors/go.mod deleted file mode 100644 index 08d8eb7..0000000 --- a/pkg/errors/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/host-uk/core/pkg/errors - -go 1.25 diff --git a/pkg/git/go.mod b/pkg/git/go.mod deleted file mode 100644 index 3d0fc52..0000000 --- a/pkg/git/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/host-uk/core/pkg/git - -go 1.25 diff --git a/pkg/mcp/go.mod b/pkg/mcp/go.mod deleted file mode 100644 index d19ba7a..0000000 --- a/pkg/mcp/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module github.com/host-uk/core/pkg/mcp - -go 1.25.5 - -require github.com/modelcontextprotocol/go-sdk v1.2.0 - -require ( - github.com/google/jsonschema-go v0.3.0 // indirect - github.com/yosida95/uritemplate/v3 v3.0.2 // indirect - golang.org/x/oauth2 v0.33.0 // indirect - golang.org/x/tools v0.40.0 // indirect -) diff --git a/pkg/mcp/go.sum b/pkg/mcp/go.sum deleted file mode 100644 index b116cb8..0000000 --- a/pkg/mcp/go.sum +++ /dev/null @@ -1,12 +0,0 @@ -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/jsonschema-go v0.3.0 h1:6AH2TxVNtk3IlvkkhjrtbUc4S8AvO0Xii0DxIygDg+Q= -github.com/google/jsonschema-go v0.3.0/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= -github.com/modelcontextprotocol/go-sdk v1.2.0 h1:Y23co09300CEk8iZ/tMxIX1dVmKZkzoSBZOpJwUnc/s= -github.com/modelcontextprotocol/go-sdk v1.2.0/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10= -github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= -github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= -golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo= -golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= -golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= -golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= diff --git a/pkg/mcp/mcp.go b/pkg/mcp/mcp.go index c98de21..2b2345b 100644 --- a/pkg/mcp/mcp.go +++ b/pkg/mcp/mcp.go @@ -1,105 +1,37 @@ -// Package mcp provides an MCP (Model Context Protocol) server for Core. -// This allows Claude Code and other MCP clients to interact with Core's -// IDE, file system, and display services. +// Package mcp provides a lightweight MCP (Model Context Protocol) server for CLI use. +// For full GUI integration (display, webview, process management), see core-gui/pkg/mcp. package mcp import ( "context" - "encoding/json" "fmt" - "net/http" "os" "path/filepath" "strings" - "time" "github.com/modelcontextprotocol/go-sdk/mcp" - - "github.com/host-uk/core/pkg/errors" - "github.com/host-uk/core/pkg/display" - "github.com/host-uk/core/pkg/ide" - "github.com/host-uk/core/pkg/process" - "github.com/host-uk/core/pkg/webview" - "github.com/host-uk/core/pkg/ws" ) -// Service provides an MCP server that exposes Core functionality. +// Service provides a lightweight MCP server with file operations only. +// For full GUI features, use the core-gui package. type Service struct { - core *core.Core - server *mcp.Server - ide *ide.Service - display *display.Service - process *process.Service - webview *webview.Service - wsHub *ws.Hub - wsPort int - wsRunning bool + server *mcp.Server } -// New creates a new MCP service. -func New(c *core.Core) *Service { +// New creates a new MCP service with file operations. +func New() *Service { impl := &mcp.Implementation{ - Name: "core", + Name: "core-cli", Version: "0.1.0", } server := mcp.NewServer(impl, nil) - s := &Service{ - core: c, - server: server, - process: process.New(), - } - - // Try to get the IDE service if available - if c != nil { - ideSvc, _ := core.ServiceFor[*ide.Service](c, "github.com/host-uk/core/ide") - s.ide = ideSvc - } - + s := &Service{server: server} s.registerTools() return s } -// NewStandalone creates an MCP service without a Core instance. -// This allows running the MCP server independently with basic file operations. -func NewStandalone() *Service { - return NewStandaloneWithPort(9876) -} - -// NewStandaloneWithPort creates an MCP service with a specific WebSocket port. -func NewStandaloneWithPort(wsPort int) *Service { - impl := &mcp.Implementation{ - Name: "core", - Version: "0.1.0", - } - - server := mcp.NewServer(impl, nil) - hub := ws.NewHub() - proc := process.New() - - s := &Service{ - server: server, - process: proc, - wsHub: hub, - wsPort: wsPort, - } - - // Wire process output to WebSocket - proc.OnOutput(func(processID string, output string) { - hub.SendProcessOutput(processID, output) - }) - - proc.OnStatusChange(func(processID string, status process.Status, exitCode int) { - hub.SendProcessStatus(processID, string(status), exitCode) - }) - - s.registerTools() - return s -} - -// registerTools adds all Core tools to the MCP server. -// Naming convention: prefix_action for discoverability -// file_* dir_* lang_* process_* +// registerTools adds file operation tools to the MCP server. func (s *Service) registerTools() { // File operations mcp.AddTool(s.server, &mcp.Tool{ @@ -153,196 +85,39 @@ func (s *Service) registerTools() { Name: "lang_list", Description: "Get list of supported programming languages", }, s.getSupportedLanguages) - - // Process management - mcp.AddTool(s.server, &mcp.Tool{ - Name: "process_start", - Description: "Start a new process with the given command and arguments", - }, s.processStart) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "process_stop", - Description: "Stop a running process gracefully", - }, s.processStop) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "process_kill", - Description: "Forcefully kill a process", - }, s.processKill) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "process_list", - Description: "List all managed processes", - }, s.processList) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "process_output", - Description: "Get the output of a process", - }, s.processOutput) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "process_input", - Description: "Send input to a running process stdin", - }, s.processSendInput) - - // WebSocket streaming - mcp.AddTool(s.server, &mcp.Tool{ - Name: "ws_start", - Description: "Start WebSocket server for real-time streaming", - }, s.wsStart) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "ws_info", - Description: "Get WebSocket server info (port, connected clients)", - }, s.wsInfo) - - // WebView interaction (only available when embedded in GUI app) - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_list", - Description: "List all open windows in the application", - }, s.webviewList) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_eval", - Description: "Execute JavaScript in a window and return the result", - }, s.webviewEval) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_console", - Description: "Get captured console messages (log, warn, error) from the WebView", - }, s.webviewConsole) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_click", - Description: "Click an element by CSS selector", - }, s.webviewClick) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_type", - Description: "Type text into an element by CSS selector", - }, s.webviewType) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_query", - Description: "Query elements by CSS selector and return info about matches", - }, s.webviewQuery) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_navigate", - Description: "Navigate to a URL or Angular route", - }, s.webviewNavigate) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "webview_source", - Description: "Get the current page HTML source", - }, s.webviewSource) - - // Window/Display management (the unique value-add for native app control) - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_list", - Description: "List all windows with their positions and sizes", - }, s.windowList) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_get", - Description: "Get detailed info about a specific window", - }, s.windowGet) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_position", - Description: "Move a window to a specific position (x, y coordinates)", - }, s.windowPosition) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_size", - Description: "Resize a window to specific dimensions", - }, s.windowSize) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_bounds", - Description: "Set both position and size of a window in one call", - }, s.windowBounds) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_maximize", - Description: "Maximize a window", - }, s.windowMaximize) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_minimize", - Description: "Minimize a window", - }, s.windowMinimize) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_restore", - Description: "Restore a window from maximized/minimized state", - }, s.windowRestore) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "window_focus", - Description: "Bring a window to the front and focus it", - }, s.windowFocus) - - mcp.AddTool(s.server, &mcp.Tool{ - Name: "screen_list", - Description: "List all available screens/monitors with their dimensions", - }, s.screenList) -} - -// SetWebView sets the WebView service for GUI interaction. -// This must be called when running embedded in the GUI app. -func (s *Service) SetWebView(wv *webview.Service) { - s.webview = wv -} - -// SetDisplay sets the Display service for window management. -// This must be called when running embedded in the GUI app. -func (s *Service) SetDisplay(d *display.Service) { - s.display = d } // Tool input/output types -// ReadFileInput contains parameters for reading a file. type ReadFileInput struct { - // Absolute path to the file to read. Path string `json:"path"` } -// ReadFileOutput contains the result of reading a file. type ReadFileOutput struct { Content string `json:"content"` Language string `json:"language"` Path string `json:"path"` } -// WriteFileInput contains parameters for writing a file. type WriteFileInput struct { - // Absolute path to the file to write. - Path string `json:"path"` - // Content to write to the file. + Path string `json:"path"` Content string `json:"content"` } -// WriteFileOutput contains the result of writing a file. type WriteFileOutput struct { Success bool `json:"success"` Path string `json:"path"` } -// ListDirectoryInput contains parameters for listing a directory. type ListDirectoryInput struct { - // Absolute path to the directory to list. Path string `json:"path"` } -// ListDirectoryOutput contains the result of listing a directory. type ListDirectoryOutput struct { Entries []DirectoryEntry `json:"entries"` Path string `json:"path"` } -// DirectoryEntry represents a file or directory entry. type DirectoryEntry struct { Name string `json:"name"` Path string `json:"path"` @@ -350,61 +125,46 @@ type DirectoryEntry struct { Size int64 `json:"size"` } -// CreateDirectoryInput contains parameters for creating a directory. type CreateDirectoryInput struct { - // Absolute path to the directory to create. Path string `json:"path"` } -// CreateDirectoryOutput contains the result of creating a directory. type CreateDirectoryOutput struct { Success bool `json:"success"` Path string `json:"path"` } -// DeleteFileInput contains parameters for deleting a file. type DeleteFileInput struct { - // Absolute path to the file to delete. Path string `json:"path"` } -// DeleteFileOutput contains the result of deleting a file. type DeleteFileOutput struct { Success bool `json:"success"` Path string `json:"path"` } -// RenameFileInput contains parameters for renaming a file. type RenameFileInput struct { - // Current path of the file. OldPath string `json:"oldPath"` - // New path for the file. NewPath string `json:"newPath"` } -// RenameFileOutput contains the result of renaming a file. type RenameFileOutput struct { Success bool `json:"success"` OldPath string `json:"oldPath"` NewPath string `json:"newPath"` } -// FileExistsInput contains parameters for checking if a file exists. type FileExistsInput struct { - // Absolute path to check. Path string `json:"path"` } -// FileExistsOutput contains the result of checking file existence. type FileExistsOutput struct { Exists bool `json:"exists"` IsDir bool `json:"isDir"` Path string `json:"path"` } -// DetectLanguageInput contains parameters for detecting file language. type DetectLanguageInput struct { - // File path to detect language for. Path string `json:"path"` } @@ -425,19 +185,13 @@ type LanguageInfo struct { Extensions []string `json:"extensions"` } -// EditDiffInput contains parameters for diff-based editing. type EditDiffInput struct { - // Absolute path to the file to edit. - Path string `json:"path"` - // The text to find and replace. - OldString string `json:"old_string"` - // The replacement text. - NewString string `json:"new_string"` - // Replace all occurrences if true, otherwise only the first. - ReplaceAll bool `json:"replace_all,omitempty"` + Path string `json:"path"` + OldString string `json:"old_string"` + NewString string `json:"new_string"` + ReplaceAll bool `json:"replace_all,omitempty"` } -// EditDiffOutput contains the result of the edit. type EditDiffOutput struct { Path string `json:"path"` Success bool `json:"success"` @@ -447,40 +201,18 @@ type EditDiffOutput struct { // Tool handlers func (s *Service) readFile(ctx context.Context, req *mcp.CallToolRequest, input ReadFileInput) (*mcp.CallToolResult, ReadFileOutput, error) { - if s.ide != nil { - info, err := s.ide.OpenFile(input.Path) - if err != nil { - return nil, ReadFileOutput{}, fmt.Errorf("failed to read file: %w", err) - } - return nil, ReadFileOutput{ - Content: info.Content, - Language: info.Language, - Path: info.Path, - }, nil - } - - // Fallback to direct file read content, err := os.ReadFile(input.Path) if err != nil { return nil, ReadFileOutput{}, fmt.Errorf("failed to read file: %w", err) } return nil, ReadFileOutput{ Content: string(content), - Language: detectLanguage(input.Path), + Language: detectLanguageFromPath(input.Path), Path: input.Path, }, nil } func (s *Service) writeFile(ctx context.Context, req *mcp.CallToolRequest, input WriteFileInput) (*mcp.CallToolResult, WriteFileOutput, error) { - if s.ide != nil { - err := s.ide.SaveFile(input.Path, input.Content) - if err != nil { - return nil, WriteFileOutput{}, fmt.Errorf("failed to write file: %w", err) - } - return nil, WriteFileOutput{Success: true, Path: input.Path}, nil - } - - // Fallback to direct file write dir := filepath.Dir(input.Path) if err := os.MkdirAll(dir, 0755); err != nil { return nil, WriteFileOutput{}, fmt.Errorf("failed to create directory: %w", err) @@ -493,24 +225,6 @@ func (s *Service) writeFile(ctx context.Context, req *mcp.CallToolRequest, input } func (s *Service) listDirectory(ctx context.Context, req *mcp.CallToolRequest, input ListDirectoryInput) (*mcp.CallToolResult, ListDirectoryOutput, error) { - if s.ide != nil { - entries, err := s.ide.ListDirectory(input.Path) - if err != nil { - return nil, ListDirectoryOutput{}, fmt.Errorf("failed to list directory: %w", err) - } - result := make([]DirectoryEntry, 0, len(entries)) - for _, e := range entries { - result = append(result, DirectoryEntry{ - Name: e.Name, - Path: e.Path, - IsDir: e.IsDir, - Size: e.Size, - }) - } - return nil, ListDirectoryOutput{Entries: result, Path: input.Path}, nil - } - - // Fallback to direct directory listing entries, err := os.ReadDir(input.Path) if err != nil { return nil, ListDirectoryOutput{}, fmt.Errorf("failed to list directory: %w", err) @@ -533,14 +247,6 @@ func (s *Service) listDirectory(ctx context.Context, req *mcp.CallToolRequest, i } func (s *Service) createDirectory(ctx context.Context, req *mcp.CallToolRequest, input CreateDirectoryInput) (*mcp.CallToolResult, CreateDirectoryOutput, error) { - if s.ide != nil { - err := s.ide.CreateDirectory(input.Path) - if err != nil { - return nil, CreateDirectoryOutput{}, fmt.Errorf("failed to create directory: %w", err) - } - return nil, CreateDirectoryOutput{Success: true, Path: input.Path}, nil - } - err := os.MkdirAll(input.Path, 0755) if err != nil { return nil, CreateDirectoryOutput{}, fmt.Errorf("failed to create directory: %w", err) @@ -549,14 +255,6 @@ func (s *Service) createDirectory(ctx context.Context, req *mcp.CallToolRequest, } func (s *Service) deleteFile(ctx context.Context, req *mcp.CallToolRequest, input DeleteFileInput) (*mcp.CallToolResult, DeleteFileOutput, error) { - if s.ide != nil { - err := s.ide.DeleteFile(input.Path) - if err != nil { - return nil, DeleteFileOutput{}, fmt.Errorf("failed to delete file: %w", err) - } - return nil, DeleteFileOutput{Success: true, Path: input.Path}, nil - } - err := os.Remove(input.Path) if err != nil { return nil, DeleteFileOutput{}, fmt.Errorf("failed to delete file: %w", err) @@ -565,14 +263,6 @@ func (s *Service) deleteFile(ctx context.Context, req *mcp.CallToolRequest, inpu } func (s *Service) renameFile(ctx context.Context, req *mcp.CallToolRequest, input RenameFileInput) (*mcp.CallToolResult, RenameFileOutput, error) { - if s.ide != nil { - err := s.ide.RenameFile(input.OldPath, input.NewPath) - if err != nil { - return nil, RenameFileOutput{}, fmt.Errorf("failed to rename file: %w", err) - } - return nil, RenameFileOutput{Success: true, OldPath: input.OldPath, NewPath: input.NewPath}, nil - } - err := os.Rename(input.OldPath, input.NewPath) if err != nil { return nil, RenameFileOutput{}, fmt.Errorf("failed to rename file: %w", err) @@ -592,7 +282,7 @@ func (s *Service) fileExists(ctx context.Context, req *mcp.CallToolRequest, inpu } func (s *Service) detectLanguage(ctx context.Context, req *mcp.CallToolRequest, input DetectLanguageInput) (*mcp.CallToolResult, DetectLanguageOutput, error) { - lang := detectLanguage(input.Path) + lang := detectLanguageFromPath(input.Path) return nil, DetectLanguageOutput{Language: lang, Path: input.Path}, nil } @@ -604,28 +294,20 @@ func (s *Service) getSupportedLanguages(ctx context.Context, req *mcp.CallToolRe {ID: "python", Name: "Python", Extensions: []string{".py"}}, {ID: "rust", Name: "Rust", Extensions: []string{".rs"}}, {ID: "java", Name: "Java", Extensions: []string{".java"}}, - {ID: "csharp", Name: "C#", Extensions: []string{".cs"}}, - {ID: "cpp", Name: "C++", Extensions: []string{".cpp", ".hpp", ".cc", ".cxx"}}, - {ID: "c", Name: "C", Extensions: []string{".c", ".h"}}, + {ID: "php", Name: "PHP", Extensions: []string{".php"}}, + {ID: "ruby", Name: "Ruby", Extensions: []string{".rb"}}, {ID: "html", Name: "HTML", Extensions: []string{".html", ".htm"}}, {ID: "css", Name: "CSS", Extensions: []string{".css"}}, - {ID: "scss", Name: "SCSS", Extensions: []string{".scss"}}, {ID: "json", Name: "JSON", Extensions: []string{".json"}}, {ID: "yaml", Name: "YAML", Extensions: []string{".yaml", ".yml"}}, {ID: "markdown", Name: "Markdown", Extensions: []string{".md", ".markdown"}}, {ID: "sql", Name: "SQL", Extensions: []string{".sql"}}, {ID: "shell", Name: "Shell", Extensions: []string{".sh", ".bash"}}, - {ID: "xml", Name: "XML", Extensions: []string{".xml"}}, - {ID: "swift", Name: "Swift", Extensions: []string{".swift"}}, - {ID: "kotlin", Name: "Kotlin", Extensions: []string{".kt", ".kts"}}, - {ID: "php", Name: "PHP", Extensions: []string{".php"}}, - {ID: "ruby", Name: "Ruby", Extensions: []string{".rb"}}, } return nil, GetSupportedLanguagesOutput{Languages: languages}, nil } func (s *Service) editDiff(ctx context.Context, req *mcp.CallToolRequest, input EditDiffInput) (*mcp.CallToolResult, EditDiffOutput, error) { - // Read the file content, err := os.ReadFile(input.Path) if err != nil { return nil, EditDiffOutput{}, fmt.Errorf("failed to read file: %w", err) @@ -635,14 +317,12 @@ func (s *Service) editDiff(ctx context.Context, req *mcp.CallToolRequest, input count := 0 if input.ReplaceAll { - // Count occurrences count = strings.Count(fileContent, input.OldString) if count == 0 { return nil, EditDiffOutput{}, fmt.Errorf("old_string not found in file") } fileContent = strings.ReplaceAll(fileContent, input.OldString, input.NewString) } else { - // Replace only first occurrence if !strings.Contains(fileContent, input.OldString) { return nil, EditDiffOutput{}, fmt.Errorf("old_string not found in file") } @@ -650,7 +330,6 @@ func (s *Service) editDiff(ctx context.Context, req *mcp.CallToolRequest, input count = 1 } - // Write the file back err = os.WriteFile(input.Path, []byte(fileContent), 0644) if err != nil { return nil, EditDiffOutput{}, fmt.Errorf("failed to write file: %w", err) @@ -663,8 +342,8 @@ func (s *Service) editDiff(ctx context.Context, req *mcp.CallToolRequest, input }, nil } -// detectLanguage maps file extensions to Monaco editor languages. -func detectLanguage(path string) string { +// detectLanguageFromPath maps file extensions to language IDs. +func detectLanguageFromPath(path string) string { ext := filepath.Ext(path) switch ext { case ".ts", ".tsx": @@ -681,6 +360,8 @@ func detectLanguage(path string) string { return "ruby" case ".java": return "java" + case ".php": + return "php" case ".c", ".h": return "c" case ".cpp", ".hpp", ".cc", ".cxx": @@ -693,8 +374,6 @@ func detectLanguage(path string) string { return "css" case ".scss": return "scss" - case ".less": - return "less" case ".json": return "json" case ".yaml", ".yml": @@ -707,24 +386,10 @@ func detectLanguage(path string) string { return "sql" case ".sh", ".bash": return "shell" - case ".ps1": - return "powershell" - case ".toml": - return "toml" - case ".ini", ".cfg": - return "ini" case ".swift": return "swift" case ".kt", ".kts": return "kotlin" - case ".php": - return "php" - case ".r": - return "r" - case ".lua": - return "lua" - case ".pl", ".pm": - return "perl" default: if filepath.Base(path) == "Dockerfile" { return "dockerfile" @@ -742,808 +407,3 @@ func (s *Service) Run(ctx context.Context) error { func (s *Service) Server() *mcp.Server { return s.server } - -// Process management types - -// ProcessStartInput contains parameters for starting a process. -type ProcessStartInput struct { - // Command to execute. - Command string `json:"command"` - // Arguments for the command. - Args []string `json:"args,omitempty"` - // Working directory for the process. - Dir string `json:"dir,omitempty"` -} - -// ProcessStartOutput contains the result of starting a process. -type ProcessStartOutput struct { - ID string `json:"id"` - Command string `json:"command"` - Args []string `json:"args"` - Dir string `json:"dir"` - PID int `json:"pid"` - StartedAt time.Time `json:"startedAt"` -} - -// ProcessIDInput contains a process ID parameter. -type ProcessIDInput struct { - // Process ID to operate on. - ID string `json:"id"` -} - -// ProcessStopOutput contains the result of stopping a process. -type ProcessStopOutput struct { - ID string `json:"id"` - Success bool `json:"success"` -} - -// ProcessListInput is empty but required for the handler signature. -type ProcessListInput struct{} - -// ProcessInfo represents process information. -type ProcessInfo struct { - ID string `json:"id"` - Command string `json:"command"` - Args []string `json:"args"` - Dir string `json:"dir"` - Status string `json:"status"` - ExitCode int `json:"exitCode"` - PID int `json:"pid"` - StartedAt time.Time `json:"startedAt"` -} - -// ProcessListOutput contains the list of processes. -type ProcessListOutput struct { - Processes []ProcessInfo `json:"processes"` -} - -// ProcessOutputOutput contains the captured output of a process. -type ProcessOutputOutput struct { - ID string `json:"id"` - Output string `json:"output"` - Length int `json:"length"` -} - -// ProcessSendInputInput contains input to send to a process. -type ProcessSendInputInput struct { - // Process ID to send input to. - ID string `json:"id"` - // Input text to send. - Input string `json:"input"` -} - -// ProcessSendInputOutput contains the result of sending input. -type ProcessSendInputOutput struct { - ID string `json:"id"` - Success bool `json:"success"` -} - -// Process management handlers - -func (s *Service) processStart(ctx context.Context, req *mcp.CallToolRequest, input ProcessStartInput) (*mcp.CallToolResult, ProcessStartOutput, error) { - dir := input.Dir - if dir == "" { - var err error - dir, err = os.Getwd() - if err != nil { - dir = "." - } - } - - proc, err := s.process.Start(input.Command, input.Args, dir) - if err != nil { - return nil, ProcessStartOutput{}, fmt.Errorf("failed to start process: %w", err) - } - - info := proc.Info() - return nil, ProcessStartOutput{ - ID: info.ID, - Command: info.Command, - Args: info.Args, - Dir: info.Dir, - PID: info.PID, - StartedAt: info.StartedAt, - }, nil -} - -func (s *Service) processStop(ctx context.Context, req *mcp.CallToolRequest, input ProcessIDInput) (*mcp.CallToolResult, ProcessStopOutput, error) { - err := s.process.Stop(input.ID) - if err != nil { - return nil, ProcessStopOutput{}, fmt.Errorf("failed to stop process: %w", err) - } - return nil, ProcessStopOutput{ID: input.ID, Success: true}, nil -} - -func (s *Service) processKill(ctx context.Context, req *mcp.CallToolRequest, input ProcessIDInput) (*mcp.CallToolResult, ProcessStopOutput, error) { - err := s.process.Kill(input.ID) - if err != nil { - return nil, ProcessStopOutput{}, fmt.Errorf("failed to kill process: %w", err) - } - return nil, ProcessStopOutput{ID: input.ID, Success: true}, nil -} - -func (s *Service) processList(ctx context.Context, req *mcp.CallToolRequest, input ProcessListInput) (*mcp.CallToolResult, ProcessListOutput, error) { - procs := s.process.List() - result := make([]ProcessInfo, 0, len(procs)) - for _, p := range procs { - info := p.Info() - result = append(result, ProcessInfo{ - ID: info.ID, - Command: info.Command, - Args: info.Args, - Dir: info.Dir, - Status: string(info.Status), - ExitCode: info.ExitCode, - PID: info.PID, - StartedAt: info.StartedAt, - }) - } - return nil, ProcessListOutput{Processes: result}, nil -} - -func (s *Service) processOutput(ctx context.Context, req *mcp.CallToolRequest, input ProcessIDInput) (*mcp.CallToolResult, ProcessOutputOutput, error) { - output, err := s.process.Output(input.ID) - if err != nil { - return nil, ProcessOutputOutput{}, fmt.Errorf("failed to get process output: %w", err) - } - return nil, ProcessOutputOutput{ - ID: input.ID, - Output: output, - Length: len(output), - }, nil -} - -func (s *Service) processSendInput(ctx context.Context, req *mcp.CallToolRequest, input ProcessSendInputInput) (*mcp.CallToolResult, ProcessSendInputOutput, error) { - err := s.process.SendInput(input.ID, input.Input) - if err != nil { - return nil, ProcessSendInputOutput{}, fmt.Errorf("failed to send input: %w", err) - } - return nil, ProcessSendInputOutput{ID: input.ID, Success: true}, nil -} - -// WebSocket types - -// WsStartInput contains parameters for starting the WebSocket server. -type WsStartInput struct { - // Port to run WebSocket server on. Defaults to 9876. - Port int `json:"port,omitempty"` -} - -// WsStartOutput contains the result of starting the WebSocket server. -type WsStartOutput struct { - Port int `json:"port"` - URL string `json:"url"` - Started bool `json:"started"` -} - -// WsInfoInput is empty but required for handler signature. -type WsInfoInput struct{} - -// WsInfoOutput contains WebSocket server status. -type WsInfoOutput struct { - Running bool `json:"running"` - Port int `json:"port"` - URL string `json:"url"` - Clients int `json:"clients"` - Channels int `json:"channels"` -} - -// WebSocket handlers - -func (s *Service) wsStart(ctx context.Context, req *mcp.CallToolRequest, input WsStartInput) (*mcp.CallToolResult, WsStartOutput, error) { - if s.wsHub == nil { - return nil, WsStartOutput{}, fmt.Errorf("WebSocket not available in this configuration") - } - - // Already running? - if s.wsRunning { - url := fmt.Sprintf("ws://localhost:%d/ws", s.wsPort) - return nil, WsStartOutput{ - Port: s.wsPort, - URL: url, - Started: true, - }, nil - } - - port := input.Port - if port == 0 { - port = s.wsPort - } - if port == 0 { - port = 9876 - } - - // Start the hub event loop - hubCtx := context.Background() - go s.wsHub.Run(hubCtx) - - // Start HTTP server for WebSocket - go func() { - mux := http.NewServeMux() - mux.HandleFunc("/ws", s.wsHub.HandleWebSocket) - addr := fmt.Sprintf(":%d", port) - http.ListenAndServe(addr, mux) - }() - - s.wsPort = port - s.wsRunning = true - url := fmt.Sprintf("ws://localhost:%d/ws", port) - - return nil, WsStartOutput{ - Port: port, - URL: url, - Started: true, - }, nil -} - -func (s *Service) wsInfo(ctx context.Context, req *mcp.CallToolRequest, input WsInfoInput) (*mcp.CallToolResult, WsInfoOutput, error) { - if s.wsHub == nil { - return nil, WsInfoOutput{Running: false}, nil - } - - stats := s.wsHub.Stats() - url := "" - if s.wsRunning { - url = fmt.Sprintf("ws://localhost:%d/ws", s.wsPort) - } - - return nil, WsInfoOutput{ - Running: s.wsRunning, - Port: s.wsPort, - URL: url, - Clients: stats.Clients, - Channels: stats.Channels, - }, nil -} - -// WebView types - -// WebviewListInput is empty. -type WebviewListInput struct{} - -// WebviewListOutput contains the list of windows. -type WebviewListOutput struct { - Windows []WebviewWindowInfo `json:"windows"` -} - -// WebviewWindowInfo contains window information. -type WebviewWindowInfo struct { - Name string `json:"name"` -} - -// WebviewEvalInput contains parameters for JS evaluation. -type WebviewEvalInput struct { - // Window name (empty for first window). - Window string `json:"window,omitempty"` - // JavaScript code to execute. - Code string `json:"code"` -} - -// WebviewEvalOutput contains the evaluation result. -type WebviewEvalOutput struct { - Result string `json:"result"` -} - -// WebviewConsoleInput contains parameters for console retrieval. -type WebviewConsoleInput struct { - // Filter by level: log, warn, error, info, debug (empty for all). - Level string `json:"level,omitempty"` - // Maximum messages to return. - Limit int `json:"limit,omitempty"` - // Clear buffer after reading. - Clear bool `json:"clear,omitempty"` -} - -// WebviewConsoleOutput contains console messages. -type WebviewConsoleOutput struct { - Messages []webview.ConsoleMessage `json:"messages"` - Count int `json:"count"` -} - -// WebviewClickInput contains parameters for clicking. -type WebviewClickInput struct { - // Window name (empty for first window). - Window string `json:"window,omitempty"` - // CSS selector for the element to click. - Selector string `json:"selector"` -} - -// WebviewClickOutput contains the click result. -type WebviewClickOutput struct { - Success bool `json:"success"` -} - -// WebviewTypeInput contains parameters for typing. -type WebviewTypeInput struct { - // Window name (empty for first window). - Window string `json:"window,omitempty"` - // CSS selector for the input element. - Selector string `json:"selector"` - // Text to type. - Text string `json:"text"` -} - -// WebviewTypeOutput contains the type result. -type WebviewTypeOutput struct { - Success bool `json:"success"` -} - -// WebviewQueryInput contains parameters for querying. -type WebviewQueryInput struct { - // Window name (empty for first window). - Window string `json:"window,omitempty"` - // CSS selector to query. - Selector string `json:"selector"` -} - -// WebviewQueryOutput contains query results. -type WebviewQueryOutput struct { - Elements []map[string]any `json:"elements"` - Count int `json:"count"` -} - -// WebviewNavigateInput contains parameters for navigation. -type WebviewNavigateInput struct { - // Window name (empty for first window). - Window string `json:"window,omitempty"` - // URL or route to navigate to. - URL string `json:"url"` -} - -// WebviewNavigateOutput contains navigation result. -type WebviewNavigateOutput struct { - Success bool `json:"success"` -} - -// WebviewSourceInput contains parameters for getting source. -type WebviewSourceInput struct { - // Window name (empty for first window). - Window string `json:"window,omitempty"` -} - -// WebviewSourceOutput contains the page source. -type WebviewSourceOutput struct { - HTML string `json:"html"` - Length int `json:"length"` -} - -// WebView handlers - -func (s *Service) webviewList(ctx context.Context, req *mcp.CallToolRequest, input WebviewListInput) (*mcp.CallToolResult, WebviewListOutput, error) { - if s.webview == nil { - return nil, WebviewListOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - windows := s.webview.ListWindows() - result := make([]WebviewWindowInfo, len(windows)) - for i, w := range windows { - result[i] = WebviewWindowInfo{Name: w.Name} - } - - return nil, WebviewListOutput{Windows: result}, nil -} - -func (s *Service) webviewEval(ctx context.Context, req *mcp.CallToolRequest, input WebviewEvalInput) (*mcp.CallToolResult, WebviewEvalOutput, error) { - if s.webview == nil { - return nil, WebviewEvalOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - result, err := s.webview.ExecJS(input.Window, input.Code) - if err != nil { - return nil, WebviewEvalOutput{}, fmt.Errorf("failed to execute JS: %w", err) - } - - return nil, WebviewEvalOutput{Result: result}, nil -} - -func (s *Service) webviewConsole(ctx context.Context, req *mcp.CallToolRequest, input WebviewConsoleInput) (*mcp.CallToolResult, WebviewConsoleOutput, error) { - if s.webview == nil { - return nil, WebviewConsoleOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - messages := s.webview.GetConsoleMessages(input.Level, input.Limit) - - if input.Clear { - s.webview.ClearConsole() - } - - return nil, WebviewConsoleOutput{ - Messages: messages, - Count: len(messages), - }, nil -} - -func (s *Service) webviewClick(ctx context.Context, req *mcp.CallToolRequest, input WebviewClickInput) (*mcp.CallToolResult, WebviewClickOutput, error) { - if s.webview == nil { - return nil, WebviewClickOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - err := s.webview.Click(input.Window, input.Selector) - if err != nil { - return nil, WebviewClickOutput{}, fmt.Errorf("failed to click: %w", err) - } - - return nil, WebviewClickOutput{Success: true}, nil -} - -func (s *Service) webviewType(ctx context.Context, req *mcp.CallToolRequest, input WebviewTypeInput) (*mcp.CallToolResult, WebviewTypeOutput, error) { - if s.webview == nil { - return nil, WebviewTypeOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - err := s.webview.Type(input.Window, input.Selector, input.Text) - if err != nil { - return nil, WebviewTypeOutput{}, fmt.Errorf("failed to type: %w", err) - } - - return nil, WebviewTypeOutput{Success: true}, nil -} - -func (s *Service) webviewQuery(ctx context.Context, req *mcp.CallToolRequest, input WebviewQueryInput) (*mcp.CallToolResult, WebviewQueryOutput, error) { - if s.webview == nil { - return nil, WebviewQueryOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - result, err := s.webview.QuerySelector(input.Window, input.Selector) - if err != nil { - return nil, WebviewQueryOutput{}, fmt.Errorf("failed to query: %w", err) - } - - // Parse result as JSON array - var elements []map[string]any - if err := json.Unmarshal([]byte(result), &elements); err != nil { - // Return raw result if not valid JSON - return nil, WebviewQueryOutput{ - Elements: []map[string]any{{"raw": result}}, - Count: 1, - }, nil - } - - return nil, WebviewQueryOutput{ - Elements: elements, - Count: len(elements), - }, nil -} - -func (s *Service) webviewNavigate(ctx context.Context, req *mcp.CallToolRequest, input WebviewNavigateInput) (*mcp.CallToolResult, WebviewNavigateOutput, error) { - if s.webview == nil { - return nil, WebviewNavigateOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - err := s.webview.Navigate(input.Window, input.URL) - if err != nil { - return nil, WebviewNavigateOutput{}, fmt.Errorf("failed to navigate: %w", err) - } - - return nil, WebviewNavigateOutput{Success: true}, nil -} - -func (s *Service) webviewSource(ctx context.Context, req *mcp.CallToolRequest, input WebviewSourceInput) (*mcp.CallToolResult, WebviewSourceOutput, error) { - if s.webview == nil { - return nil, WebviewSourceOutput{}, fmt.Errorf("WebView not available (MCP server running standalone)") - } - - html, err := s.webview.GetPageSource(input.Window) - if err != nil { - return nil, WebviewSourceOutput{}, fmt.Errorf("failed to get source: %w", err) - } - - return nil, WebviewSourceOutput{ - HTML: html, - Length: len(html), - }, nil -} - -// Window/Display management types - -// WindowListInput is empty. -type WindowListInput struct{} - -// WindowListOutput contains the list of windows with positions. -type WindowListOutput struct { - Windows []WindowInfo `json:"windows"` -} - -// WindowInfo contains detailed window information. -type WindowInfo struct { - Name string `json:"name"` - X int `json:"x"` - Y int `json:"y"` - Width int `json:"width"` - Height int `json:"height"` - Maximized bool `json:"maximized"` -} - -// WindowGetInput contains the window name to get. -type WindowGetInput struct { - // Window name to get info for. - Name string `json:"name"` -} - -// WindowGetOutput contains the window information. -type WindowGetOutput struct { - Window *WindowInfo `json:"window"` -} - -// WindowPositionInput contains parameters for moving a window. -type WindowPositionInput struct { - // Window name to move. - Name string `json:"name"` - // X coordinate (pixels from left edge of screen). - X int `json:"x"` - // Y coordinate (pixels from top edge of screen). - Y int `json:"y"` -} - -// WindowPositionOutput contains the result of moving a window. -type WindowPositionOutput struct { - Success bool `json:"success"` - Name string `json:"name"` - X int `json:"x"` - Y int `json:"y"` -} - -// WindowSizeInput contains parameters for resizing a window. -type WindowSizeInput struct { - // Window name to resize. - Name string `json:"name"` - // Width in pixels. - Width int `json:"width"` - // Height in pixels. - Height int `json:"height"` -} - -// WindowSizeOutput contains the result of resizing a window. -type WindowSizeOutput struct { - Success bool `json:"success"` - Name string `json:"name"` - Width int `json:"width"` - Height int `json:"height"` -} - -// WindowBoundsInput contains parameters for setting window bounds. -type WindowBoundsInput struct { - // Window name to modify. - Name string `json:"name"` - // X coordinate. - X int `json:"x"` - // Y coordinate. - Y int `json:"y"` - // Width in pixels. - Width int `json:"width"` - // Height in pixels. - Height int `json:"height"` -} - -// WindowBoundsOutput contains the result of setting window bounds. -type WindowBoundsOutput struct { - Success bool `json:"success"` - Name string `json:"name"` - X int `json:"x"` - Y int `json:"y"` - Width int `json:"width"` - Height int `json:"height"` -} - -// WindowNameInput contains just a window name. -type WindowNameInput struct { - // Window name to operate on. - Name string `json:"name"` -} - -// WindowActionOutput contains the result of a window action. -type WindowActionOutput struct { - Success bool `json:"success"` - Name string `json:"name"` - Action string `json:"action"` -} - -// ScreenListInput is empty. -type ScreenListInput struct{} - -// ScreenListOutput contains the list of screens. -type ScreenListOutput struct { - Screens []ScreenInfo `json:"screens"` -} - -// ScreenInfo contains screen/monitor information. -type ScreenInfo struct { - ID string `json:"id"` - Name string `json:"name"` - X int `json:"x"` - Y int `json:"y"` - Width int `json:"width"` - Height int `json:"height"` - Primary bool `json:"primary"` -} - -// Window/Display handlers - -func (s *Service) windowList(ctx context.Context, req *mcp.CallToolRequest, input WindowListInput) (*mcp.CallToolResult, WindowListOutput, error) { - if s.display == nil { - return nil, WindowListOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - windows := s.display.ListWindowInfos() - result := make([]WindowInfo, len(windows)) - for i, w := range windows { - result[i] = WindowInfo{ - Name: w.Name, - X: w.X, - Y: w.Y, - Width: w.Width, - Height: w.Height, - Maximized: w.Maximized, - } - } - - return nil, WindowListOutput{Windows: result}, nil -} - -func (s *Service) windowGet(ctx context.Context, req *mcp.CallToolRequest, input WindowGetInput) (*mcp.CallToolResult, WindowGetOutput, error) { - if s.display == nil { - return nil, WindowGetOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - info, err := s.display.GetWindowInfo(input.Name) - if err != nil { - return nil, WindowGetOutput{}, fmt.Errorf("failed to get window info: %w", err) - } - - return nil, WindowGetOutput{ - Window: &WindowInfo{ - Name: info.Name, - X: info.X, - Y: info.Y, - Width: info.Width, - Height: info.Height, - Maximized: info.Maximized, - }, - }, nil -} - -func (s *Service) windowPosition(ctx context.Context, req *mcp.CallToolRequest, input WindowPositionInput) (*mcp.CallToolResult, WindowPositionOutput, error) { - if s.display == nil { - return nil, WindowPositionOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - err := s.display.SetWindowPosition(input.Name, input.X, input.Y) - if err != nil { - return nil, WindowPositionOutput{}, fmt.Errorf("failed to move window: %w", err) - } - - return nil, WindowPositionOutput{ - Success: true, - Name: input.Name, - X: input.X, - Y: input.Y, - }, nil -} - -func (s *Service) windowSize(ctx context.Context, req *mcp.CallToolRequest, input WindowSizeInput) (*mcp.CallToolResult, WindowSizeOutput, error) { - if s.display == nil { - return nil, WindowSizeOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - err := s.display.SetWindowSize(input.Name, input.Width, input.Height) - if err != nil { - return nil, WindowSizeOutput{}, fmt.Errorf("failed to resize window: %w", err) - } - - return nil, WindowSizeOutput{ - Success: true, - Name: input.Name, - Width: input.Width, - Height: input.Height, - }, nil -} - -func (s *Service) windowBounds(ctx context.Context, req *mcp.CallToolRequest, input WindowBoundsInput) (*mcp.CallToolResult, WindowBoundsOutput, error) { - if s.display == nil { - return nil, WindowBoundsOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - err := s.display.SetWindowBounds(input.Name, input.X, input.Y, input.Width, input.Height) - if err != nil { - return nil, WindowBoundsOutput{}, fmt.Errorf("failed to set window bounds: %w", err) - } - - return nil, WindowBoundsOutput{ - Success: true, - Name: input.Name, - X: input.X, - Y: input.Y, - Width: input.Width, - Height: input.Height, - }, nil -} - -func (s *Service) windowMaximize(ctx context.Context, req *mcp.CallToolRequest, input WindowNameInput) (*mcp.CallToolResult, WindowActionOutput, error) { - if s.display == nil { - return nil, WindowActionOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - err := s.display.MaximizeWindow(input.Name) - if err != nil { - return nil, WindowActionOutput{}, fmt.Errorf("failed to maximize window: %w", err) - } - - return nil, WindowActionOutput{ - Success: true, - Name: input.Name, - Action: "maximize", - }, nil -} - -func (s *Service) windowMinimize(ctx context.Context, req *mcp.CallToolRequest, input WindowNameInput) (*mcp.CallToolResult, WindowActionOutput, error) { - if s.display == nil { - return nil, WindowActionOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - err := s.display.MinimizeWindow(input.Name) - if err != nil { - return nil, WindowActionOutput{}, fmt.Errorf("failed to minimize window: %w", err) - } - - return nil, WindowActionOutput{ - Success: true, - Name: input.Name, - Action: "minimize", - }, nil -} - -func (s *Service) windowRestore(ctx context.Context, req *mcp.CallToolRequest, input WindowNameInput) (*mcp.CallToolResult, WindowActionOutput, error) { - if s.display == nil { - return nil, WindowActionOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - err := s.display.RestoreWindow(input.Name) - if err != nil { - return nil, WindowActionOutput{}, fmt.Errorf("failed to restore window: %w", err) - } - - return nil, WindowActionOutput{ - Success: true, - Name: input.Name, - Action: "restore", - }, nil -} - -func (s *Service) windowFocus(ctx context.Context, req *mcp.CallToolRequest, input WindowNameInput) (*mcp.CallToolResult, WindowActionOutput, error) { - if s.display == nil { - return nil, WindowActionOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - err := s.display.FocusWindow(input.Name) - if err != nil { - return nil, WindowActionOutput{}, fmt.Errorf("failed to focus window: %w", err) - } - - return nil, WindowActionOutput{ - Success: true, - Name: input.Name, - Action: "focus", - }, nil -} - -func (s *Service) screenList(ctx context.Context, req *mcp.CallToolRequest, input ScreenListInput) (*mcp.CallToolResult, ScreenListOutput, error) { - if s.display == nil { - return nil, ScreenListOutput{}, fmt.Errorf("display service not available (MCP server running standalone)") - } - - screens := s.display.GetScreens() - result := make([]ScreenInfo, len(screens)) - for i, sc := range screens { - result[i] = ScreenInfo{ - ID: sc.ID, - Name: sc.Name, - X: sc.X, - Y: sc.Y, - Width: sc.Width, - Height: sc.Height, - Primary: sc.Primary, - } - } - - return nil, ScreenListOutput{Screens: result}, nil -} diff --git a/pkg/repos/go.mod b/pkg/repos/go.mod deleted file mode 100644 index 501acd3..0000000 --- a/pkg/repos/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module github.com/host-uk/core/pkg/repos - -go 1.25 - -require gopkg.in/yaml.v3 v3.0.1 - -require ( - github.com/kr/pretty v0.3.1 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect -) diff --git a/pkg/repos/go.sum b/pkg/repos/go.sum deleted file mode 100644 index 00eced4..0000000 --- a/pkg/repos/go.sum +++ /dev/null @@ -1,17 +0,0 @@ -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/sdk/go.mod b/pkg/sdk/go.mod deleted file mode 100644 index 91a5f31..0000000 --- a/pkg/sdk/go.mod +++ /dev/null @@ -1,37 +0,0 @@ -module github.com/host-uk/core/pkg/sdk - -go 1.25 - -require ( - github.com/getkin/kin-openapi v0.133.0 - github.com/oasdiff/oasdiff v1.11.8 - github.com/stretchr/testify v1.11.1 -) - -require ( - cloud.google.com/go v0.123.0 // indirect - github.com/TwiN/go-color v1.4.1 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/go-openapi/jsonpointer v0.22.1 // indirect - github.com/go-openapi/swag/jsonname v0.25.1 // indirect - github.com/josharian/intern v1.0.0 // indirect - github.com/mailru/easyjson v0.9.0 // indirect - github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect - github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect - github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect - github.com/perimeterx/marshmallow v1.1.5 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - github.com/tidwall/gjson v1.18.0 // indirect - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.1 // indirect - github.com/tidwall/sjson v1.2.5 // indirect - github.com/ugorji/go/codec v1.3.0 // indirect - github.com/wI2L/jsondiff v0.7.0 // indirect - github.com/woodsbury/decimal128 v1.3.0 // indirect - github.com/yargevad/filepathx v1.0.0 // indirect - golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) - -replace github.com/host-uk/core/pkg/errors => ../errors diff --git a/pkg/sdk/go.sum b/pkg/sdk/go.sum deleted file mode 100644 index 9860ba2..0000000 --- a/pkg/sdk/go.sum +++ /dev/null @@ -1,65 +0,0 @@ -cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= -cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -github.com/TwiN/go-color v1.4.1 h1:mqG0P/KBgHKVqmtL5ye7K0/Gr4l6hTksPgTgMk3mUzc= -github.com/TwiN/go-color v1.4.1/go.mod h1:WcPf/jtiW95WBIsEeY1Lc/b8aaWoiqQpu5cf8WFxu+s= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/getkin/kin-openapi v0.133.0 h1:pJdmNohVIJ97r4AUFtEXRXwESr8b0bD721u/Tz6k8PQ= -github.com/getkin/kin-openapi v0.133.0/go.mod h1:boAciF6cXk5FhPqe/NQeBTeenbjqU4LhWBf09ILVvWE= -github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk= -github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM= -github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU= -github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo= -github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= -github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= -github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/oasdiff/oasdiff v1.11.8 h1:3LalSR0yYVM5sAYNInlIG4TVckLCJBkgjcnst2GKWVg= -github.com/oasdiff/oasdiff v1.11.8/go.mod h1:YtP/1VnQo8FCdSWGJ11a98HFgLnFvUffH//FTDuEpls= -github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY= -github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= -github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= -github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= -github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= -github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= -github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= -github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= -github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA= -github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= -github.com/wI2L/jsondiff v0.7.0 h1:1lH1G37GhBPqCfp/lrs91rf/2j3DktX6qYAKZkLuCQQ= -github.com/wI2L/jsondiff v0.7.0/go.mod h1:KAEIojdQq66oJiHhDyQez2x+sRit0vIzC9KeK0yizxM= -github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0= -github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds= -github.com/yargevad/filepathx v1.0.0 h1:SYcT+N3tYGi+NvazubCNlvgIPbzAk7i7y2dwg3I5FYc= -github.com/yargevad/filepathx v1.0.0/go.mod h1:BprfX/gpYNJHJfc35GjRRpVcwWXS89gGulUIU5tK3tA= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/updater/go.mod b/pkg/updater/go.mod deleted file mode 100644 index 4288249..0000000 --- a/pkg/updater/go.mod +++ /dev/null @@ -1,41 +0,0 @@ -module github.com/host-uk/core/pkg/updater - -go 1.25 - -require ( - github.com/Snider/Borg v0.0.0-20251104114649-4529aba089cd - github.com/minio/selfupdate v0.6.0 - github.com/spf13/cobra v1.10.2 - golang.org/x/mod v0.31.0 - golang.org/x/oauth2 v0.33.0 -) - -require ( - aead.dev/minisign v0.2.0 // indirect - dario.cat/mergo v1.0.2 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProtonMail/go-crypto v1.3.0 // indirect - github.com/cloudflare/circl v1.6.1 // indirect - github.com/cyphar/filepath-securejoin v0.6.1 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/emirpasic/gods v1.18.1 // indirect - github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.6.2 // indirect - github.com/go-git/go-git/v5 v5.16.4 // indirect - github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/kevinburke/ssh_config v1.4.0 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect - github.com/pjbgf/sha1cd v0.5.0 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/sergi/go-diff v1.4.0 // indirect - github.com/skeema/knownhosts v1.3.2 // indirect - github.com/spf13/pflag v1.0.10 // indirect - github.com/xanzy/ssh-agent v0.3.3 // indirect - golang.org/x/crypto v0.47.0 // indirect - golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect - golang.org/x/net v0.49.0 // indirect - golang.org/x/sys v0.40.0 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect -) diff --git a/pkg/updater/go.sum b/pkg/updater/go.sum deleted file mode 100644 index 164e7ca..0000000 --- a/pkg/updater/go.sum +++ /dev/null @@ -1,131 +0,0 @@ -aead.dev/minisign v0.2.0 h1:kAWrq/hBRu4AARY6AlciO83xhNnW9UaC8YipS2uhLPk= -aead.dev/minisign v0.2.0/go.mod h1:zdq6LdSd9TbuSxchxwhpA9zEb9YXcVGoE8JakuiGaIQ= -dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= -dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= -github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= -github.com/Snider/Borg v0.0.0-20251104114649-4529aba089cd h1:zesv6ecBmV9fy47wULeniKK66DEGJC0js+GMOpLKcgQ= -github.com/Snider/Borg v0.0.0-20251104114649-4529aba089cd/go.mod h1:hc5Gnll5TnOFTU6lJQV375Z+dcEIOyE6Ct2ykj7VgPQ= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= -github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE= -github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= -github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= -github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= -github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.16.4 h1:7ajIEZHZJULcyJebDLo99bGgS0jRrOxzZG4uCk2Yb2Y= -github.com/go-git/go-git/v5 v5.16.4/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/kevinburke/ssh_config v1.4.0 h1:6xxtP5bZ2E4NF5tuQulISpTO2z8XbtH8cg1PWkxoFkQ= -github.com/kevinburke/ssh_config v1.4.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M= -github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= -github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/minio/selfupdate v0.6.0 h1:i76PgT0K5xO9+hjzKcacQtO7+MjJ4JKA8Ak8XQ9DDwU= -github.com/minio/selfupdate v0.6.0/go.mod h1:bO02GTIPCMQFTEvE5h4DjYB58bCoZ35XLeBf0buTDdM= -github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= -github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= -github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.3.2 h1:EDL9mgf4NzwMXCTfaxSD/o/a5fxDw/xL9nkU28JjdBg= -github.com/skeema/knownhosts v1.3.2/go.mod h1:bEg3iQAuw+jyiw+484wwFJoKSLwcfd7fqRy+N0QTiow= -github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= -github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= -github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= -github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= -golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo= -golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210228012217-479acdf4ea46/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=