跳转至

二进制所读取的运行时环境(context crate)

JS 脚本从自身文件位置获知了两件事,而单个二进制无法获知:是哪个 harness 构建了它们(lib/provider.mjs),以及技能的 reference/ 和 SKILL.md 位于哪里(../reference、../SKILL.md)。crates/context/src/provider.rs 在运行时解析这两者。

变量 含义 默认值
IMPECCABLE_SKILL_DIR 技能目录(包含 SKILL.md、reference/、scripts/)。用于 context 内联的本地平台引用、更新检查中的本地版本、pin 的 command-metadata.json,以及 concept-seed 的默认 catalog 目录(<skill>/scripts)。 从可执行文件所在目录向上查找,直到找到包含 reference/ios.md 的目录(二进制位于 <skill>/scripts/bin/<os>-<arch>/)。若无匹配则为无(None):此时本地引用会被静默跳过,就像 JS 中缺失文件一样。
IMPECCABLE_PROVIDER_ID 构建提供方 id(claude-code、codex、cursor 等)。选择 context 和 doctor 检查的钩子清单路径,以及 $// 命令前缀($ 仅用于 codex)。 由技能目录的 harness 文件夹派生(<root>/.codex/skills/impeccable -> codex);否则为 source,即 JS 在源码检出中读取的值。
IMPECCABLE_SELF 在打印出的命令中如何表示这个二进制——JS 原本打印 node <scripts>/<script>.mjs(context 的 MANUAL_DETECTOR_REQUIRED、IMAGE_GEN_AVAILABLE、SURFACE_CONTEXT_AVAILABLE、MONOREPO_TARGET_REQUIRED,以及 serve-question --start 的后续行)。打印为 <self> <verb>;一个必须加引号的 Windows .cmd 路径(含空格,或任何已带引号的钩子拼写)会打印为 & '<path>' <verb>(PowerShell 字面量,其中的 ' 会加倍),以便 PowerShell 运行它(impeccable_common::launcher,#744)。 可执行文件路径。
IMPECCABLE_SEED_SALT 固定计算 seed 引用时所使用的盐(impeccable_common::seed),从而测试和 oracle 可以打印稳定的引用。正常使用中切勿设置它:每个用户各自的盐才能防止已提交的引用被根据某个 key 计算出来。 ~/.impeccable/seed-salt 的内容,首次使用时创建 128 位随机数。
IMPECCABLE_TELEMETRY_CHANNEL 附加到 X-Impeccable-Client 的小写单词(在本仓库的测试和 CI 中为 test),用于标记测试流量。 无(None)。

其余内容都是 JS 合约自身的环境变量(IMPECCABLE_CONTEXT_DIR、IMPECCABLE_UPDATE_*、IMPECCABLE_STALENESS_CACHE、IMPECCABLE_CATALOG_DIR、IMPECCABLE_API_URL、IMPECCABLE_IMAGE_GEN_FAKE 等),按原样读取。

启动器(launcher/impeccable)目前尚未导出这些变量;如果某个启动器设置了 IMPECCABLE_SKILL_DIR="$dir/.." 和 IMPECCABLE_SELF="$0",则指令中的命令名会变成启动器,而不是平台二进制。

Oracle 说明:使用 IMPECCABLE_SKILL_DIR=<public repo>/skill 运行公共仓库的 tests/oracle/run.mjs(语料库期望本地引用被内联),并将 IMPECCABLE_BIN 设置为 $HOME 之外的路径(harness 先规范化 $HOME,再规范化 bin 路径,因此位于 home 目录下的二进制会呈现为 <HOME>/... 而不是 <IMPECCABLE>)。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 im/impeccable