Commit Graph

21 Commits

Author SHA1 Message Date
a56796a1be feat: unified hook notifier, agent auto-detection, terminal transition UI
- Add hooks/notify.ps1 as single hook handler for all events
- Refactor settings.local.json to use notify.ps1 instead of inline PS
- Add Notification hook, auto-detect agent from session_id/transcript
- Rename agent 'main' to 'claude' across server routes and terminal
- Add loading overlay and error state for terminal switching transitions
- Add transitionError ref to useTranscriptDebug composable
2026-02-21 04:33:42 -06:00
07783f2aea feat: add SessionLifecycleStatus component with bottom-overlay layout
- New SessionLifecycleStatus.vue: shows current hook lifecycle event
  with color-coded dot, event name, and detail text. Auto-detects
  mock vs real mode (falls back to demo cycle when no real data).
- Wrap lifecycle + UserInput + status-bar in .bottom-overlay container
  to eliminate fragile hardcoded pixel offsets in FloatingTranscriptDebug.
- Remove old agent-status-indicator square dot from status bar.
- Add lastHookEvent/lastHookDetail to client AgentSessionState type.
- Simplify idle-mode CSS: single .bottom-overlay rule replaces three
  separate show/hide rules for user-input, status-bar, lifecycle-ribbon.
2026-02-21 03:29:15 -06:00
2aec892f62 feat: server-first terminal creation, broadcast-only WS clients
- Add POST /create-terminal endpoint with MAX_TERMINALS=5 limit
- Server creates PTY, runs command, registers and broadcasts atomically
- Frontend startTerminal() calls server first, connects in reconnect mode
- Remove registerTerminalOnServer() — server handles registration
- Separate broadcast-only WS clients from PTY clients (no phantom "main" PTY)
- All broadcast functions use broadcastToAll() helper
- Fix resume existing flow to create terminal with --resume flag
2026-02-21 00:17:24 -06:00
653c4e6d23 feat: add new session FAB button to terminal stack, always show FABs
- Add "+" FAB in TerminalFabStack with create-session emit
- Expose handleCreateSession from FloatingTranscriptDebug
- Remove !showTranscriptDebug condition so FABs stay visible when panel is open
- Wire handleFabCreateSession in App.vue to open panel + show modal
2026-02-20 21:35:31 -06:00
9945be07b1 feat: centralize session state on terminal server
- Add SessionStateManager (server/services/session-state.ts) as source
  of truth for agent status, tools, approvals, and notifications
- Integrate into terminal server with state patches broadcast via WS
- Add /add-approval and /resolve-approval endpoints so approval
  lifecycle is tracked centrally and broadcast to all clients
- Add permissionMode field to AgentSessionState
- Frontend store (session-state.ts) + WS service (session-state-ws.ts)
  consume snapshots and patches from terminal server (4103)
- Rewrite useGlobalApproval to derive pending approvals from
  centralized state — resolving on one client now clears all others
- Migrate useTranscriptDebug: processing, hookMeta, serverRegistry
  now derived from session state store; remove 5s registry polling
- hooks-approval.ts notifies terminal server on add/resolve
2026-02-20 21:06:20 -06:00
15731b8f69 feat: scroll nav mode setting (scrollbar, buttons, none)
Adds a Nav selector in settings to choose between pixel art scrollbar,
aquatic arrow buttons, or no scroll navigation. Jump % slider only
shows in buttons mode. Persisted in localStorage.
2026-02-20 20:02:34 -06:00
da26bc7b9e feat: rich collapse badge, auto-collapse, aquatic scroll nav arrows
- SectionSummary type with tool names, error count, token usage
- Informative inline badge on collapsed sections (tools, errors, tokens)
- Auto-collapse keeps older sections collapsed as new messages arrive
- Replace scrollbar with pixel art aquatic scroll navigation arrows
- Configurable scroll jump percentage in settings
- Double chevrons for top/bottom, single for page jump
2026-02-20 19:57:56 -06:00
88a857f645 feat: new session modal, status bar controls (Esc, C-m, close), sendRaw
- NewSessionModal with tabs: new session (agent + optional initial prompt)
  and resume existing (filterable by agent)
- Status bar: +new, Esc, Ctrl+M, terminal buttons; close with confirm
- sendRaw on EphemeralTerminal for raw control characters
- createNewSession accepts optional initialPrompt, auto-sent on ready
2026-02-20 14:54:49 -06:00
18378adb77 feat: TurnEndDivider with prismarine floor, elevated FAB with bubbles
- Add TurnEndDivider component with pixel art ocean reef divider
- Parser merges stop_hook_summary + turn_duration into single turn_end
- Prismarine-inspired mosaic floor with SVG pattern and crystal highlights
- Animated duration badge with underwater glow effect
- Move transcript FAB to bottom-right, add elevated multi-layer shadow
- Add occasional bubble particles rising from FAB button
- Prevent long-touch selection on FAB (contextmenu + touch-callout)
- FAB stays fixed on mobile when terminal sheet opens
2026-02-20 14:28:37 -06:00
c6197694b5 feat: Ctrl+1..5 terminal shortcuts and improved AgentBadge indicator
- Ctrl+1 through Ctrl+5 switch to open terminals by index
- Opens floating window automatically if closed
- AgentBadge shows active terminal state dot and index (2/3)
- Dropdown items display shortcut numbers for discoverability
2026-02-20 13:32:42 -06:00
2f26bf999c refactor: remove manual keyboard detection from FloatingTranscriptDebug
Rely on dvh units for dynamic viewport sizing instead of manual
visualViewport keyboard detection. Removes jank-prone resize listener
and simplifies mobile sheet positioning.
2026-02-20 13:24:31 -06:00
779e32b283 feat: collapse-all button in float transcript titlebar
Add titlebar button to collapse all conversation sections except the
last user message. Special user messages (interrupted, meta/continue)
are treated as section children rather than section leaders.
2026-02-20 12:53:18 -06:00
220d595568 feat: voice mic, pixel life layer, enhanced transcript-debug UX
VoiceMicButton component, PixelLife aquatic layer, improved UserMessageBubble
with voice display, AgentBadge terminal switcher, ChatContainer voice integration,
FloatingTranscriptDebug ocean life enhancements, and terminal registry support.
Remove traefik config.
2026-02-20 12:12:53 -06:00
016e92ffe5 feat: interactive ephemeral terminal per transcript session
Replace one-shot HTTP POST sendPrompt with a persistent ephemeral
terminal per session. Terminal auto-starts on session select, stays
running in background when modal is closed, and gets killed on
session switch or page unload.

- Add sendInput() to useEphemeralTerminal (text + Enter as separate WS messages)
- useTranscriptDebug owns terminal lifecycle (create/dispose on select/switch)
- ResumeTerminalButton receives shared terminal prop, only toggles modal
- UserInput shows "Starting terminal..." when not ready
- Add "New Session" button that starts a fresh agent session
- beforeunload sends sendBeacon to kill terminal on page close
2026-02-19 18:55:23 -06:00
ca315cf040 feat: AgentBadge component, force mobile mode, and transcript UX improvements
- Extract agent badge into AgentBadge component with dropdown (TODO placeholder)
- Realtime connection indicated by badge color (green=connected, indigo=disconnected)
- Remove Transcript label and chat bubble icon from titlebar
- Add force mobile mode button (bottom sheet panel on desktop)
- Size toggle persisted in localStorage and controls sheet height in mobile mode
- Replace full titlebar drag with thin 5px top edge grip
- Remove sheet-handle touch bar, size controlled via toggle button only
- Large mobile mode respects app header height
- Slide-up/down animation for mobile panel enter/exit
2026-02-19 17:39:01 -06:00
eb69c0b2cf feat: Modular aquatic background system and shared CodeBlock component
Add aquaticBackground/ module with OceanScene (unified gradient, light rays,
sea floor, corals, seaweed, decorations), plus independent overlay layers
(BubbleStream, FishSchool, JellyfishDrift, EventOverlay, EdgeFade). Includes
event scheduling engine with 4 frequency tiers (minutes/hours/days/months)
and 20 random events with localStorage persistence.

Add shared CodeBlock component with copy-to-clipboard button, terminal-matched
monospace font (Consolas), and proper line-height/letter-spacing. Refactor
EditCard, WriteCard, TaskCard, and ToolResultBlock to use CodeBlock. Fix
markdown code block alignment to match terminal rendering.
2026-02-19 17:15:36 -06:00
3adfd189e1 feat: 3-state size toggle, readability overlay, and input persistence
- Add pin/medium/large size mode button in titlebar with pixel art icons
- Dark overlay appears on hover for better text readability
- User-input stays visible when textarea has text (CSS :has selector)
- Animated size transitions between modes
2026-02-19 15:44:35 -06:00
f7391f83b4 feat: Pixel art ocean buttons and scrollbar-gutter stable
- FAB button: night ocean pixel art with stars, moon, waves, seaweed, coral
- Send button: daytime ocean pixel art with sun, clouds, fish, sand
- Scrollbar hides with chrome using scrollbar-gutter: stable to prevent content shift
2026-02-19 15:36:35 -06:00
18aaa0ee7b feat: BackgroundPixelArt component, idle chrome mode, and absolute overlay layout
- Extract ocean pixel art into dedicated BackgroundPixelArt.vue with 5 animated layers
- Make titlebar, chat-header, and user-input position absolute overlays
- Add idle mode: chrome fades out on mouse leave, messages fill entire window
- Add fade-to-black edges on background for page blend
2026-02-19 15:25:18 -06:00
c8e8e50fd6 feat: Animated pixel art ocean floor background for FloatingTranscriptDebug
Replace galaxy background with animated underwater scene featuring water
depth gradient, pixel art sea floor (sand, seaweed, coral, starfish),
rising bubbles with water sway, and swimming pixel art fish. Also update
transcript-debug tool cards styling and add .claude-*/tasks/ to gitignore.
2026-02-19 14:44:25 -06:00
badde06ef9 feat: Add FloatingTranscriptDebug with pixel art dark theme
Floating chat window reusing ChatContainer with draggable/resizable
window, agent/session selector overlay, and pixel art decorations
(galaxy, minecraft dirt block, LED strip) on black transparent backdrop.
2026-02-19 03:35:53 -06:00