--- name: ai-proj description: ai-proj 任务与需求管理。用于创建/查询/更新需求、任务、文档。当用户提到 ai-proj、任务管理、需求管理、REQ-XXX 相关操作时自动激活。 --- # ai-proj MCP 技能 通过 MCP (Model Context Protocol) 直接调用 ai-proj 服务,管理任务、需求和文档。 ## 功能概述 | 模块 | 功能 | |------|------| | **任务管理** | 创建、查询、更新、删除任务,子任务管理 | | **需求管理** | 需求全生命周期:草稿→评审→开发→完成 | | **文档管理** | 任务文档的创建、编辑、同步 | | **计时器** | 任务计时、时间追踪 | | **每日聚焦** | 今日任务规划、智能推荐 | | **工作笔记** | 知识管理、笔记搜索 | | **远程同步** | 本地↔远程数据同步 | --- ## 快速开始 ### 常用命令速查 ``` # 任务操作 "创建任务: xxx" → mcp__ai-proj__create_task "查看任务列表" → mcp__ai-proj__list_tasks "开始任务 123" → mcp__ai-proj__start_task "完成任务 123" → mcp__ai-proj__complete_task "查找任务 xxx" → mcp__ai-proj__find_task # 需求操作 "创建需求: xxx" → mcp__ai-proj__create_requirement "查看需求列表" → mcp__ai-proj__list_requirements "提交需求 123 评审" → mcp__ai-proj__requirement_action (submit) "批准需求 123" → mcp__ai-proj__requirement_action (approve) # 文档操作 "为任务 123 创建文档" → mcp__ai-proj__create-and-attach "查看任务 123 的文档" → mcp__ai-proj__get_task_document # 今日聚焦 "查看今日任务" → mcp__ai-proj__get_daily_focus_tasks "添加任务到今日聚焦" → mcp__ai-proj__add_daily_focus_task # 计时器 "开始计时任务 123" → mcp__ai-proj__start_task_with_timer "停止计时" → mcp__ai-proj__stop_timer ``` --- ## 一、任务管理 ### 1.1 创建任务 **MCP 函数**: `mcp__ai-proj__create_task` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | title | string | ✅ | 任务标题 | | projectId | number | ❌ | 项目ID,默认为1 | **自然语言示例**: - "创建任务: 实现用户登录功能" - "新建一个任务叫做数据库优化" - "在项目2中创建任务: API接口开发" **返回示例**: ```json { "id": 5069, "title": "实现用户登录功能", "status": "todo", "project_id": 1 } ``` ### 1.2 查看任务列表 **MCP 函数**: `mcp__ai-proj__list_tasks` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | projectId | number | ❌ | 项目ID筛选 | | status | array | ❌ | 状态筛选: draft/planning/todo/in_progress/testing/completed/cancelled/on_hold/suspended/blocked/archived | | priority | array | ❌ | 优先级筛选: low/medium/high | | search | string | ❌ | 搜索关键词 | | page | number | ❌ | 页码,从1开始 | | limit | number | ❌ | 每页数量,默认20,最大100 | | sort_by | string | ❌ | 排序字段: created_at/updated_at/due_date/priority/title | | sort_order | string | ❌ | 排序方向: asc/desc | | response_mode | string | ❌ | 响应模式: minimal/compact/full | **自然语言示例**: - "查看所有任务" - "列出进行中的任务" - "查看高优先级任务" - "搜索包含登录的任务" ### 1.3 查找任务 **MCP 函数**: `mcp__ai-proj__find_task` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | number | ❌ | 任务ID(优先使用) | | titlePattern | string | ❌ | 标题搜索关键词 | **自然语言示例**: - "查找任务 5069" - "搜索任务名包含登录的" ### 1.4 获取任务详情 **MCP 函数**: `mcp__ai-proj__get_detailed_task_info` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | taskId | number | ✅ | 任务ID | **返回**: 包含父任务、同级任务、子任务的格式化信息 ### 1.5 更新任务 **MCP 函数**: `mcp__ai-proj__update_task` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | number | ✅ | 任务ID | | updates | object | ✅ | 更新字段 | **updates 支持的字段**: - `title`: 新标题 - `description`: 新描述 - `status`: 新状态 (draft/planning/todo/in_progress/testing/completed/cancelled/on_hold/suspended/blocked/archived) - `priority`: 新优先级 (low/medium/high) - `due_date`: 截止日期 (ISO 8601) - `assignee_id`: 负责人ID **自然语言示例**: - "把任务 5069 的状态改为进行中" - "更新任务 5069 的优先级为高" - "修改任务 5069 的标题为: 新标题" ### 1.6 任务状态操作 **开始任务**: `mcp__ai-proj__start_task` ``` 参数: id (number) - 任务ID 说明: 将任务状态改为 in_progress ``` **完成任务**: `mcp__ai-proj__complete_task` ``` 参数: id (number) - 任务ID 说明: 将任务状态改为 completed ``` **暂停任务**: `mcp__ai-proj__pause_task` ``` 参数: id (number) - 任务ID 说明: 将任务状态改为 on_hold ``` **删除任务**: `mcp__ai-proj__delete_task` ``` 参数: - id (number) - 任务ID - force (boolean) - 是否强制删除(包含子任务) ``` ### 1.7 子任务管理 **创建子任务**: `mcp__ai-proj__create_subtask` ``` 参数: - parentId (number) - 父任务ID - title (string) - 子任务标题 ``` **创建兄弟任务**: `mcp__ai-proj__create_sibling_task` ``` 参数: - siblingId (number) - 兄弟任务ID(参考任务) - title (string) - 新任务标题 - description (string) - 任务描述 - priority (string) - 优先级: low/medium/high - status (string) - 状态 ``` **获取子任务**: `mcp__ai-proj__get_task_children` ``` 参数: parentId (number) - 父任务ID ``` ### 1.8 移动任务 **MCP 函数**: `mcp__ai-proj__move_task` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | number | ✅ | 任务ID | | targetProjectId | number | ✅ | 目标项目ID | --- ## 二、需求管理 ### 2.1 创建需求 **MCP 函数**: `mcp__ai-proj__create_requirement` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | title | string | ✅ | 需求标题 | | projectId | number | ✅ | 项目ID | | description | string | ❌ | 需求描述 | | priority | string | ❌ | 优先级: low/medium/high/urgent | | category | string | ❌ | 类别: feature/bug/improvement/documentation/other | | allowSelfApprove | boolean | ❌ | 允许自审批(自动审批时需设为 true) | **创建需求必填清单**: - [ ] `title` - 需求标题 - [ ] `projectId` - 所属项目(不要遗漏!) - [ ] `priority` - 优先级 - [ ] `description` - 需求描述 > **注意**: 后端已实现默认截止日期:未填 `due_date` 时按优先级自动设置(urgent +1天、high +3天、medium +7天、low +14天)。MCP `create_requirement` 不支持 `due_date` 参数,如需自定义截止日期,创建后通过 REST API 更新。 **自然语言示例**: - "创建需求: 用户权限管理功能" - "新建一个高优先级需求: 性能优化" ### 2.2 查看需求列表 **MCP 函数**: `mcp__ai-proj__list_requirements` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | project_id | number | ❌ | 项目ID筛选 | | status | array | ❌ | 状态筛选: draft/pending/reviewing/approved/rejected/archived | | priority | array | ❌ | 优先级筛选 | | category | array | ❌ | 类别筛选 | | search | string | ❌ | 搜索关键词 | | page | number | ❌ | 页码 | | page_size | number | ❌ | 每页数量 | | response_mode | string | ❌ | 响应模式: minimal/compact/full | ### 2.3 获取需求详情 **MCP 函数**: `mcp__ai-proj__get_requirement` **参数**: `id` (number) - 需求ID ### 2.4 更新需求 **MCP 函数**: `mcp__ai-proj__update_requirement` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | number | ✅ | 需求ID | | updates | object | ✅ | 更新字段 | **updates 支持的字段**: title, description, priority, category, allow_self_approve > **已知限制**: MCP `update_requirement` 工具**不支持**更新 `project_id` 和 `due_date` 字段。 > 如需更新这两个字段,必须直接调用后端 REST API: > ```bash > # Dev 环境 > curl -s -X PUT "http://localhost:8080/api/v1/requirements/{id}" \ > -H "Content-Type: application/json" \ > -H "X-API-Key: {TASK_API_TOKEN}" \ > -d '{"project_id": 1, "due_date": "2026-02-27T00:00:00Z"}' > > # 生产环境 > curl -s -X PUT "https://ai.pipexerp.com/api/v1/requirements/{id}" \ > -H "Content-Type: application/json" \ > -H "X-API-Key: {SYNC_REMOTE_API_KEY}" \ > -d '{"project_id": 1, "due_date": "2026-02-27T00:00:00Z"}' > ``` > 注意:`due_date` 必须使用 RFC3339 格式(如 `2026-02-27T00:00:00Z`),`YYYY-MM-DD` 格式会返回 BAD_REQUEST。 ### 2.5 需求工作流 **MCP 函数**: `mcp__ai-proj__requirement_action` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | number | ✅ | 需求ID | | action | string | ✅ | 操作类型: submit/approve/reject/withdraw/archive | | reason | string | ❌ | 拒绝原因(reject时必填) | | comment | string | ❌ | 批准意见 | **工作流状态图**: ``` draft → [submit] → pending → [approve] → approved → [reject] → rejected pending → [withdraw] → draft approved → [archive] → archived ``` **自然语言示例**: - "提交需求 123 进行评审" - "批准需求 123" - "拒绝需求 123,原因:需求不完整" - "撤回需求 123" - "归档需求 123" ### 2.6 需求-任务关联 **关联任务到需求**: `mcp__ai-proj__link_tasks_to_requirement` ``` 参数: - requirementId (number) - 需求ID - taskIds (array) - 任务ID列表 - linkComment (string) - 关联备注 ``` **取消关联**: `mcp__ai-proj__unlink_task_from_requirement` ``` 参数: - requirementId (number) - 需求ID - taskId (number) - 任务ID ``` **获取需求关联的任务**: `mcp__ai-proj__get_requirement_tasks` ``` 参数: - requirementId (number) - 需求ID - page, page_size - 分页参数 ``` ### 2.7 需求统计与历史 **获取统计**: `mcp__ai-proj__get_requirement_statistics` ``` 参数: id (number) - 需求ID 返回: 关联任务数、完成率等统计信息 ``` **获取历史**: `mcp__ai-proj__get_requirement_history` ``` 参数: id (number), page, page_size 返回: 需求操作历史记录 ``` --- ## 三、文档管理 ### 3.1 创建任务文档 **MCP 函数**: `mcp__ai-proj__create-and-attach` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | taskId | number | ✅ | 任务ID | | content | string | ✅ | 文档内容(Markdown格式) | | title | string | ❌ | 文档标题 | | projectId | number | ❌ | 项目ID | **自然语言示例**: - "为任务 5069 创建PRD文档" - "给任务 5069 添加开发计划文档" ### 3.2 追加文档内容 **MCP 函数**: `mcp__ai-proj__append-document-content` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | taskId | number | ✅ | 任务ID | | documentId | number | ✅ | 文档ID | | content | string | ✅ | 追加内容(Markdown) | | projectId | number | ❌ | 项目ID | ### 3.3 获取文档 **获取元数据**: `mcp__ai-proj__get_task_document_meta` ``` 参数: taskId (number) 返回: 文档元数据(不含完整内容,节省token) ``` **获取内容**: `mcp__ai-proj__get_task_document` ``` 参数: - taskId (number) - 任务ID - projectId (number) - 项目ID - maxLength (number) - 最大返回字符数 - offset (number) - 起始位置 ``` **检查是否有文档**: `mcp__ai-proj__has_task_document` ``` 参数: taskId (number), projectId (number) 返回: boolean ``` ### 3.4 更新/删除文档 **更新文档**: `mcp__ai-proj__update_task_document` ``` 参数: - taskId (number) - 任务ID - content (string) - 新内容 - title (string) - 新标题 - projectId (number) ``` **删除文档**: `mcp__ai-proj__delete_task_document` ``` 参数: taskId (number), projectId (number) ``` ### 3.5 文档同步 **导出到文件**: `mcp__ai-proj__export_task_document_to_file` ``` 参数: - taskId (number) - projectId (number) - overwrite (boolean) - 是否覆盖,默认true 导出位置: dev-plans 目录 ``` **从文件导入**: `mcp__ai-proj__import_task_document_from_file` ``` 参数: - taskId (number) - projectId (number) - fileName (string) - 文件名 - updateIfNewer (boolean) - 仅当文件更新时导入 - forceOverwrite (boolean) - 强制覆盖 ``` **批量同步**: `mcp__ai-proj__sync_task_documents` ``` 参数: - taskIds (array) - 任务ID列表 - direction (string) - 同步方向: export/import/both - forceOverwrite (boolean) - projectId (number) ``` --- ## 四、工作笔记 ### 4.1 创建工作笔记 **MCP 函数**: `mcp__ai-proj__create_work_note` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | title | string | ✅ | 笔记标题 | | content | string | ✅ | 笔记内容(Markdown) | | type | string | ❌ | 类型: markdown/text/html | | tags | array | ❌ | 标签列表 | | status | string | ❌ | 状态: draft/published/archived | | visibility | string | ❌ | 可见性: private/team/public | **创建并关联到任务**: `mcp__ai-proj__create-and-attach-work-note` ``` 参数: - taskId (number) - 任务ID - content (string) - 笔记内容 - title (string) - 标题 ``` ### 4.2 查看/搜索笔记 **列出笔记**: `mcp__ai-proj__list_work_notes` ``` 参数: page, limit, status, type ``` **搜索笔记**: `mcp__ai-proj__search_work_notes` ``` 参数: - query (string) - 搜索关键词 - tags (array) - 标签筛选 - limit (number) ``` **获取详情**: `mcp__ai-proj__get_work_note` ``` 参数: id (number) ``` ### 4.3 更新笔记 **MCP 函数**: `mcp__ai-proj__update_work_note` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | number | ✅ | 笔记ID | | updates | object | ✅ | 更新字段 | --- ## 五、计时器 ### 5.1 基本计时 **开始计时**: `mcp__ai-proj__start_timer` ``` 参数: - taskId (number) - 任务ID - description (string) - 计时描述 ``` **停止计时**: `mcp__ai-proj__stop_timer` ``` 参数: taskId (number) - 可选,不指定则停止所有计时 ``` **获取当前计时**: `mcp__ai-proj__get_current_timer` ``` 无参数 返回: 当前正在进行的计时器信息 ``` **获取活跃计时器**: `mcp__ai-proj__get_active_timers` ``` 无参数 返回: 所有 running/paused 状态的计时器 ``` ### 5.2 智能计时 **启动任务并计时**: `mcp__ai-proj__start_task_with_timer` ``` 参数: - taskIdOrTitle (number|string) - 任务ID或标题(支持模糊匹配) - timerDescription (string) - 计时描述 - projectId (number) 功能: 自动开始任务并启动计时器 ``` **切换任务**: `mcp__ai-proj__switch_to_task` ``` 参数: - newTaskTitle (string) - 任务标题(支持模糊匹配) - projectId (number) 功能: 停止当前计时,切换到新任务并开始计时 ``` **自然语言示例**: - "开始任务 登录功能开发 并计时" - "切换到 API开发 任务" - "停止计时" --- ## 六、每日聚焦 ### 6.1 查看今日任务 **MCP 函数**: `mcp__ai-proj__get_daily_focus_tasks` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | date | string | ❌ | 日期 (YYYY-MM-DD) | | status | string | ❌ | 状态筛选: active/completed/removed | | priority | string | ❌ | 优先级筛选 | | include_suggestions | boolean | ❌ | 是否包含智能推荐 | ### 6.2 添加任务到今日聚焦 **单个添加**: `mcp__ai-proj__add_daily_focus_task` ``` 参数: - task_id (number) - 任务ID - priority (string) - 优先级: critical/high/medium/low - estimated_duration_minutes (number) - 预估时长 - notes (string) - 备注 - focus_date (string) - 聚焦日期 ``` **批量添加**: `mcp__ai-proj__batch_add_daily_focus_tasks` ``` 参数: - task_ids (array) - 任务ID列表 - priority (string) - 统一优先级 - notes (string) - 统一备注 - focus_date (string) ``` **快速添加当前任务**: `mcp__ai-proj__quick_add_current_task` ``` 参数: - priority (string) - 优先级,默认high - notes (string) 功能: 将当前正在进行的任务添加到今日聚焦 ``` ### 6.3 管理今日任务 **更新**: `mcp__ai-proj__update_daily_focus_task` ``` 参数: - id (number) - Daily Focus任务ID - priority, estimated_duration_minutes, notes ``` **移除**: `mcp__ai-proj__remove_daily_focus_task` ``` 参数: id (number) ``` **完成**: `mcp__ai-proj__complete_daily_focus_task` ``` 参数: id (number) ``` **聚焦并计时**: `mcp__ai-proj__focus_task_with_timer` ``` 参数: - daily_focus_task_id (number) - timer_description (string) ``` **清理已完成**: `mcp__ai-proj__clear_completed_tasks` ``` 参数: - date (string) - 日期 - confirm (boolean) - 必须设为true ``` ### 6.4 统计与推荐 **获取统计**: `mcp__ai-proj__get_daily_focus_stats` ``` 参数: - date (string) - period (string) - 统计周期: daily/weekly/monthly ``` **获取任务推荐**: `mcp__ai-proj__get_task_recommendations` ``` 参数: - date (string) - limit (number) - 推荐数量 - exclude_existing (boolean) - 排除已存在任务 返回: 基于优先级、截止日期等的智能推荐 ``` --- ## 七、项目管理 ### 7.1 查看项目列表 **MCP 函数**: `mcp__ai-proj__list_projects` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | status | string | ❌ | 状态筛选: active/inactive/planning/on_hold/completed/cancelled/archived | | search | string | ❌ | 搜索关键词 | | page | number | ❌ | 页码 | | pageSize | number | ❌ | 每页数量 | | sortBy | string | ❌ | 排序字段: created_at/updated_at/name/priority | | sortOrder | string | ❌ | 排序方向: asc/desc | ### 7.2 创建项目 **MCP 函数**: `mcp__ai-proj__create_project` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | name | string | ✅ | 项目名称 | | description | string | ❌ | 项目描述 | --- ## 八、项目手册 ### 8.1 查看手册列表 **MCP 函数**: `mcp__ai-proj__list_manuals` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | projectId | number | ✅ | 项目ID | | status | string | ❌ | 状态筛选: draft/published/archived | | parentId | number | ❌ | 父级手册ID(获取子级列表) | | search | string | ❌ | 搜索关键词(标题或描述) | **自然语言示例**: - "查看项目手册列表" - "列出已发布的手册" - "查看手册 5 的子章节" ### 8.2 创建手册 **MCP 函数**: `mcp__ai-proj__create_manual` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | projectId | number | ✅ | 项目ID | | title | string | ✅ | 手册标题 | | content | string | ❌ | 手册内容(Markdown格式) | | description | string | ❌ | 手册简介 | | parentId | number | ❌ | 父级手册ID(用于创建子章节) | | status | string | ❌ | 状态: draft/published,默认draft | **自然语言示例**: - "创建项目手册: API 开发规范" - "在手册 5 下创建子章节: 接口设计规范" - "创建并发布手册: 前端开发规范" ### 8.3 获取手册详情 **MCP 函数**: `mcp__ai-proj__get_manual` **参数**: `id` (number) - 手册ID **返回**: 完整的手册内容(Markdown格式) **自然语言示例**: - "查看手册 5 的内容" - "显示 API 开发规范手册" ### 8.4 更新手册 **MCP 函数**: `mcp__ai-proj__update_manual` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | number | ✅ | 手册ID | | title | string | ❌ | 新标题 | | content | string | ❌ | 新内容(Markdown格式) | | description | string | ❌ | 新简介 | | status | string | ❌ | 新状态: draft/published/archived | **自然语言示例**: - "更新手册 5 的内容" - "发布手册 5" - "归档手册 5" ### 8.5 搜索手册 **MCP 函数**: `mcp__ai-proj__search_manuals` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | projectId | number | ✅ | 项目ID | | query | string | ✅ | 搜索关键词 | **自然语言示例**: - "搜索项目手册中包含 API 的文档" - "查找数据库相关的手册" --- ## 九、报告与时间线 ### 9.1 获取日报 **MCP 函数**: `mcp__ai-proj__get_daily_work_report` **参数**: `projectId` (number) - 项目ID,默认为1 **返回**: 今日工作报告,包含完成任务、进行中任务、时间统计等 ### 9.2 获取任务时间线 **MCP 函数**: `mcp__ai-proj__get_task_timeline` **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | taskId | number | ✅ | 任务ID | | projectId | number | ❌ | 项目ID | | limit | number | ❌ | 记录数限制,默认20 | | offset | number | ❌ | 偏移量 | --- ## 十、批量文档操作 ### 10.1 批量创建文档 **MCP 函数**: `mcp__ai-proj__create_batch_documents` **参数**: ```json { "documents": [ { "title": "文档标题", "content": "Markdown内容", "taskId": 5069, "attachToTask": true, "type": "markdown", "status": "draft", "tags": ["tag1", "tag2"], "relationType": "attachment" } ] } ``` --- ## 十一、远程同步 ### 11.1 任务同步 **同步任务**: `mcp__ai-proj__sync_task` ``` 参数: - taskId (number) - direction (string) - to_remote/from_remote - includeDocument (boolean) - 是否同步文档 - includeChildren (boolean) - 是否同步子任务 ``` **批量同步到远程**: `mcp__ai-proj__batch_sync_tasks_to_remote` ``` 参数: - taskIds (array) - includeDocuments (boolean) - includeChildren (boolean) ``` **获取同步状态**: `mcp__ai-proj__get_task_sync_status` ``` 参数: taskId (number) ``` **获取远程同步状态**: `mcp__ai-proj__get_remote_sync_status` ``` 参数: taskId (number) 返回: 比较本地和远程版本差异 ``` **通过UUID获取任务**: `mcp__ai-proj__get_task_by_uuid` ``` 参数: uuid (string) 用途: 跨库同步场景 ``` ### 11.2 需求同步 **同步需求到远程**: `mcp__ai-proj__sync_requirement_to_remote` ``` 参数: - requirementId (number) - includeHistory (boolean) - includeComments (boolean) ``` **从远程同步需求**: `mcp__ai-proj__sync_requirement_from_remote` ``` 参数: - remoteRequirementId (number) - includeHistory (boolean) - includeComments (boolean) ``` **批量同步需求**: `mcp__ai-proj__batch_sync_requirements_to_remote` ``` 参数: - requirementIds (array) - includeComments (boolean) ``` **同步需求-任务关联**: `mcp__ai-proj__sync_requirement_task_links` ``` 参数: - linkUUIDs (array) - 关联关系的UUID列表 - forceUpdate (boolean) ``` **同步任务的需求关联**: `mcp__ai-proj__sync_task_links_to_remote` ``` 参数: taskId (number) ``` --- ## 十二、开发工具 ### 12.1 快速登录 **MCP 函数**: `mcp__ai-proj__dev_quick_login` **参数**: `username` (string) - 用户名,默认qiudl **说明**: 仅在开发环境(APP_ENV=development/dev)有效,自动获取JWT --- ## 自然语言操作示例 ### 任务管理 | 用户说 | 调用函数 | |--------|----------| | "创建一个任务叫做登录功能开发" | `create_task` | | "查看所有进行中的任务" | `list_tasks` | | "开始任务 5069" | `start_task` | | "完成任务 5069" | `complete_task` | | "暂停任务 5069" | `pause_task` | | "把任务 5069 移到项目2" | `move_task` | | "给任务 5069 创建子任务: 数据库设计" | `create_subtask` | ### 需求管理 | 用户说 | 调用函数 | |--------|----------| | "创建需求: 用户权限管理" | `create_requirement` | | "查看待审核的需求" | `list_requirements` | | "提交需求 123 评审" | `requirement_action (submit)` | | "批准需求 123" | `requirement_action (approve)` | | "拒绝需求 123,原因是需求不完整" | `requirement_action (reject)` | | "将任务 5069 关联到需求 123" | `link_tasks_to_requirement` | ### 文档操作 | 用户说 | 调用函数 | |--------|----------| | "为任务 5069 创建PRD文档" | `create-and-attach` | | "查看任务 5069 的文档" | `get_task_document` | | "更新任务 5069 的文档" | `update_task_document` | | "导出任务 5069 的文档到文件" | `export_task_document_to_file` | ### 计时与聚焦 | 用户说 | 调用函数 | |--------|----------| | "开始计时任务 5069" | `start_task_with_timer` | | "停止计时" | `stop_timer` | | "查看今日任务" | `get_daily_focus_tasks` | | "把任务 5069 添加到今日聚焦" | `add_daily_focus_task` | | "生成今日工作报告" | `get_daily_work_report` | --- ## 注意事项 1. **项目ID默认值**: 大多数函数的 `projectId` 默认为 1 2. **响应模式**: 使用 `response_mode: minimal` 可减少返回数据量 3. **分页**: 大量数据请使用分页参数 `page` 和 `limit` 4. **状态流转**: 任务和需求都有状态机,注意状态转换规则 5. **同步方向**: 远程同步时注意 `to_remote` 和 `from_remote` 方向 6. **计时器**: 同一时间只能有一个活跃计时器 --- ## 用户管理 > **重要**: 创建数据库用户时必须使用 bcrypt **cost 12** 进行密码哈希。 详细的用户管理流程请参考: - **ops-tools/SKILL.md** - "AI-Proj 用户管理" 章节 - **ops-tools/ai-proj-deploy.md** - "用户管理" 章节 **快速参考**: ```bash # 生成密码哈希(cost 12) cd /path/to/new-ai-proj/backend cat > /tmp/genhash.go << 'EOF' package main import ("fmt"; "golang.org/x/crypto/bcrypt") func main() { hash, _ := bcrypt.GenerateFromPassword([]byte("密码"), 12) fmt.Println(string(hash)) } EOF go run /tmp/genhash.go ``` **常见错误**:使用 cost 10 生成的哈希无法登录(后端 DefaultCost=12) **已创建的系统用户**: | 用户名 | 邮箱 | user_type | role | 创建时间 | |--------|------|-----------|------|----------| | qiudl | qiudl@zhiyuncai.com | system | admin | - | | jiaxiang | jiaxiang@joylodging.com | system | admin | 2026-01 | | haiqing | haiqing@joylodging.com | system | admin | 2026-02 | > 注意:密码信息不在文档中记录,如需重置请参考 ops-tools 技能文档 --- ## Google 日历集成配置 ### 环境变量 生产环境需要配置以下环境变量(`.env` 文件): ```bash GOOGLE_CLIENT_ID=<你的Client ID>.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=GOCSPX-<你的Client Secret> GOOGLE_PROJECT_ID=<你的项目ID> GOOGLE_REDIRECT_URL=https://ai.pipexerp.com/api/v1/auth/google/callback GOOGLE_CALENDAR_SCOPES=https://www.googleapis.com/auth/calendar ``` ### 获取 Google OAuth 凭据 #### 1. 创建 Google Cloud 项目 1. 访问 [Google Cloud Console](https://console.cloud.google.com/) 2. 创建新项目或选择现有项目 3. 记录项目 ID #### 2. 启用 API 1. 进入 **APIs & Services** → **Library** 2. 搜索并启用 **Google Calendar API** #### 3. 配置 OAuth 同意屏幕 1. 进入 **APIs & Services** → **OAuth consent screen** 2. 选择 **External** → 创建 3. 填写应用名称、支持邮箱 4. 添加 Scopes: - `https://www.googleapis.com/auth/calendar` - `https://www.googleapis.com/auth/calendar.events` 5. 添加测试用户(开发阶段) #### 4. 创建 OAuth 凭据 1. 进入 **APIs & Services** → **Credentials** 2. 点击 **+ CREATE CREDENTIALS** → **OAuth client ID** 3. 选择 **Web application** 4. 配置: - **Name**: `AI-Proj Web Client` - **Authorized JavaScript origins**: `https://ai.pipexerp.com` - **Authorized redirect URIs**: `https://ai.pipexerp.com/api/v1/auth/google/callback` 5. 复制 Client ID 和 Client Secret ### 部署配置 ```bash # 更新生产环境配置 ssh tools_ai_proj "cd /home/ubuntu/apps/new-ai-proj && \ sed -i 's|GOOGLE_CLIENT_ID=.*|GOOGLE_CLIENT_ID=|' .env && \ sed -i 's|GOOGLE_CLIENT_SECRET=.*|GOOGLE_CLIENT_SECRET=|' .env && \ sed -i 's|GOOGLE_PROJECT_ID=.*|GOOGLE_PROJECT_ID=|' .env && \ docker restart ai_backend_prod" ``` ### 数据库迁移 Google 日历集成需要以下表: ```sql -- OAuth 状态表(CSRF 保护) CREATE TABLE oauth_states ( id SERIAL PRIMARY KEY, state VARCHAR(255) NOT NULL UNIQUE, user_id INTEGER NOT NULL, expires_at TIMESTAMP NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 项目日历配置表 -- 见 migrations/20260210_01_project_calendar.sql -- 日历 Webhook 表 -- 见 migrations/20260211_01_calendar_webhooks.sql ``` ### 当前配置(2026-02) | 配置项 | 值 | |--------|-----| | Project ID | `project-bfa64769-1595-4c41-964` | | Client ID | `78721641513-...apps.googleusercontent.com` | | Redirect URL | `https://ai.pipexerp.com/api/v1/auth/google/callback` | > **注意**: Client Secret 不在文档中记录,存储在生产环境 `.env` 文件中 --- ## 十三、最佳实践与故障排查 ### 13.1 创建需求的最佳实践 #### 问题:description 字段"请求数据格式错误" **症状**: ```json { "code": "BAD_REQUEST", "message": "请求数据格式错误" } ``` **常见原因**: | 原因 | 解决方案 | |------|----------| | **description 内容过长** | API 可能有字段长度限制,逐步测试找到上限 | | **Markdown 特殊字符** | 检查是否有未转义的特殊字符(如反引号、引号) | | **JSON 转义问题** | 确保 JSON 字符串正确转义(尤其是换行符、引号) | | **多层嵌套的代码块** | Markdown 代码块中的反引号可能导致解析失败 | **正确的调试流程**: ```python # ❌ 错误做法:直接简化内容 "创建失败 → 简化 description → 成功" 问题:丢失了重要的需求细节 # ✅ 正确做法:找到根本原因 步骤 1: 测试空描述 create_requirement(description="") → 是否成功? 步骤 2: 测试纯文本 create_requirement(description="简单文本") → 是否成功? 步骤 3: 测试简单 Markdown create_requirement(description="# 标题\n\n内容") → 是否成功? 步骤 4: 逐步增加复杂度 create_requirement(description="包含代码块的Markdown") create_requirement(description="包含表格的Markdown") create_requirement(description="完整的技术方案") → 找到临界点 步骤 5: 根据根因选择方案 - 如果是长度限制 → 分段或使用附件 - 如果是特殊字符 → 转义或替换 - 如果是 Markdown → 简化格式或转纯文本 ``` **推荐方案**: **方案 A:完整的需求 + 关联文档** ```typescript // 1. 创建需求(简洁描述) const req = await create_requirement({ title: "思源笔记增加 MCP 协议层支持", description: "核心方案:创建独立的 siyuan-mcp-bridge 服务...", projectId: 162 }); // 2. 创建详细的技术方案文档 const doc = await create_requirement_document({ requirementId: req.id, title: "技术方案详细设计", content: ` # 需求背景 ...(完整的技术方案,3000+ 字) # 架构设计 ... # 实施路线图 ... ` }); ``` **方案 B:分段创建需求描述** ```typescript // 1. 创建需求(基本信息) const req = await create_requirement({ title: "思源笔记增加 MCP 协议层支持", description: "简短描述", projectId: 162 }); // 2. 更新需求(逐步添加内容) await update_requirement({ id: req.id, updates: { description: description_part1 // 添加背景 } }); await update_requirement({ id: req.id, updates: { description: description_part1 + description_part2 // 添加架构 } }); ``` #### 经验总结 **原则 1:业务优先于技术** - ❌ 为了创建成功而牺牲需求完整性 - ✅ 找到技术方案来满足业务需求 **原则 2:追根溯源** - ❌ 基于假设快速妥协("可能是太长了") - ✅ 通过调试找到真正的错误原因 **原则 3:给用户选择权** - ❌ 自作主张简化内容 - ✅ 询问用户的偏好和优先级 **原则 4:保留完整信息** - ❌ 简化后的需求缺少关键信息 - ✅ 通过关联文档保留详细内容 ### 13.2 需求描述的格式建议 **推荐的需求描述结构**(简洁版): ```markdown ## 核心方案 1. 关键点 1(一句话) 2. 关键点 2(一句话) 3. 关键点 3(一句话) ## 技术架构 - 第1层:组件名(职责) - 第2层:组件名(职责) - 第3层:组件名(职责) ## 实施周期 X周(阶段1 + 阶段2 + 阶段3) ``` **详细内容放在关联文档**: - 需求背景与业务价值 - 详细的技术方案 - 实施路线图与时间规划 - 风险评估与应对措施 - 验收标准 **Markdown 格式注意事项**: ```markdown ✅ 安全的格式: - 简单的标题(# ## ###) - 无序列表(-) - 有序列表(1. 2. 3.) - 简单的表格 - 加粗(**text**) ⚠️ 可能有问题的格式: - 三重反引号代码块(```) - HTML 标签 - 复杂的嵌套列表 - 大量的特殊字符 - 超长的单行文本 ``` ### 13.3 更新需求的最佳实践 **使用 update_requirement 补充详细内容**: ```typescript // 创建需求后,逐步更新描述 await update_requirement({ id: 857, // REQ-20260217-0001 updates: { description: ` ## 需求背景 ### 当前问题 思源笔记仅提供 REST API 接口,AI 操作复杂... ### 业务价值 为思源笔记添加 MCP 协议层支持,使其能够... ## 技术方案 ### 架构设计 ...(详细内容) ` } }); ``` **测试长度限制**: ```bash # 逐步增加内容,找到上限 第1次: 200字 → 成功 第2次: 500字 → 成功 第3次: 1000字 → 成功 第4次: 2000字 → 成功 第5次: 5000字 → 失败 ← 找到上限 结论: description 字段最大约 3000-4000 字 ``` ### 13.4 故障排查清单 遇到 API 错误时,按以下步骤排查: **步骤 1:分析错误信息** ```json { "code": "BAD_REQUEST", "message": "请求数据格式错误" } ``` - [ ] 错误码是什么?(BAD_REQUEST / VALIDATION_ERROR / AUTH_FAILED) - [ ] 错误信息是否有具体提示? - [ ] 是哪个字段导致的错误? **步骤 2:检查参数格式** - [ ] 必填参数是否都提供了? - [ ] 参数类型是否正确?(number vs string) - [ ] 枚举值是否在允许范围内? - [ ] JSON 格式是否正确? **步骤 3:简化测试** - [ ] 尝试最小化的参数集 - [ ] 逐个添加可选参数 - [ ] 找到导致错误的具体参数 **步骤 4:查看后端日志**(如有权限) ```bash # 生产环境日志 ssh tools_ai_proj "docker logs ai_backend_prod --tail 100" # 开发环境日志 cd ~/coding/new-ai-proj/backend tail -f logs/app.log ``` **步骤 5:参考类似的成功案例** - [ ] 查看 SKILL.md 中的示例 - [ ] 查看之前成功的调用记录 - [ ] 对比参数差异 ### 13.5 常见错误与解决方案 | 错误 | 可能原因 | 解决方案 | |------|----------|----------| | `BAD_REQUEST` | 参数格式错误 | 检查参数类型和 JSON 格式 | | `VALIDATION_ERROR` | 参数验证失败 | 检查必填字段和枚举值 | | `AUTH_FAILED` | 认证失败 | 检查 Token 是否过期 | | `PERMISSION_DENIED` | 权限不足 | 检查用户角色和权限 | | `NOT_FOUND` | 资源不存在 | 检查 ID 是否正确 | | `INTERNAL_ERROR` | 服务器错误 | 查看后端日志排查 | ### 13.6 需求 description 长度测试记录 **测试日期**: 2026-02-17 | 长度 | 格式 | 结果 | 备注 | |------|------|------|------| | ~200字 | 简单文本 | ✅ 成功 | 核心方案3点 | | ~3000字 | 完整 Markdown | ❌ 失败 | "请求数据格式错误" | | 待测试 | 1000字 Markdown | ? | 需要进一步测试 | | 待测试 | 2000字 Markdown | ? | 需要进一步测试 | **建议**: - 需求描述控制在 1000 字以内 - 详细内容使用关联文档 - 复杂格式改为纯文本