本地规则参考
影响捕获、请求、校验、状态或替换的全部 macOS 活跃规则。
本页记录 macOS 输入法中可执行的本地行为。模型提示词单独标注。本地 Swift 代码 没有把拉丁字母片段分类为英文或拼音的规则。
捕获规则
- 明确的非空选区覆盖自动捕获。
- Convert 使用当前段落,不包含边界换行。
- Polish 和 Explain 使用光标所在句子;分隔符是
。!?.!?和换行。 - Terminal、Ghostty、VS Code 和 VS Code Insiders 优先使用本地输入缓冲;其他宿主 先尝试文档捕获,再回退到缓冲。
- 自动捕获保留外层空白。
- Markdown 标题、引用、列表、编号列表和任务框前缀不进入自动 Convert 请求,并 原样留在宿主。
- 空捕获报告
nothingToConvert。
输入缓冲规则
- 普通可打印按键追加到当前文本客户端绑定的缓冲;普通 Backspace 删除最后一个 缓冲字符。
- 客户端变化、操作菜单外点击、换行、导航或焦点按键、Command/Control 编辑命令、 Option-Backspace、无法跟踪的按键、停用、完成以及内容未变化的完成会清空缓冲。
- 缓冲版本不一致会阻止替换并报告
textChanged。
已接受段落规则
- 通过验证的段落替换会为该宿主客户端记录起始位置和已接受文本。
- 段落仍以已接受文本开头时,只请求新追加内容,并附带前面最多 100 个字符作为 只读上下文。
- 前缀不再匹配时,重新请求完整段落正文。
受保护内容规则
- 代码片段或围栏、URL、邮箱、路径、Markdown 链接目标、可识别密钥模式、私钥块 和带标签秘密值在请求前替换为本地占位符。
- 带标签秘密占有该行全部剩余内容。
- 重叠候选按位置、最长范围、再按优先级处理。
- 恢复要求目标中的每个占位符恰好出现一次。
- 秘密候选显示隐私锁;其他受保护对象不显示。
模型输出边界
- 只有完整、位于开头且删除后仍有非空正文的
<think>、<analysis>或<reasoning>块会被移除。 - 不完整、嵌入或仍残留的推理标记会拒绝响应。
- 清理后为空的输出会被拒绝。
Convert 校验器
| 失败标识 | 失败变量 |
|---|---|
empty | 输出没有非空白文本 |
contextEnvelopeLeak | 输出包含内部上下文或目标标记 |
metaExplanation | 仍存在推理标记 |
lineBreakMismatch | 换行数量变化 |
markdownPrefixMismatch | 每行 Markdown 结构前缀变化 |
protectedTokenMismatch | 受保护占位符、行、顺序或边界变化 |
Convert 没有本地拼音概率、拉丁前缀、英文单词或代码段落拒绝规则。
Polish 校验器
Polish 使用 empty、metaExplanation、lineBreakMismatch、
markdownPrefixMismatch 和 protectedTokenMismatch。数字类锚点的有序序列变化时,
还会产生 informationAnchorMismatch。本地后处理会把汉字前的 , 改为 ,。
Explain 会恢复受保护内容,但不会写回宿主。
请求与重试规则
- 空 Convert 和 Polish 输入在本地返回,不发送请求。
- Convert 首次请求温度为 0,输出上限为 1,024 token。
- 第一次 Convert 结果结构无效时,执行一次修复请求。
- 第一次 Convert 结果完全相同时,执行一次激进重试。条件允许时,可识别的 Mini/Lite 路由使用对应的 Pro;Pro 不可用时回退到所选模型。
- 最终结果结构有效但仍相同时正常返回,并在替换阶段成为
unchanged。 - Polish 校验失败后执行一次修复请求。
- Explain 发送一次请求,输出上限为 300 token。
- 请求超时为 45 秒。凭据缺失或过期、非成功 HTTP 状态、解码失败、不安全推理标记、
空响应或最终结构校验失败会成为
actionFailed。
应用例外
- 选区或光标替换客户端:
com.tencent.xinWeChat、com.microsoft.VSCode、com.microsoft.VSCodeInsiders。 - 输入缓冲优先客户端:
com.apple.Terminal、com.mitchellh.ghostty、com.microsoft.VSCode、com.microsoft.VSCodeInsiders。 - Xcode 没有 bundle 专用例外。
替换规则
- 源范围或缓冲版本必须仍与捕获快照一致。
- 替换文本相同则显示
unchanged,不执行插入。 - 普通宿主使用已提交文本范围替换。
- 选区或光标客户端使用精确选区插入;如果光标仍位于目标末尾,则使用合成 Backspace 批次。
- 合成替换绑定客户端和缓冲版本,两秒后超时。
- 可读取的结果会回读验证。不一致显示
replacementFailed;结果不可读时记录replacementSent,但不声称完成回读验证。 - 所有替换路径都不会创建标记组合文本。
触发与状态规则
- 只有选中 UnimeType 且设置开启时,Caps Lock 才映射为 F20。
- 普通 Caps Lock 执行 Convert;启用后 Option + Caps Lock 打开操作菜单, Option + Return 执行 Convert。重复事件会被忽略。
- 同一时间只允许一个操作。
- 静默状态:
processing、completed、replacementSent。 - 可见异常状态:
unchanged、nothingToConvert、requestInFlight、textChanged、selectionRequired、replacementFailed、actionFailed、setupRequired、cancelled。
模型提示词规则,不是本地决策
已配置提示词要求模型转换可能属于启用语言的输入、保留明确英文和受保护结构、使用 上下文消歧拼音,并只返回目标。它们会影响模型回答,但本地 Swift 代码不会据此分类 或阻止输入。