* [aidan] bug: fix schedule button
* [aidan] fix/agent-errors: surface provider rate limits
* [aidan] ux/cards: click-to-rename for chat and workflow titles
Single-click a card's title to enter edit mode inline. Commit on Enter/blur,
cancel on Escape. Rename persists via PATCH for workflows and sessions.
* [aidan] feat/workflows: seed build prompt for zero-step workflows
When a new workflow has no steps, seed the agent with a prompt asking
the user to describe what the workflow should do, rather than starting blank.
* [aidan] feat/workflows: add-to-schedule popover for unscheduled workflows
Clicking the "+" on an unscheduled workflow row opens a popover with two options:
- Keep this schedule: enables the workflow's existing cadence and moves it to Scheduled
- Change schedule: opens the scheduling editor to pick a different time
* [aidan] ux/workflows: wire add-to-schedule popover and simplify New button
- Made the "+" icon on unscheduled workflow rows clickable, opening a popover
to keep or change the schedule
- Removed AddIcon from toolbar "New" button (now reads "New" instead of "+ New")
* [aidan] fix/scheduled-tasks: open schedule calendar when Schedule pill clicked
Fixed the Schedule pill click being swallowed by the toolbar's dismiss handler.
Exempted the toolbar pills via data-toolbar-pills so their click handlers fire.
* [aidan] ux/workflows: open New workflow in agent build chat instead of empty card
When creating a new workflow from the hub, open it in edit_agent view (with the
agent builder chat) instead of a preview card. The workflow is created on the
backend first so the embedded session has a real ID.
* dashboard: pan canvas via middle-drag and horizontal scroll over browser/chat
- Middle-mouse drag inside a browser webview is forwarded as canvas pan
(previously eaten silently by the guest compositor).
- Horizontal-dominant wheel inside a browser webview pans the canvas
when no ancestor in the guest page can absorb horizontal scroll;
otherwise the page handles it.
- Horizontal-dominant wheel over a chat panel pans the canvas (chat has
no horizontal scroller). Vertical scroll is unchanged.
Plain vertical scroll and ctrl/meta+wheel zoom over a browser stay with
chromium's defaults.
* browser: drop in-guest zoom locks so pinch and cmd+wheel zoom the page
setVisualZoomLevelLimits(1, 1) blocked pinch-to-zoom inside the webview, and
setZoomFactor(1) on every dom-ready reset any user page zoom. Both were added
back when canvas zoom was supposed to take over for ctrl+wheel; with that
reverted, chromium's native zoom handlers should run unimpeded.
* [aidan] fix: prev. commit fix. restore ctrl+wheel canvas zoom over webview cards
* [aidan] ui/ux: app navigation
* [aidan] ui/ux: gate webview preload forwarding on app interactive mode
When a view card is "interactive" (user clicked into the app), the preload stops forwarding ctrl+wheel, middle-mouse-drag, and horizontal-scroll-pan gestures so the embedded app gets every event. A mousedown notifier reports in-guest clicks to the host so it can flip the card into interactive mode without intercepting the click itself.
* aidan] bug: fixed 2 auth claude login issue
* [aidan] bug: claude login w email+pw
* [aidan] ui: edited message for cases where anthropic redirects to enter email code even after login'
* [aidan] ui/ux: fix connecting status accuracy
Browser sub-agents can now drive Google Drive’s share-doc flow end to end: same-process cross-origin iframes (the share dialog) are visible through a frame-tree-aware AX walk, and combobox autocomplete fields fill in one click_index call via DOM.focus + Input.insertText. When a spawned browser card’s agent finishes, the card now fades through a “Task done” pill with a Keep button for ~3s instead of snapping out, so the user sees what happened.
* [aidan] ui: sidebar reorder
* [aidan] ux: sidebar naming bug fix
* [aidan] ui: title changing improvements
* [aidan] ui/ux: aux title gen streams for cx/ route + agent writes meta.json first
- All aux LLM calls (chat title, turn label, group meta, dashboard name) now stream
instead of using messages.create; 9router's cx/ subscription response translator
drops content for GPT-5-family models on the non-streaming path but works per-event.
- aux_max_tokens_for floors GPT-5 budget at 4K so reasoning still leaves headroom for
a label; non-reasoning models get the base 100.
- App Builder skill: write meta.json FIRST (step 1 of Quick start) so the app's name
surfaces in the sidebar + ViewEditor header on the agent's first tool call instead
of waiting until end-of-turn.
- Session-end sync_output_from_meta_json takes a fallback_name (= session.name) so an
agent that never writes meta.json still leaves the app with the aux-LLM chat title
rather than "Untitled App".
- Title display: truncateForTitle caps at 4 words / 30 chars; displayChatTitle picks
the right Phase 1 placeholder by session.mode; normalizeSessionName strips legacy
Agent-XXXX names at slice intake.
- Typewriter component (char-by-char delete-then-type) drives the chat header,
dashboard card title, sidebar Apps entry, and ViewEditor TextField + description
field; honors useReducedMotion.
* [aidan] tune: reduce gpt-5 aux token floor
The backend already broadcasts the originating dashboard_id with every browser_card_added, but the frontend was throwing it away. Browser cards live in a single global Redux dict and the canvas rendered all of them unfiltered, so a browser spawned by an agent on dashboard A would appear in whatever dashboard the user was currently viewing.
Tag every card with its dashboard_id (at WS arrival and at fetchLayout hydration) and filter by it in useDashboardSelectors so render, bounds, layout save, and keyboard nav all see only the local dashboard's cards.
When a user selects an App card on the dashboard via the "Select UI element" picker, thread the selected Output ids to the backend (mirroring the selected_browser_ids path) and inject a per-app context block into the system prompt: each app's absolute workspace path, entry point, meta.json, and a pointer to its SKILL.md. This lets the agent edit existing apps in place from the main view (the dashboard card's Vite runtime live-reloads on save) without switching to the Apps tab.