From 0ce060693bd2c70f6ed2c41d64e7e43c2b2c6c1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=87=AF?= Date: Wed, 19 Aug 2026 20:37:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=9A=E5=95=86=E9=93=BE=E6=9D=A1?= =?UTF-8?q?=E5=90=AF=E5=81=9C=E4=B8=8E=E6=B7=B1=E5=BA=A6=E7=A0=94=E7=A9=B6?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E7=BB=93=E6=9E=84=EF=BC=8C=E5=B9=B6=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E9=97=AE=E7=AD=94=E5=B1=95=E7=A4=BA=E4=B8=8E=208BF=20?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- frontend-web/public/runtime-config.js | 2 +- .../src/components/ai-elements/reasoning.tsx | 8 +- .../workspace/agents/agent-detail-panel.tsx | 38 + .../workspace/messages/message-list-item.tsx | 606 +-- .../workspace/workspace-nav-menu.tsx | 11 + frontend-web/src/core/agents/types.ts | 22 +- .../skill-display/inline-citations.test.ts | 11 + .../src/core/skill-display/runtime.ts | 4 + .../components/EightBfStep1Workspace.tsx | 32 +- .../eightbf-roundtable/lib/parent-return.ts | 128 + .../pages/EightBfRoundtablePage.tsx | 2 + frontend-web/src/pages/ChatPage.tsx | 4 +- frontend-web/src/pages/MenuManagementPage.tsx | 51 +- .../deep-research/DeepResearchWorkbench.tsx | 26 +- .../pages/deep-research/ReportConfigCard.tsx | 7 + .../deep-research/WorkflowConfigDialog.tsx | 549 +++ .../components/PositionBusinessChainFlow.tsx | 18 +- .../src/position-roundtable/lib/positions.ts | 28 + .../src/roundtable-planning/api/chains.ts | 28 +- .../components/BusinessChainListDialog.tsx | 198 +- .../components/BusinessChainPicker.tsx | 3 +- .../roundtable-planning/lib/business-chain.ts | 10 + .../pages/RoundtablePlanningPage.tsx | 4 +- .../api/report-structures.ts | 180 + offline-backend-20260512/backend/CLAUDE.md | 10 + .../backend/app/gateway/app.py | 3352 +++++++++-------- .../backend/app/gateway/deps.py | 1608 ++++---- .../backend/app/gateway/routers/agents.py | 203 +- .../app/gateway/routers/report_structures.py | 168 + .../app/gateway/routers/roundtable_chains.py | 9 +- .../harness/deerflow/config/agents_config.py | 35 +- .../versions/20260819_02_chain_enabled.py | 51 + .../persistence/report_structures/__init__.py | 22 + .../persistence/report_structures/base.py | 64 + .../persistence/report_structures/defaults.py | 269 ++ .../persistence/report_structures/memory.py | 66 + .../persistence/report_structures/model.py | 45 + .../persistence/report_structures/sql.py | 108 + .../persistence/roundtable_chains/model.py | 6 + .../persistence/roundtable_chains/sql.py | 6 + .../scripts/sql/column_additions_mysql.sql | 8 +- .../backend/tests/test_agents_backend.py | 567 +-- 42 files changed, 5320 insertions(+), 3247 deletions(-) create mode 100644 frontend-web/src/eightbf-roundtable/lib/parent-return.ts create mode 100644 frontend-web/src/pages/deep-research/WorkflowConfigDialog.tsx create mode 100644 frontend-web/src/strategy-components/api/report-structures.ts create mode 100644 offline-backend-20260512/backend/app/gateway/routers/report_structures.py create mode 100644 offline-backend-20260512/backend/packages/harness/deerflow/persistence/migrations/versions/20260819_02_chain_enabled.py create mode 100644 offline-backend-20260512/backend/packages/harness/deerflow/persistence/report_structures/__init__.py create mode 100644 offline-backend-20260512/backend/packages/harness/deerflow/persistence/report_structures/base.py create mode 100644 offline-backend-20260512/backend/packages/harness/deerflow/persistence/report_structures/defaults.py create mode 100644 offline-backend-20260512/backend/packages/harness/deerflow/persistence/report_structures/memory.py create mode 100644 offline-backend-20260512/backend/packages/harness/deerflow/persistence/report_structures/model.py create mode 100644 offline-backend-20260512/backend/packages/harness/deerflow/persistence/report_structures/sql.py diff --git a/frontend-web/public/runtime-config.js b/frontend-web/public/runtime-config.js index 05e3fe6d..24cc025a 100644 --- a/frontend-web/public/runtime-config.js +++ b/frontend-web/public/runtime-config.js @@ -52,7 +52,7 @@ window.__CM_RUNTIME_CONFIG__ = { // 8BF 嵌入页专用任务系统接口。部署到其他系统时只需修改这一项, // 不影响原多智能体会商使用的任务详情接口。 - VITE_8BF_TASK_API_BASE_URL: "https://ch1.b.sit.4.cn/zl_consumer", + VITE_8BF_TASK_API_BASE_URL: "https://ch1.b.uat.4.cn/zl_consumer", // 8BF 会商页右上角「返回」按钮的跳转地址(当前窗口 window.location.href)。 // 部署后直接改 dist/runtime-config.js 即可,无需重新打包。留空则点击时提示未配置。 diff --git a/frontend-web/src/components/ai-elements/reasoning.tsx b/frontend-web/src/components/ai-elements/reasoning.tsx index 2845edf6..d9c63e2a 100644 --- a/frontend-web/src/components/ai-elements/reasoning.tsx +++ b/frontend-web/src/components/ai-elements/reasoning.tsx @@ -165,7 +165,7 @@ export const ReasoningTrigger = memo( export type ReasoningContentProps = ComponentProps< typeof CollapsibleContent > & { - children: string; + children: ReactNode; }; export const ReasoningContent = memo( @@ -178,7 +178,11 @@ export const ReasoningContent = memo( )} {...props} > - {children} + {typeof children === "string" ? ( + {children} + ) : ( + children + )} ), ); diff --git a/frontend-web/src/components/workspace/agents/agent-detail-panel.tsx b/frontend-web/src/components/workspace/agents/agent-detail-panel.tsx index a09653aa..c2c12ef1 100644 --- a/frontend-web/src/components/workspace/agents/agent-detail-panel.tsx +++ b/frontend-web/src/components/workspace/agents/agent-detail-panel.tsx @@ -2,6 +2,7 @@ import { BotIcon, + BriefcaseBusinessIcon, CheckIcon, DatabaseIcon, GlobeIcon, @@ -83,6 +84,7 @@ interface AgentDraft { /** 会商席位「技能识别强化」开关。 */ seatSkillDirective: boolean; knowledgeBaseIds: string[]; + jobResponsibilities: string; } function draftFromAgent(agent: Agent): AgentDraft { @@ -97,6 +99,7 @@ function draftFromAgent(agent: Agent): AgentDraft { templateName: agent.template_name ?? "", seatSkillDirective: agent.seat_skill_directive ?? false, knowledgeBaseIds: agent.llmwiki_knowledge_base_ids ?? [], + jobResponsibilities: agent.job_responsibilities ?? "", }; } @@ -338,6 +341,8 @@ export function AgentDetailPanel({ request.template_name = draft.templateName.trim(); if (draft.seatSkillDirective !== (agent.seat_skill_directive ?? false)) request.seat_skill_directive = draft.seatSkillDirective; + if (draft.jobResponsibilities.trim() !== (agent.job_responsibilities ?? "")) + request.job_responsibilities = draft.jobResponsibilities.trim(); if ( JSON.stringify(draft.knowledgeBaseIds) !== JSON.stringify(agent.llmwiki_knowledge_base_ids ?? []) @@ -720,6 +725,39 @@ export function AgentDetailPanel({ + {/* ── 岗位职责 ───────────────────────────────────────────────────── */} +
} + title="岗位职责" + > + {editing && draft ? ( +