{"record":{"id":"09930da471d2faf6","repo":"chenhg5/cc-connect","slug":"unknown-top-level-command-s","errorCode":null,"errorMessage":"unknown top-level command: %s","messagePattern":"unknown top-level command: (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/cc-connect/main.go","lineNumber":1440,"sourceCode":"\t}\n\n\treturn rootCLIOptions{\n\t\tconfigPath:     *configPath,\n\t\tforce:          *force,\n\t\tobserve:        *observe,\n\t\tobserveChannel: *observeChannel,\n\t\tlogMaxSize:     *logMaxSize,\n\t\tlogMaxBackups:  *logMaxBackups,\n\t\tshowVersion:    *showVersion,\n\t\targs:           fs.Args(),\n\t}, nil\n}\n\nfunc validateNoExtraTopLevelArgs(args []string) error {\n\tif len(args) == 0 {\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"unknown top-level command: %s\", args[0])\n}\n\n// sessionStorePath builds a unique filename from project name + work_dir.\n// It checks for legacy session files (without the sessions/ subdirectory) in dataDir\n// for backward compatibility; if found, uses that path. Otherwise uses dataDir/sessions/.\nfunc sessionStorePath(dataDir, name, workDir string) string {\n\tvar filename string\n\tif workDir == \"\" {\n\t\tfilename = name + \".json\"\n\t} else {\n\t\tabs, err := filepath.Abs(workDir)\n\t\tif err != nil {\n\t\t\tabs = workDir\n\t\t}\n\t\th := sha256.Sum256([]byte(abs))\n\t\tshort := hex.EncodeToString(h[:4])\n\t\tfilename = fmt.Sprintf(\"%s_%s.json\", name, short)\n\t}","sourceCodeStart":1422,"sourceCodeEnd":1458,"githubUrl":"https://github.com/chenhg5/cc-connect/blob/4000b2338aa6e850c99df54f8b0ed6ed7460b401/cmd/cc-connect/main.go#L1422-L1458","documentation":"validateNoExtraTopLevelArgs rejects any positional argument left over after flag parsing of the top-level cc-connect command. cc-connect has no anonymous top-level operands, so any leftover argument is reported as an unknown top-level command. It is raised from main (and an anonymous caller) when argv contains an unrecognized first token.","triggerScenarios":"Running `cc-connect foo` or `cc-connect start-daemon-extra` where the first non-flag argument does not match a registered subcommand (serve, doctor, provider, etc.).","commonSituations":"Typos like `cc-connect serv`; running an old subcommand removed in a newer version; pasting a command from docs of a different tool; quoting mistakes that merge tokens.","solutions":["Run `cc-connect --help` and use one of the listed subcommands.","Fix the typo in the subcommand name.","Check the installed version supports the subcommand (upgrade or downgrade cc-connect).","Remove stray positional arguments or extra flags placed after subcommand parsing."],"exampleFix":"// before\ncc-connect serv --config config.toml\n// error: unknown top-level command: serv\n// after\ncc-connect serve --config config.toml","handlingStrategy":"validation","validationCode":"valid := map[string]bool{\"serve\": true, \"doctor\": true, \"provider\": true, \"version\": true, \"help\": true}\nif len(os.Args) > 1 && !valid[os.Args[1]] {\n    fmt.Fprintf(os.Stderr, \"unknown command %q; run 'cc-connect --help'\\n\", os.Args[1])\n    os.Exit(2)\n}","typeGuard":null,"tryCatchPattern":"if err := validateNoExtraTopLevelArgs(flagset.Args()); err != nil {\n    fmt.Fprintln(os.Stderr, err)\n    fmt.Fprintln(os.Stderr, \"Run 'cc-connect --help' for usage.\")\n    os.Exit(2)\n}","preventionTips":["Always run `cc-connect --help` when unsure of subcommand names.","Shell-complete or alias frequently used subcommands to avoid typos.","Check release notes after upgrading — subcommands can be renamed or removed.","Quote arguments carefully so tokens do not merge."],"tags":["go","cli","argument-parsing"],"backgroundTag":"invalid-cli-argument","analyzedSha":"4000b2338aa6e850c99df54f8b0ed6ed7460b401","analyzedAt":"2026-09-06T11:45:09.575Z","contentChangedAt":"2026-09-06T11:45:09.575Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}