package app import ( "context" "fmt" "io" "strings" ) var supportedCommands = []string{"run", "run-stage", "resume", "analyze", "publish", "clean", "session"} // Execute dispatches CLI commands and returns a process exit code. func Execute(args []string, stdout, stderr io.Writer) int { if len(args) == 0 { printUsage(stderr) return 1 } ctx := context.Background() cmd := args[0] cmdArgs := args[1:] var err error switch cmd { case "run": err = Run(ctx, cmdArgs, stdout) case "resume": err = Resume(ctx, cmdArgs, stdout) case "run-stage": err = RunStage(ctx, cmdArgs, stdout) case "analyze": err = Analyze(ctx, cmdArgs, stdout) case "publish": err = Publish(ctx, cmdArgs, stdout) case "session": err = Session(ctx, cmdArgs, stdout) case "clean": err = Clean(ctx, cmdArgs, stdout) default: fmt.Fprintf(stderr, "unknown command: %q\n\n", cmd) printUsage(stderr) return 1 } if err != nil { fmt.Fprintf(stderr, "%v\n", err) return 1 } return 0 } func printUsage(w io.Writer) { fmt.Fprintf(w, "Usage: narratio <%s>\n", strings.Join(supportedCommands, "|")) } func placeholder(out io.Writer, command string) error { _, err := fmt.Fprintf(out, "narratio %s: not yet implemented\n", command) return err }