project-import
从 TAPD 链接或 Git 仓库地址一键导入项目资料到本地标准目录。用户只需粘贴链接,skill 自动识别类型、检测凭证、引导配置、拉取资料并整理归档。 当用户提到"拉取项目资料"、"导入需求"、"克隆代码"、"把 TAPD 的需求拉到本地"、粘贴了 tapd.cn 链接或 git 仓库地址时,使用此 skill。
Purpose
产品经理和开发在启动 AI 辅助工作流时,第一步往往是把项目的需求文档和代码拉到本地。这个过程涉及 TAPD 凭证配置、Git Token 申请、API 命令拼装等繁琐步骤。
这个 skill 把这些步骤封装成"粘贴链接 → 自动处理"的体验:用户不需要记任何命令格式,只需要提供链接,skill 负责识别、检查、拉取、整理。
交互流程
按以下顺序引导用户,每一步确认后再进入下一步。
Step 1: 接收链接并识别类型
询问用户:"请粘贴你要导入的链接(TAPD 页面链接、Git 仓库地址,或者文档链接)。可以一次粘贴多个。"
根据链接内容自动识别类型:
TAPD 链接识别规则:
匹配 tapd.cn 域名下的 URL,从中提取 workspace_id 和实体信息。
URL 模式:https://www.tapd.cn/tapd_fe/{workspace_id}/{entity_type}/detail/{entity_id}
示例:https://www.tapd.cn/tapd_fe/12345678/story/detail/1112345678001256446
从 URL 中提取:
workspace_id:路径中tapd_fe/后面的数字(如12345678)entity_type:story→ stories,bug→ bugentity_id:detail/后面的数字(如1112345678001256446)
Git 仓库链接识别规则:
匹配以下模式之一:
- 包含
.git后缀的 URL git@开头的 SSH 地址- 包含
gitlab或github的 URL - 用户明确说明是 Git 仓库
其他链接:
如果链接不属于以上两类,提示用户确认链接类型,或作为文档链接处理。
识别完成后,向用户确认:"识别到以下内容:[列出识别结果]。是否正确?"
Step 2: 检测凭证并引导配置
根据识别到的链接类型,检查对应凭证是否已配置。
TAPD 凭证检测:
检查环境变量 TAPD_ACCESS_TOKEN 是否存在:
echo "${TAPD_ACCESS_TOKEN:+已配置}" || echo "未配置"
如果未配置,引导用户:
- 告知用户:"TAPD 需要一个访问令牌才能拉取数据。"
- 指引获取方式:"登录 TAPD → 右上角头像 → 个人设置 → 安全与认证 → 创建个人访问令牌"
- 指引配置方式:"在终端执行以下命令(或添加到 ~/.zshrc 持久化):"
export TAPD_ACCESS_TOKEN="你的令牌" - 配置完成后,用一个简单的 API 调用验证令牌是否有效:
如果返回项目列表则凭证有效。如果报错,提示用户检查令牌。python scripts/tapd.py get_user_participant_projects
Git 凭证检测(GitLab 私有部署):
尝试对目标仓库执行 git ls-remote 检测访问权限:
git ls-remote --exit-code <仓库地址> HEAD 2>&1
如果失败,引导用户:
- 告知用户:"Git 仓库需要 Personal Access Token 才能访问。"
- 指引获取方式:"登录 GitLab → Settings → Access Tokens → 创建一个具有
read_repository权限的令牌" - 指引配置方式——推荐使用 Git 凭证存储,避免每次输入:
git config --global credential.helper store # 然后在克隆时输入一次用户名和 Token 即可
凭证检测通过后,告知用户:"凭证检测通过,可以开始拉取。"
Step 3: 选择拉取范围并执行
根据链接类型提供不同的范围选项。
TAPD 需求拉取:
当用户粘贴的是需求详情链接时,直接拉取该条需求,无需额外选择。
如果用户需要拉取更多需求,可以:
- 继续粘贴更多链接——逐条拉取
- 按关键词搜索拉取——用户提供关键词,模糊匹配
- 拉取项目下全部需求——拉取 workspace 下所有需求(超过 100 条时提醒用户)
执行拉取时调用 tapd skill 的脚本。tapd.py 脚本位于 tapd skill 目录下,路径为:
~/.claude/skills/tapd/scripts/tapd.py
拉取单条需求:
python ~/.claude/skills/tapd/scripts/tapd.py get_stories_or_tasks \
--workspace_id {workspace_id} \
--entity_type stories \
--id {entity_id}
按关键词搜索拉取:
python ~/.claude/skills/tapd/scripts/tapd.py get_stories_or_tasks \
--workspace_id {workspace_id} \
--entity_type stories \
--name "%关键词%"
Git 仓库拉取:
提供选项:
- 克隆完整仓库——
git clone <url> - 只克隆最新版本(浅克隆)——
git clone --depth 1 <url>,节省时间和空间 - 克隆指定分支——
git clone -b <branch> <url>
推荐默认使用浅克隆,因为 AI 分析代码通常不需要完整历史。
Step 4: 整理到标准目录并生成导入摘要
所有拉取的资料整理到以下目录结构:
{project_name}/
└── sources/
├── tapd-requirements/ # TAPD 需求
│ ├── raw/ # 原始 JSON 数据
│ │ ├── story_{id}.json
│ │ └── ...
│ └── docs/ # Markdown 可读版
│ ├── story_{id}.md
│ └── ...
├── codebase/ # Git 代码仓库
│ └── {repo_name}/
└── docs/ # 其他文档
└── ...
TAPD 需求转 Markdown 格式:
每条需求生成一个 Markdown 文件,格式如下:
# {需求标题}
- **ID**: {id}
- **状态**: {status}
- **优先级**: {priority}
- **创建人**: {creator}
- **处理人**: {owner}
- **迭代**: {iteration}
- **创建时间**: {created}
## 需求描述
{description 内容,HTML 转 Markdown}
## 验收标准
{如有}
生成 import-summary.md:
拉取完成后,在 {project_name}/ 根目录生成导入摘要:
# 项目资料导入摘要
## 导入时间
{timestamp}
## TAPD 需求
- **项目 ID**: {workspace_id}
- **拉取范围**: {全量/迭代X/指定需求}
- **需求数量**: {count} 条
- **需求列表**:
| ID | 标题 | 状态 | 优先级 |
|----|------|------|--------|
| ... | ... | ... | ... |
## 代码仓库
- **仓库地址**: {git_url}
- **分支**: {branch}
- **克隆方式**: {完整/浅克隆}
## 目录结构
{tree 命令输出}
## 下一步建议
使用 `knowledge-init` skill 基于这些资料生成项目知识库。
多链接批量处理
用户可以一次粘贴多个链接。处理逻辑:
- 逐个识别所有链接的类型
- 按类型分组(TAPD / Git / 其他)
- 统一检测所有需要的凭证
- 确认后批量执行拉取
- 所有资料整理到同一个项目目录下
项目名称确定
按以下优先级确定项目名称:
- 用户主动指定
- Git 仓库名(如果有)
- TAPD 项目名(通过
get_workspace_info获取) - 询问用户
常见问题处理
TAPD 令牌过期: API 返回 401 时,提示用户重新生成令牌并更新环境变量。
Git 克隆超时: 建议用户检查网络/代理配置,或改用浅克隆。
需求量过大: 超过 100 条时提醒用户,建议按迭代分批拉取。
链接无法识别: 请用户确认链接类型,或手动指定是 TAPD / Git / 文档。
Examples
Example 1: 粘贴单条 TAPD 需求链接
用户输入: "帮我把这个需求拉下来 https://www.tapd.cn/tapd_fe/12345678/story/detail/1112345678001256446"
Skill 行为:
- 识别为 TAPD 需求链接,提取 workspace_id=12345678, entity_id=1112345678001256446
- 检测 TAPD_ACCESS_TOKEN → 已配置 → 跳过引导
- 提供范围选项,用户选"只拉这一条"
- 执行拉取,保存 JSON + Markdown,生成 import-summary.md
Example 2: 粘贴 Git 仓库 + 多条 TAPD 链接
用户输入: "把这个项目的代码和需求都拉下来: [email protected]:myteam/myproject.git https://www.tapd.cn/tapd_fe/12345678/story/detail/1112345678001256446 https://www.tapd.cn/tapd_fe/12345678/story/detail/1112345678001256789"
Skill 行为:
- 识别三个链接:1 个 Git SSH 地址 + 2 条 TAPD 需求链接
- 分别检测 Git 和 TAPD 凭证
- Git: 推荐浅克隆 → TAPD: 逐条拉取两条需求
- 统一整理到同一项目目录,生成 import-summary.md