Files
beads/cmd/bd/types.go
collins 7cf67153de refactor(types): remove Gas Town type constants from beads core (bd-w2zz4)
Remove Gas Town-specific type constants (TypeMolecule, TypeGate, TypeConvoy,
TypeMergeRequest, TypeSlot, TypeAgent, TypeRole, TypeRig, TypeEvent, TypeMessage)
from internal/types/types.go.

Beads now only has core work types built-in:
- bug, feature, task, epic, chore

All Gas Town types are now purely custom types with no special handling in beads.
Use string literals like "gate" or "molecule" when needed, and configure
types.custom in config.yaml for validation.

Changes:
- Remove Gas Town type constants from types.go
- Remove mr/mol aliases from Normalize()
- Update bd types command to only show core types
- Replace all constant usages with string literals throughout codebase
- Update tests to use string literals

This decouples beads from Gas Town, making it a generic issue tracker.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 10:36:59 -08:00

97 lines
2.5 KiB
Go

package main
import (
"context"
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/steveyegge/beads/internal/types"
)
// coreWorkTypes are the built-in types that beads validates without configuration.
var coreWorkTypes = []struct {
Type types.IssueType
Description string
}{
{types.TypeTask, "General work item (default)"},
{types.TypeBug, "Bug report or defect"},
{types.TypeFeature, "New feature or enhancement"},
{types.TypeChore, "Maintenance or housekeeping"},
{types.TypeEpic, "Large body of work spanning multiple issues"},
}
var typesCmd = &cobra.Command{
Use: "types",
GroupID: "views",
Short: "List valid issue types",
Long: `List all valid issue types that can be used with bd create --type.
Core work types (bug, task, feature, chore, epic) are always valid.
Additional types require configuration via types.custom in .beads/config.yaml.
Examples:
bd types # List all types with descriptions
bd types --json # Output as JSON
`,
Run: func(cmd *cobra.Command, args []string) {
// Ensure direct mode for database access (types command needs to read config).
// In daemon mode, store is nil so custom types would never be fetched.
if err := ensureDirectMode("types command requires direct database access"); err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
return
}
// Get custom types from config
var customTypes []string
ctx := context.Background()
if store != nil {
if ct, err := store.GetCustomTypes(ctx); err == nil {
customTypes = ct
}
}
if jsonOutput {
result := struct {
CoreTypes []typeInfo `json:"core_types"`
CustomTypes []string `json:"custom_types,omitempty"`
}{}
for _, t := range coreWorkTypes {
result.CoreTypes = append(result.CoreTypes, typeInfo{
Name: string(t.Type),
Description: t.Description,
})
}
result.CustomTypes = customTypes
outputJSON(result)
return
}
// Text output
fmt.Println("Core work types (built-in):")
for _, t := range coreWorkTypes {
fmt.Printf(" %-14s %s\n", t.Type, t.Description)
}
if len(customTypes) > 0 {
fmt.Println("\nConfigured custom types:")
for _, t := range customTypes {
fmt.Printf(" %s\n", t)
}
} else {
fmt.Println("\nNo custom types configured.")
fmt.Println("Configure with: bd config set types.custom \"type1,type2,...\"")
}
},
}
type typeInfo struct {
Name string `json:"name"`
Description string `json:"description"`
}
func init() {
rootCmd.AddCommand(typesCmd)
}