SuperAPI AI 工具集

ssotize-local

通用与其它

查看项目

更新于 11-09 16:50

技能介绍

ssotize-local 是一个用于合并重复文件或目录的工具,旨在为重复内容建立一个规范位置(canonical home),并通过文件系统机制让其他路径成为该位置的“身份”,从而避免数据重复。

用途

当多个消费者需要在不同路径下读取相同字节,且文本引用无法满足需求时,可以使用 ssotize-local 将重复的文件或目录树统一到一个规范位置,并为其他路径创建硬链接、符号链接、目录联接(junction)或绑定挂载(bind mount)。在此过程中,字节内容和保留契约(包括 ACL、所有者、模式、命名流、扩展属性及必须保留的时间戳)都不会丢失。

主要能力

  1. 审计与计划:首先对重复文件或目录运行“ssotize”进行只读审计和计划,生成出现表、规范位置及其理由、矛盾点、独特细节以及批准门槛。如果没有安装 ssotize,则停止,因为缺少其审计和批准可能导致不安全的链接。
  2. 扩展清单:为链接补充所需信息,包括每个消费者、别名、信任边界、隐藏和空条目、嵌套链接,并明确解析每个链接目标。
  3. 探测:使用 node scripts/identity.mjs probe <path>... 对每个候选路径和目的地父目录进行探测,记录命令、退出码、输出和时间。探测报告路径、链接状态和目标、身份和链接数、大小、修改时间、可推导的挂载根以及测试的链接能力。该探测在临时目录中进行,是审计中唯一的写入操作。
  4. 摘要与比较:digest 命令打印路径、修改时间、大小、SHA256 以及通过每个名称的身份,并给出排序的相对成员和清单哈希;compare 命令比较字节和身份,退出码 0 表示相等或身份一致,3 表示分歧或存在独特成员,1 表示错误。
  5. 分类:根据与规范位置的比较结果,将每个候选归为:字节和契约相同(eligible)、字节相同但契约不同或不可读(unproven)、字节分歧(矛盾)、仅存在于一处(fold)、已链接到预期规范位置(identity-proven no-op)。
  6. 批准:将计划提交给人类,使用确切措辞“link if still identical at the mutation step”,只有该措辞覆盖链接步骤。同时人类决定必须保留哪些时间戳。
  7. 写入前重新检查:在任何写入(包括备份和协调)之前,立即重新枚举候选并重新读取路径、修改时间、大小、SHA256、契约、身份和排除证据。任何添加、缺失、不可读、替换或更改的候选都会停止写入,并返回步骤 1 重新审计和步骤 8 重新批准。
  8. 链接:使用 node scripts/identity.mjs link <canonical> <alias> --mechanism hardlink|symlink|junction [--staged <absent-sibling>] 安装经过验证的链接,并保留任何被替换的条目。根据阶梯选择机制:文件硬链接(同一支持的本地卷上的常规文件,父目录有权限)、目录硬链接(主流系统不支持,从不尝试)、符号链接(目录的首选,文件的回退)、目录联接(Windows 目录回退)、绑定挂载(仅限 Linux,需明确人工选择、探测权限、批准的空白挂载点及持久化计划,脚本外操作,不作为静默回退)、复制(仅经明确人工同意,报告为“不再是 SSOT”)。
  9. 验证:每次修改后,使用 node scripts/identity.mjs verify <canonical> <alias>... 对照批准的清单和契约进行只读验证。硬链接需要相等的 dev:ino(或卷和文件 ID)以及覆盖集合的链接数;符号链接或目录联接必须解析到规范位置;每个成员通过每个名称哈希相等。仅字节相等不能证明身份。
  10. 反转:经人工批准后,使用 node scripts/identity.mjs unlink <alias> --stage <dir> 按机制反转。该命令将链接替换为别名名称下的经过验证的独立副本,仅移除条目,从不删除目标树。

使用方式

工具以 Node.js 脚本形式提供,所有子命令(probe、digest、compare、link、verify、unlink)均接受 --json 参数。使用前需确保已安装 ssotize 技能,并在每一步遵循审计、批准、探测、重新检查等流程。

适用场景

适用于多个消费者需要在不同路径读取相同字节且文本引用无法满足的情况,例如构建系统、同步工具或备份需要访问相同内容的不同路径。

限制

  • 需要人工批准和审计,不能无人值守运行。
  • 必须确认可以排除并发写入者,否则停止。
  • 可移植性因机制而异:硬链接在 Git 克隆中没有身份;相对符号链接在布局复现时可移植;绝对符号链接需要相同目标路径;目录联接仅限 Windows 本地绝对路径;绑定挂载需要主机管理权限和批准的持久化。
  • 脚本仅证明主要字节和成员,缺少工具、读取被拒或不支持的字段会导致契约未证明。
  • 存在七类已知失败情况(如替换保存可能切断硬链接、检出可能写入替换文件、云同步可能拒绝链接或实体化副本等),需要在适用时重新验证。
  • 不能保证永久链接,已链接集合应报告为无操作并重新验证,从不重新链接。