package prompts import ( "embed" "fmt" "io/fs" "sort" "strings" ) //go:embed assets/** var embeddedAssets embed.FS const ( SourceBuiltin = "builtin" VersionV1 = "v1" AssetRoot = "assets/prompts" PromptIDModuleGlossaryProposal = "modules.glossary.proposal" PromptIDModuleHomophonesProposal = "modules.homophones.proposal" PromptIDModuleSpokenWordProposal = "modules.spoken_word.proposal" PromptIDModuleGrammarProposal = "modules.grammar.proposal" PromptIDValidatorSpokenFormPlausibility = "validators.spoken_form_plausibility" PromptIDValidatorMeaningReversalReview = "validators.meaning_reversal_review" PromptIDValidatorEditorialReview = "validators.editorial_review" PromptIDValidatorGrammarReview = "validators.grammar_review" PromptIDValidatorSpokenWordReview = "validators.spoken_word_review" ) var promptIDs = []string{ PromptIDModuleGlossaryProposal, PromptIDModuleHomophonesProposal, PromptIDModuleSpokenWordProposal, PromptIDModuleGrammarProposal, PromptIDValidatorSpokenFormPlausibility, PromptIDValidatorMeaningReversalReview, PromptIDValidatorEditorialReview, PromptIDValidatorGrammarReview, PromptIDValidatorSpokenWordReview, } type Metadata struct { PromptID string `json:"prompt_id"` PromptVersion string `json:"prompt_version"` PromptSource string `json:"prompt_source"` EmbeddedPath string `json:"embedded_path"` } func (m Metadata) DiagnosticsMap() map[string]any { return map[string]any{ "prompt_id": m.PromptID, "prompt_version": m.PromptVersion, "prompt_source": m.PromptSource, "embedded_path": m.EmbeddedPath, } } // Filesystem contains the PromptKit definitions and the shared hardening fragment. func Filesystem() fs.FS { return embeddedAssets } func LookupMetadata(promptID string) (Metadata, bool) { id := strings.TrimSpace(promptID) for _, known := range promptIDs { if known == id { return Metadata{PromptID: id, PromptVersion: VersionV1, PromptSource: SourceBuiltin, EmbeddedPath: AssetRoot + "/" + id + ".yaml"}, true } } return Metadata{}, false } func MustLookupMetadata(promptID string) Metadata { m, ok := LookupMetadata(promptID) if !ok { panic(fmt.Sprintf("unknown prompt id %q", promptID)) } return m } func RegisteredMetadata() []Metadata { ids := append([]string(nil), promptIDs...) sort.Strings(ids) out := make([]Metadata, 0, len(ids)) for _, id := range ids { out = append(out, MustLookupMetadata(id)) } return out } func HardeningText() string { raw, err := embeddedAssets.ReadFile("assets/shared/prompt_hardening.md") if err != nil { panic(fmt.Sprintf("read embedded hardening policy: %v", err)) } return string(raw) }