| fix(always-on): resolve cross-project Open Session lookup failure
Always-On Dashboard aggregates events from all projects, but the
Open Session button used selectedProject (current UI project) for
session lookup instead of the actual project owning the session.
Thread projectName from event data through the callback chain so
loadClaudeSession and onSelectSession target the correct project.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 18 天前 |
| 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 天前 |
| feat: improve attachment and tool result handling
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| 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 天前 |
| 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): populate RunDetail execution session, outcome, and workspace from Plans entry
RunDetail showed empty Execution Session, Outcome, and Workspace fields
when opened from the Plans & Cron Jobs list because the direct-plan code
path hardcoded projectKey and outcome to empty strings, and workspace
data had migrated to work cycles.
- Add projectKey prop and derive effectiveRunId from planId prefix
- Use projectKey from props instead of hardcoded empty string
- Extract outcome from events when available, fall back to plan status
- Add planStatusToOutcome helper for status-to-outcome mapping
Co-authored-by: Cursor <cursoragent@cursor.com>
| 7 天前 |
| 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 天前 |
| 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 天前 |
| 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 天前 |