picoclaw/cmd/dragonscale/internal/cli/commands/migrate.go
ZanzyTHEbar 3286555321 refactor(cmd): extract dragonscale CLI to cobra-based internal structure
Slim main.go from ~2000 lines to ~46 lines. All subcommands (agent, gateway,
daemon, auth, memory, migrate, skills, cron, secret, onboard, status,
version) moved to cmd/dragonscale/internal/cli/commands/ with cobra.

- cmd/dragonscale/internal/cli/: AppContext, registry, palette, root
- cmd/dragonscale/internal/cli/commands/: agent, auth, cron, daemon,
  gateway, memory, migrate, onboard, root, secret, skills, status, version
- main.go: embeds workspace, wires sdk.Service, builds root via commands.BuildRoot
2026-02-22 15:30:45 +00:00

79 lines
2.1 KiB
Go

package commands
import (
"errors"
"github.com/ZanzyTHEbar/dragonscale/cmd/dragonscale/internal/cli"
"github.com/ZanzyTHEbar/dragonscale/pkg/dragonscale/sdk"
"github.com/spf13/cobra"
)
func registerMigrateCommand() {
cli.Register(func(ctx *cli.AppContext) *cobra.Command {
return buildMigrateCommand(ctx)
})
}
func buildMigrateCommand(ctx *cli.AppContext) *cobra.Command {
cmd := &cobra.Command{
Use: "migrate",
Short: "Migrate dragonscale configuration and workspace",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, _ []string) error {
if ctx == nil || ctx.Service == nil {
return errors.New("service is not initialized")
}
dryRun, err := cmd.Flags().GetBool("dry-run")
if err != nil {
return err
}
configOnly, err := cmd.Flags().GetBool("config-only")
if err != nil {
return err
}
workspaceOnly, err := cmd.Flags().GetBool("workspace-only")
if err != nil {
return err
}
force, err := cmd.Flags().GetBool("force")
if err != nil {
return err
}
refresh, err := cmd.Flags().GetBool("refresh")
if err != nil {
return err
}
openClawHome, err := cmd.Flags().GetString("openclaw-home")
if err != nil {
return err
}
dragonscaleHome, err := cmd.Flags().GetString("dragonscale-home")
if err != nil {
return err
}
opts := sdk.MigrateOptions{
DryRun: dryRun,
ConfigOnly: configOnly,
WorkspaceOnly: workspaceOnly,
Force: force,
Refresh: refresh,
OpenClawHome: openClawHome,
DragonscaleHome: dragonscaleHome,
}
return ctx.Service.Migrate(cmd.Context(), opts, cmd.OutOrStdout())
},
}
cmd.Flags().Bool("dry-run", false, "Simulate migration without writing")
cmd.Flags().Bool("config-only", false, "Migrate only config files")
cmd.Flags().Bool("workspace-only", false, "Migrate only workspace files")
cmd.Flags().Bool("force", false, "Overwrite existing files")
cmd.Flags().Bool("refresh", false, "Re-run migrations")
cmd.Flags().String("openclaw-home", "", "Path to OpenClaw home directory")
cmd.Flags().String("dragonscale-home", "", "Path to dragonscale home directory")
return cmd
}