Files
market/skills/nodejs-runtime/scripts/probe-node.sh
xyx 4f7037a6b6 fix: replace hardcoded ~/.desirecore paths with ${DESIRECORE_ROOT} variable (#16)
## Summary

- 将所有技能文件中的硬编码 `~/.desirecore/` 和 `$HOME/.desirecore/` 路径替换为
`${DESIRECORE_ROOT}/` 变量
- 递增 manifest.json version 至 1.2.1

## Why

dev 模式下 `DESIRECORE_HOME=~/.desirecore-dev`,硬编码路径导致技能读取错误的端口文件和目录。主仓库的
`variable-substitutor.ts` 会在运行时将 `${DESIRECORE_ROOT}` 替换为实际根目录。

## Test plan

- [ ] `npm run dev` 启动后触发任意技能,确认端口路径解析为
`~/.desirecore-dev/agent-service.port`
- [ ] prod 模式确认路径为 `~/.desirecore/agent-service.port`

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-05-29 15:36:19 +08:00

120 lines
3.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# nodejs-runtime probe: 输出 Node.js 环境快照JSON
# 协议:见 ../../dev-environment-setup/references/probe-snapshot.md
set +e
detect_tool() {
local name="$1"
local path
path=$(command -v "$name" 2>/dev/null)
if [ -z "$path" ]; then
printf '{"path":"","version":""}'
return
fi
local version
version=$("$name" --version 2>&1 | head -n1 | grep -oE '[0-9]+\.[0-9]+(\.[0-9]+)?' | head -n1)
printf '{"path":"%s","version":"%s"}' "$path" "${version:-}"
}
# ── 平台 ────────────────────────────────
case "$(uname -s)" in
Darwin) PLATFORM="darwin" ;;
Linux) PLATFORM="linux" ;;
*) PLATFORM="other" ;;
esac
ARCH=$(uname -m)
case "$ARCH" in
arm64|aarch64) ARCH="arm64" ;;
x86_64|amd64) ARCH="x64" ;;
esac
# ── DesireCore API ──────────────────────
DESIRECORE_API=""
PORT_FILE="${DESIRECORE_ROOT}/agent-service.port"
if [ -r "$PORT_FILE" ]; then
PORT=$(cat "$PORT_FILE" 2>/dev/null | tr -d '[:space:]')
if [ -n "$PORT" ]; then
if curl -sk --max-time 0.5 "https://127.0.0.1:${PORT}/api/runtime/environment" >/dev/null 2>&1; then
DESIRECORE_API="https://127.0.0.1:${PORT}"
fi
fi
fi
# ── 系统 Node / npm ─────────────────────
SYS_NODE=$(detect_tool node)
SYS_NPM=$(detect_tool npm)
# ── DesireCore Volta ────────────────────
VOLTA_BIN="${DESIRECORE_ROOT}/runtime/volta/volta"
VOLTA_PATH=""
VOLTA_VERSION=""
if [ -x "$VOLTA_BIN" ]; then
VOLTA_PATH="$VOLTA_BIN"
VOLTA_VERSION=$("$VOLTA_BIN" --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+(\.[0-9]+)?' | head -n1)
fi
# Volta 已装工具(直接读 image 目录最稳)
VOLTA_IMG="${DESIRECORE_ROOT}/runtime/volta/tools/image"
list_dir() {
local dir="$1"
if [ -d "$dir" ]; then
local items
items=$(ls -1 "$dir" 2>/dev/null | sort -V | tr '\n' ',' | sed 's/,$//')
if [ -n "$items" ]; then
echo "[\"$(echo "$items" | sed 's/,/","/g')\"]"
return
fi
fi
echo "[]"
}
NODE_VERSIONS=$(list_dir "$VOLTA_IMG/node")
PNPM_VERSIONS=$(list_dir "$VOLTA_IMG/pnpm")
YARN_VERSIONS=$(list_dir "$VOLTA_IMG/yarn")
NPM_VERSIONS=$(list_dir "$VOLTA_IMG/npm")
# ── package.json#volta ──────────────────
PKG_VOLTA="null"
if [ -f "package.json" ]; then
PKG_VOLTA=$(python3 -c "import json,sys; d=json.load(open('package.json')); print(json.dumps(d.get('volta')))" 2>/dev/null || echo "null")
[ -z "$PKG_VOLTA" ] && PKG_VOLTA="null"
fi
# ── 社区方案 ────────────────────────────
NVM_PATH=""
[ -s "$HOME/.nvm/nvm.sh" ] && NVM_PATH="$HOME/.nvm/nvm.sh"
FNM_PATH=$(command -v fnm 2>/dev/null)
# ── npm config ──────────────────────────
REGISTRY=""
PROXY=""
if command -v npm >/dev/null 2>&1; then
REGISTRY=$(npm config get registry 2>/dev/null | tr -d '\r\n')
PROXY=$(npm config get https-proxy 2>/dev/null | tr -d '\r\n')
[ "$PROXY" = "null" ] && PROXY=""
fi
# ── 输出 JSON ───────────────────────────
cat <<EOF
{
"platform": "${PLATFORM}",
"arch": "${ARCH}",
"desirecore_api": "${DESIRECORE_API}",
"system_node": ${SYS_NODE},
"system_npm": ${SYS_NPM},
"volta_path": "${VOLTA_PATH}",
"volta_version": "${VOLTA_VERSION}",
"volta_tools": {
"node": ${NODE_VERSIONS},
"pnpm": ${PNPM_VERSIONS},
"yarn": ${YARN_VERSIONS},
"npm": ${NPM_VERSIONS}
},
"package_json_volta": ${PKG_VOLTA},
"nvm_path": "${NVM_PATH}",
"fnm_path": "${FNM_PATH:-}",
"registry": "${REGISTRY}",
"proxy": "${PROXY}"
}
EOF