| feat(ui): rewrite ui/ with EdgeClaw-derived front-end and pilotdeck bridge backend
Replaces the 4-file Vite demo (gateway-browser-client, main.tsx,
styles.css, vite.config.ts) with the full EdgeClaw-derived UI plus an
Express bridge that talks to src/gateway through pilotdeck-bridge.js,
unblocking dev-mode HMR and parity testing while the migration to the
gateway-only architecture (docs/old-ui-adaptation/04-implementation-plan)
is in flight.
- ui/server: Express bridge serving /api/* and /ws, providers / agent /
git / mcp / memory / projects / sessions routes, cron + always-on
daemon plumbing, vapid push, plugin process manager.
- ui/src: React 18 app — chat-v2 UI, app-shell, code editor, files,
git, mcp, memory, projects, settings, skills, tasks, terminals,
i18n, contexts, hooks, stores, etc.
- ui/src/stores/useSessionStore.ts: session-keyed message store with a
same-turn streaming dedup guard — fixes a bug where a NEW turn's
__streaming_<sid> message would splice out the PREVIOUS turn's
legitimate assistant tail in computeMerged, dropping the prior
assistant reply and reordering the new user message after the new
streaming row.
- ui/public: PWA manifest, icons, screenshots, service worker.
- Build/lint/typecheck config: vite.config.js (with /api /ws /shell
proxy + manualChunks split), tailwind, postcss, eslint, tsconfig,
.nvmrc (v22), node-pty postinstall fixup.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| fix(ui): jump to the newly created project after closing the wizard
ProjectCreationWizard already returned the freshly created project to
its onProjectCreated callback, but handleProjectCreated in
AppShellV2 ignored it — only refreshing the sidebar list and closing
the wizard. The active selection stayed on whatever project was
previously focused (typically the default "general"), so any prompt
typed straight after creation went to the wrong project.
Pick up the project from the callback and reuse the existing
new-session path (handleNewSession + navigate(/p/<name>) + chat
tab) so closing the wizard lands the user on the new project's empty
conversation screen. Same handler covers both POST /create-workspace
and the GitHub clone SSE flow, which both hand back a `{ name,
displayName, fullPath, path }` payload matching the sidebar entries.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 13 天前 |
| fix(ui): tighten header and composer controls
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| fix(ui): prevent IME enter from submitting inputs
| 6 天前 |