| fix(ui): prevent IME enter from submitting inputs
| 6 天前 |
| chore: scrub stale claudecodeui/claude-code-main residuals
Remove legacy brand leftovers from the pre-PilotDeck era so the repo
stops mentioning unrelated upstream projects and stops carrying parity
fixtures that point at a third-party tree no longer present.
- Drop src/context/memory/edgeclaw-memory-core/README.md (old CloudCLI
install guide that referenced a claude-code-main/ sibling dir).
- Delete tests + fixtures whose only purpose was to assert byte-for-byte
parity against third-party/claude-code-main/** (legacy-behavior tool
scenarios, dual-parity legacy context scenarios, the parity test
helper, and the six parity-* tests that consumed them).
- Rewrite stale code comments in apps/desktop, src/context/compaction,
src/agent/sub, src/context/memory/.../app.css and PermissionsSettingsTab
to drop dangling third-party/claude-code-main/... mirror references
and rename claudecodeui -> PilotDeck ui/server / ui shell.
- Repoint the auth-screen "PilotDeck is open source" footer link from
github.com/siteboon/claudecodeui to github.com/OpenBMB/PilotDeck.
- Align memory source tag written by ui/server with the one used by
the in-process src/** provider (claudecodeui -> pilotdeck) so the
memory_turns SQLite column is consistent across both write paths.
- Update VAPID web-push contact mailto domain (claudecodeui.local ->
pilotdeck.local).
- Drop two stale .gitignore entries for bundle tarballs that the current
build pipeline never produces.
CCR (/api/ccr/* routes, CCRConfig types, <ccr-subagent-model> tag,
CCR_SENTINEL) is intentionally untouched — those are kept for frontend
back-compat. Comparison mentions of "Claude Code" / "Claude Sonnet 4.6"
in README marketing copy are also intentional and untouched.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| fix(ui): toggle run mode with shift tab
| 6 天前 |
| fix(ui): toggle run mode with shift tab
| 6 天前 |
| fix(editor): never let a failed load overwrite the real file on save
Previously, when /api/projects/:projectName/file returned a non-2xx
(e.g. during a transient race right after a dev-stack restart), the
useCodeEditorDocument hook caught the error and called
setContent(// Error loading file: ${message}\n// File: ...)
That placeholder text quietly became the editor's authoritative buffer.
A subsequent Ctrl+S — or any other save trigger — then PUT the
placeholder through to fsPromises.writeFile, destroying the real file
on disk. Because writeFile follows symlinks, this also wiped out the
target of any symlinked entry the user happened to be viewing.
The fix decouples error state from buffer state:
- useCodeEditorDocument now tracks loadError separately and leaves
content empty on failure; it also exposes a reload() callback and
cancels stale loads on unmount via a captured cancelled flag.
- handleSave refuses to run while loading or loadError != null,
surfacing the reason via saveError instead of writing stale buffer
contents.
- New CodeEditorLoadError subcomponent renders an error panel with
Retry / Close — it intentionally does not mount a CodeMirror surface
or a Save button, so the failure mode has no path to disk.
- CodeEditor branches on loadError before isBinary; locale strings
added for en + zh-CN.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 19 天前 |
| 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 天前 |
| refactor(ui): unify WS command type to pilotdeck-command, eliminate SessionProvider multi-branch
Replace four provider-specific WS message types (claude-command, cursor-command,
codex-command, gemini-command) with a single pilotdeck-command. This fixes several
bugs caused by the four-way branching: cursor not passing permissionMode, codex
stripping plan mode, claude-only image support, and codex-specific cyclePermissionMode.
- New sessionLauncher.ts replaces claudeSessionLauncher.ts with unified options
- Merge four per-provider model states into single model/setModel
- Remove __provider tag, cursorSessions/codexSessions/geminiSessions from types
- Unify session deletion to single api.deleteSession() path
- Remove cursor-specific sessionStorage tracking
- cyclePermissionMode now includes plan mode for all providers
- Backend keeps deprecated command types for back-compat
Co-authored-by: Cursor <cursoragent@cursor.com>
| 17 天前 |
| 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): prevent IME enter from submitting inputs
| 6 天前 |
| refactor: update codebase to support PilotDeck integration
- Replaced references to Claude with PilotDeck across various components and utilities.
- Updated session paths and permission handling to align with PilotDeck specifications.
- Enhanced chat state management to include PilotDeck status.
- Adjusted message formatting and permission request handling for PilotDeck compatibility.
- Ensured consistent naming conventions and types for PilotDeck throughout the codebase.
| 6 天前 |
| feat: add PilotDeck support to onboarding and authentication flows
- Updated cliProviders to include 'pilotdeck'.
- Added PilotDeck provider details in AgentConnectionsStep.
- Extended CliProvider type to include 'pilotdeck'.
- Implemented PilotDeck specific command and title in ProviderLoginModal.
| 6 天前 |
| 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: allow workspace selection from any filesystem path (fixes #20)
- Remove /tmp from FORBIDDEN_PATHS so /tmp subdirs can be workspaces
- Change folder browser getParentPath('~') to return '/' instead of null,
allowing navigation above home to reach /Volumes, /mnt, /tmp, etc.
- Skip validateWorkspacePath in browse-filesystem endpoint — browsing is
read-only; workspace creation endpoints still enforce the blacklist
| 5 天前 |
| feat: add PilotDeck support to onboarding and authentication flows
- Updated cliProviders to include 'pilotdeck'.
- Added PilotDeck provider details in AgentConnectionsStep.
- Extended CliProvider type to include 'pilotdeck'.
- Implemented PilotDeck specific command and title in ProviderLoginModal.
| 6 天前 |
| fix(ui): prevent IME enter from submitting inputs
| 6 天前 |
| refactor(ui): unify WS command type to pilotdeck-command, eliminate SessionProvider multi-branch
Replace four provider-specific WS message types (claude-command, cursor-command,
codex-command, gemini-command) with a single pilotdeck-command. This fixes several
bugs caused by the four-way branching: cursor not passing permissionMode, codex
stripping plan mode, claude-only image support, and codex-specific cyclePermissionMode.
- New sessionLauncher.ts replaces claudeSessionLauncher.ts with unified options
- Merge four per-provider model states into single model/setModel
- Remove __provider tag, cursorSessions/codexSessions/geminiSessions from types
- Unify session deletion to single api.deleteSession() path
- Remove cursor-specific sessionStorage tracking
- cyclePermissionMode now includes plan mode for all providers
- Backend keeps deprecated command types for back-compat
Co-authored-by: Cursor <cursoragent@cursor.com>
| 17 天前 |
| 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 天前 |
| 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 天前 |
| 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 天前 |