52 Commits
Author SHA1 Message Date
lyx 3e1b516f0f fix(desktop): expose tauriInvoke for model config export
exportMykeyToDir runs outside the bridge IIFE; call via window.ga.tauriInvoke.
2026-06-19 23:47:08 +08:00
lyx d61820e539 fix(desktop): export model config in WebView2 exe
Bump app.js cache bust; use Tauri save dialog in exe; rename import/export
toasts to 模型配置已导入/已导出.
2026-06-19 23:36:26 +08:00
lyx f1eab86ac6 feat(desktop): export model config from settings (frontend-only)
Add export button that writes mykey.py via directory picker or download;
rename import label to clarify it imports model config (mykey.py).
2026-06-19 23:06:28 +08:00
lyx 11dc64a7c2 fix(desktop): invalidate mykey cache on import save
Import mykey via POST /services/mykey now uses _save_mykey_text so stale
LLM profiles are dropped from the model list after replacing mykey.py.
2026-06-19 22:55:59 +08:00
lyx d4560ea7bf feat(desktop): settings features, bridge panel fixes, align startup with test
Add settings "Features" section with mykey import and service manager entry.
Split spawnBridge (panel) from test-style startBridge boot; fix bridge-exit
UI race; restore takeover_stale_bridge on launch; allow Tauri IPC for
start_bridge from remote bridge UI.
2026-06-19 22:37:24 +08:00
LLYYXX 333476c4e5 1. 设置页模型配置下面新增“后台服务管理”按钮,点击后关闭设置弹窗并跳到 后台服务 -> 状态面板
2. 状态面板里 Bridge / Conductor / Scheduler 支持启动和退出
2026-06-19 21:46:12 +08:00
lyx 35763b2cd1 fix(desktop): align app.js cache bust with test after merge 2026-06-19 03:02:18 +08:00
lyx a8ddad6a8a Merge remote-tracking branch 'origin/test' into fix/service-process-lifecycle 2026-06-19 02:59:26 +08:00
lyx b3344e6b3b fix(desktop): restore loading-page alert for port-busy flow
Replace native MessageBox with browser alert during prepare, re-check
extras ports before start-extras, and verify bridge is listening before
navigate to avoid connection refused after clearing occupied ports.
2026-06-19 02:05:28 +08:00
lyx d20f36b349 Merge remote-tracking branch 'origin/test' into fix/service-process-lifecycle 2026-06-19 01:53:41 +08:00
lyx e4778d1fc2 fix(desktop): block on port-busy MessageBox until extras ports clear
Replace non-blocking webview alert with a native MessageBox loop that
re-scans conductor/scheduler ports after each OK before start-extras.
2026-06-19 01:33:05 +08:00
lyx a149f2045c feat(desktop): auto start/stop conductor and scheduler
Keep test #13 bridge behavior; add start-extras/stop-extras endpoints and
wire desktop open/close to them. Show a native alert when conductor or
scheduler ports are already in use.
2026-06-19 00:45:47 +08:00
lyx 41fb615162 fix(desktop): avoid run_on_main_thread in setup; restore test UI calls
Port-busy during setup() now navigates synchronously on the main window
(fixes flash-quit). Worker-thread UI matches test branch direct navigate/eval.
2026-06-19 00:25:20 +08:00
lyx 893316f7dc fix(desktop): dispatch UI on main thread via app.clone().run_on_main_thread
Windows WebView2 ignores navigate/eval from the startup worker thread while
bridge/conductor may already be listening. Use a compile-safe dispatch helper;
handle port_busy on setup thread; log to ga-startup.log beside the exe.
2026-06-19 00:09:30 +08:00
lyx bc8a7d73be fix(desktop): revert run_on_main_thread UI dispatch (restore buildable lib.rs)
Direct WebView navigate/show/eval as before; keep lifecycle no-reuse and
port_busy checks from 79089d7 plus sanitize_bundle_env from test merge.
2026-06-18 23:57:16 +08:00
lyx 80417e49a0 fix(desktop): use separate AppHandle clone inside main-thread closures
run_on_main_thread borrows the receiver; pass app_in into the move closure.
2026-06-18 23:56:00 +08:00
lyx af74adfd6b fix(desktop): clone AppHandle before run_on_main_thread closures
Fix E0505 borrow errors in show_port_busy, open_bridge_ui, and setup fallback.
2026-06-18 23:52:47 +08:00
lyx eccfb6daf9 Merge branch 'test' into fix/service-process-lifecycle
Keep lifecycle no-reuse/port_busy behavior; take test's sanitize_bundle_env
for AppImage-injected PYTHONHOME/PYTHONPATH/LD_LIBRARY_PATH.
2026-06-18 23:42:17 +08:00
lyx ec20c53928 fix(desktop): lifecycle without bridge reuse; show port_busy reliably
Revert over-layered spawn/port UI changes. Keep single-instance no-reuse:
only navigate when this process spawned bridge; on occupied 14168/8900 show
port_busy via main thread. Re-check ports after first-run prepare.
2026-06-18 23:38:07 +08:00
lyx 7311acd345 fix(desktop): dispatch WebView UI updates on main thread (Windows)
Background-thread eval/navigate/show silently failed on WebView2, leaving
users stuck on loading.html. Route progress, port_busy, bridge navigation,
and error feedback through run_on_main_thread; show indeterminate bar on load.
2026-06-18 23:31:51 +08:00
lyx 1b59c3e665 fix(desktop): show port_busy when bridge spawn fails on occupied ports
Re-check 14168/8900 before and after spawn, detect immediate child exit,
and route wait timeouts to port_busy.html instead of hanging on loading.
2026-06-18 23:13:21 +08:00
lyx 6bb121a37f Merge branch 'test' into fix/service-process-lifecycle 2026-06-18 22:03:14 +08:00
lyx 74e709d99e fix(desktop): 单实例服务生命周期 — 端口占用拒绝启动与退出清理
- bridge 退出时 stop_all_extras(conductor/scheduler),支持 POST /shutdown
- 启动前检查 14168/8900/45762,占用则失败;不复用已有 bridge
- Tauri:端口占用显示 port_busy.html;关窗时优雅关停本次 spawn 的 bridge
- 合并 test 分支打包/首启逻辑,去除 bridge 复用路径
2026-06-18 22:03:14 +08:00
lyx 0193f9129e 适配流式渲染 2026-06-08 22:51:47 +08:00
lyx 933850dde7 Merge remote-tracking branch 'origin/main' into feat/desktop-ui 2026-06-07 16:48:40 +08:00
lyx 887627a39d style(desktop): Conductor 分工进度抽屉更紧凑
去掉标题/统计区分割线,缩小计数徽标与任务卡片,统一圆角与上下留白。
2026-06-06 23:54:19 +08:00
lyx 96c9496188 fix(desktop): 轮次标题单行显示,避免窄栏折行
fold-turn summary 与 turn-summary 加 nowrap,副标题过长 ellipsis。
2026-06-06 22:18:46 +08:00
lyx 3ca2cf6248 fix(desktop): 流式结束后 tool call 不再被 openIdx 误保持展开
rewriteDraftBubble 跨帧恢复 details 时跳过 fold-tool-live,仅保留用户手动展开的折叠。
2026-06-06 21:57:47 +08:00
lyx 7d0f0048cb fix(desktop): hydrate 用 limit=0 拉全量历史
避免与 bridge 尾部截断语义冲突导致超过 200 条会话缺开头消息;抽取 fetchSessionPoll 复用 poll 逻辑。
2026-06-06 20:07:55 +08:00
lyx 4f0762df00 fix(desktop): 会话 loading 与 hydrate 生命周期分离
切会话先清遮罩;hydrate 首拍拉历史后即关 loading,running 交后台 poll;10s 超时兜底。
2026-06-06 20:07:28 +08:00
lyx 66798b586f Merge branch 'main' into feat/desktop-ui
保留桌面 UI 分支的静态资源版本号(styles v127 / app v162)。
2026-06-06 19:18:44 +08:00
lyx a8da958d34 feat(desktop): 统一聊天与 Conductor 对话布局并复用 composer
引入 page--chat-ui 共用壳层与 bindComposerInRoot;Conductor 提示词气泡独立于输入框;修正侧栏拖拽热区对齐缝隙。
2026-06-05 02:37:22 +08:00
lyx 598a869cb3 feat(desktop): 三栏布局对齐与会话加载态
统一顶栏/侧栏/右栏行高与间距,聊天区与输入框分框留白并同宽;切换会话 hydrate 时显示加载提示;历史列表隐藏滚动条且与「新对话」间距一致。
2026-06-05 02:21:12 +08:00
lyx 8f88506e9a 优化plan card视觉 2026-06-05 01:46:27 +08:00
lyx 9f59cf9537 fix(desktop): Plan 完成态立即用最新 items 刷新卡片 2026-06-05 01:05:18 +08:00
lyx 1b88a2eac3 fix(desktop): Plan 按会话绑定 plan_path,修复完成态与跨会话串扰 2026-06-05 00:59:56 +08:00
lyx 6942c8bdbd fix(desktop): Plan 条稳定显示,对齐 TUI grace 与按会话 cwd 解析 2026-06-05 00:48:34 +08:00
lyx 6b77d8a5e0 fix(desktop): Plan 与 TUI 对齐,按会话绑定且不因预设文案误激活 2026-06-05 00:22:18 +08:00
lyx 1ccff5d406 fix: 合并后以远程流式为准,修复自动合并损坏并接 composer DOM 2026-06-05 00:10:59 +08:00
lyx 8c92ec11a8 merge: 冲突以远程为准,试远程打字机自适应 2026-06-05 00:09:32 +08:00
lyx 8aab1fa49f 1. 聊天框和Conductor对齐
2. 尝试修复聊天渲染卡顿问题
2026-06-05 00:01:31 +08:00
lyx 03979feda3 feat(desktop): Conductor 呼吸灯与进度 rail/drawer 状态优化
顶栏/Conductor 运行态改为绿色呼吸灯(含 connecting/offline 分态);
进度侧栏 rail 增加失败计数徽章,卡片与统计区统一使用呼吸标记。
2026-06-04 19:58:09 +08:00
lyx c62bcc5f9d feat(desktop): Plan 模式 todo 卡片初版
poll 响应附带 plan 事实数据(plan_state + bridge 两行接入),composer 上方渲染进度与任务行;完成/读空 grace 在前端处理。plan_state 原 API 与 TUI 完全兼容,Desktop 仅新增 *_for_desktop 辅助函数。
2026-06-04 15:14:00 +08:00
lyx 975fc43e42 流式未收口的工具块先折进「输出中」折叠不再乱闪,并修稳工具假围栏误截、工具结果误拆成多个空折叠、刷新重播打字机、滚代码块弹回和难点展开。 2026-06-04 14:29:49 +08:00
lyx 9e131377fc style(desktop): lighten dark appearance one step on GitHub Primer scale
Shift existing dark palette tokens up one tier for less harsh contrast while keeping the same color system; sync settings preview swatches and accent-on colors.
2026-06-04 13:00:22 +08:00
lyx a6f3e9c7e9 Conductor美化
Conductor 页 UI 重构:对齐主聊天布局,复用消息/composer 样式,独立 cdb-composer 与 progress rail/drawer。
2026-05-30 19:09:37 +08:00
lyx 4f61ea347e 实现Conductor页前端 2026-05-27 07:27:53 +08:00
lyxanddd3xp 1a54f1788a feat(desktop): chat font-size control + dark-mode Markdown readability (#9)
Settings gains a 10–20px chat font stepper (default 14, slider with aria),
applied only to chat bubbles + composer via --chat-font; pre/code/fold switch
to em-relative sizing so they scale with it. Dark mode swaps highlight.js to
the github-dark theme and adds link/code/pre/katex/table/blockquote styling so
markdown is legible on dark backgrounds.

Persistence rides the same ui-prefs mechanism as #7 (ui.fontSize in
~/.ga_desktop_settings.json via /config), so this PR supersedes #7 — it
contains the full server-first persistence layer (bootUiFromDom / persistUiPrefs
/ syncBootCache) plus fontSize. Keeps #5's interrupt-on-resend behavior intact.

Closes #9

Co-Authored-By: dd3xp <zhangjingming131@gmail.com>
2026-05-23 19:03:52 +08:00
lyxanddd3xp 4bbfbd11ad fix(desktop): interrupt running turn on resend, lock composer + loading hint (#5)
Sending while a reply is still streaming now cancels the in-flight turn,
waits for the session to go idle, then submits the new prompt — instead of
silently dropping the new message. During the interrupt the composer is
locked, a sticky loading hint shows in the chat area, and the typed text +
pending attachments are preserved. Reuses the bridge cancel -> stopped-message
path so the interrupted turn's partial output is kept.

- interruptBeforeSend(): cancel + waitSessionIdle + min loading duration
- removeUsedPendingFiles(): only clear attachments actually consumed by send
- showChanToast gains an 'info' kind
- submitInput async + _submitInFlight guard; setComposerLocked / setMsgLoading

Closes #5

Co-Authored-By: dd3xp <zhangjingming131@gmail.com>
2026-05-23 17:25:01 +08:00
lyx 1a83c28ccf refactor: 压缩 bridge 与主题 CSS 行数
合并 mykey 块改写 helper,--blue 改由 JS 设置,去掉重复 CSS 映射规则。
2026-05-21 03:29:37 +08:00
lyx 562b47f3b6 feat(desktop): 复杂主题色与外观调整
浅/深外观、素色模式、8 色色盘、语言列表 UI 与设置表单样式优化。
2026-05-21 03:29:37 +08:00
lyx 852ab63d43 feat(desktop): 设置页 — 弹窗与模型 CRUD
设置弹窗、模型列表增删改、表单必填/选填提示;bridge 提供 model-profiles CRUD 与 llmNo 传递。
2026-05-21 03:29:37 +08:00