| chore: cleanup, fix Docker build, add URLs and skill acknowledgements
- Remove 6 dead asset files (duplicates, old branding PNGs)
- Replace "Claude Task Master" with "TaskMaster" in i18n, add zh-CN/tasks.json
- Set README URLs to https://pilotdeck.openbmb.cn/
- Add skill source acknowledgements (Anthropic Skills, MiniMax-AI, Karpathy)
- Fix Docker build: add pnpm-workspace.yaml, regenerate complete lockfile
(2009→11033 lines), add pnpm.onlyBuiltDependencies for native modules
Co-authored-by: Cursor <cursoragent@cursor.com>
| 7 天前 |
| 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 天前 |
| chore(branding): complete cleanup of legacy CloudCLI/Claude Code references
- CLOUDCLI_DISABLE_LOCAL_AUTH → PILOTDECK_DISABLE_LOCAL_AUTH
- CLOUDCLI_CRON_DAEMON_* → PILOTDECK_CRON_DAEMON_*
- CLOUDCLI_GITHUB_STARS → PILOTDECK_GITHUB_STARS
- ~/.claude-code-ui/plugins/ → ~/.pilotdeck/plugins/
- claudecodeui-server → pilotdeck-server
- edgeClawConfig i18n key → pilotDeckConfig (248 refs in TSX + settings.json)
- claude-code-main source provenance comments → generic descriptions
- CloudCLI user-facing strings → PilotDeck
- DEFAULT_PROVIDER_FALLBACK "edgeclaw" → "pilotdeck"
- .claude/ config home → .pilotdeck/ in cron daemon services
Co-authored-by: Cursor <cursoragent@cursor.com>
| 9 天前 |
| fix(ui): broadcast websocket reconnect to all subscribers and remove debug logs
Dispatch the websocket-reconnected message to all registered subscribers
on reconnect, not just via React state. This ensures stream-delta
accumulators immediately know about the reconnection. Also strip leftover
debug fetch() instrumentation from chat hooks.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 19 天前 |
| fix: align web session path sanitization
Co-authored-by: Cursor <cursoragent@cursor.com>
| 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 天前 |
| chore(branding): rename EdgeClaw / CloudCLI / CloudUI surface to PolitDeck
Brings the UI's user-visible branding in line with the PolitDeck name
across browser tab, PWA manifest, favicons, settings panel, login /
loading / setup screens, sidebar app title, chat composer placeholder,
push notifications, GitHub PR template, and internal localStorage keys.
User-visible surfaces:
* index.html: <title>, apple-mobile-web-app-title, favicon / icon links
now carry a ?v=pd1 cache-buster so existing browsers re-fetch the
new visuals on next load (the browser's native favicon DB is not
cleared by Cmd+Shift+R).
* manifest.json: name / short_name / description swapped to PolitDeck;
icon URLs also carry ?v=pd1.
* sw.js: CACHE_NAME bumped to "politdeck-v1" so the activate handler
purges the old "claude-ui-v2" cache (incl. cached manifest); push-
notification default title is now "PolitDeck".
* favicon.svg, logo.svg: "EC" text glyph → "PD".
* favicon.png, logo-128/256.png, icons/icon-{72,96,128,144,152,192,
384,512}.png: regenerated from logo.svg via sharp so every raster
size matches the new glyph.
* server startup banner: "CloudCLI Server - Ready" → "PolitDeck Server
- Ready"; TIP message now suggests pilotdeck status.
* GitHub PR template, push notification title fallback, downloaded
permissions / memory bundle filenames updated.
* i18n (en + zh-CN): sidebar.app.title, common.loading,
chat.composer.{placeholder,welcomePlaceholder}, auth.signIn.description,
settings.config.loading, settings.memory.description. npmUpgradeCommand
switched to git pull && npm run build because PolitDeck isn't
published on npm.
* React components: AuthLoadingScreen, AuthScreenLayout, LoginForm,
SetupForm (incl. logo alt), ChatInterfaceV2 placeholder fallback,
AppShellV2 delete-project copy, MainAreaV2 comment.
Internal type / file renames (cosmetic):
* hooks/useEdgeClawConfig.ts → hooks/usePilotDeckConfig.ts
* settings/view/tabs/EdgeClawConfigTab.tsx → PilotDeckConfigTab.tsx
* EdgeClawConfig type → PilotDeckConfig; EdgeClawConfigLike →
PilotDeckConfigLike.
* localStorage keys: edgeclaw:customProjectNames →
pilotdeck:customProjectNames, edgeclaw:customSessionTitles →
pilotdeck:customSessionTitles, edgeclaw:configView →
pilotdeck:configView.
* PermissionsExport.source 'edgeclaw' → 'pilotdeck'.
* onboarding default provider id 'edgeclaw' → 'pilotdeck'.
Deliberately left as-is:
* npm package edgeclaw-memory-core and its exported EdgeClawMemoryService
class — third-party package, renaming requires a fork + republish.
* DB path ~/.cloudcli/auth.db and memory data dir ~/.edgeclaw/memory —
contain existing user data; moving them is a separate migration.
* A handful of code comments referencing EdgeClaw history are kept so
future readers can trace the migration provenance.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 22 天前 |
| fix(onboarding): simplify first-run provider setup
Co-authored-by: Cursor <cursoragent@cursor.com>
| 14 天前 |
| chore: relicense to Apache 2.0 and align PilotDeck naming
Switch project license and README badges from AGPL-3.0 to Apache 2.0,
recognize ~/.pilotdeck as the general-chat cwd for skills, and use
messageTypes.pilotdeck for assistant labels instead of the legacy claude key.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 6 天前 |
| refactor(always-on): remove legacy web execution path, rewire retry through DiscoveryFire
The old web-driven Always-On path (discovery trigger → auto-poll →
web chat execution) raced with the DiscoveryFire pipeline, causing
duplicate plan executions. This commit removes the entire legacy path:
- Add alwaysOnRerunPlan gateway RPC so the UI retry button triggers
DiscoveryFire phases 2-4 (workspace → execution → report) directly
- Remove MainContent auto-poll, discovery trigger handler, execution
lifecycle tracking, and all associated refs/callbacks/useEffects
- Delete queueExecution, updateExecution, buildExecutionPrompt
from DiscoveryPlanService and the PATCH execution REST endpoint
- Unregister /ao slash command; delete alwaysOnSlashActions.ts
- Delete discovery-trigger-client.js and its WS handler in index.js
- Delete old web discovery prompt and utility files
- Remove approvalMode field from WebPlanRecord, UI types, i18n, tests
Co-authored-by: Cursor <cursoragent@cursor.com>
| 7 天前 |
| fix(ui): prevent IME enter from submitting inputs
| 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(ui): tighten vertical spacing between consecutive tool-call rows
Consecutive tool rows (bash, write_file, etc.) had 32px gaps identical
to prose-to-prose spacing, making long agent conversations unnecessarily
tall. Use CSS sibling selectors on the existing .ui-v2-legacy-row
marker to apply differentiated margins: 2px tool-tool, 16px prose-tool
transitions, 32px prose-prose unchanged.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| 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(config): remove deprecated contextWindow setting
contextWindow is now fully derived from the model's native context
limit or agent.maxContextTokens override. The UI form field, env
variable injection, and hardcoded fallbacks are all removed. A
deprecation warning is emitted if the old config key is still present.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |