Lexer->addSpecialPattern('~~RAGASKER~~', $mode, 'plugin_ragasker'); } public function handle($match, $state, $pos, Doku_Handler $handler) { // 只传递唯一ID用于渲染 $uniqid = uniqid('ragasker_', true); return [$uniqid, null]; } public function render($mode, Doku_Renderer $renderer, $data) { if($mode !== 'xhtml') return false; list($uniqid, $_) = $data; $inputId = $uniqid . '_input'; $btnId = $uniqid . '_btn'; $resultId = $uniqid . '_result'; $renderer->doc .= '
'; $renderer->doc .= ' '; $renderer->doc .= ''; $renderer->doc .= '
'; $renderer->doc .= '
'; $renderer->doc .= ''; return true; } // callOpenAI 逻辑将迁移到 action 处理 // 保留接口以兼容 private function callOpenAI($prompt, $params = []) { return ''; } private function formatResponse($text) { // 转换 Markdown 到 HTML $text = hsc($text); // HTML 安全转义 // 基础 Markdown 转换 $text = preg_replace('/\*\*(.+?)\*\*/', '$1', $text); $text = preg_replace('/\*(.+?)\*/', '$1', $text); $text = preg_replace('/`(.+?)`/', '$1', $text); // 转换换行 $text = nl2br($text); return $text; } }