kuaifan
28beb7fe5e
fix(ai): AI 命令更新消息时不显示"已编辑"标记
...
使用 change- 替代 update- 动作,避免消息显示编辑标记
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-25 12:43:47 +00:00
kuaifan
77ebdd2ccb
fix(ai): 前端仅在任务/项目对话中显示 /analyze 命令
...
- /analyze 命令仅在 group_type 为 task 或 project 时显示
- /summarize 命令保持在所有对话类型中可用
- 统一变量名 notifyMsgId -> pendingMsgId
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-25 12:32:38 +00:00
kuaifan
28504e4a4e
refactor(ai): 简化 AI 命令消息处理为单条 text 消息更新
...
- 将"正在处理"消息从 notice 类型改为 text 类型
- 命令完成后直接更新原消息内容,而非发送额外消息
- 移除 sendMessage 方法,统一使用 updatePendingMessage
- 重命名 notifyMsgId 为 pendingMsgId 以更准确表达用途
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-25 10:52:38 +00:00
kuaifan
5ee5f253ec
feat(ai): 添加 /analyze 和 /summarize 对话命令
...
- 新增 AiDialogCommand 模块处理 AI 命令业务逻辑
- 新增 AiDialogCommandTask 异步任务
- /analyze: 任务对话分析任务状态,项目对话分析项目健康度
- /summarize: 总结对话中的讨论内容
- 前端 ChatInput 添加斜杠命令菜单项
- 支持并发控制,同一对话同时只能执行一个 AI 命令
- 执行状态通过 notice 消息实时反馈
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-25 02:07:39 +00:00
kuaifan
1ac6bad2bb
fix(task): 修复工作流切换时完成状态处理逻辑
...
- 恢复工作流切换时通过 $data['complete_at'] 设置完成状态,确保走统一处理入口
- 修复工作流切换时主任务完成状态校验被跳过的问题
- 修复工作流切换时 $updateMarking['is_update_project'] 未设置的问题
- checkAndAutoSetFlowItem 仅在用户单独提交 complete_at 时调用
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-22 07:34:09 +00:00
kuaifan
773eead827
feat(ai): AI 任务建议支持多语言输出
...
- 新增 getUserLanguageInfo 方法获取用户语言偏好
- 新增 getLocalizedTitles 方法,支持 9 种语言的标题和提示文案
- 调整 AI Prompt,根据用户语言输出对应语言的建议内容
- 相似任务检测阈值从 0.7 调整为 0.5
- 完善方法注释文档
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 05:32:20 +00:00
kuaifan
c4dd04ccb6
fix(task): 修复任务完成/取消完成时工作流状态自动切换逻辑
...
- 重构 flow_item_id 变更时的完成状态处理,使用 completeTask 方法替代直接赋值
- 新增 checkAndAutoSetFlowItem 方法,支持自动设置唯一的开始/结束状态
- 存在多个开始/结束状态时抛出带状态列表的错误(-4005/-4006),由前端引导用户选择
- 修复 complete_at 与 flow_item_id 同时存在时的重复处理问题
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 05:30:32 +00:00
kuaifan
2cdde37069
fix(observer): 修复 UserObserver 调用 private 方法 authInfo() 的错误
...
将 User::authInfo() 改为 User::userid(),因为 authInfo() 是 private 方法,
Observer 无法访问。userid() 是 public 方法,内部会正确调用 authInfo()。
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 16:58:11 +00:00
kuaifan
f68f759418
fix(ai): 更新提示信息为本地化文本
2026-01-21 15:56:03 +00:00
kuaifan
801d0b24ab
perf(ai): 缩短 AI 任务分析延迟时间至 10 秒
...
将 AiTaskLoopTask 的 DELAY_SECONDS 从 60 秒减少到 10 秒,
使新建任务更快获得 AI 建议。
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:07 +00:00
kuaifan
29be29b9cf
feat(ai): 优化 AI 提示词并完善建议交互功能
...
- 优化后端提示词:描述生成、子任务拆分、负责人推荐,新增栏目信息,去掉无效的 similar_count
- 优化前端提示词:去掉硬性字数限制,即时消息改为简短输出
- 新增 :::ai-action{...}::: 语法处理,支持单独采纳/忽略 assignee 和 similar
- 采纳/忽略后更新消息状态显示
- 负责人改为追加模式,保留现有负责人
- 新增任务关联功能,similar 采纳时自动创建双向关联
- 相似度阈值从 0.7 调整为 0.5,搜索结果增加到 200
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:07 +00:00
kuaifan
9acf7d2046
fix(ai): 调整 AI 建议执行条件
...
1. subtasks: 标题长度阈值从 10 改为 5
2. similar: 启用向量搜索查找相似任务
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:07 +00:00
kuaifan
3911af7b51
fix(ai): 修复描述格式和负责人重复问题
...
1. 描述建议:AI 返回 Markdown,前端用 MarkdownConver 转 HTML
2. 负责人推荐:排除已分配的任务成员
3. 解析负责人推荐时去重,防止 AI 返回重复用户
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:07 +00:00
kuaifan
6b722b7ed7
fix(ai): 修正 AiTaskLoopTask 中 Apps 类的命名空间
...
App\Models\Apps -> App\Module\Apps
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:07 +00:00
kuaifan
6a00b87f72
fix(ai): 修正 API 路由地址格式
...
将 ai-apply/ai-dismiss 改为 ai_apply/ai_dismiss,
匹配 Laravel 路由方法命名转换规则(task__ai_apply -> ai_apply)
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:07 +00:00
kuaifan
0a97039d75
refactor(ai): 重构 AI 建议功能并完善向量搜索
...
1. 重构 task__ai_apply 接口:移除业务逻辑,仅负责状态更新和日志记录,
返回建议数据由前端调用现有接口处理(taskUpdate/taskAddSub)
2. 实现 searchSimilarByEmbedding 向量搜索:
- 使用 ManticoreBase::taskVectorSearch 进行向量搜索
- 按 project_id 过滤同项目任务
- 排除当前任务及其子任务
- 设置 0.7 相似度阈值,最多返回 5 个结果
3. 更新 AI 助手头像:将文字 "AI" 替换为 SVG 图标
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:06 +00:00
kuaifan
452af4bd2f
fix(ai): address issues from second code review
...
- Add STATUS_APPLIED and STATUS_DISMISSED constants to model
- Add markApplied() and markDismissed() methods
- Update event status after apply/dismiss actions (prevent duplicate ops)
- Validate related_task_id exists and user has permission
- Filter empty or overly long subtask names before creation
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:06 +00:00
kuaifan
75073d4320
fix(ai): address security and robustness issues from code review
...
Security fixes:
- Add escapeUserInput() to prevent Prompt injection via user input
- Validate msgId belongs to dialogId in updateMessageStatus()
- Add type parameter whitelist validation in ai-apply/ai-dismiss
- Add event record validation in task__ai_dismiss
Robustness fixes:
- Use atomic update for markProcessing to prevent concurrent processing
- Add subtask count limit check before creation (max 50)
- Disable similar task feature until vector search is implemented
- Fix Promise anti-pattern in frontend actions
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:06 +00:00
kuaifan
d4d7a0d69f
feat(ai): add AI::invoke() method for task suggestions
...
- Add generic invoke() static method to AI module for custom chat completion
- Fix AiTaskSuggestion::callAi() to properly handle AI::invoke() response
- Fix findSimilarTasks() to properly handle AI::getEmbedding() response
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:30:06 +00:00
kuaifan
027662ebab
feat(ai): add ai-apply and ai-dismiss API endpoints
2026-01-21 15:30:06 +00:00
kuaifan
106465b932
feat(ai): add AiTaskLoopTask timer and register to crontab
2026-01-21 15:30:06 +00:00
kuaifan
eef4c6fbe5
feat(ai): add AiTaskAnalyzeTask async task
2026-01-21 15:30:06 +00:00
kuaifan
916ae97ca7
feat(ai): add AiTaskSuggestion module with prompt templates
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:30:06 +00:00
kuaifan
841405505d
feat(ai): add ProjectTaskAiEvent model
2026-01-21 15:30:06 +00:00
kuaifan
2180998e81
feat(ai-assistant): 添加图片发送功能支持多模态对话
...
- 支持上传图片并压缩(当前消息 1024px,历史 512px)
- 图片独立缓存存储,使用占位符 [IMG:xxx] 替代 base64
- 新增 prompt-image.vue 组件展示历史图片缩略图
- 后端 AI.php 支持多模态消息格式处理
- 添加图片缓存清理机制(删除会话时同步清理)
- 优化 parsePromptContent 避免重复调用
- 会话标题自动过滤图片占位符
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 09:31:34 +00:00
kuaifan
ae021fd148
fix(push): 修复友盟延迟推送已读检查失效的问题
...
消息ID取值路径错误,导致延迟推送时无法正确判断消息已读状态,
用户在PC端阅读消息后APP仍会收到重复推送。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 00:44:45 +00:00
kuaifan
f8b335a003
feat(ai-assistant): 增加元素向量匹配与关键词搜索能力
...
- 新增后端 match_elements API,使用向量相似度匹配页面元素
- 页面上下文采集支持关键词过滤,按 name/aria-label/placeholder/title 匹配
- 关键词匹配失败时自动降级为向量搜索
- 改进 findElementByRef 函数,使用 selector + name 双重匹配提高准确性
2026-01-18 11:50:27 +00:00
kuaifan
0cefb7eaff
feat(task): 兼容 start_at/end_at 参数,统一转换为 times
...
- 新增 ProjectTask::normalizeTimes() 方法统一处理时间参数
- 支持只传 end_at 时自动补充 start_at
- 支持只传 start_at 时保留已有 end_at
2026-01-16 08:37:32 +00:00
kuaifan
23b06327d6
feat(file): 添加文件内容提取 API 支持分页读取
...
- FileController: 新增 fetch API 通过路径获取文本内容
- FileController: one API 支持 with_text 参数提取文本
- ManticoreFile: 实现分页提取 extractFileContentPaginated
- TextExtractor: 添加 truncate 参数支持内容截取
2026-01-16 01:41:28 +00:00
kuaifan
07360a8d2c
feat(manticore): 添加同步失败自动重试机制
...
- 新增 ManticoreSyncFailure 模型记录同步失败的条目
- 添加 RetryManticoreSync 命令实现失败重试逻辑
- ManticoreBase 增加 runWithRetry 包装器,连接断开时自动重连
- 统一 deleteVector 方法,减少重复代码
- 修复 quoteValue 传入非字符串的类型问题
2026-01-15 08:28:55 +00:00
kuaifan
13a25e3011
fix(manticore): 修复向量表插入时的 SQL 语法错误
...
- 新增 executeRaw() 方法直接执行 SQL,避免 prepared statement 解析问题
- 新增 quoteValue() 方法安全转义 SQL 值
- 新增通用 upsertVector() 方法统一处理所有向量表插入
- 简化 upsertMsgVector/TaskVector/FileVector/ProjectVector/UserVector 为单行调用
- 统一 NUMERIC_FIELDS 常量,消除代码重复
- 更新 batchUpdateVectors() 使用统一常量
2026-01-15 00:47:33 +00:00
kuaifan
1c27719ac4
no message
2026-01-14 20:15:48 +08:00
kuaifan
ec33327408
fix: 修复文件夹上传时数据库死锁问题
...
使用 Redis 分布式锁对同一用户往相同父目录的上传请求进行排队,
避免并发上传导致的 MySQL 死锁错误 (SQLSTATE[40001])
2026-01-14 11:44:47 +00:00
kuaifan
c2c27a684b
feat: 复制/周期任务时复制子任务并重置状态
...
- 复制任务时同时复制子任务,子任务状态重置为未完成
- 周期任务生成时,子任务状态重置为未完成并映射到 start 工作流
- 新增 getProjectFlowItems 方法获取项目工作流状态
- 新增 formatFlowItemName 方法格式化工作流状态名称
- 新增 copySubTasks 方法复制子任务到新父任务
- 新增 moveSubTasks 方法移动子任务,重构 moveTask 复用代码
2026-01-14 11:31:28 +00:00
kuaifan
dd20711c04
refactor: 移除冗余日志记录,优化代码可读性
2026-01-14 09:41:06 +00:00
kuaifan
3a2b7b1400
feat: 新增 AI 提示词占位符与用户上下文注入
...
- 新增 PromptPlaceholder 模块,负责构建用户上下文和条件性提示块
- 用户上下文包含:基础信息、部门、同事印象、场景角色、任务列表
- 前端使用 {{SYSTEM_OPTIONAL_PROMPTS}} 占位符,后端统一替换为实际内容
- 重构 BotReceiveMsgTask 和 ai.js,复用 PromptPlaceholder 逻辑
- 任务列表支持智能排序:逾期优先 → 最近活跃 → 负责人优先
2026-01-14 09:33:20 +00:00
kuaifan
4f2d382fd6
fix: 移除 Markdown 消息中的工具使用标签
2026-01-13 12:57:54 +00:00
kuaifan
42e4ddbd17
fix: 修复权限级联同步缺口
...
修复 Manticore 搜索索引在特定场景下 allowed_users 权限未能正确同步的问题:
Observer.updated 补充:
- ProjectUserObserver: 处理项目成员移交时的权限级联
- ProjectTaskUserObserver: 处理任务成员移交时的权限更新
批量操作绕过 Observer 修复(delete → remove):
- FileUser: deleteFileAll/deleteFileUser 方法
- ProjectTask: 可见性设置时的批量删除
- ProjectController: 子任务升级和任务复制时的批量删除
文件批量更新封装:
- File 新增 updateChildFilesUserid() 方法,统一处理子文件 userid
更新及 Manticore 同步
2026-01-13 11:55:45 +00:00
kuaifan
47c53a18fa
fix: 修复跨项目移动任务时子任务工作流状态未更新的问题
...
跨项目移动任务时,子任务的 flow_item_id 和 flow_item_name 没有被正确更新,
导致子任务在新项目中显示的工作流状态与新项目的工作流不匹配。
2026-01-13 10:50:42 +00:00
kuaifan
22926e19cd
refactor: 统一 dootask:// 链接处理与资源格式指南
...
- 将 dootask:// 协议链接处理逻辑从 AIAssistant 迁移到 DialogMarkdown 组件
- 新增 beforeNavigate prop 支持导航前回调(如关闭弹窗)
- 后端 BotReceiveMsgTask 添加条件性资源格式指南提示词
- 前端 ai.js 新增 SEARCH_AI_SYSTEM_PROMPT 和 DOOTASK_RESOURCE_FORMAT_GUIDE
- SearchBox 改用统一的 SEARCH_AI_SYSTEM_PROMPT 常量
- 重构 ai.js 代码组织,添加注释说明各常量用途
2026-01-13 10:31:31 +00:00
kuaifan
78b14f4aad
feat: 添加 dialog_only 参数支持仅搜索对话
...
在 dialog/search 接口中增加 dialog_only 可选参数,
启用后仅搜索会话和联系人,跳过消息内容搜索。
2026-01-12 15:03:04 +00:00
kuaifan
1ac3a4cc96
feat: 添加 user_update hook 事件并重构用户生命周期 hook
...
- 新增 user_update 事件,当用户基本信息变更时触发
- 扩展 dispatchUserHook payload 包含完整用户信息(tel、profession、birthday、address、introduction、departments)
- 将 user_onboard/user_offboard/user_update hook 触发逻辑集中到 UserObserver
- 区分 profile_update(用户自己修改)和 admin_update(管理员修改)事件类型
- 修复 User::reg() 中 Manticore 索引同步遗漏问题
- 排除机器人账号的 hook 触发
2026-01-08 11:31:16 +00:00
kuaifan
4e99e398d6
feat: 添加动态时间提示和自动校正功能
...
- 在"最早可提前"下方动态显示最早可签到时间
- 在"最晚可延后"下方动态显示最晚可签到时间(跨天显示"次日"前缀)
- 输入值变化时自动校正到临界值,防止时间重叠
- 调整表单布局支持换行显示提示信息
2026-01-07 04:11:32 +00:00
kuaifan
6bdefc4f03
feat: 支持跨天打卡和时间重叠验证
...
- 允许签到"最晚可延后"时间超过 23:59:59,支持员工凌晨下班打卡
- 凌晨打卡记录自动归属前一天
- 前后端新增提前/延后时间重叠验证,防止产生歧义时间窗口
- 优化导出逻辑以正确处理跨天打卡记录
- 打卡消息提示归属日期信息
2026-01-06 12:31:41 +00:00
kuaifan
f496bc5fca
feat: Optimize search functionality and AI module integration
...
- Refactor Manticore search classes for better performance
- Update AI module with enhanced processing capabilities
- Improve Apps module functionality
- Enhance SearchBox Vue component with new features
2026-01-06 07:25:23 +00:00
kuaifan
f821e5ad28
refactor: 移除缓存写入逻辑并简化未获取向量填充过程
2026-01-05 12:10:17 +00:00
kuaifan
8ab810c670
feat: 将 Manticore 相关检查更新为使用 "search" 应用
2026-01-05 05:51:48 +00:00
kuaifan
42a2eb56c7
feat: 升级语音识别模型并优化转写逻辑
...
- 语音识别模型从 whisper-1 升级到 gpt-4o-mini-transcribe
- 根据用户语言设置自动添加简繁体中文提示词
- 录音转文字新增 dialog_id 参数,支持获取对话上下文提高识别准确率
- 移除前端语言手动选择功能,简化用户操作
- 添加参数空值保护
- 优化 reasoning_effort 参数逻辑,区分 gpt-5 和 gpt-5.1+ 版本
2026-01-05 02:26:36 +00:00
kuaifan
4b0f4e388c
feat: 优化 Manticore 相关描述
2026-01-04 13:30:03 +00:00
kuaifan
31045b3808
feat: 更新 Manticore 数据库插入逻辑,添加 userid 和 tags 字段;在 WebSocket 消息删除时同步 Manticore
2026-01-04 07:48:53 +00:00