Repository navigation
Conversation
…ParadevAI#5908) * feat(desktop): restore Workspaces tab with host-scoped workspace list Bring back the sidebar Workspaces entry (removes the SHOW_WORKSPACES_TAB flag) and rework /v2-workspaces to read from a single explicitly-targeted host instead of the all-hosts fan-out: - New useSelectedHostWorkspaces: one workspace.list against the selected host, live-patched by its workspace:changed events, IndexedDB snapshot for offline, no Electric v2Workspaces fallback. - Device filter defaults to "This device"; the all-devices merged view is removed. Host picker is populated instantly from the v2Hosts and v2UsersHosts collections (no per-host counts - counting is a fan-out). - Host-served rows no longer require v2Hosts/v2UsersHosts rows to render; the cloud-host-table gate applies only to cloud-fallback rows. - PR enrichment runs only for the host-scoped page, not for unscoped callers (command palette, dev sidebar seeding). - Empty state is gated on the selected host's settlement so an unanswered host reads as loading, not empty. Claude-Session: https://claude.ai/code/session_01ULuSGAMv3cqtqBMjaYzDqd * refactor(desktop): fold single-host reads into useHostWorkspacesSource Delete useSelectedHostWorkspaces - it duplicated the source hook's target derivation, snapshots, query config, and event patching. The source hook now takes an optional scopedHostId (undefined = fan-out, machine id = single host with no cloud fallback, null = scoped but unresolved, runs nothing). Also drop the now-dead device-filter stage (scoped rows are already single-host) and the duplicated empty-state wrapper. Claude-Session: https://claude.ai/code/session_01ULuSGAMv3cqtqBMjaYzDqd * refactor(desktop): drop dead outputs and clarify the row-source split pinned/others/V2WorkspaceProjectGroup had no consumers - delete them. Collapse the scoped-vs-fanout selection into one destructure with a comment explaining why both hooks always run, and document that a null scopedHostId runs nothing. Claude-Session: https://claude.ai/code/session_01ULuSGAMv3cqtqBMjaYzDqd
…n local-first migration (ParadevAI#5909) * fix(host-service): restore workspace_created/deleted telemetry lost in local-first migration PR ParadevAI#5731 retired workspace cloud sync, which was the only path that fired the cloud-side workspace_created/workspace_deleted captures for v2 workspaces. Typed creation events fell from ~5.0k/day to ~2.0k/day tracking 1.16 adoption, with no replacement emission. Emit both events from the local workspace store's insert/delete choke points via the authenticated analytics.captureEvent relay (the CLI pattern) — property parity with the retired cloud capture plus host_service_version and source=host_service. Claude-Session: https://claude.ai/code/session_01JGkCApsJ22Ujd2hadHEftJ * fix(host-service): guard workspace telemetry against partial api clients Hand-rolled test stubs shape ctx.api with only the routes they mock, so the analytics property access threw synchronously and failed the workspace operation. Telemetry is best-effort; swallow the throw. Claude-Session: https://claude.ai/code/session_01JGkCApsJ22Ujd2hadHEftJ
…MCP discovery, agent auth metadata (ParadevAI#5910) * feat(marketing,api,docs): agent-readiness surfaces — markdown twins, MCP discovery, agent auth metadata, OpenAPI spec Addresses orank agent-readiness gaps for superset.sh: Marketing (superset.sh): - llms.txt: when-to-use guidance + developer-resource index; shared builder in lib/llms.ts - Markdown surfaces: /index.md, /llms.md, /agents.md, /auth.md (WorkOS auth.md convention), .md twins for blog/compare pages, Accept: text/markdown negotiation + ?mode=agent via new proxy.ts - robots.txt: explicit AI-crawler tiers (allow AI search/user agents, block CCBot/Bytespider) + Content-Signal - .well-known: A2A agent-card.json, MCP discovery + server card, RFC 9727 api-catalog - JSON-LD: Organization contactPoint/address/sameAs, WebPage speakable, Service schema - Contact page: direct channels prose; Link headers (RFC 8288) on homepage API (api.superset.sh): - /openapi.json: OpenAPI 3.1 spec for the protocol-stable surface (MCP transport, OAuth, discovery) - AS metadata: agent_auth block (skill/register_uri/revocation_uri); PRM resource_documentation - /.well-known/mcp + server-card.json with live tool introspection via in-memory MCP client - JSON errors: 401 + WWW-Authenticate at /api root, JSON 404 catch-all for unmatched /api/* paths Docs (docs.superset.sh): - /llms.txt page index (llms-full.txt and per-page /llms.mdx already existed) Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x * docs(plans): record shipped agent-readiness work with growth/debt ranking Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x * revert(api): drop hand-authored /openapi.json — MCP server card is the real catalog An OpenAPI spec for a JSON-RPC-over-one-endpoint API reduces to a single generic operation no function-calling framework can use. Point service-desc links, error hints, llms.txt, and agents.md at the live MCP server card instead. Rationale recorded in plans/done/20260722-agent-readiness.md. Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x
…ntity types, reinstated OpenAPI spec (ParadevAI#5912) * Revert "revert(api): drop hand-authored /openapi.json — MCP server card is the real catalog" This reverts commit d9a66fa. * feat(docs,api,marketing): round 2 agent-readiness — docs MCP server, /mcp alias, agent_auth identity types - docs.superset.sh/mcp now speaks MCP (docs_search + docs_read over the fumadocs source); the docs page moves to /mcp-server with a 308 for browser GETs. Fixes the 'docs MCP unhealthy' multi-surface finding with a real learn-surface server. - api.superset.sh/mcp aliases the v2 MCP endpoint; superset.sh/mcp redirects to it (307 preserves POST for MCP clients). - agent_auth gains identity_types_supported: [anonymous] + per-type block — accurately describes anonymous DCR claimed via browser consent. - /api/llms.txt scoped index (+robots carve-out); .md twins and Accept negotiation extended to changelog; applicationSubCategory added. - Reinstated /openapi.json (previous commit): the rescan hangs ~16 pts on it (scoped-permissions/schema/function-calling read the spec). Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x
…ew workspaces (ParadevAI#5913) * fix(host-service): refresh non-default base branches before forking new workspaces `resolveNewBranchStartPoint` only upgraded local→remote-tracking + fetched when the base branch was the default. For any other base — sticky localStorage default, explicit picker choice, or an AI-suggested branch — the local ref was used as-is with no fetch, so a shared branch that hadn't been touched in weeks silently forked new workspaces from a stale tip. Concrete case: base `mirror-flier`, local ref 44 days behind `origin/mirror-flier`, ~1700 commits behind current work. Apply the upgrade + fetch to any base branch with a configured upstream. Default-branch behavior is unchanged. * fix(host-service): type the git mock so start-point tests pass typecheck The `as never` cast on the mock broke tsc at every `git.fetch` assertion; cast to GitClient plus the typed fetch mock instead. Also apply Biome formatting. Claude-Session: https://claude.ai/code/session_018E1H8zdS3VsBzJxSMoXtw3 --------- Co-authored-by: Satya Patel <satyapatel111@gmail.com>
… brand icon, add missing apple-touch-icons (ParadevAI#5916) * fix(marketing,web,admin,api,docs): replace bordered favicon with brand icon, add missing apple-touch-icons The favicon.ico shipped by all five apps was pre-rebrand art with a grey border stroke baked into every frame; third-party favicon services (icon.horse, Google s2) serve it verbatim, so external sites showed the bordered icon. apple-touch-icon.png was declared by marketing and docs but the file never existed (404), which is why scrapers fell back to the bordered .ico in the first place. All assets regenerated from the desktop app icon (apps/desktop/src/resources/build/icons/icon.png): favicon.ico (16/32/48/256) in all five apps, apple-touch-icon.png (180x180) for marketing and docs, and favicon-192.png rebuilt to match. Claude-Session: https://claude.ai/code/session_018ksmZMq7douyrpBTNjP4DP * fix(marketing,web,admin,api,docs): use flat brand tile for favicons The desktop-icon-derived favicons from the previous commit carry a baked shadow/rim that smears at small sizes on non-matching backgrounds. Rerendered everything flat from the brand SVG (packages/ui/src/assets/icons/preset-icons/superset.svg) at exact target sizes: rounded #151110 square, glyph, no shadow or border. Claude-Session: https://claude.ai/code/session_018ksmZMq7douyrpBTNjP4DP
…vAI#5902) - Desktop nav now requires lg (1024px) instead of md (768px); the header content needs ~1,100px so the 768-1024 band always smushed. - Star counter only renders at xl (1280px+) so the 1024-1280 band fits without crushing the CTA. - Download CTA never wraps or shrinks (whitespace-nowrap + shrink-0) and stays visible inline next to the hamburger from sm up. - Hero headline capped at max-w-6xl so ultrawide viewports get two balanced lines instead of a full-width strip. - Shortened the capability-mac subheadline (154 -> 118 chars). Claude-Session: https://claude.ai/code/session_013HwZR8BoCF3QBis8b3x7pm
* feat(desktop): create blank projects from Superset * refactor(desktop): pass onError through to createEmpty directly The wrapper re-implemented the fallback toast that useCreateV1Project's runCreate already provides. Claude-Session: https://claude.ai/code/session_01539kWVLWyz9MUrFvEWybZx --------- Co-authored-by: Satya Patel <satyapatel111@gmail.com>
…aradevAI#5917) Real quality gaps surfaced by grading the docs MCP server, applied to both servers: - mcp-v2: server instructions in the initialize response; behavioral annotations on all 27 tools (readOnlyHint on lists/gets, destructiveHint on deletes, idempotentHint on updates/pause/resume) — agents can now refuse destructive calls without user confirmation. - docs MCP: instructions + readOnlyHint on both tools. - server card includes tool annotations. - /.well-known/mcp.json alias on marketing + api for manifest probes. - openapi.json: typed response schemas for the four discovery operations; documented URL versioning + deprecation practice (v1 MCP stays served during migration, changes announced in changelog). Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x
…ParadevAI#5918) npm currently shows @superset_sh/sdk with no homepage or repository — the fields agents (and directory scanners) use to verify the package is the official Superset SDK. Takes effect on the next publish. Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x
…norepo copy (ParadevAI#5919) * feat(marketing): source agent skills from superset-sh/skills, drop monorepo copy The official skills now live in the public superset-sh/skills repo (registered on skills.sh via npx skills add superset-sh/skills; the old private skills repo moved to sales-skills). The /.well-known/agent-skills routes fetch SKILL.md files from that repo with 1h ISR instead of reading a checked-in copy, and now serve both skills (superset CLI + superset-mcp). llms.txt links the repo. Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x * fix(plugins): vendor the superset skill into the Claude Code plugin The plugin symlinked ../../skills/superset, which the skills-repo migration removed. superset-sh/skills is canonical; the plugin carries a copy because plugin distribution needs the file on disk. Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x * docs: point agents at the official skills repo from agent-integration Claude-Session: https://claude.ai/code/session_01GbjRvApZBmhsSkfHzihp6x
…ParadevAI#5920) Resolves all 48 open Dependabot alerts: - next 16.2.6 -> 16.2.11 (SSRF in Server Actions/rewrites, cache confusion, middleware bypass, DoS) in web, marketing, docs, api, admin - postcss 8.5.10 -> 8.5.12 (arbitrary file read via sourceMappingURL) in docs - @hono/node-server 2.0.5 -> 2.0.10 (WebSocket handshake memory-leak DoS) in desktop, relay, host-service next/@next/* are excluded from bunfig minimumReleaseAge until 2026-07-24 since the security release is 2 days old. Claude-Session: https://claude.ai/code/session_01THb8nTeNPhJq6UWu1gUC4U
…, cli 1.16.1 -> 1.17.0) (ParadevAI#5926)
…e dropped forever (ParadevAI#5927) PR ParadevAI#5774 reintroduced marker-gating of initialCommand (regressing ParadevAI#4963) and removed the timeout fallback, so any shell whose OSC 133;A marker never reaches the scanner (exec'd shells, ZDOTDIR overrides) left preset and agent launches queued behind a promise that never resolves — an empty terminal with no command run. Keep ParadevAI#5774's first-prompt wait (real fix for direnv/devenv startup hooks consuming PTY input) but bound it at 15s, matching the v1 stack: on expiry the readiness promise resolves as timed_out and the queued command writes anyway. Also restore the flush of partially-matched marker bytes the scanner withholds, and clear the timer on every pending-state exit. Claude-Session: https://claude.ai/code/session_01KEmzD2DhH34tRA6GUuRgri
ParadevAI#5256) * feat(terminals): send/read/close follow-ups to running terminal agents Adds a public API to message an already-running terminal agent (claude/codex) instead of re-spawning a session per message via agents.create — which spiked terminal-session counts and started a fresh CLI each time rather than continuing the conversation. Host (host-service): - ModeTracker.isBracketedPasteActive() + snapshot() off the existing per-session headless xterm; scrollback 1 -> 1000 so snapshot serves line-mode history. - writeFramedInputToSession (bracketed-paste framing + Enter) and snapshotSession. Both adopt daemon-owned sessions on an in-memory miss (same adoptOnly path pane auto-adoption uses), so background agents stay reachable across host-service restarts. - terminal.send mutation + terminal.snapshot query. Public surfaces — the terminals resource gains list/send/read/close alongside create, following the explicit-host-targeting convention (ParadevAI#5885): - MCP v2: terminals_list/_send/_read/_close with tool annotations - SDK: client.terminals.list/send/read/close - CLI: superset terminals list/send/read/close (--host defaults to this machine) close reuses the existing terminal.killSession; list reuses terminal.listSessions (daemon+DB truth, ParadevAI#5823). No pty-daemon or protocol changes — this is the surgical subset of the capability ParadevAI#5784 attempted before its revert (ParadevAI#5837). Recommended flow: agents.create once to start, then terminals.send for follow-ups (0 new sessions) and terminals.read to observe the reply. Claude-Session: https://claude.ai/code/session_01C4cXgxgH3A7k3qHSLEyFNJ * test(host-service): e2e coverage for terminal send/snapshot; deterministic adoption replay wait Real-daemon node-test suite (same harness as terminal.adoption.node-test) covering the headless follow-up surface: send delivers text + Enter, submit: false stages without executing, snapshot serves normal and alt-screen buffers plus maxLines, bracketed-paste framing verified byte-for-byte via `cat > f`, restart-adoption for both verbs, and the not-found / exited / cross-workspace error paths. 10 consecutive runs green. Replaces the fixed 300ms post-adoption sleep with a wait for the replayed ring-buffer bytes to quiesce (they accumulate in session.buffer because no renderer is attached right after adoption), capped at 500ms. Typical adoption now settles in ~50ms instead of a blind 300ms, and slow replays no longer race the tracker rebuild. eventBus is optional on the new functions, matching createTerminalSessionInternal. Claude-Session: https://claude.ai/code/session_01C4cXgxgH3A7k3qHSLEyFNJ * test(host-service): exercise terminal.send/snapshot through the tRPC wire layer Same real-daemon harness, now also through appRouter.createCaller — the layer the public MCP/SDK/CLI verbs actually hit. Verifies the zod schemas, the submit-defaults-to-true behavior, and the error mapping: NOT_FOUND for missing terminals, FORBIDDEN for cross-workspace targeting, BAD_REQUEST for empty text, UNAUTHORIZED for unauthenticated callers. The suite now runs with the tsx loader (the router tree uses extensionless imports that --experimental-strip-types cannot resolve). Claude-Session: https://claude.ai/code/session_01C4cXgxgH3A7k3qHSLEyFNJ
…aradevAI#5907) * feat(desktop): new-workspace screen experiment with sample prompts Test arm of PostHog experiment 387127 (flag new-workspace-screen): a page-based create surface for new users — Superset mark, "What should we build next?", three sample prompts, and a decluttered composer — replacing the dense modal. Control arm is untouched. - /new-workspace route; store opens redirect there in the test arm, and the empty dashboard renders the screen pinned as its zero state - eligibility gated in code by NEW_WORKSPACE_SCREEN_EXPERIMENT_START; variant evaluated only after flags load, only on surface reach, so exposure matches the experiment population; new-workspace-screen-override flag forces the UI for the team with zero experiment exposure - Enter submits (Shift+Enter newline), empty submit blocked, page-wide drag-drop with overlay, Codex-style attachment cards (image lightbox, reveal-in-Finder, saveToDownloads), linked issue/PR parity with the modal Claude-Session: https://claude.ai/code/session_01SfU6AHAcHwrjwXwUFUDth5 * feat(desktop): make sample prompts substantive with docs-linked instructions Short labels in the UI, real instructions inserted on click: the setup prompt walks the agent through .superset/config.json (setup/teardown/run scripts, per-workspace ports) with links to docs.superset.sh. Claude-Session: https://claude.ai/code/session_01SfU6AHAcHwrjwXwUFUDth5 * fix(desktop): address ultrareview findings on the new-workspace screen - ref-guard preSelectedProjectId so the project picker isn't snapped back to the URL param on every change (mirrors the control modal) - gate the pinned empty state on the default device filter so filtered-to-empty device views keep the normal empty state - poison ambiguous same-name entries in the attachment path map so reveal-in-Finder never opens the wrong file Claude-Session: https://claude.ai/code/session_01SfU6AHAcHwrjwXwUFUDth5
…ig reseeds (ParadevAI#5943) * fix(automations): store portable agent slug so runs survive host config reseeds Automations stored the host_agent_configs instance UUID as `agent`. Those ids are regenerated on every seed/reset (or host.db rebuild), so a pinned automation breaks with "No host agent config matching '<uuid>'" — the workspace is still created but agents.run 404s. Store the preset slug (e.g. "claude") when it unambiguously names one config on the host, keeping the instance UUID only for duplicate presets, custom agents, and the superset chat entry. Read stored values id-first-then-preset across the picker, list cell, and create dialog. Also clarify the failure for users: friendlier host message, a plain-language run-error tooltip, Run-now toasts, and a proactive inline warning on the Agent row when the pinned agent no longer resolves on its host. * fix(automations): address review — resolve id/preset before iconId, non-disabled tooltip trigger
…#5944) * feat(desktop): restyle sidebar with a cleaner, denser look Soft foreground-wash fill tokens (--fill-hover/--fill-selected), inset rounded rows, muted icons, uppercase Projects micro-label, keycap shortcut hints, and a collapsed rail that continues the pane tab bar on the v2 workspace route (TopBar stays hidden on cmd+B). Claude-Session: https://claude.ai/code/session_01VTufk27JQRoonNcZFiCUvx * feat(desktop): drop bottom border from pane tab bar and rail strip Claude-Session: https://claude.ai/code/session_01VTufk27JQRoonNcZFiCUvx * feat(desktop): match pane tab bar background to sidebar chrome Claude-Session: https://claude.ai/code/session_01VTufk27JQRoonNcZFiCUvx * feat(desktop): polish sidebar add-repo button and misc chrome details VscNewFolder/VscFolderOpened hover swap on add-repository buttons, longer tooltip delay, smaller icon, Projects label at full muted color, collapsed New Workspace square keeps its fill. Claude-Session: https://claude.ai/code/session_01VTufk27JQRoonNcZFiCUvx * feat(desktop): vsc icons in add-repo dropdown, lighter nav icons Reorder add-repo menu (open-from-folder first, GitHub icon on clone), and shrink/thin the main nav icons to lighten their optical weight. Claude-Session: https://claude.ai/code/session_01VTufk27JQRoonNcZFiCUvx * fix(panes): keep add-tab button width in measured overflow track
…tooltip style (ParadevAI#5952) * feat(web): add /design component showcase page for @superset/ui Living reference of every packages/ui export — shadcn primitives, ai-elements, atoms, and Superset originals — with copyable import paths, grouped into ten sections with scrollspy navigation. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * feat(web): reference shared app components on /design, expand tooltip and button demos Adds a Shared app components registry (desktop renderer + pane system, with import-site counts), a dedicated Tooltip card including the HotkeyTooltip shortcut-chip style, and in-product button patterns mirroring OpenInButton and PickerTrigger. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * feat(ui): make the bordered chip style the TooltipContent default The preset-bar / HotkeyTooltip chip (bg-background, border, rounded-sm, muted text, no arrow, sideOffset 4) was copy-pasted at 7 sites and showArrow={false} at ~55 — it is the de-facto product tooltip. Bake it into @superset/ui/tooltip as the default and strip the now-redundant showArrow/sideOffset/className overrides across desktop, panes, and the /design showcase. Arrow remains available via showArrow; apps/mobile has its own tooltip and is untouched. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(desktop,ui): keys-only nav/sidebar tooltips and visible Kbd inside tooltips Kbd had a tooltip-context override (text-background) built for the old inverted tooltip; on the new bg-background chip it rendered invisible. Drop the override so Kbd keeps its default muted styling in tooltips. Make HotkeyLabel's label optional and show only the shortcut keys on the back/forward buttons and the three sidebar toggles. The /design hotkey-chip demo now renders real Kbd keys inside a tooltip. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(desktop): slow nav and sidebar-toggle tooltips to the standard 1s delay Matches the delayDuration={1000} convention used by HotkeyTooltip, the presets bars, and pane-header tooltips. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(desktop): show only the shortcut in the OpenInButton tooltip Renders HotkeyLabel keycaps when shortcuts are enabled; falls back to the "Open in <app>" text only when showShortcuts is off or the hotkey is unassigned. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(ui): border the opt-in tooltip arrow to match the chip outline The arrow was a plain bg-background diamond that looked detached from the bordered tooltip; border-r/border-b on the rotated square lands on the outward edges for every side. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * feat(web): restrict /design to company email accounts Adds an internalRoutes list to the web proxy: signed-in users whose email doesn't end in COMPANY.EMAIL_DOMAIN are redirected home, matching the gate apps/admin already uses. Covered by proxy-routes tests. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(desktop): keys-only tooltip on the top-bar open-in button (v1 and v2) Shows just the OPEN_IN_APP shortcut keycaps (e.g. ⌘O for Open in Finder) instead of the label and worktree path; keeps the select-an-editor hint when no app is chosen. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(desktop): open-in tooltips show label + shortcut with 1s delay, no worktree path Restores the "Open in <app>" text next to the keycaps on all three open-in buttons, keeps the v2 tooltip's worktree-path line removed, and applies the standard delayDuration={1000}. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * feat(web): split /design into primitives and Superset-components pages /design keeps the stock shadcn primitives; new /design/superset page hosts everything custom — Superset originals, expanded live ai-elements demos (conversation/messages, reasoning, suggestions, chain of thought, task, plan, code block, sources, inline citation, context, checkpoint, artifact), and the shared app-component registry. Shared header with page tabs; the superset page inherits the /design internal-route gate. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(web,desktop): address code-review feedback on the design pages - HotkeyLabel gains fallbackLabel so keys-only tooltips fall back to text instead of an empty chip when a hotkey is unbound - aria-current="page" on the active design tab - SharedComponentList extracted to its own component folder - ComponentCard copyable={false} for glob/source-path registry cards Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(desktop): keys-only tooltip on the v1 right-sidebar close button Matches the v2 TOGGLE_SIDEBAR toggles switched to fallbackLabel earlier in this branch. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * feat(desktop): mount settings gear in the v1 sidebar footer Wires the previously-orphaned SettingsButton next to the add-repository button in WorkspaceSidebarFooter (both collapsed and expanded states), updated to footer icon conventions and the keys-only tooltip pattern. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * fix(desktop): let the v1 add-repository button shrink so the settings gear isn't clipped Button's base shrink-0 + w-full made the trigger consume the full footer row and push the gear past the sidebar's overflow-hidden edge. min-w-0 flex-1 shrink lets it flex; label truncates when narrow. Verified via CDP in the running dev app. Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV * style(desktop): format WorkspaceSidebarFooter Claude-Session: https://claude.ai/code/session_01VedKcjooUzNUGeDPTmdanV
…adevAI#5956) * feat(desktop): filter and sort projects in the dashboard sidebar Adds a persisted sort mode (manual / date created / last updated) and an ephemeral inline filter to the dashboard sidebar's PROJECTS header. The "updated" mode sorts by most recent workspace activity; filtering matches project, workspace, and section names and auto-expands matches without writing persisted collapse state. Drag-to-reorder is disabled while a non-manual sort or filter is active, and the manual tabOrder is preserved. Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW * fix(desktop): use list-filter icon for sort menu and magnifier for filter Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW * fix(desktop): stop sort/add-repo menu clicks from toggling projects collapse The dropdown content portals to body, but React synthetic events bubble up the component tree to the header row's collapse toggle. Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW * fix(desktop): make sidebar filter clear button keyboard-operable Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW * fix(desktop): guard inner sidebar DnD and object identity during filtering Disables per-project workspace/section drag while a filter is active — a drop committed from the pruned child list would rewrite tabOrder against incomplete data and corrupt hidden siblings' order. Also makes the filter helper reuse input objects when nothing changes so memoized rows stay referentially stable across keystrokes. Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW * feat(desktop): restyle sidebar sort menu with section label and checkmarks Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW * style(desktop): dim and shrink the sidebar sort menu section label Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW * style(desktop): move Manual sort first and soften automation failed red Failed run dots/labels now use the semantic destructive token, which the dark ember theme defines as a muted brick red instead of tailwind red-500. Claude-Session: https://claude.ai/code/session_01MycxWhiezTmQAbvPR4tcYW
🧹 Preview Cleanup CompleteThe following preview resources have been cleaned up:
Thank you for your contribution! 🎉 |
Owner
Author
|
Superseded by the correctly targeted upstream draft PR: ParadevAI#5975 |
This branch had an error being deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Validation
bun run lintbun run --cwd apps/desktop typecheckbun test TasksView.test.ts getSelectedTasks.test.ts— 10 passedbun run --cwd apps/desktop compile:app/etc/profileresolves the machine's installed Claude wrapper and prepends/usr/local/sbinto the cached shell PATHhttp://localhost:3085, route#/tasks, CDP port9307Screenshots
Tasks
Pull requests