From 5f2d2d83f66292f780fe0fda97130a1ed7335a37 Mon Sep 17 00:00:00 2001 From: Asfmq <2696428814@qq.com> Date: Sat, 27 Jun 2026 09:56:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=A4=A7=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=8C=96=E6=8B=86=E5=88=86=E3=80=81=E8=87=AA?= =?UTF-8?q?=E8=BF=9B=E5=8C=96Skill=E7=AE=A1=E7=BA=BF=E3=80=81=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E8=AE=BE=E8=AE=A1=E7=B3=BB=E7=BB=9F=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端: - runtime: 拆分 AgentConfig/events/duplicate_detector 为独立模块 - error_recovery: 1499行单体拆为 classification(21种FailoverReason)/overflow/mod - executor: 提取 helpers.rs (PreparedCall/ToolExecutionResult/execute_single_tool) - skills: 新增 SkillCreator + SelfImprovePipeline(模式检测→自动生成SKILL.md→质量审查) - clients/llm: 拆分为 chat/embedding/types 三个子模块 - services/download: 1548行拆为 mod/headers(反爬+SSRF)/strategies(多级回退) - services/batch/asset: 1264行拆为 mod/helpers/process 前端: - 设计系统统一: sky/indigo → blueprint 色系, rounded-xl→lg, shadow-lg→sm - 删除 Vite 模板残留 App.css - GlobalDialog/PaperDetailModal/UncachedPaperModal 提取公共 BaseModal 组件 --- dashboard/src/App.css | 184 -- dashboard/src/App.tsx | 2 +- dashboard/src/components/AIAssistantPanel.tsx | 16 +- .../src/components/CitationGalaxyCanvas.tsx | 39 +- dashboard/src/components/CustomSelect.tsx | 10 +- dashboard/src/components/PaperCard.tsx | 117 ++ .../src/components/agent/AgentInputArea.tsx | 22 +- .../src/components/agent/AgentMessageList.tsx | 22 +- .../components/agent/AgentMetricsPanel.tsx | 18 +- .../components/agent/AgentSessionSidebar.tsx | 26 +- .../components/agent/AskUserQuestionCard.tsx | 30 +- .../src/components/agent/AuditLogViewer.tsx | 22 +- .../agent/PermissionRequestCard.tsx | 30 +- .../components/agent/SubAgentContainer.tsx | 6 +- .../src/components/agent/ThoughtCard.tsx | 2 +- .../src/components/agent/ToolCallCard.tsx | 6 +- dashboard/src/components/agent/constants.ts | 12 +- .../src/components/dialogs/BaseModal.tsx | 69 + .../src/components/dialogs/GlobalDialog.tsx | 70 +- .../components/dialogs/PaperDetailModal.tsx | 160 +- .../components/dialogs/UncachedPaperModal.tsx | 99 +- dashboard/src/components/layout/Sidebar.tsx | 14 +- .../src/components/reader/BilingualViewer.tsx | 59 +- .../components/reader/ReaderNotesSidebar.tsx | 6 +- .../src/components/reader/ReaderToolbar.tsx | 6 +- .../src/components/sync/BatchPipelineCard.tsx | 42 +- .../components/sync/BookmarkletToolCard.tsx | 8 +- .../src/components/sync/MetadataSyncCard.tsx | 44 +- dashboard/src/index.css | 103 +- dashboard/src/pages/CitationPanel.tsx | 32 +- dashboard/src/pages/LibraryPanel.tsx | 186 +- dashboard/src/pages/ResearchAgentPanel.tsx | 2 +- dashboard/src/pages/SearchPanel.tsx | 146 +- dashboard/src/pages/SettingsPanel.tsx | 8 +- dashboard/src/pages/SyncPanel.tsx | 14 +- docs/architecture/core-workflows.md | 2 +- src/agent/runtime/config.rs | 93 + src/agent/runtime/duplicate_detector.rs | 27 + src/agent/runtime/error_recovery.rs | 1499 ---------------- .../runtime/error_recovery/classification.rs | 624 +++++++ src/agent/runtime/error_recovery/mod.rs | 726 ++++++++ src/agent/runtime/error_recovery/overflow.rs | 157 ++ src/agent/runtime/events.rs | 83 + src/agent/runtime/executor/helpers.rs | 257 +++ .../runtime/{executor.rs => executor/mod.rs} | 253 +-- src/agent/runtime/mod.rs | 206 +-- src/agent/skills/creator.rs | 262 +++ src/agent/{skills.rs => skills/mod.rs} | 362 +--- src/agent/skills/types.rs | 110 ++ src/clients/{llm.rs => llm/chat.rs} | 402 +---- src/clients/llm/embedding.rs | 196 +++ src/clients/llm/mod.rs | 17 + src/clients/llm/types.rs | 210 +++ src/services/batch/asset.rs | 1264 -------------- src/services/batch/asset/helpers.rs | 238 +++ src/services/batch/asset/mod.rs | 464 +++++ src/services/batch/asset/process.rs | 645 +++++++ src/services/download.rs | 1548 ----------------- src/services/download/headers.rs | 337 ++++ src/services/download/mod.rs | 716 ++++++++ src/services/download/strategies.rs | 556 ++++++ src/services/translation.rs | 6 +- 62 files changed, 6584 insertions(+), 6308 deletions(-) delete mode 100644 dashboard/src/App.css create mode 100644 dashboard/src/components/PaperCard.tsx create mode 100644 dashboard/src/components/dialogs/BaseModal.tsx create mode 100644 src/agent/runtime/config.rs create mode 100644 src/agent/runtime/duplicate_detector.rs delete mode 100644 src/agent/runtime/error_recovery.rs create mode 100644 src/agent/runtime/error_recovery/classification.rs create mode 100644 src/agent/runtime/error_recovery/mod.rs create mode 100644 src/agent/runtime/error_recovery/overflow.rs create mode 100644 src/agent/runtime/events.rs create mode 100644 src/agent/runtime/executor/helpers.rs rename src/agent/runtime/{executor.rs => executor/mod.rs} (80%) create mode 100644 src/agent/skills/creator.rs rename src/agent/{skills.rs => skills/mod.rs} (70%) create mode 100644 src/agent/skills/types.rs rename src/clients/{llm.rs => llm/chat.rs} (71%) create mode 100644 src/clients/llm/embedding.rs create mode 100644 src/clients/llm/mod.rs create mode 100644 src/clients/llm/types.rs delete mode 100644 src/services/batch/asset.rs create mode 100644 src/services/batch/asset/helpers.rs create mode 100644 src/services/batch/asset/mod.rs create mode 100644 src/services/batch/asset/process.rs delete mode 100644 src/services/download.rs create mode 100644 src/services/download/headers.rs create mode 100644 src/services/download/mod.rs create mode 100644 src/services/download/strategies.rs diff --git a/dashboard/src/App.css b/dashboard/src/App.css deleted file mode 100644 index f90339d..0000000 --- a/dashboard/src/App.css +++ /dev/null @@ -1,184 +0,0 @@ -.counter { - font-size: 16px; - padding: 5px 10px; - border-radius: 5px; - color: var(--accent); - background: var(--accent-bg); - border: 2px solid transparent; - transition: border-color 0.3s; - margin-bottom: 24px; - - &:hover { - border-color: var(--accent-border); - } - &:focus-visible { - outline: 2px solid var(--accent); - outline-offset: 2px; - } -} - -.hero { - position: relative; - - .base, - .framework, - .vite { - inset-inline: 0; - margin: 0 auto; - } - - .base { - width: 170px; - position: relative; - z-index: 0; - } - - .framework, - .vite { - position: absolute; - } - - .framework { - z-index: 1; - top: 34px; - height: 28px; - transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) - scale(1.4); - } - - .vite { - z-index: 0; - top: 107px; - height: 26px; - width: auto; - transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) - scale(0.8); - } -} - -#center { - display: flex; - flex-direction: column; - gap: 25px; - place-content: center; - place-items: center; - flex-grow: 1; - - @media (max-width: 1024px) { - padding: 32px 20px 24px; - gap: 18px; - } -} - -#next-steps { - display: flex; - border-top: 1px solid var(--border); - text-align: left; - - & > div { - flex: 1 1 0; - padding: 32px; - @media (max-width: 1024px) { - padding: 24px 20px; - } - } - - .icon { - margin-bottom: 16px; - width: 22px; - height: 22px; - } - - @media (max-width: 1024px) { - flex-direction: column; - text-align: center; - } -} - -#docs { - border-right: 1px solid var(--border); - - @media (max-width: 1024px) { - border-right: none; - border-bottom: 1px solid var(--border); - } -} - -#next-steps ul { - list-style: none; - padding: 0; - display: flex; - gap: 8px; - margin: 32px 0 0; - - .logo { - height: 18px; - } - - a { - color: var(--text-h); - font-size: 16px; - border-radius: 6px; - background: var(--social-bg); - display: flex; - padding: 6px 12px; - align-items: center; - gap: 8px; - text-decoration: none; - transition: box-shadow 0.3s; - - &:hover { - box-shadow: var(--shadow); - } - .button-icon { - height: 18px; - width: 18px; - } - } - - @media (max-width: 1024px) { - margin-top: 20px; - flex-wrap: wrap; - justify-content: center; - - li { - flex: 1 1 calc(50% - 8px); - } - - a { - width: 100%; - justify-content: center; - box-sizing: border-box; - } - } -} - -#spacer { - height: 88px; - border-top: 1px solid var(--border); - @media (max-width: 1024px) { - height: 48px; - } -} - -.ticks { - position: relative; - width: 100%; - - &::before, - &::after { - content: ''; - position: absolute; - top: -4.5px; - border: 5px solid transparent; - } - - &::before { - left: 0; - border-left-color: var(--border); - } - &::after { - right: 0; - border-right-color: var(--border); - } -} diff --git a/dashboard/src/App.tsx b/dashboard/src/App.tsx index 6d32b1f..41849e0 100644 --- a/dashboard/src/App.tsx +++ b/dashboard/src/App.tsx @@ -244,7 +244,7 @@ export default function App() {
-
+
diff --git a/dashboard/src/components/AIAssistantPanel.tsx b/dashboard/src/components/AIAssistantPanel.tsx index 3e6dea6..736fd82 100644 --- a/dashboard/src/components/AIAssistantPanel.tsx +++ b/dashboard/src/components/AIAssistantPanel.tsx @@ -315,7 +315,7 @@ export function AIAssistantPanel({ @@ -333,10 +333,10 @@ export function AIAssistantPanel({ {msg.sender === 'user' ? '我' : '天文科研助手'}
{msg.sender === 'user' ? ( @@ -354,9 +354,9 @@ export function AIAssistantPanel({
{/* 时间线条目(思考/工具调用/子代理容器)*/} {msg.timeline.length > 0 && ( -
-
- +
+
+ 推理与工具链 ({msg.timeline.length} 项)
@@ -442,7 +442,7 @@ export function AIAssistantPanel({ }} className="absolute bottom-0 left-0 right-0 p-3 bg-transparent pointer-events-none shrink-0" > -
+