diff --git a/cmd/lk/agent.go b/cmd/lk/agent.go index 550fb0bd..cd750e84 100644 --- a/cmd/lk/agent.go +++ b/cmd/lk/agent.go @@ -103,6 +103,13 @@ var ( Hidden: true, } + agentsURLFlag = &cli.StringFlag{ + Name: "agents-url", + Usage: "Override cloud-agents URL (bypasses automatic URL resolution)", + Hidden: true, + Sources: cli.EnvVars("LK_AGENTS_URL"), + } + AgentCommands = []*cli.Command{ { Name: "agent", @@ -167,6 +174,7 @@ var ( silentFlag, regionFlag, skipSDKCheckFlag, + agentsURLFlag, }, // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator, // we disable it entirely here and require multiple --secrets flags to be used. @@ -186,6 +194,7 @@ var ( Required: false, Value: false, }, + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -196,6 +205,7 @@ var ( Action: createAgentConfig, Flags: []cli.Flag{ idFlag(false), + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -211,6 +221,7 @@ var ( silentFlag, ignoreEmptySecretsFlag, skipSDKCheckFlag, + agentsURLFlag, }, // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator, // we disable it entirely here and require multiple --secrets flags to be used. @@ -224,6 +235,7 @@ var ( Action: getAgentStatus, Flags: []cli.Flag{ idFlag(false), + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -237,6 +249,7 @@ var ( secretsFileFlag, secretsMountFlag, ignoreEmptySecretsFlag, + agentsURLFlag, }, // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator, // we disable it entirely here and require multiple --secrets flags to be used. @@ -250,6 +263,7 @@ var ( Action: restartAgent, Flags: []cli.Flag{ idFlag(false), + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -266,6 +280,7 @@ var ( Required: true, }, idFlag(false), + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -278,6 +293,7 @@ var ( Flags: []cli.Flag{ idFlag(false), logTypeFlag, + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -290,6 +306,7 @@ var ( Flags: []cli.Flag{ silentFlag, idFlag(false), + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -300,6 +317,7 @@ var ( Action: listAgentVersions, Flags: []cli.Flag{ idFlag(false), + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -310,6 +328,7 @@ var ( Before: createAgentClient, Flags: []cli.Flag{ idSliceFlag, + agentsURLFlag, }, }, { @@ -319,6 +338,7 @@ var ( Action: listAgentSecrets, Flags: []cli.Flag{ idFlag(false), + agentsURLFlag, }, ArgsUsage: "[working-dir]", }, @@ -339,6 +359,7 @@ var ( Required: false, Value: false, }, + agentsURLFlag, }, // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator, // we disable it entirely here and require multiple --secrets flags to be used. @@ -389,6 +410,16 @@ func createAgentClientWithOpts(ctx context.Context, cmd *cli.Command, opts ...lo } } + // Priority for agents URL: + // 1. --agents-url flag (explicit override) + // 2. agents_url from livekit.toml (configured for managed deployments) + // 3. Default URL derived from project (handled by SDK) + if agentsURL := cmd.String("agents-url"); agentsURL != "" { + os.Setenv("LK_AGENTS_URL", agentsURL) + } else if configExists && lkConfig.Agent != nil && lkConfig.Agent.AgentsURL != "" { + os.Setenv("LK_AGENTS_URL", lkConfig.Agent.AgentsURL) + } + agentsClient, err = cloudagents.New(cloudagents.WithProject(project.URL, project.APIKey, project.APISecret)) if err != nil { return ctx, err diff --git a/pkg/config/livekit.go b/pkg/config/livekit.go index b4da9ec9..0807c525 100644 --- a/pkg/config/livekit.go +++ b/pkg/config/livekit.go @@ -51,7 +51,8 @@ type LiveKitTOMLProjectConfig struct { } type LiveKitTOMLAgentConfig struct { - ID string `toml:"id"` + ID string `toml:"id"` + AgentsURL string `toml:"agents_url,omitempty"` } func NewLiveKitTOML(forSubdomain string) *LiveKitTOML {