Files

49 lines
1.6 KiB
Go

package usage
import "maps"
//go:generate go run ../gui/genpurposes -out ../gui/assets/purposes.js
// PurposeKind is the shared filtering key and untranslated display name of a kind.
type PurposeKind struct {
Purpose string `json:"purpose"`
Name string `json:"name"`
}
var purposeKinds = func() map[string]PurposeKind {
out := map[string]PurposeKind{}
add := func(name string, kinds ...string) {
for _, kind := range kinds {
out[kind] = PurposeKind{"kind:" + kinds[0], name}
}
}
add("Approval check", "guardian", "auto_review", "guardian_review")
add("Review", "review")
add("Compaction", "compact")
add("Memory", "memory_consolidation", "memgen", "memory")
add("Title", "thread_title", "thread_title_reconsideration", "title_generation", "title")
add("Subagent", "collab_spawn", "thread_spawn", "agent_job")
add("Luna Reserve", "luna_reserve")
add("Suggestions", "ambient_suggestions", "ambient_suggestion_safety")
add("Web search", "web_search")
add("Image description", "vision")
return out
}()
// PurposeKinds returns a copy of the catalog used to generate the UI's catalog.
// Add aliases here, then run go generate ./internal/usage from the repo root.
func PurposeKinds() map[string]PurposeKind { return maps.Clone(purposeKinds) }
// PurposeOf groups the agent's equivalent call-kind spellings for filtering.
// The recorded Kind stays untouched. Prefixing nonempty kinds keeps future
// names distinct from the unmarked bucket (which is not necessarily a chat).
func PurposeOf(kind string) string {
if kind == "" {
return "unmarked"
}
if p, ok := purposeKinds[kind]; ok {
return p.Purpose
}
return "kind:" + kind
}