Просмотр исходного кода

fix: MCP LaTeX rendering in console + update autocomplete

- MCP sync now detects ##TEXFORM## prefix and renders KaTeX
- Added mcp-latex output type with show/copy actions
- Autocomplete list: added 'mcp' command

Co-Authored-By: Claude <noreply@anthropic.com>
nonvioce 3 месяцев назад
Родитель
Сommit
b0ebe42dbc
1 измененных файлов с 21 добавлено и 2 удалено
  1. 21 2
      app/src/main/assets/console.js

+ 21 - 2
app/src/main/assets/console.js

@@ -1317,6 +1317,20 @@ class SymjaConsole {
                 <span class="mcp-prompt">[${seq}]:</span>
                 <span class="mcp-command-text">${this.escapeHtml(text)}</span>
             </div>`;
+        } else if (type === 'mcp-latex') {
+            line.innerHTML = `<div class="latex-line">
+                <div class="latex-content">
+                    <div class="latex-rendered" id="latex-mcp-${Date.now()}"></div>
+                    <div class="latex-source" style="display:none">${this.escapeHtml(text)}</div>
+                    <div class="latex-actions">
+                        <button class="latex-btn latex-toggle" onclick="symjaConsole.toggleLatexSource(this)">显示源码</button>
+                        <button class="latex-btn latex-copy" onclick="symjaConsole.copyLatex(this)">复制 LaTeX</button>
+                    </div>
+                </div>
+            </div>`;
+            this.output.appendChild(line);
+            const renderedDiv = line.querySelector('.latex-rendered');
+            this.renderLatex(text, renderedDiv);
         } else if (type === 'mcp-result') {
             line.innerHTML = `<div class="mcp-result-line">
                 <span class="mcp-prompt"></span>
@@ -1717,7 +1731,7 @@ class SymjaConsole {
             console.log('Searching completions for prefix:', prefix);
             
             // 特殊命令列表
-            const specialCommands = ['help', 'clear', 'cls', 'history', 'plugins', 'feedback'];
+            const specialCommands = ['help', 'clear', 'cls', 'history', 'plugins', 'mcp', 'feedback'];
             
             // 获取插件命令列表
             const pluginCommands = this.plugins
@@ -2049,8 +2063,13 @@ class SymjaConsole {
             events.forEach(ev => {
                 this.mcpEventCount++;
                 this.addOutput(ev.expression, 'mcp-input', { seq: this.mcpEventCount });
+                // 检测 LaTeX 渲染
+                if (ev.result && ev.result.startsWith('##TEXFORM##')) {
+                    const latex = ev.result.substring(11);
+                    this.addOutput(latex, 'mcp-latex', { renderLatex: true });
+                }
                 // 检测绘图结果 → Canvas 渲染
-                if (ev.result && ev.result.startsWith('{"type":"plot"')) {
+                else if (ev.result && ev.result.startsWith('{"type":"plot"')) {
                     this.addPlotOutput(ev.result, this.mcpEventCount);
                 } else {
                     this.addOutput(ev.result, 'mcp-result', { seq: this.mcpEventCount });