AgentSkillsCN

install-dependency

在单体仓库环境下安装依赖项。当用户请求安装软件包、添加依赖或配置Python/JS软件包时使用。触发条件包括:“安装X”、“添加软件包”、“配置依赖”、“我需要lodash”、“安装docling”。

SKILL.md
--- frontmatter
name: install-dependency
description: >
  Install dependencies with monorepo awareness. Use when: user asks to install
  a package, add a dependency, or setup Python/JS packages. Triggers: "install X",
  "add package", "setup dependency", "I need lodash", "install docling".
allowed-tools:
  - Bash
  - AskUserQuestion

Install Dependency

Monorepo-aware dependency installation using bundled scripts.

Quick Reference

bash
# Set skill directory
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Workflow
source "$SKILL_DIR/scripts/setup-env.sh"           # 1. Setup env
"$SKILL_DIR/scripts/scan.sh" <pkg> <type>          # 2. Check existing
# 3. Prompt user if needed (see below)
"$SKILL_DIR/scripts/install-{python,js,system}.sh" <pkg> [shared|local]  # 4. Install
"$SKILL_DIR/scripts/verify.sh" <pkg> <type>        # 5. Verify
"$SKILL_DIR/scripts/cleanup.sh"                    # 6. Cleanup (optional)

Types

TypeScanInstallVerify
python.venv/bin/pip showpip installpython -c "import X"
jsnode_modules checkbun addbun pm ls X
systemcommand -vapt/brew/dnfwhich X && X --version

Workflow

1. Setup Environment

bash
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SKILL_DIR/scripts/setup-env.sh"

Sets $LOCAL_TMP, $GIT_ROOT, overrides $TMPDIR to avoid /tmp/claude conflicts.

2. Scan for Existing Package

bash
if "$SKILL_DIR/scripts/scan.sh" <package> <type>; then
  echo "✓ Package already installed"
  exit 0
fi

Exit codes: 0=found, 1=not found, 2=usage error.

3. Prompt User (if needed)

Decision tree:

yaml
if_found_in_parent:
  action: Report "✓ <package> already at <path>"
  install: false

if_at_git_root:
  action: Install locally (no prompt)
  mode: local

if_in_subproject_not_found:
  action: Use AskUserQuestion
  options:
    - "Shared at {GIT_ROOT} (recommended)" → mode=shared
    - "Local at {PWD} (isolated)" → mode=local

AskUserQuestion example:

yaml
question: "Where should {package} be installed?"
header: "Location"
options:
  - label: "Shared at {GIT_ROOT} (recommended)"
    description: "Install once, available to all subprojects"
  - label: "Local at {PWD} (isolated)"
    description: "Install only for this project"

4. Install Package

Python:

bash
"$SKILL_DIR/scripts/install-python.sh" <package> [shared|local]

JavaScript:

bash
"$SKILL_DIR/scripts/install-js.sh" <package> [shared|local]

System (requires approval):

bash
# First check needs approval
"$SKILL_DIR/scripts/install-system.sh" <package>
# Output: NEEDS_APPROVAL:<package> via apt/brew/dnf

# After AskUserQuestion approval:
APPROVED=1 "$SKILL_DIR/scripts/install-system.sh" <package>

5. Verify Installation

bash
"$SKILL_DIR/scripts/verify.sh" <package> <type> [module_name]

Optional module_name for Python packages where import name differs (e.g., PIL vs pillow).

6. Cleanup (optional)

bash
"$SKILL_DIR/scripts/cleanup.sh"

Removes $LOCAL_TMP (.tmp/) directory.

Output Format

code
✓ Installed <package>
  Location: <path>
  Method: <pip/bun/apt/brew/dnf>

Scripts Reference

ScriptArgsExit CodesOutput
setup-env.sh(none, source it)-Sets env vars
scan.shpkg type0=found, 1=not foundFOUND:path or NOT_FOUND
install-python.shpkg [shared|local]0=successINSTALLED:path
install-js.shpkg [shared|local]0=successINSTALLED:path
install-system.shpkg0=successNEEDS_APPROVAL or INSTALLED:system
verify.shpkg type [module]0=success, 1=failedVERIFIED:path or FAILED
cleanup.sh(none)0=successCLEANED:path