kuaifan
8d9082f7a1
fix(upgrade): 修复 L13/PHP8.4 升级回归的 3 处致命异常 + 收敛动态路由暴露面
...
巡检全量 323 接口 + laravel.log PHP 致命异常普查发现:
- Base::getSchemeAndHost(): 非请求上下文(Task/导出闭包)request() 非
Request 实例,调 getHttpHost() 致命错误(导出超期任务等)。加 instanceof 守卫。
- FileController::office__token(): php-jwt v7 强制 array payload,
config 缺失为 null 触发 TypeError。校验为数组,否则 retError。
- DialogController::msg__translation(): 空 language 传入
Doo::getLanguages(bool|string) 触发 TypeError。前置拦截空值。
- InvokeController: 动态路由改为仅暴露 public 方法,protected/private
视为内部方法返回 404,堵住内部辅助方法被裸访问触发 ArgumentCountError。
- ApproveController: 6 个内部辅助方法(getProcessById 等)收敛为 protected。
验证: 复扫 323 接口 0 个 5xx,phpstan 无错误,真 public 端点回归正常。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 04:05:31 +00:00
kuaifan
04aa60b574
refactor(config): app 内 env() 直读收敛到 config()
...
- 新增 config/dootask.php 承载 11 个无 config 对应的 env key(默认值随迁)
- 29 处 env() 替换:APP_KEY→config('app.key')、APP_NAME→config('app.name')、其余→config('dootask.*')
- 语义逐处保持一致(?:/三元留在调用点);消除 config:cache 后 env() 返回 null 的隐患
- 注:User.php / Setting.php 同时含本批 ide-helper 生成的 @property 注释增量
- 验证:grep env( app/ 归零;composer stan 通过;phpunit 146 测试全过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 01:21:47 +00:00
kuaifan
645cb02757
chore(upgrade): Laravel 8 直升 13(旧结构跑通)+ PHP 8.4 + 依赖升级与兼容修复
...
- composer: framework ^13.0、php ^8.3、laravel-s ~3.8.0、predis ^2.3、
phpunit ^11.5、tinker ^3、excel ^3.1.69、captcha ^3.5、avatar ^6.5、
ldaprecord-laravel ^4、pinyin ^5.3、notify 锁 ~1.28.0;
移除 fideloper/proxy、fruitcake/laravel-cors、facade/ignition、
laravel/sail、madnest/madzipper、手动钉的 symfony/mailer;
symfony/console 锁 ^7.4(LaravelS Portal 与 console 8 的
configure(): void 类型断言不兼容)
- $dates 移除:AbstractModel 改 getCasts() 合并默认 datetime 列,
3 个子模型改 $casts
- Carbon 3:4 处 diffInSeconds 补 absolute 参数并取整
- LdapRecord v4:config use_ssl/use_tls→use_tls/use_starttls(env 变量名不变),
LdapUser::$objectClasses 补类型声明
- Madzipper→原生 ZipArchive(Base::zipAddFiles,4 处调用)
- pinyin v5 静态 API(Base::getFirstCharter/cn2pinyin)
- laravolt/avatar 6.5:PatchedAvatar 修上游纵向对齐 bug
(intervention 4.1.3 枚举无 middle),avatar 响应改 response()->file()
- TrustProxies 改框架内置基类,CORS 改 Illuminate\Http\Middleware\HandleCors
- Symfony Console 8 兼容:ManticoreSyncLock::handleSignal 新签名,
pcntl 回调解耦
- 非 Swoole 运行时守卫:AbstractTask::task / PushTask::push /
AbstractData(swoole table),artisan/测试上下文不再炸
Target class [swoole] does not exist
- Laravel 11+ change() 丢修饰符:2023_12_07 与 2025_08_10 迁移重申
nullable/default/comment(修复 fresh 安装)
- Setting/Ihttp 缺键访问加 ?? 守卫(PHP 8 警告在测试中转异常)
- phpunit.xml 迁移 11 schema;UserImportParseTest 改为自建部门数据
验证:8.4 容器内 migrate:fresh --seed 213 全过;php artisan test
145 passed/1 skipped;LaravelS(Swoole 6.2.1) /health 200、登录、
token 认证、WebSocket 握手、Task 投递、头像、图片裁剪冒烟全过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 19:42:12 +00:00
kuaifan
e74142e58d
feat(ai-assistant): auth 注入用户 fd + doo_enabled,供 AI 经 doo 操作
...
P2 后端:把当前用户 WebSocket fd 透传给 AI 会话,让 AI 助手能经 doo CLI
驱动本人浏览器做页面操作。
- AssistantController::auth() 读 header fd 并做归属校验(复用 operation
__dispatch 同款 WebSocket::whereFd 校验),传给 createStreamKey
- AI::createStreamKey() 透传 fd + doo_enabled=1 到 /ai/invoke/auth
- ai-kb tools.concept 补「doo 命令行工具」能力来源
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 01:42:12 +00:00
kuaifan
4de6c69972
feat(ai-assistant): RAG 反馈闭环 + driver.js 页面操作引导
...
方向7 反馈闭环:
- 新增 ai_assistant_search_logs / ai_assistant_feedbacks 两表 + 模型
- AssistantController 加 log__search / feedback__save 端点,auth 透传 session_id→context_key
- 前端 AI 回复下方 👍 /👎 (可改票、随会话持久化回显),extractSourceIds 解析引用
- ai-kb:feedback chunk + README 运营 SQL 口径(低分 top query / 👎 source)
方向4 页面操作引导:
- 渲染层用 driver.js(高亮可点击挖洞 + 稳定定位),编排层自研
(脚本 schema / 四级元素定位 / 跨页 pre_action 导航 / 找不到降级文字)
- leave-semantics:跳转动作在点「下一步」后才执行
- markdown.js 渲染 ```ai-guide 围栏为「带我去」按钮;DialogMarkdown 点击启动
- 近义词归一化(创建/新建/新增/添加互通)提升 target 命中
- ai-kb:guide/start-guide chunk + tool-binding 加 show_guide
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 16:07:08 +00:00
kuaifan
af206480fb
feat(ai-kb): 落地 RAG 知识库与灰度链路(48 feature / 546 chunk)
2026-06-10 04:08:17 +00:00
kuaifan
20c3fa91fb
refactor(https): 协议识别下沉到 nginx,TrustProxies 只信 X-Forwarded-Proto
...
- nginx 经 APP_SCHEME 环境变量(envsubst 模板)统一控制 X-Forwarded-Proto
- TrustProxies 信任内网代理但仅采信 X-Forwarded-Proto,防 Host 注入
- 移除 WebApi 中间件的硬编码强制 https
- getSchemeAndHost 优先用当前请求 scheme/host,保留非请求上下文兜底
- cmd https 切换后改用 compose up -d 重建 nginx 容器使 envsubst 生效
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 01:52:38 +00:00
kuaifan
b595120d62
fix(base): readableBytes 补类型声明并修正拼接类型告警
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 22:06:19 +00:00
kuaifan
9be6265220
fix(download): 大文件下载改用 BinaryFileResponse 走 sendfile
...
StreamedResponse 在 LaravelS/Swoole 下被 DynamicResponse 用 ob_start/
ob_get_clean 整体缓冲进 PHP 内存,约 700MB 文件会撞 memory_limit 导致
下载失败;且每次请求对整文件 md5_file 生成 ETag 开销巨大。
改为返回 BinaryFileResponse,由 LaravelS StaticResponse 走 Swoole 原生
sendfile(),OS 级零拷贝、不占 PHP 内存,可支持任意大小文件。去掉 ETag
全文件哈希改用 mtime。Swoole 环境下关闭 Range 分段(sendfile 只能整文件
发送,避免 206 头与整文件 body 错位),非 Swoole 环境保留原生 Range。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 10:37:52 +00:00
kuaifan
20b5daba50
feat(manage): 团队管理支持管理员创建/批量导入员工账号(含部门、职位)
...
单个创建:邮箱/昵称/初始密码 + 可选首登改密、职位、部门(多选,选子部门自动补选上级,并加入对应部门群)。
批量导入:上传 Excel/CSV → 预览逐行校验 → 确认后导入。职位为模板第4列(选填,逐行解析校验),部门在预览表按行勾选后由底部设置部门到选中写入;导入按行返回结果(全成功关弹窗+成功提示;含失败留弹窗显示失败明细;仅 success>0 才刷新列表)。
后端:User::createByAdmin 选项数组化 + 校验助手 assertValidProfession/assertValidDepartments;importUsers 逐行 department/profession;UsersController createuser/import;UserImport/UserImportTemplate(含职位列)。
测试:tests/Feature/AdminCreateUserTest、tests/Unit/UserImportParseTest。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 01:26:34 +00:00
kuaifan
2a3f05e06f
docs(ai): 注释模型名思考标记剥离规则
...
说明 think/thinking/reasoning 后缀的支持写法(空格、- 、_、括号),便于后续维护识别匹配范围。
2026-05-03 00:03:32 +00:00
kuaifan
9e65500748
refactor(ai): 简化AI模块逻辑
2026-04-04 23:18:21 +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
f68f759418
fix(ai): 更新提示信息为本地化文本
2026-01-21 15:56:03 +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
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
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
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
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
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
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
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
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
kuaifan
90a5624877
feat: 添加用户标签功能,更新用户索引以支持标签创建、更新和删除事件
2026-01-04 07:13:13 +00:00
kuaifan
501ff21e55
feat: 添加数值类型转换功能,确保查询结果中的数值类型一致性
2026-01-04 00:29:29 +00:00
kuaifan
ea0d27fdea
feat: 添加 Manticore 同步命令通用锁机制,优化信号处理与锁管理
2026-01-03 23:09:50 +00:00
kuaifan
9a8304d595
feat: 增强 Manticore 向量更新逻辑,记录更新失败的 ID
2026-01-03 21:59:44 +00:00
kuaifan
e020a80020
feat: Add batch embedding retrieval and vector update methods for Manticore integration
...
- Implemented `getBatchEmbeddings` method in AI module for retrieving embeddings for multiple texts.
- Added vector update methods for messages, files, tasks, projects, and users in ManticoreBase.
- Enhanced ManticoreFile, ManticoreMsg, ManticoreProject, ManticoreTask, and ManticoreUser to support vector generation during sync operations.
- Introduced `generateVectorsBatch` methods for batch processing of vector generation in Manticore modules.
- Updated ManticoreSyncTask to handle incremental updates and vector generation asynchronously.
2026-01-03 15:19:23 +00:00
kuaifan
908171a977
feat: 新增对话ID参数支持,优化搜索功能以支持对话过滤
2026-01-03 03:59:51 +00:00
kuaifan
1e94ce501e
refactor: 移除 ZincSearch,统一使用 Manticore Search
...
- 删除 ZincSearch 模块、任务、命令
- 对话消息搜索改用 ManticoreMsg::searchDialogs
- 移除 Observer 中的 ZincSearch 同步
- 移除定时任务中的 ZincSearch 同步
- 更新项目文档
2026-01-02 07:25:14 +00:00
kuaifan
7a5ef3a491
feat: 新增消息搜索功能
...
- 新增 msg_vectors 表,支持消息全文/向量/混合搜索
- 采用 MVA 权限方案,allowed_users 内联存储
- 新增 /api/search/message API
- 新增 manticore:sync-msgs 同步命令
- Observer 触发消息创建/更新/删除同步
- Observer 触发对话成员变更时更新 allowed_users
2026-01-02 06:46:18 +00:00
kuaifan
c08323e1ea
feat: 迁移至 MVA 权限方案
...
- 表结构:为 file/project/task_vectors 添加 allowed_users MULTI 字段
- 删除关系表:file_users, project_users, task_users
- 搜索:使用 allowed_users = userid 进行权限过滤
- 同步:sync 时自动计算并写入 allowed_users
- 级联:项目成员变更异步级联 v=1 任务,任务成员变更递归更新子任务
- 覆盖场景:visibility/parent_id/project_id 变更、子任务升级主任务等
2026-01-02 02:03:21 +00:00
kuaifan
fdf5ceeaab
feat: Enhance Manticore integration and AI model support
...
- Added support for specifying vector dimensions in AI payloads for compatible vendors.
- Updated default AI model from 'text-embedding-ada-002' to 'text-embedding-3-small'.
- Refactored ManticoreBase to bind parameters explicitly for PDO statements, improving type handling.
- Adjusted SQL queries across Manticore modules to remove content previews and ensure inline vector values.
- Updated content preview handling in ManticoreFile, ManticoreProject, ManticoreTask, and ManticoreUser to use substrings for better data management.
2026-01-01 08:59:54 +00:00
kuaifan
48ef4cfdef
refactor: 使用 Manticore Search 替换 SeekDB
2026-01-01 03:17:27 +00:00
kuaifan
1af29837e2
feat: 增加增量同步功能以优化 SeekDB 用户关系同步
...
- 在 SyncFileToSeekDB、SyncProjectToSeekDB 和 SyncTaskToSeekDB 中实现增量同步逻辑,支持只同步新增的用户关系。
- 新增 syncFileUsersIncremental、syncProjectUsersIncremental 和 syncTaskUsersIncremental 方法,提升数据同步效率。
- 更新相关命令行输出信息,以清晰指示同步状态和进度。
2025-12-31 09:28:10 +00:00
kuaifan
fe7a2a0e73
feat: 扩展 SeekDB 支持联系人、项目、任务的 AI 搜索
...
- 合并 SeekDBFileSyncTask 到 SeekDBSyncTask
- 统一 AI 搜索 API 入口
2025-12-30 07:48:00 +00:00
kuaifan
23faf28f7f
feat: 集成 SeekDB AI 搜索引擎实现文件内容搜索
2025-12-30 05:49:26 +00:00
kuaifan
718ed8953f
no message
2025-12-14 00:23:04 +00:00
kuaifan
ac9e1e5e67
feat: call appstore user lifecycle hooks from main app
2025-12-09 10:30:23 +00:00