diff --git a/mateclaw-server/src/main/resources/messages.properties b/mateclaw-server/src/main/resources/messages.properties index 68211c56..f9213a24 100644 --- a/mateclaw-server/src/main/resources/messages.properties +++ b/mateclaw-server/src/main/resources/messages.properties @@ -79,6 +79,22 @@ tool.video_generate.desc=\u751f\u6210\u89c6\u9891\u3002\u652f\u6301\u6587\u751f\ tool.music_generate.desc=\u751f\u6210\u97f3\u4e50\u6216\u6b4c\u66f2\u3002\u652f\u6301\u6587\u5b57\u63cf\u8ff0\u751f\u6210\u97f3\u4e50\u3001\u6b4c\u8bcd\u8c31\u66f2\u3001\u7eaf\u97f3\u4e50\u7b49\u6a21\u5f0f\uff0c\u652f\u6301 Google Lyria \u548c MiniMax Music \u7b49 Provider\u3002\u4efb\u52a1\u5f02\u6b65\u6267\u884c\uff08\u7ea6 1-3 \u5206\u949f\uff09\uff0c\u5b8c\u6210\u540e\u524d\u7aef\u4f1a\u81ea\u52a8\u63a5\u6536 SSE \u4e8b\u4ef6 async_task_completed \u5e76\u628a\u97f3\u9891\u63a8\u5230\u5bf9\u8bdd\u4e2d\uff0c\u65e0\u9700\u624b\u52a8\u5237\u65b0\u3002 tool.model3d_generate.desc=\u751f\u6210 3D \u6a21\u578b (.glb)\u3002\u652f\u6301\u6587\u751f 3D \u4e0e\u56fe\u751f 3D \u4e24\u79cd\u6a21\u5f0f\uff0c\u76ee\u524d Provider \u4e3a\u817e\u8baf\u6df7\u5143 3D Rapid\u3002\u4efb\u52a1\u5f02\u6b65\u6267\u884c\uff08\u7ea6 1-3 \u5206\u949f\uff09\uff0c\u5b8c\u6210\u540e\u524d\u7aef\u4f1a\u81ea\u52a8\u63a5\u6536 SSE \u4e8b\u4ef6 async_task_completed \u5e76\u628a\u6a21\u578b\u63a8\u5230\u5bf9\u8bdd\u4e2d\uff08\u5e26 model-viewer \u9884\u89c8\uff09\uff0c\u65e0\u9700\u624b\u52a8\u5237\u65b0\u3002 +# --- Document rendering tools --- +tool.renderPdf.desc=\u4ece Markdown \u751f\u6210\u65b0\u7684 PDF \u6587\u4ef6\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002\u5f53\u7528\u6237\u660e\u786e\u8981\u6c42 PDF\uff08\u5bfc\u51fa PDF / \u751f\u6210 pdf / \u53e6\u5b58\u4e3a PDF\uff09\u65f6\u5fc5\u987b\u4f7f\u7528\u672c\u5de5\u5177\uff0c\u4e0d\u8981\u7528 renderDocx \u66ff\u4ee3\uff0c\u4e5f\u4e0d\u8981\u901a\u8fc7 chrome --headless\u3001wkhtmltopdf \u7b49\u65b9\u5f0f\u7ed5\u8fc7\u3002\u9002\u5408\u62a5\u544a\u3001\u767d\u76ae\u4e66\u3001\u5408\u540c\u7b49\u6700\u7ec8\u4ea4\u4ed8\u7269\u3002\u53ef\u9009\u7684 YAML frontmatter \u53ef\u9a71\u52a8\u5c01\u9762\u9875\u4e0e\u9875\u7709\u9875\u811a\u3002markdown \u6b63\u6587\u8f83\u5927\uff08>5KB\uff09\u65f6\u6539\u7528 renderPdfFromFile\u3002 +tool.renderPdfFromFile.desc=\u4ece\u78c1\u76d8\u4e0a\u7684 markdown \u6587\u4ef6\u751f\u6210 PDF \u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002\u5f53\u7528\u6237\u8981\u6c42 PDF \u4e14 markdown \u6b63\u6587\u5df2\u5199\u5165\u6587\u4ef6\u65f6\u4f7f\u7528\u672c\u5de5\u5177\uff0c\u907f\u514d LLM \u628a\u81ea\u5df1\u7684\u5185\u5bb9\u4f5c\u4e3a\u53c2\u6570\u91cd\u590d\u8f93\u51fa\u3002\u652f\u6301\u4e0e renderPdf \u76f8\u540c\u7684 markdown \u5b50\u96c6\u4e0e frontmatter \u7ea6\u5b9a\u3002 +tool.renderDocx.desc=\u4ece Markdown \u751f\u6210\u65b0\u7684\u53ef\u7f16\u8f91 .docx\uff08Word\uff09\u6587\u4ef6\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002\u9002\u5408\u7528\u6237\u540e\u7eed\u4ecd\u9700\u4fee\u6539\u7684\u6587\u6863\u2014\u2014\u62a5\u544a\u3001\u5907\u5fd8\u5f55\u3001\u5408\u540c\u3001\u4fe1\u51fd\u3001\u7b80\u5386\u3002\u652f\u6301\u6807\u9898\u3001\u52a0\u7c97\u3001\u6709\u5e8f/\u65e0\u5e8f\u5217\u8868\u3001\u8868\u683c\u3001\u56fe\u7247\uff08SVG \u81ea\u52a8\u6805\u683c\u5316\u4e3a PNG\uff09\u3002\u7528\u6237\u8981\u6c42 PDF \u65f6\u6539\u7528 renderPdf\uff0c\u8981\u8868\u683c\u5de5\u4f5c\u7c3f\u7528 renderXlsx\uff0c\u8981\u5e7b\u706f\u7247\u7528 renderPptx\u3002markdown \u6b63\u6587\u8f83\u5927\uff08>5KB\uff09\u65f6\u6539\u7528 renderDocxFromFile\u3002 +tool.renderDocxFromFile.desc=\u4ece\u78c1\u76d8\u4e0a\u7684 markdown \u6587\u4ef6\u751f\u6210\u53ef\u7f16\u8f91 .docx\uff08Word\uff09\u6587\u4ef6\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002markdown \u6b63\u6587\u8f83\u5927\uff08>5KB\uff09\u65f6\u4f18\u5148\u7528\u672c\u5de5\u5177\uff0c\u907f\u514d LLM \u91cd\u590d\u8f93\u51fa\u81ea\u5df1\u7684\u5185\u5bb9\u3002\u7528\u6237\u8981\u6c42 PDF \u65f6\u6539\u7528 renderPdfFromFile\u3002markdown \u5b50\u96c6\u4e0e renderDocx \u76f8\u540c\u3002 +tool.renderDocxFromFiles.desc=\u6309\u987a\u5e8f\u62fc\u63a5\u591a\u4e2a markdown \u6587\u4ef6\u751f\u6210\u5355\u4e2a .docx \u5e76\u8fd4\u56de\u4e0b\u8f7d\u94fe\u63a5\u3002\u9002\u5408\u5206\u7ae0\u8282\u64b0\u5199\u7684\u957f\u62a5\u544a\uff08\u5c01\u9762\u3001\u76ee\u5f55\u3001\u6b63\u6587\u3001\u9644\u5f55\u5206\u522b\u6210\u6587\u4ef6\uff09\u3002\u6587\u4ef6\u4ee5 UTF-8 \u8bfb\u53d6\u5e76\u4ee5\u7a7a\u884c\u8fde\u63a5\uff0cmarkdown \u5b50\u96c6\u4e0e renderDocx \u76f8\u540c\u3002 +tool.renderXlsx.desc=\u4ece Markdown \u751f\u6210\u65b0\u7684 .xlsx\uff08Excel\uff09\u5de5\u4f5c\u7c3f\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002\u9002\u5408\u8d22\u52a1\u62a5\u8868\u3001\u6570\u636e\u8868\u3001\u5bf9\u6bd4\u77e9\u9635\u3001\u8ba1\u5212\u8868\u3002\u7ea6\u5b9a\uff1a\u6bcf\u4e2a\u300c# \u6807\u9898\u300d\u5f00\u542f\u4e00\u4e2a\u65b0\u5de5\u4f5c\u8868\uff0c\u5176\u4e0b\u7684\u7ba1\u9053\u8868\u683c\u6210\u4e3a\u8868\u4f53\uff0c\u9996\u884c\u4f5c\u4e3a\u8868\u5934\uff0c\u6570\u5b57\u5355\u5143\u683c\u81ea\u52a8\u8bc6\u522b\u4e3a\u6570\u503c\u3002markdown \u6b63\u6587\u8f83\u5927\uff08>5KB\uff09\u65f6\u6539\u7528 renderXlsxFromFile\u3002 +tool.renderXlsxFromFile.desc=\u4ece\u78c1\u76d8\u4e0a\u7684 markdown \u6587\u4ef6\u751f\u6210 .xlsx\uff08Excel\uff09\u5de5\u4f5c\u7c3f\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002markdown \u6b63\u6587\u8f83\u5927\uff08>5KB\uff09\u65f6\u4f18\u5148\u7528\u672c\u5de5\u5177\u3002markdown \u5b50\u96c6\u4e0e renderXlsx \u76f8\u540c\uff08\u6bcf\u4e2a\u300c# \u6807\u9898\u300d\u4e00\u4e2a\u5de5\u4f5c\u8868\uff0c\u7ba1\u9053\u8868\u683c\u4e3a\u8868\u4f53\uff09\u3002 +tool.renderPptx.desc=\u4ece Markdown \u751f\u6210\u65b0\u7684 .pptx \u6f14\u793a\u6587\u7a3f\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002\u9002\u5408\u63d0\u6848\u6f14\u793a\u3001\u9879\u76ee\u8ba1\u5212\u3001\u6f14\u8bb2\u3001\u6c47\u62a5\u3002\u91c7\u7528 Marp \u98ce\u683c\u7ea6\u5b9a\uff1a\u5355\u72ec\u4e00\u884c\u300c---\u300d\u5206\u9694\u5e7b\u706f\u7247\uff0c\u6bcf\u9875\u9996\u4e2a\u300c#/##/###\u300d\u4f5c\u4e3a\u6807\u9898\uff0c\u300c-\u300d\u300c*\u300d\u5f00\u5934\u7684\u884c\u4e3a\u8981\u70b9\uff0c\u300c\u300d\u4e3a\u6f14\u8bb2\u8005\u5907\u6ce8\u3002markdown \u6b63\u6587\u8f83\u5927\uff08>5KB\uff09\u65f6\u6539\u7528 renderPptxFromFile\u3002 +tool.renderPptxFromFile.desc=\u4ece\u78c1\u76d8\u4e0a\u7684 markdown \u6587\u4ef6\u751f\u6210 .pptx \u6f14\u793a\u6587\u7a3f\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002markdown \u6b63\u6587\u8f83\u5927\uff08>5KB\uff09\u65f6\u4f18\u5148\u7528\u672c\u5de5\u5177\u3002Marp \u98ce\u683c markdown \u5b50\u96c6\u4e0e renderPptx \u76f8\u540c\u3002 +tool.render_html_image.desc=\u5c06 HTML \u6e32\u67d3\u4e3a PNG \u56fe\u7247\u5e76\u8fd4\u56de\u4e00\u6b21\u6027\u4e0b\u8f7d\u94fe\u63a5\u3002\u5f53\u7528\u6237\u5e0c\u671b\u4ee5\u300c\u56fe\u7247\u300d\u5f62\u5f0f\u4ea4\u4ed8 HTML \u5236\u54c1\uff08\u67b6\u6784\u56fe\u3001\u4fe1\u606f\u56fe\u3001\u4eea\u8868\u76d8\u3001\u539f\u578b\u7a3f\uff09\u65f6\u4f7f\u7528\uff0c\u5c24\u5176\u5728\u4f01\u4e1a\u5fae\u4fe1\u3001\u9489\u9489\u3001\u98de\u4e66\u3001Telegram\u3001Discord \u7b49\u65e0\u6cd5\u70b9\u5f00 HTML \u94fe\u63a5\u7684 IM \u6e20\u9053\u3002filePath \u4e0e html \u53c2\u6570\u4e8c\u9009\u4e00\u3002 +tool.extract_document_text.desc=\u4ece Office/PDF \u6587\u6863\u4e2d\u63d0\u53d6\u6587\u672c\u5185\u5bb9\uff0c\u652f\u6301 PDF\u3001Word(.docx/.doc)\u3001Excel(.xlsx/.xls)\u3001PowerPoint(.pptx/.ppt)\u3002\u6309\u683c\u5f0f\u8d70\u591a\u7ea7 fallback \u63d0\u53d6\u94fe\uff08\u7cfb\u7edf\u547d\u4ee4 \u2192 Python \u2192 Java \u2192 Tika\uff09\uff0c\u8fd4\u56de\u63d0\u53d6\u6587\u672c\u3001\u6240\u7528\u65b9\u6cd5\u4e0e\u5143\u6570\u636e\u3002options \u53ef\u6307\u5b9a pages \u9875\u7801\u8303\u56f4\u6216 method \u5f3a\u5236\u63d0\u53d6\u5668\u3002 +tool.extract_pdf_text.desc=\u63d0\u53d6 PDF \u6587\u4ef6\u7684\u6587\u672c\u5185\u5bb9\uff0c\u662f extract_document_text \u7684\u5feb\u6377\u65b9\u5f0f\u3002\u53ef\u901a\u8fc7 pages \u53c2\u6570\u6307\u5b9a\u9875\u7801\u8303\u56f4\uff08\u5982 "1-5" \u6216 "1,3,5"\uff09\uff0c\u4e0d\u4f20\u5219\u63d0\u53d6\u5168\u90e8\u3002 +tool.extract_docx_text.desc=\u63d0\u53d6 Word \u6587\u6863\uff08.docx/.doc\uff09\u7684\u6587\u672c\u5185\u5bb9\uff0c\u662f extract_document_text \u7684\u5feb\u6377\u65b9\u5f0f\u3002 +tool.detect_file_type.desc=\u68c0\u6d4b\u6587\u4ef6\u7684 MIME \u7c7b\u578b\u4e0e\u6587\u4ef6\u7c7b\u522b\u3002\u7528\u4e8e\u8bfb\u53d6\u6587\u4ef6\u524d\u5224\u65ad\u7c7b\u578b\u3001\u533a\u5206\u6587\u672c\u6587\u4ef6\u4e0e\u4e8c\u8fdb\u5236\u6587\u6863\uff08PDF/Office\uff09\u3001\u9009\u62e9\u5408\u9002\u7684\u8bfb\u53d6\u6216\u63d0\u53d6\u5de5\u5177\u3002\u8fd4\u56de mimeType\u3001fileCategory \u4e0e\u5efa\u8bae\u5de5\u5177 suggestedTool\u3002 + # --- Guard Rules --- guard.SHELL_RM_RF_ROOT.name=\u9012\u5f52\u5f3a\u5236\u5220\u9664\u6839\u76ee\u5f55 guard.SHELL_RM_RF_ROOT.fix=\u8bf7\u6307\u5b9a\u5177\u4f53\u76ee\u5f55\u8def\u5f84\u800c\u975e\u6839\u76ee\u5f55 @@ -278,16 +294,16 @@ agent.limit_exceeded.fallback=\u62b1\u6b49\uff0c\u5df2\u8fbe\u5230\u6700\u5927\u agent.limit_exceeded.empty_context=\uff08\u5c1a\u672a\u6536\u96c6\u5230\u5de5\u5177\u8c03\u7528\u7ed3\u679c\uff09 # --- Cron unified tasks conversation --- -cron.tasks_conversation.title=📋 定时任务 -cron.run_header.scheduled=定时触发 -cron.run_header.manual=手动触发 -cron.run.silent=(本次定时任务检查后无新内容,已跳过投递) +cron.tasks_conversation.title=\ud83d\udccb \u5b9a\u65f6\u4efb\u52a1 +cron.run_header.scheduled=\u5b9a\u65f6\u89e6\u53d1 +cron.run_header.manual=\u624b\u52a8\u89e6\u53d1 +cron.run.silent=\uff08\u672c\u6b21\u5b9a\u65f6\u4efb\u52a1\u68c0\u67e5\u540e\u65e0\u65b0\u5185\u5bb9\uff0c\u5df2\u8df3\u8fc7\u6295\u9012\uff09 # --- Wiki vision-in pipeline --- -err.wiki.vision.disabled=图片识别功能未启用 -err.wiki.vision.no_provider=未配置可用的图片识别 provider -err.wiki.vision.provider_failed=图片识别 provider 调用失败 -err.wiki.vision.all_failed=所有图片识别 provider 调用失败 +err.wiki.vision.disabled=\u56fe\u7247\u8bc6\u522b\u529f\u80fd\u672a\u542f\u7528 +err.wiki.vision.no_provider=\u672a\u914d\u7f6e\u53ef\u7528\u7684\u56fe\u7247\u8bc6\u522b provider +err.wiki.vision.provider_failed=\u56fe\u7247\u8bc6\u522b provider \u8c03\u7528\u5931\u8d25 +err.wiki.vision.all_failed=\u6240\u6709\u56fe\u7247\u8bc6\u522b provider \u8c03\u7528\u5931\u8d25 # --- Chat: assistant stop / interrupt placeholders --- -chat.stopMarker.userAborted=[已被用户中止] +chat.stopMarker.userAborted=[\u5df2\u88ab\u7528\u6237\u4e2d\u6b62] diff --git a/mateclaw-server/src/main/resources/messages_en.properties b/mateclaw-server/src/main/resources/messages_en.properties index cb496fcd..ab202472 100644 --- a/mateclaw-server/src/main/resources/messages_en.properties +++ b/mateclaw-server/src/main/resources/messages_en.properties @@ -79,6 +79,22 @@ tool.video_generate.desc=Generate a video. Supports text-to-video and image-to-v tool.music_generate.desc=Generate music or a song. Supports text-to-music, lyrics composition, and instrumental modes via Google Lyria and MiniMax Music. Runs asynchronously (1-3 minutes); the client receives the audio automatically via the SSE async_task_completed event without a manual refresh. tool.model3d_generate.desc=Generate a 3D model (.glb). Supports text-to-3D and image-to-3D modes via Tencent Hunyuan 3D Rapid. Runs asynchronously (1-3 minutes); the client receives the model automatically via the SSE async_task_completed event with an inline model-viewer preview, no manual refresh required. +# --- Document rendering tools --- +tool.renderPdf.desc=Render a new PDF file from Markdown and return a one-time download URL. Use this tool whenever the user explicitly asks for a PDF (export PDF / save as PDF); do not substitute renderDocx, and do not bypass it via chrome --headless / wkhtmltopdf. Best for final deliverables such as reports, white papers, and contracts. Optional YAML frontmatter drives the cover page and page header/footer. For markdown bodies larger than ~5 KB, use renderPdfFromFile instead. +tool.renderPdfFromFile.desc=Render a PDF from a Markdown file on disk and return a one-time download URL. Use this when the user asks for a PDF and the markdown body is already saved to a file, so the LLM need not repeat its own output as a tool argument. Same markdown subset and frontmatter convention as renderPdf. +tool.renderDocx.desc=Render a new editable .docx (Word) file from Markdown and return a one-time download URL. Best for documents the user will keep revising — reports, memos, contracts, letters, resumes. Supports headings, bold, ordered/unordered lists, tables, and images (SVG is rasterized to PNG). Use renderPdf when the user asked for a PDF, renderXlsx for spreadsheets, renderPptx for slide decks. For markdown bodies larger than ~5 KB, use renderDocxFromFile instead. +tool.renderDocxFromFile.desc=Render an editable .docx (Word) file from a Markdown file on disk and return a one-time download URL. Prefer this for large markdown bodies (>5 KB) so the LLM need not repeat its own output. Use renderPdfFromFile when the user asked for a PDF. Same markdown subset as renderDocx. +tool.renderDocxFromFiles.desc=Render a single .docx by concatenating multiple Markdown files in order and return a download URL. Use for long reports split into chapters (cover, table of contents, body, appendix as separate files). Files are read as UTF-8 and joined with a blank line; same markdown subset as renderDocx. +tool.renderXlsx.desc=Render a new .xlsx (Excel) workbook from Markdown and return a one-time download URL. Best for financial reports, data tables, comparison matrices, and plans. Convention: each `# Heading` starts a new sheet, the pipe table below it becomes the sheet body, the first row is the header, and numeric cells are auto-detected. For markdown larger than ~5 KB, use renderXlsxFromFile instead. +tool.renderXlsxFromFile.desc=Render a .xlsx (Excel) workbook from a Markdown file on disk and return a one-time download URL. Prefer this for large markdown bodies (>5 KB). Same markdown subset as renderXlsx (`# Heading` per sheet, pipe tables as the body). +tool.renderPptx.desc=Render a new .pptx slide deck from Markdown and return a one-time download URL. Best for pitch decks, project plans, talks, and briefings. Uses Marp-style convention: a lone `---` line separates slides, the first `#/##/###` of a slide is its title, `-`/`*` lines are bullets, and `` becomes speaker notes. For markdown larger than ~5 KB, use renderPptxFromFile instead. +tool.renderPptxFromFile.desc=Render a .pptx slide deck from a Markdown file on disk and return a one-time download URL. Prefer this for large markdown bodies (>5 KB). Same Marp-style markdown subset as renderPptx. +tool.render_html_image.desc=Render HTML to a PNG image and return a one-time download URL. Use when the user wants an HTML artifact (architecture diagram, infographic, dashboard, mockup) delivered as an image — especially on IM channels (WeCom, DingTalk, Feishu, Telegram, Discord) where a raw HTML link is not clickable. Supply exactly one of filePath or html. +tool.extract_document_text.desc=Extract text content from Office/PDF documents — PDF, Word (.docx/.doc), Excel (.xlsx/.xls), PowerPoint (.pptx/.ppt). Runs a per-format multi-stage fallback chain (system command, Python, Java, Tika) and returns the extracted text, the method used, and metadata. The options argument may set a pages range or force a specific extraction method. +tool.extract_pdf_text.desc=Extract text content from a PDF file; a shortcut for extract_document_text. The pages argument selects a page range (e.g. "1-5" or "1,3,5"); omit it to extract the whole document. +tool.extract_docx_text.desc=Extract text content from a Word document (.docx/.doc); a shortcut for extract_document_text. +tool.detect_file_type.desc=Detect a file's MIME type and category. Use before reading a file to decide its type, distinguish text files from binary documents (PDF/Office), and pick the right read or extract tool. Returns mimeType, fileCategory, and a suggestedTool. + # --- Guard Rules --- guard.SHELL_RM_RF_ROOT.name=Recursive force delete root directory guard.SHELL_RM_RF_ROOT.fix=Specify a concrete directory path instead of root