Documentation
¶
Overview ¶
Package specs 实现"显式点名加载用户自定义 prompt 规范"的加载与追加层。
业务契约见 docs/requirements/2026-08-25-keyword-prompt-specs.md:用户在 `pe+<名字> <任务>` 中显式点名 ~/.config/openpe/specs/<名字>.md,openPE 在 增强前加载校验(失败即阻断,绝不静默降级),增强成功后把规范原文逐字 追加到结果后段(a1 机械追加,规范不进入增强模型请求)。
本包刻意不做任何宽松回退:找不到、读不出、非 UTF-8、内容为空、超过上限 都返回结构化 *LoadError,由调用方按客户端语言渲染并阻断本次增强。这与 config.systemPromptFromEnv 的"读不出就静默用默认"是相反的设计选择—— 那里的回退对象是内置默认值,这里被丢弃的将是用户点名要求的约束。
Index ¶
- Constants
- func Append(enhanced string, loaded []Spec, language string) string
- func DefaultDir() (string, error)
- func ErrorMessage(err error, language string) string
- func Load(dir string, names []string, maxChars int) ([]Spec, *LoadError)
- func Names(loaded []Spec) []string
- func ValidateName(name string) bool
- type LoadError
- type Reason
- type Spec
Constants ¶
const ( // DefaultDirName 是用户级配置目录下的规范子目录名:~/.config/openpe/specs。 DefaultDirName = "specs" // DefaultMaxChars 是单份规范的默认字符上限;超限报错而不截断。 DefaultMaxChars = 8000 // FileExtension 是规范文档的固定扩展名;文件名词干即规范名。 FileExtension = ".md" )
Variables ¶
This section is empty.
Functions ¶
func Append ¶
Append 把加载成功的规范逐字追加到增强结果后段(a1 交付形态):
<增强正文> [用户规范:三问] <原文>
块头随客户端语言本地化;多份按点名顺序排列。无规范时原样返回。
func DefaultDir ¶
DefaultDir 解析默认规范目录 ~/.config/openpe/specs,与 hook 安装器使用的 用户级配置目录(~/.config/openpe/.env)同根。
func ErrorMessage ¶
ErrorMessage 把 LoadWithDefaults/Load 的错误渲染成用户可见文案: *LoadError 走本地化 Message,其余错误(如主目录解析失败)带原文外抛。
func Load ¶
Load 按点名顺序解析规范:每个名字先校验、再直接读取 dir/<name>.md 并做 归一化(剥 BOM、统一 LF、Trim)与内容校验。maxChars <= 0 时使用 DefaultMaxChars。任一名字失败立即返回 *LoadError(全有或全无)。
func ValidateName ¶
ValidateName 校验点名的规范名。名字来自用户输入并会拼接进文件路径, 必须在拼接前拒绝路径穿越与畸形输入:空名、以点开头(含 "." ".." 与隐藏 文件)、路径分隔符、冒号(Windows 盘符/ADS)、控制字符。中文等 Unicode 字母数字、连字符、下划线均合法。
Types ¶
type LoadError ¶
type LoadError struct {
Name string
Reason Reason
Dir string
Detail string // read_error 时的底层错误原文
Available []string // not_found 时目录中现有的规范名(尽力提供)
Size int // oversize 时的实际字符数
Limit int // oversize 时的上限
}
LoadError 是单个规范加载失败的结构化描述。加载遵循全有或全无:任一名字 失败即返回该错误并放弃整批,调用方必须阻断本次增强。