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>
This commit is contained in:
kuaifan 2026-06-12 01:42:12 +00:00
parent da095a1a80
commit e74142e58d
3 changed files with 13 additions and 2 deletions

View File

@ -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);
}
/**

View File

@ -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',
// 前端会话IDAI 服务存为 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'] ?? ''));

View File

@ -34,6 +34,7 @@ DooTask AI 助手通过 MCPModel Context Protocol协议调用工具把"
## 工具来源
- **dootask-mcp 内置工具**29 个,覆盖任务/项目/消息/文件/报告/搜索
- **AI 助手内置工具**`search_help_docs`(检索本知识库)、`get_session_image`(取多模态图片)
- **doo 命令行工具**AI 助手还可经内置的 `doo` 命令行(以你的身份、在你的权限内)直接完成任务/项目/消息/文件/报告/搜索/页面等操作;它是把上述能力统一成一个命令行入口,权限同样由后端校验
- 工具清单维护在仓库 `resources/ai-kb/_meta/tool-binding.yaml`
## 数据工具与页面操作