From 1024bf5709ec5bba4f3379997ebaf77129a4681b Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 07:46:18 -0500 Subject: [PATCH 01/16] refactor(cli): move cmd/agent under cmd/internal to mirror command tree --- cmd/helper/helper.go | 2 +- cmd/{ => internal}/agent/agent.go | 4 ++-- cmd/{ => internal}/agent/container/codeserver_async.go | 0 cmd/{ => internal}/agent/container/container.go | 0 cmd/{ => internal}/agent/container/credentials_server.go | 0 cmd/{ => internal}/agent/container/daemon.go | 0 cmd/{ => internal}/agent/container/deferred_hooks.go | 0 cmd/{ => internal}/agent/container/deferred_hooks_windows.go | 0 cmd/{ => internal}/agent/container/openvscode_async.go | 0 cmd/{ => internal}/agent/container/post_attach.go | 0 cmd/{ => internal}/agent/container/post_attach_windows.go | 0 cmd/{ => internal}/agent/container/setup.go | 0 .../agent/container/setup_devsy_platform_access.go | 0 cmd/{ => internal}/agent/container/setup_internal_test.go | 0 cmd/{ => internal}/agent/container/setup_windows.go | 0 cmd/{ => internal}/agent/container/ssh_server.go | 0 cmd/{ => internal}/agent/container/vscode_async.go | 0 cmd/{ => internal}/agent/container_tunnel.go | 2 +- cmd/{ => internal}/agent/daemon.go | 0 cmd/{ => internal}/agent/docker_credentials.go | 0 cmd/{ => internal}/agent/git_credentials.go | 2 +- cmd/{ => internal}/agent/git_ssh_signature.go | 0 cmd/{ => internal}/agent/git_ssh_signature_helper.go | 0 cmd/{ => internal}/agent/git_ssh_signature_test.go | 0 cmd/{ => internal}/agent/workspace/build.go | 0 cmd/{ => internal}/agent/workspace/clean.go | 0 cmd/{ => internal}/agent/workspace/clean_test.go | 0 cmd/{ => internal}/agent/workspace/delete.go | 0 cmd/{ => internal}/agent/workspace/delete_test.go | 0 cmd/{ => internal}/agent/workspace/docker_darwin_test.go | 0 cmd/{ => internal}/agent/workspace/install_dotfiles.go | 0 cmd/{ => internal}/agent/workspace/logs.go | 0 cmd/{ => internal}/agent/workspace/logs_daemon.go | 0 cmd/{ => internal}/agent/workspace/setup_gpg.go | 0 cmd/{ => internal}/agent/workspace/status.go | 0 cmd/{ => internal}/agent/workspace/stop.go | 0 cmd/{ => internal}/agent/workspace/up.go | 0 cmd/{ => internal}/agent/workspace/update_config.go | 0 cmd/{ => internal}/agent/workspace/workspace.go | 0 cmd/internal/internal.go | 2 +- cmd/pro/check_update.go | 2 +- cmd/pro/daemon/netcheck.go | 2 +- cmd/pro/daemon/status.go | 2 +- cmd/pro/health.go | 2 +- cmd/pro/provider/provider.go | 2 +- 45 files changed, 11 insertions(+), 11 deletions(-) rename cmd/{ => internal}/agent/agent.go (94%) rename cmd/{ => internal}/agent/container/codeserver_async.go (100%) rename cmd/{ => internal}/agent/container/container.go (100%) rename cmd/{ => internal}/agent/container/credentials_server.go (100%) rename cmd/{ => internal}/agent/container/daemon.go (100%) rename cmd/{ => internal}/agent/container/deferred_hooks.go (100%) rename cmd/{ => internal}/agent/container/deferred_hooks_windows.go (100%) rename cmd/{ => internal}/agent/container/openvscode_async.go (100%) rename cmd/{ => internal}/agent/container/post_attach.go (100%) rename cmd/{ => internal}/agent/container/post_attach_windows.go (100%) rename cmd/{ => internal}/agent/container/setup.go (100%) rename cmd/{ => internal}/agent/container/setup_devsy_platform_access.go (100%) rename cmd/{ => internal}/agent/container/setup_internal_test.go (100%) rename cmd/{ => internal}/agent/container/setup_windows.go (100%) rename cmd/{ => internal}/agent/container/ssh_server.go (100%) rename cmd/{ => internal}/agent/container/vscode_async.go (100%) rename cmd/{ => internal}/agent/container_tunnel.go (98%) rename cmd/{ => internal}/agent/daemon.go (100%) rename cmd/{ => internal}/agent/docker_credentials.go (100%) rename cmd/{ => internal}/agent/git_credentials.go (98%) rename cmd/{ => internal}/agent/git_ssh_signature.go (100%) rename cmd/{ => internal}/agent/git_ssh_signature_helper.go (100%) rename cmd/{ => internal}/agent/git_ssh_signature_test.go (100%) rename cmd/{ => internal}/agent/workspace/build.go (100%) rename cmd/{ => internal}/agent/workspace/clean.go (100%) rename cmd/{ => internal}/agent/workspace/clean_test.go (100%) rename cmd/{ => internal}/agent/workspace/delete.go (100%) rename cmd/{ => internal}/agent/workspace/delete_test.go (100%) rename cmd/{ => internal}/agent/workspace/docker_darwin_test.go (100%) rename cmd/{ => internal}/agent/workspace/install_dotfiles.go (100%) rename cmd/{ => internal}/agent/workspace/logs.go (100%) rename cmd/{ => internal}/agent/workspace/logs_daemon.go (100%) rename cmd/{ => internal}/agent/workspace/setup_gpg.go (100%) rename cmd/{ => internal}/agent/workspace/status.go (100%) rename cmd/{ => internal}/agent/workspace/stop.go (100%) rename cmd/{ => internal}/agent/workspace/up.go (100%) rename cmd/{ => internal}/agent/workspace/update_config.go (100%) rename cmd/{ => internal}/agent/workspace/workspace.go (100%) diff --git a/cmd/helper/helper.go b/cmd/helper/helper.go index 24a32c1e3..32c82c232 100644 --- a/cmd/helper/helper.go +++ b/cmd/helper/helper.go @@ -1,11 +1,11 @@ package helper import ( - "github.com/devsy-org/devsy/cmd/agent" "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/cmd/helper/http" "github.com/devsy-org/devsy/cmd/helper/json" "github.com/devsy-org/devsy/cmd/helper/strings" + "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/spf13/cobra" ) diff --git a/cmd/agent/agent.go b/cmd/internal/agent/agent.go similarity index 94% rename from cmd/agent/agent.go rename to cmd/internal/agent/agent.go index 45bae64f9..715b49d6b 100644 --- a/cmd/agent/agent.go +++ b/cmd/internal/agent/agent.go @@ -3,9 +3,9 @@ package agent import ( "os" - "github.com/devsy-org/devsy/cmd/agent/container" - "github.com/devsy-org/devsy/cmd/agent/workspace" "github.com/devsy-org/devsy/cmd/flags" + "github.com/devsy-org/devsy/cmd/internal/agent/container" + "github.com/devsy-org/devsy/cmd/internal/agent/workspace" "github.com/devsy-org/devsy/pkg/config" "github.com/devsy-org/devsy/pkg/envfile" "github.com/devsy-org/devsy/pkg/log" diff --git a/cmd/agent/container/codeserver_async.go b/cmd/internal/agent/container/codeserver_async.go similarity index 100% rename from cmd/agent/container/codeserver_async.go rename to cmd/internal/agent/container/codeserver_async.go diff --git a/cmd/agent/container/container.go b/cmd/internal/agent/container/container.go similarity index 100% rename from cmd/agent/container/container.go rename to cmd/internal/agent/container/container.go diff --git a/cmd/agent/container/credentials_server.go b/cmd/internal/agent/container/credentials_server.go similarity index 100% rename from cmd/agent/container/credentials_server.go rename to cmd/internal/agent/container/credentials_server.go diff --git a/cmd/agent/container/daemon.go b/cmd/internal/agent/container/daemon.go similarity index 100% rename from cmd/agent/container/daemon.go rename to cmd/internal/agent/container/daemon.go diff --git a/cmd/agent/container/deferred_hooks.go b/cmd/internal/agent/container/deferred_hooks.go similarity index 100% rename from cmd/agent/container/deferred_hooks.go rename to cmd/internal/agent/container/deferred_hooks.go diff --git a/cmd/agent/container/deferred_hooks_windows.go b/cmd/internal/agent/container/deferred_hooks_windows.go similarity index 100% rename from cmd/agent/container/deferred_hooks_windows.go rename to cmd/internal/agent/container/deferred_hooks_windows.go diff --git a/cmd/agent/container/openvscode_async.go b/cmd/internal/agent/container/openvscode_async.go similarity index 100% rename from cmd/agent/container/openvscode_async.go rename to cmd/internal/agent/container/openvscode_async.go diff --git a/cmd/agent/container/post_attach.go b/cmd/internal/agent/container/post_attach.go similarity index 100% rename from cmd/agent/container/post_attach.go rename to cmd/internal/agent/container/post_attach.go diff --git a/cmd/agent/container/post_attach_windows.go b/cmd/internal/agent/container/post_attach_windows.go similarity index 100% rename from cmd/agent/container/post_attach_windows.go rename to cmd/internal/agent/container/post_attach_windows.go diff --git a/cmd/agent/container/setup.go b/cmd/internal/agent/container/setup.go similarity index 100% rename from cmd/agent/container/setup.go rename to cmd/internal/agent/container/setup.go diff --git a/cmd/agent/container/setup_devsy_platform_access.go b/cmd/internal/agent/container/setup_devsy_platform_access.go similarity index 100% rename from cmd/agent/container/setup_devsy_platform_access.go rename to cmd/internal/agent/container/setup_devsy_platform_access.go diff --git a/cmd/agent/container/setup_internal_test.go b/cmd/internal/agent/container/setup_internal_test.go similarity index 100% rename from cmd/agent/container/setup_internal_test.go rename to cmd/internal/agent/container/setup_internal_test.go diff --git a/cmd/agent/container/setup_windows.go b/cmd/internal/agent/container/setup_windows.go similarity index 100% rename from cmd/agent/container/setup_windows.go rename to cmd/internal/agent/container/setup_windows.go diff --git a/cmd/agent/container/ssh_server.go b/cmd/internal/agent/container/ssh_server.go similarity index 100% rename from cmd/agent/container/ssh_server.go rename to cmd/internal/agent/container/ssh_server.go diff --git a/cmd/agent/container/vscode_async.go b/cmd/internal/agent/container/vscode_async.go similarity index 100% rename from cmd/agent/container/vscode_async.go rename to cmd/internal/agent/container/vscode_async.go diff --git a/cmd/agent/container_tunnel.go b/cmd/internal/agent/container_tunnel.go similarity index 98% rename from cmd/agent/container_tunnel.go rename to cmd/internal/agent/container_tunnel.go index 3e71d0a5e..87f16785d 100644 --- a/cmd/agent/container_tunnel.go +++ b/cmd/internal/agent/container_tunnel.go @@ -8,8 +8,8 @@ import ( "os/signal" "syscall" - "github.com/devsy-org/devsy/cmd/agent/workspace" "github.com/devsy-org/devsy/cmd/flags" + "github.com/devsy-org/devsy/cmd/internal/agent/workspace" "github.com/devsy-org/devsy/pkg/agent" pkgconfig "github.com/devsy-org/devsy/pkg/config" "github.com/devsy-org/devsy/pkg/devcontainer" diff --git a/cmd/agent/daemon.go b/cmd/internal/agent/daemon.go similarity index 100% rename from cmd/agent/daemon.go rename to cmd/internal/agent/daemon.go diff --git a/cmd/agent/docker_credentials.go b/cmd/internal/agent/docker_credentials.go similarity index 100% rename from cmd/agent/docker_credentials.go rename to cmd/internal/agent/docker_credentials.go diff --git a/cmd/agent/git_credentials.go b/cmd/internal/agent/git_credentials.go similarity index 98% rename from cmd/agent/git_credentials.go rename to cmd/internal/agent/git_credentials.go index a8b365e0c..71f03571c 100644 --- a/cmd/agent/git_credentials.go +++ b/cmd/internal/agent/git_credentials.go @@ -12,8 +12,8 @@ import ( "path/filepath" "strconv" - "github.com/devsy-org/devsy/cmd/agent/container" "github.com/devsy-org/devsy/cmd/flags" + "github.com/devsy-org/devsy/cmd/internal/agent/container" "github.com/devsy-org/devsy/pkg/gitcredentials" devsyhttp "github.com/devsy-org/devsy/pkg/http" "github.com/devsy-org/devsy/pkg/ts" diff --git a/cmd/agent/git_ssh_signature.go b/cmd/internal/agent/git_ssh_signature.go similarity index 100% rename from cmd/agent/git_ssh_signature.go rename to cmd/internal/agent/git_ssh_signature.go diff --git a/cmd/agent/git_ssh_signature_helper.go b/cmd/internal/agent/git_ssh_signature_helper.go similarity index 100% rename from cmd/agent/git_ssh_signature_helper.go rename to cmd/internal/agent/git_ssh_signature_helper.go diff --git a/cmd/agent/git_ssh_signature_test.go b/cmd/internal/agent/git_ssh_signature_test.go similarity index 100% rename from cmd/agent/git_ssh_signature_test.go rename to cmd/internal/agent/git_ssh_signature_test.go diff --git a/cmd/agent/workspace/build.go b/cmd/internal/agent/workspace/build.go similarity index 100% rename from cmd/agent/workspace/build.go rename to cmd/internal/agent/workspace/build.go diff --git a/cmd/agent/workspace/clean.go b/cmd/internal/agent/workspace/clean.go similarity index 100% rename from cmd/agent/workspace/clean.go rename to cmd/internal/agent/workspace/clean.go diff --git a/cmd/agent/workspace/clean_test.go b/cmd/internal/agent/workspace/clean_test.go similarity index 100% rename from cmd/agent/workspace/clean_test.go rename to cmd/internal/agent/workspace/clean_test.go diff --git a/cmd/agent/workspace/delete.go b/cmd/internal/agent/workspace/delete.go similarity index 100% rename from cmd/agent/workspace/delete.go rename to cmd/internal/agent/workspace/delete.go diff --git a/cmd/agent/workspace/delete_test.go b/cmd/internal/agent/workspace/delete_test.go similarity index 100% rename from cmd/agent/workspace/delete_test.go rename to cmd/internal/agent/workspace/delete_test.go diff --git a/cmd/agent/workspace/docker_darwin_test.go b/cmd/internal/agent/workspace/docker_darwin_test.go similarity index 100% rename from cmd/agent/workspace/docker_darwin_test.go rename to cmd/internal/agent/workspace/docker_darwin_test.go diff --git a/cmd/agent/workspace/install_dotfiles.go b/cmd/internal/agent/workspace/install_dotfiles.go similarity index 100% rename from cmd/agent/workspace/install_dotfiles.go rename to cmd/internal/agent/workspace/install_dotfiles.go diff --git a/cmd/agent/workspace/logs.go b/cmd/internal/agent/workspace/logs.go similarity index 100% rename from cmd/agent/workspace/logs.go rename to cmd/internal/agent/workspace/logs.go diff --git a/cmd/agent/workspace/logs_daemon.go b/cmd/internal/agent/workspace/logs_daemon.go similarity index 100% rename from cmd/agent/workspace/logs_daemon.go rename to cmd/internal/agent/workspace/logs_daemon.go diff --git a/cmd/agent/workspace/setup_gpg.go b/cmd/internal/agent/workspace/setup_gpg.go similarity index 100% rename from cmd/agent/workspace/setup_gpg.go rename to cmd/internal/agent/workspace/setup_gpg.go diff --git a/cmd/agent/workspace/status.go b/cmd/internal/agent/workspace/status.go similarity index 100% rename from cmd/agent/workspace/status.go rename to cmd/internal/agent/workspace/status.go diff --git a/cmd/agent/workspace/stop.go b/cmd/internal/agent/workspace/stop.go similarity index 100% rename from cmd/agent/workspace/stop.go rename to cmd/internal/agent/workspace/stop.go diff --git a/cmd/agent/workspace/up.go b/cmd/internal/agent/workspace/up.go similarity index 100% rename from cmd/agent/workspace/up.go rename to cmd/internal/agent/workspace/up.go diff --git a/cmd/agent/workspace/update_config.go b/cmd/internal/agent/workspace/update_config.go similarity index 100% rename from cmd/agent/workspace/update_config.go rename to cmd/internal/agent/workspace/update_config.go diff --git a/cmd/agent/workspace/workspace.go b/cmd/internal/agent/workspace/workspace.go similarity index 100% rename from cmd/agent/workspace/workspace.go rename to cmd/internal/agent/workspace/workspace.go diff --git a/cmd/internal/internal.go b/cmd/internal/internal.go index b667b79eb..96a236d8c 100644 --- a/cmd/internal/internal.go +++ b/cmd/internal/internal.go @@ -1,9 +1,9 @@ package cmdinternal import ( - "github.com/devsy-org/devsy/cmd/agent" "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/cmd/helper" + "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/spf13/cobra" ) diff --git a/cmd/pro/check_update.go b/cmd/pro/check_update.go index baa3dca06..faaaf75bd 100644 --- a/cmd/pro/check_update.go +++ b/cmd/pro/check_update.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" - "github.com/devsy-org/devsy/cmd/agent" + "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" "github.com/devsy-org/devsy/pkg/config" diff --git a/cmd/pro/daemon/netcheck.go b/cmd/pro/daemon/netcheck.go index 14bb353b0..36ff37dfa 100644 --- a/cmd/pro/daemon/netcheck.go +++ b/cmd/pro/daemon/netcheck.go @@ -5,7 +5,7 @@ import ( "fmt" "strconv" - "github.com/devsy-org/devsy/cmd/agent" + "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/pro/completion" proflags "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" diff --git a/cmd/pro/daemon/status.go b/cmd/pro/daemon/status.go index e56f5e69b..da15430a8 100644 --- a/cmd/pro/daemon/status.go +++ b/cmd/pro/daemon/status.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" - "github.com/devsy-org/devsy/cmd/agent" + "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/pro/completion" proflags "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" diff --git a/cmd/pro/health.go b/cmd/pro/health.go index 4ed3bc593..a236e0ca6 100644 --- a/cmd/pro/health.go +++ b/cmd/pro/health.go @@ -5,7 +5,7 @@ import ( "context" "fmt" - "github.com/devsy-org/devsy/cmd/agent" + "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" "github.com/devsy-org/devsy/pkg/client/clientimplementation" diff --git a/cmd/pro/provider/provider.go b/cmd/pro/provider/provider.go index 6f901659b..f8d327068 100644 --- a/cmd/pro/provider/provider.go +++ b/cmd/pro/provider/provider.go @@ -3,7 +3,7 @@ package provider import ( "os" - "github.com/devsy-org/devsy/cmd/agent" + "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/provider/create" "github.com/devsy-org/devsy/cmd/pro/provider/get" From 32719a37573cd033375d762149e87f1e12bc756f Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 07:51:55 -0500 Subject: [PATCH 02/16] refactor(cli): move cmd/helper under cmd/internal to mirror command tree --- cmd/{ => internal}/helper/browser_tunnel.go | 0 cmd/{ => internal}/helper/browser_tunnel_test.go | 0 cmd/{ => internal}/helper/check_provider_update.go | 0 cmd/{ => internal}/helper/docker_credentials.go | 0 cmd/{ => internal}/helper/fleet_helper.go | 0 cmd/{ => internal}/helper/get_image.go | 0 cmd/{ => internal}/helper/get_image_platforms.go | 0 cmd/{ => internal}/helper/get_provider_name.go | 0 cmd/{ => internal}/helper/get_workspace_config.go | 0 cmd/{ => internal}/helper/get_workspace_name.go | 0 cmd/{ => internal}/helper/get_workspace_uid.go | 0 cmd/{ => internal}/helper/helper.go | 6 +++--- cmd/{ => internal}/helper/http/http.go | 0 cmd/{ => internal}/helper/http/request.go | 0 cmd/{ => internal}/helper/json/get.go | 0 cmd/{ => internal}/helper/json/json.go | 0 cmd/{ => internal}/helper/sh.go | 0 cmd/{ => internal}/helper/ssh_client.go | 0 cmd/{ => internal}/helper/ssh_git_clone.go | 0 cmd/{ => internal}/helper/ssh_server.go | 0 cmd/{ => internal}/helper/strings/strings.go | 0 cmd/internal/internal.go | 2 +- 22 files changed, 4 insertions(+), 4 deletions(-) rename cmd/{ => internal}/helper/browser_tunnel.go (100%) rename cmd/{ => internal}/helper/browser_tunnel_test.go (100%) rename cmd/{ => internal}/helper/check_provider_update.go (100%) rename cmd/{ => internal}/helper/docker_credentials.go (100%) rename cmd/{ => internal}/helper/fleet_helper.go (100%) rename cmd/{ => internal}/helper/get_image.go (100%) rename cmd/{ => internal}/helper/get_image_platforms.go (100%) rename cmd/{ => internal}/helper/get_provider_name.go (100%) rename cmd/{ => internal}/helper/get_workspace_config.go (100%) rename cmd/{ => internal}/helper/get_workspace_name.go (100%) rename cmd/{ => internal}/helper/get_workspace_uid.go (100%) rename cmd/{ => internal}/helper/helper.go (89%) rename cmd/{ => internal}/helper/http/http.go (100%) rename cmd/{ => internal}/helper/http/request.go (100%) rename cmd/{ => internal}/helper/json/get.go (100%) rename cmd/{ => internal}/helper/json/json.go (100%) rename cmd/{ => internal}/helper/sh.go (100%) rename cmd/{ => internal}/helper/ssh_client.go (100%) rename cmd/{ => internal}/helper/ssh_git_clone.go (100%) rename cmd/{ => internal}/helper/ssh_server.go (100%) rename cmd/{ => internal}/helper/strings/strings.go (100%) diff --git a/cmd/helper/browser_tunnel.go b/cmd/internal/helper/browser_tunnel.go similarity index 100% rename from cmd/helper/browser_tunnel.go rename to cmd/internal/helper/browser_tunnel.go diff --git a/cmd/helper/browser_tunnel_test.go b/cmd/internal/helper/browser_tunnel_test.go similarity index 100% rename from cmd/helper/browser_tunnel_test.go rename to cmd/internal/helper/browser_tunnel_test.go diff --git a/cmd/helper/check_provider_update.go b/cmd/internal/helper/check_provider_update.go similarity index 100% rename from cmd/helper/check_provider_update.go rename to cmd/internal/helper/check_provider_update.go diff --git a/cmd/helper/docker_credentials.go b/cmd/internal/helper/docker_credentials.go similarity index 100% rename from cmd/helper/docker_credentials.go rename to cmd/internal/helper/docker_credentials.go diff --git a/cmd/helper/fleet_helper.go b/cmd/internal/helper/fleet_helper.go similarity index 100% rename from cmd/helper/fleet_helper.go rename to cmd/internal/helper/fleet_helper.go diff --git a/cmd/helper/get_image.go b/cmd/internal/helper/get_image.go similarity index 100% rename from cmd/helper/get_image.go rename to cmd/internal/helper/get_image.go diff --git a/cmd/helper/get_image_platforms.go b/cmd/internal/helper/get_image_platforms.go similarity index 100% rename from cmd/helper/get_image_platforms.go rename to cmd/internal/helper/get_image_platforms.go diff --git a/cmd/helper/get_provider_name.go b/cmd/internal/helper/get_provider_name.go similarity index 100% rename from cmd/helper/get_provider_name.go rename to cmd/internal/helper/get_provider_name.go diff --git a/cmd/helper/get_workspace_config.go b/cmd/internal/helper/get_workspace_config.go similarity index 100% rename from cmd/helper/get_workspace_config.go rename to cmd/internal/helper/get_workspace_config.go diff --git a/cmd/helper/get_workspace_name.go b/cmd/internal/helper/get_workspace_name.go similarity index 100% rename from cmd/helper/get_workspace_name.go rename to cmd/internal/helper/get_workspace_name.go diff --git a/cmd/helper/get_workspace_uid.go b/cmd/internal/helper/get_workspace_uid.go similarity index 100% rename from cmd/helper/get_workspace_uid.go rename to cmd/internal/helper/get_workspace_uid.go diff --git a/cmd/helper/helper.go b/cmd/internal/helper/helper.go similarity index 89% rename from cmd/helper/helper.go rename to cmd/internal/helper/helper.go index 32c82c232..b360dbfbe 100644 --- a/cmd/helper/helper.go +++ b/cmd/internal/helper/helper.go @@ -2,10 +2,10 @@ package helper import ( "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/helper/http" - "github.com/devsy-org/devsy/cmd/helper/json" - "github.com/devsy-org/devsy/cmd/helper/strings" "github.com/devsy-org/devsy/cmd/internal/agent" + "github.com/devsy-org/devsy/cmd/internal/helper/http" + "github.com/devsy-org/devsy/cmd/internal/helper/json" + "github.com/devsy-org/devsy/cmd/internal/helper/strings" "github.com/spf13/cobra" ) diff --git a/cmd/helper/http/http.go b/cmd/internal/helper/http/http.go similarity index 100% rename from cmd/helper/http/http.go rename to cmd/internal/helper/http/http.go diff --git a/cmd/helper/http/request.go b/cmd/internal/helper/http/request.go similarity index 100% rename from cmd/helper/http/request.go rename to cmd/internal/helper/http/request.go diff --git a/cmd/helper/json/get.go b/cmd/internal/helper/json/get.go similarity index 100% rename from cmd/helper/json/get.go rename to cmd/internal/helper/json/get.go diff --git a/cmd/helper/json/json.go b/cmd/internal/helper/json/json.go similarity index 100% rename from cmd/helper/json/json.go rename to cmd/internal/helper/json/json.go diff --git a/cmd/helper/sh.go b/cmd/internal/helper/sh.go similarity index 100% rename from cmd/helper/sh.go rename to cmd/internal/helper/sh.go diff --git a/cmd/helper/ssh_client.go b/cmd/internal/helper/ssh_client.go similarity index 100% rename from cmd/helper/ssh_client.go rename to cmd/internal/helper/ssh_client.go diff --git a/cmd/helper/ssh_git_clone.go b/cmd/internal/helper/ssh_git_clone.go similarity index 100% rename from cmd/helper/ssh_git_clone.go rename to cmd/internal/helper/ssh_git_clone.go diff --git a/cmd/helper/ssh_server.go b/cmd/internal/helper/ssh_server.go similarity index 100% rename from cmd/helper/ssh_server.go rename to cmd/internal/helper/ssh_server.go diff --git a/cmd/helper/strings/strings.go b/cmd/internal/helper/strings/strings.go similarity index 100% rename from cmd/helper/strings/strings.go rename to cmd/internal/helper/strings/strings.go diff --git a/cmd/internal/internal.go b/cmd/internal/internal.go index 96a236d8c..7f8b4e6bf 100644 --- a/cmd/internal/internal.go +++ b/cmd/internal/internal.go @@ -2,8 +2,8 @@ package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/helper" "github.com/devsy-org/devsy/cmd/internal/agent" + "github.com/devsy-org/devsy/cmd/internal/helper" "github.com/spf13/cobra" ) From 99bd00113ae8f82b5468d25f3c2ffebf75d9204e Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 07:56:50 -0500 Subject: [PATCH 03/16] refactor(cli): group helper ssh commands into ssh sub-package --- cmd/internal/helper/helper.go | 7 ++++--- cmd/internal/helper/{ => ssh}/ssh_client.go | 2 +- cmd/internal/helper/{ => ssh}/ssh_git_clone.go | 2 +- cmd/internal/helper/{ => ssh}/ssh_server.go | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) rename cmd/internal/helper/{ => ssh}/ssh_client.go (99%) rename cmd/internal/helper/{ => ssh}/ssh_git_clone.go (99%) rename cmd/internal/helper/{ => ssh}/ssh_server.go (99%) diff --git a/cmd/internal/helper/helper.go b/cmd/internal/helper/helper.go index b360dbfbe..a41450469 100644 --- a/cmd/internal/helper/helper.go +++ b/cmd/internal/helper/helper.go @@ -5,6 +5,7 @@ import ( "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/internal/helper/http" "github.com/devsy-org/devsy/cmd/internal/helper/json" + "github.com/devsy-org/devsy/cmd/internal/helper/ssh" "github.com/devsy-org/devsy/cmd/internal/helper/strings" "github.com/spf13/cobra" ) @@ -23,15 +24,15 @@ func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { helperCmd.AddCommand(http.NewHTTPCmd(globalFlags)) helperCmd.AddCommand(json.NewJSONCmd(globalFlags)) helperCmd.AddCommand(strings.NewStringsCmd(globalFlags)) - helperCmd.AddCommand(NewSSHServerCmd(globalFlags)) + helperCmd.AddCommand(ssh.NewSSHServerCmd(globalFlags)) helperCmd.AddCommand(NewGetWorkspaceNameCmd(globalFlags)) helperCmd.AddCommand(NewGetWorkspaceUIDCmd(globalFlags)) helperCmd.AddCommand(NewGetWorkspaceConfigCommand(globalFlags)) helperCmd.AddCommand(NewGetProviderNameCmd(globalFlags)) helperCmd.AddCommand(NewCheckProviderUpdateCmd(globalFlags)) - helperCmd.AddCommand(NewSSHClientCmd()) + helperCmd.AddCommand(ssh.NewSSHClientCmd()) helperCmd.AddCommand(NewShellCmd()) - helperCmd.AddCommand(NewSSHGitCloneCmd()) + helperCmd.AddCommand(ssh.NewSSHGitCloneCmd()) helperCmd.AddCommand(NewFleetServerCmd(globalFlags)) helperCmd.AddCommand(NewDockerCredentialsHelperCmd(globalFlags)) helperCmd.AddCommand(NewGetImageCmd(globalFlags)) diff --git a/cmd/internal/helper/ssh_client.go b/cmd/internal/helper/ssh/ssh_client.go similarity index 99% rename from cmd/internal/helper/ssh_client.go rename to cmd/internal/helper/ssh/ssh_client.go index e4f515fb5..112ce69a6 100644 --- a/cmd/internal/helper/ssh_client.go +++ b/cmd/internal/helper/ssh/ssh_client.go @@ -1,4 +1,4 @@ -package helper +package ssh import ( "context" diff --git a/cmd/internal/helper/ssh_git_clone.go b/cmd/internal/helper/ssh/ssh_git_clone.go similarity index 99% rename from cmd/internal/helper/ssh_git_clone.go rename to cmd/internal/helper/ssh/ssh_git_clone.go index 0bdb9b7bf..cac3aa769 100644 --- a/cmd/internal/helper/ssh_git_clone.go +++ b/cmd/internal/helper/ssh/ssh_git_clone.go @@ -1,4 +1,4 @@ -package helper +package ssh import ( "context" diff --git a/cmd/internal/helper/ssh_server.go b/cmd/internal/helper/ssh/ssh_server.go similarity index 99% rename from cmd/internal/helper/ssh_server.go rename to cmd/internal/helper/ssh/ssh_server.go index 4ed079a04..b346c3a15 100644 --- a/cmd/internal/helper/ssh_server.go +++ b/cmd/internal/helper/ssh/ssh_server.go @@ -1,4 +1,4 @@ -package helper +package ssh import ( "encoding/base64" From fc153a92a5b833b1cb558cfb3e23c2a0fd68bd3b Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:01:28 -0500 Subject: [PATCH 04/16] refactor(cli): group helper workspace-info commands into workspaceinfo sub-package --- cmd/internal/helper/helper.go | 7 ++++--- .../helper/{ => workspaceinfo}/get_workspace_config.go | 2 +- .../helper/{ => workspaceinfo}/get_workspace_name.go | 2 +- .../helper/{ => workspaceinfo}/get_workspace_uid.go | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) rename cmd/internal/helper/{ => workspaceinfo}/get_workspace_config.go (99%) rename cmd/internal/helper/{ => workspaceinfo}/get_workspace_name.go (97%) rename cmd/internal/helper/{ => workspaceinfo}/get_workspace_uid.go (97%) diff --git a/cmd/internal/helper/helper.go b/cmd/internal/helper/helper.go index a41450469..d4d08b077 100644 --- a/cmd/internal/helper/helper.go +++ b/cmd/internal/helper/helper.go @@ -7,6 +7,7 @@ import ( "github.com/devsy-org/devsy/cmd/internal/helper/json" "github.com/devsy-org/devsy/cmd/internal/helper/ssh" "github.com/devsy-org/devsy/cmd/internal/helper/strings" + "github.com/devsy-org/devsy/cmd/internal/helper/workspaceinfo" "github.com/spf13/cobra" ) @@ -25,9 +26,9 @@ func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { helperCmd.AddCommand(json.NewJSONCmd(globalFlags)) helperCmd.AddCommand(strings.NewStringsCmd(globalFlags)) helperCmd.AddCommand(ssh.NewSSHServerCmd(globalFlags)) - helperCmd.AddCommand(NewGetWorkspaceNameCmd(globalFlags)) - helperCmd.AddCommand(NewGetWorkspaceUIDCmd(globalFlags)) - helperCmd.AddCommand(NewGetWorkspaceConfigCommand(globalFlags)) + helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) + helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) + helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceConfigCommand(globalFlags)) helperCmd.AddCommand(NewGetProviderNameCmd(globalFlags)) helperCmd.AddCommand(NewCheckProviderUpdateCmd(globalFlags)) helperCmd.AddCommand(ssh.NewSSHClientCmd()) diff --git a/cmd/internal/helper/get_workspace_config.go b/cmd/internal/helper/workspaceinfo/get_workspace_config.go similarity index 99% rename from cmd/internal/helper/get_workspace_config.go rename to cmd/internal/helper/workspaceinfo/get_workspace_config.go index f36b4f9d2..76e3e674a 100644 --- a/cmd/internal/helper/get_workspace_config.go +++ b/cmd/internal/helper/workspaceinfo/get_workspace_config.go @@ -1,4 +1,4 @@ -package helper +package workspaceinfo import ( "context" diff --git a/cmd/internal/helper/get_workspace_name.go b/cmd/internal/helper/workspaceinfo/get_workspace_name.go similarity index 97% rename from cmd/internal/helper/get_workspace_name.go rename to cmd/internal/helper/workspaceinfo/get_workspace_name.go index c1f5251b6..afa35f965 100644 --- a/cmd/internal/helper/get_workspace_name.go +++ b/cmd/internal/helper/workspaceinfo/get_workspace_name.go @@ -1,4 +1,4 @@ -package helper +package workspaceinfo import ( "context" diff --git a/cmd/internal/helper/get_workspace_uid.go b/cmd/internal/helper/workspaceinfo/get_workspace_uid.go similarity index 97% rename from cmd/internal/helper/get_workspace_uid.go rename to cmd/internal/helper/workspaceinfo/get_workspace_uid.go index 66c109a66..bc7cb6c3f 100644 --- a/cmd/internal/helper/get_workspace_uid.go +++ b/cmd/internal/helper/workspaceinfo/get_workspace_uid.go @@ -1,4 +1,4 @@ -package helper +package workspaceinfo import ( "context" From 500593452c4543207e39007dca49202a69e28155 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:05:15 -0500 Subject: [PATCH 05/16] refactor(cli): group helper provider commands into provider sub-package --- cmd/internal/helper/helper.go | 5 +++-- cmd/internal/helper/{ => provider}/check_provider_update.go | 2 +- cmd/internal/helper/{ => provider}/get_provider_name.go | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) rename cmd/internal/helper/{ => provider}/check_provider_update.go (99%) rename cmd/internal/helper/{ => provider}/get_provider_name.go (98%) diff --git a/cmd/internal/helper/helper.go b/cmd/internal/helper/helper.go index d4d08b077..b4bb5d60f 100644 --- a/cmd/internal/helper/helper.go +++ b/cmd/internal/helper/helper.go @@ -5,6 +5,7 @@ import ( "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/internal/helper/http" "github.com/devsy-org/devsy/cmd/internal/helper/json" + "github.com/devsy-org/devsy/cmd/internal/helper/provider" "github.com/devsy-org/devsy/cmd/internal/helper/ssh" "github.com/devsy-org/devsy/cmd/internal/helper/strings" "github.com/devsy-org/devsy/cmd/internal/helper/workspaceinfo" @@ -29,8 +30,8 @@ func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceConfigCommand(globalFlags)) - helperCmd.AddCommand(NewGetProviderNameCmd(globalFlags)) - helperCmd.AddCommand(NewCheckProviderUpdateCmd(globalFlags)) + helperCmd.AddCommand(provider.NewGetProviderNameCmd(globalFlags)) + helperCmd.AddCommand(provider.NewCheckProviderUpdateCmd(globalFlags)) helperCmd.AddCommand(ssh.NewSSHClientCmd()) helperCmd.AddCommand(NewShellCmd()) helperCmd.AddCommand(ssh.NewSSHGitCloneCmd()) diff --git a/cmd/internal/helper/check_provider_update.go b/cmd/internal/helper/provider/check_provider_update.go similarity index 99% rename from cmd/internal/helper/check_provider_update.go rename to cmd/internal/helper/provider/check_provider_update.go index f6ea1f45c..d4ed54463 100644 --- a/cmd/internal/helper/check_provider_update.go +++ b/cmd/internal/helper/provider/check_provider_update.go @@ -1,4 +1,4 @@ -package helper +package provider import ( "bytes" diff --git a/cmd/internal/helper/get_provider_name.go b/cmd/internal/helper/provider/get_provider_name.go similarity index 98% rename from cmd/internal/helper/get_provider_name.go rename to cmd/internal/helper/provider/get_provider_name.go index e36ab0fd7..e40824ee9 100644 --- a/cmd/internal/helper/get_provider_name.go +++ b/cmd/internal/helper/provider/get_provider_name.go @@ -1,4 +1,4 @@ -package helper +package provider import ( "bytes" From 07816b540760f0aa36f1f2497c55678d38707f7f Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:08:48 -0500 Subject: [PATCH 06/16] refactor(cli): group helper image commands into image sub-package --- cmd/internal/helper/helper.go | 5 +++-- cmd/internal/helper/{ => image}/get_image.go | 2 +- cmd/internal/helper/{ => image}/get_image_platforms.go | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) rename cmd/internal/helper/{ => image}/get_image.go (98%) rename cmd/internal/helper/{ => image}/get_image_platforms.go (98%) diff --git a/cmd/internal/helper/helper.go b/cmd/internal/helper/helper.go index b4bb5d60f..4a0aeb36d 100644 --- a/cmd/internal/helper/helper.go +++ b/cmd/internal/helper/helper.go @@ -4,6 +4,7 @@ import ( "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/internal/helper/http" + "github.com/devsy-org/devsy/cmd/internal/helper/image" "github.com/devsy-org/devsy/cmd/internal/helper/json" "github.com/devsy-org/devsy/cmd/internal/helper/provider" "github.com/devsy-org/devsy/cmd/internal/helper/ssh" @@ -37,8 +38,8 @@ func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { helperCmd.AddCommand(ssh.NewSSHGitCloneCmd()) helperCmd.AddCommand(NewFleetServerCmd(globalFlags)) helperCmd.AddCommand(NewDockerCredentialsHelperCmd(globalFlags)) - helperCmd.AddCommand(NewGetImageCmd(globalFlags)) - helperCmd.AddCommand(NewGetImagePlatformsCmd(globalFlags)) + helperCmd.AddCommand(image.NewGetImageCmd(globalFlags)) + helperCmd.AddCommand(image.NewGetImagePlatformsCmd(globalFlags)) helperCmd.AddCommand(NewBrowserTunnelCmd(globalFlags)) return helperCmd } diff --git a/cmd/internal/helper/get_image.go b/cmd/internal/helper/image/get_image.go similarity index 98% rename from cmd/internal/helper/get_image.go rename to cmd/internal/helper/image/get_image.go index 160387b83..6fe91eee2 100644 --- a/cmd/internal/helper/get_image.go +++ b/cmd/internal/helper/image/get_image.go @@ -1,4 +1,4 @@ -package helper +package image import ( "context" diff --git a/cmd/internal/helper/get_image_platforms.go b/cmd/internal/helper/image/get_image_platforms.go similarity index 98% rename from cmd/internal/helper/get_image_platforms.go rename to cmd/internal/helper/image/get_image_platforms.go index 7ef48fed4..a31cd5512 100644 --- a/cmd/internal/helper/get_image_platforms.go +++ b/cmd/internal/helper/image/get_image_platforms.go @@ -1,4 +1,4 @@ -package helper +package image import ( "context" From 609a1d5a7618a95893e1880352469cd5acf1720c Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:12:34 -0500 Subject: [PATCH 07/16] refactor(cli): fix stale cmd/agent path reference in comment --- cmd/workspace/ssh.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/workspace/ssh.go b/cmd/workspace/ssh.go index 731a6871e..85e8acebf 100644 --- a/cmd/workspace/ssh.go +++ b/cmd/workspace/ssh.go @@ -676,7 +676,7 @@ func (cmd *SSHCmd) startServices( } // setupGPGAgent will forward a local gpg-agent into the remote container -// this works by using cmd/agent/workspace/setup_gpg. +// this works by using cmd/internal/agent/workspace/setup_gpg. func (cmd *SSHCmd) setupGPGAgent( ctx context.Context, containerClient *ssh.Client, From 6740c31ce331bfa0ba6bb727126c2e48ec969880 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:37:52 -0500 Subject: [PATCH 08/16] refactor(cli): hoist agent/container to cmd/internal/agentcontainer --- cmd/internal/agent/agent.go | 4 ++-- cmd/internal/agent/git_credentials.go | 6 +++--- .../{agent/container => agentcontainer}/codeserver_async.go | 2 +- .../{agent/container => agentcontainer}/container.go | 2 +- .../container => agentcontainer}/credentials_server.go | 2 +- cmd/internal/{agent/container => agentcontainer}/daemon.go | 2 +- .../{agent/container => agentcontainer}/deferred_hooks.go | 2 +- .../container => agentcontainer}/deferred_hooks_windows.go | 2 +- .../{agent/container => agentcontainer}/openvscode_async.go | 2 +- .../{agent/container => agentcontainer}/post_attach.go | 2 +- .../container => agentcontainer}/post_attach_windows.go | 2 +- cmd/internal/{agent/container => agentcontainer}/setup.go | 2 +- .../setup_devsy_platform_access.go | 2 +- .../container => agentcontainer}/setup_internal_test.go | 2 +- .../{agent/container => agentcontainer}/setup_windows.go | 2 +- .../{agent/container => agentcontainer}/ssh_server.go | 2 +- .../{agent/container => agentcontainer}/vscode_async.go | 2 +- 17 files changed, 20 insertions(+), 20 deletions(-) rename cmd/internal/{agent/container => agentcontainer}/codeserver_async.go (98%) rename cmd/internal/{agent/container => agentcontainer}/container.go (97%) rename cmd/internal/{agent/container => agentcontainer}/credentials_server.go (99%) rename cmd/internal/{agent/container => agentcontainer}/daemon.go (99%) rename cmd/internal/{agent/container => agentcontainer}/deferred_hooks.go (99%) rename cmd/internal/{agent/container => agentcontainer}/deferred_hooks_windows.go (94%) rename cmd/internal/{agent/container => agentcontainer}/openvscode_async.go (98%) rename cmd/internal/{agent/container => agentcontainer}/post_attach.go (98%) rename cmd/internal/{agent/container => agentcontainer}/post_attach_windows.go (94%) rename cmd/internal/{agent/container => agentcontainer}/setup.go (99%) rename cmd/internal/{agent/container => agentcontainer}/setup_devsy_platform_access.go (98%) rename cmd/internal/{agent/container => agentcontainer}/setup_internal_test.go (98%) rename cmd/internal/{agent/container => agentcontainer}/setup_windows.go (94%) rename cmd/internal/{agent/container => agentcontainer}/ssh_server.go (98%) rename cmd/internal/{agent/container => agentcontainer}/vscode_async.go (98%) diff --git a/cmd/internal/agent/agent.go b/cmd/internal/agent/agent.go index 715b49d6b..81261160d 100644 --- a/cmd/internal/agent/agent.go +++ b/cmd/internal/agent/agent.go @@ -4,8 +4,8 @@ import ( "os" "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agent/container" "github.com/devsy-org/devsy/cmd/internal/agent/workspace" + "github.com/devsy-org/devsy/cmd/internal/agentcontainer" "github.com/devsy-org/devsy/pkg/config" "github.com/devsy-org/devsy/pkg/envfile" "github.com/devsy-org/devsy/pkg/log" @@ -26,7 +26,7 @@ func NewAgentCmd(globalFlags *flags.GlobalFlags) *cobra.Command { } agentCmd.AddCommand(workspace.NewWorkspaceCmd(globalFlags)) - agentCmd.AddCommand(container.NewContainerCmd(globalFlags)) + agentCmd.AddCommand(agentcontainer.NewContainerCmd(globalFlags)) agentCmd.AddCommand(NewDaemonCmd(globalFlags)) agentCmd.AddCommand(NewContainerTunnelCmd(globalFlags)) agentCmd.AddCommand(NewGitCredentialsCmd(globalFlags)) diff --git a/cmd/internal/agent/git_credentials.go b/cmd/internal/agent/git_credentials.go index 71f03571c..e77589f16 100644 --- a/cmd/internal/agent/git_credentials.go +++ b/cmd/internal/agent/git_credentials.go @@ -13,7 +13,7 @@ import ( "strconv" "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agent/container" + "github.com/devsy-org/devsy/cmd/internal/agentcontainer" "github.com/devsy-org/devsy/pkg/gitcredentials" devsyhttp "github.com/devsy-org/devsy/pkg/http" "github.com/devsy-org/devsy/pkg/ts" @@ -80,7 +80,7 @@ func (cmd *GitCredentialsCmd) Run(ctx context.Context, args []string) error { func getCredentialsFromWorkspaceServer( credentials *gitcredentials.GitCredentials, ) *gitcredentials.GitCredentials { - if _, err := os.Stat(filepath.Join(container.RootDir, ts.RunnerProxySocket)); err != nil { + if _, err := os.Stat(filepath.Join(agentcontainer.RootDir, ts.RunnerProxySocket)); err != nil { // workspace server is not running return nil } @@ -88,7 +88,7 @@ func getCredentialsFromWorkspaceServer( httpClient := &http.Client{ Transport: &http.Transport{ DialContext: func(_ context.Context, _, _ string) (net.Conn, error) { - return net.Dial("unix", filepath.Join(container.RootDir, ts.RunnerProxySocket)) + return net.Dial("unix", filepath.Join(agentcontainer.RootDir, ts.RunnerProxySocket)) }, }, } diff --git a/cmd/internal/agent/container/codeserver_async.go b/cmd/internal/agentcontainer/codeserver_async.go similarity index 98% rename from cmd/internal/agent/container/codeserver_async.go rename to cmd/internal/agentcontainer/codeserver_async.go index 997533a08..a7b5c2e05 100644 --- a/cmd/internal/agent/container/codeserver_async.go +++ b/cmd/internal/agentcontainer/codeserver_async.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "encoding/json" diff --git a/cmd/internal/agent/container/container.go b/cmd/internal/agentcontainer/container.go similarity index 97% rename from cmd/internal/agent/container/container.go rename to cmd/internal/agentcontainer/container.go index ae527e2d5..d750ef01f 100644 --- a/cmd/internal/agent/container/container.go +++ b/cmd/internal/agentcontainer/container.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/internal/agent/container/credentials_server.go b/cmd/internal/agentcontainer/credentials_server.go similarity index 99% rename from cmd/internal/agent/container/credentials_server.go rename to cmd/internal/agentcontainer/credentials_server.go index d3755b6e3..09b534ae2 100644 --- a/cmd/internal/agent/container/credentials_server.go +++ b/cmd/internal/agentcontainer/credentials_server.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "context" diff --git a/cmd/internal/agent/container/daemon.go b/cmd/internal/agentcontainer/daemon.go similarity index 99% rename from cmd/internal/agent/container/daemon.go rename to cmd/internal/agentcontainer/daemon.go index 537e95fc9..04a420ef7 100644 --- a/cmd/internal/agent/container/daemon.go +++ b/cmd/internal/agentcontainer/daemon.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "context" diff --git a/cmd/internal/agent/container/deferred_hooks.go b/cmd/internal/agentcontainer/deferred_hooks.go similarity index 99% rename from cmd/internal/agent/container/deferred_hooks.go rename to cmd/internal/agentcontainer/deferred_hooks.go index 717ba7235..b47694258 100644 --- a/cmd/internal/agent/container/deferred_hooks.go +++ b/cmd/internal/agentcontainer/deferred_hooks.go @@ -1,6 +1,6 @@ //go:build !windows -package container +package agentcontainer import ( "context" diff --git a/cmd/internal/agent/container/deferred_hooks_windows.go b/cmd/internal/agentcontainer/deferred_hooks_windows.go similarity index 94% rename from cmd/internal/agent/container/deferred_hooks_windows.go rename to cmd/internal/agentcontainer/deferred_hooks_windows.go index c27e73b34..4f13a74a9 100644 --- a/cmd/internal/agent/container/deferred_hooks_windows.go +++ b/cmd/internal/agentcontainer/deferred_hooks_windows.go @@ -1,6 +1,6 @@ //go:build windows -package container +package agentcontainer import ( "fmt" diff --git a/cmd/internal/agent/container/openvscode_async.go b/cmd/internal/agentcontainer/openvscode_async.go similarity index 98% rename from cmd/internal/agent/container/openvscode_async.go rename to cmd/internal/agentcontainer/openvscode_async.go index 11bda33fe..2a8fd68f1 100644 --- a/cmd/internal/agent/container/openvscode_async.go +++ b/cmd/internal/agentcontainer/openvscode_async.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "encoding/json" diff --git a/cmd/internal/agent/container/post_attach.go b/cmd/internal/agentcontainer/post_attach.go similarity index 98% rename from cmd/internal/agent/container/post_attach.go rename to cmd/internal/agentcontainer/post_attach.go index 5ad8533c9..8e6675f2b 100644 --- a/cmd/internal/agent/container/post_attach.go +++ b/cmd/internal/agentcontainer/post_attach.go @@ -1,6 +1,6 @@ //go:build !windows -package container +package agentcontainer import ( "context" diff --git a/cmd/internal/agent/container/post_attach_windows.go b/cmd/internal/agentcontainer/post_attach_windows.go similarity index 94% rename from cmd/internal/agent/container/post_attach_windows.go rename to cmd/internal/agentcontainer/post_attach_windows.go index a95b69454..b67834dcf 100644 --- a/cmd/internal/agent/container/post_attach_windows.go +++ b/cmd/internal/agentcontainer/post_attach_windows.go @@ -1,6 +1,6 @@ //go:build windows -package container +package agentcontainer import ( "fmt" diff --git a/cmd/internal/agent/container/setup.go b/cmd/internal/agentcontainer/setup.go similarity index 99% rename from cmd/internal/agent/container/setup.go rename to cmd/internal/agentcontainer/setup.go index 3e792f378..d54e676aa 100644 --- a/cmd/internal/agent/container/setup.go +++ b/cmd/internal/agentcontainer/setup.go @@ -1,6 +1,6 @@ //go:build !windows -package container +package agentcontainer import ( "context" diff --git a/cmd/internal/agent/container/setup_devsy_platform_access.go b/cmd/internal/agentcontainer/setup_devsy_platform_access.go similarity index 98% rename from cmd/internal/agent/container/setup_devsy_platform_access.go rename to cmd/internal/agentcontainer/setup_devsy_platform_access.go index 58077ddf6..6b1e1bddc 100644 --- a/cmd/internal/agent/container/setup_devsy_platform_access.go +++ b/cmd/internal/agentcontainer/setup_devsy_platform_access.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "fmt" diff --git a/cmd/internal/agent/container/setup_internal_test.go b/cmd/internal/agentcontainer/setup_internal_test.go similarity index 98% rename from cmd/internal/agent/container/setup_internal_test.go rename to cmd/internal/agentcontainer/setup_internal_test.go index f63e89b19..890a9642f 100644 --- a/cmd/internal/agent/container/setup_internal_test.go +++ b/cmd/internal/agentcontainer/setup_internal_test.go @@ -1,6 +1,6 @@ //go:build !windows -package container +package agentcontainer import ( "encoding/json" diff --git a/cmd/internal/agent/container/setup_windows.go b/cmd/internal/agentcontainer/setup_windows.go similarity index 94% rename from cmd/internal/agent/container/setup_windows.go rename to cmd/internal/agentcontainer/setup_windows.go index 569ad5e7d..87bdf9065 100644 --- a/cmd/internal/agent/container/setup_windows.go +++ b/cmd/internal/agentcontainer/setup_windows.go @@ -1,6 +1,6 @@ //go:build windows -package container +package agentcontainer import ( "fmt" diff --git a/cmd/internal/agent/container/ssh_server.go b/cmd/internal/agentcontainer/ssh_server.go similarity index 98% rename from cmd/internal/agent/container/ssh_server.go rename to cmd/internal/agentcontainer/ssh_server.go index 3529008db..1987d2ed3 100644 --- a/cmd/internal/agent/container/ssh_server.go +++ b/cmd/internal/agentcontainer/ssh_server.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "fmt" diff --git a/cmd/internal/agent/container/vscode_async.go b/cmd/internal/agentcontainer/vscode_async.go similarity index 98% rename from cmd/internal/agent/container/vscode_async.go rename to cmd/internal/agentcontainer/vscode_async.go index 6795e70d9..9008cd826 100644 --- a/cmd/internal/agent/container/vscode_async.go +++ b/cmd/internal/agentcontainer/vscode_async.go @@ -1,4 +1,4 @@ -package container +package agentcontainer import ( "encoding/json" From a430c4c2fd3964838e4e9fd40943e1b1d54a5f23 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:42:48 -0500 Subject: [PATCH 09/16] refactor(cli): hoist agent/workspace to cmd/internal/agentworkspace --- cmd/internal/agent/agent.go | 4 ++-- cmd/internal/agent/container_tunnel.go | 6 +++--- cmd/internal/{agent/workspace => agentworkspace}/build.go | 2 +- cmd/internal/{agent/workspace => agentworkspace}/clean.go | 2 +- .../{agent/workspace => agentworkspace}/clean_test.go | 2 +- cmd/internal/{agent/workspace => agentworkspace}/delete.go | 2 +- .../{agent/workspace => agentworkspace}/delete_test.go | 2 +- .../workspace => agentworkspace}/docker_darwin_test.go | 2 +- .../{agent/workspace => agentworkspace}/install_dotfiles.go | 2 +- cmd/internal/{agent/workspace => agentworkspace}/logs.go | 2 +- .../{agent/workspace => agentworkspace}/logs_daemon.go | 2 +- .../{agent/workspace => agentworkspace}/setup_gpg.go | 2 +- cmd/internal/{agent/workspace => agentworkspace}/status.go | 2 +- cmd/internal/{agent/workspace => agentworkspace}/stop.go | 2 +- cmd/internal/{agent/workspace => agentworkspace}/up.go | 2 +- .../{agent/workspace => agentworkspace}/update_config.go | 2 +- .../{agent/workspace => agentworkspace}/workspace.go | 2 +- cmd/workspace/ssh.go | 2 +- 18 files changed, 21 insertions(+), 21 deletions(-) rename cmd/internal/{agent/workspace => agentworkspace}/build.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/clean.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/clean_test.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/delete.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/delete_test.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/docker_darwin_test.go (98%) rename cmd/internal/{agent/workspace => agentworkspace}/install_dotfiles.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/logs.go (98%) rename cmd/internal/{agent/workspace => agentworkspace}/logs_daemon.go (98%) rename cmd/internal/{agent/workspace => agentworkspace}/setup_gpg.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/status.go (98%) rename cmd/internal/{agent/workspace => agentworkspace}/stop.go (98%) rename cmd/internal/{agent/workspace => agentworkspace}/up.go (99%) rename cmd/internal/{agent/workspace => agentworkspace}/update_config.go (97%) rename cmd/internal/{agent/workspace => agentworkspace}/workspace.go (97%) diff --git a/cmd/internal/agent/agent.go b/cmd/internal/agent/agent.go index 81261160d..fd75f78eb 100644 --- a/cmd/internal/agent/agent.go +++ b/cmd/internal/agent/agent.go @@ -4,8 +4,8 @@ import ( "os" "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agent/workspace" "github.com/devsy-org/devsy/cmd/internal/agentcontainer" + "github.com/devsy-org/devsy/cmd/internal/agentworkspace" "github.com/devsy-org/devsy/pkg/config" "github.com/devsy-org/devsy/pkg/envfile" "github.com/devsy-org/devsy/pkg/log" @@ -25,7 +25,7 @@ func NewAgentCmd(globalFlags *flags.GlobalFlags) *cobra.Command { Hidden: true, } - agentCmd.AddCommand(workspace.NewWorkspaceCmd(globalFlags)) + agentCmd.AddCommand(agentworkspace.NewWorkspaceCmd(globalFlags)) agentCmd.AddCommand(agentcontainer.NewContainerCmd(globalFlags)) agentCmd.AddCommand(NewDaemonCmd(globalFlags)) agentCmd.AddCommand(NewContainerTunnelCmd(globalFlags)) diff --git a/cmd/internal/agent/container_tunnel.go b/cmd/internal/agent/container_tunnel.go index 87f16785d..46d42fbd2 100644 --- a/cmd/internal/agent/container_tunnel.go +++ b/cmd/internal/agent/container_tunnel.go @@ -9,7 +9,7 @@ import ( "syscall" "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agent/workspace" + "github.com/devsy-org/devsy/cmd/internal/agentworkspace" "github.com/devsy-org/devsy/pkg/agent" pkgconfig "github.com/devsy-org/devsy/pkg/config" "github.com/devsy-org/devsy/pkg/devcontainer" @@ -61,13 +61,13 @@ func (cmd *ContainerTunnelCmd) Run(ctx context.Context) error { } // make sure content folder exists - _, err = workspace.InitContentFolder(workspaceInfo) + _, err = agentworkspace.InitContentFolder(workspaceInfo) if err != nil { return err } // create runner - runner, err := workspace.CreateRunner(workspaceInfo) + runner, err := agentworkspace.CreateRunner(workspaceInfo) if err != nil { return err } diff --git a/cmd/internal/agent/workspace/build.go b/cmd/internal/agentworkspace/build.go similarity index 99% rename from cmd/internal/agent/workspace/build.go rename to cmd/internal/agentworkspace/build.go index 05bc52825..acd685e87 100644 --- a/cmd/internal/agent/workspace/build.go +++ b/cmd/internal/agentworkspace/build.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/clean.go b/cmd/internal/agentworkspace/clean.go similarity index 99% rename from cmd/internal/agent/workspace/clean.go rename to cmd/internal/agentworkspace/clean.go index 10e2e9ada..7259c31d1 100644 --- a/cmd/internal/agent/workspace/clean.go +++ b/cmd/internal/agentworkspace/clean.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/clean_test.go b/cmd/internal/agentworkspace/clean_test.go similarity index 99% rename from cmd/internal/agent/workspace/clean_test.go rename to cmd/internal/agentworkspace/clean_test.go index 70877bdb9..9ec8b9b5a 100644 --- a/cmd/internal/agent/workspace/clean_test.go +++ b/cmd/internal/agentworkspace/clean_test.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/delete.go b/cmd/internal/agentworkspace/delete.go similarity index 99% rename from cmd/internal/agent/workspace/delete.go rename to cmd/internal/agentworkspace/delete.go index 23de15165..6f895dae0 100644 --- a/cmd/internal/agent/workspace/delete.go +++ b/cmd/internal/agentworkspace/delete.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/delete_test.go b/cmd/internal/agentworkspace/delete_test.go similarity index 99% rename from cmd/internal/agent/workspace/delete_test.go rename to cmd/internal/agentworkspace/delete_test.go index be0fec0b3..6a7d63a57 100644 --- a/cmd/internal/agent/workspace/delete_test.go +++ b/cmd/internal/agentworkspace/delete_test.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "os" diff --git a/cmd/internal/agent/workspace/docker_darwin_test.go b/cmd/internal/agentworkspace/docker_darwin_test.go similarity index 98% rename from cmd/internal/agent/workspace/docker_darwin_test.go rename to cmd/internal/agentworkspace/docker_darwin_test.go index 0f1519ab0..5a167bdbe 100644 --- a/cmd/internal/agent/workspace/docker_darwin_test.go +++ b/cmd/internal/agentworkspace/docker_darwin_test.go @@ -1,6 +1,6 @@ //go:build darwin -package workspace +package agentworkspace import ( "os" diff --git a/cmd/internal/agent/workspace/install_dotfiles.go b/cmd/internal/agentworkspace/install_dotfiles.go similarity index 99% rename from cmd/internal/agent/workspace/install_dotfiles.go rename to cmd/internal/agentworkspace/install_dotfiles.go index fe5781514..171b5d0ad 100644 --- a/cmd/internal/agent/workspace/install_dotfiles.go +++ b/cmd/internal/agentworkspace/install_dotfiles.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/logs.go b/cmd/internal/agentworkspace/logs.go similarity index 98% rename from cmd/internal/agent/workspace/logs.go rename to cmd/internal/agentworkspace/logs.go index 59f27c90c..1baa93036 100644 --- a/cmd/internal/agent/workspace/logs.go +++ b/cmd/internal/agentworkspace/logs.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/logs_daemon.go b/cmd/internal/agentworkspace/logs_daemon.go similarity index 98% rename from cmd/internal/agent/workspace/logs_daemon.go rename to cmd/internal/agentworkspace/logs_daemon.go index 901a716f9..ef5cc5a67 100644 --- a/cmd/internal/agent/workspace/logs_daemon.go +++ b/cmd/internal/agentworkspace/logs_daemon.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/setup_gpg.go b/cmd/internal/agentworkspace/setup_gpg.go similarity index 99% rename from cmd/internal/agent/workspace/setup_gpg.go rename to cmd/internal/agentworkspace/setup_gpg.go index b78f4de3f..76332e268 100644 --- a/cmd/internal/agent/workspace/setup_gpg.go +++ b/cmd/internal/agentworkspace/setup_gpg.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/status.go b/cmd/internal/agentworkspace/status.go similarity index 98% rename from cmd/internal/agent/workspace/status.go rename to cmd/internal/agentworkspace/status.go index 743d186ef..6b0f2a732 100644 --- a/cmd/internal/agent/workspace/status.go +++ b/cmd/internal/agentworkspace/status.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/stop.go b/cmd/internal/agentworkspace/stop.go similarity index 98% rename from cmd/internal/agent/workspace/stop.go rename to cmd/internal/agentworkspace/stop.go index 3056f4715..00686e3c0 100644 --- a/cmd/internal/agent/workspace/stop.go +++ b/cmd/internal/agentworkspace/stop.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/up.go b/cmd/internal/agentworkspace/up.go similarity index 99% rename from cmd/internal/agent/workspace/up.go rename to cmd/internal/agentworkspace/up.go index 10e0b39ba..572328f5d 100644 --- a/cmd/internal/agent/workspace/up.go +++ b/cmd/internal/agentworkspace/up.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/update_config.go b/cmd/internal/agentworkspace/update_config.go similarity index 97% rename from cmd/internal/agent/workspace/update_config.go rename to cmd/internal/agentworkspace/update_config.go index 485631aaa..8754a562c 100644 --- a/cmd/internal/agent/workspace/update_config.go +++ b/cmd/internal/agentworkspace/update_config.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "context" diff --git a/cmd/internal/agent/workspace/workspace.go b/cmd/internal/agentworkspace/workspace.go similarity index 97% rename from cmd/internal/agent/workspace/workspace.go rename to cmd/internal/agentworkspace/workspace.go index dfdfe9261..a55ac5796 100644 --- a/cmd/internal/agent/workspace/workspace.go +++ b/cmd/internal/agentworkspace/workspace.go @@ -1,4 +1,4 @@ -package workspace +package agentworkspace import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/workspace/ssh.go b/cmd/workspace/ssh.go index 85e8acebf..6ba38fb9b 100644 --- a/cmd/workspace/ssh.go +++ b/cmd/workspace/ssh.go @@ -676,7 +676,7 @@ func (cmd *SSHCmd) startServices( } // setupGPGAgent will forward a local gpg-agent into the remote container -// this works by using cmd/internal/agent/workspace/setup_gpg. +// this works by using cmd/internal/agentworkspace/setup_gpg. func (cmd *SSHCmd) setupGPGAgent( ctx context.Context, containerClient *ssh.Client, From da69c465843bb766f61fd509c1061fe7dd22f5b6 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:47:48 -0500 Subject: [PATCH 10/16] refactor(cli): hoist helper http/json/strings to prefixed sub-packages --- cmd/internal/helper/helper.go | 12 ++++++------ cmd/internal/{helper/http => helperhttp}/http.go | 2 +- cmd/internal/{helper/http => helperhttp}/request.go | 2 +- cmd/internal/{helper/json => helperjson}/get.go | 2 +- cmd/internal/{helper/json => helperjson}/json.go | 2 +- .../{helper/strings => helperstrings}/strings.go | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) rename cmd/internal/{helper/http => helperhttp}/http.go (94%) rename cmd/internal/{helper/http => helperhttp}/request.go (99%) rename cmd/internal/{helper/json => helperjson}/get.go (99%) rename cmd/internal/{helper/json => helperjson}/json.go (94%) rename cmd/internal/{helper/strings => helperstrings}/strings.go (93%) diff --git a/cmd/internal/helper/helper.go b/cmd/internal/helper/helper.go index 4a0aeb36d..ce445ed67 100644 --- a/cmd/internal/helper/helper.go +++ b/cmd/internal/helper/helper.go @@ -3,13 +3,13 @@ package helper import ( "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/cmd/internal/agent" - "github.com/devsy-org/devsy/cmd/internal/helper/http" "github.com/devsy-org/devsy/cmd/internal/helper/image" - "github.com/devsy-org/devsy/cmd/internal/helper/json" "github.com/devsy-org/devsy/cmd/internal/helper/provider" "github.com/devsy-org/devsy/cmd/internal/helper/ssh" - "github.com/devsy-org/devsy/cmd/internal/helper/strings" "github.com/devsy-org/devsy/cmd/internal/helper/workspaceinfo" + "github.com/devsy-org/devsy/cmd/internal/helperhttp" + "github.com/devsy-org/devsy/cmd/internal/helperjson" + "github.com/devsy-org/devsy/cmd/internal/helperstrings" "github.com/spf13/cobra" ) @@ -24,9 +24,9 @@ func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { Hidden: true, } - helperCmd.AddCommand(http.NewHTTPCmd(globalFlags)) - helperCmd.AddCommand(json.NewJSONCmd(globalFlags)) - helperCmd.AddCommand(strings.NewStringsCmd(globalFlags)) + helperCmd.AddCommand(helperhttp.NewHTTPCmd(globalFlags)) + helperCmd.AddCommand(helperjson.NewJSONCmd(globalFlags)) + helperCmd.AddCommand(helperstrings.NewStringsCmd(globalFlags)) helperCmd.AddCommand(ssh.NewSSHServerCmd(globalFlags)) helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) diff --git a/cmd/internal/helper/http/http.go b/cmd/internal/helperhttp/http.go similarity index 94% rename from cmd/internal/helper/http/http.go rename to cmd/internal/helperhttp/http.go index c5924a597..61394cace 100644 --- a/cmd/internal/helper/http/http.go +++ b/cmd/internal/helperhttp/http.go @@ -1,4 +1,4 @@ -package http +package helperhttp import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/internal/helper/http/request.go b/cmd/internal/helperhttp/request.go similarity index 99% rename from cmd/internal/helper/http/request.go rename to cmd/internal/helperhttp/request.go index 481dd1c61..27f56bdce 100644 --- a/cmd/internal/helper/http/request.go +++ b/cmd/internal/helperhttp/request.go @@ -1,4 +1,4 @@ -package http +package helperhttp import ( "context" diff --git a/cmd/internal/helper/json/get.go b/cmd/internal/helperjson/get.go similarity index 99% rename from cmd/internal/helper/json/get.go rename to cmd/internal/helperjson/get.go index f6e500ab9..1367e0f2a 100644 --- a/cmd/internal/helper/json/get.go +++ b/cmd/internal/helperjson/get.go @@ -1,4 +1,4 @@ -package json +package helperjson import ( "context" diff --git a/cmd/internal/helper/json/json.go b/cmd/internal/helperjson/json.go similarity index 94% rename from cmd/internal/helper/json/json.go rename to cmd/internal/helperjson/json.go index a7a82b063..5f530ed26 100644 --- a/cmd/internal/helper/json/json.go +++ b/cmd/internal/helperjson/json.go @@ -1,4 +1,4 @@ -package json +package helperjson import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/internal/helper/strings/strings.go b/cmd/internal/helperstrings/strings.go similarity index 93% rename from cmd/internal/helper/strings/strings.go rename to cmd/internal/helperstrings/strings.go index 1f31b2ab3..0a03fac73 100644 --- a/cmd/internal/helper/strings/strings.go +++ b/cmd/internal/helperstrings/strings.go @@ -1,4 +1,4 @@ -package strings +package helperstrings import ( "github.com/devsy-org/devsy/cmd/flags" From 123fc75e0334e42864b9e4ec613dbd25ba5e6a66 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 08:53:00 -0500 Subject: [PATCH 11/16] refactor(cli): hoist helper ssh/provider/image/workspaceinfo to prefixed sub-packages --- cmd/internal/helper/helper.go | 28 +++++++++---------- .../image => helperimage}/get_image.go | 2 +- .../get_image_platforms.go | 2 +- .../check_provider_update.go | 2 +- .../get_provider_name.go | 2 +- .../{helper/ssh => helperssh}/ssh_client.go | 2 +- .../ssh => helperssh}/ssh_git_clone.go | 2 +- .../{helper/ssh => helperssh}/ssh_server.go | 2 +- .../get_workspace_config.go | 2 +- .../get_workspace_name.go | 2 +- .../get_workspace_uid.go | 2 +- 11 files changed, 24 insertions(+), 24 deletions(-) rename cmd/internal/{helper/image => helperimage}/get_image.go (97%) rename cmd/internal/{helper/image => helperimage}/get_image_platforms.go (98%) rename cmd/internal/{helper/provider => helperprovider}/check_provider_update.go (99%) rename cmd/internal/{helper/provider => helperprovider}/get_provider_name.go (97%) rename cmd/internal/{helper/ssh => helperssh}/ssh_client.go (99%) rename cmd/internal/{helper/ssh => helperssh}/ssh_git_clone.go (99%) rename cmd/internal/{helper/ssh => helperssh}/ssh_server.go (99%) rename cmd/internal/{helper/workspaceinfo => helperworkspaceinfo}/get_workspace_config.go (98%) rename cmd/internal/{helper/workspaceinfo => helperworkspaceinfo}/get_workspace_name.go (97%) rename cmd/internal/{helper/workspaceinfo => helperworkspaceinfo}/get_workspace_uid.go (96%) diff --git a/cmd/internal/helper/helper.go b/cmd/internal/helper/helper.go index ce445ed67..2143cfe72 100644 --- a/cmd/internal/helper/helper.go +++ b/cmd/internal/helper/helper.go @@ -3,13 +3,13 @@ package helper import ( "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/cmd/internal/agent" - "github.com/devsy-org/devsy/cmd/internal/helper/image" - "github.com/devsy-org/devsy/cmd/internal/helper/provider" - "github.com/devsy-org/devsy/cmd/internal/helper/ssh" - "github.com/devsy-org/devsy/cmd/internal/helper/workspaceinfo" "github.com/devsy-org/devsy/cmd/internal/helperhttp" + "github.com/devsy-org/devsy/cmd/internal/helperimage" "github.com/devsy-org/devsy/cmd/internal/helperjson" + "github.com/devsy-org/devsy/cmd/internal/helperprovider" + "github.com/devsy-org/devsy/cmd/internal/helperssh" "github.com/devsy-org/devsy/cmd/internal/helperstrings" + "github.com/devsy-org/devsy/cmd/internal/helperworkspaceinfo" "github.com/spf13/cobra" ) @@ -27,19 +27,19 @@ func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { helperCmd.AddCommand(helperhttp.NewHTTPCmd(globalFlags)) helperCmd.AddCommand(helperjson.NewJSONCmd(globalFlags)) helperCmd.AddCommand(helperstrings.NewStringsCmd(globalFlags)) - helperCmd.AddCommand(ssh.NewSSHServerCmd(globalFlags)) - helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) - helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) - helperCmd.AddCommand(workspaceinfo.NewGetWorkspaceConfigCommand(globalFlags)) - helperCmd.AddCommand(provider.NewGetProviderNameCmd(globalFlags)) - helperCmd.AddCommand(provider.NewCheckProviderUpdateCmd(globalFlags)) - helperCmd.AddCommand(ssh.NewSSHClientCmd()) + helperCmd.AddCommand(helperssh.NewSSHServerCmd(globalFlags)) + helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) + helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) + helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceConfigCommand(globalFlags)) + helperCmd.AddCommand(helperprovider.NewGetProviderNameCmd(globalFlags)) + helperCmd.AddCommand(helperprovider.NewCheckProviderUpdateCmd(globalFlags)) + helperCmd.AddCommand(helperssh.NewSSHClientCmd()) helperCmd.AddCommand(NewShellCmd()) - helperCmd.AddCommand(ssh.NewSSHGitCloneCmd()) + helperCmd.AddCommand(helperssh.NewSSHGitCloneCmd()) helperCmd.AddCommand(NewFleetServerCmd(globalFlags)) helperCmd.AddCommand(NewDockerCredentialsHelperCmd(globalFlags)) - helperCmd.AddCommand(image.NewGetImageCmd(globalFlags)) - helperCmd.AddCommand(image.NewGetImagePlatformsCmd(globalFlags)) + helperCmd.AddCommand(helperimage.NewGetImageCmd(globalFlags)) + helperCmd.AddCommand(helperimage.NewGetImagePlatformsCmd(globalFlags)) helperCmd.AddCommand(NewBrowserTunnelCmd(globalFlags)) return helperCmd } diff --git a/cmd/internal/helper/image/get_image.go b/cmd/internal/helperimage/get_image.go similarity index 97% rename from cmd/internal/helper/image/get_image.go rename to cmd/internal/helperimage/get_image.go index 6fe91eee2..b85e58ee9 100644 --- a/cmd/internal/helper/image/get_image.go +++ b/cmd/internal/helperimage/get_image.go @@ -1,4 +1,4 @@ -package image +package helperimage import ( "context" diff --git a/cmd/internal/helper/image/get_image_platforms.go b/cmd/internal/helperimage/get_image_platforms.go similarity index 98% rename from cmd/internal/helper/image/get_image_platforms.go rename to cmd/internal/helperimage/get_image_platforms.go index a31cd5512..aa2650635 100644 --- a/cmd/internal/helper/image/get_image_platforms.go +++ b/cmd/internal/helperimage/get_image_platforms.go @@ -1,4 +1,4 @@ -package image +package helperimage import ( "context" diff --git a/cmd/internal/helper/provider/check_provider_update.go b/cmd/internal/helperprovider/check_provider_update.go similarity index 99% rename from cmd/internal/helper/provider/check_provider_update.go rename to cmd/internal/helperprovider/check_provider_update.go index d4ed54463..a1f5f8956 100644 --- a/cmd/internal/helper/provider/check_provider_update.go +++ b/cmd/internal/helperprovider/check_provider_update.go @@ -1,4 +1,4 @@ -package provider +package helperprovider import ( "bytes" diff --git a/cmd/internal/helper/provider/get_provider_name.go b/cmd/internal/helperprovider/get_provider_name.go similarity index 97% rename from cmd/internal/helper/provider/get_provider_name.go rename to cmd/internal/helperprovider/get_provider_name.go index e40824ee9..9a5a9788a 100644 --- a/cmd/internal/helper/provider/get_provider_name.go +++ b/cmd/internal/helperprovider/get_provider_name.go @@ -1,4 +1,4 @@ -package provider +package helperprovider import ( "bytes" diff --git a/cmd/internal/helper/ssh/ssh_client.go b/cmd/internal/helperssh/ssh_client.go similarity index 99% rename from cmd/internal/helper/ssh/ssh_client.go rename to cmd/internal/helperssh/ssh_client.go index 112ce69a6..9e5e4300e 100644 --- a/cmd/internal/helper/ssh/ssh_client.go +++ b/cmd/internal/helperssh/ssh_client.go @@ -1,4 +1,4 @@ -package ssh +package helperssh import ( "context" diff --git a/cmd/internal/helper/ssh/ssh_git_clone.go b/cmd/internal/helperssh/ssh_git_clone.go similarity index 99% rename from cmd/internal/helper/ssh/ssh_git_clone.go rename to cmd/internal/helperssh/ssh_git_clone.go index cac3aa769..09d12c479 100644 --- a/cmd/internal/helper/ssh/ssh_git_clone.go +++ b/cmd/internal/helperssh/ssh_git_clone.go @@ -1,4 +1,4 @@ -package ssh +package helperssh import ( "context" diff --git a/cmd/internal/helper/ssh/ssh_server.go b/cmd/internal/helperssh/ssh_server.go similarity index 99% rename from cmd/internal/helper/ssh/ssh_server.go rename to cmd/internal/helperssh/ssh_server.go index b346c3a15..718cc4434 100644 --- a/cmd/internal/helper/ssh/ssh_server.go +++ b/cmd/internal/helperssh/ssh_server.go @@ -1,4 +1,4 @@ -package ssh +package helperssh import ( "encoding/base64" diff --git a/cmd/internal/helper/workspaceinfo/get_workspace_config.go b/cmd/internal/helperworkspaceinfo/get_workspace_config.go similarity index 98% rename from cmd/internal/helper/workspaceinfo/get_workspace_config.go rename to cmd/internal/helperworkspaceinfo/get_workspace_config.go index 76e3e674a..2fe442750 100644 --- a/cmd/internal/helper/workspaceinfo/get_workspace_config.go +++ b/cmd/internal/helperworkspaceinfo/get_workspace_config.go @@ -1,4 +1,4 @@ -package workspaceinfo +package helperworkspaceinfo import ( "context" diff --git a/cmd/internal/helper/workspaceinfo/get_workspace_name.go b/cmd/internal/helperworkspaceinfo/get_workspace_name.go similarity index 97% rename from cmd/internal/helper/workspaceinfo/get_workspace_name.go rename to cmd/internal/helperworkspaceinfo/get_workspace_name.go index afa35f965..e9e89efd4 100644 --- a/cmd/internal/helper/workspaceinfo/get_workspace_name.go +++ b/cmd/internal/helperworkspaceinfo/get_workspace_name.go @@ -1,4 +1,4 @@ -package workspaceinfo +package helperworkspaceinfo import ( "context" diff --git a/cmd/internal/helper/workspaceinfo/get_workspace_uid.go b/cmd/internal/helperworkspaceinfo/get_workspace_uid.go similarity index 96% rename from cmd/internal/helper/workspaceinfo/get_workspace_uid.go rename to cmd/internal/helperworkspaceinfo/get_workspace_uid.go index bc7cb6c3f..648869698 100644 --- a/cmd/internal/helper/workspaceinfo/get_workspace_uid.go +++ b/cmd/internal/helperworkspaceinfo/get_workspace_uid.go @@ -1,4 +1,4 @@ -package workspaceinfo +package helperworkspaceinfo import ( "context" From 9b0eb69e480a7ff9f3b0a21ce77b34d4618f7cda Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 09:00:01 -0500 Subject: [PATCH 12/16] refactor(cli): dissolve helper loose files into cmdinternal package --- cmd/internal/{helper => }/browser_tunnel.go | 2 +- cmd/internal/{helper => }/browser_tunnel_test.go | 2 +- cmd/internal/{helper => }/fleet_helper.go | 2 +- cmd/internal/{helper => }/helper.go | 2 +- cmd/internal/internal.go | 3 +-- .../docker_credentials.go => setup_docker_credentials.go} | 2 +- cmd/internal/{helper => }/sh.go | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) rename cmd/internal/{helper => }/browser_tunnel.go (99%) rename cmd/internal/{helper => }/browser_tunnel_test.go (99%) rename cmd/internal/{helper => }/fleet_helper.go (98%) rename cmd/internal/{helper => }/helper.go (99%) rename cmd/internal/{helper/docker_credentials.go => setup_docker_credentials.go} (97%) rename cmd/internal/{helper => }/sh.go (98%) diff --git a/cmd/internal/helper/browser_tunnel.go b/cmd/internal/browser_tunnel.go similarity index 99% rename from cmd/internal/helper/browser_tunnel.go rename to cmd/internal/browser_tunnel.go index 7185f8726..c9cf0c84e 100644 --- a/cmd/internal/helper/browser_tunnel.go +++ b/cmd/internal/browser_tunnel.go @@ -1,4 +1,4 @@ -package helper +package cmdinternal import ( "context" diff --git a/cmd/internal/helper/browser_tunnel_test.go b/cmd/internal/browser_tunnel_test.go similarity index 99% rename from cmd/internal/helper/browser_tunnel_test.go rename to cmd/internal/browser_tunnel_test.go index 527305f31..d0a5ed1e1 100644 --- a/cmd/internal/helper/browser_tunnel_test.go +++ b/cmd/internal/browser_tunnel_test.go @@ -1,4 +1,4 @@ -package helper +package cmdinternal import ( "strings" diff --git a/cmd/internal/helper/fleet_helper.go b/cmd/internal/fleet_helper.go similarity index 98% rename from cmd/internal/helper/fleet_helper.go rename to cmd/internal/fleet_helper.go index 29b26b2a4..d390928ef 100644 --- a/cmd/internal/helper/fleet_helper.go +++ b/cmd/internal/fleet_helper.go @@ -1,4 +1,4 @@ -package helper +package cmdinternal import ( "os" diff --git a/cmd/internal/helper/helper.go b/cmd/internal/helper.go similarity index 99% rename from cmd/internal/helper/helper.go rename to cmd/internal/helper.go index 2143cfe72..7ad9d77c0 100644 --- a/cmd/internal/helper/helper.go +++ b/cmd/internal/helper.go @@ -1,4 +1,4 @@ -package helper +package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/internal/internal.go b/cmd/internal/internal.go index 7f8b4e6bf..138d223f3 100644 --- a/cmd/internal/internal.go +++ b/cmd/internal/internal.go @@ -3,7 +3,6 @@ package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/cmd/internal/agent" - "github.com/devsy-org/devsy/cmd/internal/helper" "github.com/spf13/cobra" ) @@ -17,7 +16,7 @@ func NewInternalCmd(globalFlags *flags.GlobalFlags) *cobra.Command { Hidden: true, } cmd.AddCommand(agent.NewAgentCmd(globalFlags)) - cmd.AddCommand(helper.NewHelperCmd(globalFlags)) + cmd.AddCommand(NewHelperCmd(globalFlags)) cmd.AddCommand(NewDaemonLocalCmd(globalFlags)) cmd.AddCommand(NewLogsDaemonCmd(globalFlags)) cmd.AddCommand(NewRunUserCommandsCmd(globalFlags)) diff --git a/cmd/internal/helper/docker_credentials.go b/cmd/internal/setup_docker_credentials.go similarity index 97% rename from cmd/internal/helper/docker_credentials.go rename to cmd/internal/setup_docker_credentials.go index f2ff84f88..701c072bc 100644 --- a/cmd/internal/helper/docker_credentials.go +++ b/cmd/internal/setup_docker_credentials.go @@ -1,4 +1,4 @@ -package helper +package cmdinternal import ( "fmt" diff --git a/cmd/internal/helper/sh.go b/cmd/internal/sh.go similarity index 98% rename from cmd/internal/helper/sh.go rename to cmd/internal/sh.go index 4e1852469..9f612bbae 100644 --- a/cmd/internal/helper/sh.go +++ b/cmd/internal/sh.go @@ -1,4 +1,4 @@ -package helper +package cmdinternal import ( "context" From 10454f29b0981d78e0594375a6e4cb3bc5450f1a Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 09:05:41 -0500 Subject: [PATCH 13/16] refactor(cli): dissolve agent loose files into cmdinternal package --- cmd/internal/{agent => }/agent.go | 2 +- cmd/internal/{agent/daemon.go => agent_daemon.go} | 2 +- .../docker_credentials.go => agent_docker_credentials.go} | 2 +- cmd/internal/{agent => }/container_tunnel.go | 2 +- cmd/internal/{agent => }/git_credentials.go | 2 +- cmd/internal/{agent => }/git_ssh_signature.go | 2 +- cmd/internal/{agent => }/git_ssh_signature_helper.go | 2 +- cmd/internal/{agent => }/git_ssh_signature_test.go | 2 +- cmd/internal/helper.go | 3 +-- cmd/internal/internal.go | 3 +-- cmd/pro/check_update.go | 4 ++-- cmd/pro/daemon/netcheck.go | 4 ++-- cmd/pro/daemon/status.go | 4 ++-- cmd/pro/health.go | 4 ++-- cmd/pro/provider/provider.go | 6 +++--- 15 files changed, 21 insertions(+), 23 deletions(-) rename cmd/internal/{agent => }/agent.go (99%) rename cmd/internal/{agent/daemon.go => agent_daemon.go} (99%) rename cmd/internal/{agent/docker_credentials.go => agent_docker_credentials.go} (98%) rename cmd/internal/{agent => }/container_tunnel.go (99%) rename cmd/internal/{agent => }/git_credentials.go (99%) rename cmd/internal/{agent => }/git_ssh_signature.go (99%) rename cmd/internal/{agent => }/git_ssh_signature_helper.go (98%) rename cmd/internal/{agent => }/git_ssh_signature_test.go (99%) diff --git a/cmd/internal/agent/agent.go b/cmd/internal/agent.go similarity index 99% rename from cmd/internal/agent/agent.go rename to cmd/internal/agent.go index fd75f78eb..d308098c1 100644 --- a/cmd/internal/agent/agent.go +++ b/cmd/internal/agent.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "os" diff --git a/cmd/internal/agent/daemon.go b/cmd/internal/agent_daemon.go similarity index 99% rename from cmd/internal/agent/daemon.go rename to cmd/internal/agent_daemon.go index c59d87980..f153cdd8d 100644 --- a/cmd/internal/agent/daemon.go +++ b/cmd/internal/agent_daemon.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "bytes" diff --git a/cmd/internal/agent/docker_credentials.go b/cmd/internal/agent_docker_credentials.go similarity index 98% rename from cmd/internal/agent/docker_credentials.go rename to cmd/internal/agent_docker_credentials.go index 4959ca005..82898830d 100644 --- a/cmd/internal/agent/docker_credentials.go +++ b/cmd/internal/agent_docker_credentials.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "context" diff --git a/cmd/internal/agent/container_tunnel.go b/cmd/internal/container_tunnel.go similarity index 99% rename from cmd/internal/agent/container_tunnel.go rename to cmd/internal/container_tunnel.go index 46d42fbd2..20f5d8c63 100644 --- a/cmd/internal/agent/container_tunnel.go +++ b/cmd/internal/container_tunnel.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "bytes" diff --git a/cmd/internal/agent/git_credentials.go b/cmd/internal/git_credentials.go similarity index 99% rename from cmd/internal/agent/git_credentials.go rename to cmd/internal/git_credentials.go index e77589f16..fafa6e0ee 100644 --- a/cmd/internal/agent/git_credentials.go +++ b/cmd/internal/git_credentials.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "bytes" diff --git a/cmd/internal/agent/git_ssh_signature.go b/cmd/internal/git_ssh_signature.go similarity index 99% rename from cmd/internal/agent/git_ssh_signature.go rename to cmd/internal/git_ssh_signature.go index aa7f06804..b0cd0df70 100644 --- a/cmd/internal/agent/git_ssh_signature.go +++ b/cmd/internal/git_ssh_signature.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "fmt" diff --git a/cmd/internal/agent/git_ssh_signature_helper.go b/cmd/internal/git_ssh_signature_helper.go similarity index 98% rename from cmd/internal/agent/git_ssh_signature_helper.go rename to cmd/internal/git_ssh_signature_helper.go index 759e2b7ae..6bbf2edc8 100644 --- a/cmd/internal/agent/git_ssh_signature_helper.go +++ b/cmd/internal/git_ssh_signature_helper.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "fmt" diff --git a/cmd/internal/agent/git_ssh_signature_test.go b/cmd/internal/git_ssh_signature_test.go similarity index 99% rename from cmd/internal/agent/git_ssh_signature_test.go rename to cmd/internal/git_ssh_signature_test.go index 6504c07e6..dbc2f563b 100644 --- a/cmd/internal/agent/git_ssh_signature_test.go +++ b/cmd/internal/git_ssh_signature_test.go @@ -1,4 +1,4 @@ -package agent +package cmdinternal import ( "testing" diff --git a/cmd/internal/helper.go b/cmd/internal/helper.go index 7ad9d77c0..eebee60d2 100644 --- a/cmd/internal/helper.go +++ b/cmd/internal/helper.go @@ -2,7 +2,6 @@ package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/devsy-org/devsy/cmd/internal/helperhttp" "github.com/devsy-org/devsy/cmd/internal/helperimage" "github.com/devsy-org/devsy/cmd/internal/helperjson" @@ -19,7 +18,7 @@ func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { Use: "helper", Short: "Devsy Utility Commands", PersistentPreRunE: func(cobraCmd *cobra.Command, args []string) error { - return agent.AgentPersistentPreRunE(cobraCmd, args, globalFlags) + return AgentPersistentPreRunE(cobraCmd, args, globalFlags) }, Hidden: true, } diff --git a/cmd/internal/internal.go b/cmd/internal/internal.go index 138d223f3..e31c2b579 100644 --- a/cmd/internal/internal.go +++ b/cmd/internal/internal.go @@ -2,7 +2,6 @@ package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agent" "github.com/spf13/cobra" ) @@ -15,7 +14,7 @@ func NewInternalCmd(globalFlags *flags.GlobalFlags) *cobra.Command { Short: "Internal plumbing commands (not for direct use)", Hidden: true, } - cmd.AddCommand(agent.NewAgentCmd(globalFlags)) + cmd.AddCommand(NewAgentCmd(globalFlags)) cmd.AddCommand(NewHelperCmd(globalFlags)) cmd.AddCommand(NewDaemonLocalCmd(globalFlags)) cmd.AddCommand(NewLogsDaemonCmd(globalFlags)) diff --git a/cmd/pro/check_update.go b/cmd/pro/check_update.go index faaaf75bd..848dda7c1 100644 --- a/cmd/pro/check_update.go +++ b/cmd/pro/check_update.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" - "github.com/devsy-org/devsy/cmd/internal/agent" + cmdinternal "github.com/devsy-org/devsy/cmd/internal" "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" "github.com/devsy-org/devsy/pkg/config" @@ -55,7 +55,7 @@ func NewCheckUpdateCmd(globalFlags *flags.GlobalFlags) *cobra.Command { root.Annotations = map[string]string{} } // Don't print debug message - root.Annotations[agent.AgentExecutedAnnotation] = "true" + root.Annotations[cmdinternal.AgentExecutedAnnotation] = "true" //nolint:goconst }, } diff --git a/cmd/pro/daemon/netcheck.go b/cmd/pro/daemon/netcheck.go index 36ff37dfa..6e308a8ec 100644 --- a/cmd/pro/daemon/netcheck.go +++ b/cmd/pro/daemon/netcheck.go @@ -5,7 +5,7 @@ import ( "fmt" "strconv" - "github.com/devsy-org/devsy/cmd/internal/agent" + cmdinternal "github.com/devsy-org/devsy/cmd/internal" "github.com/devsy-org/devsy/cmd/pro/completion" proflags "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" @@ -54,7 +54,7 @@ func NewNetcheckCmd(flags *proflags.GlobalFlags) *cobra.Command { root.Annotations = map[string]string{} } // Don't print debug message - root.Annotations[agent.AgentExecutedAnnotation] = "true" + root.Annotations[cmdinternal.AgentExecutedAnnotation] = "true" }, } diff --git a/cmd/pro/daemon/status.go b/cmd/pro/daemon/status.go index da15430a8..11641da13 100644 --- a/cmd/pro/daemon/status.go +++ b/cmd/pro/daemon/status.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" - "github.com/devsy-org/devsy/cmd/internal/agent" + cmdinternal "github.com/devsy-org/devsy/cmd/internal" "github.com/devsy-org/devsy/cmd/pro/completion" proflags "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" @@ -52,7 +52,7 @@ func NewStatusCmd(flags *proflags.GlobalFlags) *cobra.Command { root.Annotations = map[string]string{} } // Don't print debug message - root.Annotations[agent.AgentExecutedAnnotation] = "true" + root.Annotations[cmdinternal.AgentExecutedAnnotation] = "true" }, } diff --git a/cmd/pro/health.go b/cmd/pro/health.go index a236e0ca6..d669123c0 100644 --- a/cmd/pro/health.go +++ b/cmd/pro/health.go @@ -5,7 +5,7 @@ import ( "context" "fmt" - "github.com/devsy-org/devsy/cmd/internal/agent" + cmdinternal "github.com/devsy-org/devsy/cmd/internal" "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/proutil" "github.com/devsy-org/devsy/pkg/client/clientimplementation" @@ -57,7 +57,7 @@ func NewHealthCmd(globalFlags *flags.GlobalFlags) *cobra.Command { root.Annotations = map[string]string{} } // Don't print debug message - root.Annotations[agent.AgentExecutedAnnotation] = "true" + root.Annotations[cmdinternal.AgentExecutedAnnotation] = "true" }, } diff --git a/cmd/pro/provider/provider.go b/cmd/pro/provider/provider.go index f8d327068..d20241c33 100644 --- a/cmd/pro/provider/provider.go +++ b/cmd/pro/provider/provider.go @@ -3,7 +3,7 @@ package provider import ( "os" - "github.com/devsy-org/devsy/cmd/internal/agent" + cmdinternal "github.com/devsy-org/devsy/cmd/internal" "github.com/devsy-org/devsy/cmd/pro/flags" "github.com/devsy-org/devsy/cmd/pro/provider/create" "github.com/devsy-org/devsy/cmd/pro/provider/get" @@ -34,7 +34,7 @@ func NewProProviderCmd(globalFlags *flags.GlobalFlags) *cobra.Command { } // Disable debug hints if we execute pro commands from Devsy Desktop - // We're reusing the agent.AgentExecutedAnnotation for simplicity, could rename in the future + // We're reusing the cmdinternal.AgentExecutedAnnotation for simplicity, could rename in the future if os.Getenv(config.EnvUI) == config.BoolTrue { cmd.VisitParents(func(c *cobra.Command) { // find the root command @@ -42,7 +42,7 @@ func NewProProviderCmd(globalFlags *flags.GlobalFlags) *cobra.Command { if c.Annotations == nil { c.Annotations = map[string]string{} } - c.Annotations[agent.AgentExecutedAnnotation] = config.BoolTrue + c.Annotations[cmdinternal.AgentExecutedAnnotation] = config.BoolTrue } }) } From 7ce4f05dc97b8ccef1abf732ac9662771c0cdd2f Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 09:19:08 -0500 Subject: [PATCH 14/16] refactor(cli): consolidate internal command-tree wiring into internal.go --- cmd/internal/agent.go | 69 -------------------------- cmd/internal/helper.go | 44 ----------------- cmd/internal/internal.go | 101 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 113 deletions(-) delete mode 100644 cmd/internal/agent.go delete mode 100644 cmd/internal/helper.go diff --git a/cmd/internal/agent.go b/cmd/internal/agent.go deleted file mode 100644 index d308098c1..000000000 --- a/cmd/internal/agent.go +++ /dev/null @@ -1,69 +0,0 @@ -package cmdinternal - -import ( - "os" - - "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agentcontainer" - "github.com/devsy-org/devsy/cmd/internal/agentworkspace" - "github.com/devsy-org/devsy/pkg/config" - "github.com/devsy-org/devsy/pkg/envfile" - "github.com/devsy-org/devsy/pkg/log" - "github.com/spf13/cobra" -) - -var AgentExecutedAnnotation = "devsy.sh/agent-executed" - -// NewAgentCmd returns a new root command. -func NewAgentCmd(globalFlags *flags.GlobalFlags) *cobra.Command { - agentCmd := &cobra.Command{ - Use: "agent", - Short: "Devsy Agent", - PersistentPreRunE: func(cobraCmd *cobra.Command, args []string) error { - return AgentPersistentPreRunE(cobraCmd, args, globalFlags) - }, - Hidden: true, - } - - agentCmd.AddCommand(agentworkspace.NewWorkspaceCmd(globalFlags)) - agentCmd.AddCommand(agentcontainer.NewContainerCmd(globalFlags)) - agentCmd.AddCommand(NewDaemonCmd(globalFlags)) - agentCmd.AddCommand(NewContainerTunnelCmd(globalFlags)) - agentCmd.AddCommand(NewGitCredentialsCmd(globalFlags)) - agentCmd.AddCommand(NewGitSSHSignatureCmd(globalFlags)) - agentCmd.AddCommand(NewGitSSHSignatureHelperCmd(globalFlags)) - agentCmd.AddCommand(NewDockerCredentialsCmd(globalFlags)) - return agentCmd -} - -func AgentPersistentPreRunE( - cobraCmd *cobra.Command, - args []string, - globalFlags *flags.GlobalFlags, -) error { - // get top level parent - parent := cobraCmd - for parent.Parent() != nil { - parent = parent.Parent() - } - if parent.Annotations == nil { - parent.Annotations = map[string]string{} - } - parent.Annotations[AgentExecutedAnnotation] = "true" - - // Initialise the zap logger for the agent subprocess. - // stdout is the binary protocol channel, so all log output goes to stderr. - log.Init(log.Config{ - Quiet: globalFlags.Quiet, - Debug: globalFlags.Debug, - Format: "json", // Agent must use JSON: single-line output is captured by TunnelLogStreamer.lastLines - }) - - if globalFlags.DevsyHome != "" { - _ = os.Setenv(config.EnvHome, globalFlags.DevsyHome) - } - - // apply environment - envfile.Apply() - return nil -} diff --git a/cmd/internal/helper.go b/cmd/internal/helper.go deleted file mode 100644 index eebee60d2..000000000 --- a/cmd/internal/helper.go +++ /dev/null @@ -1,44 +0,0 @@ -package cmdinternal - -import ( - "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/helperhttp" - "github.com/devsy-org/devsy/cmd/internal/helperimage" - "github.com/devsy-org/devsy/cmd/internal/helperjson" - "github.com/devsy-org/devsy/cmd/internal/helperprovider" - "github.com/devsy-org/devsy/cmd/internal/helperssh" - "github.com/devsy-org/devsy/cmd/internal/helperstrings" - "github.com/devsy-org/devsy/cmd/internal/helperworkspaceinfo" - "github.com/spf13/cobra" -) - -// NewHelperCmd returns a new command. -func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { - helperCmd := &cobra.Command{ - Use: "helper", - Short: "Devsy Utility Commands", - PersistentPreRunE: func(cobraCmd *cobra.Command, args []string) error { - return AgentPersistentPreRunE(cobraCmd, args, globalFlags) - }, - Hidden: true, - } - - helperCmd.AddCommand(helperhttp.NewHTTPCmd(globalFlags)) - helperCmd.AddCommand(helperjson.NewJSONCmd(globalFlags)) - helperCmd.AddCommand(helperstrings.NewStringsCmd(globalFlags)) - helperCmd.AddCommand(helperssh.NewSSHServerCmd(globalFlags)) - helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) - helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) - helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceConfigCommand(globalFlags)) - helperCmd.AddCommand(helperprovider.NewGetProviderNameCmd(globalFlags)) - helperCmd.AddCommand(helperprovider.NewCheckProviderUpdateCmd(globalFlags)) - helperCmd.AddCommand(helperssh.NewSSHClientCmd()) - helperCmd.AddCommand(NewShellCmd()) - helperCmd.AddCommand(helperssh.NewSSHGitCloneCmd()) - helperCmd.AddCommand(NewFleetServerCmd(globalFlags)) - helperCmd.AddCommand(NewDockerCredentialsHelperCmd(globalFlags)) - helperCmd.AddCommand(helperimage.NewGetImageCmd(globalFlags)) - helperCmd.AddCommand(helperimage.NewGetImagePlatformsCmd(globalFlags)) - helperCmd.AddCommand(NewBrowserTunnelCmd(globalFlags)) - return helperCmd -} diff --git a/cmd/internal/internal.go b/cmd/internal/internal.go index e31c2b579..87835f766 100644 --- a/cmd/internal/internal.go +++ b/cmd/internal/internal.go @@ -1,10 +1,26 @@ package cmdinternal import ( + "os" + "github.com/devsy-org/devsy/cmd/flags" + "github.com/devsy-org/devsy/cmd/internal/agentcontainer" + "github.com/devsy-org/devsy/cmd/internal/agentworkspace" + "github.com/devsy-org/devsy/cmd/internal/helperhttp" + "github.com/devsy-org/devsy/cmd/internal/helperimage" + "github.com/devsy-org/devsy/cmd/internal/helperjson" + "github.com/devsy-org/devsy/cmd/internal/helperprovider" + "github.com/devsy-org/devsy/cmd/internal/helperssh" + "github.com/devsy-org/devsy/cmd/internal/helperstrings" + "github.com/devsy-org/devsy/cmd/internal/helperworkspaceinfo" + "github.com/devsy-org/devsy/pkg/config" + "github.com/devsy-org/devsy/pkg/envfile" + "github.com/devsy-org/devsy/pkg/log" "github.com/spf13/cobra" ) +var AgentExecutedAnnotation = "devsy.sh/agent-executed" + // NewInternalCmd is the hidden parent for plumbing commands invoked by other // processes (the daemon, the desktop app, container init scripts). // Subcommands here are not part of the user-facing CLI contract. @@ -22,3 +38,88 @@ func NewInternalCmd(globalFlags *flags.GlobalFlags) *cobra.Command { cmd.AddCommand(NewRunUserCommandsCmdAlias(globalFlags)) return cmd } + +// NewAgentCmd returns a new root command. +func NewAgentCmd(globalFlags *flags.GlobalFlags) *cobra.Command { + agentCmd := &cobra.Command{ + Use: "agent", + Short: "Devsy Agent", + PersistentPreRunE: func(cobraCmd *cobra.Command, args []string) error { + return AgentPersistentPreRunE(cobraCmd, args, globalFlags) + }, + Hidden: true, + } + + agentCmd.AddCommand(agentworkspace.NewWorkspaceCmd(globalFlags)) + agentCmd.AddCommand(agentcontainer.NewContainerCmd(globalFlags)) + agentCmd.AddCommand(NewDaemonCmd(globalFlags)) + agentCmd.AddCommand(NewContainerTunnelCmd(globalFlags)) + agentCmd.AddCommand(NewGitCredentialsCmd(globalFlags)) + agentCmd.AddCommand(NewGitSSHSignatureCmd(globalFlags)) + agentCmd.AddCommand(NewGitSSHSignatureHelperCmd(globalFlags)) + agentCmd.AddCommand(NewDockerCredentialsCmd(globalFlags)) + return agentCmd +} + +// NewHelperCmd returns a new command. +func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { + helperCmd := &cobra.Command{ + Use: "helper", + Short: "Devsy Utility Commands", + PersistentPreRunE: func(cobraCmd *cobra.Command, args []string) error { + return AgentPersistentPreRunE(cobraCmd, args, globalFlags) + }, + Hidden: true, + } + + helperCmd.AddCommand(helperhttp.NewHTTPCmd(globalFlags)) + helperCmd.AddCommand(helperjson.NewJSONCmd(globalFlags)) + helperCmd.AddCommand(helperstrings.NewStringsCmd(globalFlags)) + helperCmd.AddCommand(helperssh.NewSSHServerCmd(globalFlags)) + helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) + helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) + helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceConfigCommand(globalFlags)) + helperCmd.AddCommand(helperprovider.NewGetProviderNameCmd(globalFlags)) + helperCmd.AddCommand(helperprovider.NewCheckProviderUpdateCmd(globalFlags)) + helperCmd.AddCommand(helperssh.NewSSHClientCmd()) + helperCmd.AddCommand(NewShellCmd()) + helperCmd.AddCommand(helperssh.NewSSHGitCloneCmd()) + helperCmd.AddCommand(NewFleetServerCmd(globalFlags)) + helperCmd.AddCommand(NewDockerCredentialsHelperCmd(globalFlags)) + helperCmd.AddCommand(helperimage.NewGetImageCmd(globalFlags)) + helperCmd.AddCommand(helperimage.NewGetImagePlatformsCmd(globalFlags)) + helperCmd.AddCommand(NewBrowserTunnelCmd(globalFlags)) + return helperCmd +} + +func AgentPersistentPreRunE( + cobraCmd *cobra.Command, + args []string, + globalFlags *flags.GlobalFlags, +) error { + // get top level parent + parent := cobraCmd + for parent.Parent() != nil { + parent = parent.Parent() + } + if parent.Annotations == nil { + parent.Annotations = map[string]string{} + } + parent.Annotations[AgentExecutedAnnotation] = "true" + + // Initialise the zap logger for the agent subprocess. + // stdout is the binary protocol channel, so all log output goes to stderr. + log.Init(log.Config{ + Quiet: globalFlags.Quiet, + Debug: globalFlags.Debug, + Format: "json", // Agent must use JSON: single-line output is captured by TunnelLogStreamer.lastLines + }) + + if globalFlags.DevsyHome != "" { + _ = os.Setenv(config.EnvHome, globalFlags.DevsyHome) + } + + // apply environment + envfile.Apply() + return nil +} From b11fe7dfb4188a6bf2f6f6b74758d74575f3716e Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 10:07:18 -0500 Subject: [PATCH 15/16] refactor(cli): promote internal helper subcommands to direct children Remove the hidden `helper` parent command, promoting its 16 subcommands to direct children of `internal` (e.g. `internal helper ssh-server` -> `internal ssh-server`). Collapse the helper* sub-packages into the cmdinternal package, dropping the vestigial `helper` naming from files and import aliases now that the parent is gone. The agentPreRunE hook is attached per-command rather than on the `internal` parent so daemon-local/logs-daemon/run-user-commands keep inheriting the root command's PersistentPreRunE. git-ssh-signature-helper is preserved as a genuine distinct command. --- cmd/internal/agent.go | 66 +++++++++ cmd/internal/agentcontainer/ssh_server.go | 6 +- .../check_provider_update.go | 2 +- .../{fleet_helper.go => fleet_server.go} | 0 cmd/internal/{helperjson => }/get.go | 2 +- cmd/internal/{helperimage => }/get_image.go | 2 +- .../{helperimage => }/get_image_platforms.go | 2 +- .../{helperprovider => }/get_provider_name.go | 2 +- .../get_workspace_config.go | 2 +- .../get_workspace_name.go | 2 +- .../get_workspace_uid.go | 2 +- cmd/internal/git_ssh_signature.go | 50 +++++++ cmd/internal/git_ssh_signature_helper.go | 59 -------- cmd/internal/{helperhttp => }/http.go | 2 +- cmd/internal/internal.go | 132 ++++-------------- cmd/internal/{helperjson => }/json.go | 2 +- cmd/internal/{helperhttp => }/request.go | 2 +- cmd/internal/{helperssh => }/ssh_client.go | 2 +- cmd/internal/{helperssh => }/ssh_git_clone.go | 2 +- cmd/internal/{helperssh => }/ssh_server.go | 10 +- cmd/internal/{helperstrings => }/strings.go | 2 +- cmd/machine/ssh.go | 2 +- cmd/workspace/logs.go | 2 +- cmd/workspace/ssh.go | 1 - cmd/workspace/up/agent.go | 2 +- desktop/src/main/ipc.ts | 2 +- docs/uml/up_sequence.puml | 4 +- .../testdata/machineprovider/provider.yaml | 2 +- .../testdata/machineprovider2/provider.yaml | 2 +- .../testdata/machineprovider3/provider.yaml | 2 +- .../tunnel/testdata/tunnel/provider.yaml | 2 +- pkg/agent/agent.go | 2 +- pkg/agent/workspace.go | 2 +- pkg/devcontainer/setup.go | 2 +- pkg/ide/fleet/fleet.go | 2 +- pkg/ide/opener/browser_tunnel.go | 4 +- pkg/ide/opener/browser_tunnel_test.go | 5 +- pkg/shell/shell.go | 2 +- pkg/tunnel/container.go | 2 +- providers/docker/provider.yaml | 2 +- providers/kubernetes/provider.yaml | 2 +- providers/podman/provider.yaml | 2 +- 42 files changed, 190 insertions(+), 209 deletions(-) create mode 100644 cmd/internal/agent.go rename cmd/internal/{helperprovider => }/check_provider_update.go (99%) rename cmd/internal/{fleet_helper.go => fleet_server.go} (100%) rename cmd/internal/{helperjson => }/get.go (99%) rename cmd/internal/{helperimage => }/get_image.go (97%) rename cmd/internal/{helperimage => }/get_image_platforms.go (98%) rename cmd/internal/{helperprovider => }/get_provider_name.go (97%) rename cmd/internal/{helperworkspaceinfo => }/get_workspace_config.go (98%) rename cmd/internal/{helperworkspaceinfo => }/get_workspace_name.go (97%) rename cmd/internal/{helperworkspaceinfo => }/get_workspace_uid.go (96%) delete mode 100644 cmd/internal/git_ssh_signature_helper.go rename cmd/internal/{helperhttp => }/http.go (94%) rename cmd/internal/{helperjson => }/json.go (94%) rename cmd/internal/{helperhttp => }/request.go (99%) rename cmd/internal/{helperssh => }/ssh_client.go (99%) rename cmd/internal/{helperssh => }/ssh_git_clone.go (99%) rename cmd/internal/{helperssh => }/ssh_server.go (94%) rename cmd/internal/{helperstrings => }/strings.go (93%) diff --git a/cmd/internal/agent.go b/cmd/internal/agent.go new file mode 100644 index 000000000..28a805424 --- /dev/null +++ b/cmd/internal/agent.go @@ -0,0 +1,66 @@ +package cmdinternal + +import ( + "os" + + "github.com/devsy-org/devsy/cmd/flags" + "github.com/devsy-org/devsy/cmd/internal/agentcontainer" + "github.com/devsy-org/devsy/cmd/internal/agentworkspace" + "github.com/devsy-org/devsy/pkg/config" + "github.com/devsy-org/devsy/pkg/envfile" + "github.com/devsy-org/devsy/pkg/log" + "github.com/spf13/cobra" +) + +var AgentExecutedAnnotation = "devsy.sh/agent-executed" + +// NewAgentCmd is the hidden parent for commands that run inside a workspace or +// container, invoked by the daemon over the agent tunnel. +func NewAgentCmd(globalFlags *flags.GlobalFlags) *cobra.Command { + agentCmd := &cobra.Command{ + Use: "agent", + Short: "Devsy Agent", + PersistentPreRunE: agentPreRunE(globalFlags), + Hidden: true, + } + + agentCmd.AddCommand(agentworkspace.NewWorkspaceCmd(globalFlags)) + agentCmd.AddCommand(agentcontainer.NewContainerCmd(globalFlags)) + agentCmd.AddCommand(NewDaemonCmd(globalFlags)) + agentCmd.AddCommand(NewContainerTunnelCmd(globalFlags)) + agentCmd.AddCommand(NewGitCredentialsCmd(globalFlags)) + agentCmd.AddCommand(NewGitSSHSignatureCmd(globalFlags)) + agentCmd.AddCommand(NewGitSSHSignatureHelperCmd(globalFlags)) + agentCmd.AddCommand(NewDockerCredentialsCmd(globalFlags)) + return agentCmd +} + +// agentPreRunE builds the PersistentPreRunE shared by the agent command and the +// utility plumbing commands. Logging is forced to JSON because the agent +// subprocess uses stdout as a binary protocol channel, so log output must stay +// on stderr as single-line JSON captured by TunnelLogStreamer.lastLines. +func agentPreRunE(globalFlags *flags.GlobalFlags) func(*cobra.Command, []string) error { + return func(cobraCmd *cobra.Command, _ []string) error { + root := cobraCmd + for root.Parent() != nil { + root = root.Parent() + } + if root.Annotations == nil { + root.Annotations = map[string]string{} + } + root.Annotations[AgentExecutedAnnotation] = "true" + + log.Init(log.Config{ + Quiet: globalFlags.Quiet, + Debug: globalFlags.Debug, + Format: "json", + }) + + if globalFlags.DevsyHome != "" { + _ = os.Setenv(config.EnvHome, globalFlags.DevsyHome) + } + + envfile.Apply() + return nil + } +} diff --git a/cmd/internal/agentcontainer/ssh_server.go b/cmd/internal/agentcontainer/ssh_server.go index 1987d2ed3..298117ab6 100644 --- a/cmd/internal/agentcontainer/ssh_server.go +++ b/cmd/internal/agentcontainer/ssh_server.go @@ -5,7 +5,7 @@ import ( "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/pkg/log" - helperssh "github.com/devsy-org/devsy/pkg/ssh/server" + sshserver "github.com/devsy-org/devsy/pkg/ssh/server" "github.com/devsy-org/devsy/pkg/ssh/server/port" "github.com/spf13/cobra" ) @@ -32,7 +32,7 @@ func NewSSHServerCmd(flags *flags.GlobalFlags) *cobra.Command { } sshCmd.Flags(). - StringVar(&cmd.Address, "address", fmt.Sprintf("127.0.0.1:%d", helperssh.DefaultUserPort), "Address to listen to") + StringVar(&cmd.Address, "address", fmt.Sprintf("127.0.0.1:%d", sshserver.DefaultUserPort), "Address to listen to") sshCmd.Flags(). StringVar(&cmd.RemoteUser, "remote-user", "", "The remote user for this workspace") sshCmd.Flags(). @@ -42,7 +42,7 @@ func NewSSHServerCmd(flags *flags.GlobalFlags) *cobra.Command { // Run runs the command logic. func (cmd *SSHServerCmd) Run(_ *cobra.Command, _ []string) error { - server, err := helperssh.NewContainerServer(cmd.Address, cmd.Workdir) + server, err := sshserver.NewContainerServer(cmd.Address, cmd.Workdir) if err != nil { return err } diff --git a/cmd/internal/helperprovider/check_provider_update.go b/cmd/internal/check_provider_update.go similarity index 99% rename from cmd/internal/helperprovider/check_provider_update.go rename to cmd/internal/check_provider_update.go index a1f5f8956..8a92841ee 100644 --- a/cmd/internal/helperprovider/check_provider_update.go +++ b/cmd/internal/check_provider_update.go @@ -1,4 +1,4 @@ -package helperprovider +package cmdinternal import ( "bytes" diff --git a/cmd/internal/fleet_helper.go b/cmd/internal/fleet_server.go similarity index 100% rename from cmd/internal/fleet_helper.go rename to cmd/internal/fleet_server.go diff --git a/cmd/internal/helperjson/get.go b/cmd/internal/get.go similarity index 99% rename from cmd/internal/helperjson/get.go rename to cmd/internal/get.go index 1367e0f2a..f988854d8 100644 --- a/cmd/internal/helperjson/get.go +++ b/cmd/internal/get.go @@ -1,4 +1,4 @@ -package helperjson +package cmdinternal import ( "context" diff --git a/cmd/internal/helperimage/get_image.go b/cmd/internal/get_image.go similarity index 97% rename from cmd/internal/helperimage/get_image.go rename to cmd/internal/get_image.go index b85e58ee9..e4580edd9 100644 --- a/cmd/internal/helperimage/get_image.go +++ b/cmd/internal/get_image.go @@ -1,4 +1,4 @@ -package helperimage +package cmdinternal import ( "context" diff --git a/cmd/internal/helperimage/get_image_platforms.go b/cmd/internal/get_image_platforms.go similarity index 98% rename from cmd/internal/helperimage/get_image_platforms.go rename to cmd/internal/get_image_platforms.go index aa2650635..96f4c4851 100644 --- a/cmd/internal/helperimage/get_image_platforms.go +++ b/cmd/internal/get_image_platforms.go @@ -1,4 +1,4 @@ -package helperimage +package cmdinternal import ( "context" diff --git a/cmd/internal/helperprovider/get_provider_name.go b/cmd/internal/get_provider_name.go similarity index 97% rename from cmd/internal/helperprovider/get_provider_name.go rename to cmd/internal/get_provider_name.go index 9a5a9788a..7006914b6 100644 --- a/cmd/internal/helperprovider/get_provider_name.go +++ b/cmd/internal/get_provider_name.go @@ -1,4 +1,4 @@ -package helperprovider +package cmdinternal import ( "bytes" diff --git a/cmd/internal/helperworkspaceinfo/get_workspace_config.go b/cmd/internal/get_workspace_config.go similarity index 98% rename from cmd/internal/helperworkspaceinfo/get_workspace_config.go rename to cmd/internal/get_workspace_config.go index 2fe442750..eb9875abe 100644 --- a/cmd/internal/helperworkspaceinfo/get_workspace_config.go +++ b/cmd/internal/get_workspace_config.go @@ -1,4 +1,4 @@ -package helperworkspaceinfo +package cmdinternal import ( "context" diff --git a/cmd/internal/helperworkspaceinfo/get_workspace_name.go b/cmd/internal/get_workspace_name.go similarity index 97% rename from cmd/internal/helperworkspaceinfo/get_workspace_name.go rename to cmd/internal/get_workspace_name.go index e9e89efd4..e8c6336e6 100644 --- a/cmd/internal/helperworkspaceinfo/get_workspace_name.go +++ b/cmd/internal/get_workspace_name.go @@ -1,4 +1,4 @@ -package helperworkspaceinfo +package cmdinternal import ( "context" diff --git a/cmd/internal/helperworkspaceinfo/get_workspace_uid.go b/cmd/internal/get_workspace_uid.go similarity index 96% rename from cmd/internal/helperworkspaceinfo/get_workspace_uid.go rename to cmd/internal/get_workspace_uid.go index 648869698..77ba08192 100644 --- a/cmd/internal/helperworkspaceinfo/get_workspace_uid.go +++ b/cmd/internal/get_workspace_uid.go @@ -1,4 +1,4 @@ -package helperworkspaceinfo +package cmdinternal import ( "context" diff --git a/cmd/internal/git_ssh_signature.go b/cmd/internal/git_ssh_signature.go index b0cd0df70..06b69f2dd 100644 --- a/cmd/internal/git_ssh_signature.go +++ b/cmd/internal/git_ssh_signature.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "os/exec" + "os/user" "strings" "github.com/devsy-org/devsy/cmd/flags" @@ -136,3 +137,52 @@ func delegateToSSHKeygen(args []string) error { return c.Run() } + +type GitSSHSignatureHelperCmd struct { + *flags.GlobalFlags + + CertPath string +} + +// NewGitSSHSignatureHelperCmd creates a new git-ssh-signature-helper command +// This agent command can be used to inject the Git SSH signature helper. +// +// This command is used to set up the environment for Git SSH signature verification by configuring +// the necessary helper using a provided signing key path. +// +// Example usage: +// +// git-ssh-signature-helper [signing-key-path] +// +// The signing key path is a required argument for this command. It should be what equal to what you +// would have set as user.signingkey git config. +func NewGitSSHSignatureHelperCmd(flags *flags.GlobalFlags) *cobra.Command { + cmd := &GitSSHSignatureHelperCmd{ + GlobalFlags: flags, + } + + gitSshSignatureHelperCmd := &cobra.Command{ + Use: "git-ssh-signature-helper [signing-key-path]", + Short: "used to inject git ssh signature helper", + RunE: func(_ *cobra.Command, args []string) error { + usr, err := user.Current() + if err != nil { + return err + } + + if len(args) < 1 { + return fmt.Errorf("gitSigningKey argument is required") + } + cmd.CertPath = args[0] + + err = gitsshsigning.ConfigureHelper(usr.Username, cmd.CertPath) + if err != nil { + return err + } + + return nil + }, + } + + return gitSshSignatureHelperCmd +} diff --git a/cmd/internal/git_ssh_signature_helper.go b/cmd/internal/git_ssh_signature_helper.go deleted file mode 100644 index 6bbf2edc8..000000000 --- a/cmd/internal/git_ssh_signature_helper.go +++ /dev/null @@ -1,59 +0,0 @@ -package cmdinternal - -import ( - "fmt" - "os/user" - - "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/pkg/gitsshsigning" - "github.com/spf13/cobra" -) - -type GitSSHSignatureHelperCmd struct { - *flags.GlobalFlags - - CertPath string -} - -// NewGitSSHSignatureHelperCmd creates a new git-ssh-signature-helper command -// This agent command can be used to inject the Git SSH signature helper. -// -// This command is used to set up the environment for Git SSH signature verification by configuring -// the necessary helper using a provided signing key path. -// -// Example usage: -// -// git-ssh-signature-helper [signing-key-path] -// -// The signing key path is a required argument for this command. It should be what equal to what you -// would have set as user.signingkey git config. -func NewGitSSHSignatureHelperCmd(flags *flags.GlobalFlags) *cobra.Command { - cmd := &GitSSHSignatureHelperCmd{ - GlobalFlags: flags, - } - - gitSshSignatureHelperCmd := &cobra.Command{ - Use: "git-ssh-signature-helper [signing-key-path]", - Short: "used to inject git ssh signature helper", - RunE: func(_ *cobra.Command, args []string) error { - usr, err := user.Current() - if err != nil { - return err - } - - if len(args) < 1 { - return fmt.Errorf("gitSigningKey argument is required") - } - cmd.CertPath = args[0] - - err = gitsshsigning.ConfigureHelper(usr.Username, cmd.CertPath) - if err != nil { - return err - } - - return nil - }, - } - - return gitSshSignatureHelperCmd -} diff --git a/cmd/internal/helperhttp/http.go b/cmd/internal/http.go similarity index 94% rename from cmd/internal/helperhttp/http.go rename to cmd/internal/http.go index 61394cace..ca0e3a5d4 100644 --- a/cmd/internal/helperhttp/http.go +++ b/cmd/internal/http.go @@ -1,4 +1,4 @@ -package helperhttp +package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/internal/internal.go b/cmd/internal/internal.go index 87835f766..08c95187a 100644 --- a/cmd/internal/internal.go +++ b/cmd/internal/internal.go @@ -1,125 +1,51 @@ package cmdinternal import ( - "os" - "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/cmd/internal/agentcontainer" - "github.com/devsy-org/devsy/cmd/internal/agentworkspace" - "github.com/devsy-org/devsy/cmd/internal/helperhttp" - "github.com/devsy-org/devsy/cmd/internal/helperimage" - "github.com/devsy-org/devsy/cmd/internal/helperjson" - "github.com/devsy-org/devsy/cmd/internal/helperprovider" - "github.com/devsy-org/devsy/cmd/internal/helperssh" - "github.com/devsy-org/devsy/cmd/internal/helperstrings" - "github.com/devsy-org/devsy/cmd/internal/helperworkspaceinfo" - "github.com/devsy-org/devsy/pkg/config" - "github.com/devsy-org/devsy/pkg/envfile" - "github.com/devsy-org/devsy/pkg/log" "github.com/spf13/cobra" ) -var AgentExecutedAnnotation = "devsy.sh/agent-executed" - // NewInternalCmd is the hidden parent for plumbing commands invoked by other -// processes (the daemon, the desktop app, container init scripts). -// Subcommands here are not part of the user-facing CLI contract. +// processes (the daemon, the desktop app, container init scripts), not part of +// the user-facing CLI contract. func NewInternalCmd(globalFlags *flags.GlobalFlags) *cobra.Command { cmd := &cobra.Command{ Use: "internal", - Short: "Internal plumbing commands (not for direct use)", + Short: "internal commands", Hidden: true, } cmd.AddCommand(NewAgentCmd(globalFlags)) - cmd.AddCommand(NewHelperCmd(globalFlags)) cmd.AddCommand(NewDaemonLocalCmd(globalFlags)) cmd.AddCommand(NewLogsDaemonCmd(globalFlags)) cmd.AddCommand(NewRunUserCommandsCmd(globalFlags)) cmd.AddCommand(NewRunUserCommandsCmdAlias(globalFlags)) - return cmd -} - -// NewAgentCmd returns a new root command. -func NewAgentCmd(globalFlags *flags.GlobalFlags) *cobra.Command { - agentCmd := &cobra.Command{ - Use: "agent", - Short: "Devsy Agent", - PersistentPreRunE: func(cobraCmd *cobra.Command, args []string) error { - return AgentPersistentPreRunE(cobraCmd, args, globalFlags) - }, - Hidden: true, - } - agentCmd.AddCommand(agentworkspace.NewWorkspaceCmd(globalFlags)) - agentCmd.AddCommand(agentcontainer.NewContainerCmd(globalFlags)) - agentCmd.AddCommand(NewDaemonCmd(globalFlags)) - agentCmd.AddCommand(NewContainerTunnelCmd(globalFlags)) - agentCmd.AddCommand(NewGitCredentialsCmd(globalFlags)) - agentCmd.AddCommand(NewGitSSHSignatureCmd(globalFlags)) - agentCmd.AddCommand(NewGitSSHSignatureHelperCmd(globalFlags)) - agentCmd.AddCommand(NewDockerCredentialsCmd(globalFlags)) - return agentCmd -} - -// NewHelperCmd returns a new command. -func NewHelperCmd(globalFlags *flags.GlobalFlags) *cobra.Command { - helperCmd := &cobra.Command{ - Use: "helper", - Short: "Devsy Utility Commands", - PersistentPreRunE: func(cobraCmd *cobra.Command, args []string) error { - return AgentPersistentPreRunE(cobraCmd, args, globalFlags) - }, - Hidden: true, + // Utility plumbing commands. The agentPreRunE hook is attached per-command + // (not on the `internal` parent) so the daemon-local/logs-daemon/ + // run-user-commands children keep inheriting the root command's + // PersistentPreRunE instead. + preRun := agentPreRunE(globalFlags) + withPreRun := func(c *cobra.Command) *cobra.Command { + c.PersistentPreRunE = preRun + return c } + cmd.AddCommand(withPreRun(NewHTTPCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewJSONCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewStringsCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewSSHServerCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewGetWorkspaceNameCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewGetWorkspaceUIDCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewGetWorkspaceConfigCommand(globalFlags))) + cmd.AddCommand(withPreRun(NewGetProviderNameCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewCheckProviderUpdateCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewSSHClientCmd())) + cmd.AddCommand(withPreRun(NewShellCmd())) + cmd.AddCommand(withPreRun(NewSSHGitCloneCmd())) + cmd.AddCommand(withPreRun(NewFleetServerCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewDockerCredentialsHelperCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewGetImageCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewGetImagePlatformsCmd(globalFlags))) + cmd.AddCommand(withPreRun(NewBrowserTunnelCmd(globalFlags))) - helperCmd.AddCommand(helperhttp.NewHTTPCmd(globalFlags)) - helperCmd.AddCommand(helperjson.NewJSONCmd(globalFlags)) - helperCmd.AddCommand(helperstrings.NewStringsCmd(globalFlags)) - helperCmd.AddCommand(helperssh.NewSSHServerCmd(globalFlags)) - helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceNameCmd(globalFlags)) - helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceUIDCmd(globalFlags)) - helperCmd.AddCommand(helperworkspaceinfo.NewGetWorkspaceConfigCommand(globalFlags)) - helperCmd.AddCommand(helperprovider.NewGetProviderNameCmd(globalFlags)) - helperCmd.AddCommand(helperprovider.NewCheckProviderUpdateCmd(globalFlags)) - helperCmd.AddCommand(helperssh.NewSSHClientCmd()) - helperCmd.AddCommand(NewShellCmd()) - helperCmd.AddCommand(helperssh.NewSSHGitCloneCmd()) - helperCmd.AddCommand(NewFleetServerCmd(globalFlags)) - helperCmd.AddCommand(NewDockerCredentialsHelperCmd(globalFlags)) - helperCmd.AddCommand(helperimage.NewGetImageCmd(globalFlags)) - helperCmd.AddCommand(helperimage.NewGetImagePlatformsCmd(globalFlags)) - helperCmd.AddCommand(NewBrowserTunnelCmd(globalFlags)) - return helperCmd -} - -func AgentPersistentPreRunE( - cobraCmd *cobra.Command, - args []string, - globalFlags *flags.GlobalFlags, -) error { - // get top level parent - parent := cobraCmd - for parent.Parent() != nil { - parent = parent.Parent() - } - if parent.Annotations == nil { - parent.Annotations = map[string]string{} - } - parent.Annotations[AgentExecutedAnnotation] = "true" - - // Initialise the zap logger for the agent subprocess. - // stdout is the binary protocol channel, so all log output goes to stderr. - log.Init(log.Config{ - Quiet: globalFlags.Quiet, - Debug: globalFlags.Debug, - Format: "json", // Agent must use JSON: single-line output is captured by TunnelLogStreamer.lastLines - }) - - if globalFlags.DevsyHome != "" { - _ = os.Setenv(config.EnvHome, globalFlags.DevsyHome) - } - - // apply environment - envfile.Apply() - return nil + return cmd } diff --git a/cmd/internal/helperjson/json.go b/cmd/internal/json.go similarity index 94% rename from cmd/internal/helperjson/json.go rename to cmd/internal/json.go index 5f530ed26..f15bec7ee 100644 --- a/cmd/internal/helperjson/json.go +++ b/cmd/internal/json.go @@ -1,4 +1,4 @@ -package helperjson +package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/internal/helperhttp/request.go b/cmd/internal/request.go similarity index 99% rename from cmd/internal/helperhttp/request.go rename to cmd/internal/request.go index 27f56bdce..ee5cc72ec 100644 --- a/cmd/internal/helperhttp/request.go +++ b/cmd/internal/request.go @@ -1,4 +1,4 @@ -package helperhttp +package cmdinternal import ( "context" diff --git a/cmd/internal/helperssh/ssh_client.go b/cmd/internal/ssh_client.go similarity index 99% rename from cmd/internal/helperssh/ssh_client.go rename to cmd/internal/ssh_client.go index 9e5e4300e..601f09b14 100644 --- a/cmd/internal/helperssh/ssh_client.go +++ b/cmd/internal/ssh_client.go @@ -1,4 +1,4 @@ -package helperssh +package cmdinternal import ( "context" diff --git a/cmd/internal/helperssh/ssh_git_clone.go b/cmd/internal/ssh_git_clone.go similarity index 99% rename from cmd/internal/helperssh/ssh_git_clone.go rename to cmd/internal/ssh_git_clone.go index 09d12c479..0d14156e0 100644 --- a/cmd/internal/helperssh/ssh_git_clone.go +++ b/cmd/internal/ssh_git_clone.go @@ -1,4 +1,4 @@ -package helperssh +package cmdinternal import ( "context" diff --git a/cmd/internal/helperssh/ssh_server.go b/cmd/internal/ssh_server.go similarity index 94% rename from cmd/internal/helperssh/ssh_server.go rename to cmd/internal/ssh_server.go index 718cc4434..5483ad7f7 100644 --- a/cmd/internal/helperssh/ssh_server.go +++ b/cmd/internal/ssh_server.go @@ -1,4 +1,4 @@ -package helperssh +package cmdinternal import ( "encoding/base64" @@ -9,7 +9,7 @@ import ( "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/pkg/agent" "github.com/devsy-org/devsy/pkg/log" - helperssh "github.com/devsy-org/devsy/pkg/ssh/server" + sshserver "github.com/devsy-org/devsy/pkg/ssh/server" "github.com/devsy-org/devsy/pkg/ssh/server/port" "github.com/devsy-org/devsy/pkg/stdio" "github.com/devsy-org/devsy/pkg/token" @@ -42,7 +42,7 @@ func NewSSHServerCmd(flags *flags.GlobalFlags) *cobra.Command { } sshCmd.Flags(). - StringVar(&cmd.Address, "address", fmt.Sprintf("0.0.0.0:%d", helperssh.DefaultPort), "Address to listen to") + StringVar(&cmd.Address, "address", fmt.Sprintf("0.0.0.0:%d", sshserver.DefaultPort), "Address to listen to") sshCmd.Flags(). BoolVar(&cmd.Stdio, "stdio", false, "Will listen on stdout and stdin instead of an address") sshCmd.Flags(). @@ -103,10 +103,10 @@ func (cmd *SSHServerCmd) Run(_ *cobra.Command, _ []string) error { // SSH cleanup could run. Liveness is decided via a per-directory flock // the owning process holds for its lifetime; the kernel releases the // flock on any process exit (including SIGKILL). - helperssh.SweepStaleAgentSockets() + sshserver.SweepStaleAgentSockets() // start the server - server, err := helperssh.NewServer( + server, err := sshserver.NewServer( cmd.Address, hostKey, keys, diff --git a/cmd/internal/helperstrings/strings.go b/cmd/internal/strings.go similarity index 93% rename from cmd/internal/helperstrings/strings.go rename to cmd/internal/strings.go index 0a03fac73..951615a05 100644 --- a/cmd/internal/helperstrings/strings.go +++ b/cmd/internal/strings.go @@ -1,4 +1,4 @@ -package helperstrings +package cmdinternal import ( "github.com/devsy-org/devsy/cmd/flags" diff --git a/cmd/machine/ssh.go b/cmd/machine/ssh.go index 3d6c9bf05..29a9b9e23 100644 --- a/cmd/machine/ssh.go +++ b/cmd/machine/ssh.go @@ -141,7 +141,7 @@ func (cmd *SSHCmd) Run(ctx context.Context, args []string) error { }, Exec: func(ctx context.Context, stdin io.Reader, stdout io.Writer, stderr io.Writer) error { command := fmt.Sprintf( - "'%s' internal helper ssh-server --stdio", + "'%s' internal ssh-server --stdio", machineClient.AgentPath(), ) if cmd.Debug { diff --git a/cmd/workspace/logs.go b/cmd/workspace/logs.go index 3b37fba17..09a2f7462 100644 --- a/cmd/workspace/logs.go +++ b/cmd/workspace/logs.go @@ -72,7 +72,7 @@ func (cmd *LogsCmd) Run(ctx context.Context, args []string) error { return fmt.Errorf("this command is not supported for proxy providers") } - sshServerCmd := fmt.Sprintf("'%s' internal helper ssh-server --stdio", client.AgentPath()) + sshServerCmd := fmt.Sprintf("'%s' internal ssh-server --stdio", client.AgentPath()) if log.DebugEnabled() { sshServerCmd += " --debug" } diff --git a/cmd/workspace/ssh.go b/cmd/workspace/ssh.go index 6ba38fb9b..9f310a94b 100644 --- a/cmd/workspace/ssh.go +++ b/cmd/workspace/ssh.go @@ -545,7 +545,6 @@ func (cmd *SSHCmd) startTunnel( commandArgs := []string{ agent.ContainerDevsyHelperLocation, "internal", - "helper", "ssh-server", "--track-activity", "--stdio", diff --git a/cmd/workspace/up/agent.go b/cmd/workspace/up/agent.go index c8a1dd035..e94d157c3 100644 --- a/cmd/workspace/up/agent.go +++ b/cmd/workspace/up/agent.go @@ -197,7 +197,7 @@ func (cmd *UpCmd) devsyUpMachineSSH( return nil, fmt.Errorf("get agent info: %w", err) } - sshTunnelCmd := fmt.Sprintf("'%s' internal helper ssh-server --stdio", client.AgentPath()) + sshTunnelCmd := fmt.Sprintf("'%s' internal ssh-server --stdio", client.AgentPath()) if log.DebugEnabled() { sshTunnelCmd += " --debug" //nolint:goconst } diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index 0bcac6992..178e5194d 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -1022,7 +1022,7 @@ export function registerIpcHandlers(deps: IpcDependencies): { "image_inspect_platforms", async (_event, args: { ref: string }) => { const result = await cli.run<{ platforms: string[] }>([ - "helper", + "internal", "get-image-platforms", args.ref, ]) diff --git a/docs/uml/up_sequence.puml b/docs/uml/up_sequence.puml index 90b4548f4..a7082fa24 100644 --- a/docs/uml/up_sequence.puml +++ b/docs/uml/up_sequence.puml @@ -35,7 +35,7 @@ alt image not already available deactivate Agent end -Devsy -> Agent: devsy helper ssh-server --stdio +Devsy -> Agent: devsy internal ssh-server --stdio activate Agent Devsy -> Agent: devsy agent daemon Devsy -> Agent: devsy agent workspace up --workspace-info @@ -43,7 +43,7 @@ Devsy -> Agent: devsy agent workspace up --workspace-info Agent -> ContainerRuntime: run dev container ContainerRuntime --> Agent: container id -Agent -> ContainerAgent: devsy helper ssh-server --stdio +Agent -> ContainerAgent: devsy internal ssh-server --stdio activate ContainerAgent Agent -> ContainerAgent: devsy agent container setup diff --git a/e2e/tests/machineprovider/testdata/machineprovider/provider.yaml b/e2e/tests/machineprovider/testdata/machineprovider/provider.yaml index 59d72eb4e..3fba813a5 100644 --- a/e2e/tests/machineprovider/testdata/machineprovider/provider.yaml +++ b/e2e/tests/machineprovider/testdata/machineprovider/provider.yaml @@ -31,4 +31,4 @@ exec: cat ${LOCATION}/${MACHINE_ID}/status.txt 2>/dev/null || echo "NOTFOUND" command: |- - "${DEVSY}" internal helper sh -c "${COMMAND}" + "${DEVSY}" internal sh -c "${COMMAND}" diff --git a/e2e/tests/machineprovider/testdata/machineprovider2/provider.yaml b/e2e/tests/machineprovider/testdata/machineprovider2/provider.yaml index 7da1205a0..2e0c50805 100644 --- a/e2e/tests/machineprovider/testdata/machineprovider2/provider.yaml +++ b/e2e/tests/machineprovider/testdata/machineprovider2/provider.yaml @@ -24,7 +24,7 @@ exec: docker start devsy-${MACHINE_ID} sleep 5 status: |- - STATUS=$(docker inspect devsy-${MACHINE_ID} 2>/dev/null | ${DEVSY} internal helper json get "[0].State.Status" || true) + STATUS=$(docker inspect devsy-${MACHINE_ID} 2>/dev/null | ${DEVSY} internal json get "[0].State.Status" || true) if [ -z $STATUS ]; then echo "NOTFOUND" else diff --git a/e2e/tests/machineprovider/testdata/machineprovider3/provider.yaml b/e2e/tests/machineprovider/testdata/machineprovider3/provider.yaml index c918c1a39..1b14a88b7 100644 --- a/e2e/tests/machineprovider/testdata/machineprovider3/provider.yaml +++ b/e2e/tests/machineprovider/testdata/machineprovider3/provider.yaml @@ -24,7 +24,7 @@ exec: docker start devsy-${MACHINE_ID} sleep 5 status: |- - STATUS=$(docker inspect devsy-${MACHINE_ID} 2>/dev/null | ${DEVSY} internal helper json get "[0].State.Status" || true) + STATUS=$(docker inspect devsy-${MACHINE_ID} 2>/dev/null | ${DEVSY} internal json get "[0].State.Status" || true) if [ -z $STATUS ]; then echo "NOTFOUND" else diff --git a/e2e/tests/tunnel/testdata/tunnel/provider.yaml b/e2e/tests/tunnel/testdata/tunnel/provider.yaml index c8cf5a163..ba2b194eb 100644 --- a/e2e/tests/tunnel/testdata/tunnel/provider.yaml +++ b/e2e/tests/tunnel/testdata/tunnel/provider.yaml @@ -24,7 +24,7 @@ exec: docker start devsy-${MACHINE_ID} sleep 5 status: |- - STATUS=$(docker inspect devsy-${MACHINE_ID} 2>/dev/null | ${DEVSY} internal helper json get "[0].State.Status" || true) + STATUS=$(docker inspect devsy-${MACHINE_ID} 2>/dev/null | ${DEVSY} internal json get "[0].State.Status" || true) if [ -z $STATUS ]; then echo "NOTFOUND" else diff --git a/pkg/agent/agent.go b/pkg/agent/agent.go index e55201e4a..6f5263417 100644 --- a/pkg/agent/agent.go +++ b/pkg/agent/agent.go @@ -500,7 +500,7 @@ func Tunnel( } // build command - command := fmt.Sprintf("'%s' internal helper ssh-server --stdio", ContainerDevsyHelperLocation) + command := fmt.Sprintf("'%s' internal ssh-server --stdio", ContainerDevsyHelperLocation) if log.DebugEnabled() { command += " --debug" } diff --git a/pkg/agent/workspace.go b/pkg/agent/workspace.go index 8984bf14a..630265792 100644 --- a/pkg/agent/workspace.go +++ b/pkg/agent/workspace.go @@ -602,7 +602,7 @@ func setupSSHKey(keys []string, agentPath string) ([]string, func(), error) { } env := []string{"GIT_TERMINAL_PROMPT=0"} - gitSSHCmd := []string{agentPath, "internal", "helper", "ssh-git-clone"} + gitSSHCmd := []string{agentPath, "internal", "ssh-git-clone"} for _, keyFile := range keyFiles { gitSSHCmd = append(gitSSHCmd, "--key-file="+keyFile) } diff --git a/pkg/devcontainer/setup.go b/pkg/devcontainer/setup.go index 571f8033d..f388514a9 100644 --- a/pkg/devcontainer/setup.go +++ b/pkg/devcontainer/setup.go @@ -376,7 +376,7 @@ func (r *runner) executeSetup( func (r *runner) buildSSHTunnelCommand() string { args := []string{ shellescape.Quote(agent.ContainerDevsyHelperLocation), - "internal", "helper", "ssh-server", "--stdio", + "internal", "ssh-server", "--stdio", } if ide.ReusesAuthSock(r.WorkspaceConfig.Workspace.IDE.Name) { diff --git a/pkg/ide/fleet/fleet.go b/pkg/ide/fleet/fleet.go index 8759a5a42..950031952 100644 --- a/pkg/ide/fleet/fleet.go +++ b/pkg/ide/fleet/fleet.go @@ -212,7 +212,7 @@ func (o *FleetServer) startMonitor() error { return command.StartBackgroundOnce("fleet-monitor", func() (*exec.Cmd, error) { log.Infof("starting fleet monitor in background") - runCommand := fmt.Sprintf("%s internal helper fleet-server --workspaceid %s", self, "test") + runCommand := fmt.Sprintf("%s internal fleet-server --workspaceid %s", self, "test") args := []string{} if o.userName != "" { args = append(args, "su", o.userName, "-c", runCommand) diff --git a/pkg/ide/opener/browser_tunnel.go b/pkg/ide/opener/browser_tunnel.go index 2daafcd1f..c470aa782 100644 --- a/pkg/ide/opener/browser_tunnel.go +++ b/pkg/ide/opener/browser_tunnel.go @@ -160,7 +160,7 @@ type browserIDEInvocation struct { OpenBrowser bool // whether to launch a host browser pointing at TargetURL } -// startDetachedBrowserTunnel spawns `devsy internal helper browser-tunnel ...` as a +// startDetachedBrowserTunnel spawns `devsy internal browser-tunnel ...` as a // detached background process so the CLI can return to the prompt while the // tunnel remains running. // @@ -373,7 +373,7 @@ func buildHelperArgs( openBrowser bool, ) []string { args := []string{ - "internal", "helper", "browser-tunnel", + "internal", "browser-tunnel", "--context", contextName, "--workspace", workspaceID, "--target-url", tunnelParams.TargetURL, diff --git a/pkg/ide/opener/browser_tunnel_test.go b/pkg/ide/opener/browser_tunnel_test.go index 6b6b0d937..46c86c6b6 100644 --- a/pkg/ide/opener/browser_tunnel_test.go +++ b/pkg/ide/opener/browser_tunnel_test.go @@ -38,9 +38,8 @@ func TestBuildHelperArgs_Basic(t *testing.T) { GitSSHSigningKey: "", }, false) - if len(args) < 3 || args[0] != "internal" || args[1] != "helper" || - args[2] != "browser-tunnel" { - t.Fatalf("expected args to start with [internal helper browser-tunnel], got %v", args) + if len(args) < 2 || args[0] != "internal" || args[1] != "browser-tunnel" { + t.Fatalf("expected args to start with [internal browser-tunnel], got %v", args) } checkPairs := []struct { diff --git a/pkg/shell/shell.go b/pkg/shell/shell.go index b0b7ddef4..6c81071e1 100644 --- a/pkg/shell/shell.go +++ b/pkg/shell/shell.go @@ -149,7 +149,7 @@ func GetShell(userName string) ([]string, error) { return nil, err } - return []string{executable, "internal", "helper", "sh"}, nil + return []string{executable, "internal", "sh"}, nil } func getUserShell(userName string) (string, error) { diff --git a/pkg/tunnel/container.go b/pkg/tunnel/container.go index eba48af28..65a0d39d1 100644 --- a/pkg/tunnel/container.go +++ b/pkg/tunnel/container.go @@ -95,7 +95,7 @@ func (c *ContainerTunnel) runHostTunnel( defer func() { _ = writer.Close() }() defer log.Debugf("Tunnel to host closed") - command := fmt.Sprintf("'%s' internal helper ssh-server --stdio", c.client.AgentPath()) + command := fmt.Sprintf("'%s' internal ssh-server --stdio", c.client.AgentPath()) if log.DebugEnabled() { command += " --debug" } diff --git a/providers/docker/provider.yaml b/providers/docker/provider.yaml index fc6d1d267..90037881a 100644 --- a/providers/docker/provider.yaml +++ b/providers/docker/provider.yaml @@ -34,4 +34,4 @@ agent: DOCKER_HOST: ${DOCKER_HOST} exec: command: |- - "${DEVSY}" internal helper sh -c "${COMMAND}" + "${DEVSY}" internal sh -c "${COMMAND}" diff --git a/providers/kubernetes/provider.yaml b/providers/kubernetes/provider.yaml index ddad09cf3..be120bd83 100644 --- a/providers/kubernetes/provider.yaml +++ b/providers/kubernetes/provider.yaml @@ -131,4 +131,4 @@ agent: strictSecurity: ${STRICT_SECURITY} exec: command: |- - "${DEVSY}" internal helper sh -c "${COMMAND}" + "${DEVSY}" internal sh -c "${COMMAND}" diff --git a/providers/podman/provider.yaml b/providers/podman/provider.yaml index a39f290b9..f8533ffaa 100644 --- a/providers/podman/provider.yaml +++ b/providers/podman/provider.yaml @@ -30,4 +30,4 @@ agent: DOCKER_HOST: ${PODMAN_HOST} exec: command: |- - "${DEVSY}" internal helper sh -c "${COMMAND}" + "${DEVSY}" internal sh -c "${COMMAND}" From 2b99adc8c3704861ba9ab8b63f150141ef6417e1 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 6 Jun 2026 10:12:56 -0500 Subject: [PATCH 16/16] fix(lint): silence goconst on health.go agent-executed annotation Refactoring the annotation reference (agent -> cmdinternal) made the line new to goconst's diff-scoped check, which flags the third "true" literal in the cmd/pro package. Match the existing //nolint:goconst convention already used in check_update.go. --- cmd/pro/health.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/pro/health.go b/cmd/pro/health.go index d669123c0..7a1899aa0 100644 --- a/cmd/pro/health.go +++ b/cmd/pro/health.go @@ -57,7 +57,7 @@ func NewHealthCmd(globalFlags *flags.GlobalFlags) *cobra.Command { root.Annotations = map[string]string{} } // Don't print debug message - root.Annotations[cmdinternal.AgentExecutedAnnotation] = "true" + root.Annotations[cmdinternal.AgentExecutedAnnotation] = "true" //nolint:goconst }, }