Allow running multiple daemon instances against different servers (e.g. production and local dev) simultaneously. Each profile gets isolated config, PID file, log file, health port, and workspaces root. Usage: multica login --profile dev --server-url http://localhost:8080 multica daemon start --profile dev Default profile (no --profile flag) behavior is unchanged. Closes MUL-42
88 lines
2 KiB
Go
88 lines
2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/multica-ai/multica/server/internal/cli"
|
|
)
|
|
|
|
var configCmd = &cobra.Command{
|
|
Use: "config",
|
|
Short: "Show CLI configuration",
|
|
RunE: runConfigShow,
|
|
}
|
|
|
|
var configShowCmd = &cobra.Command{
|
|
Use: "show",
|
|
Short: "Show current CLI configuration",
|
|
RunE: runConfigShow,
|
|
}
|
|
|
|
var configSetCmd = &cobra.Command{
|
|
Use: "set <key> <value>",
|
|
Short: "Set a CLI configuration value",
|
|
Long: "Supported keys: server_url, app_url, workspace_id",
|
|
Args: cobra.ExactArgs(2),
|
|
RunE: runConfigSet,
|
|
}
|
|
|
|
func init() {
|
|
configCmd.AddCommand(configShowCmd)
|
|
configCmd.AddCommand(configSetCmd)
|
|
}
|
|
|
|
func runConfigShow(cmd *cobra.Command, _ []string) error {
|
|
profile := resolveProfile(cmd)
|
|
cfg, err := cli.LoadCLIConfigForProfile(profile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
path, _ := cli.CLIConfigPathForProfile(profile)
|
|
fmt.Fprintf(os.Stdout, "Config file: %s\n", path)
|
|
if profile != "" {
|
|
fmt.Fprintf(os.Stdout, "Profile: %s\n", profile)
|
|
}
|
|
fmt.Fprintf(os.Stdout, "server_url: %s\n", valueOrDefault(cfg.ServerURL, "(not set)"))
|
|
fmt.Fprintf(os.Stdout, "app_url: %s\n", valueOrDefault(cfg.AppURL, "(not set)"))
|
|
fmt.Fprintf(os.Stdout, "workspace_id: %s\n", valueOrDefault(cfg.WorkspaceID, "(not set)"))
|
|
return nil
|
|
}
|
|
|
|
func runConfigSet(cmd *cobra.Command, args []string) error {
|
|
key, value := args[0], args[1]
|
|
|
|
profile := resolveProfile(cmd)
|
|
cfg, err := cli.LoadCLIConfigForProfile(profile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
switch key {
|
|
case "server_url":
|
|
cfg.ServerURL = value
|
|
case "app_url":
|
|
cfg.AppURL = value
|
|
case "workspace_id":
|
|
cfg.WorkspaceID = value
|
|
default:
|
|
return fmt.Errorf("unknown config key %q (supported: server_url, app_url, workspace_id)", key)
|
|
}
|
|
|
|
if err := cli.SaveCLIConfigForProfile(cfg, profile); err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Fprintf(os.Stderr, "Set %s = %s\n", key, value)
|
|
return nil
|
|
}
|
|
|
|
func valueOrDefault(v, fallback string) string {
|
|
if v == "" {
|
|
return fallback
|
|
}
|
|
return v
|
|
}
|