reverse-cli-anything
开源 · 逆向工程 · Agent 工具

适配器契约#

English · 运行层 · SOP

适配器是独立注册的目录,通过清单选择原生实现,核心中不增加软件名称分支。先用 init 生成骨架,再实现目标能力并注册清单。

先按工程手册恢复契约背后的原生操作。维护工具目录后,生成调用说明,再补充目标专属的生命周期语义;生成文档不代表已验证原生兼容性。

最小清单#

{
  "schemaVersion": 1,
  "id": "my-app",
  "name": "My application",
  "entrypoint": "cli.py",
  "toolSchema": "tools.json",
  "skill": "SKILL.md",
  "acceptance": "acceptance.json",
  "testedBuilds": []
}

路径相对于清单目录,或显式 root 指定的根目录,引用必须位于声明的根目录内。ID 使用小写字母、数字、连字符,以字母开头,排除 Windows 保留名称。本机注册保存清单路径,拒绝不同清单占用同一个 ID。清单及 Hook 属于受信任的可执行配置,注册第三方适配器前应检查其代码。

字段见清单 schema。entrypoint 目前是 Python 程序,可以再启动其他语言实现;框架要求 Python,不要求目标采用特定技术。regression 为可选参数数组,第一项是相对声明根目录的 Python 验收脚本;显式运行 tools/regress-native.py <adapter> ... 时才调用。

默认传输与工具目录#

python cli.py <tool-name> --input <JSON-object>

工具目录包含 schemaVersion、adapter 和 tools。每个工具声明唯一 name、inputSchema、outputSchema、布尔 mutates 和真实 provenance。输出 schema 引用相对于目录文件。会改变目标或会话状态的操作用 mutates: true;读写分类决定公共入口是否加锁。

标准输出仅写一个 JSON 响应,诊断写标准错误。成功完成用 ok: true 和退出码 0。失败应记录已知结果:not-submitted、partially-applied,或原生结果仍未知的错误。写入报错本身不能证明回滚。

输入在提交前校验,原生语义、版本固定和真实完成判断由适配器负责。工具 schema 和目标 Skill 应明确单位、状态前提和对象身份。

可选兼容 Hook#

清单可声明 runtime: "adapter_runtime.py",只需提供用得上的函数:

Hook 返回内容
preflight(argv) 校验旧命令后返回 (tool_name, parsed_arguments)
command(tool, arguments) 已校验结构化输入对应的旧命令参数
tools() 生成的工具目录,用于与已保存 schema 比较
app_path()、native_tools()、ffmpeg() 目标默认路径或依赖路径
child_env() 目标环境变量
doctor_checks(pid, inventory) 只读诊断检查项
prepare(argv, operation_id) 关联原生请求,不执行操作
successful(tool, response, exit_code) 识别既有成功响应约定
evidence(response) 原生证据路径描述

导入、发现、参数校验和 doctor 阶段不能启动或修改目标;仅读取工具目录不会导入 Hook。Hook 是受信任代码,这属于开发契约而非沙箱隔离。

核心不知道具体 ABI、原生命令名、对象类型或进程名,这些均由适配器维护。新适配器优先采用默认传输,确有兼容需求时再用 Hook。

证据与范围#

逐工具覆盖见 acceptance.schema.json,原生流程报告见 acceptance-report.schema.json。脚手架初始为 not-run,并返回 nativeImplemented: false;注册不会改变这些结论。

实现后运行 tools/check-contracts.py --adapter <id>。软件测试和产物验证器属于适配器,明确记录实测版本及工作流,遵循通用验收说明。

在 GitHub 查看本页源文档