| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package cli
- import (
- "fmt"
- "sort"
- "github.com/spf13/cobra"
- )
- func newConfigCmd(app *appState) *cobra.Command {
- cmd := &cobra.Command{
- Use: "config",
- Short: "Inspect or modify global config fields",
- }
- cmd.AddCommand(
- newConfigShowCmd(app),
- newConfigSetCmd(app),
- newConfigGetCmd(app),
- )
- return cmd
- }
- func newConfigShowCmd(app *appState) *cobra.Command {
- return &cobra.Command{
- Use: "show",
- Short: "Print the current config (env values masked)",
- RunE: func(cmd *cobra.Command, args []string) error {
- fmt.Fprintf(app.stdout, "# %s\n", app.configPath)
- // Build a display copy: mask or mark each env value.
- type provView struct {
- desc string
- env map[string]string
- }
- disp := map[string]provView{}
- for n, p := range app.cfg.Providers {
- ev := make(map[string]string, len(p.Env))
- for k, v := range p.Env {
- ev[k] = displayValue(v)
- }
- disp[n] = provView{desc: p.Description, env: ev}
- }
- if app.cfg.ClaudePath != "" {
- fmt.Fprintf(app.stdout, "claude_path: %s\n", app.cfg.ClaudePath)
- }
- if app.cfg.DefaultProvider != "" {
- fmt.Fprintf(app.stdout, "default_provider: %s\n", app.cfg.DefaultProvider)
- }
- if len(disp) == 0 {
- fmt.Fprintln(app.stdout, "providers: {}")
- return nil
- }
- fmt.Fprintln(app.stdout, "providers:")
- names := make([]string, 0, len(disp))
- for n := range disp {
- names = append(names, n)
- }
- sort.Strings(names)
- for _, n := range names {
- v := disp[n]
- fmt.Fprintf(app.stdout, " %s:\n", n)
- if v.desc != "" {
- fmt.Fprintf(app.stdout, " description: %s\n", v.desc)
- }
- fmt.Fprintln(app.stdout, " env:")
- keys := make([]string, 0, len(v.env))
- for k := range v.env {
- keys = append(keys, k)
- }
- sort.Strings(keys)
- for _, k := range keys {
- fmt.Fprintf(app.stdout, " %s: %s\n", k, v.env[k])
- }
- }
- return nil
- },
- }
- }
- func newConfigSetCmd(app *appState) *cobra.Command {
- cmd := &cobra.Command{
- Use: "set <key> <value>",
- Short: "Set a top-level config field (claude-path | default)",
- Args: cobra.ExactArgs(2),
- RunE: func(cmd *cobra.Command, args []string) error {
- key, value := args[0], args[1]
- switch key {
- case "claude-path":
- if err := app.cfg.SetClaudePath(value); err != nil {
- return err
- }
- case "default":
- if err := app.cfg.SetDefault(value); err != nil {
- return err
- }
- default:
- return fmt.Errorf("unknown config key %q (allowed: claude-path, default)", key)
- }
- if err := app.save(); err != nil {
- return err
- }
- fmt.Fprintf(app.stdout, "set %s\n", key)
- return nil
- },
- }
- return cmd
- }
- func newConfigGetCmd(app *appState) *cobra.Command {
- return &cobra.Command{
- Use: "get <key>",
- Short: "Print a top-level config field (claude-path | default)",
- Args: cobra.ExactArgs(1),
- RunE: func(cmd *cobra.Command, args []string) error {
- switch args[0] {
- case "claude-path":
- fmt.Fprintln(app.stdout, app.cfg.ClaudePath)
- case "default":
- fmt.Fprintln(app.stdout, app.cfg.DefaultProvider)
- default:
- return fmt.Errorf("unknown config key %q (allowed: claude-path, default)", args[0])
- }
- return nil
- },
- }
- }
|