feat: Grok ACP, History delete, folder icons, notifications, and UI polish#2385
feat: Grok ACP, History delete, folder icons, notifications, and UI polish#2385JOUYO wants to merge 14 commits into
Conversation
|
| Filename | Overview |
|---|---|
| packages/app/src/composer/dock.tsx | Adds shared floating-composer positioning, but applies theme-reactive Unistyles styles to Reanimated views and can crash on native theme changes. |
| packages/server/src/server/agent/providers/grok-acp-agent.ts | Adds Grok-specific ACP model transformation, launch arguments, modes, context usage, and persistence metadata without an identified blocking defect. |
| packages/server/src/services/quota-fetcher/providers/grok.ts | Adds Grok authentication, billing retrieval, credential refresh, and bounded transient retries. |
| packages/protocol/src/messages.ts | Extends mutable daemon configuration and browser automation schemas with coordinated client and server consumers. |
| packages/app/src/app/_layout.tsx | Gates native rendering until settings resolve and applies theme and appearance updates before paint. |
| packages/app/src/composer/input/input.tsx | Integrates configurable send-button visibility, Enter behavior, and running-turn stop behavior. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
Settings[App settings] --> Client[Daemon client]
Client --> Protocol[Protocol schemas]
Protocol --> Config[Daemon config store]
Config --> Speech[Speech runtime]
Registry[Provider registry] --> Grok[Grok ACP provider]
Grok --> Agent[Agent lifecycle]
Grok --> Usage[Context and quota usage]
Composer[Floating composer dock] --> Stream[Agent stream inset and controls]
Reviews (1): Last reviewed commit: "fix(app): align chat stream spacing and ..." | Re-trigger Greptile
| <Animated.View style={dockStyle} onLayout={onLayout}> | ||
| <Animated.View pointerEvents="none" style={fillStyle} /> |
There was a problem hiding this comment.
Theme changes crash composer dock
When the native theme changes while the composer is mounted, these Reanimated views also receive theme-dependent Unistyles styles, causing both runtimes to mutate the same native nodes and triggering the documented Unable to find node on an unmounted component crash.
|
Too many files changed for review. ( Bypass the limit by tagging |
Wire Grok as a first-class ACP provider with context usage from CLI session signals, restore quota/auth/billing parsing for Settings usage, and surface account email on provider usage cards (including Codex). Co-authored-by: Cursor <cursoragent@cursor.com>
Let hosts disable dictation and voice mode with live speech teardown, and hide composer controls from daemon config immediately. Add Enter send vs newline (including mobile keyboard send) plus send-button visibility, and boot Unistyles/theme from localStorage to stop the refresh color flash. Co-authored-by: Cursor <cursoragent@cursor.com>
Stop the agent from the primary send control with a small white square instead of a separate red button. Make usage refresh bypass the daemon cache, and retry transient Grok billing network failures. Co-authored-by: Cursor <cursoragent@cursor.com>
Port the local paseo chat polish: float the composer dock so the jump-to-bottom control sits above it, unify Thinking/body/footer left edges and stream gaps, and tighten markdown plus metadata icon sizing. Co-authored-by: Cursor <cursoragent@cursor.com>
Add web Notification/Service Worker support with diagnostics and focus-aware suppression, tighten workspace header layout, localize remaining UI copy across supported languages, and register Cursor/Grok terminal agent hooks. Co-authored-by: Cursor <cursoragent@cursor.com>
Store last-known token usage on agent records so reopened sessions keep the context ring, and fall back to Codex rollout / Cursor session data when live usage notifications are missing. Co-authored-by: Cursor <cursoragent@cursor.com>
Finish the local 0.2.0 migration by committing the remaining host/workspace UI polish, notification platform splits, speech/config tweaks, protocol helpers, and related docs so the working tree is clean on v0.2.0. Co-authored-by: Cursor <cursoragent@cursor.com>
3f243ea to
c863e97
Compare
Hide synthetic system-reminder/user_info/git_status context, unwrap user_query and spoken-input, strip voice instructions, and unwrap workspace_result tool output so Grok timeline items match Claude-style filtering. Co-authored-by: Cursor <cursoragent@cursor.com>
Headless hosts only have ~/.config/cursor/auth.json from cursor-agent login, not the desktop state.vscdb token. Without that fallback Cursor stayed unavailable and was filtered out of the usage list. Co-authored-by: Cursor <cursoragent@cursor.com>
Cursor totalSpend includes free bonusSpend, so the plan bar looked like $492/$400. Use includedSpend against limit, expose total/API/Auto percent windows, and list bonus usage as a detail. Co-authored-by: Cursor <cursoragent@cursor.com>
Attribute the API dollar bar as limit × apiPercentUsed (e.g. 39.2% of $400 → $156.80) and surface Total / First-party / API percent windows. Raw includedSpend often pins at the cap while percentages still match the Cursor dashboard; bonusSpend is free retail overage, not plan used. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace letter-placeholder project icons with Lucide Folder/FolderOpen so project rows stay visually consistent across sidebar, projects, and setup flows. Co-authored-by: Cursor <cursoragent@cursor.com>
Let users batch-select archived History sessions (select all / invert) and permanently delete them. Active sessions stay non-selectable so delete cannot archive-by-accident. Co-authored-by: Cursor <cursoragent@cursor.com>
Hard-delete now cascades children, then best-effort removes the provider's own session (Claude/Codex/OpenCode/Pi/OMP filesystem or RPC, ACP session/delete when advertised, plus Cursor/Grok local dirs). Also forward deleteNativeSession through wrapped provider clients. Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Contribution branch on top of current
main/0.2.0. Every functional area below is intentionally spelled out so reviewers can map commits → behavior → tests.977fac5f5b5bcf0364c976febf5ecb77565a,66432da43,543ee76fa75078888b,b2cf7377d,af8c5047fe736960d36816488eb105edadac9d73ccea0,543ee76fac863e97e2Closes #2399
Closes #2400
Closes #2401
Closes #2402
Closes #2403
Closes #2404
1. Project folder icons (#2399)
Why: Letter-placeholder icons read as random initials and looked inconsistent across surfaces.
What changed:
ProjectIconViewrenders LucideFolder/FolderOpen(viawithUnistyles) when there is no customiconDataUriexpanded+iconSizeproject-icon-color.tsandprojectIconPlaceholderLabelFromDisplayName(+ tests)Acceptance: projects without custom icons show folders everywhere above; custom
iconDataUristill wins.2. History Manage + hard-delete — client (#2400)
Why: History had no delete path; long-press sheets were rejected; users need explicit batch management of archived sessions only.
What changed:
AgentListselection mode: checkboxes; onlyarchivedAtrows selectable; non-archived muted/disabledagent-list-selection.ts,sessions-manage.ts(+ tests)use-delete-agentwaits for the matchingagentIdso cascade child deletes that share arequestIddo not resolve earlysessions.manage.*in all locales; unused archive-sheet copy removedAcceptance: only archived selectable; select-all / invert / delete confirm work; Done exits manage mode.
3. Provider native session delete — server (#2401)
Why: Deleting only the Paseo record left provider history behind (Claude jsonl, Cursor/Grok dirs, etc.).
Flow (
Session.deleteAgentFully):paseo.parent-agent-idAgentClient.deleteNativeSession?agent_deletedProvider coverage:
~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl+ sidecar<sessionId>/session.deleteRPC against running OpenCode serverresolveCodexRolloutFile(file delete; no API)nativeHandlesession/deletevia short-lived probe (ACPAgentClient.deleteNativeSession)~/.grok/sessions/<encodeURIComponent(cwd)>/<sessionId>/~/.cursor/acp-sessions/<sessionId>/Implementation notes:
session/deleteis stabilized in the protocol; SDK@0.17.1has no typeddeleteSession, so we call it viaextMethod("session/delete", …)whensessionCapabilities.deleteis advertised (COMPAT(acpSessionDelete))session/delete→ local-dir fallback requiredsessionCapabilities.deleteskip the protocol step (spec)session/listwrapClientProvidernow forwardsdeleteNativeSession/archiveNativeSession/unarchiveNativeSession/shutdownso customextends: "acp"providers are not silently skippeddocs/agent-lifecycle.md4. Grok ACP + message envelopes (#2402)
Commits:
ecb77565a,66432da43,543ee76faWhat changed:
<system-reminder>,<user_info>,<git_status><user_query>/<spoken-input><instruction><workspace_result>tool outputAcceptance: Grok starts/streams; usage+email visible; synthetic envelopes do not appear as user bubbles.
5. Cursor Ultra usage accuracy (#2403)
Commits:
75078888b,b2cf7377d,af8c5047fWhat changed:
cursor-agentauth.jsonautoPercentUsed/apiPercentUsed)Acceptance: dashboard numbers and in-app meter match for Ultra included + API buckets.
6. Context meters /
lastUsage(part of #2404)Commit:
e736960d3What changed:
lastUsageon agent records (data-model + storage)7. Browser notifications + terminal hooks (part of #2404)
Commit:
6816488ebWhat changed:
paseo-notification-sw.jsService Workernotification-diagnostic-report)ar/es/fr/ja/pt-BR/ru/zh-CN(notifications, diagnostics, schedules, sidebar, provider usage, add-project / new-workspace, tool-call display names)8. Voice / Enter-to-send / theme boot (part of #2404)
Commit:
105edadacWhat changed:
9. Composer + chat stream polish (part of #2404)
Commits:
9d73ccea0,543ee76faWhat changed:
10. Remaining UI / runtime polish (part of #2404)
Commit:
c863e97e2(large catch-up landing on 0.2.0)Notable items in this commit (not exhaustive file list):
pr-badge.web/.nativeSupersedes closed tracking issues / earlier forks:
Release-only commits from our fork (
CHANGELOG/ beta version cuts) are intentionally excluded.Test plan
extends: "acp"providers that advertisesessionCapabilities.deletereceivesession/delete