依赖同步技能Skill dependency-sync

自动检测代码修改中的新依赖并同步更新包清单,确保代码依赖与清单文件保持一致,适用于多种编程语言和包管理器。

DevOps 0 次安装 0 次浏览 更新于 3/2/2026

dependency-sync

依赖同步技能

自动检测修改后的代码文件中的新导入,并更新包清单。此技能确保当代码编写使用新依赖时,相应的清单文件(package.json、pyproject.toml、requirements.txt等)会自动更新。

变量

变量 默认值 描述
AUTO_INSTALL true 自动安装检测到的依赖
PROMPT_BEFORE_INSTALL false 安装前询问用户(覆盖AUTO_INSTALL)
INCLUDE_DEV_DEPS true 检测开发依赖(测试框架、linters)
COMMIT_CHANGES true 将清单更改作为任务的一部分提交
TRIGGER_DOCS_AUDIT true 添加依赖后运行docs-audit --new-only

指令

强制性 - 按照下面的工作流程步骤顺序进行。不要跳过步骤。

  1. 从git diff或实施上下文中检测修改过的文件
  2. 从修改过的文件中解析导入/需求
  3. 与当前清单依赖进行比较
  4. 确定项目的包管理器
  5. 安装缺失的依赖
  6. 可选触发新库的docs-audit

红旗 - 停止并重新考虑

如果你即将:

  • 在不验证导入是否真的使用的情况下安装包
  • 跳过清单检测(假设包管理器)
  • 安装到错误的清单(例如,devDependencies vs dependencies)
  • 在不检查包是否存在于注册表的情况下安装

停止 -> 验证导入是否真实 -> 检查清单 -> 然后安装

工作流程

1. 收集修改过的文件

确定当前实施中修改过的文件:

# 如果在git上下文
git diff --name-only HEAD~1 HEAD -- "*.py" "*.ts" "*.js" "*.tsx" "*.jsx" "*.go" "*.rs"

# 或从任务上下文 - 被写入/编辑的文件

2. 提取导入

根据语言解析每个修改过的文件中的导入:

语言 导入模式
Python import X, from X import Y
TypeScript/JavaScript import X from 'Y', require('Y')
Go import "X"
Rust use X::Y, extern crate X

3. 检测包管理器

检查清单文件以确定包管理器:

清单 包管理器 安装命令
pyproject.toml(带uv) uv uv add <package>
pyproject.toml(poetry) poetry poetry add <package>
requirements.txt pip pip install <package>
package.json npm/yarn/pnpm npm install <package>
Cargo.toml cargo cargo add <package>
go.mod go go get <package>
pubspec.yaml pub flutter pub add <package>

4. 比较依赖

对于每个提取的导入:

  1. 将导入名称规范化为包名称(例如,from PIL import Image -> pillow
  2. 检查包是否存在于清单中
  3. 如果缺失,添加到安装列表

5. 安装依赖

执行缺失依赖的安装命令:

# Python with uv
uv add <package1> <package2>

# Node.js
npm install <package1> <package2>

# Rust
cargo add <package1> <package2>

# Go
go get <package1> <package2>

6. 安装后操作

如果TRIGGER_DOCS_AUDIT为true且添加了新依赖:

  1. 运行/ai-dev-kit:docs-audit --new-only
  2. 如果文档缺失,建议/ai-dev-kit:docs-add-stack

食谱

Python导入映射

  • IF: 解析Python导入
  • THEN: 阅读cookbook/python-imports.md
  • RESULT: 规范化的包名称

Node导入映射

  • IF: 解析JavaScript/TypeScript导入
  • THEN: 阅读cookbook/node-imports.md
  • RESULT: 规范化的包名称

分类规则

  • IF: 确定依赖是开发还是生产
  • THEN: 阅读cookbook/dependency-classification.md
  • RESULT: 清单中正确的目标

快速参考

导入到包映射

导入 包名称 注释
PIL pillow Python成像
cv2 opencv-python OpenCV
yaml pyyaml YAML解析器
sklearn scikit-learn ML库
bs4 beautifulsoup4 HTML解析
pg pg(npm)/asyncpg(py) PostgreSQL
@tanstack/react-query @tanstack/react-query 直接匹配

开发依赖指示器

模式 分类
pytest, vitest, jest 测试框架(开发)
eslint, ruff, black Linter(开发)
@types/* 类型定义(开发)
*-dev, *-debug 开发工具(开发)

集成点

此技能被调用:

  1. 由lane-executor:在任务中实现代码后
  2. 由测试工程师:在编写需要新测试依赖的测试后
  3. 手动:通过/ai-dev-kit:dependency-sync命令

在Lane Executor中的示例集成

## 实施后步骤

完成实施后:
1. 运行`dependency-sync`技能以更新清单
2. 运行`post-impl-docs`技能以更新文档
3. 验证构建/测试仍然通过

输出

成功报告

{
  "status": "success",
  "dependencies_added": [
    {"name": "asyncpg", "version": "^0.29.0", "manifest": "pyproject.toml", "type": "production"},
    {"name": "pytest-asyncio", "version": "^0.23.0", "manifest": "pyproject.toml", "type": "development"}
  ],
  "manifest_updated": "pyproject.toml",
  "commit_sha": "abc123",
  "docs_audit_triggered": true
}

无变化报告

{
  "status": "no_changes",
  "message": "所有导入已经在清单中",
  "files_scanned": 5,
  "imports_found": 12,
  "imports_matched": 12
}