| 802 | } |
| 803 | |
| 804 | func printRootHelp(out io.Writer) { |
| 805 | fmt.Fprintln(out, commandSummary) |
| 806 | fmt.Fprintln(out) |
| 807 | fmt.Fprintln(out, "Usage:") |
| 808 | fmt.Fprintf(out, " %s [command]\n", commandName) |
| 809 | fmt.Fprintln(out) |
| 810 | fmt.Fprintf(out, "Run `%s` without arguments to open the interactive command palette.\n", commandName) |
| 811 | fmt.Fprintln(out) |
| 812 | fmt.Fprintln(out, "Available Commands:") |
| 813 | fmt.Fprintln(out, " help Help about any command") |
| 814 | fmt.Fprintf(out, " deploy Install %s into %s and optionally add it to PATH\n", commandName, flowInstallDir) |
| 815 | fmt.Fprintln(out, " commit Generate a commit message with GPT-5 nano and create the commit") |
| 816 | fmt.Fprintln(out, " commitPush Generate a commit message, commit, and push to the default remote") |
| 817 | fmt.Fprintln(out, " commitReviewAndPush Generate a commit message, review it interactively, commit, and push") |
| 818 | fmt.Fprintln(out, " branchFromClipboard Create a git branch from the clipboard name") |
| 819 | fmt.Fprintln(out, " clone Clone a GitHub repository into ~/gh/<owner>/<repo>") |
| 820 | fmt.Fprintln(out, " cloneAndOpen Clone a GitHub repository and open it in Cursor (Safari tab optional)") |
| 821 | fmt.Fprintln(out, " clonePR Clone a GitHub pull request into ~/pr/<repo>-pr<num> and check it out") |
| 822 | fmt.Fprintln(out, " gitCheckout Check out a branch from the remote, creating a local tracking branch if needed") |
| 823 | fmt.Fprintln(out, " gitCheckoutRemote Fuzzy-search remote branches and switch to one locally") |
| 824 | fmt.Fprintln(out, " killPort Kill a process by the port it listens on, optionally with fuzzy finder") |
| 825 | fmt.Fprintln(out, " tasks List Taskfile tasks with descriptions") |
| 826 | fmt.Fprintln(out, " try Create a numbered scratch directory in ~/t and open a shell there") |
| 827 | fmt.Fprintln(out, " privateForkRepo Clone a repo and create a private fork with upstream remotes") |
| 828 | fmt.Fprintln(out, " privateForkRepoAndOpen Clone a repo, create a private fork, and open it in Zed") |
| 829 | fmt.Fprintln(out, " listWindowsOfApp List visible windows for a running macOS app") |
| 830 | fmt.Fprintln(out, " shExec Fuzzy-search shell scripts under ~/config/sh and execute them") |
| 831 | fmt.Fprintln(out, " gitFetchUpstream Fetch from upstream (or all remotes) with pruning") |
| 832 | fmt.Fprintln(out, " gitSyncFork Update a local branch from upstream using rebase or merge") |
| 833 | fmt.Fprintln(out, " gitMirror Mirror-remote workflow (setup/push/pull/take) for contributor repos") |
| 834 | fmt.Fprintln(out, " updateGoVersion Upgrade Go using the workspace script") |
| 835 | fmt.Fprintln(out, " youtubeToSound Download audio from a YouTube URL into ~/.flow/youtube-sound using yt-dlp") |
| 836 | fmt.Fprintln(out, " spotifyPlay Start playing a Spotify track from a URL or ID") |
| 837 | fmt.Fprintln(out, " openDoc Open a doc by type key (metrics, changes, log, looking-back)") |
| 838 | fmt.Fprintln(out, " openLog Open the current monthly log doc in Cursor") |
| 839 | fmt.Fprintln(out, " openChanges Open the current monthly changes doc in Cursor") |
| 840 | fmt.Fprintln(out, " openMetrics Open the current monthly metrics doc in Cursor") |
| 841 | fmt.Fprintln(out, " openLookingBack Open the current looking-back doc in Cursor") |
| 842 | fmt.Fprintln(out, " openSqlite Select a .sqlite file in the current tree and open it in TablePlus") |
| 843 | fmt.Fprintln(out, " focusCursorWindow Focus the latest Cursor window logged without a trailing '.' workspace name") |
| 844 | fmt.Fprintln(out, " version Reports the current version of fgo") |
| 845 | fmt.Fprintln(out) |
| 846 | fmt.Fprintln(out, "Flags:") |
| 847 | fmt.Fprintf(out, " -h, --help help for %s\n", commandName) |
| 848 | fmt.Fprintln(out) |
| 849 | fmt.Fprintf(out, "Use \"%s [command] --help\" for more information about a command.\n", commandName) |
| 850 | } |
| 851 | |
| 852 | func windowFocusDatabasePath() (string, error) { |
| 853 | if override, ok := lookupNonEmptyEnv(windowFocusDBEnv); ok { |