scripts/install-mao-agent.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
# 一键安装 mao-agent(Node.js ≥ 20、git、npm)。
# curl -fsSL https://raw.githubusercontent.com/DC-ET/mao/main/scripts/install-mao-agent.sh | bash
# 指定版本 / 源码:
# curl -fsSL ... | MAO_AGENT_REF=v0.0.38 bash
# MAO_AGENT_SRC=/path/to/mao bash scripts/install-mao-agent.sh
set -euo pipefail
REPO="${MAO_AGENT_REPO:-https://github.com/DC-ET/mao.git}"
REF="${MAO_AGENT_REF:-main}"
WORKDIR="${MAO_AGENT_WORKDIR:-${HOME}/.mao/agent-cli/src}"
SRC="${MAO_AGENT_SRC:-}"
die() {
echo "mao-agent 安装失败: $*" >&2
exit 1
}
command -v node >/dev/null 2>&1 || die "未找到 node,请先安装 Node.js ≥ 20:https://nodejs.org/"
command -v npm >/dev/null 2>&1 || die "未找到 npm"
NODE_MAJOR="$(node -p 'parseInt(process.versions.node, 10)')"
if [[ "${NODE_MAJOR}" -lt 20 ]]; then
die "需要 Node.js ≥ 20,当前 $(node -v)"
fi
resolve_pkg() {
if [[ -n "${SRC}" ]]; then
if [[ -f "${SRC}/package.json" && -f "${SRC}/bin/mao-agent.js" ]]; then
echo "${SRC}"
return
fi
if [[ -f "${SRC}/agent-cli/package.json" ]]; then
echo "${SRC}/agent-cli"
return
fi
die "MAO_AGENT_SRC=${SRC} 下找不到 agent-cli"
fi
command -v git >/dev/null 2>&1 || die "未找到 git"
mkdir -p "$(dirname "${WORKDIR}")"
if [[ -d "${WORKDIR}/.git" ]]; then
echo "更新 ${WORKDIR} (${REF}) ..." >&2
git -C "${WORKDIR}" fetch --depth 1 origin "${REF}"
git -C "${WORKDIR}" checkout --force FETCH_HEAD
git -C "${WORKDIR}" sparse-checkout set agent-cli >/dev/null 2>&1 || true
else
rm -rf "${WORKDIR}" >/dev/null
echo "克隆 ${REPO} (${REF}) → ${WORKDIR} ..." >&2
git clone --depth 1 --filter=blob:none --sparse --branch "${REF}" "${REPO}" "${WORKDIR}"
git -C "${WORKDIR}" sparse-checkout set agent-cli
fi
echo "${WORKDIR}/agent-cli"
}
PKG="$(resolve_pkg)"
[[ -f "${PKG}/package.json" ]] || die "未找到 ${PKG}/package.json"
echo "安装 ${PKG} ..." >&2
cd "${PKG}"
if [[ -f package-lock.json ]]; then
npm ci
else
npm install
fi
npm run build
# 覆盖旧的 npm link / 上次全局安装,方便重复执行升级
npm install -g . --force
BIN="$(command -v mao-agent || true)"
[[ -n "${BIN}" ]] || die "npm install -g 成功,但 PATH 里没有 mao-agent。若使用 nvm,请新开一个终端或检查 npm prefix。"
echo
echo "已安装: ${BIN}"
"${BIN}" --version
echo "下一步: mao-agent login # 然后 mao-agent 或 mao-agent --local"