kuaifan
7453b79c8d
feat(ai-assistant): chat 浮窗接入全局模态栈支持 ESC/滑动返回关闭
...
- modal.vue: chat 模式新增空助理 Modal(mask=false 不挡背后操作),
进入 ViewUI 模态栈,由 removeLast() 统一管理 ESC/滑动返回/返回键/Electron 关窗
- index.vue: 移除 onInputKeydown 内重复的 chat ESC 处理,改由全局栈统一处理
- modal.vue: 捕获阶段抢先拦截 ESC,chat 全屏时退全屏而非关闭栈顶 Modal
(AI 浮窗 z-index 恒最高但未必是栈顶,故不能依赖 ViewUI 冒泡 ESC)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 10:50:18 +00:00
kuaifan
7844f5500b
chore(mobile): 更新子项目提交引用
2026-06-18 17:19:06 +08:00
kuaifan
f0e48d98e4
feat(messenger): 移动端发送按钮默认改为显示发送按钮
...
移动端 send_button_app 默认值由 enter 改为 button,
默认显示独立发送按钮(桌面端保持 enter 回车发送)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 14:01:50 +08:00
kuaifan
333f9caa5e
chore(web): 移除无用的 addExtraStyle 空方法
...
addExtraStyle 仅返回空字符串,无实际作用,一并移除其在深色样式中的调用。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 22:21:27 +08:00
kuaifan
135b419572
fix(micro-apps): 修复深色主题下微应用自定义背景色显示错误
...
深色主题通过 html 整体 invert+hue-rotate 反色,导致配置的背景色被反成错误颜色。
改为在 iframe 铺底伪元素上承载真实背景色,并在深色下对该伪元素施加同款反向 filter
抵消整体反转,使背景与内容区反色行为一致,不再用 JS 近似反相。
- modal.vue:bodyStyle 通过 CSS 变量 --micro-body-background-color 传递真实色
- iframe.vue:.micro-app-iframe::before 铺底背景层 + 深色反向 filter,并加 isolation 隔离 z-index
- 移除不再需要的 utils/color.js 颜色反相工具
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 22:21:19 +08:00
kuaifan
a19822a617
feat(ai-assistant): 新增 close_app 动作支持关闭当前应用窗口
...
打开微应用后 AI 页面操作默认锁定在该应用 iframe 内部,无法关闭应用本身
(关闭控件在主程序外壳层)。新增外壳层 close_app 动作绕过 iframe 作用域:
- action-executor 注册 close_app,先用 store 状态判断有无打开应用(无则报错
不假报成功),再经事件总线 observeMicroApp:close 投递给 MicroApps 组件。
- MicroApps 复用现成 onAssistClose(findLast(isOpen)+closeByName)作为该事件
处理器,关闭最前打开的应用,零重复逻辑。
- page-context-collector 在有微应用打开时向模型注入 close_app 可用动作。
- 同步 ai-kb page-action chunk 与 events-map。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 03:09:38 +00:00
kuaifan
ac2d4c6c4f
chore(docs): 取消跟踪 AI 深链插件规格文档
...
deeplink 方案主程序侧 + 插件侧(dootask-ai)均已落地,该跨仓库
改动规格使命完成,从版本控制移除,文件本地保留(docs/.gitignore)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 02:24:46 +00:00
kuaifan
a3d5bdf93c
feat(ai-assistant): 重构页面操作为统一执行器(Web DOM floor + Electron CDP 双后端)
...
页面操作(doo page → /ws → 浮窗 operation-module → action-executor)原用手写
iView-only 选择器 + 朴素 value= 赋值,在 React+Radix 同源 iframe 业务表单上几乎
填不进。重构为「复用 Playwright 注入脚本的描述层 + 按环境选后端的执行层」:
描述层(共用):
- 新增 aria/aria-bundle.js,vendoring Playwright ariaSnapshot/roleUtils/domUtils
子集预构建为 ESM(Apache-2.0 NOTICE + 固定上游 commit),产出 YAML 快照与活的
ref→Element Map。
- page-context-collector 改用 buildSnapshot 采集,operation-module 经 setRefMap
以 Map 直接持有元素取代 selector 反查。
执行层(按环境选后端,失败回退):
- web-backend:原生 prototype value setter + beforeinput/input/change/blur 序列
+ 回读校验(不符报 value_not_applied,绝不假报成功);自定义下拉/日期 open→click。
- electron-backend + electron/lib/page-input.js:经 webContents.debugger 走 CDP
Input 域产生 isTrusted=true 可信输入(insertText/dispatchMouseEvent/KeyEvent),
任一步失败回退 Web 后端。
- 复杂控件(动态明细表/成员选择器/文件上传)如实返回 unsupported_widget。
协议与链路(doo page、active-context 失效守卫、导航类 action)保持不变。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 02:03:59 +00:00
kuaifan
b0a4fe6646
feat(ai-assistant): AI 回复增加复制/时间/反馈取消,历史删除二次确认
...
- 反馈行新增复制按钮(去推理段落)与回复时间(规则参考 formatMessageTime)
- 点赞/点踩支持再点取消;修复 feedbackLoading 持久化导致重载后无法再点
- 历史删除改为二次确认(垃圾桶→红勾),离开/3秒/下拉关闭自动复位,触摸端常显
- 回复完成后贴底用户自动滚动到底部,露出反馈按钮
- 后端 feedback__save 支持空 feedback 取消(删除记录),同步 ai-kb
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 22:58:50 +00:00
kuaifan
97bd58312e
refactor(approve): 移除主仓库内置审批功能,收敛到插件/微应用
...
删除 ApproveController、ApproveProcInstHistory/ApproveProcMsg 模型、approve
前端页面与导出组件,移除 approve 路由与 flow_url 配置;审批消息模板改为对接
插件侧能力。版本号 1.7.90 → 1.7.91。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:35:49 +00:00
kuaifan
2f8dee44c2
refactor(mail): 邮件发送弃用 guanguans/notify 改用 symfony/mailer
...
guanguans/notify 在本项目仅用于 SMTP 发信,但其 1.x 线已停更、email 渠道
自 3.x 起被上游移除(无升级路径)。改用项目已自带的 symfony/mailer(Laravel
13 传递依赖),零新增依赖,并一并移除孤儿依赖 overtrue/http、symfony/options-resolver。
- EmailNoticeTask / UserEmailVerification / SystemController 三处发信改为
new Mailer(Transport::fromDsn(...)) + new Email();API 1:1 等价
(from/to/subject/html 同名,verify_peer=0 仍受 symfony 8.x 支持,
notify 本就裸调 symfony 故异常透传不变、getCode()===550 仍成立)
- 移除 UserTransfer 未使用的 notify import
- 顺带修复既有 bug:超时判断字面量 "Timed Out" 与 symfony 实际消息
"timed out" 大小写不匹配,改 stripos 大小写不敏感
验证:phpstan 0 错误、composer audit 无公告;邮箱验证码、系统邮件测试两条
链路实测发信成功。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 06:10:47 +00:00
kuaifan
468abe9902
chore(upgrade): 重新生成 api-map 同步路由收敛 + 删除过时升级报告
...
- doc:api-map 重新生成:8d9082f7a 将 ApproveController 6 个内部方法收敛为
protected 后漏同步对照表,移除 6 条失效路由(现访问 404),接口数 325→319
- 删除 UPGRADE-L13-REPORT.md:内容已过时(称 light-spring 未 push、一次性栈
仍在运行、仅 3 个 commits),升级已合入 dev
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 04:35:38 +00:00
kuaifan
27c65cc582
fix(frontend): TagInput 体质优化与多分隔符支持 + 后端 saveOrIgnore 加固
...
TagInput:
- cut prop 支持字符串或字符串数组,多分隔符任一匹配即切;
v-model 写回用第一个分隔符 (joinChar) 拼接保持向后兼容
- 修复 max 仅在 cut 分隔符路径生效,回车/blur/paste 路径未查 max 的 bug
- 修复 data() 初始化与 watch(value) 用硬编码 ',' 切分,
统一走 joinChar (单一输出分隔符) 还原 v-model,避免含空格的列名
(如项目模板 'Sprint 1') 被切碎
- 修复 watch(value) 空值/null 时不清空 disSource 的潜在残留数据
- v-for 加 :key='text',配合初始化去重避免拖拽错位
- 重复 tag 由静默忽略改为提示「该标签已存在」
- 编辑 tag 加 dedup 检查,重命名成已有 tag 文本时阻止关闭
- 粘贴改为按 cut 切分逐个 addTag;addTag 返回 boolean,
pasteText 在 max 满时 break 短路
- splitByCuts/parseValue 拆分:回切用 joinChar,paste/输入用 cutPattern
- 拼接翻译 '最多只能添加X个' 改为 $L('最多只能添加(*)个', max);
新增「最多只能添加(*)个」「该标签已存在」到 language/original-web.txt
manage.vue:
- 创建项目任务列表启用 :cut=\"[',', ',', ' ']\",支持半角/全角逗号/空格
IME (compositionstart/end 时序不可靠,统一走 @on-keydown + W3C 标准 229 守卫):
- login/ProjectPanel/TaskAdd/UserTagsModal 的 onXxxKeydown 加
isComposing || key=='Process' || keyCode==229 三重守卫,
与 TagInput.downEnter 风格统一
- file.vue 块模式重命名 onKeydown 用 \$nextTick 包 onEnter,
避免 keydown 早于 input 事件 commit v-model 导致少一个字符
AbstractModel.performInsertOrIgnore:
- \$uniqueBy 不为 null 时抛 InvalidArgumentException;
MySQL INSERT IGNORE 无法按指定列 scope 冲突,与框架 ON CONFLICT 语义不一致
- lastInsertId 仅在 > 0 时回填主键;
避免在无 auto_increment 列的表上把业务设置的 PK 覆盖为 0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-15 01:26:55 +00:00
kuaifan
3f5078ec9b
fix(frontend): 修复多处输入框 IME 合成期回车/Backspace 误触发提交
...
- file.vue 块模式文件重命名输入框 @on-keyup → @on-keydown,
避免拼音选词回车的 keyup 阶段误触发提交
- TagInput 回车添加 tag、Backspace 删除 tag 增加 IME 守卫
(isComposing / key=Process / keyCode=229),避免拼音选词回车
误加 tag、合成期 Backspace 误删上一个 tag
- login / ProjectPanel / UserTagsModal / TaskAdd 的 @on-enter
改用 @on-keydown 包装 (keyCode===13),绕开 iview Input
handleEnter 走 keyup.enter 在 IME 选词回车会误触发提交的问题
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-14 23:03:01 +00:00
kuaifan
cf6f6041b6
fix(micro-app): 浏览器独立窗口(popout)关闭应用时关闭窗口
...
assistShow watch 此前只为 Electron 子窗口发送 windowDestroy 销毁窗口,
浏览器以 window.open 打开的 popout 独立窗口(single/apps.vue)关闭应用后
只隐藏内容、窗口空挂不关。补全浏览器分支:windowType 为 popout 时调用
window.close()。主程序内嵌的 embed 窗口(默认值)不进入此分支,不受影响。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 05:30:31 +00:00
kuaifan
e17a520599
fix(micro-app): 修复 resolveType 调用不存在的 $A.platformType 报错
...
$A 上从未定义 platformType 方法,resolveType 解析微应用类型时
必抛 "$A.platformType is not a function"。改用既有 $A.Platform
属性判断桌面端(web/mac/win),保持 desktop/mobile 语义不变。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 04:26:33 +00:00
kuaifan
b544c9d7f6
fix(model): 覆写 performInsertOrIgnore 兼容 MySQL
...
L13 默认走 insertOrIgnoreReturning(INSERT ... ON CONFLICT ... RETURNING),
MySQL/MariaDB grammar 不支持该变体,导致全仓 saveOrIgnore() 调用抛异常。
改用 INSERT IGNORE + lastInsertId() 回填自增ID,保持与框架一致的返回语义。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 08:09:30 +00:00
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
6bbcb702dc
fix(deps): 补回 symfony/yaml 显式依赖,修复升级后微应用接口 500
...
Laravel 8→13 升级后依赖树变化导致 symfony/yaml 不再被传递引入,
而 app/Module/Apps.php 直接 use Symfony\Component\Yaml\Yaml 解析微应用
config.yml。Apps::isInstalledThrow() 在所有微应用控制器构造函数中调用,
缺类导致审批中心等应用中心微应用接口及 AiTaskLoopTask 全部 500。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 02:49:16 +00:00
kuaifan
53dadabca0
ci: tests 工作流增加 dev 分支 push 触发
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 01:26:18 +00:00
kuaifan
5d2701b0be
chore(release): publish.yml PHP 升至 8.4,PHP 镜像切正式 tag swoole-8.4
...
- publish.yml pack-vendor 的 setup-php 8.0 → 8.4(composer.json 已要求 ^8.3,不改发版必挂)
- docker-compose.yml 与 CI tests.yml 统一使用 kuaifan/php:swoole-8.4(已验证:PHP 8.4.21 + swoole + /usr/lib/doo/doo.so)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 01:21:47 +00:00
kuaifan
c3ebfcefd1
chore(ide-helper): 模型 @property 对齐迁移 + _ide_helper.php 刷新至 Laravel 13
...
- ide-helper:models --write:13 个模型补 125 行 @property(纯增量,无删除)
- ide-helper:generate:重新生成 _ide_helper.php(Laravel 13 facade 签名)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 01:21:47 +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
383664aef7
chore(quality): 引入 phpstan/ESLint/CI 门禁、Claude hooks 与代码检索地图
...
- phpstan(larastan ^3.10, level 1 + baseline 封存 86 个存量错误),composer stan / stan-baseline
- ESLint 9 flat config(vue2-essential,存量违规降 warn,error 基线为 0),npm run lint
- CI:.github/workflows/tests.yml(static-checks + phpunit,phpunit 用 kuaifan/php 镜像跑,FFI doo.so 不在仓库)
- Claude Code hooks:编辑 app/ 下 PHP 后自动单文件 phpstan,失败回灌
- 检索地图:routes/api-map.md(doc:api-map 生成,325 接口)、docs/events-map.md(events:map)、types/dootask-globals.d.ts($A 207 方法)、npm run check:lang(存量缺失 93 条,CI 暂非阻塞)
- CLAUDE.md:版本号更正 Laravel 13/PHP 8.4,新增质量门禁、检索地图、架构增量规则章节
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 01:21:22 +00:00
kuaifan
8fb6d331f8
chore(upgrade): 收尾——compose 镜像 tag、php-jwt 7、升级报告
...
- docker-compose.yml php 镜像指向 kuaifan/php:8.4-swoole-8.0.rc21
(dockerfile 仓库 phpswoole/8.4.Dockerfile 的 CI 变体产物,本地已构建同名 tag)
- firebase/php-jwt ^6.9 → ^7.1:消除 CVE-2025-45769(composer audit 清零);
唯一调用点 FileController JWT::encode(HS256) 实测兼容
(注意:7.x 强制 HMAC 密钥 ≥32 字节,标准 APP_KEY 51 字符无虞)
- 新增 UPGRADE-L13-REPORT.md:改动清单、依赖矩阵、验证证据、遗留风险
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 19:55:13 +00:00
kuaifan
cbe00f1284
refactor(skeleton): 平移 Laravel 13 新目录结构
...
- bootstrap/app.php 改为 Application::configure() 链式配置:
withRouting(web/api/console) + withMiddleware + withExceptions
- 删除 app/Http/Kernel.php、app/Console/Kernel.php:全局/分组中间件
归并到 13 默认栈,定制项经 trustProxies/trimStrings/
validateCsrfTokens/throttleApi/alias(webapi) 配置 API 表达
- 删除 app/Exceptions/Handler.php:ApiException/ModelNotFound 渲染、
ApiException 条件日志(report->stop)迁入 withExceptions;
图片动态裁剪逻辑抽为 App\Exceptions\ImagePathHandler
- 删除 RouteServiceProvider/EventServiceProvider/AuthServiceProvider/
BroadcastServiceProvider:限流、14 个模型观察者、Registered 监听
迁入 AppServiceProvider::boot;新增 bootstrap/providers.php
- 删除 7 个框架默认中间件子类(TrustProxies/TrimStrings/VerifyCsrfToken/
EncryptCookies/Authenticate/RedirectIfAuthenticated/
PreventRequestsDuringMaintenance)与未启用的 TrustHosts,
保留自定义 WebApi
- config/app.php 移除 providers/aliases 数组(改用框架默认集 +
bootstrap/providers.php,补齐 9~13 新增的框架 provider)
- artisan、public/index.php 换 13 骨架版(handleCommand/handleRequest)
验证:LaravelS 正常拉起,/health、登录、token 认证、WebSocket 握手、
头像、裁剪(经 withExceptions)、404 兜底全过;php artisan test
145 passed/1 skipped;migrate:fresh 213 全过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 19:51:19 +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
bfa0920579
feat(ai-assistant): 采集器补 tabindex/ARIA 角色覆盖 + label 去重
...
借鉴 browser-use clickable_elements 规则补齐页面元素采集边界:
- 用已定义但闲置的 INTERACTIVE_ROLES 补全所有 ARIA 可交互角色选择器(原仅扫部分 role)
- 选择器加 [tabindex]:not([tabindex="-1"]),捕捉自定义可聚焦/可交互元素
- 第二遍扫描跳过 label[for]/包裹控件的 label,避免与其表单控件重复采集
纯 DOM 增量、零风险(只多采不误删);真机验证无报错、label 去重生效。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 08:18:24 +00:00
kuaifan
88fed0744c
feat(ai-assistant): 页面操作穿透到当前微应用 iframe 内部
...
- 新增 active-context.js:按 microApps 解析最前的同源微应用 iframe(src 匹配 + contentDocument 同源探测),给出 doc/frameKey
- 采集器/执行器从只认主 document 泛化为按 el.ownerDocument 自适应,覆盖主文档与 iframe;视口与事件构造器取元素所在 window
- operation-module 加 scope(auto/main/app)、跨源/未就绪降级、frame 标注,并存活动上下文供失效守卫
- ai-kb 同步 page-action / page-context-tool / element-action 三 chunk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 07:02:35 +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
da095a1a80
feat(ai-assistant): 页面操作搬到主程序 /ws + doo task notify + 删 OCR
...
页面操作传输层从 MCP 独立 WebSocket 迁到主程序常驻 /ws:
- 后端 AssistantController 加 operation__dispatch/result(fd 归属校验 +
PushTask 精推 + Cache 轮询取结果),WebSocketService onMessage 加
operationResult 回包分支
- 前端 actions.js 加 case "operation" 经 emitter 桥接到浮窗执行后回包;
float-button.vue 接 aiOperationRequest;operation-module.js 解耦、
executor 惰性化;删除 operation-client.js(不再单连 MCP WS)
ai-kb 同步:tool-binding.yaml 去掉 4 个工具(3 页面 + OCR),相关 chunk
reconcile(措辞去 MCP 化、OCR 改多模态识图),工具数 33→29
i18n:后端新增文案登记 original-api.txt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 01:31:21 +00:00
kuaifan
9b41330413
fix(ai-assistant): 深链点击仅移动端收起浮窗,桌面端保留对话
...
桌面端 AI 浮窗为侧栏不遮挡页面,点深链后应保留以便继续对话;
仅移动端全屏浮窗会遮挡目标页,需收起。按 windowPortrait 区分。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 03:44:16 +00:00
kuaifan
39b9a72b16
refactor(ai-assistant): 用内联深链替代 driver.js 页面引导
...
「带我去」分步引导(driver.js + 四级元素定位 + show_guide)定位不稳、
二级菜单不可达、点高亮按钮触发跳转即被杀,体验差。改为 AI 回复正文里把
可定位的页面/面板渲染成可点深链 chip,点击直达那一屏。
- 新增深链目录:_meta/page-links.yaml(语义,供 AI 选择)+ deep-links.js
(可执行映射,21 个无需运行时 id 的导航目的地),两端 id 一致性由
tests/deep-links-parity.mjs 校验
- markdown.js 加 processDeepLinks:[文字](dootask://link/<id>) 合法 id →
chip,非法 id → 纯文字(绝不渲染死链);复用现有 dootask:// 点击拦截链路
- DialogMarkdown 加 link 分支调 openDeepLink;system.vue 支持 query.tab
初始化,系统设置二级 Tab 可深链直达
- 彻底移除 driver.js 引导:删 guide-renderer.js/guide.css、show_guide
前端通道、aiGuideStarted 监听、driver.js 依赖
- 同步 ai-kb:改写 guide/start-guide 两 chunk、tool-binding 去 show_guide
- 插件侧 prompt 改动规格见 docs/ai-deeplink-plugin-spec.md(独立仓库实施)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 23:55:09 +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
e6ef85e176
feat(ai): AI 模型列表支持 JSON 格式与按模型思考档位
...
- Setting::AIBotModels2Array 解析 JSON 数组(含 thinking)并兼容旧 id|name 格式,
新增 AIBotModelThinking() 取模型思考档位;aibotSetting 规范化对 JSON 串透传
- BotReceiveMsgTask 据所选模型档位向 AI 插件透传 thinking_effort,
旧 (thinking)/-reasoning 后缀降级为 medium 兜底
- 前端 AIModelNames 解析器兼容 JSON 与旧 id|name 格式
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:45:41 +00:00
kuaifan
ec1ab31b0e
refactor(ai-kb): 索引同步改为容器启动 reconcile
...
- 删除 CI reindex workflow(ai-kb-reindex.yml):内容入库不再依赖 CI
远程触发,AI 插件容器每次启动按文件 hash 对账(reconcile)自动增量
收敛,免重启即时生效时可手动调 POST /kb/reindex(默认 mode=reconcile)
- ai-kb README.md 同步更新贡献流程与内容同步机制说明
- CLAUDE.md 精简 ai-kb 同步规则:去除与 _schema/README 重复的写作规范
与背景说明,保留同步时机、操作指引、改完无需触发索引三条
- 另:auth 接口 locale 检索语种缺省改为由请求语言推导(含 zh 视为 zh,
否则 en),删除 config/ai.php 的 rag_supported_locales 与回退逻辑,
前端改用 getLanguage() 统一映射,同步更新 ai-kb auth.md
- appstore 镜像升级 0.4.3 -> 0.5.0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 09:46:58 +00:00
kuaifan
af206480fb
feat(ai-kb): 落地 RAG 知识库与灰度链路(48 feature / 546 chunk)
2026-06-10 04:08:17 +00:00
kuaifan
f6067d1bd5
feat(ai-assistant): AI 浮窗/浮按钮移动端适配与流式不中断
2026-06-10 04:05:09 +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
c03867304e
release: v1.7.90
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.7.90
2026-06-04 23:06:30 +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
8e66f0bfb3
feat(dialog): 管理员可设置全员群名称
...
- 后端 group__edit 放开全员群改名(仅系统管理员 admin=1)
- formatData/getGroupName 用 ALL_GROUP_DEFAULT_NAME 哨兵区分"未自定义",
避免回退逻辑被默认种子名短路导致 i18n 丢失
- 前端 canModifyName/编辑入口对全员群管理员放开,改名请求带 admin=1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:57:49 +00:00
kuaifan
e9ea1adc5d
chore(electron): drawio submodule 升级 24.7.17 -> 30.0.4
...
桌面端打包以 resources/drawio submodule 为完整基底,再覆盖 AppStore 下载的
drawio 插件定制文件。将基底从 jgraph/drawio v24.7.17 升到 v30.0.4,与
system-plugins 的 drawio 30.0.4 插件对齐(30.0.4 的 bootstrap.js 仍加载
PreConfig.js,electron/drawio.js 的 EXPORT_URL 注入无需改动)。
注意:桌面端重新打包需在 drawio 插件 30.0.4 发布到 AppStore 之后进行,
否则 build 时下载的「latest」仍是 24.7.17,会与 30.0.4 基底版本错配。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:57:37 +00:00
kuaifan
2eee171a50
feat(project): 系统设置新增「创建项目」权限开关
...
在系统设置「项目相关」新增「创建项目」权限范围(复选):
所有人 / 部门负责人(含部门管理员)/ 指定人员,三者与「所有人」互斥;
系统管理员始终可创建,不受开关限制。未授权用户隐藏「新建项目」入口
(顶部下拉、快捷键、移动端、应用宫格),后端 Project::userCanCreate()
兜底拦截,个人项目(注册自动创建)不受限。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:57:24 +00:00
kuaifan
fd6a8a3650
feat(user): 会员卡片支持查看该会员参与的项目和任务
...
- 新增权限闸门 UserDepartment::userWorksContext(本人/管理员/部门负责人只读,排除机器人与系统账号)
- 新增接口 project/user/projects、project/user/tasks、project/user/counts
- users/extra 返回 works_visible 标记控制入口显隐
- 会员卡片新增「项目与任务」入口,弹出 UserWorksModal(项目/待办/已完成三 Tab、角标计数、工作流状态徽章、懒加载)
- 部门只读视角下任务仅展示全员可见(visibility=1),与 findForDepartmentView 对齐
- 补充 i18n 文案与暗色样式
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 03:24:50 +00:00
kuaifan
84a90b7760
feat(approve): 审批详情支持删除审批
...
- ApproveController 新增 process__delById 代理,转发至审批插件 process/delById;
服务端注入 is_admin(仅发起人或管理员可删)
- 审批详情页新增「删除」按钮(仅已结束的审批可见),删除后独立路由返回上一页、
嵌入模式刷新列表
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:44:37 +00:00
kuaifan
7335c59b68
chore(release): 移除被 dootask-release 技能取代的翻译/版本脚本
...
- 删 language/translate.php(OpenAI 翻译)+ composer.json/lock + README
- 删 bin/version.js(git-cliff + OpenAI 更新日志)+ cliff.toml
- package.json 去掉 version/translate 两条 script,cmd 去掉 translate 子命令
- README_PUBLISH 指向 dootask-release 技能
翻译/版本号/更新日志改由 dootask-release 技能完成;CI 不受影响(只读 package.json version + CHANGELOG.md)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 07:54:37 +00:00
kuaifan
035c9d9d3d
feat(skill): 新增 dootask-release 发版技能
...
翻译与更新日志在技能内直接产出,版本号计算/差异检测/语言文件生成等
机械步骤交给本地脚本(language.php、version_bump.js,host 直跑、不进容器)。
language.php 用 php 以字节级对齐项目原生产物;脚本相对自身定位项目根,与 cwd 无关。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 07:19:23 +00:00
kuaifan
36da18af79
release: v1.7.81
v1.7.81
2026-06-03 02:20:11 +00:00
kuaifan
363badbc97
chore(appstore): 升级 appstore 镜像至 0.4.3
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 01:54:46 +00:00