乐于分享
好东西不私藏

ai-dev-workflow技能生成:复杂功能描述与方法调用结构

ai-dev-workflow技能生成:复杂功能描述与方法调用结构
# WorkBuddy复杂功能描述## 需求点0:AI对话与智能执行### 功能点0.1:自然语言对话与工具调用#### 执行点0.1.1:发送消息与智能响应##### 用户操作1. 在对话界面底部输入框,输入自然语言消息。2. 支持多种输入方式:   - **纯文本**:直接输入问题、指令或描述   - **@引用语法**     - `@file://路径` 引用特定文件     - `@folder://路径` 引用整个目录     - `@skill://技能名` 直接加载技能   - **附件上传**     - 拖拽文件到输入框     - 粘贴截图(Ctrl+V)     - 支持图片格式:jpeg、png、gif、webp     - 支持文档格式:pdf、docx、xlsx、pptx、md、txt等3. 点击发送按钮或按回车键提交。4. 实时查看AI执行过程:   - 工具调用状态   - 文件操作进度   - 命令执行输出   - 搜索结果展示5. 获取最终响应结果,可继续追问或切换话题。##### 系统逻辑1. **上下文组装**   - 读取身份文件:`SOUL.md`(角色定位)、`IDENTITY.md`(身份信息)、`USER.md`(用户画像)   - 读取工作记忆:`.workbuddy/memory/MEMORY.md`(长期记忆)+ 今日/昨日日志   - 加载项目上下文:文件树快照、项目配置   - 拼接历史对话:当前会话的完整消息历史   - 总Token数控制:不超过128K2. **意图识别与分类**   - **闲聊问答类**:直接生成回复   - **代码生成类**:准备调用write_to_file/replace_in_file   - **文件操作类**:准备调用read_file/search_file/list_dir   - **搜索探索类**:准备调用search_content/code-explorer   - **命令执行类**:准备调用execute_command   - **技能触发类**:匹配已安装技能的triggers,准备调用use_skill   - **团队协作类**:准备调用task/send_message   - **自动化任务类**:准备调用automation_update3. **工具选择与执行**   - 基于意图自动选择合适的工具组合   - 支持单次调用多个工具并行执行   - 敏感操作触发确认流程:     - 删除文件(delete_file)     - 执行命令(execute_command)     - 修改系统配置     - 操作工作区外文件   - 失败时提供详细错误信息和修复建议4. **响应生成**   - 流式返回响应内容(逐字显示)   - 展示工具调用结果摘要   - 提供后续操作建议   - 自动判断是否需要调用open_result_view/preview_url展示结果##### 关键配置参数- `最大上下文Token数`:128K- `流式响应`:默认开启- `工具调用并发限制`:5个并行- `敏感操作确认开关`:默认开启- `响应语言`:中文---#### 执行点0.1.2:多模态输入处理##### 用户操作1. **图片输入**   - 截图后直接粘贴(Ctrl+V)   - 拖拽图片文件到输入框   - 点击附件按钮选择图片   - 支持格式:jpeg/jpg、png、gif、webp2. **文件引用**   - 输入 `@file:` 触发文件选择器   - 从项目文件树中选择文件   - 文件内容自动加载到上下文   - 支持代码文件、Markdown、JSON、XML等3. **目录引用**   - 输入 `@folder:` 引用整个目录   - AI获取目录结构快照   - 可浏览、搜索、分析目录内容4. **技能加载**   - 输入 `@skill://技能名` 直接加载技能   - 示例:`@skill://AI Dev Workflow` 加载编程工作流技能   - 技能SKILL.md自动注入上下文5. **添加说明文字**(可选):   - "解释这张截图中的架构"   - "分析这个文件的代码逻辑"   - "使用这个技能生成项目"##### 系统逻辑1. **图片处理**   - 调用视觉模型分析图片内容   - 支持能力:     - OCR文字提取     - 代码截图解析     - UI设计稿分析     - 图表数据识别   - 图片转Base64或上传临时存储   - 最大尺寸:2048x2048像素2. **文件处理**   - 读取文件内容注入上下文   - 大文件支持分段读取(offset/limit)   - 自动检测文件编码(UTF-8、GBK、GB2312)   - 显示行号便于讨论特定代码行3. **目录处理**   - 获取目录结构快照(list_dir)   - 支持glob模式筛选(如 `**/*.kt`   - 自动忽略:node_modules、.git、dist、build、__pycache__4. **技能处理**   - 加载技能的SKILL.md到上下文   - 加载references/目录下的参考文档   - 注册scripts/目录下的可用脚本   - 执行技能定义的工作流##### 关键配置参数- `图片最大尺寸`:2048x2048- `图片最大文件大小`:10MB- `大文件分段大小`:每段1000行- `目录忽略模式`:node_modules、.git、dist、build、__pycache__、.next---### 功能点0.2:会话管理#### 执行点0.2.1:创建与管理会话##### 用户操作1. **创建新会话**   - 点击侧边栏"新建对话"按钮   - 或使用快捷键(Ctrl+N)   - 新会话自动关联当前工作区2. **切换会话**   - 在会话列表中选择历史会话   - 点击后恢复完整对话历史   - 工作区上下文自动切换3. **会话操作**   - **重命名**:右键点击选择"重命名"   - **删除**:右键点击选择"删除"   - **置顶**:右键点击选择"置顶"   - **导出**:导出为Markdown文件4. **会话搜索**   - 在搜索框输入关键词   - 搜索范围:会话标题、消息内容   - 结果高亮显示匹配项##### 系统逻辑1. **会话创建**   - 生成唯一会话ID(UUID)   - 创建今日工作记忆文件:`.workbuddy/memory/YYYY-MM-DD.md`(如不存在)   - 初始化空的消息历史列表   - 设置会话关联的工作区路径2. **会话恢复**   - 从SQLite数据库加载历史消息   - 按时间顺序渲染到对话区域   - 重新读取工作区上下文   - 重新加载记忆文件3. **会话持久化**   - 实时保存每条消息到数据库   - 工作记忆自动追加到日志文件   - 支持跨设备同步(如启用云同步)4. **会话删除**   - 软删除会话记录(保留日志用于审计)   - 保留关联的工作记忆文件   - 30天后永久清除##### 关键配置参数- `会话存储位置``%APPDATA%/WorkBuddy/data/conversations.db`- `历史消息保留策略`:永久- `软删除保留期`:30天- `会话标题自动生成`:基于首条消息内容---## 需求点1:文件系统操作### 功能点1.1:文件读写与编辑#### 执行点1.1.1:读取文件##### 用户操作1. **直接请求**   - "读取 config.json"   - "查看 src/main.kt 的内容"   - "打开 README.md"2. **引用语法**   - "@file://src/utils/Helper.kt"3. **搜索后读取**   - 先搜索文件列表   - 选择要读取的文件4. **分段读取大文件**   - "读取 main.kt 的前100行"   - "查看 log.txt 的最后50行"   - "读取第200到300行"##### 系统逻辑1. **路径解析**   - 相对路径:基于当前工作区根目录   - 绝对路径:直接使用(需在工作区内或获批准)   - 路径规范化:处理 `..``.`、分隔符差异   - 编码安全:防止路径遍历攻击2. **文件读取**   - 调用 `read_file` 工具   - 自动检测文件编码(UTF-8、GBK、GB2312、ISO-8859-1)   - 添加行号标记(格式:`     1:代码内容`   - 大文件支持offset/limit分页读取   - 图片文件直接渲染展示3. **内容展示**   - Markdown渲染代码块   - 语法高亮(根据文件扩展名)   - 显示文件元信息:大小、行数、编码   - IDE诊断信息:错误、警告、提示(如可用)4. **错误处理**   - 文件不存在:提示并建议相似文件   - 权限不足:提示并引导授权   - 编码错误:尝试多种编码解码##### 安全规则- 仅允许读取工作区内文件- 敏感文件读取警告:.env、credentials、private_key、secrets- 工作区外文件需用户确认##### 关键配置参数- `默认读取行数限制`:无限制(但Token受限)- `分段读取默认大小`:1000行- `支持的图片格式`:jpeg、png、gif、webp---#### 执行点1.1.2:编辑文件##### 用户操作1. **描述修改意图**   - "把 main.kt 中的 fun 改成 suspend fun"   - "在 config.json 添加一个新字段"   - "删除 utils.kt 中的第10到15行"2. **AI展示修改计划**   - 显示待替换的原始内容   - 显示替换后的新内容   - 高亮差异部分3. **确认执行**   - 查看修改内容后确认   - 或提出调整意见4. **查看修改结果**   - 文件修改后自动重新读取   - 显示修改后的内容   - 调用linter检查语法错误##### 系统逻辑1. **内容定位**   - 先读取当前文件完整内容   - 根据用户描述定位待修改位置   - 提取精确的字符串片段(old_str)   - 验证匹配唯一性(old_str在文件中只出现一次)2. **替换执行**   - 调用 `replace_in_file` 工具   - 精确字符串替换:     - 保留原始缩进(空格/Tab)     - 保留原始换行符(CRLF/LF)     - 保留原始引号(中文/英文、单/双引号)   - 失败时提供详细错误:     - old_str未找到     - old_str出现多次     - 文件被外部修改3. **变更验证**   - 重新读取文件确认修改成功   - 调用 `read_lints` 检查语法错误   - 显示修改前后对比   - 提供撤销建议(如使用Git)##### 状态规则- 文件被锁定(其他进程写入中):等待或提示- 文件不存在:提示创建新文件- 文件为空:直接使用write_to_file##### 关键配置参数- `自动linter检查`:默认开启- `显示修改对比`:默认开启---#### 执行点1.1.3:创建与删除文件##### 用户操作1. **创建文件**   - "创建 src/api/UserApi.kt"   - "新建 README.md 并写入以下内容..."   - "创建目录 src/utils/"2. **删除文件**   - "删除 temp.txt"   - "删除 dist 目录"   - 确认删除操作(敏感操作)3. **批量操作**   - "创建以下文件:a.kt, b.kt, c.kt"   - "清空 build 目录"##### 系统逻辑1. **文件创建**   - 调用 `write_to_file` 工具   - 自动创建父目录(如不存在)   - 文件存在时覆盖(提供警告)   - 设置创建时间戳2. **目录创建**   - 使用execute_command执行 `mkdir -p` 或 `New-Item -ItemType Directory`   - 递归创建父目录3. **文件删除**   - 调用 `delete_file` 工具   - Windows:移动到回收站   - macOS:移动到废纸篓   - Linux:使用 `gio trash` 或 `trash-put`   - 记录删除日志(时间、路径、原因)4. **批量操作**   - 单次最多处理10个文件   - 每个文件操作后验证成功   - 任一失败立即停止并回滚##### 安全规则- 禁止删除 `.workbuddy` 目录- 禁止删除系统目录:/、C:\、/System、AppData、Library、~/.config- 禁止递归删除Desktop、Downloads、Documents、Home目录- 工作区外文件操作需用户确认- 批量删除需额外确认##### 关键配置参数- `批量操作最大文件数`:10个- `删除方式`:回收站/废纸篓(不直接rm)---### 功能点1.2:文件搜索与探索#### 执行点1.2.1:搜索文件##### 用户操作1. **按文件名搜索**   - "搜索所有 .kt 文件"   - "找 test_*.py"   - "搜索包含 'service' 的文件"2. **按内容搜索**   - "搜索包含 'TODO' 的文件"   - "查找 'fun main' 函数定义"   - "搜索所有 'import kotlinx' 的行"   - 支持正则表达式3. **组合搜索**   - "在 .kt 文件中搜索 'class User'"   - "搜索 test 目录下的所有 TODO"##### 系统逻辑1. **文件名搜索**   - 调用 `search_file` 工具   - 支持glob模式:`*`(任意字符)、`?`(单字符)、`**`(递归)   - 递归搜索子目录   - 自动排除:node_modules、.git、dist、build、__pycache__   - 返回相对路径列表2. **内容搜索**   - 调用 `search_content` 工具(基于ripgrep)   - 支持正则表达式   - 支持文件类型过滤:`--type js``--type py`   - 支持glob过滤:`--glob "*.kt"`   - 显示匹配行及上下文   - 支持显示匹配文件列表、匹配计数3. **结果展示**   - 文件路径(可点击跳转)   - 匹配行号   - 匹配内容(高亮显示)   - 上下文行(前后各3行)4. **性能优化**   - 大项目使用code-explorer子代理   - 结果分页显示(每页100条)   - 支持搜索结果导出##### 关键配置参数- `默认忽略目录`:node_modules、.git、dist、build、__pycache__、.next、target- `搜索结果限制`:100条(可分页)- `上下文行数`:前后各3行- `正则模式超时`:5秒---#### 执行点1.2.2:浏览目录结构##### 用户操作1. **列出目录内容**   - "列出 src 目录内容"   - "查看项目根目录"   - "显示 api 文件夹下的所有文件"2. **查看项目结构**   - "展示项目文件树"   - "查看目录层级结构"3. **过滤目录内容**   - "列出所有 .kt 文件"   - "只显示目录,不显示文件"##### 系统逻辑1. **目录浏览**   - 调用 `list_dir` 工具   - 显示文件和子目录   - 显示文件大小、修改时间   - 不显示隐藏文件(以.开头)2. **结构展示**   - 树形结构显示   - 层级缩进   - 文件类型图标   - 目录统计(文件数、总大小)3. **忽略模式**   - 支持glob模式忽略特定文件   - 默认忽略:.git、node_modules等##### 关键配置参数- `默认显示隐藏文件`:否- `最大递归深度`:无限制(但Token受限)- `忽略模式`:可通过ignore_globs参数指定---## 需求点2:技能系统### 功能点2.1:技能发现与安装#### 执行点2.1.1:浏览与搜索技能##### 用户操作1. **打开技能中心**   - 点击侧边栏"专家"入口   - 或点击"技能中心"按钮2. **浏览技能市场**   - 分类浏览:编程、写作、数据分析、自动化等   - 热门推荐   - 最新更新3. **搜索技能**   - 输入关键词搜索   - 按标签筛选   - 按评分/下载量排序4. **查看技能详情**   - 点击技能卡片   - 查看功能描述   - 查看使用示例   - 查看评分评价   - 查看版本历史##### 系统逻辑1. **技能列表加载**   - 从ClawHub API获取技能列表   - 或扫描本地技能仓库   - 缓存列表提升加载速度2. **分类筛选**   - 按标签分类   - 按评分排序(高到低)   - 按下载量排序   - 按更新时间排序3. **技能详情**   - 加载技能的SKILL.md   - 渲染Markdown为HTML   - 解析元数据:name、author、description、version---#### 执行点2.1.2:安装与卸载技能##### 用户操作1. **安装技能**   - 在技能详情页点击"安装"按钮   - 或从本地文件夹导入:     - "从 ~/.skills/my-skill 安装技能"   - 等待下载和安全检查   - 安装成功提示2. **查看已安装技能**   - 在"已安装"标签页查看   - 查看技能版本、大小、安装时间3. **卸载技能**   - 点击"卸载"按钮   - 确认卸载操作   - 技能文件被删除##### 系统逻辑1. **技能下载**   - 从ClawHub下载技能包   - 或从本地路径复制   - 解压到 `~/.workbuddy/skills/{skill_name}/`   - 保留文件结构:SKILL.md、references/、scripts/2. **安全检查**   - 调用 `use_skill` 加载 skills-security-check 技能   - 扫描SKILL.md和所有脚本文件   - 检测危险模式:     - 危险命令:`rm -rf``sudo``mkfs``dd if=`     - 代码注入:`eval()``exec()``subprocess.call(shell=True)`     - 网络请求:检查是否连接未知服务器   - 风险评级:     - **P0(严重)**:强烈警告,建议不安装     - **P1(警告)**:警告用户,需确认     - **P2(安全)**:通过检查,可安装   - 向用户展示审计报告3. **技能注册**   - 将技能信息写入本地数据库   - 更新可用技能列表   - 解析triggers触发条件4. **卸载清理**   - 删除技能目录   - 清理数据库注册信息   - 保留用户数据(如有)##### 安全规则- P0风险:强烈建议不安装,需用户明确确认- P1风险:警告用户,需确认- P2风险:直接安装- 不执行技能中的自动运行脚本##### 关键配置参数- `技能安装路径``~/.workbuddy/skills/`- `安全检查开关`:默认开启- `技能格式要求`:必须包含SKILL.md---### 功能点2.2:技能使用与开发#### 执行点2.2.1:使用技能##### 用户操作1. **自动触发**   - 输入匹配技能triggers的消息   - 示例:输入"创建PPT"自动加载pptx技能   - 系统自动加载技能并执行2. **手动触发**   - `@skill://技能名` 语法   - 从技能列表点击"使用"按钮   - 示例:`@skill://AI Dev Workflow`3. **按技能指引交互**   - 技能加载后按SKILL.md定义的流程执行   - 可能需要用户提供额外信息   - 可能有中间确认步骤4. **查看技能输出**   - 技能执行结果展示   - 生成的文件、报告等##### 系统逻辑1. **技能加载**   - 调用 `use_skill` 工具   - 读取 SKILL.md 内容注入上下文   - 加载 references/ 目录下的参考文档   - 注册 scripts/ 目录下的脚本为可用资源2. **技能执行**   - 遵循 SKILL.md 定义的工作流步骤   - 可调用内置工具(read_file、write_to_file等)   - 可调用外部脚本   - 支持与用户交互确认3. **技能输出**   - 生成文件:代码、文档、报告   - 执行操作:创建项目、运行命令   - 提供建议:架构方案、优化建议---#### 执行点2.2.2:开发新技能##### 用户操作1. **启动技能创建向导**   - "创建一个新技能"   - 或 `@skill://skill-creator`2. **填写技能信息**   - 技能名称   - 技能描述   - 触发条件   - 作者信息3. **编写SKILL.md**   - 定义工作流步骤   - 编写详细指令   - 添加示例4. **添加参考资源**(可选):   - 在 references/ 目录添加参考文档   - 在 scripts/ 目录添加Python脚本5. **测试技能**   - 本地加载测试   - 修复问题   - 迭代优化6. **发布技能**   - 填写版本号(semver格式:1.0.0)   - 填写变更日志   - 上传到ClawHub技能市场##### 系统逻辑1. **技能脚手架**   - 调用 skill-creator 技能   - 生成标准目录结构:     ```     my-skill/     ├── SKILL.md     ├── references/     └── scripts/     ```   - 创建 SKILL.md 模板2. **技能验证**   - 检查 SKILL.md 格式   - 验证必需字段:name、description   - 测试脚本可执行性3. **技能发布**   - 打包技能文件   - 上传到 ClawHub   - 生成技能详情页   - 等待审核(如需要)---## 需求点3:命令执行与系统集成### 功能点3.1:命令行执行#### 执行点3.1.1:执行系统命令##### 用户操作1. **请求执行命令**   - "运行 npm install"   - "执行 pytest tests/"   - "启动开发服务器 npm run dev"   - "编译项目 ./gradlew build"2. **查看命令输出**   - 实时显示stdout输出   - 实时显示stderr错误   - 显示退出码3. **处理交互**   - 自动响应提示:`--yes`、`-y`、`--no-interaction`   - 或等待用户输入4. **长时间运行命令**   - 后台执行   - 可查看实时日志   - 可手动终止##### 系统逻辑1. **命令构建**   - 根据操作系统选择shell:     - Windows:PowerShell     - macOS/Linux:Bash   - 处理路径转义(空格、特殊字符)   - 拼接命令参数   - 设置工作目录为当前项目根2. **命令执行**   - 调用 `execute_command` 工具   - 继承环境变量   - 可设置额外环境变量   - 设置超时时间3. **输出处理**   - 流式返回输出(实时显示)   - 区分stdout和stderr   - 解析退出码(0=成功,非0=失败)   - 禁用分页(git --no-pager、| cat)4. **安全控制**   - 敏感命令需确认:     - 删除:rm、del、rmdir、shutil.rmtree     - 系统配置:sudo、chmod、chown     - 网络:curl、wget(上传数据时)     - 格式化:mkfs、format   - 禁止危险命令组合:rm -rf /、sudo rm -rf   - 超时自动终止##### 安全规则- 工作区外命令需确认- 敏感命令需确认- 禁止执行的命令:  - 递归删除系统目录  - 格式化磁盘  - 修改系统配置(无明确确认)  - 网络上传数据到未知服务器##### 关键配置参数- `命令超时时间`:300秒(5分钟)- `敏感命令列表`:rm、del、sudo、chmod、mkfs、format- `自动响应提示`:--yes、-y、--no-interaction---### 功能点3.2:运行时管理#### 执行点3.2.1:管理编程语言运行时##### 用户操作1. **查看可用运行时**   - "检查Python版本"   - "查看Node版本"   - "列出所有可用运行时"2. **安装特定版本**   - "安装 Python 3.12"   - "安装 Node 20"   - "安装 Python 3.10"3. **切换运行时**   - 自动检测项目需求   - 自动选择满足要求的版本   - 或手动指定版本##### 系统逻辑1. **运行时检测**   - 扫描系统已安装的运行时   - 扫描隔离安装的运行时(`~/.workbuddy/binaries/`   - 检查版本兼容性   - 缓存检测结果2. **运行时安装**   - 调用 `install_binary` 工具   - 从官方发行版下载   - 安装到隔离目录:     - Python:`~/.workbuddy/binaries/python/versions/3.12.0/`     - Node:`~/.workbuddy/binaries/node/versions/20.0.0/`   - 创建虚拟环境3. **环境隔离**   - Python:     - 创建venv:`python -m venv ~/.workbuddy/binaries/python/envs/default`     - 安装包到venv:`venv/bin/pip install <pkg>`     - 运行脚本:`venv/bin/python script.py`   - Node:     - 使用项目级node_modules     - 不全局安装(避免污染系统)   - 不污染用户系统环境##### 关键配置参数- `运行时安装路径`:`~/.workbuddy/binaries/`- `虚拟环境路径`:`~/.workbuddy/binaries/python/envs/`- `Python版本`:3.13.12(已安装)- `Node版本`:可通过install_binary安装---## 需求点4:团队协作### 功能点4.1:多代理协作#### 执行点4.1.1:创建团队与分配任务##### 用户操作1. **创建团队**   - "创建一个开发团队"   - 定义团队名称:如"feature-team"   - 定义团队目标:如"开发用户模块"2. **添加团队成员**   - 指定成员角色:     - 前端开发     - 后端开发     - 测试工程师     - 代码审查员   - 设置权限模式:     - acceptEdits:自动接受文件编辑     - bypassPermissions:跳过所有确认     - default:正常确认流程     - plan:先规划后执行3. **分配任务**   - 向特定成员发送任务   - 任务描述清晰具体   - 成员并行工作4. **协调沟通**   - 成员间通过消息通信   - 共享工作进展   - 汇报完成状态5. **关闭团队**   - 任务完成后删除团队   - 清理团队资源##### 系统逻辑1. **团队创建**   - 调用 `team_create` 工具   - 创建团队目录:`.workbuddy/teams/{team_name}/`   - 初始化团队配置文件   - 设置团队目标2. **成员创建**   - 调用 `task` 工具创建子代理   - 指定 `subagent_name`:code-explorer等   - 指定 `name`:成员名称   - 指定 `mode`:权限模式   - 指定 `team_name`:所属团队   - 成员异步执行(后台运行)3. **消息通信**   - 调用 `send_message` 工具   - 支持消息类型:     - message:私信     - broadcast:广播     - shutdown_request:关闭请求     - shutdown_response:关闭响应     - plan_approval_response:计划审批   - 消息投递到成员邮箱   - 成员下次turn时处理消息4. **任务协调**   - 跟踪成员状态   - 收集结成果   - 处理关闭请求   - 汇总团队输出5. **团队清理**   - 调用 `team_delete` 工具   - 停止所有成员邮箱轮询   - 保存最终历史   - 删除团队目录##### 关键配置参数- `团队目录``.workbuddy/teams/`- `最大成员数`:10个- `消息投递`:实时(成员下次turn时处理)- `子代理类型`:code-explorer---## 需求点5:自动化系统### 功能点5.1:定时任务与触发器#### 执行点5.1.1:创建自动化任务##### 用户操作1. **打开自动化管理**   - 查看现有自动化列表   - 查看上次/下次执行时间   - 查看执行状态2. **创建新自动化**   - 点击"新建自动化"按钮   - 或请求创建:     - "每天早上9点提醒我查看邮件"     - "每小时检查一次构建状态"     - "每周一生成周报"3. **配置触发条件**   - **定时触发**     - 每小时:`FREQ=HOURLY;INTERVAL=1`     - 每2小时:`FREQ=HOURLY;INTERVAL=2`     - 每天9点:`FREQ=DAILY;BYHOUR=9;BYMINUTE=0`     - 每周一9点:`FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0`     - 工作日:`FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR`   - **一次性触发**     - 指定具体日期时间:`2026-04-10T14:30`   - **有效期**     - validFrom:任务开始生效日期     - validUntil:任务失效日期4. **编写任务指令**   - 描述要执行的任务   - 任务自包含(无需用户交互)   - 示例:     - "检查今日待办任务并发送提醒"     - "运行测试并报告结果"     - "拉取最新代码并构建"5. **配置执行参数**   - 指定工作区路径   - 设置最大执行时长   - 设置状态:ACTIVE 或 PAUSED6. **保存并启用**##### 系统逻辑1. **自动化注册**   - 调用 `automation_update` 工具   - 生成自动化ID   - 写入配置文件:`.workbuddy/automations/{id}/automation.toml`   - 注册到SQLite调度表   - 计算下次执行时间2. **调度执行**   - 定时检查触发条件(每分钟)   - 到期时启动后台会话   - 执行任务指令   - 记录执行日志   - 更新上次执行时间   - 计算下次执行时间3. **状态管理**   - ACTIVE:正常执行   - PAUSED:暂停执行   - 执行中:避免重复执行   - 超时:自动终止4. **失败处理**   - 记录错误日志   - 可配置重试次数   - 发送失败通知##### 关键配置参数- `自动化存储路径``~/.workbuddy/automations/`- `调度检查间隔`:每分钟- `最大执行时长`:30分钟(可配置)- `失败重试次数`:0次(默认不重试)- `时区`:用户本地时区---## 需求点6:记忆系统### 功能点6.1:工作记忆#### 执行点6.1.1:记忆读写与蒸馏##### 用户操作1. **自动记忆**   - 完成重要工作后,AI自动追加日志   - 示例:     - 创建/修改文件     - 修复bug     - 生成报告     - 选择技术方案   - 用户无需手动操作2. **手动记忆**   - "记住我喜欢用Kotlin"   - "记录这个项目使用MVVM架构"   - "记住我的代码风格偏好"3. **查看记忆**   - "查看我的工作记忆"   - "我之前做过什么?"   - "回忆一下上次的决策"4. **更新记忆**   - "更新记忆:改用Python"   - "删除过时的记忆"##### 系统逻辑1. **日志写入**   - 追加到 `.workbuddy/memory/YYYY-MM-DD.md`   - 记录内容:     - 完成的工作     - 关键决策     - 代码变更摘要     - 用户告知的偏好   - 格式:Markdown   - 追加式(不覆盖)2. **长期记忆更新**   - 更新 `.workbuddy/memory/MEMORY.md`   - 存储内容:     - 项目约定(架构模式、技术栈)     - 个人偏好(语言风格、命名规范)     - 稳定的跨会话事实   - 更新式(覆盖旧值)   - 注明变更原因和日期3. **记忆读取**   - 会话开始时自动加载:     - MEMORY.md(长期记忆)     - 今日日志(YYYY-MM-DD.md)     - 昨日日志   - 注入到上下文   - 用户询问时检索相关记忆4. **记忆蒸馏**   - 每次会话开始时检查   - 超过30天的日志需要蒸馏   - 提取关键信息到MEMORY.md   - 删除旧日志文件   - 保持记忆简洁##### 关键配置参数- `记忆目录``.workbuddy/memory/`- `日志文件格式`:YYYY-MM-DD.md- `长期记忆文件`:MEMORY.md- `日志保留天数`:30天- `蒸馏触发条件`:每次会话开始---## 需求点7:结果展示与交付### 功能点7.1:结果呈现#### 执行点7.1.1:展示工作成果##### 用户操作1. **自动展示**   - 任务完成后,AI自动判断结果类型   - 选择合适的展示方式   - 自动打开结果视图2. **手动请求展示**   - "展示生成的HTML"   - "打开报告文件"   - "预览网页"3. **下载交付物**   - 点击下载按钮   - 打包多个文件   - 选择保存位置##### 系统逻辑1. **结果检测**   - 判断产出文件类型:     - HTML:使用preview_url     - 报告/文档:使用open_result_view     - 图片:直接渲染     - 代码:代码块展示   - 选择展示方式2. **预览渲染**   - **HTML文件**     - 调用 `preview_url` 工具     - 在内置浏览器打开     - 支持热重载(开发服务器)   - **文档文件**     - 调用 `open_result_view` 工具     - 在Artifact视图展示     - 支持Markdown渲染   - **图片文件**     - read_file直接渲染     - 支持缩放   - **代码文件**     - 代码块展示     - 语法高亮     - 可复制3. **文件交付**   - 调用 `deliver_attachments` 工具   - 按重要性排序   - 打包相关文件   - 提供下载链接##### 关键配置参数- `Artifact目录``%APPDATA%/WorkBuddy/brain/{conversation-id}/`- `支持的预览格式`  - HTML:浏览器预览  - PDF/DOCX/PPTX/XLSX:Artifact视图  - 图片:直接渲染  - Markdown:渲染展示---## 需求点8:知识库检索### 功能点8.1:RAG知识检索#### 执行点8.1.1:查询知识库##### 用户操作1. **自动检索**   - 根据对话上下文自动判断是否需要检索   - AI自动调用RAG_search2. **手动触发**   - "查询微信小程序开发文档"   - "搜索腾讯云API使用方法"   - "查一下TDesign组件库"##### 系统逻辑1. **知识库匹配**   - 根据查询意图匹配知识库   - 可同时查询多个知识库2. **检索执行**   - 调用 `RAG_search` 工具   - 传入查询字符串   - 指定知识库名称3. **结果整合**   - 返回相关文档片段   - 注入上下文   - 生成基于知识库的回答##### 可用知识库- 腾讯云API- 微信云开发- 腾讯云实时音视频- TDesign- 微信支付- 微信小程序- 微信小游戏- 腾讯地图小程序---## 工作流总览| 需求点 | 功能点 | 核心能力 | 关键工具 ||--------|--------|----------|----------|| 0. AI对话与智能执行 | 自然语言对话、多模态输入、会话管理 | 上下文组装、意图识别、工具选择、流式响应 | read_file、write_to_file、execute_command || 1. 文件系统操作 | 文件读写编辑、搜索探索 | 精确替换、内容搜索、目录浏览 | read_file、replace_in_file、search_file、search_content || 2. 技能系统 | 技能发现安装、技能使用开发 | ClawHub集成、安全审计、工作流执行 | use_skill、skill-creator || 3. 命令执行与系统集成 | 命令行执行、运行时管理 | Shell命令、环境隔离、版本管理 | execute_command、install_binary || 4. 团队协作 | 多代理协作 | 团队创建、成员分配、消息通信 | team_create、task、send_message || 5. 自动化系统 | 定时任务与触发器 | Cron调度、后台执行、状态管理 | automation_update || 6. 记忆系统 | 工作记忆 | 日志写入、长期记忆、蒸馏清理 | replace_in_file(追加日志) || 7. 结果展示与交付 | 结果呈现 | HTML预览、文档展示、文件交付 | preview_url、open_result_view、deliver_attachments || 8. 知识库检索 | RAG知识检索 | 知识库匹配、文档检索、结果整合 | RAG_search |
# WorkBuddy方法调用结构**技术栈**:Flutter + Dart + SQLite + Provider**支持平台**:Android、iOS、Windows、macOS、Linux、Web---## 需求点0:AI对话与智能执行### 功能点0.1:对话交互与消息管理#### 客户端 (Flutter - 全平台)##### UI层*   `ChatScreen`:对话主界面,展示消息列表,支持输入和发送。    *   **操作**:用户在输入框输入文本,点击"发送"按钮,查看AI响应,滚动历史消息。*   `MessageBubble`:单条消息组件,支持渲染文本、代码块、附件等。    *   **操作**:用户查看消息内容,复制文本,点击链接。##### ViewModel/Provider层*   `ChatProvider` (extends ChangeNotifier)    *   `Future<void> sendMessage(String content)`        *   **作用**:发送用户消息,触发AI处理流程。调用`SendMessageUseCase`        *   **参数**            *   `content: String`:用户输入的消息文本。    *   `Future<List<Message>> loadHistory(String sessionId)`        *   **作用**:加载指定会话的历史消息。调用`LoadConversationHistoryUseCase`        *   **参数**            *   `sessionId: String`:会话ID。    *   `Future<void> clearSession(String sessionId)`        *   **作用**:清空当前会话的历史记录。调用`ClearSessionUseCase`##### UseCase层*   `SendMessageUseCase` (`Future<Message> execute(String message, String sessionId)`)    *   **作用**:发送消息并触发AI处理。**核心逻辑**:1. 保存用户消息到本地数据库。2. 调用AI引擎分析消息。3. 执行可能的操作(文件操作、命令执行等)。4. 生成并保存AI响应。调用`MessageRepository.save``AIEngine.process``ActionExecutor.execute`*   `LoadConversationHistoryUseCase` (`Future<List<Message>> execute(String sessionId)`)    *   **作用**:从本地数据库加载会话历史。调用`MessageRepository.findBySessionId`*   `ClearSessionUseCase` (`Future<void> execute(String sessionId)`)    *   **作用**:清空会话记录。调用`MessageRepository.deleteBySessionId`##### Repository层 (接口)*   `MessageRepository`    *   `Future<Message> save(Message message)`        *   **作用**:保存消息到本地数据库。    *   `Future<List<Message>> findBySessionId(String sessionId)`        *   **作用**:查询指定会话的所有消息。    *   `Future<void> deleteBySessionId(String sessionId)`        *   **作用**:删除指定会话的所有消息。##### 数据源层 (实现)*   `MessageRepositoryImpl` (实现 `MessageRepository`接口)    *   `final Database db`:sqflite数据库实例。    *   `Future<Message> save(Message message)`        *   **实现**:执行`INSERT INTO messages (id, session_id, role, content, timestamp) VALUES (?, ?, ?, ?, ?)`,使用`db.insert()`    *   `Future<List<Message>> findBySessionId(String sessionId)`        *   **实现**:执行`SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC`,使用`db.query()`,将结果映射为`List<Message>`    *   `Future<void> deleteBySessionId(String sessionId)`        *   **实现**:执行`DELETE FROM messages WHERE session_id = ?`,使用`db.delete()`#### 服务层 (Dart)##### Service层*   `AIEngine`    *   `Future<AIResponse> process(String input, ConversationContext context)`        *   **作用****核心AI处理逻辑**。1. 调用意图分类器识别用户意图。2. 根据意图类型分支:对话意图直接生成响应;执行意图规划并执行操作;查询意图检索知识库。3. 整合结果生成最终响应。调用`IntentClassifier.classify``ActionPlanner.plan``ResponseGenerator.generate`*   `IntentClassifier`    *   `Future<IntentType> classify(String input)`        *   **作用**:分析用户输入,返回意图类型(`CONVERSATION``EXECUTION``QUERY`)。使用LLM进行分类。*   `ActionPlanner`    *   `Future<ActionPlan> plan(IntentType intent, ConversationContext context)`        *   **作用**:根据意图和上下文,生成执行计划。**逻辑**:确定需要调用的工具、参数、执行顺序。调用`MemoryManager.getContext`*   `ActionExecutor`    *   `Future<ActionResult> execute(ActionPlan plan)`        *   **作用**:执行操作计划。**顺序控制**:按计划依次调用各工具,收集执行结果。调用`ToolOrchestrator.selectTools``ToolExecutor.executeSequence`##### Tool层*   `ToolOrchestrator`    *   `List<Tool> selectTools(ActionPlan plan)`        *   **作用**:根据计划选择需要执行的工具实例。*   `ToolExecutor`    *   `Future<ActionResult> executeSequence(List<Tool> tools, dynamic params)`        *   **作用**:依次执行工具序列,传递参数,收集结果。##### Database层*   **sqflite 数据库**:本地嵌入式数据库。    *   **表 `messages`**:存储消息记录。        *   字段:`id` (TEXT PRIMARY KEY), `session_id` (TEXT), `role` (TEXT), `content` (TEXT), `timestamp` (INTEGER)。    *   **索引**`idx_session_timestamp` 在 `(session_id, timestamp)` 上,加速历史查询。### 功能点0.2:意图识别与任务规划#### 服务层 (Dart)##### Service层*   `IntentClassifier`    *   `Future<IntentType> classify(String input)`        *   **作用****意图分类**。调用LLM API,传入用户输入和预定义的意图模板,返回分类结果。**逻辑**:支持多标签分类,可同时属于多个意图类型。*   `ActionPlanner`    *   `Future<ActionPlan> plan(IntentType intent, ConversationContext context)`        *   **作用****任务规划**。根据意图生成具体的操作序列。**逻辑**:1. 分析意图关联的工具集。2. 确定工具执行顺序和依赖关系。3. 从上下文中提取参数。4. 生成结构化的`ActionPlan`对象。调用`MemoryManager.getRecentContext``ToolRegistry.getToolsByIntent`*   `ResponseGenerator`    *   `Future<String> generate(ActionResult actionResult, ConversationContext context)`        *   **作用****响应生成**。将操作结果转换为自然语言响应。**逻辑**:根据操作类型选择响应模板,填充动态内容,生成友好的用户回复。调用`TemplateEngine.render``LLMClient.generate`---## 需求点1:文件系统操作### 功能点1.1:文件读写与管理#### 客户端 (Flutter - 全平台)##### UI层*   `FileExplorerScreen`:文件浏览器主界面,展示文件树和文件内容。    *   **操作**:用户浏览目录结构,点击文件查看内容,右键菜单或长按执行操作(新建、删除、重命名)。*   `FileEditorScreen`:文件编辑界面,支持文本编辑和实时预览。    *   **操作**:用户编辑文件内容,保存更改,查看语法高亮。##### ViewModel/Provider层*   `FileExplorerProvider` (extends ChangeNotifier)    *   `Future<List<FileInfo>> loadDirectory(String path)`        *   **作用**:加载指定目录的文件列表。调用`ListDirectoryUseCase`        *   **参数**            *   `path: String`:目录路径。    *   `Future<FileContent> readFile(String path)`        *   **作用**:读取文件内容。调用`ReadFileUseCase`        *   **参数**            *   `path: String`:文件路径。    *   `Future<void> writeFile(String path, String content)`        *   **作用**:写入文件内容。调用`WriteFileUseCase`        *   **参数**            *   `path: String`:文件路径。            *   `content: String`:文件内容。    *   `Future<void> deleteFile(String path)`        *   **作用**:删除文件或目录。调用`DeleteFileUseCase`        *   **参数**            *   `path: String`:目标路径。##### UseCase层*   `ListDirectoryUseCase` (`Future<List<FileInfo>> execute(String path)`)    *   **作用**:列出目录内容。**校验**:检查路径是否在允许的工作区范围内。调用`FileRepository.listDirectory``PathValidator.validate`*   `ReadFileUseCase` (`Future<FileContent> execute(String path)`)    *   **作用**:读取文件内容。**逻辑**:1. 校验路径安全性。2. 读取文件。3. 根据文件类型解析内容(文本、图片等)。调用`FileRepository.read``FileParser.parse`*   `WriteFileUseCase` (`Future<void> execute(String path, String content)`)    *   **作用**:写入文件。**逻辑**:1. 校验路径安全性。2. 创建备份(如果文件已存在)。3. 写入新内容。调用`FileRepository.write``BackupManager.createBackup`*   `DeleteFileUseCase` (`Future<void> execute(String path)`)    *   **作用**:删除文件。**安全控制**:对于重要文件,先移动到回收站而非永久删除。调用`FileRepository.delete``TrashManager.moveToTrash`##### Repository层 (接口)*   `FileRepository`    *   `Future<List<FileInfo>> listDirectory(String path)`        *   **作用**:列出目录内容。    *   `Future<Uint8List> read(String path)`        *   **作用**:读取文件二进制内容。    *   `Future<void> write(String path, dynamic content)`        *   **作用**:写入文件内容。    *   `Future<void> delete(String path)`        *   **作用**:删除文件或目录。    *   `Future<bool> exists(String path)`        *   **作用**:检查路径是否存在。##### 数据源层 (实现)*   `FileRepositoryImpl` (实现 `FileRepository`接口)    *   `Future<List<FileInfo>> listDirectory(String path)`        *   **实现**:使用`dart:io``Directory(path).list().toList()`,将`FileSystemEntity`对象列表映射为`FileInfo`对象列表(包含name, isDirectory, size, modifiedTime等字段)。**Web平台**:使用`file_picker`插件或IndexedDB。    *   `Future<Uint8List> read(String path)`        *   **实现**:调用`File(path).readAsBytes()`**Web平台**:使用`http`请求获取文件。    *   `Future<void> write(String path, dynamic content)`        *   **实现**:调用`File(path).writeAsBytes(content)``File(path).writeAsString(content)`    *   `Future<void> delete(String path)`        *   **实现**:调用`FileSystemEntity.isDirectorySync(path) ? Directory(path).delete(recursive: true) : File(path).delete()`#### 服务层 (Dart)##### Service层*   `PathValidator`    *   `ValidationResult validate(String path)`        *   **作用****路径安全校验**。检查路径是否在允许的工作区范围内,防止目录遍历攻击。    *   `bool isWithinWorkspace(String path)`        *   **作用**:检查路径是否在当前工作区内。*   `BackupManager`    *   `Future<String> createBackup(String path)`        *   **作用**:创建文件备份。**逻辑**:在`.workbuddy/backups/`目录下创建文件的备份副本,返回备份路径。调用`FileRepository.read``FileRepository.write`*   `TrashManager`    *   `Future<void> moveToTrash(String path)`        *   **作用**:将文件移动到回收站。**跨平台支持**            *   **Windows**:使用`move_to_trash`插件            *   **macOS**:使用`move_to_trash`插件            *   **Linux**:使用`gio trash`命令            *   **移动端**:直接删除(无回收站概念)            *   **Web**:不支持        调用`PlatformAdapter.moveToTrash`##### Database层*   **sqflite 数据库**:存储文件操作日志。    *   **表 `file_operations_log`**:记录文件操作历史。        *   字段:`id` (INTEGER PRIMARY KEY), `operation` (TEXT), `path` (TEXT), `timestamp` (INTEGER), `user_id` (TEXT)。### 功能点1.2:文件搜索#### 客户端 (Flutter - 全平台)##### UI层*   `SearchScreen`:搜索界面,包含搜索框和结果列表。    *   **操作**:用户输入搜索关键词,选择搜索类型(文件名/内容),查看搜索结果。##### ViewModel/Provider层*   `SearchProvider` (extends ChangeNotifier)    *   `Future<List<String>> searchFiles(String pattern, String rootPath)`        *   **作用**:根据文件名模式搜索文件。调用`SearchFilesUseCase`        *   **参数**            *   `pattern: String`:Glob模式或文件名。            *   `rootPath: String`:搜索根目录。    *   `Future<List<SearchResult>> searchContent(String pattern, SearchOptions options)`        *   **作用**:搜索文件内容。调用`SearchContentUseCase`        *   **参数**            *   `pattern: String`:搜索模式(支持正则)。            *   `options: SearchOptions`:搜索选项(路径、文件类型、忽略规则等)。##### UseCase层*   `SearchFilesUseCase` (`Future<List<String>> execute(String pattern, String rootPath)`)    *   **作用**:文件名搜索。**逻辑**:使用Glob模式匹配文件名,返回匹配的文件路径列表。调用`FileSearcher.searchByPattern`*   `SearchContentUseCase` (`Future<List<SearchResult>> execute(String pattern, SearchOptions options)`)    *   **作用**:内容搜索。**逻辑**:使用Ripgrep引擎在文件内容中搜索匹配项,返回包含文件路径、行号、匹配内容的结构化结果。调用`ContentSearcher.search`##### Repository层 (接口)*   `SearchRepository`    *   `Future<List<String>> searchFiles(String pattern, String rootPath)`        *   **作用**:文件名搜索。    *   `Future<List<SearchResult>> searchContent(String pattern, SearchOptions options)`        *   **作用**:内容搜索。##### 数据源层 (实现)*   `SearchRepositoryImpl` (实现 `SearchRepository`接口)    *   `Future<List<String>> searchFiles(String pattern, String rootPath)`        *   **实现**:使用`glob`包匹配文件路径,递归遍历目录树进行匹配。    *   `Future<List<SearchResult>> searchContent(String pattern, SearchOptions options)`        *   **实现****桌面平台**:调用Ripgrep可执行文件,执行`rg --json --pattern "..." --path "..."`,解析JSON输出。**移动端/Web**:使用纯Dart实现的内容搜索(性能较低)。#### 服务层 (Dart)##### Service层*   `FileSearcher`    *   `Future<List<String>> searchByPattern(String pattern, String rootPath)`        *   **作用**:Glob模式搜索。支持`*``**``?`等通配符。*   `ContentSearcher`    *   `Future<List<SearchResult>> search(String pattern, SearchOptions options)`        *   **作用****Ripgrep集成**(仅桌面平台)。调用Ripgrep引擎进行高性能内容搜索。**逻辑**:1. 构建Ripgrep命令行参数。2. 执行子进程。3. 解析JSON输出。4. 处理上下文行、匹配高亮等。调用`RipgrepEngine.search`*   `RipgrepEngine`    *   `Future<List<RipgrepResult>> search(String pattern, String path, List<String> args)`        *   **作用**:执行Ripgrep命令。**实现**:使用`dart:io``Process.run`执行`rg`命令,捕获并解析输出。---## 需求点2:技能系统### 功能点2.1:技能加载与执行#### 客户端 (Flutter - 全平台)##### UI层*   `SkillManagerScreen`:技能管理界面,展示已安装技能列表。    *   **操作**:用户浏览技能列表,点击技能查看详情,执行技能。*   `SkillExecutionScreen`:技能执行界面,展示执行进度和结果。    *   **操作**:用户查看技能执行状态,中断执行。##### ViewModel/Provider层*   `SkillManagerProvider` (extends ChangeNotifier)    *   `Future<Skill> loadSkill(String skillName)`        *   **作用**:加载指定技能。调用`LoadSkillUseCase`        *   **参数**            *   `skillName: String`:技能名称。    *   `Future<SkillResult> executeSkill(String skillName, dynamic input)`        *   **作用**:执行技能。调用`ExecuteSkillUseCase`        *   **参数**            *   `skillName: String`:技能名称。            *   `input: dynamic`:输入数据。    *   `Future<void> installSkill(String skillPath, String level)`        *   **作用**:安装技能。调用`InstallSkillUseCase`        *   **参数**            *   `skillPath: String`:技能路径。            *   `level: String`:安装级别('user' 或 'project')。##### UseCase层*   `LoadSkillUseCase` (`Future<Skill> execute(String skillName)`)    *   **作用**:加载技能。**逻辑**:1. 从注册表查找技能路径。2. 读取`SKILL.md`文件。3. 解析技能内容。4. 执行安全审计。5. 缓存技能对象。调用`SkillRegistry.get``SkillLoader.loadFromPath``SecurityAuditor.audit`*   `ExecuteSkillUseCase` (`Future<SkillResult> execute(String skillName, dynamic input)`)    *   **作用**:执行技能。**逻辑**:1. 加载技能。2. 创建执行上下文。3. 解析技能指令。4. 按序执行指令。5. 收集执行结果。调用`SkillManager.load``SkillInterpreter.execute`*   `InstallSkillUseCase` (`Future<void> execute(String skillPath, String level)`)    *   **作用**:安装技能。**逻辑**:1. 验证技能结构。2. 执行安全审计。3. 复制技能文件到目标目录。4. 注册到技能注册表。调用`SkillValidator.validate``SecurityAuditor.audit``SkillInstaller.install`##### Repository层 (接口)*   `SkillRepository`    *   `Future<Skill> load(String skillName)`        *   **作用**:加载技能对象。    *   `Future<void> save(Skill skill, String level)`        *   **作用**:保存技能到指定级别。    *   `Future<List<Skill>> list(String? level)`        *   **作用**:列出已安装的技能。    *   `Future<void> delete(String skillName)`        *   **作用**:删除技能。##### 数据源层 (实现)*   `SkillRepositoryImpl` (实现 `SkillRepository`接口)    *   `Future<Skill> load(String skillName)`        *   **实现**:从`~/.workbuddy/skills/{skillName}/SKILL.md``{workspace}/.workbuddy/skills/{skillName}/SKILL.md`读取技能文件,解析Markdown内容并构造`Skill`对象。**Web平台**:从IndexedDB或服务器加载。    *   `Future<void> save(Skill skill, String level)`        *   **实现**:将技能对象序列化为Markdown,写入对应目录的`SKILL.md`文件。#### 服务层 (Dart)##### Service层*   `SkillLoader`    *   `Future<Skill> loadFromPath(String skillPath)`        *   **作用**:从路径加载技能。**逻辑**:1. 读取`SKILL.md`。2. 解析Front Matter和正文。3. 加载关联的参考文件和脚本。4. 构造完整的技能对象。调用`FileRepository.read``SkillParser.parse`*   `SkillParser`    *   `SkillDefinition parse(String content)`        *   **作用**:解析技能Markdown内容。提取名称、描述、指令、引用等字段。*   `SkillInterpreter`    *   `Future<dynamic> execute(String instructions, SkillContext context)`        *   **作用****技能执行引擎****逻辑**:1. 解析指令文本。2. 识别指令类型(工具调用、文件引用、脚本执行)。3. 按序执行各指令。4. 收集并返回结果。调用`ToolCallHandler.handle``ReferenceLoader.load``ScriptExecutor.execute`*   `SecurityAuditor`    *   `Future<SecurityReport> audit(Skill skill)`        *   **作用****安全审计**。检查技能是否包含危险操作(如访问系统目录、执行未授权命令等),生成安全报告。返回风险等级(P0/P1/P2)。##### Tool层*   `ToolCallHandler`    *   `Future<dynamic> handle(String toolName, dynamic args)`        *   **作用**:处理工具调用指令。查找并执行对应的工具。*   `ReferenceLoader`    *   `Future<String> load(String referencePath)`        *   **作用**:加载技能引用文件。读取`references/`目录下的文件内容。*   `ScriptExecutor`    *   `Future<dynamic> execute(String scriptPath, dynamic args)`        *   **作用**:执行技能脚本。**安全控制**:在沙箱环境中执行,限制系统访问。**Web平台**:不支持脚本执行。调用`SandboxExecutor.run`##### Database层*   **sqflite 数据库**:存储技能注册信息。    *   **表 `skill_registry`**:技能注册表。        *   字段:`name` (TEXT PRIMARY KEY), `path` (TEXT), `level` (TEXT), `installed_at` (INTEGER), `risk_level` (TEXT)。---## 需求点3:命令执行与系统集成### 功能点3.1:命令执行与安全控制#### 客户端 (Flutter - 全平台)##### UI层*   `CommandTerminalScreen`:命令行终端界面,支持命令输入和输出显示。    *   **操作**:用户输入命令,查看执行输出,发送中断信号(Ctrl+C)。**仅桌面平台可用**。##### ViewModel/Provider层*   `CommandProvider` (extends ChangeNotifier)    *   `Future<CommandResult> executeCommand(String command, CommandOptions options)`        *   **作用**:执行命令。调用`ExecuteCommandUseCase`。        *   **参数**:            *   `command: String`:要执行的命令。            *   `options: CommandOptions`:执行选项(工作目录、超时时间、是否需要审批等)。    *   `Future<void> killProcess(int pid)`        *   **作用**:终止进程。调用`KillProcessUseCase`。        *   **参数**:            *   `pid: int`:进程ID。    *   `List<ProcessInfo> getActiveProcesses()`        *   **作用**:获取活动进程列表。调用`GetActiveProcessesUseCase`。##### UseCase层*   `ExecuteCommandUseCase` (`Future<CommandResult> execute(String command, CommandOptions options)`)    *   **作用**:执行命令。**核心逻辑**:1. 验证命令安全性(黑名单检查)。2. 检查是否需要用户审批。3. 如需审批,显示确认对话框。4. 执行命令。5. 记录命令历史。调用`CommandValidator.validate`, `ApprovalManager.request`, `CommandExecutor.execute`, `CommandLogger.log`。**仅桌面平台支持**。*   `KillProcessUseCase` (`Future<void> execute(int pid)`)    *   **作用**:终止进程。调用`ProcessManager.kill`。*   `GetActiveProcessesUseCase` (`Future<List<ProcessInfo>> execute()`)    *   **作用**:获取活动进程列表。调用`ProcessManager.listActive`。##### Repository层 (接口)*   `CommandRepository`    *   `Future<CommandResult> execute(String command, CommandOptions options)`        *   **作用**:执行命令。    *   `Future<void> kill(int pid)`        *   **作用**:终止进程。    *   `List<ProcessInfo> listActive()`        *   **作用**:列出活动进程。##### 数据源层 (实现)*   `CommandRepositoryImpl` (实现 `CommandRepository`接口)    *   `Future<CommandResult> execute(String command, CommandOptions options)`        *   **实现**:使用`dart:io`的`Process.start`执行命令,捕获stdout和stderr流,设置超时定时器,返回包含输出和退出码的结果对象。**Web/移动端**:不支持。    *   `Future<void> kill(int pid)`        *   **实现**:调用`Process.killPid(pid, ProcessSignal.sigterm)`,如进程未终止,5秒后发送`ProcessSignal.sigkill`。#### 服务层 (Dart)##### Service层*   `CommandValidator`    *   `ValidationResult validate(String command)`        *   **作用**:**命令安全校验**。检查命令是否在黑名单中,是否包含危险操作(如`rm -rf /`、`sudo`等)。    *   `bool isBlacklisted(String command)`        *   **作用**:检查命令是否在黑名单中。*   `ApprovalManager`    *   `Future<bool> request(String command)`        *   **作用**:**审批流程**。向用户显示命令确认对话框,等待用户批准或拒绝。返回用户选择。*   `CommandExecutor`    *   `Future<CommandResult> execute(String command, CommandOptions options)`        *   **作用**:**命令执行**。**逻辑**:1. 创建Shell进程。2. 设置工作目录和环境变量。3. 捕获输出流。4. 设置超时。5. 监控进程状态。调用`ProcessManager.spawn`, `OutputStreamHandler.handle`。*   `ProcessManager`    *   `Process spawn(String command, SpawnOptions options)`        *   **作用**:创建子进程。使用`dart:io`的`Process.start`执行命令。    *   `void kill(int pid)`        *   **作用**:终止进程。    *   `List<ProcessInfo> listActive()`        *   **作用**:列出所有由WorkBuddy启动的活动进程。*   `CommandLogger`    *   `Future<void> log(String command, CommandResult result)`        *   **作用**:记录命令执行历史。调用`CommandHistoryRepository.save`。##### Database层*   **sqflite 数据库**:存储命令执行历史。    *   **表 `command_history`**:命令历史记录。        *   字段:`id` (INTEGER PRIMARY KEY), `command` (TEXT), `exit_code` (INTEGER), `output` (TEXT), `executed_at` (INTEGER), `user_id` (TEXT)。---## 需求点4:团队协作### 功能点4.1:团队创建与成员管理#### 客户端 (Flutter - 全平台)##### UI层*   `TeamManagementScreen`:团队管理界面,展示团队列表和成员。    *   **操作**:用户创建团队,添加成员,查看成员状态,删除团队。##### ViewModel/Provider层*   `TeamProvider` (extends ChangeNotifier)    *   `Future<Team> createTeam(String name)`        *   **作用**:创建团队。调用`CreateTeamUseCase`        *   **参数**            *   `name: String`:团队名称。    *   `Future<Agent> spawnMember(AgentConfig config)`        *   **作用**:生成团队成员。调用`SpawnMemberUseCase`        *   **参数**            *   `config: AgentConfig`:成员配置(类型、权限等)。    *   `Future<void> deleteTeam()`        *   **作用**:删除团队。调用`DeleteTeamUseCase`##### UseCase层*   `CreateTeamUseCase` (`Future<Team> execute(String name)`)    *   **作用**:创建团队。**逻辑**:1. 验证团队名称。2. 创建团队目录结构。3. 初始化团队配置文件。4. 注册团队。调用`TeamValidator.validateName``TeamStorage.create``TeamRegistry.register`*   `SpawnMemberUseCase` (`Future<Agent> execute(AgentConfig config)`)    *   **作用**:生成团队成员(AI Agent)。**逻辑**:1. 加载Agent定义。2. 初始化Agent实例。3. 创建成员邮箱。4. 启动Agent循环。调用`AgentFactory.create``AgentRuntime.start`*   `DeleteTeamUseCase` (`Future<void> execute()`)    *   **作用**:删除团队。**逻辑**:1. 关闭所有成员。2. 清理团队目录。3. 注销团队。调用`TeamManager.getAllMembers``Member.shutdown``TeamStorage.cleanup`##### Repository层 (接口)*   `TeamRepository`    *   `Future<Team> create(String name)`        *   **作用**:创建团队。    *   `Future<void> delete(String teamName)`        *   **作用**:删除团队。    *   `Future<void> addMember(String teamName, Agent member)`        *   **作用**:添加成员。    *   `Future<List<Agent>> getMembers(String teamName)`        *   **作用**:获取成员列表。##### 数据源层 (实现)*   `TeamRepositoryImpl` (实现 `TeamRepository`接口)    *   `Future<Team> create(String name)`        *   **实现**:创建目录`{workspace}/.workbuddy/teams/{name}/`,写入配置文件`team.toml`,返回Team对象。**Web平台**:存储到IndexedDB或服务器。    *   `Future<void> delete(String teamName)`        *   **实现**:递归删除目录`{workspace}/.workbuddy/teams/{teamName}/`#### 服务层 (Dart)##### Service层*   `AgentFactory`    *   `Future<Agent> create(AgentConfig config)`        *   **作用**:创建Agent实例。**逻辑**:1. 加载Agent定义文件。2. 初始化Agent上下文。3. 注入工具集。4. 返回Agent实例。调用`AgentLoader.loadDefinition``AgentInstance.initialize`*   `AgentRuntime`    *   `Future<void> start(Agent agent)`        *   **作用**:启动Agent运行循环。**逻辑**:1. 创建邮箱。2. 启动消息轮询循环。3. 处理接收到的消息。调用`Mailbox.create``AgentLoop.start`*   `MessageRouter`    *   `void route(Message message)`        *   **作用**:路由消息到目标成员。根据`recipient`字段查找目标邮箱,投递消息。调用`MailboxStore.get``Mailbox.put`##### Tool层*   `Mailbox`    *   `void put(Message message)`        *   **作用**:投递消息到邮箱。    *   `Message? poll()`        *   **作用**:从邮箱拉取消息。*   `AgentLoop`    *   `Future<void> start(Agent agent)`        *   **作用****Agent主循环****逻辑**:不断轮询邮箱,接收消息,处理消息,发送响应。调用`Mailbox.poll``Agent.processMessage``MessageRouter.route`##### Database层*   **文件系统存储**:团队数据存储在`.workbuddy/teams/`目录下。    *   **目录结构**`{team_name}/team.toml`(团队配置)、`{team_name}/members/`(成员定义)、`{team_name}/mailbox/`(邮箱数据)。### 功能点4.2:成员间消息通信#### 服务层 (Dart)##### Service层*   `Agent`    *   `Future<void> sendMessage(String recipient, Message message)`        *   **作用**:发送消息给其他成员。调用`MessageRouter.route`    *   `void processMessage(Message message)`        *   **作用**:处理接收到的消息。**逻辑**:根据消息类型(任务、通知、关闭请求等)执行相应处理。调用`TaskHandler.handle``NotificationHandler.handle``ShutdownHandler.handle`*   `MessageRouter`    *   `void route(Message message)`        *   **作用**:消息路由。查找目标成员邮箱,投递消息。---## 需求点5:自动化系统### 功能点5.1:自动化任务创建与管理#### 客户端 (Flutter - 全平台)##### UI层*   `AutomationScreen`:自动化管理界面,展示自动化任务列表。    *   **操作**:用户创建自动化,配置调度规则,启用/暂停自动化,查看执行历史。##### ViewModel/Provider层*   `AutomationProvider` (extends ChangeNotifier)    *   `Future<String> createAutomation(AutomationConfig config)`        *   **作用**:创建自动化任务。调用`CreateAutomationUseCase`        *   **参数**            *   `config: AutomationConfig`:自动化配置(名称、提示词、调度规则等)。    *   `Future<void> updateAutomation(String id, Map<String, dynamic> updates)`        *   **作用**:更新自动化。调用`UpdateAutomationUseCase`        *   **参数**            *   `id: String`:自动化ID。            *   `updates: Map<String, dynamic>`:更新内容。    *   `Future<void> pauseAutomation(String id)`        *   **作用**:暂停自动化。调用`PauseAutomationUseCase`        *   **参数**            *   `id: String`:自动化ID。##### UseCase层*   `CreateAutomationUseCase` (`Future<String> execute(AutomationConfig config)`)    *   **作用**:创建自动化。**逻辑**:1. 验证配置(调度规则、提示词)。2. 保存配置到TOML文件。3. 注册自动化。4. 调度首次执行。调用`AutomationValidator.validate``AutomationStorage.save``Scheduler.schedule`*   `UpdateAutomationUseCase` (`Future<void> execute(String id, Map<String, dynamic> updates)`)    *   **作用**:更新自动化。**逻辑**:1. 加载现有配置。2. 应用更新。3. 重新保存。4. 重新调度。调用`AutomationLoader.load``AutomationUpdater.apply``Scheduler.reschedule`*   `PauseAutomationUseCase` (`Future<void> execute(String id)`)    *   **作用**:暂停自动化。**逻辑**:1. 取消调度。2. 更新状态为PAUSED。调用`Scheduler.cancel``AutomationStatusUpdater.set`##### Repository层 (接口)*   `AutomationRepository`    *   `Future<void> save(AutomationConfig config)`        *   **作用**:保存自动化配置。    *   `Future<Automation> load(String id)`        *   **作用**:加载自动化。    *   `Future<List<Automation>> list()`        *   **作用**:列出所有自动化。    *   `Future<void> update(String id, dynamic updates)`        *   **作用**:更新自动化。##### 数据源层 (实现)*   `AutomationRepositoryImpl` (实现 `AutomationRepository`接口)    *   `Future<void> save(AutomationConfig config)`        *   **实现**:将配置对象序列化为TOML格式,写入`~/.workbuddy/automations/{id}/automation.toml`文件。**Web平台**:存储到IndexedDB或服务器。    *   `Future<Automation> load(String id)`        *   **实现**:读取`automation.toml`文件,解析TOML内容,构造Automation对象。#### 服务层 (Dart)##### Service层*   `Scheduler`    *   `void schedule(Automation automation)`        *   **作用****调度自动化任务****逻辑**:根据调度类型(recurring/once)计算下次执行时间,设置定时器。调用`RRuleScheduler.calculateNextRun``TimerManager.setTimer`    *   `void cancel(String automationId)`        *   **作用**:取消调度。清除定时器。    *   `void reschedule(Automation automation)`        *   **作用**:重新调度。取消旧定时器,设置新定时器。*   `RRuleScheduler`    *   `DateTime calculateNextRun(String rrule)`        *   **作用**:根据RRule规则计算下次执行时间。使用`rrule`包解析规则。*   `TimerManager`    *   `void setTimer(DateTime executeAt, String automationId)`        *   **作用**:设置定时器。使用`Timer`在指定时间触发自动化执行。##### Database层*   **sqflite 数据库**:存储自动化运行时状态。    *   **表 `automations`**:自动化运行时状态。        *   字段:`id` (TEXT PRIMARY KEY), `name` (TEXT), `status` (TEXT), `last_run` (INTEGER), `next_run` (INTEGER), `created_at` (INTEGER)。*   **文件系统存储**:自动化配置存储在TOML文件中。    *   **路径**`~/.workbuddy/automations/{id}/automation.toml`### 功能点5.2:自动化执行引擎#### 服务层 (Dart)##### Service层*   `AutomationExecutor`    *   `Future<void> execute(String automationId)`        *   **作用****自动化执行****逻辑**:1. 加载自动化配置。2. 创建执行上下文。3. 处理提示词。4. 执行任务。5. 记录执行日志。6. 调度下次执行。调用`AutomationLoader.load``PromptProcessor.process``TaskExecutor.execute``Scheduler.scheduleNextRun`*   `PromptProcessor`    *   `String process(String prompt, ExecutionContext context)`        *   **作用**:处理提示词模板。替换变量、注入上下文信息。*   `ExecutionContextManager`    *   `ExecutionContext create(Automation automation)`        *   **作用**:创建执行上下文。设置工作目录、环境变量等。##### Database层*   **sqflite 数据库**:存储执行日志。    *   **表 `automation_execution_log`**:执行日志。        *   字段:`id` (INTEGER PRIMARY KEY), `automation_id` (TEXT), `started_at` (INTEGER), `completed_at` (INTEGER), `status` (TEXT), `result` (TEXT)。---## 需求点6:记忆系统### 功能点6.1:工作记忆管理#### 服务层 (Dart)##### Service层*   `MemoryManager`    *   `Future<MemoryContext> loadSession(String sessionId)`        *   **作用****会话记忆加载****逻辑**:1. 加载今日日记。2. 加载长期记忆。3. 初始化记忆上下文。调用`MemoryStorage.loadDaily``MemoryStorage.loadLongTerm`    *   `Future<void> saveNote(String note)`        *   **作用**:保存记忆笔记。追加到今日日记文件。调用`MemoryStorage.appendDaily`    *   `Future<void> updateLongTerm(String key, dynamic value)`        *   **作用**:更新长期记忆。修改MEMORY.md文件。调用`MemoryStorage.updateLongTerm`    *   `Future<void> maintain()`        *   **作用****记忆维护****逻辑**:1. 查找超过30天的日记文件。2. 提炼关键信息。3. 更新长期记忆。4. 删除旧日记。调用`MemoryStorage.listFiles``MemoryDistiller.distill``FileSystem.delete`*   `MemoryDistiller`    *   `Future<String> distill(List<String> contents)`        *   **作用****记忆提炼**。使用AI从多条日记中提取关键信息,生成简洁的摘要。调用`AIEngine.summarize`##### Repository层 (接口)*   `MemoryRepository`    *   `Future<String> loadDaily(DateTime date)`        *   **作用**:加载指定日期的日记。    *   `Future<void> appendDaily(DateTime date, String content)`        *   **作用**:追加日记内容。    *   `Future<String> loadLongTerm()`        *   **作用**:加载长期记忆。    *   `Future<void> updateLongTerm(String content)`        *   **作用**:更新长期记忆。##### 数据源层 (实现)*   `MemoryRepositoryImpl` (实现 `MemoryRepository`接口)    *   `Future<String> loadDaily(DateTime date)`        *   **实现**:读取`{workspace}/.workbuddy/memory/YYYY-MM-DD.md`文件。    *   `Future<void> appendDaily(DateTime date, String content)`        *   **实现**:读取日记文件,追加新内容(Markdown格式),写回文件。    *   `Future<String> loadLongTerm()`        *   **实现**:读取`{workspace}/.workbuddy/memory/MEMORY.md`文件。**Web平台**:从IndexedDB或服务器加载。##### Database层*   **文件系统存储**:记忆数据存储在Markdown文件中。    *   **目录结构**`{workspace}/.workbuddy/memory/`    *   **文件**`YYYY-MM-DD.md`(日记)、`MEMORY.md`(长期记忆)。---## 需求点7:结果展示与交付### 功能点7.1:HTML预览与文件展示#### 服务层 (Dart)##### Service层*   `ResultPresenter`    *   `Future<void> present(TaskResult result)`        *   **作用****结果展示**。根据结果类型选择展示方式。调用`HtmlPresenter.prepare``FilePresenter.prepare``AttachmentManager.collect`    *   `Future<void> previewHtml(String filePath)`        *   **作用**:预览HTML文件。启动本地服务器,在浏览器中打开。调用`LocalServer.start``PreviewUrl.open`    *   `Future<void> openResult(String filePath)`        *   **作用**:打开结果文件。使用系统默认应用打开。调用`url_launcher`插件。    *   `Future<void> deliverAttachments(List<String> filePaths)`        *   **作用**:交付附件文件。显示附件列表供用户下载。调用`AttachmentManager.deliver`*   `LocalServer`    *   `Future<String> start(int port, String directory)`        *   **作用****启动本地HTTP服务器**。在指定端口提供静态文件服务。返回服务器URL。**桌面平台**:使用`shelf`包创建HTTP服务器。**移动端/Web**:不支持。    *   `Future<void> stop()`        *   **作用**:停止服务器。*   `PreviewService`    *   `Future<void> openUrl(String url)`        *   **作用**:在系统浏览器中打开URL。调用`url_launcher`插件。##### Tool层*   `AttachmentManager`    *   `List<Attachment> collect(List<String> filePaths)`        *   **作用**:收集附件。验证文件存在性,构造附件对象列表。    *   `void deliver(List<Attachment> attachments)`        *   **作用**:交付附件。在UI中显示附件列表,支持下载/分享。移动端使用`share_plus`插件。---## 需求点8:知识库检索### 功能点8.1:知识库搜索与集成#### 服务层 (Dart)##### Service层*   `KnowledgeBaseManager`    *   `Future<List<SearchResult>> search(String query, List<String> bases)`        *   **作用****知识库搜索****逻辑**:1. 连接知识库服务。2. 处理查询。3. 执行搜索。4. 聚合结果。调用`CloudService.connect``QueryProcessor.process``SearchEngine.search``ResultAggregator.aggregate`    *   `Future<void> connect()`        *   **作用**:连接知识库服务。获取访问凭证。调用`CloudService.connect``AuthService.authenticate`    *   `List<KnowledgeBase> listAvailable()`        *   **作用**:列出可用知识库。返回预定义的知识库列表。*   `QueryProcessor`    *   `ProcessedQuery process(String query)`        *   **作用**:处理查询。优化查询表达式,提取关键词。    *   `String optimize(String query)`        *   **作用**:优化查询。移除停用词,扩展同义词。*   `SearchEngine`    *   `Future<List<SearchResult>> search(ProcessedQuery query, List<String> bases)`        *   **作用****搜索引擎**。调用向量搜索引擎或API进行检索。调用`RAGProcessor.retrieve`*   `ResultAggregator`    *   `List<SearchResult> aggregate(List<SearchResult> results)`        *   **作用****结果聚合**。去重、排序、评分。调用`RelevanceScorer.score`##### Repository层 (接口)*   `KnowledgeBaseRepository`    *   `Future<List<SearchResult>> search(String query, List<String> bases)`        *   **作用**:知识库搜索API调用。##### 数据源层 (实现)*   `KnowledgeBaseRepositoryImpl` (实现 `KnowledgeBaseRepository`接口)    *   `Future<List<SearchResult>> search(String query, List<String> bases)`        *   **实现**:调用腾讯云知识库API,使用`dio``http`包发送HTTP请求,传入查询和知识库ID列表,返回搜索结果。---## 核心数据结构### Dart类定义```dart// 消息class Message {  final String id;  final String sessionId;  final String role; // 'user' | 'assistant'  final String content;  final DateTime timestamp;  Message({    required this.id,    required this.sessionId,    required this.role,    required this.content,    required this.timestamp,  });  Map<String, dynamic> toMap() => {    'id': id,    'session_id': sessionId,    'role': role,    'content': content,    'timestamp': timestamp.millisecondsSinceEpoch,  };  factory Message.fromMap(Map<String, dynamic> map) => Message(    id: map['id'],    sessionId: map['session_id'],    role: map['role'],    content: map['content'],    timestamp: DateTime.fromMillisecondsSinceEpoch(map['timestamp']),  );}// 技能class Skill {  final String name;  final String description;  final String instructions;  final List<String>? references;  final List<String>? scripts;  Skill({    required this.name,    required this.description,    required this.instructions,    this.references,    this.scripts,  });}// 自动化class Automation {  final String id;  final String name;  final String prompt;  final String? rrule;  final DateTime? scheduledAt;  final String scheduleType; // 'recurring' | 'once'  final String status; // 'ACTIVE' | 'PAUSED'  final List<String> cwds;  Automation({    required this.id,    required this.name,    required this.prompt,    this.rrule,    this.scheduledAt,    required this.scheduleType,    required this.status,    required this.cwds,  });}// 团队class Team {  final String name;  final List<Agent> members;  final DateTime createdAt;  Team({    required this.name,    required this.members,    required this.createdAt,  });}// Agentclass Agent {  final String name;  final String type;  final List<String> permissions;  final String status; // 'active' | 'idle'  Agent({    required this.name,    required this.type,    required this.permissions,    required this.status,  });}// 记忆上下文class MemoryContext {  final String daily;  final String longTerm;  final dynamic sessionContext;  MemoryContext({    required this.daily,    required this.longTerm,    this.sessionContext,  });}// 命令结果class CommandResult {  final String output;  final String error;  final int exitCode;  final Duration duration;  CommandResult({    required this.output,    required this.error,    required this.exitCode,    required this.duration,  });}// 搜索结果class SearchResult {  final String filePath;  final int lineNumber;  final String content;  final String? context;  SearchResult({    required this.filePath,    required this.lineNumber,    required this.content,    this.context,  });}// 文件信息class FileInfo {  final String name;  final String path;  final bool isDirectory;  final int size;  final DateTime modifiedTime;  FileInfo({    required this.name,    required this.path,    required this.isDirectory,    required this.size,    required this.modifiedTime,  });}// 任务结果class TaskResult {  final String type; // 'html' | 'file' | 'attachments'  final dynamic content;  final String? filePath;  final List<String>? attachmentPaths;  TaskResult({    required this.type,    required this.content,    this.filePath,    this.attachmentPaths,  });}```---## 项目目录结构```workbuddy/├── pubspec.yaml├── analysis_options.yaml├── .gitignore├── README.md├── lib/│   ├── main.dart                    # 应用入口│   ││   ├── app/│   │   ├── app.dart                 # MaterialApp配置│   │   ├── routes.dart              # 路由定义│   │   └── theme.dart               # 主题配置│   ││   ├── screens/                     # UI层(页面)│   │   ├── chat/│   │   │   ├── chat_screen.dart│   │   │   └── widgets/│   │   │       └── message_bubble.dart│   │   ├── file/│   │   │   ├── file_explorer_screen.dart│   │   │   └── file_editor_screen.dart│   │   ├── search/│   │   │   └── search_screen.dart│   │   ├── skill/│   │   │   ├── skill_manager_screen.dart│   │   │   └── skill_execution_screen.dart│   │   ├── command/│   │   │   └── command_terminal_screen.dart│   │   ├── team/│   │   │   └── team_management_screen.dart│   │   ├── automation/│   │   │   └── automation_screen.dart│   │   └── settings/│   │       └── settings_screen.dart│   ││   ├── providers/                   # Provider层(状态管理)│   │   ├── chat_provider.dart│   │   ├── file_explorer_provider.dart│   │   ├── search_provider.dart│   │   ├── skill_manager_provider.dart│   │   ├── command_provider.dart│   │   ├── team_provider.dart│   │   └── automation_provider.dart│   ││   ├── usecases/                    # UseCase层(业务逻辑)│   │   ├── chat/│   │   │   ├── send_message_usecase.dart│   │   │   ├── load_history_usecase.dart│   │   │   └── clear_session_usecase.dart│   │   ├── file/│   │   │   ├── list_directory_usecase.dart│   │   │   ├── read_file_usecase.dart│   │   │   ├── write_file_usecase.dart│   │   │   └── delete_file_usecase.dart│   │   ├── search/│   │   │   ├── search_files_usecase.dart│   │   │   └── search_content_usecase.dart│   │   ├── command/│   │   │   ├── execute_command_usecase.dart│   │   │   ├── kill_process_usecase.dart│   │   │   └── get_active_processes_usecase.dart│   │   ├── skill/│   │   │   ├── load_skill_usecase.dart│   │   │   ├── execute_skill_usecase.dart│   │   │   └── install_skill_usecase.dart│   │   ├── team/│   │   │   ├── create_team_usecase.dart│   │   │   ├── spawn_member_usecase.dart│   │   │   └── delete_team_usecase.dart│   │   └── automation/│   │       ├── create_automation_usecase.dart│   │       ├── update_automation_usecase.dart│   │       └── pause_automation_usecase.dart│   ││   ├── repositories/                # Repository层(数据访问接口)│   │   ├── message_repository.dart│   │   ├── file_repository.dart│   │   ├── search_repository.dart│   │   ├── command_repository.dart│   │   ├── skill_repository.dart│   │   ├── team_repository.dart│   │   ├── automation_repository.dart│   │   ├── memory_repository.dart│   │   └── knowledge_base_repository.dart│   ││   ├── data/│   │   ├── datasources/             # 数据源实现│   │   │   ├── local/│   │   │   │   ├── database_helper.dart│   │   │   │   ├── message_repository_impl.dart│   │   │   │   ├── file_repository_impl.dart│   │   │   │   ├── search_repository_impl.dart│   │   │   │   ├── command_repository_impl.dart│   │   │   │   ├── skill_repository_impl.dart│   │   │   │   ├── team_repository_impl.dart│   │   │   │   ├── automation_repository_impl.dart│   │   │   │   ├── memory_repository_impl.dart│   │   │   │   └── knowledge_base_repository_impl.dart│   │   │   └── remote/│   │   │       └── llm_api_client.dart│   │   ││   │   └── models/                  # 数据模型│   │       ├── message.dart│   │       ├── skill.dart│   │       ├── automation.dart│   │       ├── team.dart│   │       ├── agent.dart│   │       ├── command_result.dart│   │       ├── search_result.dart│   │       ├── file_info.dart│   │       └── task_result.dart│   ││   ├── services/                    # Service层(核心业务服务)│   │   ├── ai_engine.dart│   │   ├── intent_classifier.dart│   │   ├── action_planner.dart│   │   ├── action_executor.dart│   │   ├── file_service.dart│   │   ├── search_service.dart│   │   ├── command_service.dart│   │   ├── skill_service.dart│   │   ├── team_service.dart│   │   ├── automation_service.dart│   │   ├── memory_service.dart│   │   ├── knowledge_base_service.dart│   │   ├── path_validator.dart│   │   ├── backup_manager.dart│   │   ├── trash_manager.dart│   │   ├── security_auditor.dart│   │   ├── agent_factory.dart│   │   ├── agent_runtime.dart│   │   ├── message_router.dart│   │   ├── scheduler.dart│   │   ├── memory_manager.dart│   │   ├── result_presenter.dart│   │   └── local_server.dart│   ││   ├── tools/                       # Tool层(工具类)│   │   ├── tool_orchestrator.dart│   │   ├── tool_executor.dart│   │   ├── tool_call_handler.dart│   │   ├── reference_loader.dart│   │   ├── script_executor.dart│   │   ├── mailbox.dart│   │   ├── agent_loop.dart│   │   ├── file_searcher.dart│   │   ├── content_searcher.dart│   │   ├── ripgrep_engine.dart│   │   ├── process_manager.dart│   │   ├── timer_manager.dart│   │   ├── rrule_scheduler.dart│   │   ├── automation_executor.dart│   │   ├── prompt_processor.dart│   │   ├── memory_distiller.dart│   │   ├── attachment_manager.dart│   │   ├── query_processor.dart│   │   ├── search_engine.dart│   │   └── result_aggregator.dart│   ││   ├── utils/                       # 工具函数│   │   ├── constants.dart│   │   ├── validators.dart│   │   ├── helpers.dart│   │   └── platform_adapter.dart│   ││   └── core/                        # 核心类│       ├── dependency_injection.dart│       ├── error_handling.dart│       └── logger.dart├── assets/                          # 静态资源│   ├── images/│   │   ├── logo.png│   │   └── icons/│   └── fonts/├── test/                            # 测试│   ├── unit/│   ├── widget/│   └── integration/├── web/                             # Web平台特定文件│   ├── index.html│   ├── manifest.json│   └── favicon.png├── android/                         # Android平台特定文件├── ios/                             # iOS平台特定文件├── windows/                         # Windows平台特定文件├── macos/                           # macOS平台特定文件└── linux/                           # Linux平台特定文件```---## 配置文件### pubspec.yaml```yamlname: workbuddydescription: AI-powered multi-platform assistantversion: 1.0.0environment:  sdk: '>=3.0.0 <4.0.0'dependencies:  flutter:    sdk: flutter  # 状态管理  provider: ^6.1.0  # 数据库  sqflite: ^2.3.0  path_provider: ^2.1.0  # HTTP & 网络  dio: ^5.4.0  # 文件操作  path: ^1.8.0  # UI组件  flutter_markdown: ^0.6.0  url_launcher: ^6.2.0  share_plus: ^7.2.0  file_picker: ^6.1.0  # JSON序列化  json_annotation: ^4.8.0  # 工具库  uuid: ^4.2.0  rrule: ^0.2.0  # 本地服务器(桌面平台)  shelf: ^1.4.0  # 命令执行(仅桌面)  process_run: ^0.13.0dev_dependencies:  flutter_test:    sdk: flutter  flutter_lints: ^3.0.0  build_runner: ^2.4.0  json_serializable: ^6.7.0flutter:  uses-material-design: true  assets:    - assets/images/    - assets/fonts/```### analysis_options.yaml```yamlinclude: package:flutter_lints/flutter.yamllinter:  rules:    - prefer_const_constructors    - prefer_const_declarations    - avoid_print    - prefer_single_quotes```---## 数据库Schema### sqflite数据库表```dart// 数据库初始化脚本class DatabaseHelper {  static final DatabaseHelper instance = DatabaseHelper._init();  static Database? _database;  Future<Database> get database async {    if (_database != null) return _database!;    _database = await _initDB('workbuddy.db');    return _database!;  }  Future<Database> _initDB(String filePath) async {    final dbPath = await getApplicationDocumentsDirectory();    final path = join(dbPath.path, filePath);    return await openDatabase(path, version: 1, onCreate: _createDB);  }  Future _createDB(Database db, int version) async {    // 消息表    await db.execute('''      CREATE TABLE messages (        id TEXT PRIMARY KEY,        session_id TEXT NOT NULL,        role TEXT NOT NULL CHECK(role IN ('user', 'assistant')),        content TEXT NOT NULL,        timestamp INTEGER NOT NULL,        created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000)      )    ''');    await db.execute('''      CREATE INDEX idx_messages_session ON messages(session_id, timestamp)    ''');    // 命令历史表    await db.execute('''      CREATE TABLE command_history (        id INTEGER PRIMARY KEY AUTOINCREMENT,        command TEXT NOT NULL,        exit_code INTEGER,        output TEXT,        error TEXT,        executed_at INTEGER NOT NULL,        user_id TEXT,        duration_ms INTEGER      )    ''');    await db.execute('''      CREATE INDEX idx_command_history_time ON command_history(executed_at DESC)    ''');    // 自动化表    await db.execute('''      CREATE TABLE automations (        id TEXT PRIMARY KEY,        name TEXT NOT NULL,        prompt TEXT NOT NULL,        schedule_type TEXT NOT NULL CHECK(schedule_type IN ('recurring', 'once')),        rrule TEXT,        scheduled_at INTEGER,        status TEXT NOT NULL DEFAULT 'ACTIVE' CHECK(status IN ('ACTIVE', 'PAUSED')),        cwds TEXT,        last_run INTEGER,        next_run INTEGER,        created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),        updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000)      )    ''');    await db.execute('''      CREATE INDEX idx_automations_next_run ON automations(next_run) WHERE status = 'ACTIVE'    ''');    // 自动化执行日志表    await db.execute('''      CREATE TABLE automation_execution_log (        id INTEGER PRIMARY KEY AUTOINCREMENT,        automation_id TEXT NOT NULL,        started_at INTEGER NOT NULL,        completed_at INTEGER,        status TEXT CHECK(status IN ('running', 'success', 'failed')),        result TEXT,        error_message TEXT,        FOREIGN KEY (automation_id) REFERENCES automations(id)      )    ''');    await db.execute('''      CREATE INDEX idx_execution_log_automation ON automation_execution_log(automation_id, started_at DESC)    ''');    // 技能注册表    await db.execute('''      CREATE TABLE skill_registry (        name TEXT PRIMARY KEY,        path TEXT NOT NULL,        level TEXT NOT NULL CHECK(level IN ('user', 'project')),        risk_level TEXT CHECK(risk_level IN ('P0', 'P1', 'P2')),        installed_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000)      )    ''');    // 文件操作日志表    await db.execute('''      CREATE TABLE file_operations_log (        id INTEGER PRIMARY KEY AUTOINCREMENT,        operation TEXT NOT NULL,        path TEXT NOT NULL,        timestamp INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),        user_id TEXT,        details TEXT      )    ''');    await db.execute('''      CREATE INDEX idx_file_ops_time ON file_operations_log(timestamp DESC)    ''');  }}```---## 方法调用关系图```┌─────────────────────────────────────────────────────────────────────┐│                      UI层 (Flutter Widgets)                         ││  ChatScreen  FileExplorer  SkillManager  CommandTerminal  ...      │└───────────────────────────┬─────────────────────────────────────────┘                            │ Provider方法调用┌───────────────────────────▼─────────────────────────────────────────┐│                      Provider层 (状态管理)                          ││  ChatProvider  FileExplorerProvider  SkillManagerProvider ...      │└───────────────────────────┬─────────────────────────────────────────┘                            │ UseCase方法调用┌───────────────────────────▼─────────────────────────────────────────┐│                      UseCase层(业务逻辑)                           ││  SendMessageUseCase  ReadFileUseCase  ExecuteCommandUseCase ...    │└────┬───────────────────┬───────────────────┬─────────────────────────┘     │                   │                   │     │                   │ Repository调用     │ 服务调用┌────▼───────────────────▼───────────────────▼─────────────────────────┐│                      Service层 & Repository层                        ││  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐               ││  │AIEngine  │ │FileRepo  │ │CmdRepo   │ │SkillRepo │ ...           ││  └─────┬────┘ └─────┬────┘ └─────┬────┘ └─────┬────┘               │└────────┼────────────┼────────────┼────────────┼─────────────────────┘         │            │            │            │┌────────▼────────────▼────────────▼────────────▼─────────────────────┐│                      Tool层 & 数据访问层                             ││  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐           ││  │LLMAPI  │ │dart:io │ │Process  │ │TOMLFile│ │sqflite  │           ││  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘           │└─────────────────────────────────────────────────────────────────────┘         │            │            │            │┌────────▼────────────▼────────────▼────────────▼─────────────────────┐│                      外部系统 & 存储                                  ││  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐               ││  │LLM Service│ │OS Files  │ │Shell/Cmd │ │SQLite DB │               ││  └──────────┘ └──────────┘ └──────────┘ └──────────┘               │└─────────────────────────────────────────────────────────────────────┘```---## 平台差异说明### 命令执行**桌面平台(Windows/macOS/Linux)**:完整支持,使用`dart:io Process`**移动端(Android/iOS)**:受限支持,仅能执行特定命令**Web**:不支持### 文件系统**桌面/移动端**:使用`dart:io`直接访问文件系统**Web**:使用IndexedDB、LocalStorage或服务器存储### 本地服务器**桌面平台**:支持,使用`shelf`包创建HTTP服务器**移动端/Web**:不支持### 进程管理**桌面平台**:完整支持**移动端**:受限支持**Web**:不支持---## 下一步:生成完整项目代码此方法调用结构文档详细定义了WorkBuddy的Flutter架构:1. **分层架构**:UI层 → Provider层 → UseCase层 → Repository层 → 数据源层2. **9个需求模块**,每个包含详细的方法定义、参数、核心逻辑3. **跨平台支持**:Android、iOS、Windows、macOS、Linux、Web4. **数据持久化**:sqflite数据库 + 文件系统存储5. **状态管理**:Provider模式6. **平台差异**:针对不同平台的适配策略下一步将基于此结构生成:- 完整的Dart源代码(所有类、方法实现)- pubspec.yaml配置文件- 数据库初始化脚本- 平台特定配置(Android、iOS、Windows、macOS、Linux、Web)- 测试代码- 文档(README.md, API文档)
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-13 02:06:43 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/520199.html
  2. 运行时间 : 0.134953s [ 吞吐率:7.41req/s ] 内存消耗:5,076.22kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0a4ca7d3e3d56da219e8ea346fbc0db0
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.80 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000532s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000715s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000333s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000291s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000481s ]
  6. SELECT * FROM `set` [ RunTime:0.000183s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000600s ]
  8. SELECT * FROM `article` WHERE `id` = 520199 LIMIT 1 [ RunTime:0.000746s ]
  9. UPDATE `article` SET `lasttime` = 1776017203 WHERE `id` = 520199 [ RunTime:0.001943s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000255s ]
  11. SELECT * FROM `article` WHERE `id` < 520199 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000359s ]
  12. SELECT * FROM `article` WHERE `id` > 520199 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001541s ]
  13. SELECT * FROM `article` WHERE `id` < 520199 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000550s ]
  14. SELECT * FROM `article` WHERE `id` < 520199 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002374s ]
  15. SELECT * FROM `article` WHERE `id` < 520199 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000906s ]
0.138977s