Skip to content

Latest commit

 

History

History
52 lines (31 loc) · 4.54 KB

File metadata and controls

52 lines (31 loc) · 4.54 KB

安全边界

保护目标

Task Pointer 的安全目标是:在本地 session 范围内保存一个可验证的短指针,避免并发 writer 覆盖新状态,避免路径逃逸,并在恢复失败时阻止不完整上下文继续传播。它不是任务权限系统,也不替代宿主对 Hook 命令的审阅和信任。

输入与解析

  • lifecycle 和 publisher 从 stdin 读取原始字节,使用无 BOM、严格 UTF-8 解码;非法字节、空输入和超限输入会拒绝。
  • JSON 使用对象根、固定字段集合和重复字段检查;状态与请求再经过类型、枚举、正则和关系校验。
  • 指针正文最多 8192 个 UTF-8 字节,恢复上下文最多 10000 字节,state 文件最多 32768 字节;Hook 输入最多 65536 字节,publisher 请求最多 12288 字节。
  • 错误诊断会移除换行和控制字符并截断长度,避免把任意 stdin 当作日志格式控制。

并发与持久化

每个 session 使用命名互斥串行化 prompt、clear 和 publish。publisher 在锁内同时比较 generation 与 revision;任一不匹配都返回 stale 错误并保持原文件。generation 在新 session、清除和 v2 升级时更换,阻断旧请求的 ABA 复活。

state 写入采用同目录随机临时文件、WriteThrough 刷新、临时文件读回校验和原子替换。异常路径会删除临时残留;锁超时、读回不一致或目标文件被独占时,原 state 不应被覆盖。测试覆盖并发 CAS、锁顺序、写失败和 abandoned mutex 恢复。

路径与文件系统

  • session ID 只允许字母、数字、点、下划线和连字符,不能携带分隔符或 ..
  • state 目录使用 session ID 的 UTF-8 十六进制编码,兼容旧 raw 目录但拒绝编码/旧目录并存。
  • 默认和显式 state 根必须位于 CODEX_HOME 下或系统临时根;每个已存在组件检查重解析点,Junction/Symlink 不会被静默跟随。
  • 安装器检查 CODEX_HOME、owned 根、Hook 文件和备份目标的边界;备份目标与安装目标重叠会拒绝。

这些检查针对具体失败场景:恶意 session 名称可能把 state 写出根目录;重解析点可能把看似本地的写入导向另一位置;并发旧请求可能覆盖新指针。拒绝、互斥和 CAS 分别在路径解析、写入前和提交前生效。

安装与回滚边界

安装器只拥有七个文件和三个目标 Hook handler。它会先写备份 manifest,再复制文件、合并 JSON 并读回验证;中途失败会尝试用同一 manifest 自动恢复。显式 -Rollback -BackupPath 会再次校验目标 home、owned 清单和 Hook 安装记录,只移除仍匹配本次安装的 handler。

安装器不修改 config.toml、项目设置、会话、记忆、state 内容或其他 Hook。用户在安装后新增的无关 Hook 会保留;如果目标在安装后发生漂移,回滚会停止而不是覆盖用户修改。备份可能包含用户自己的指针正文,应按本机文件权限保护,不要公开上传。

Hook 信任与恢复失败

Hook 命令是在用户环境中执行的 PowerShell 进程。安装器只生成路径和命令,不替用户信任;首次启用前应在宿主 Hook 管理界面核对来源、事件和 state 根。不要把未经审阅的示例占位符直接当作生产路径。

普通 startup/resume 读取错误会输出 UNKNOWN_RECOVERY 诊断并继续,以免无效正文进入上下文。clear/compact 恢复错误会输出 TASK_POINTER_RECOVERY_REQUIRED 并停止继续;UserPromptSubmit 写失败会 block,要求先修复持久化问题。

数据与独立性

运行时只读写用户明确指定的本地路径,不建立网络连接,不收集遥测,也不需要复制宿主的认证材料。仓库自身不包含运行 state、备份、日志、真实 session ID 或机器绑定值。安装、迁移和测试都可以在隔离的 CODEX_HOME 中完成。

已知限制

  • 获得本机文件写权限的进程仍可修改 state 或 Hook;本工具不提供操作系统级沙箱。
  • 用户若把备份目录放在宽权限位置,备份中的指针正文会继承该位置的暴露风险。
  • 宿主 Hook API 的事件字段和信任界面由宿主版本决定;应先用 hooks/list 探针确认事件无错误,再运行完整 E2E。
  • schema 只约束数据形状,不判断指针正文是否符合业务意图;业务校验仍由发布者负责。

报告安全问题时,请提供最小可复现的事件、schema 版本、PowerShell/Node 版本和脱敏错误代码;不要附带完整 state、备份或个人路径。