kuaifan
|
2153879e09
|
fix(manticore): 兜底同步命令输出重定向到 /dev/null,避免 shell_exec 阻塞 task worker 导致串行执行
|
2026-10-22 08:40:12 +00:00 |
|
kuaifan
|
aca8fc6b24
|
refactor(dev): 开发模式改由 nginx 同源反代 vite,移除 VSCODE_PROXY_URI 拼接
- vite 开发 base 改为 /__vite/,nginx 通过 host.docker.internal 反代(含 HMR websocket),任意访问地址/代理下均可用
- vite 端口默认 5173,被占用自动顺延,实际端口由 devProxyPlugin 写入 nginx 片段并 reload(先 nginx -t 校验,失败不保留片段)
- HMR 客户端改连当前页面源;启动输出改为应用访问地址
- public/hot 只写 base/port,不再泄露整个 .env
- cmd dev 移除随机 APP_DEV_PORT、VSCODE_PROXY_URI 与 index.html 跳转;docker-compose nginx 增加 extra_hosts
|
2026-10-21 17:52:41 +00:00 |
|
kuaifan
|
c64fb1d98f
|
refactor(system): 系统设置默认值改为数组统一填充
|
2026-10-20 13:58:32 +00:00 |
|
kuaifan
|
87feee20e6
|
fix(system): 系统设置缺少字段时回退默认值,避免 Undefined array key(修复 SystemBrandingTest)
|
2026-10-20 12:24:16 +00:00 |
|
kuaifan
|
d02c1d343a
|
fix(push): DooPush 推送不再指定 OPPO IM 类别(未申请私信通道权限时整条被拒,错误 67)
|
2026-10-20 07:25:05 +00:00 |
|
kuaifan
|
a74778f77e
|
fix(push): 退出登录时系统配置模式的推送设备同步向 DooPush 解绑
users/logout 先按 token 哈希删除本地推送设备,App 随后的 remove 找不到记录而漏发解绑;
统一由 DeviceRegistry::forgetHash 清理并解绑,解绑请求超时缩短为 3 秒,不拖慢退出。
|
2026-10-19 16:22:32 +00:00 |
|
kuaifan
|
531129f48d
|
feat(push): 移除友盟推送,APP 推送改为系统配置 / 自定义 / 关闭三档
- 删除友盟别名接口、模型、日志清理及 hedeqiang/umeng 依赖,迁移删除 umeng_alias / umeng_logs 表
- 系统配置(默认):通过官方 DooPush 共享通道自助注册租户,按 App 上报的推送 Token 绑定设备
- 自定义:沿用自有 DooPush 应用凭证;关闭:不推送也不记录设备
- 老站点升级后统一为系统配置,原自定义凭证保留
- PushUmengMsg 更名为 PushAppMsg;同步语言包、API 对照表与 ai-kb
|
2026-10-19 15:46:16 +00:00 |
|
kuaifan
|
a49ee608a5
|
feat(push): 新增 DooPush 推送通道,与友盟并存
- 新增 app_push_devices 表与 api/push/device 接口(新版 App 上报/删除 DooPush 设备)
- app/Module/AppPush 统一分发友盟与 DooPush,业务字段经 payload.data 下发
- 系统设置「App 推送」新增 DooPush 配置;点击通知打开对应会话
- 更新 Expo 壳子模块(接入 DooPush)、语言包与 ai-kb
|
2026-10-19 10:33:19 +00:00 |
|
kuaifan
|
ca1a1b5415
|
feat(contacts): 通讯录支持按部门显示,成员按需加载
- 新增 contacts/departments 接口,返回部门树及成员数
- 通讯录搜索框右侧新增字母/部门视图切换,部门视图可折叠,展开时才加载成员
- users/search 的 keys.departments 改为参数绑定(修复 SQL 注入),0 表示未加入任何部门
- 同步翻译与 ai-kb
|
2026-10-10 04:47:34 +00:00 |
|
kuaifan
|
adac87bf45
|
feat(task): 周期任务生成新任务时与原任务自动建立关联
|
2026-10-10 02:48:43 +00:00 |
|
kuaifan
|
5ce39a8dc4
|
feat(task): 建立与解除任务关联时记录双方任务动态
|
2026-10-10 02:41:15 +00:00 |
|
kuaifan
|
f7c42f6985
|
fix(task): 修复取消任务关联接口路由超过两段导致 404
api/project/task/related/delete 改为 api/project/task/related_delete;
解除关联确认文案改用 (*) 占位翻译
|
2026-10-10 02:41:15 +00:00 |
|
kuaifan
|
d54dc24cee
|
fix(manticore): 文档解析抛 Error 时不再杀死文件同步进程
PhpWord 解析带批注引用的 docx 会抛 TypeError,而 TextExtractor::extractFile
只捕获 Exception,导致 manticore:sync-files 被致命错误打死、锁无法释放,
且每次重启都卡在同一批,其后的文件都无法入索引。改为捕获 Throwable,
解析失败按“提取失败”处理,同步继续。
|
2026-10-01 21:44:03 +00:00 |
|
kuaifan
|
8bb169b4d0
|
fix(manticore): 同步命令读增量指针改用严格读取,引擎不可达时终止而非从头重灌
ManticoreKeyValue::get() 在引擎重启/不可达时返回默认值 0,导致增量同步从头重灌
并把指针写回低值,引发 AI 插件向量化风暴。新增 getStrict()/queryOneStrict(),
读取失败抛异常,五个同步命令据此终止本轮。
|
2026-10-01 10:02:13 +00:00 |
|
kuaifan
|
be0f05af4d
|
feat(system): 管理员支持在线更新服务端(系统更新)
- 新增 api/system/update/check|start|status,发起更新需二次输入登录密码,经 appstore 拉起独立 updater 容器执行 ./cmd update
- cmd update 新增 --check(输出 JSON 检查结果)与 --non-interactive(在线更新模式:强制备份数据库、存在本地修改时中止、写入 docker/logs/update/state.json 进度)
- 设置菜单与头像下拉(仅管理员)新增「系统更新」入口,进度页展示步骤、实时日志与结果
- 在线更新默认开启,运维可通过 .env ONLINE_UPDATE=false 关闭;appstore 注入 HOST_DOCKER_SOCK
- 修复 Ihttp 状态行解析在多词原因短语(如 404 Not Found)时失败的问题
- 同步 ai-kb:系统更新操作指引、不支持在线更新 FAQ、菜单入口
|
2026-10-01 04:12:55 +00:00 |
|
kuaifan
|
5a10f59df8
|
fix(task): 修复周期任务到点后无限复制重复任务
Carbon 3 的 addDays() 不接受字符串,自定义天数周期(loop="90")在
refreshLoop() 中抛 TypeError。LoopTask 先提交副本再刷新周期,异常后
副本与原任务的 loop_at 都留在 10 分钟窗口内,每分钟翻倍并在同一轮内
被 chunkById 继续扫到。
- refreshLoop:自定义天数转 int 且必须大于 0,拒绝 0 天周期
- LoopTask:复制、刷新周期、关闭旧周期放入同一事务,失败整体回滚;
锁定并复核原任务防并发重入;refreshLoop 失败即抛出;只处理本轮
开始前已存在的任务
- ai-kb:更正周期任务按 loop_at 到点生成(而非完成时生成)、不依赖
end_at、会复制附件,并补充自定义天数须为正整数
|
2026-09-30 14:48:43 +00:00 |
|
kuaifan
|
1c90a11211
|
feat: 系统功能应用统一管理内置功能入口
- 新增 SystemFunctions 模块与 api/apps/functions 接口,读取 system-functions 应用的安装状态和开关字段
- 工作报告、日历、我的收藏、最近打开、签到打卡的入口(应用中心、头像菜单、左侧导航)统一受开关控制,卸载后全部隐藏
- 导出签到数据随签到打卡一起隐藏;日历停用后访问日历页跳回仪表盘
- 头像菜单按分组计算分割线,隐藏菜单项后不留多余分割线
- 新增迁移:无配置时自动安装并全部启用,已有配置不覆盖
- 同步 ai-kb 与 api-map
|
2026-09-30 12:44:18 +00:00 |
|
kuaifan
|
519e8dbd54
|
feat(task): 支持任务流转与部门指派
|
2026-09-09 02:36:52 +00:00 |
|
kuaifan
|
f43977f07e
|
feat(system): 支持自定义登录页品牌
|
2026-09-04 08:18:03 +00:00 |
|
kuaifan
|
b05b0874f8
|
feat(app): support hiding AI interfaces
|
2026-09-04 06:23:19 +00:00 |
|
kuaifan
|
098bea3d5b
|
fix(messenger): 修复失效成员导致群人数变化
|
2026-08-20 03:43:17 +00:00 |
|
kuaifan
|
cb60728711
|
fix(auth): hide registration when disabled
|
2026-08-19 23:18:21 +00:00 |
|
kuaifan
|
826058b842
|
fix: extend online license request timeout
|
2026-08-14 22:43:28 +00:00 |
|
kuaifan
|
f49d6d604f
|
fix: improve system setting editors
|
2026-08-13 11:08:06 +00:00 |
|
kuaifan
|
8133eca488
|
feat(file): manage inactive WebDAV credentials
|
2026-08-13 03:36:40 +00:00 |
|
kuaifan
|
9028061638
|
feat(file): add WebDAV support
|
2026-08-13 02:38:01 +00:00 |
|
kuaifan
|
fd37fcf6f6
|
feat(file): switch collaboration files to attachment index
|
2026-08-09 15:08:24 +00:00 |
|
kuaifan
|
380bfaaea6
|
feat(file): index chat message attachments
|
2026-08-09 13:00:23 +00:00 |
|
kuaifan
|
6deec313f7
|
feat(file): add collaboration file browser
|
2026-08-04 21:27:43 +00:00 |
|
kuaifan
|
4c9951c667
|
feat: 默认开启部门负责人视角
|
2026-07-21 09:06:36 +00:00 |
|
kuaifan
|
c9b3515aef
|
refactor(manticore): 简化向量批量分块收尾
|
2026-07-19 07:01:19 +00:00 |
|
kuaifan
|
7ad27e3326
|
feat(dashboard): 增加负责人视角真实数据接口
|
2026-07-18 23:42:58 +00:00 |
|
kuaifan
|
f8eaab5a50
|
fix(search): 评审修复——重建自愈加探针表与锁内复检,向量模型变更自动重建
- 重建前用探针表验证 ai 端点,探不通不动真表不写 marker(下次自愈重试)
- 锁内复检 marker,消除并发进程重复重建窗口
- 检测 embedding 模型变更(vector:model 对比查询侧缓存)自动触发重建
- Ihttp 返回体 code 非 0/200 时视为失败(401/500 不再被当成功)
- 查询向量缓存键掺入模型指纹,换模型后不再命中旧维度缓存
- 批量写入按行数+字节双预算分块、块内延迟渲染 SQL,降低峰值内存
- user 同步加脏检查,字段未变不重复触发向量重算
- 日志截断超长 SQL;文档与注释同步 KB_INGEST_TOKEN 退役、截断长度对齐
|
2026-07-15 14:17:01 +00:00 |
|
kuaifan
|
746337c2f6
|
feat(search): 语义搜索迁移至 Manticore Auto Embeddings,向量走 ai 插件免费模型
- embedding 统一改走 ai 插件 /embeddings(免费向量模型,1024 维),删除第三方 key 分支
- 5 张向量表启用引擎 Auto Embeddings(MODEL_NAME/FROM/API_URL),写入/更新时引擎自动生成向量
- 表定义使用派生密钥 sha256(APP_KEY:embeddings),避免主密钥进入引擎元数据
- 写入改为 REPLACE(单行原子)与多行批量 REPLACE(整语句一次向量化调用,失败回退逐行)
- 结构指纹 vector:schema 标记:版本/模型/端点/APP_KEY 变化时自动清空重建并重置同步指针
- 退役 PHP 向量管道:删除 generate-vectors 命令、双指针、withVector 分支与批量向量生成方法
- 根治缺陷:全文重同步不再抹掉向量;内容编辑后向量由引擎自动重算,不再过期
|
2026-07-15 10:45:20 +00:00 |
|
kuaifan
|
e4fbf9693a
|
fix(http): Ihttp 响应头解析前初始化 headers 数组,消除未定义索引告警
|
2026-07-15 10:45:01 +00:00 |
|
kuaifan
|
13ba1d3bd7
|
feat(file): 我的文件纳入已共享文件,修复板块切换缓存丢失
- 「我的文件」改为展示我拥有的全部(含已共享出去的),与「共享文件」在“我共享的”上刻意重叠
- 缓存改为 stale-while-revalidate:按板块懒加载,切回该板块/目录先读缓存再拉接口静态刷新
- getFiles 清理过期行按 scope 限定范围,避免刷新一个板块误删另一板块(同为 pid=0)的缓存
- 微调 file-tabs 来源筛选字号与面包屑上边距
- 同步 ai-kb 文件入口说明(last_verified v1.8.69)
|
2026-07-14 12:16:22 +00:00 |
|
kuaifan
|
7b25f243ab
|
feat(file): 文件页拆分「我的/共享」两个板块并合并工具栏为单行
- 顶部 Tab 切换:我的文件(私有 share=0)/ 共享文件(双向,含我共享出去的 + 别人共享给我的),共享板块支持「全部/我共享的/共享给我的」二次筛选
- 后端 File::getFileList 增加 scope 参数,按板块拆分根目录查询;FileController::lists 透传并校验
- 前端用 board/sharedSrc 取代原「仅显示我的」复选框,board 持久化到 IDB
- Tab、子筛选、视图切换合并到同一行(flex 自动换行,视图切换靠最右)
- 根目录不再重复显示板块标题,仅进入子文件夹时显示面包屑(板块名为可点击回根入口)
- 同步更新 ai-kb 文件入口说明
|
2026-07-14 03:49:59 +00:00 |
|
kuaifan
|
9b14120055
|
fix(application): 自定义应用可见范围统一 app 顶层,修复全员可见失效与编辑回填重置
前后端对 visible_to 存放层级约定不一致导致两个 bug:
- 新增应用设为全员可见,普通成员仍看不到(前端存在 menu 级,后端只认 app 级,落库恒回落为 admin)
- 再次编辑时可见范围被重置为"仅管理员"(响应无条件剥离 visible_to,回填丢失)
统一以 app 顶层为唯一权威来源:
- 前端保存时提到 app 顶层,回填时从 app 顶层读回(数组转下拉框字符串)
- 后端响应新增 keepVisible,管理员保存/读取场景保留 visible_to,普通成员仍剥离
同步 ai-kb application/menu-admin last_verified。
|
2026-07-13 23:54:23 +00:00 |
|
kuaifan
|
e72758f313
|
fix(task): 已删除/已归档项目不再生成周期任务,残留任务详情可打开可删除
- LoopTask 周期生成仅处理未删除、未归档项目的任务,从源头杜绝残留繁殖
- userTask 兜底改用 withTrashed,任务相关成员可打开已删项目下的任务详情
- task/one 返回 project_deleted/project_archived 标记,详情顶部横幅提示并提供删除按钮
- task/remove 对已删除/已归档项目放行删除(限项目负责人、任务负责人/协助人/创建人)
- 顺手修复 addTask 优先级匹配 reset() 传临时值的 notice 隐患,改用 collect()->first()
- 同步 ai-kb(recurring/delete-restore)与国际化文案
|
2026-07-13 23:04:36 +00:00 |
|
kuaifan
|
746a0bf9a1
|
feat(ai-bot): 增加 AIBotModels2Array 方法的可见性过滤选项
|
2026-07-13 13:33:11 +00:00 |
|
kuaifan
|
9a3d9d3b9c
|
feat(license): 多授权选择登录 + 离线 license SN/MAC 绑定校验加固
- 在线授权登录时账号名下有多条可用授权则弹窗选择,选定后复用验证码确认签发(login/confirm)
- 新增 Doo::licenseDecode / licenseBindingError;保存离线 license 与创建用户前校验付费档 SN/MAC 与本机匹配
- 诊断展示与校验门槛纳入不限人数(people==0)档
|
2026-07-02 13:29:51 +00:00 |
|
kuaifan
|
184fb27680
|
feat(upload): 分片上传统一链路,5 场景突破单文件 1G 限制
- 新增 api/upload/{init,chunk,merge} 入口与 ChunkUpload 模块(5MB 分片、3 并发、Redis 状态机)
- 5 场景接入:文件柜 / 聊天 / 任务附件 / 头像&系统图片 / 编辑器粘贴
- 秒传:同用户同 hash 复用 FileContent 物理文件,零传输
- 续传:Redis + localStorage 双索引,24h TTL
- 与老接口对齐:pid 锁、≤300 上限、webkit_relative_path 目录递归、overwrite 替换语义
- init 阶段读 file_upload_limit 拦截超限,避免传完分片才报错
- DeleteTmpTask 加 tmp_chunks case 兜底清理 24h 未合并目录
- files 表新增 hash 列(migration)
- 前端 chunkedUpload wrapper:主线程 spark-md5 流式 + 指数退避重试
- ai-kb 同步:upload / file-upload-limit / upload-size-limit 三个 chunk
|
2026-06-30 04:30:09 +00:00 |
|
kuaifan
|
c067991e3e
|
fix(users): 登录验证码图片在 intervention/image v4 下返回 {} 无法加载
mews/captcha 3.5 的 toDataUri() 在 intervention/image v4 返回 DataUri 对象而非
字符串,json 序列化成 {} 导致前端 img 加载失败。控制器侧强制转为字符串修复。
|
2026-06-29 13:56:30 +00:00 |
|
kuaifan
|
b589307ebb
|
perf(apps): 角标快照判定改用 isInstalled,自定义微应用一次性建 set
userBadges 原先用 Apps::appMenuConfig() 判定应用是否存在,每个不重复
app_id 都要解析两个 yaml(loadInstalledConfig + readPluginMenus),且
自定义微应用每行都重新 foreach setting。
- 插件应用走 Apps::isInstalled(只读一个 yaml + RequestContext 请求级缓存)
- 自定义微应用循环外一次性建 id set,O(1) 命中
- 行为不变(已在线实测):installed 时正常返回;status=uninstalled 时过滤
|
2026-06-29 13:38:05 +00:00 |
|
kuaifan
|
4a18ff0315
|
fix(apps): 角标快照过滤已卸载应用的残留行
应用卸载后 app_badges 表行未被清理(主程序侧无卸载回调),
导致 hydrate 后父级『应用』入口聚合仍把残留 count 算进去。
userBadges 返回前用 Apps::appMenuConfig() 判定应用是否仍存在
(同时覆盖插件应用与自定义微应用),不存在则跳过;按 app_id 缓
存判定结果,避免逐行重复读 yaml。
|
2026-06-29 12:16:19 +00:00 |
|
kuaifan
|
09439b555c
|
fix(apps): 插件菜单角标补初始同步接口 badge/list
插件应用菜单来自 appstore installed(不含 count/dot),原先只有自定义微
应用经 microapp_menu 注入角标,导致插件角标只能靠实时 WS、刷新即丢。
- 新增 GET api/apps/badge/list(用户 token 鉴权)返回 userBadges 快照
(插件 + 自定义统一覆盖),前端 updateMicroAppsStatus 拉取后 hydrateMap
- appBadges store hydrate -> hydrateMap(按角标 map 初始化,不再依赖 menu_items)
- 删除已冗余的 Badge::attachMenuBadges(调用 + 方法定义)
|
2026-06-29 11:57:18 +00:00 |
|
kuaifan
|
420d46d5cc
|
feat(apps): 新增应用菜单角标(数字/红点,per-user 实时推送)
插件/微应用可在自己的菜单入口显示数字或红点角标,插件未打开也生效。
- 后端:新增 app_badges 表 + AppBadge 模型 + Module/Badge 业务编排 +
AppsController(badge__set 应用密钥鉴权 / badge__clear 用户鉴权)
- 每应用独立密钥 APP_SECRET:按 appid 持久化于 appstore config.yml,鉴权校验
- 推送:复用 PushTask 下发 appBadge WS 消息;microapp_menu 附带初始角标
- 前端:appBadges Vuex module + WS 处理 + 三处菜单渲染(应用卡片/主菜单入口/
父『应用』入口聚合)+ 移动端 Tabbar + 打开即清(badge_clear_on_open)
- 用户离职级联清理;同步 ai-kb 角标知识
|
2026-06-29 02:32:19 +00:00 |
|
kuaifan
|
b2d54576d0
|
fix(system): demo 环境豁免 dooai_key 打码,修复 /ai/gateway/* 401
system_setting=disabled 时按 _key 结尾统一打码会误伤官方网关 token
(dooai_key),前端读出打码串后调 /ai/gateway/me 等接口被网关判为非法
token 返回 401。将 dooai_key 从打码规则中单独豁免,原样返回供鉴权。
|
2026-06-26 01:16:43 +00:00 |
|
kuaifan
|
fa9e56944a
|
feat(license): 在线授权 UI 优化 + 邮件语言透传
- license.vue:在线授权 Tab 移到离线前,默认 Tab 智能选择(未绑在线但已设
离线→离线,其余在线优先);按钮级 loading 互斥(onlineAction:发码/登录/
试用/退出各自 loading、其余禁用);登录/试用失败清空验证码并解除重发倒计时;
邮箱行改「Input + 独立发送按钮」承载 loading
- OnlineLicense.php:新增 lang() 透传请求语言到 appstore,邮件按语言渲染
|
2026-06-23 06:15:47 +00:00 |
|
kuaifan
|
7c6b8ce6f4
|
feat(license): 在线授权登录与试用改为邮箱+验证码
配合 appstore 账号体系统一,在线授权去除 App Store 账号+密码:
- OnlineLicense 新增 emailSend,login/trial 改 (email, code),call payload
去 account/password、加 email/code(fingerprint 续传)
- LicenseController 新增 email__send,login/trial 读 email/code
- license.vue 在线 Tab 改邮箱+发码+验证码(与试用复用状态防串台),
离线 Tab 与互斥链路不动
- 同步 i18n 文案与 ai-kb license/online、api-map
|
2026-06-23 01:21:11 +00:00 |
|