Files
market/skills/dev-environment-setup/references/probe-snapshot.md
yi-ge 8047c8b0dc fix: 修复 desirecore PR #533 Copilot 评审反馈的 7 项内容问题
[desirecore PR #533](https://github.com/desirecore/desirecore/pull/533) 把
market 全局技能快照同步到主仓库,Copilot 自动评审命中 7 处文档与代码
不一致问题,全部根因在 market 的 skill 文档;本 PR 在源头修复,让下次
sync-global-skills 自然带过去。

修复内容:

1. disable-model-invocation 语义描述反向(3 处文件 × 2 语言 = 5 处编辑)
   - skill-creator/SKILL.md (en-US)
   - skill-creator/SKILL.zh-CN.md
   - manage-skills/SKILL.md (en-US)
   - manage-skills/SKILL.zh-CN.md
   - 注:references/desirecore-format.md 已在 PR #1 解冲突时一并修好

   实际代码逻辑(lib/agent-service/skills/parser.ts):只有显式
   `disable-model-invocation: false` 才会被加入 system prompt 自动加载列表,
   `true` 或缺省都会跳过自动注入、需显式 Skill 工具调用。文档原描述把这两个
   值的语义对调了,且错误地宣称存在 L0/L1 vs L0+L1+L2 的"分层加载机制"
   (runtime 不区分这三个层级,加载就是整篇 SKILL.md)。

2. dev-environment-setup/references/probe-snapshot.md 协议字段类型 / 超时承诺
   - desirecore_port_file: string → boolean(probe.sh 输出 ${PORT_FILE_EXISTS}
     原生 bool;probe.ps1 输出 PowerShell bool;JSON 序列化均为 true/false)
   - "CLI 调用最长 5s" → "CLI 调用依赖工具自身实现,无显式 timeout 包装,
     正常情况通常 <5s 完成"(HTTP probe 确有 0.5s/1s timeout,但 --version
     这类 CLI 没有 timeout 5s 包装,文档原文承诺超出实现)

3. minimax-music-gen 使用过时的 provider 字段(应为 providerId)
   - skills/minimax-music-gen/SKILL.md(3 处)
   - skills/minimax-music-gen/SKILL.zh-CN.md(3 处)
   - 与 sibling minimax-tts/image-gen/video-gen 对齐,使用
     `"providerId": "provider-minimax-media-001"`,避免 media-proxy 路由到
     coding/token plan 等同名 provider

版本与日期:

- skill-creator: 1.0.1 → 1.0.2
- manage-skills: 1.0.2 → 1.0.3
- dev-environment-setup: 2.0.1 → 2.0.2
- minimax-music-gen: 1.1.1 → 1.1.2
- 上述 4 个 SKILL.md 的 metadata.updated_at 与 manifest.json#stats.lastUpdated
  统一为 2026-05-05

i18n 处理:

按 PR #1 修复模式(commit 2a21e8e),同步编辑英文源(SKILL.md = en-US default)
与中文翻译(SKILL.zh-CN.md = source),不动 metadata.i18n.<locale>.source_hash /
translated_at 字段(CI translate.py 维护)。
2026-05-05 00:47:30 +08:00

4.4 KiB
Raw Blame History

环境探测 JSON 协议

probe.sh / probe.ps1 / probe-python.sh / probe-node.sh 输出统一 JSON。Skill 解析 JSON 后再决策,避免逐条 grep。

通用字段

字段 类型 说明
platform "darwin" | "linux" | "win32" 操作系统标识
arch "arm64" | "x64" | ... CPU 架构
desirecore_api string 探测到的 DesireCore agent-service URL不可达时为 ""
desirecore_port_file boolean ~/.desirecore/agent-service.port 是否存在probe.sh / probe.ps1 输出原生 JSON boolean

probe.sh / probe.ps1父级 dev-environment-setup

输出系统级总览:

{
  "platform": "darwin",
  "arch": "arm64",
  "desirecore_api": "https://127.0.0.1:38291",
  "desirecore_port_file": true,
  "tools": {
    "python3": { "available": true, "path": "/opt/homebrew/bin/python3", "version": "3.12.4" },
    "pip3":    { "available": true, "path": "/opt/homebrew/bin/pip3",    "version": "24.0" },
    "node":    { "available": true, "path": "/opt/homebrew/bin/node",    "version": "22.4.1" },
    "npm":     { "available": true, "path": "/opt/homebrew/bin/npm",     "version": "10.8.1" },
    "docker":  { "available": false },
    "podman":  { "available": false },
    "git":     { "available": true, "path": "/usr/bin/git", "version": "2.43.0" }
  },
  "wsl": null
}

Windows 上 wsl 字段值类似 { "installed": true, "version": "2", "defaultDistro": "Ubuntu" }

probe-python.shpython-runtime 专用)

{
  "platform": "darwin",
  "arch": "arm64",
  "desirecore_api": "https://127.0.0.1:38291",
  "system_python": { "path": "/opt/homebrew/bin/python3", "version": "3.12.4" },
  "system_pip": { "path": "/opt/homebrew/bin/pip3", "version": "24.0" },
  "hatch_path": "/Users/wangyi/.desirecore/runtime/hatch/hatch",
  "hatch_version": "1.16.5",
  "hatch_versions": ["3.11", "3.12"],
  "active_venv": "/Users/wangyi/proj/.venv",
  "pep668": false,
  "pyenv_path": "",
  "conda_path": ""
}

字段语义:

  • hatch_path 空字符串表示二进制不存在
  • hatch_versions~/.desirecore/runtime/hatch/local/ 下的目录列表(即已通过 Hatch 安装的 Python 版本)
  • active_venv 取自 $VIRTUAL_ENV 环境变量
  • pep668 检测 /usr/lib/python*/EXTERNALLY-MANAGED 是否存在Debian 12+/Ubuntu 23.04+ 启用)

probe-node.shnodejs-runtime 专用)

{
  "platform": "darwin",
  "arch": "arm64",
  "desirecore_api": "https://127.0.0.1:38291",
  "system_node": { "path": "/opt/homebrew/bin/node", "version": "22.4.1" },
  "system_npm":  { "path": "/opt/homebrew/bin/npm",  "version": "10.8.1" },
  "volta_path": "/Users/wangyi/.desirecore/runtime/volta/volta",
  "volta_version": "2.0.2",
  "volta_tools": {
    "node": ["22.4.1"],
    "pnpm": ["9.5.0"],
    "yarn": [],
    "npm":  []
  },
  "package_json_volta": null,
  "nvm_path": "",
  "fnm_path": "",
  "registry": "https://registry.npmmirror.com/",
  "proxy": ""
}

字段语义:

  • volta_tools 来自 <volta> list --format=plain,按工具分类
  • package_json_volta 若当前目录存在 package.json 且其中有 "volta" 字段,填入对象;否则 null
  • registry / proxy 来自 npm config get registry / npm config get https-proxy

设计约定

  1. JSON 必合法:缺字段也保留键并赋空字符串/null,避免 Claude 解析失败。
  2. 不阻塞:每个外部命令都加 2>/dev/null,失败用空值,不让脚本中途退出。
  3. 超时控制HTTP 探测 0.5s 超时curl --max-time/PowerShell TimeoutSecCLI 调用(--version 等)依赖工具自身实现,无显式 timeout 包装,正常情况通常 <5s 完成。
  4. 跨平台probe.sh / probe-python.sh / probe-node.sh 共用 POSIX 子集Windows 同等功能由 probe.ps1 提供仅父级提供python/nodejs 子 skill 可由 PowerShell 直接 invoke 父级或自行实现)。
  5. 路径展开:所有 ~ 在 JSON 中展开为绝对路径,避免下游解析歧义。

调用约定

SNAPSHOT=$(bash skills/python-runtime/scripts/probe-python.sh)
echo "$SNAPSHOT" | jq .

# 关键字段判定
HATCH=$(echo "$SNAPSHOT" | jq -r .hatch_path)
[ -n "$HATCH" ] && [ "$HATCH" != "null" ] && echo "Hatch 可用"

PowerShell 等价:

$snapshot = & "$PWD\skills\dev-environment-setup\scripts\probe.ps1" | ConvertFrom-Json
if ($snapshot.tools.node.available) { ... }