From 2a870a5d7d8bbc8fa162af06831fc1b35dec94f0 Mon Sep 17 00:00:00 2001 From: Snider Date: Mon, 2 Feb 2026 03:04:19 +0000 Subject: [PATCH] feat(help): add catalog for managing help topics Co-Authored-By: Claude Opus 4.5 --- pkg/help/catalog.go | 87 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 pkg/help/catalog.go diff --git a/pkg/help/catalog.go b/pkg/help/catalog.go new file mode 100644 index 00000000..04f26687 --- /dev/null +++ b/pkg/help/catalog.go @@ -0,0 +1,87 @@ +package help + +import ( + "fmt" +) + +// Catalog manages help topics. +type Catalog struct { + topics map[string]*Topic + index *searchIndex +} + +// DefaultCatalog returns a catalog with built-in topics. +func DefaultCatalog() *Catalog { + c := &Catalog{ + topics: make(map[string]*Topic), + index: newSearchIndex(), + } + + // Add default topics + c.Add(&Topic{ + ID: "getting-started", + Title: "Getting Started", + Content: `# Getting Started + +Welcome to Core! This CLI tool helps you manage development workflows. + +## Common Commands + +- core dev: Development workflows +- core setup: Setup repository +- core doctor: Check environment health +- core test: Run tests + +## Next Steps + +Run 'core help ' to learn more about a specific topic. +`, + }) + c.Add(&Topic{ + ID: "config", + Title: "Configuration", + Content: `# Configuration + +Core is configured via environment variables and config files. + +## Environment Variables + +- CORE_DEBUG: Enable debug logging +- GITHUB_TOKEN: GitHub API token + +## Config Files + +Config is stored in ~/.core/config.yaml +`, + }) + return c +} + +// Add adds a topic to the catalog. +func (c *Catalog) Add(t *Topic) { + c.topics[t.ID] = t + c.index.Add(t) +} + +// List returns all topics. +func (c *Catalog) List() []*Topic { + var list []*Topic + for _, t := range c.topics { + list = append(list, t) + } + return list +} + +// Search searches for topics. +func (c *Catalog) Search(query string) []*SearchResult { + return c.index.Search(query) +} + +// Get returns a topic by ID. +func (c *Catalog) Get(id string) (*Topic, error) { + t, ok := c.topics[id] + if !ok { + return nil, fmt.Errorf("topic not found: %s", id) + } + return t, nil +}