From 2291f603809434bb46b0714b952f7f2463fdb3cf Mon Sep 17 00:00:00 2001 From: Blizzard Date: Thu, 11 Jun 2026 16:56:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(desktop):=20=E6=B7=B1=E8=89=B2=20AI=20?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E8=A7=86=E8=A7=89=E6=94=B9=E9=80=A0?= =?UTF-8?q?=20+=20=E5=B7=A5=E4=BD=9C=E5=8F=B0=E4=BB=AA=E8=A1=A8=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 桌面端从扁平 dev 工具风改为深色高端 AI 控制台:分层表面 + 紫青强调 + 微光 + 首页仪表盘,提升第一印象与吸引力。 - 设计 tokens: tailwind ink 分层调色板 + glow/card 阴影; index.css 深色基底 + 品牌渐变 + 深色滚动条 - shell: TopBar(品牌渐变+毛玻璃+发光健康灯) / LeftNav(激活态紫色高亮+左光条) / BottomDrawer(深色+状态色) - 新 views/Home 工作台仪表盘: 渐变 hero + 4 状态卡 + 3 能力卡 + 快速开始(默认首页) - 画布: TypedNode 深色节点卡; StudioView ReactFlow colorMode=dark + 深色工具栏/面板/ MiniMap; Inspector 深色表单 - KbView/MemoryView/MemoryPanel/Placeholder 全深色化; 进度条改紫青渐变 - 纯前端改造, npm build✓; 浏览器验证: 仪表盘 + 编排画布深色呈现 Co-Authored-By: Claude Opus 4.8 --- go.work | 1 + go.work.sum | 11 ++- sundynix-desktop/frontend/src/App.tsx | 16 ++- sundynix-desktop/frontend/src/index.css | 42 ++++++++ .../frontend/src/panels/MemoryPanel.tsx | 27 ++--- .../frontend/src/shell/BottomDrawer.tsx | 57 ++++------- .../frontend/src/shell/LeftNav.tsx | 26 +++-- .../frontend/src/shell/TopBar.tsx | 31 +++--- .../frontend/src/studio/Inspector.tsx | 48 ++++----- .../frontend/src/studio/StudioView.tsx | 31 +++--- .../frontend/src/studio/TypedNode.tsx | 12 +-- sundynix-desktop/frontend/src/views/Home.tsx | 75 ++++++++++++++ .../frontend/src/views/KbView.tsx | 98 +++++++++---------- .../frontend/src/views/MemoryView.tsx | 6 +- .../frontend/src/views/Placeholder.tsx | 14 ++- sundynix-desktop/frontend/tailwind.config.js | 22 ++++- sundynix-desktop/go.mod | 7 +- sundynix-desktop/go.sum | 10 +- 18 files changed, 327 insertions(+), 207 deletions(-) create mode 100644 sundynix-desktop/frontend/src/views/Home.tsx diff --git a/go.work b/go.work index b9c7c2f..a373af9 100644 --- a/go.work +++ b/go.work @@ -5,4 +5,5 @@ use ( ./sundynix-gateway ./sundynix-mcp-go ./sundynix-shared + ./sundynix-desktop ) diff --git a/go.work.sum b/go.work.sum index d5df2af..33755a0 100644 --- a/go.work.sum +++ b/go.work.sum @@ -22,7 +22,6 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/knz/go-libedit v1.10.1 h1:0pHpWtx9vcvC0xGZqEQlQdfSQs7WRlAjuPvk3fOZDCo= github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= -github.com/neo4j/neo4j-go-driver/v5 v5.24.0 h1:7MAFoB7L6f9heQUo/tJ5EnrrpVzm9ZBHgH8ew03h6Eo= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= @@ -34,25 +33,35 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2 h1:IRJeR9r1pYWsHKTRe/IInb7lYvbBVIqOgsX/u0mbOWY= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= +golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= nullprogram.com/x/optparse v1.0.0 h1:xGFgVi5ZaWOnYdac2foDT3vg0ZZC9ErXFV57mr4OHrI= rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= diff --git a/sundynix-desktop/frontend/src/App.tsx b/sundynix-desktop/frontend/src/App.tsx index d2192da..0293d79 100644 --- a/sundynix-desktop/frontend/src/App.tsx +++ b/sundynix-desktop/frontend/src/App.tsx @@ -6,6 +6,7 @@ import { BottomDrawer } from "./shell/BottomDrawer"; import { StudioView } from "./studio/StudioView"; import { MemoryView } from "./views/MemoryView"; import { KbView } from "./views/KbView"; +import { Home } from "./views/Home"; import { Placeholder } from "./views/Placeholder"; import { submitTask, streamTokens, type Identity } from "./lib/api"; import type { TaskDsl } from "./lib/dsl"; @@ -21,7 +22,7 @@ const PLACEHOLDERS: Partial> = }; export default function App() { - const [view, setView] = useState("studio"); + const [view, setView] = useState("home"); const [identity, setIdentity] = useState({ userId: "wt", sessionId: "sess-ui" }); const [run, setRun] = useState(emptyRun); const closeRef = useRef<(() => void) | null>(null); @@ -64,12 +65,19 @@ export default function App() { ); return ( -
+
+ {/* 顶部柔光,增加纵深 */} +
-
+
- {view === "studio" ? ( + {view === "home" ? ( + + ) : view === "studio" ? ( ) : view === "kb" ? ( diff --git a/sundynix-desktop/frontend/src/index.css b/sundynix-desktop/frontend/src/index.css index ad8a360..d8407d3 100644 --- a/sundynix-desktop/frontend/src/index.css +++ b/sundynix-desktop/frontend/src/index.css @@ -8,3 +8,45 @@ body, height: 100%; margin: 0; } + +body { + background: #0b0d12; + color: #cbd2de; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +/* 深色滚动条 */ +::-webkit-scrollbar { + width: 10px; + height: 10px; +} +::-webkit-scrollbar-thumb { + background: #242b3c; + border-radius: 8px; + border: 2px solid transparent; + background-clip: padding-box; +} +::-webkit-scrollbar-thumb:hover { + background: #323a4f; + background-clip: padding-box; +} +::-webkit-scrollbar-track { + background: transparent; +} + +/* 紫→青品牌渐变文字 */ +.brand-gradient { + background: linear-gradient(90deg, #a78bfa, #22d3ee); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + color: transparent; +} + +/* 输入控件深色统一 */ +input, +textarea, +select { + color-scheme: dark; +} diff --git a/sundynix-desktop/frontend/src/panels/MemoryPanel.tsx b/sundynix-desktop/frontend/src/panels/MemoryPanel.tsx index 8d2e433..2ccb3cb 100644 --- a/sundynix-desktop/frontend/src/panels/MemoryPanel.tsx +++ b/sundynix-desktop/frontend/src/panels/MemoryPanel.tsx @@ -19,32 +19,23 @@ export function MemoryPanel({ identity }: { identity: Identity }) { } }; + const inputCls = "rounded-md border border-line bg-ink-800 px-2 py-1 text-sm text-slate-200 focus:border-violet-500/60 focus:outline-none"; return ( -
-

偏好记忆(让模型知道是我)

+
+

偏好记忆(让模型知道是我)

- setKey(e.target.value)} - placeholder="键,如 称呼 / 回答偏好" - /> -