You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
…strator regressions
Major chat UX improvements:
- New ThinkingMessageBody component parses <think>/<thinking>/<thought>/
<reasoning>/<reflection> tags from reasoning models (DeepSeek R1, QwQ,
Reflection-70B, etc.) into a collapsible block — auto-expanded while
streaming, auto-collapsed when complete, user-toggleable thereafter.
Empty reasoning blocks render with an "empty" marker so provider
behavior is transparent.
- Rewrite ChatHistory panel: proper truncation/click handling for long
titles (was unclickable due to missing flex min-width:0), hover-revealed
rename/delete actions with Enter/Esc shortcuts, native tooltip on
truncated titles, sentence-case section labels (Today / Previous 7
days / Older), brighter placeholder, slim themed scrollbar, fixed
edit-mode input flashing white.
- Rewrite ModelSelectionModal: card layout with modality icons (LLM/TTS/
STT/Embeddings/Image/Vision), filter pills with live counts, sections
for Local / TEE / Marketplace, status dot, provider count, cleaner
price formatting (range and tabular-nums), TEE badge per row.
Conditional "X of Y" counter only when filtering hides results. Fixed
hooks order crash, layout overflow into chat input, and dim placeholder.
Dropped unreachable bid-selector code.
- Modernize shared modal close button: 12px from corner instead of
25/30,
18px IconX inside 32px button with hover/focus states and proper aria
semantics — applies to every modal.
Orchestrator resume-on-restart fix:
- startAll is now mutex-guarded against concurrent runs.
- After restartService succeeds, the pipeline auto-resumes if downstream
services are still pending — no more "click Restart on failed service,
then click global Retry to continue". resetState now preserves
completed download statuses across resume so the UI doesn't flash
finished bars back to pending.
Proxy-router fix (internal/aiengine/ai_engine.go):
- GetAdapter no longer treats modelID==zero-hash as "missing" when no
session is provided. The local tinyllama model uses the zero hash as
its legitimate identifier; the previous code conflated the two and
tried a session lookup, returning "session not found" for every local
chat with PROXY_STORE_CHAT_CONTEXT enabled. Also fixes a variable-
shadowing bug where the recovered modelID never reached NewHistory.
Dependency hygiene:
- @reach/menu-button (abandoned, React 17 peer) →
@radix-ui/react-dropdown-menu
in ContractActions, Selector, CurrencySelector.
- react-motion (React 16 peer) → framer-motion in toasts.
- ethereumjs-wallet (renamed) → @ethereumjs/wallet with EthereumHDKey
namespace migration and Buffer.from() wrap for the now-Uint8Array
getPrivateKey() return.
- cuid (deprecated, insecure) → @paralleldrive/cuid2.
- universal-analytics removed entirely (Google sunset UA endpoint on
2024-07-01; the analytics module had zero callers anyway).
- @electron-toolkit/preload pinned to ^2.0.0 (3.x imports webUtils which
doesn't exist on Electron 28).
- electron-builder pinned to 26.0.12 to keep @electron/rebuild at 3.7.0
(4.x requires Node ≥22.12; project is on Node 20).
- redux bumped to ^5.0.1 to satisfy react-redux 9.x's peer constraint.
- Added @popperjs/core (bootstrap 5's missing peer).
- Added babel-plugin-styled-components as explicit devDep (referenced
by electron-vite config; was only present via hoisting).
- Switched preload bundle from ESM to CJS (Electron 28's ESM preload
loader had edge cases that broke the renderer with "object null is
not iterable").
- Fixed src/main/src/client/wallet.ts to use ESM imports for
@ethereumjs/wallet (CJS require() in source caused ERR_REQUIRE_ESM
due to transitive ESM-only @noble/curves).
Renderer + main typecheck cleanup (108 → 0 errors):
- Restored missing module paths via shim re-exports (apiGateway.ts,
api.types.ts, orchestrator.types.ts at the locations renderer imports).
- Added Window globals declaration in preload/index.d.ts for
ipcRenderer,
openLink, getAppVersion, copyToClipboard, isDev.
- Moved process.env type augmentation from electron.vite.config.ts into
env.schema.ts so both tsconfigs see it; coerced orchestrator.config.ts
port/url fields accordingly.
- Fixed HOC prop typings (Root, Chat, withChatState, withAgentsState),
state typing in ToastsProvider, custom-prop generics on styled
components in Btn/ProgressBar/RowContainer, styled-components v4 +
React 18 ThemeProvider cast.
- Cleaned unused imports/locals, exported type-level test assertions in
parial-apply.types.ts.
- Narrowed optional config fields in orchestrator.ts (extractPath, env)
with guards instead of non-null assertions.
Misc:
- orchestrator.config.ts: local model apiUrl now includes
/chat/completions
(was just /v1, which caused 404 "File Not Found" from llama-server).
- Updated persisted models-config.json in user-data on the local machine
to match.
<img width="1312" height="912" alt="Screenshot 2026-05-18 at 18 51 50"
src="https://github.com/user-attachments/assets/54a673de-cece-404a-b77d-04d585e6d443"
/>
<img width="1314" height="912" alt="Screenshot 2026-05-18 at 18 51 58"
src="https://github.com/user-attachments/assets/d97ee95f-1512-4217-a5c2-f478635c5ce8"
/>
<img width="1312" height="912" alt="Screenshot 2026-05-18 at 18 47 39"
src="https://github.com/user-attachments/assets/673f0208-1e9d-4659-ab6a-968aa4176478"
/>
0 commit comments