前缀树(Trie)
一种树形数据结构,按序列元素逐层分支,用于高效的前缀匹配。在 ExecPolicy 中,规则在加载时构建为前缀树,实现 O(k) 时间的命令匹配(k = 命令 token 数)。
关键内容
-
在 ExecPolicy 中的结构:
git ├── log → allow ├── status → allow ├── push │ ├── --force → forbidden │ └── * → prompt └── commit → prompt每个命令 token 是树的一层节点,叶子节点标注决策(allow/prompt/forbidden)。 -
优先级规则:
- 更长前缀优先:
git push --force匹配到更深的--force节点,优先于浅层的push节点 - first-match:同层多个规则时,先匹配者生效
-
无匹配 fallback:树中无路径时,回退到
approval_policy全局设置 -
为什么选 Trie 而非正则/字符串匹配:
- O(k) 确定性匹配,无回溯,无性能退化
- 天然支持"更具体规则优先"的语义
- 易于可视化和调试(树结构直观)
-
加载时一次性构建,执行时纯读取,零运行时开销
-
与 host_executable 的结合:Trie 匹配命令前缀后,
--resolve-host-executables进一步验证可执行文件的绝对路径,防止 PATH 欺骗攻击。
来源
- raw/articles/ai-tools/codex/04_codex_execpolicy.md — 第 3.1 节:前缀树匹配
相关
- ExecPolicy — implements,ExecPolicy 规则评估的核心数据结构
- Codex CLI — uses,通过 ExecPolicy 间接使用