Commit Graph

75 Commits

Author SHA1 Message Date
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
06b48ebda3 feat: Compact transparent tool cards with grouped assistant messages
- Redesign all tool cards (Edit, Read, Bash, Grep, Glob, Write) to be
  compact single-line headers with inline key info and toggle buttons
- Make cards and bubbles fully transparent with subtle color tints
- Remove borders, use only left accent bar per card type
- Color-code numbers: red for removals, green for additions/counts
- Simplify ToolResultBlock to render content directly without toggle
- Group consecutive assistant messages, showing header only on first
- Remove borders from assistant and user message bubbles
2026-02-19 03:12:17 -06:00
4ab1d03370 feat: Add specialized tool cards for transcript-debug and glassmorphism bubbles
Add toolCards/ with rich visual cards for 10 tool types:
- AskUserQuestion, ExitPlanMode, EnterPlanMode
- Read, Write, Bash, Edit
- Grep, Glob
- Task/TaskCreate/TaskUpdate/TaskGet/TaskList (unified TaskCard)

Add MarkdownContent component and markdown/syntax highlight utils.
Make user/assistant bubbles transparent with backdrop blur.
2026-02-19 02:45:53 -06:00
159a38e3c2 feat: Global hooks approval modal with plan/question/permission modes
- Add PermissionRequest and Stop approval hooks to local Claude config
- Unify PermissionApproval into multi-mode card (permission, plan, question)
- Support allowAlways, deny-with-reason, and AskUserQuestion answering
- Add cross-process broadcast fallback (HTTP to sync server)
- Fix approval scripts to default to .claude/debug/ for local agent
2026-02-19 00:25:08 -06:00
9bd6123f97 feat: Add transcript-debug page with multi-agent support, hooks approval, and message selection
- Transcript debug: JSONL viewer, parsed chat view, realtime WebSocket updates, session selector
- Multi-agent: ejecutor, nucleo000, and claude (global ~/.claude/projects/) with agent switcher
- Hooks approval: permission/plan request forwarding via PowerShell hooks, long-poll API, UI modals
- Chat features: session ID copy, select mode with checkboxes, multi-select copy, select all/deselect all
- File watchers for all agent transcript directories with polling fallback on Windows
2026-02-18 23:55:09 -06:00
d0fdd04132 asi se fue xd 2026-02-18 12:13:22 -06:00
0a9fcc467f refactor: Move Start/Restart/Clear to nav bar popup outside terminal
- Titlebar only keeps toggle and close buttons
- Toggle button wider to use freed space
- Nav bar opens as popup below terminal (no internal space change)
- Added Start/Restart agent buttons to TerminalNavButtons
- Backdrop blur on popup bar
2026-02-16 09:13:26 -06:00
9a2807aa9a feat: Add reusable TerminalNavButtons to AgentTerminal with mobile touch drag support
- Extract nav buttons (MCP, Claude, Continue, Resume, Clear, Refresh, keys, arrows, scroll) into TerminalNavButtons.vue
- Add toggle button in AgentTerminal titlebar to show/hide nav bar
- Add sendRaw() to useAgentTerminal for raw PTY input (no \r append)
- Add touch drag support for AgentTerminal on mobile
- Skip auto-focus on small screens to prevent virtual keyboard popup
2026-02-16 09:07:35 -06:00
5a4192ac2f fix: Prevent permission cards from being lost on PromptBar open
- Connect WebSocket BEFORE loading history to catch real-time permissions
- loadHistory() now preserves unresolved intervention cards
- loadPendingPermissions() runs AFTER loadHistory() to avoid race condition
2026-02-16 01:46:10 -06:00
6633a61ee4 feat: Auto-open PromptBar on permission request and improve permission card UI
PromptBar now auto-opens when a permission request arrives and it's hidden.
Permission cards show rich contextual info: tool badge, description, code
blocks for Bash, diff preview for Edit, file paths for Write, and icons
on Allow/Deny buttons.
2026-02-16 01:40:08 -06:00
e2fc281210 fix: Skip auto-focus on mobile to prevent keyboard from opening on prompt bar show 2026-02-16 01:27:52 -06:00
cf2755a731 fix: Scroll chat to bottom immediately on user message send 2026-02-16 01:21:13 -06:00
e54157a6d8 refactor: Move settings/terminal buttons to header, hide info bar and history button 2026-02-16 01:19:35 -06:00
a91f82e1c3 fix: Wire up interactive permission, question, and plan cards in PromptBar
- Broadcast PermissionRequest hook as claude-permission WS event
- Fix dedup bug where undefined requestId blocked all permission cards
- Add sendInput() to AgentTerminal for char-by-char PTY responses
- Make AskUserQuestion options clickable (sends option number to PTY)
- Add Approve/Reject buttons for ExitPlanMode plan cards
- Permission Allow/Deny now sends y/n to PTY instead of broken HTTP call
2026-02-16 01:11:39 -06:00
55265d5145 fix: Per-agent terminal isolation, floating terminal z-index, and char-by-char input
- Add :key to PromptBar to force remount on agent switch, fixing shared terminal session bug
- Raise AgentTerminal z-index above PromptBar backdrop so floating terminal is visible/clickable
- Send prompt text char-by-char (15ms delay) matching FloatingVoice pattern for Claude Code compat
- Guard xterm dispose against unloaded addons to prevent errors on agent switch
- Widen PromptBar panel from 360px to 420px to fit all ChatInput buttons
2026-02-16 00:41:38 -06:00
59cc8ee87e feat: Migrate voice capture to composable with floating push-to-talk
Extract voice recording logic from FloatingVoice.vue into useVoiceCapture
composable. TranscriptCard now does real recording instead of mock typing.
InputSettings allows voice mode toggle (WebSpeech/Whisper GPU), mic
selection, and debug audio playback. ChatInput gets a settings gear button.

Long-press on FloatBubble shows a floating TranscriptCard (push-to-talk)
instead of opening the full PromptBar. Release stops recording after a
500ms buffer. Click still opens PromptBar normally.

Parallel MediaRecorder captures raw audio in WebSpeech mode for DB save
and debug playback. Transient errors (no-speech) no longer kill sessions.
Touch selection prevention on FloatBubble for tablets.
2026-02-15 23:33:29 -06:00
f3ac7986ec feat: Add transcript engine API and connect ConversationHistory to real data
- Add transcript-engine service that parses Claude Code JSONL transcripts
  with session listing, message extraction, token/stats analysis, and caching
- Add transcript REST routes (sessions list, latest, by session ID, section filtering)
- Rewrite ConversationHistory to fetch from /api/transcript/* instead of mock data
- Add session pills for switching between conversation sessions
- Add stats bar footer with model, duration, tokens, and tool count
- Add TranscriptSession/TranscriptMessage types, ChatInput, InputSettings,
  PromptBar updates, TranscriptCard, and useVoiceCapture composable
2026-02-15 20:05:43 -06:00
68edc01d44 refactor: Split AgentBar into modular components with PromptBar chat flow
Extract 1226-line monolithic AgentBar.vue into focused components:
- types/agent.ts: shared types (Agent, AgentStatusState, ClaudeStatus, ConversationEntry)
- agent/FloatBubble.vue: bubble with all status/ejecutor animations, hold detection, recording audio bars
- agent/PromptBar.vue: floating panel with chat conversation, transcript, history
- agent/ChatInput.vue: reusable input row (text, mic, send, history buttons)
- agent/TranscriptCard.vue: typewriter transcription simulation
- agent/ResponseCard.vue: thinking dots + mock response
- agent/ConversationHistory.vue: scrollable mock history entries
- AgentBar.vue: thin orchestrator (~290 lines) keeping WebSocket + status logic

New interaction: click bubble opens PromptBar in text mode, hold opens in
recording mode with audio bar animation on the bubble. Spring enter/blur
exit animations on PromptBar. Text submit shows chat bubbles with mock
agent responses.
2026-02-15 19:33:29 -06:00
ffceb2efc2 feat: Add configuration management UI for /agents page
- Add 6-tab horizontal bar: Files, Tools, MCPs, Plugins, Hooks, Skills
- Backend: permission parser, config/known-tools/skills/plugins/mcp-json endpoints
- Backend: POST endpoints for permissions, hooks, and MCP config
- Store: tool entries with 3-state toggle, MCP servers, hooks CRUD, skills/plugins fetch
- ToolsManager: search, grouped cards (base/MCP), ask/allow/deny cycle, parameterized rules
- McpManager: server cards with enable/disable, add/edit/delete modal
- PluginsManager: read-only global plugin cards from ~/.claude/plugins/
- HooksManager: accordion by event type, inline edit with matcher/command/timeout
- SkillsManager: two-column layout with SKILL.md preview and references
2026-02-15 18:29:15 -06:00
816a8d9abe feat: Rich hook forwarding, permission bridge, and toast notifications
Replace hardcoded PowerShell status hooks with stdin-forwarding hooks
that send full Claude Code hook data (tool_input, tool_response, prompt,
session_id, model, etc.) to /api/claude-hook endpoint.

- PowerShell hooks read stdin JSON and POST to /api/claude-hook
- Server derives status for backward-compat FAB animations
- Server extracts assistant_response from transcript on Stop events
- New /api/claude-permission endpoint with Promise-based allow/deny flow
- HookNotifications.vue: toast system showing session, prompt, tool use,
  tool results, notifications, and final assistant response
- WebSocket broadcast for claude-hook and claude-permission message types
2026-02-15 16:16:59 -06:00
4aaeb8844f feat: Add tree file view for git status, AgentBar dock, and settings updates
- Add StatusTree component with collapsible directory hierarchy for staged/unstaged/untracked files
- Replace flat file lists in GitPage with tree view showing file type icons and git status badges
- Add AgentBar arc dock with per-agent terminal frame and voice modal
- Update ejecutor settings with hooks for claude-status reporting
2026-02-15 14:21:18 -06:00
e9689d6ea8 feat: Add AgentBar arc dock with per-agent terminal frame and voice modal
- Add ui.json configs for Main (purple) and Ejecutor (red) agents
- AgentBar: fused arc-shaped dock at bottom with dynamic glow
- Quick press opens styled terminal frame mockup
- Hold opens voice modal with Web Speech API streaming transcription
- Responsive: full-width mobile, max-width on tablet/desktop/4K
- Agents API: serve uiConfig from ui.json in agent directories
- Agents page: route, store, toolbar integration
2026-02-15 02:58:11 -06:00
9f9f335439 feat: Auto-save components, soft delete, tags, compact WCO header
- Auto-save rendered Vue components to DB on render_vue_component
- Soft delete (archive) instead of hard delete for components
- Tags support for component categorization
- Gallery limited to 10 most recent items per section
- Upsert with ON CONFLICT for component saves
- PUT endpoint for partial component updates
- Collapsible toolbar with animated toggle button
- Window Controls Overlay support for PWA titlebar
- Compact header mode (32px) with hidden dot toggle
- Dynamic theme-color meta sync for Windows titlebar
2026-02-15 02:54:27 -06:00
8154bac63f feat: Add anonymous dynamic canvas option to gallery 2026-02-15 02:05:47 -06:00
d5ee533db9 feat: Add canvas gallery with soft delete, snapshots and components
Replace the empty dynamic canvas placeholder with a gallery showing
saved canvases, snapshots and Vue components. Users can create new
canvases, restore snapshots, load components, and manage canvas
toolbar/archive settings from the gallery.

- Backend: soft delete (archive) instead of hard delete, status column
- Frontend: CanvasGallery component with grid, search, settings popover
- Show canvas name in global header when viewing a project canvas
- Remove ProjectsPage (replaced by gallery), clean all references
- MCP tools: project category available on canvas page, update handlers
2026-02-15 01:57:04 -06:00
9a636e26a7 feat: Enforce exclusive auto-request (one client at a time)
Server is now source of truth for autoRequest. When a client enables it,
all other clients lose it. Broadcast includes autoRequest per client,
frontend syncs from server state on each torch-update.
2026-02-14 23:40:30 -06:00
cf618b1948 feat: Split torch trigger into action + dropdown chevron
Click the main area to request/release torch directly (1 click).
Click the chevron to open the settings dropdown.
2026-02-14 23:35:20 -06:00
2a80b7751b feat: Add torch client identity, early connection and auto-request
- Named clients persisted in localStorage, editable from dropdown
- Auto-request: clients can auto-receive torch when no holder exists
- Early torch init in App.vue (fires before WebMCP, awaited later)
- Deferred torch connection in toolRegistry for race condition safety
- TorchButton rewritten as dropdown with name editor, toggle, client list
- Server broadcasts client names, supports update-name message
- MCP tool handlers display client names
2026-02-14 23:30:56 -06:00
d9eaba393b feat: Add floating window system for canvas components
- Add WindowContainer.vue with Liquid Glass styling, drag, resize, close
- Add windows store for managing window state (position, size, z-index)
- Modify dynamicComponents.ts to wrap Vue components in floating windows
- Add MCP tools: move_window, resize_window, close_window, list_windows
- Add isolated Claude profiles (ejecutor, nucleo000) with versioned configs
2026-02-14 20:04:11 -06:00
0f73bd60bf refactor: Unify sync server and combine torch with connection UI
- Consolidate git and torch WebSocket servers on port 4105
- Create separate handlers for git and torch in handlers/ directory
- Combine TorchButton with connection status into single pill button
- Remove StatusBar (now redundant with TorchButton)
- Remove auto-assign torch on register/disconnect
- Remove auto-connect to MCP on page load
- Connection only happens when user explicitly requests torch
2026-02-14 17:13:32 -06:00
647fb03516 feat: Add torch system for multi-browser MCP control
- Add TorchButton component to header (replaces dropdowns)
- Add torch store for managing torch state
- Add torch service for requesting/releasing torch
- Add torch event handlers in WebMCP service
- Remove ComponentsDropdown and ToolsDropdown from header

The torch system allows controlling which browser receives
MCP tool calls when multiple browsers are connected.
Requires WebMCP library update to fully function.
2026-02-14 16:25:43 -06:00
2766cbfd0b perf: Use tail-only replay by default for faster terminal loading
- Change default to tailOnly=true (was false)
- Reduce chunks from 500 to 200
- Applies to both FloatingTerminal and TerminalPage
2026-02-14 13:26:27 -06:00
2a01574d00 fix: Improve terminal buffer handling and replay performance
- Add chunked replay (8KB chunks with 10ms delay) to avoid overwhelming xterm.js
- Add clear-buffer server command to reset terminal history
- Add clear buffer button in terminal header
- Filter out tiny resize events during CSS transitions (ignore < 20x5)
- Remove premature fit() call from init - wait for onBecameVisible
2026-02-14 12:57:30 -06:00
2151255239 refactor: Simplify terminal rendering logic
- Remove nested requestAnimationFrame calls
- Simplify handleReplay: write + refresh + scrollToBottom
- Simplify onBecameVisible: fit + refresh + focus
- Remove excessive console.log statements
- Convert async functions to sync where appropriate
2026-02-14 12:33:03 -06:00
303755437d refactor: Extract terminal rendering logic to useTerminalRenderer composable
- Create useTerminalRenderer.ts with all xterm.js logic
- Support custom theme, fontSize, fontFamily options
- Add handleReplay() for proper visibility handling
- Add getBufferContent() for copying terminal content
- Refactor FloatingTerminal.vue to use composable
- Refactor TerminalPage.vue to use composable
- Server: Add request-replay message type for on-demand replay
- Server: Remove auto-replay on connect (client requests when ready)
- Fix xterm.js rendering issues with hidden containers (v-show)
2026-02-14 12:16:34 -06:00
3c401c4c2b feat: Add quick action buttons to floating terminal
Add virtual keyboard buttons for common actions:
- Clear: clears terminal screen
- MCP: request WebMCP token
- Claude: start claude session
- Cont/Resume: claude --continue and --resume shortcuts
2026-02-14 11:16:49 -06:00
6167dfa440 feat: Add project file tree viewer to Git page
Add Files tab with browsable project structure and file content viewer.
New components: ProjectTree for navigation, FileViewer for content display.
Backend endpoints: /api/git/tree and /api/git/file.
2026-02-14 10:51:17 -06:00
a856fefd98 feat: Add Git page with branch selector, commit history, and diff viewer
Includes FileTree, CommitList, BranchSelector and DiffViewer components,
Git API routes, and mobile keyboard visibility handling for FAB buttons
2026-02-14 05:49:16 -06:00
2133e2d057 refactor: Improve voice and response modals UX
- Center both modals with dark backdrop and blur effect
- Make voice modal larger (420px) with bigger record button
- Make response modal larger (540px) with bigger text (18px)
- Remove auto-dismiss from bubbles - manual dismiss only
- Add backdrop click to close response modal
- Remove unused bottom sheet code from FloatingVoice
- Add touch protection CSS to prevent text selection
- Clean up mobile-specific variables no longer needed
2026-02-14 05:07:27 -06:00
f9b5ad3db6 feat: Push-to-talk on voice FAB button
- Hold FAB to open panel and start recording immediately
- Release to stop recording and send after 1s buffer
- Orange pulsing animation when PTT active
- PTT also works on record button inside modal
- Added stopRecordingAndSend exposed method
2026-02-14 04:51:50 -06:00
12a95c6206 fix: Mobile terminal improvements
- Add auto-reconnect when WebSocket disconnects (up to 10 attempts)
- Add disconnected/connecting overlay with visual feedback
- Add scroll buttons (up/down/end) for mobile
- Add refresh button to reconnect or redraw terminal
- Make all virtual keys bigger and more clickable
- Enable touch scrolling in terminal viewport
- Fix Whisper connection: don't connect when server not ready
2026-02-14 04:35:46 -06:00
edc96da4ed fix: TypeScript error in terminalStyle computed 2026-02-14 03:57:30 -06:00
759de1e010 feat: Add mobile support for terminal and voice components
- Terminal: bottom sheet with drag handle and snap points (20%, 55%, 85%)
- Terminal: virtual keys bar (arrows, Esc, Tab, Ctrl+C, Alt+M)
- Terminal: keyboard detection adjusts position above virtual keyboard
- Terminal: touch drag support for mobile/tablet devices
- Voice: bottom sheet behavior matching terminal
- Voice: auto-detect supported audio format (webm/mp4/aac)
- Voice: improved audio constraints for mobile quality
- Both: detect touch devices up to 1024px width
2026-02-14 03:52:54 -06:00
902029c805 feat: Add HTTPS/Traefik support with centralized endpoints
- Create traefik/agent-ui.yml with full routing config for domain z590.nucleoriofrio.com
- Add frontend/src/config/endpoints.ts for automatic HTTP/HTTPS detection
- Update all hardcoded localhost URLs to use relative paths
- WebSocket connections auto-detect wss:// vs ws:// based on page protocol
- Configure path-based WebSocket routing (/ws/terminal, /ws/mcp, /ws/status, /ws/whisper)
- Add commented IP whitelist middleware for future security
2026-02-14 03:20:51 -06:00
47f5524416 feat: Introduce Nucleo as the main AI agent identity
- Add Nucleo atom logo with animated orbiting electrons
- Redesign FAB with glassmorphism effect and purple gradient
- Add connection indicator (green dot) when terminal is open
- Update FloatingTerminal header with Nucleo branding
- Add PermissionRequest hook support with red alert animation
- Document Nucleo in README with visual states table
- Create official Nucleo logo SVG in docs/
2026-02-14 02:56:50 -06:00
950572046e feat: Auto-save voice recordings for model training
- Add /api/recordings endpoint with full CRUD operations
- Create voice_recordings SQLite table for metadata
- Save audio files to server/recordings/ as .webm
- Store transcription, duration, microphone name, file size
- Auto-save on each Whisper recording completion
2026-02-14 01:56:53 -06:00
5da6179f75 feat: Add microphone selection and audio playback to FloatingVoice
- Add microphone device enumeration and selector dropdown
- Show current microphone name with click-to-change UI
- Microphone selection only available with Whisper GPU mode
- Add audio playback button to replay last recorded audio for debugging
- Improve dropdown animations with staggered item transitions
- Fix FloatingTerminal token request to type character by character
2026-02-14 01:47:08 -06:00
5be0fb91ab fix: Improve Whisper server startup with async polling and reduce logs
- Make server startup async to avoid Bun's 10s timeout
- Add frontend polling to detect when server is ready
- Use PowerShell Get-NetTCPConnection for reliable port detection
- Add starting state to prevent multiple simultaneous starts
- Reduce verbose logging, keep only essential info
- Add dev-dist and nul to gitignore
2026-02-14 01:03:02 -06:00
9f1e10b8d5 feat: Add typing animation to voice transcription
- Text appears letter by letter (15-25ms per character)
- Blinking cursor shows while text is animating
- Animation continues from last position for new chunks
- Smooth visual feedback for transcription progress
2026-02-14 00:28:26 -06:00