package prompt import "strings" const overlaySeparator = "\n\n---\n\n" // ComposeSystem prepends global overlay to the base system prompt before provider send. func ComposeSystem(base string) (string, error) { base = strings.TrimSpace(base) overlayText, err := Overlay() if err != nil { return "", err } overlayText = strings.TrimSpace(overlayText) if overlayText == "" { return base, nil } if base == "" { return overlayText, nil } return overlayText + overlaySeparator + base, nil } // Style8DSystem loads 8D slots from config files and composes the outgoing system prompt. func Style8DSystem() (string, error) { system, err := Slot(KeyStyle8DSystem) if err != nil { return "", err } schema, err := Slot(KeyStyle8DSchema) if err != nil { return "", err } return ComposeSystem(system + schema) } // IslanderSystem composes the islander guide system prompt with optional live page context. func IslanderSystem(pageContext string) (string, error) { base, err := Slot(KeyIslanderSystem) if err != nil { return "", err } pageContext = strings.TrimSpace(pageContext) if pageContext != "" { base = base + "\n\n---\n\n" + pageContext } return ComposeSystem(base) } // AIChatSystem composes the outgoing system prompt for console AI chat. func AIChatSystem(clientSystem string) (string, error) { base := strings.TrimSpace(clientSystem) if base == "" { var err error base, err = Slot(KeyAIChatSystem) if err != nil { return "", err } } return ComposeSystem(base) }