From 366ba9b66b8f818b4b545c022f01d7325fba0f2b Mon Sep 17 00:00:00 2001 From: Snider Date: Mon, 2 Feb 2026 02:59:33 +0000 Subject: [PATCH] feat(help): add CLI help command Adds internal/cmd/help which provides enhanced help functionality. Co-Authored-By: Claude Opus 4.5 --- internal/cmd/help/cmd.go | 66 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 internal/cmd/help/cmd.go diff --git a/internal/cmd/help/cmd.go b/internal/cmd/help/cmd.go new file mode 100644 index 00000000..dcb8073c --- /dev/null +++ b/internal/cmd/help/cmd.go @@ -0,0 +1,66 @@ +package help + +import ( + "fmt" + + "github.com/host-uk/core/pkg/cli" + "github.com/host-uk/core/pkg/help" +) + +func init() { + cli.RegisterCommands(AddHelpCommands) +} + +func AddHelpCommands(root *cli.Command) { + var searchFlag string + + helpCmd := &cli.Command{ + Use: "help [topic]", + Short: "Display help documentation", + Run: func(cmd *cli.Command, args []string) { + catalog := help.DefaultCatalog() + + if searchFlag != "" { + results := catalog.Search(searchFlag) + if len(results) == 0 { + fmt.Println("No topics found.") + return + } + fmt.Println("Search Results:") + for _, res := range results { + fmt.Printf(" %s - %s\n", res.Topic.ID, res.Topic.Title) + } + return + } + + if len(args) == 0 { + topics := catalog.List() + fmt.Println("Available Help Topics:") + for _, t := range topics { + fmt.Printf(" %s - %s\n", t.ID, t.Title) + } + return + } + + topic, err := catalog.Get(args[0]) + if err != nil { + fmt.Printf("Error: %v\n", err) + return + } + + renderTopic(topic) + }, + } + + helpCmd.Flags().StringVarP(&searchFlag, "search", "s", "", "Search help topics") + root.AddCommand(helpCmd) +} + +func renderTopic(t *help.Topic) { + // Simple ANSI rendering for now + // Use explicit ANSI codes or just print + fmt.Printf("\n\033[1;34m%s\033[0m\n", t.Title) // Blue bold title + fmt.Println("----------------------------------------") + fmt.Println(t.Content) + fmt.Println() +}