diff --git a/mateclaw-server/src/main/java/vip/mate/channel/web/ChatController.java b/mateclaw-server/src/main/java/vip/mate/channel/web/ChatController.java index 2e8a6764..94a0419e 100644 --- a/mateclaw-server/src/main/java/vip/mate/channel/web/ChatController.java +++ b/mateclaw-server/src/main/java/vip/mate/channel/web/ChatController.java @@ -37,6 +37,8 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; @@ -1733,8 +1735,8 @@ public class ChatController { /** Markdown link pointing at a generated-file download URL. Used by the * StreamAccumulator to surface generated artifacts in the run-overview rail. */ - private static final java.util.regex.Pattern GENERATED_FILE_LINK_PATTERN = - java.util.regex.Pattern.compile("\\[([^\\]]+)\\]\\(([^)]*?/api/v1/files/generated/[a-zA-Z0-9-]+)\\)"); + private static final Pattern GENERATED_FILE_LINK_PATTERN = + Pattern.compile("\\[([^\\]]+)\\]\\(((?:https?://[^/\\s)\\]]+)?/api/v1/files/generated/[A-Za-z0-9-]+)\\)"); /** * 流式累积器 — 收集 StreamDelta 事件,持久化到 DB。 @@ -2044,7 +2046,7 @@ public class ChatController { * produce duplicate entries in the run-overview rail. */ private void extractGeneratedFiles(String result, String toolName) { if (result == null || result.isBlank()) return; - java.util.regex.Matcher m = GENERATED_FILE_LINK_PATTERN.matcher(result); + Matcher m = GENERATED_FILE_LINK_PATTERN.matcher(result); while (m.find()) { String url = m.group(2); boolean dup = generatedFiles.stream() diff --git a/mateclaw-ui/src/composables/chat/useChat.ts b/mateclaw-ui/src/composables/chat/useChat.ts index fc92b82c..fe2609c3 100644 --- a/mateclaw-ui/src/composables/chat/useChat.ts +++ b/mateclaw-ui/src/composables/chat/useChat.ts @@ -418,7 +418,7 @@ export function useChat(options: UseChatOptions): UseChatReturn { } /** Markdown link pointing at a generated-file download URL. */ - const GENERATED_FILE_LINK_RE = /\[([^\]]+)\]\(([^)]*?\/api\/v1\/files\/generated\/[a-zA-Z0-9-]+)\)/g + const GENERATED_FILE_LINK_RE = /\[([^\]]+)\]\(((?:https?:\/\/[^/\s)\]]+)?\/api\/v1\/files\/generated\/[A-Za-z0-9-]+)\)/g /** Extract generated-file artifacts from a tool result string. */ function extractGeneratedFiles(result: unknown, toolName: string): GeneratedFile[] { diff --git a/mateclaw-ui/src/i18n/locales/en-US.ts b/mateclaw-ui/src/i18n/locales/en-US.ts index 1a20588d..8d8e578e 100644 --- a/mateclaw-ui/src/i18n/locales/en-US.ts +++ b/mateclaw-ui/src/i18n/locales/en-US.ts @@ -106,7 +106,6 @@ export default { plan: 'Plan Progress', subagents: 'Sub-agents', files: 'Generated Files', - noFiles: 'No generated files yet', noPlan: 'No execution plan yet', noSubagents: 'No sub-agents yet', collapse: 'Collapse', diff --git a/mateclaw-ui/src/i18n/locales/zh-CN.ts b/mateclaw-ui/src/i18n/locales/zh-CN.ts index 632b6573..a37da88b 100644 --- a/mateclaw-ui/src/i18n/locales/zh-CN.ts +++ b/mateclaw-ui/src/i18n/locales/zh-CN.ts @@ -106,7 +106,6 @@ export default { plan: '计划进度', subagents: '子 Agent', files: '生成文件', - noFiles: '暂无生成文件', noPlan: '暂无执行计划', noSubagents: '暂无子 Agent', collapse: '收起总览',