specs

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 1, 2026 License: MIT Imports: 7 Imported by: 0

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

View Source
const (
	// DefaultDirName 是用户级配置目录下的规范子目录名:~/.config/openpe/specs。
	DefaultDirName = "specs"
	// DefaultMaxChars 是单份规范的默认字符上限;超限报错而不截断。
	DefaultMaxChars = 8000
	// FileExtension 是规范文档的固定扩展名;文件名词干即规范名。
	FileExtension = ".md"
)

Variables

This section is empty.

Functions

func Append

func Append(enhanced string, loaded []Spec, language string) string

Append 把加载成功的规范逐字追加到增强结果后段(a1 交付形态):

<增强正文>

[用户规范:三问]
<原文>

块头随客户端语言本地化;多份按点名顺序排列。无规范时原样返回。

func DefaultDir

func DefaultDir() (string, error)

DefaultDir 解析默认规范目录 ~/.config/openpe/specs,与 hook 安装器使用的 用户级配置目录(~/.config/openpe/.env)同根。

func ErrorMessage

func ErrorMessage(err error, language string) string

ErrorMessage 把 LoadWithDefaults/Load 的错误渲染成用户可见文案: *LoadError 走本地化 Message,其余错误(如主目录解析失败)带原文外抛。

func Load

func Load(dir string, names []string, maxChars int) ([]Spec, *LoadError)

Load 按点名顺序解析规范:每个名字先校验、再直接读取 dir/<name>.md 并做 归一化(剥 BOM、统一 LF、Trim)与内容校验。maxChars <= 0 时使用 DefaultMaxChars。任一名字失败立即返回 *LoadError(全有或全无)。

func Names

func Names(loaded []Spec) []string

Names 返回已应用规范名列表,供交付层的可观测文案使用。

func ValidateName

func ValidateName(name string) bool

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 是单个规范加载失败的结构化描述。加载遵循全有或全无:任一名字 失败即返回该错误并放弃整批,调用方必须阻断本次增强。

func (*LoadError) Error

func (e *LoadError) Error() string

Error 实现 error 接口,默认中文(与 config.DefaultLanguage 一致)。

func (*LoadError) Message

func (e *LoadError) Message(language string) string

Message 按客户端语言渲染用户可见错误文案,说明哪个名字、什么原因、 以及用户下一步怎么改。

type Reason

type Reason string

Reason 枚举加载失败原因,供测试断言与未来结构化上报使用。

const (
	ReasonInvalidName Reason = "invalid_name"
	ReasonNotFound    Reason = "not_found"
	ReasonReadError   Reason = "read_error"
	ReasonInvalidUTF8 Reason = "invalid_utf8"
	ReasonEmpty       Reason = "empty"
	ReasonOversize    Reason = "oversize"
)

type Spec

type Spec struct {
	Name    string
	Content string
}

Spec 是一份加载成功的规范:Name 为点名用的名字,Content 为归一化后的 原文(已剥 UTF-8 BOM、换行统一为 LF、去除首尾空白)。

func LoadWithDefaults

func LoadWithDefaults(dir string, names []string, maxChars int) ([]Spec, error)

LoadWithDefaults 是 hook/CLI 接线用的便捷入口:names 为空直接返回 nil; dir 为空回退到 DefaultDir()。返回的 error 要么是 *LoadError,要么是 用户主目录解析失败——两者都必须阻断本次增强,调用方用 ErrorMessage 渲染本地化文案。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL