Ctrl K
ComunidadGuías…

scripts/install-mao-agent.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/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"