From e74142e58d79c0caff57bec0f6b1b83a1544376f Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 12 Jun 2026 01:42:12 +0000 Subject: [PATCH] =?UTF-8?q?feat(ai-assistant):=20auth=20=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E7=94=A8=E6=88=B7=20fd=20+=20doo=5Fenabled=EF=BC=8C=E4=BE=9B?= =?UTF-8?q?=20AI=20=E7=BB=8F=20doo=20=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- app/Http/Controllers/Api/AssistantController.php | 9 ++++++++- app/Module/AI.php | 5 ++++- resources/ai-kb/zh/concept/ai-assistant/tools.md | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/AssistantController.php b/app/Http/Controllers/Api/AssistantController.php index c87a97abb..6ead884c8 100644 --- a/app/Http/Controllers/Api/AssistantController.php +++ b/app/Http/Controllers/Api/AssistantController.php @@ -58,10 +58,17 @@ class AssistantController extends AbstractController $locale = str_contains(strtolower($locale), 'zh') ? 'zh' : 'en'; $contextKey = mb_substr(trim(Request::input('session_id', '')), 0, 100); + // 当前用户 WebSocket fd:供 AI 经 doo page 操作本人浏览器(页面操作用)。 + // 复用 operation__dispatch 同款归属校验:在表即在线、归属即本人,否则置 0。 + $fd = intval(Base::headerOrInput('fd')); + if ($fd > 0 && intval(WebSocket::whereFd($fd)->value('userid')) !== intval($user->userid)) { + $fd = 0; + } + // 灰度判定(参考 config/ai.php):总开关 + canary 白名单 $ragEnabled = AI::ragEnabledFor((int) $user->userid); - return AI::createStreamKey($modelType, $modelName, $contextInput, $locale, $ragEnabled, $contextKey); + return AI::createStreamKey($modelType, $modelName, $contextInput, $locale, $ragEnabled, $contextKey, $fd); } /** diff --git a/app/Module/AI.php b/app/Module/AI.php index e083736c0..68ba311b4 100644 --- a/app/Module/AI.php +++ b/app/Module/AI.php @@ -164,7 +164,7 @@ class AI return in_array($userid, $allow, true); } - public static function createStreamKey($modelType, $modelName, $contextInput = [], $locale = 'zh', $ragEnabled = true, $contextKey = '') + public static function createStreamKey($modelType, $modelName, $contextInput = [], $locale = 'zh', $ragEnabled = true, $contextKey = '', $fd = 0) { $modelType = trim((string)$modelType); $modelName = trim((string)$modelName); @@ -250,6 +250,9 @@ class AI 'rag_enabled' => $ragEnabled ? '1' : '0', // 前端会话ID,AI 服务存为 context_key 用于检索打点关联 'context_key' => mb_substr(trim((string)$contextKey), 0, 100), + // AI 助手路径启用 doo 执行工具;fd 为用户当前 WebSocket 连接(页面操作用,0 表示无) + 'doo_enabled' => '1', + 'fd' => intval($fd), ]; $baseUrl = trim((string)($setting[$modelType . '_base_url'] ?? '')); diff --git a/resources/ai-kb/zh/concept/ai-assistant/tools.md b/resources/ai-kb/zh/concept/ai-assistant/tools.md index 655f96045..35886f007 100644 --- a/resources/ai-kb/zh/concept/ai-assistant/tools.md +++ b/resources/ai-kb/zh/concept/ai-assistant/tools.md @@ -34,6 +34,7 @@ DooTask AI 助手通过 MCP(Model Context Protocol)协议调用工具,把" ## 工具来源 - **dootask-mcp 内置工具**:29 个,覆盖任务/项目/消息/文件/报告/搜索 - **AI 助手内置工具**:`search_help_docs`(检索本知识库)、`get_session_image`(取多模态图片) +- **doo 命令行工具**:AI 助手还可经内置的 `doo` 命令行(以你的身份、在你的权限内)直接完成任务/项目/消息/文件/报告/搜索/页面等操作;它是把上述能力统一成一个命令行入口,权限同样由后端校验 - 工具清单维护在仓库 `resources/ai-kb/_meta/tool-binding.yaml` ## 数据工具与页面操作