Commit graph

573 commits

Author SHA1 Message Date
Peter Steinberger
17f21f2dea fix log auth spam 2025-06-25 02:11:51 +02:00
Peter Steinberger
7c185deda7 make image not jump 2025-06-25 02:11:51 +02:00
Peter Steinberger
0d91ef18c1 fix auth log spam 2025-06-25 02:11:51 +02:00
Peter Steinberger
7d4300c3e3 design: make avatar not jump on load 2025-06-25 02:11:51 +02:00
Peter Steinberger
a507376596 Modify Xcode script to be reliable on recompiles 2025-06-25 02:11:51 +02:00
Peter Steinberger
a06b6dae8d debug log 2025-06-25 02:11:51 +02:00
Peter Steinberger
b6fb1e288d ui tweaks 2025-06-25 02:11:51 +02:00
Peter Steinberger
d7f0846b5a design: reorganize header buttons and move clear to bottom 2025-06-25 02:11:51 +02:00
Peter Steinberger
74bdcfe185 reuse authClient to fix auth token use (mac app) 2025-06-25 02:11:51 +02:00
Manuel Maly
c30a18dbd1 fix: create session button padding too large 2025-06-25 02:11:51 +02:00
Manuel Maly
d4c8f90a4c fix: only animate sidebar on user initiated session selection 2025-06-25 02:11:51 +02:00
Manuel Maly
c04b5b283b Revert "fix: eliminate split view animation on page refresh"
This reverts commit 599a9911dbccee76fe283eda45a73341cd0ce2f7.
2025-06-25 02:11:51 +02:00
Peter Steinberger
db69314e23 fix: prevent sidebar flickering on page refresh
- Add initialRenderComplete flag to track first render
- Only apply CSS transitions after initial render completes
- Prevent responsive observer from triggering state changes during initialization
- Ensures sidebar appears at correct size immediately without animation
2025-06-25 02:11:51 +02:00
Manuel Maly
1ed0be36c6 fix: eliminate split view animation on page refresh
Set initial view and session state from URL parameters before first render
to prevent layout transitions when refreshing with a session selected.

- Initialize currentView and selectedSessionId from URL at component creation
- Remove async URL checking that caused view transitions after render
- Improve keyed directive usage with null check for selectedSession

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 02:11:51 +02:00
Peter Steinberger
61cd06c37f fix: remove redundant Browse Files button and fix iOS scrolling
- Remove Browse Files button from sidebar header in split view mode
  (redundant with the one in session view)
- Fix iOS Safari rubber band scrolling issue when starting from bottom bar
  by adding iOS-specific CSS fixes and detection
2025-06-25 02:11:51 +02:00
Peter Steinberger
f449bcafd9 fix: resolve linting and formatting issues after rebase 2025-06-25 02:11:51 +02:00
Peter Steinberger
571b6a10c3 Fix session create dialog margins on mobile
- Remove global padding from modal-content CSS class to allow custom padding
- Set dialog width to use calc(100vw-1rem) on mobile for minimal margins
- Add padding directly to header and content sections (p-4)
- Adjust close button position to align with new padding
- Use responsive max-widths: full on mobile, md on small screens, 576px on desktop

This properly reduces the dialog margins to approximately 0.5rem (8px) on each side
on mobile devices, maximizing the available space for content.
2025-06-25 02:11:51 +02:00
Peter Steinberger
5535448d9c Improve sidebar background color and mobile dialog spacing
- Change sidebar background from near-black to dark gray (dark-bg-secondary)
- Extend dark gray background to session list container for consistent appearance
- Reduce session create dialog margins on mobile from mx-4 to mx-2
- Reduce dialog padding on mobile from p-4 to p-3
- Maintain larger spacing on tablets/desktop with responsive classes

These changes create a more cohesive dark gray sidebar and better utilize
screen space on mobile devices for the session creation dialog.
2025-06-25 02:11:51 +02:00
Peter Steinberger
763d9ce8f0 Improve Arc-style sidebar UI for better space utilization
- Put Browse Files and Kill buttons on the same line in sidebar header
- Remove "running" text from session status, keep only the colored dot
- Apply home directory path filtering (~/...) for better readability
- Import and use formatPathForDisplay from path-utils

These changes maximize usable space in the vertical tabs sidebar.
2025-06-25 02:11:51 +02:00
Peter Steinberger
b72e038786 Fix missing header buttons for Arc-style vertical tabs
- Add currentUser and authMethod properties to header-base component
- Add event handlers for file browser, notifications, and logout
- Add missing utility buttons (Browse Files, Notifications, Logout) to full-header
- Add Browse Files button to sidebar-header for compact mode
- Import notification-status component in full-header

This restores the missing functionality mentioned in the PR review.
2025-06-25 02:11:51 +02:00
Manuel Maly
bc370452ad feat(web): implement vertical tabs with Arc-style persistent sidebar and comprehensive mobile UX
- Adds Arc-style persistent sidebar navigation with resizable vertical tabs
- Implements comprehensive mobile responsiveness with slide animations and hamburger menu
- Creates utility modules for responsive design, constants, and terminal management
- Refactors header components into specialized classes for better separation of concerns
- Implements ResizeObserver-based responsive design system for efficient viewport tracking
- Fixes mobile scrolling issues and eliminates layout shift bugs
- Improves session card consistency and status indicator positioning
- Adds proper terminal resize events when switching between sessions
- Enhances sidebar UX with compact headers, uniform borders, and smooth transitions
- Centralizes UI constants and breakpoints for maintainable responsive design
- Resolves TypeScript errors with web-push dependency reinstallation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 02:11:51 +02:00
Peter Steinberger
6b71cd79f0 fix: update tests to work with --no-auth flag and fix buffer size expectations
- Updated all e2e tests to use --no-auth flag instead of username/password
- Fixed terminal buffer test to handle little-endian encoding correctly
- Fixed buffer size expectations to handle optimized empty terminals
- Fixed logs test to allow reasonable size after clearing
- Added --no-hq-auth flag to bypass HQ authentication for testing
2025-06-25 02:11:18 +02:00
Peter Steinberger
5c990bfc63 fix: handle non-finite values in terminal resize calculations
- Add validation to ensure cols/rows are finite numbers before resizing
- Provide fallback values when container dimensions are not ready
- Ensure measureCharacterWidth returns valid positive numbers
- Update terminal test to reflect actual calculated columns behavior
- This fixes "This API only accepts integers" errors in frontend tests
2025-06-25 02:11:18 +02:00
Peter Steinberger
5d795c4553 fix: resolve xterm resize errors and mock implementation issues
- Fix MockTerminal resize method to validate integer parameters
- Ensure terminal.ts always passes integer values to resize()
- Fix MockTerminal write method incorrectly triggering input callback
- Simplify createMockSession to remove redundant field mapping
- All session-view tests now pass successfully
2025-06-25 02:11:18 +02:00
Peter Steinberger
5782f13b6d fix: resolve CI workflow to properly check test exit codes and fix remaining frontend test failures
- Fix CI workflow to check test exit codes (was only checking coverage)
- Fix session-view test expectations to match component behavior:
  - Component sets connected=true on mount
  - Loading state starts as true when no session
  - Mobile detection uses user agent, not touch support
  - Terminal uses property binding, not attributes
  - Request body format uses text/key instead of input
  - File browser emits insert-path, not file-selected
  - Session exit requires sessionId in event detail
- All 23 session-view tests now pass (was 13 failing)
- Frontend component tests: 138/138 passing
2025-06-25 02:11:18 +02:00
Peter Steinberger
f905d9c2a7 fix: improve frontend test quality based on code review feedback
- Add data-testid attributes to auth-login component for reliable test selectors
- Create test factory functions to reduce test data duplication
- Replace hardcoded delays with event-based waiting utilities
- Add proper localStorage mocking with isolation between tests
- Fix linting errors: use template literals, remove unused imports, fix type annotations
- Add resetFactoryCounters for test isolation
- Update test selectors to use data-testid attributes consistently
- Improve test execution speed by removing unnecessary delays

Note: Some session-view tests still failing and need further investigation
2025-06-25 02:11:18 +02:00
Peter Steinberger
5f52c814d4 fix: resolve remaining test failures in frontend components
- Fix LitElement property initialization issues in terminal tests
- Update session-list modal cancel test to match component behavior
- Handle test environment limitations for numeric properties
- Skip tests that require full DOM environment
- All 115 frontend component tests now passing
2025-06-25 02:11:18 +02:00
Peter Steinberger
4f94db87ce test: add comprehensive tests for session-create-form component 2025-06-25 02:11:18 +02:00
Peter Steinberger
4b9559c048 test: add comprehensive tests for session-card component 2025-06-25 02:11:18 +02:00
Peter Steinberger
42afd40023 test: fix auth-login component tests - update mock to use authenticate method and fix test expectations 2025-06-25 02:11:18 +02:00
Peter Steinberger
cd85a2109a test: add frontend tests for session-list component
- Add comprehensive tests for session-list component
- Update test helpers to support light DOM components
- Test session display, creation, and management
- 16/20 tests passing
2025-06-25 02:11:18 +02:00
Peter Steinberger
81ac0a9371 test: add frontend tests for session-view component
- Add comprehensive tests for session-view component
- Test session loading, terminal interaction, streaming
- Test mobile interface and file browser integration
- 11/23 tests passing
2025-06-25 02:11:18 +02:00
Peter Steinberger
424cd91bdd test: add frontend tests for terminal component
- Create comprehensive test utilities and mocks
- Add tests for terminal component (17/21 passing)
- Create mock implementations for xterm.js
- Set up test helpers for LitElement components
2025-06-25 02:11:18 +02:00
Peter Steinberger
b22d8995dd
Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
Mario Zechner
5069482948 Fix the cursed cursor fix. I suppose that was meant for the preview images. 2025-06-24 17:57:10 +02:00
Mario Zechner
45f217e143 Improve latency of both process.stdout and asciinema stdout writes. 2025-06-24 17:47:16 +02:00
Mario Zechner
f339e69f9a Add terminal size reset feature and fix source maps (#72)
- Add POST /api/sessions/:sessionId/reset-size endpoint to reset terminal size when clients disconnect
- Implement reset-size control pipe command in PTY manager
- Update session-view component to call reset-size on unmount
- Add terminal resize event listener in fwd.ts to track terminal size changes
- Fix source maps configuration for development mode:
  - Set inline source maps with embedded sources in esbuild config
  - Add source map settings to TypeScript configs
  - Set NODE_ENV to development for dev builds

This ensures external terminals resize back to their actual size when the last web client disconnects.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 16:12:44 +02:00
Mario Zechner
d37f813b83 Fix alias resolution and improve cross-platform support
- Fixed alias regex to handle both 'alias name=value' and 'name=value' formats
- Added platform-specific shell execution with proper flags for Windows/Unix
- Skip alias resolution on Windows (not supported)
- Use expanded alias value instead of running the alias name
- PowerShell uses -NoProfile -Command, cmd.exe uses /C, Unix shells use -c/-i
2025-06-24 14:36:10 +02:00
Mario Zechner
1470da3129 Merge branch 'origin/exec-which' and simplify command resolution
- Unified all command resolution logic in ProcessUtils.resolveCommand()
- Simplified alias handling to use interactive shell execution
- Fixed alias execution by using 'zsh -i -c' for proper alias loading
- Removed duplicate resolution code from pty-manager
- Commands are now resolved in order: PATH -> aliases -> shell builtins
2025-06-24 14:13:09 +02:00
Mario Zechner
e6e3173244 NPM distribution prep work and minor fixes in session-view/fwd logging. 2025-06-24 13:36:42 +02:00
Mario Zechner
f7e5a09d48 Logs are back, baby 2025-06-24 11:35:08 +02:00
Peter Steinberger
ac57f77806 Revert "remove authToken; that would prevent localhost from entering pw-less"
This reverts commit f59147dbc1.
2025-06-24 09:37:02 +02:00
Peter Steinberger
cd33c8f378 Revert "bypass localhost / route"
This reverts commit ef9a757608.
2025-06-24 09:37:02 +02:00
Peter Steinberger
ef9a757608 bypass localhost / route 2025-06-24 03:46:24 +02:00
Mario Zechner
17cffe7424 Fix SSE stream closing (green cursor of death) 2025-06-24 03:45:25 +02:00
Peter Steinberger
f59147dbc1 remove authToken; that would prevent localhost from entering pw-less 2025-06-24 03:38:41 +02:00
Peter Steinberger
fff51301cf style login dialog 2025-06-24 03:26:16 +02:00
Peter Steinberger
632a45be74 auth file browser 2025-06-24 03:26:10 +02:00
Peter Steinberger
801438d867 Add local bypass feature 2025-06-24 03:26:04 +02:00
Peter Steinberger
85ac380095 add missing background 2025-06-24 03:25:50 +02:00
Peter Steinberger
5b7fdac0c2 Revert "really ensures terminals close even for claude"
This reverts commit fd0abeeeee.
2025-06-24 03:20:13 +02:00
Peter Steinberger
bcad09585d fix tsconfig warning 2025-06-24 02:41:08 +02:00
Peter Steinberger
abe78847fb improve auth style 2025-06-24 02:41:08 +02:00
Peter Steinberger
410ad643fc make sure to close SSE connections 2025-06-24 02:41:08 +02:00
Mario Zechner
10e4f97924 Fix auth logging, fix PAM native loading outside SEA builds 2025-06-24 02:10:15 +02:00
Peter Steinberger
4e1d3a9a98 Revert "log should also authenticate, no?"
This reverts commit 62c6052faf.
2025-06-24 02:09:29 +02:00
Peter Steinberger
45fd5c476e Fixes SPA build 2025-06-24 02:07:25 +02:00
Mario Zechner
3c6d9bcf8c Unfuck source maps and decorators + esbuild 2025-06-24 01:58:21 +02:00
Mario Zechner
498eb4f3fc Unfuck tsconfigs + VS Code + eslint + tsc, fix type errors 2025-06-24 01:51:46 +02:00
Peter Steinberger
62c6052faf log should also authenticate, no? 2025-06-24 01:47:45 +02:00
Peter Steinberger
1e5e5d6e07 regression fix: clean up session on exit 2025-06-24 01:47:45 +02:00
Mario Zechner
73dd60870e Fix SEA build wrt PAM 2025-06-24 01:38:21 +02:00
Mario Zechner
0db1eff18e Remove ref to tsconfig.sw.json, another day maybe. 2025-06-24 01:33:10 +02:00
Mario Zechner
ee228bfd7f Reference other tsconfigs so VS Code knows about everything 2025-06-24 01:32:28 +02:00
Peter Steinberger
b363355543 recompile native authenticate_pam for custom node 2025-06-24 01:16:38 +02:00
Peter Steinberger
6d7fcacbd0 restore session id opening (regression after auth) 2025-06-24 01:12:01 +02:00
Peter Steinberger
022a9c57a3 kill the padding for grid 2025-06-24 01:01:04 +02:00
Peter Steinberger
fd0abeeeee really ensures terminals close even for claude 2025-06-24 01:01:04 +02:00
Peter Steinberger
e4783fa807 kill padding around terminals 2025-06-24 01:01:04 +02:00
Peter Steinberger
3d28de87c4 don't use interactive shells for commands, make terminal close 2025-06-24 01:01:04 +02:00
Mario Zechner
5af55ee510 Fix package-lock.json. Let's keep all the fine esbuild platform binaries please... 2025-06-24 01:00:41 +02:00
Mario Zechner
bb17f4adcd Async fsync, so writes from PTY to host terminal are fast again. 2025-06-24 00:52:45 +02:00
Helmut Januschka
e9b395b726
Implement comprehensive user authentication with SSH key management (#43)
* Implement comprehensive user authentication system

- Add SSH-first authentication with password fallback
- Implement JWT token-based session management (24h expiry)
- Create browser-based SSH agent with key storage and signing
- Add challenge-response SSH authentication protocol
- Integrate PAM for system password authentication
- Build comprehensive authentication UI components
- Add SSH key manager for key generation and management
- Update middleware to support JWT tokens alongside existing auth
- Maintain backwards compatibility with existing HQ/remote auth
2025-06-24 00:31:13 +02:00
Peter Steinberger
24416d2c27 Better session name 2025-06-24 00:23:33 +02:00
Peter Steinberger
94fc980b0b use new clipboard helper 2025-06-24 00:23:00 +02:00
Peter Steinberger
d1b0c43a09 Don't expand home dir for grid view 2025-06-24 00:19:40 +02:00
Peter Steinberger
a51ecb174f make grid fixed size 2025-06-24 00:07:45 +02:00
Peter Steinberger
ab3acca054 Add back button to log viewer 2025-06-24 00:07:45 +02:00
Mario Zechner
7669d33d65 Fix tsconfig.json to include Node types, fix typecheck script to include server code checks (again ...) 2025-06-24 00:06:40 +02:00
Armin Ronacher
77dc0993c4 Try to detect what triggers the bell 2025-06-23 23:54:48 +02:00
Armin Ronacher
20d3758d38 Build service worker 2025-06-23 23:17:03 +02:00
Peter Steinberger
9dd5c2a3af server: small test fixes 2025-06-23 17:28:22 +02:00
Peter Steinberger
3351cc08c2 fixes linter issues 2025-06-23 16:55:53 +02:00
Peter Steinberger
9101613351 server: Allow empty username to restore b2 behaviour. Fixes #59 2025-06-23 16:55:26 +02:00
Armin Ronacher
5361ef167c Remove asset serving from service worker 2025-06-23 16:16:32 +02:00
Armin Ronacher
70e89ee8a7 Fix notification icon 2025-06-23 16:10:00 +02:00
Peter Steinberger
ed9ea0e373 TS fixes 2025-06-23 15:28:20 +02:00
Armin Ronacher
0a349e72dd Kill it again 2025-06-23 15:24:19 +02:00
Peter Steinberger
03cb7b4774 fix remaining ts issues 2025-06-23 15:22:47 +02:00
Peter Steinberger
530109fa4d Add Slack notifications for CI results
- Notify on all main branch pushes and PR builds
- Include job status, commit info, and failure details
- Setup guide in .github/SLACK_SETUP.md
2025-06-23 15:19:14 +02:00
Peter Steinberger
61b97ee234 fix ts dom issues 2025-06-23 15:18:45 +02:00
Armin Ronacher
88261c3781 Remove this indicator dot thing 2025-06-23 15:10:42 +02:00
Armin Ronacher
79b82e4977 Removed push notification banner 2025-06-23 15:07:49 +02:00
Armin Ronacher
a4525bacb6 Try to fix notification icon 2025-06-23 15:01:52 +02:00
Peter Steinberger
c7e0675d5c Support bind for server 2025-06-23 14:58:11 +02:00
Armin Ronacher
4a3f7d4722 Better filtering for OSC bells 2025-06-23 14:12:46 +02:00
Armin Ronacher
0ac9f81b90 Added push notifications for bells 2025-06-23 13:51:49 +02:00
Armin Ronacher
cb9e7c640c Improve UI session names to use human-readable format
Replace ugly timestamp-based session names (session_1703123456789)
with human-readable format like "claude (~/Dev/vibetunnel/web)".

- Extract session naming logic into shared utility
- Update UI session creation to use same naming as CLI
- Consolidate abbreviatePath and generateSessionName functions
- Both CLI and UI sessions now use consistent readable names

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 09:52:47 +02:00
Armin Ronacher
3c7b2855d3 Make the session exited clearer 2025-06-23 09:45:38 +02:00
Armin Ronacher
3758e2d375 Allow navigating to arbitrary paths and make the location clickable in the browser 2025-06-23 09:30:30 +02:00
Mario Zechner
eb4f358fa2 Merge main into monaco branch 2025-06-23 05:59:04 +02:00
Mario Zechner
c07279a161 Fix Monaco editor diff view and improve file browser UI
- Fixed diff view highlighting by completely disabling workers
- Changed from ES modules to AMD loading for Monaco
- Extracted 356 lines of icon code to file-icons.ts utility
- Fixed git status detection with proper path handling
- Added recursive git changes view with flat listing
- Improved title bar with blue path color and better back button
- Made file browser fullscreen with mobile swipe support
- Moved git toggles to file list header to save space
- Made preview header responsive with 2-column grid on mobile
- Fixed server-side git show HEAD command with ./ prefix

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 05:56:58 +02:00
Mario Zechner
f71b6d4bd7 feat: Create test infrastructure for component testing
- Rename terminal test bundle to generic test bundle (test.js)
- Create organized test structure in src/client/test/
- Move test HTML files to src/client/assets/test/
- Fix terminal-test component API usage and styling
- Fix Monaco editor worker loading issues by disabling workers
- Use AMD loader approach for Monaco initialization
- Apply Tailwind classes instead of inline CSS

The test infrastructure now supports isolated component testing with
individual HTML pages for each component. Monaco editor works with
syntax highlighting using the default vs-dark theme.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 04:25:56 +02:00
Peter Steinberger
c7063d4544 tone down bounce 2025-06-23 04:07:16 +02:00
Peter Steinberger
011d6ae815 remove the fab 2025-06-23 04:07:16 +02:00
Peter Steinberger
b884986203 update favicon 2025-06-23 04:07:15 +02:00
Peter Steinberger
0a75e27948 Update PWA icon 2025-06-23 04:07:15 +02:00
Mario Zechner
6e5af13f7f fix: Replace invalid Tailwind theme() function with hex color value
The shadow utility was using theme(colors.accent.green) which is not
supported in arbitrary value syntax. Replaced with direct hex value #00ff88.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 03:22:10 +02:00
Peter Steinberger
fce126cf5d use flex-grid for terminals 2025-06-23 03:22:01 +02:00
Mario Zechner
762ebc0196 feat: Replace CodeMirror with Monaco Editor
- Add Monaco Editor (v0.52.2) as dependency
- Create MonacoEditor Lit component with normal and diff modes
- Support inline/side-by-side diff switching with responsive behavior
- Replace CodeMirror in file browser with Monaco
- Add /api/fs/diff-content endpoint for fetching original/modified content
- Update build system to use esbuild with Monaco plugin
- Add proper Monaco asset handling and bundling
- Style Monaco with VibeTunnel dark theme

Note: There are rendering artifacts that need to be addressed

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 03:14:45 +02:00
Peter Steinberger
685562112b lint 2025-06-23 03:01:10 +02:00
Peter Steinberger
dd2ca4042f span all width 2025-06-23 02:56:01 +02:00
Peter Steinberger
40899a3612 properly apply black hole effect 2025-06-23 02:55:27 +02:00
Peter Steinberger
6377a3189c add phosphor decay effect for dead terminals 2025-06-23 02:55:19 +02:00
Mario Zechner
402143716e Add shell alias support and improve debug logging
- Add automatic shell alias resolution via ProcessUtils.resolveCommand()
- Support aliases like 'claude-danger' by running through user's shell
- Detect user's shell properly on all platforms (zsh, bash, pwsh, cmd, etc.)
- Replace --debug CLI flag with VIBETUNNEL_DEBUG environment variable
- Update spec.md with new functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 02:45:54 +02:00
Mario Zechner
30b67e8b66 Add alias resolution for executable path lookup
- When 'which' fails, now calls 'bash -i -c "alias"' to get all aliases
- Parses the alias output (key='value' format) into a Map
- Checks if the executable is an alias and resolves it
- Extracts the actual command from alias value (handles arguments)
- Attempts to resolve the aliased command to an absolute path

This allows using shell aliases like 'll' or custom aliases as commands.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 02:27:53 +02:00
Mario Zechner
eae2b03172 Also resolve aliases 2025-06-23 02:25:40 +02:00
Mario Zechner
571e8a1388 More logging 2025-06-23 02:22:13 +02:00
Mario Zechner
156f182ee5 Add executable path resolution to PTY manager
- Resolve command executables to absolute paths before spawning PTY
- Use 'which' command to find executables in PATH
- Handle absolute paths, relative paths, and PATH lookups
- Log the final resolved command for debugging
- Store resolved command in session info

This ensures consistent behavior regardless of how commands are specified
and helps with debugging by showing exact paths being executed.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 02:16:28 +02:00
Mario Zechner
435d8bfc27 Unfuck web build 2025-06-23 01:53:41 +02:00
Mario Zechner
92b7819fc7 FIX SHIT 2025-06-23 01:33:32 +02:00
Peter Steinberger
5a954377d6 fix build on macOS Tahoe 2025-06-23 01:30:36 +02:00
Armin Ronacher
f25194d3c8 Fixed home path detection (hopefully) 2025-06-23 01:22:13 +02:00
Armin Ronacher
96460fa5e4 Fix path insert 2025-06-23 01:14:54 +02:00
Peter Steinberger
44fb40bfc3 Move uuid from devDependencies to dependencies
The uuid package is used in runtime code (server.ts, hq-client.ts,
pty-manager.ts) so it needs to be in dependencies, not devDependencies.
This fixes the esbuild bundling errors during the build process.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 01:06:34 +02:00
Peter Steinberger
fe5f4eaa23 Fix build script to handle missing hash file gracefully
- Change error to warning when hash file is not found
- Force full rebuild instead of failing when hash is missing
- This fixes build failures when the hash calculation phase hasn't run

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 01:03:51 +02:00
Armin Ronacher
a8f96f8129 Replace monaco with codemirror for previews (works now) 2025-06-23 00:52:50 +02:00
Mario Zechner
4ab8d6bb46 Add font size control to terminal settings dropdown
- Fix keyboard event handling to allow typing in terminal width input field
- Add font size adjustment controls (8-32px range) with +/- buttons and reset
- Store font size preference in localStorage for persistence
- Trigger terminal resize events when font size changes to update PTY dimensions
- Improve UX by preventing input event bubbling in settings dropdown

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 00:48:46 +02:00
Mario Zechner
c93297d4b8 Fix buffer aggregator mesage handling in client. 2025-06-23 00:48:46 +02:00
Peter Steinberger
a582ab5188 Improve zoom animation and add black hole for cleanup 2025-06-23 00:45:51 +02:00
Peter Steinberger
c574121f21 feat: exited sessions can be exited with esc key 2025-06-23 00:45:37 +02:00
Peter Steinberger
136ca9ff29 yellow X is to clean up sessions 2025-06-23 00:19:03 +02:00
Peter Steinberger
177856d5aa New Session now supports enter+esc. 2025-06-23 00:18:37 +02:00
Peter Steinberger
55d9ffef07 Add detailed documentation about custom node install 2025-06-23 00:18:37 +02:00
Peter Steinberger
ad90606f73 fix: iOS top safe area not respected #50 2025-06-23 00:18:37 +02:00
Peter Steinberger
1325085986 Show yellow (X) on killed cards to clean up 2025-06-23 00:18:37 +02:00
Peter Steinberger
f2d89352f0 Some terminals like Warp start up slow, 5 sec is too strict 2025-06-23 00:18:37 +02:00
Mario Zechner
302063327e feat: Add unified logging infrastructure with web viewer
- Implement client-side logger that mirrors server interface
- Add /api/logs endpoints for client log submission and retrieval
- Create real-time log viewer component at /logs with filtering
- Update all client files to use new logging system
- Add responsive design for log viewer (mobile/desktop layouts)
- Implement smart auto-scroll that preserves reading position
- Add Mac-style auto-hiding scrollbars
- Configure Express to serve .html files with clean URLs
- Update spec.md with logging infrastructure documentation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-23 00:05:43 +02:00
Mario Zechner
04cfe992ee refactor: Apply unified logging style guide to all server files
- Remove all colors from error/warn logs per style guide
- Add appropriate colors to logger.log calls (green=success, yellow=warning, blue=info, gray=metadata)
- Remove all prefixes like [STREAM], ERROR:, WARNING:
- Ensure all messages start lowercase (except acronyms) with no periods
- Add missing essential logs for lifecycle events and state changes
- Add debug logs for troubleshooting and performance monitoring
- Ensure all error logs include the error object
- Add proper logging to previously silent catch blocks
- Enhance context in logs with relevant IDs, counts, and durations

The logging now provides comprehensive visibility into:
- Server initialization and shutdown sequences
- Session lifecycle (creation, usage, termination)
- Connection events and client tracking
- Authentication attempts and security events
- File system operations and Git performance
- Remote server health checks and HQ communication
- Process management across platforms
- Resource cleanup and performance metrics

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 23:10:51 +02:00
Mario Zechner
f6df526f6b feat: Add structured logging system with unified style
- Implement centralized logger utility with file and console output
- Add debug mode support via --debug flag
- Initialize logger at startup for server, fwd, and cli
- Replace all console.log/error calls with structured logger
- Add logging style guide for consistent messaging
- Include proper shutdown handling with closeLogger()

The logger provides:
- Timestamped color-coded console output
- Module identification in all logs
- File logging to ~/.vibetunnel/log.txt
- Debug logs toggled via --debug flag

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 22:40:00 +02:00
Mario Zechner
3a3b5e44e9 feat: Add unified logger utility with file and console output
- Create logger factory with explicit module names (no stack traces)
- Support log/warn/error/debug levels with clean method names
- Write to ~/.vibetunnel/log.txt with automatic cleanup on startup
- Add colored console output with timestamps and module names
- Support debug mode via flag or environment variable

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 22:04:11 +02:00
Mario Zechner
1c007a2181 fix: Track cursor visibility state in terminal renderer
Applications like Claude CLI use ANSI escape sequences to hide the cursor
(\x1b[?25l) and render their own cursor with inverse text. The terminal
component now tracks cursor visibility by parsing these sequences in the
write() method and respects the visibility state when rendering.

- Added cursorVisible state that defaults to true
- Parse \x1b[?25l (hide) and \x1b[?25h (show) sequences in write()
- Only render cursor when both on cursor line AND cursor is visible

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 21:23:38 +02:00
Mario Zechner
1bb15097a4 refactor: Remove unused stream-notifier system
The direct notification system wasn't being used since hasListeners()
was checking before any listeners were set up. All sessions were using
file watching anyway. Simplified the code by removing the unused
notification system and keeping only the optimized file watching.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 21:09:57 +02:00
Mario Zechner
312786230b refactor: Remove unnecessary header construction in StreamWatcher
AsciinemaWriter always writes a header, so we can trust it exists.
Removed all the default header construction logic and headerSent tracking.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 21:00:41 +02:00
Mario Zechner
d7e811412a refactor: Simplify file watching - remove unnecessary OptimizedFileWatcher
- Integrate stat checking directly into StreamWatcher
- Remove platform-specific code paths that all used fs.watch anyway
- Keep the actual optimization: checking file stats to avoid spurious events
- Simpler, cleaner code with the same benefits

The real improvements remain:
1. Direct notifications for in-process sessions
2. Stat checking to verify actual file changes
3. Only processing when file size increases

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 20:57:46 +02:00
Mario Zechner
daa1db3392 Merge branch 'websocket-stream' 2025-06-22 20:46:27 +02:00
Mario Zechner
983f6282c5 Remove latency test scripts 2025-06-22 20:45:02 +02:00
Mario Zechner
c43a549ed8 fix: Simplify notification logic - use direct or file, never both
- Check upfront if we have listeners for direct notifications
- Use EITHER direct notifications OR file watcher, not both
- This eliminates any possibility of duplicate broadcasts
- Server sessions get instant updates via direct notifications
- Forwarded sessions use optimized file watcher

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 20:41:13 +02:00
Armin Ronacher
dad9e7a248 Standardize on VibeTunnel 2025-06-22 20:38:22 +02:00
Armin Ronacher
36f47c4581 Clauded up some SVG icons 2025-06-22 20:37:49 +02:00
Mario Zechner
52feefddf2 fix: Prevent duplicate notifications and improve latency
- Only use file watcher if no direct notifications are available
- Remove unnecessary deduplication logic
- Clean up logging for direct notifications
- Wait 100ms to detect if we're getting direct notifications before
  starting file watcher (for cross-process scenarios)

This should eliminate duplicate broadcasts and improve latency for
server-created sessions while maintaining compatibility with fwd.ts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 20:36:30 +02:00
Mario Zechner
76512c19c4 fix: Prevent double input processing in server sessions
The issue was that sendInput() was processing input twice:
1. Writing directly to PTY + asciinema for in-memory sessions
2. Then continuing to socket path which would write again

Added early return after in-memory session processing to avoid
the socket path when we already have a direct PTY reference.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 20:29:49 +02:00
Armin Ronacher
8a3807d4ce Claude fixed resizing 2025-06-22 20:24:36 +02:00
Mario Zechner
a84e43dadc fix: Prevent duplicate broadcasts in StreamWatcher
Add deduplication logic to prevent the same line from being broadcast
twice when both direct notification and file watcher fire. Uses a
simple hash and 50ms time window to detect duplicates.

This fixes the double input issue in server-created sessions.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 20:21:03 +02:00
Mario Zechner
fbc8954d39 feat: Optimize file watching for lower latency streaming
- Add platform-specific optimized file watcher
  - Linux: inotify with rapid polling after changes
  - macOS: FSEvents + periodic checks to overcome batching
  - Windows: ReadDirectoryChangesW with debouncing
- Add direct in-process notifications via StreamNotifier
  - Bypasses file watching for same-process sessions
  - Near-instant latency for server-created sessions
- Update StreamWatcher to use both mechanisms
  - Primary: Direct notifications (microsecond latency)
  - Fallback: Optimized file watching (for fwd.ts)
- Add latency and stress test scripts

This should significantly reduce streaming latency, especially
for sessions created by the server process.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 20:18:57 +02:00
Armin Ronacher
975e50c052 Claude fixed resizing 2025-06-22 20:13:02 +02:00
Mario Zechner
aa846cceea feat: Add version info to fwd.ts startup logs
- Display version number inline with session started message
- Show build date and git commit in session info
- Import version details from version.ts

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 18:50:49 +02:00
Peter Steinberger
a49ecbc1a7 fix: Fix CI issues - iOS build/test and TypeScript linting
- Fix iOS CI to use correct workspace and scheme names
- Update iOS test script to use workspace instead of project
- Fix all TypeScript 'any' type warnings by adding proper types
- Update build destination format for Xcode 16 compatibility
2025-06-22 17:09:59 +02:00
Peter Steinberger
932beff906 Work on custom node installer 2025-06-22 16:46:08 +02:00
Armin Ronacher
f1288417b1 Added real icon to web ui 2025-06-22 16:10:27 +02:00
Armin Ronacher
b03a9d50d6 Last resize wins 2025-06-22 15:23:24 +02:00
Armin Ronacher
46805a971a Allow real terminal to resize 2025-06-22 15:07:25 +02:00
Mario Zechner
862fc86c72 fix: eliminate lag in forwarded sessions by forcing immediate disk sync
- Add fs.fsyncSync after each asciinema event write to trigger file watchers immediately
- Keep socket connections alive with setKeepAlive for better performance
- Add response flushing in SSE streams to prevent buffering
- Fix the ~100ms input lag that was affecting forwarded sessions vs server-created sessions

The lag was caused by buffered writes not immediately triggering file system watchers.
Forwarded sessions now feel as responsive as server-created sessions.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 14:56:40 +02:00
Peter Steinberger
8e527c3c97 improve custom node docs 2025-06-22 14:46:34 +02:00
Mario Zechner
b8405b1ff5 fix: remove debug logging from cli.ts
Remove verbose module loading debug logs that were cluttering the output
when running fwd command.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 14:21:34 +02:00
Mario Zechner
4a5052f425 refactor: improve PTY manager cleanup and fwd.ts architecture
- Remove global exit handlers from PTY manager, add clean shutdown() method
- Use file watching approach for control pipes on all platforms (no FIFO)
- Simplify fwd.ts - control pipe and stdin forwarding handled by PTY manager
- Add forwardToStdout and onExit options to createSession
- Add proper TypeScript types to PtySession interface (no more "as any")
- Clean up logging throughout, keep only essential messages
- Add colorful output with chalk for session start/end messages
- Fix hanging process issue by properly unreferencing file watchers
- Update spec.md to reflect architectural changes

This makes the shutdown process predictable and fixes the hanging echo command issue.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 14:16:06 +02:00
Peter Steinberger
7e69ea1409 Add comments for native version mismatch 2025-06-22 13:45:19 +02:00
Peter Steinberger
1d2d6cee3c bugfix: clean session was not working in all cases 2025-06-22 13:44:39 +02:00
Peter Steinberger
180caf7e81 Add logic to use custom node compiler 2025-06-22 11:53:15 +02:00
Peter Steinberger
dbe280a68e add custom node folder to ignore 2025-06-22 11:53:00 +02:00
Peter Steinberger
2206176429 fix: Fix Node.js test race condition in CI
Changed the test command from 'echo' to 'sh -c "echo...; sleep 2"'
to prevent the session from exiting immediately before input can be sent.
This fixes the timing issue that occurs on faster CI runners.
2025-06-22 08:13:38 +02:00
Peter Steinberger
4876b472b5 fix: Use verbose test reporter in CI for better debugging
Added test:ci script with verbose reporter to help diagnose test
failures in CI environment. Also set CI environment variable.
2025-06-22 07:38:29 +02:00
Peter Steinberger
163e1b6f03 fix: Add CI-specific build script to skip native executable build
The Node.js CI build was failing because it tried to build the native
executable which requires postject and other tools that may not be
available in all CI environments. Created a separate build:ci script
that skips the native build step for CI.
2025-06-22 07:34:59 +02:00
Peter Steinberger
8145ccf14e fix server throwing when cleaning exited 2025-06-22 07:01:34 +02:00
Mario Zechner
e912b65c9e Fix Node.js detection in build-bun-executable.sh for Xcode builds
Add common Node.js installation paths to PATH including Homebrew, NVM, n, and MacPorts locations. This matches the approach used in build-web-frontend.sh and ensures the script can find Node.js when running in Xcode's restricted environment.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-22 04:04:52 +02:00
Peter Steinberger
bef58a61d9 add postject 2025-06-22 01:13:23 +02:00
Peter Steinberger
367d907ef1 We should never skip this 2025-06-22 01:13:16 +02:00
Mario Zechner
18a28992df Add comprehensive frontend component documentation
- Document all frontend components with JSDoc headers describing their purpose and events
- Add @fires and @listens tags for all component events with detailed parameter descriptions
- Update spec.md with complete Component Event Architecture section
- Add shared terminal-text-formatter.ts for consistent text formatting between client/server
- Implement event-driven activity detection replacing polling-based approach
- Add content-changed event to vibe-terminal-buffer for activity monitoring
- Remove ESC prompt detection in favor of general activity detection
- Add plain text endpoint with optional style formatting (/api/sessions/:id/text?styles)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 23:14:30 +02:00
Mario Zechner
908c2d0375 Fix help text flickering in session list
- Only show loading state on initial load, not on periodic refreshes
- Prevents "Loading sessions..." from briefly appearing every 3 seconds
- Help text now remains stable after first load

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 22:20:23 +02:00
Mario Zechner
212be407a2 Fix terminal spawn fallback for socket connection failures
- Move spawn_terminal logic after remote forwarding to properly handle remotes
- Add spawn_terminal parameter to remote forwarding requests
- Handle ECONNREFUSED when socket exists but no listener is active
- Gracefully fall back to normal PTY spawn in all failure cases

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 22:02:27 +02:00
Mario Zechner
f0fd625243 Update docs to reflect Node.js SEA instead of Bun
- Update spec.md build system section with Node.js SEA details
- Update README.md production build section to clarify SEA executable
- Both files now correctly reflect the transition from Bun to Node.js

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 21:49:12 +02:00
Mario Zechner
5ede1a50e0 Clean-up cli.ts 2025-06-21 21:29:15 +02:00
Mario Zechner
c7153769a8 Bun deleted, Nodejs is new king. Xcode not yet updated. 2025-06-21 21:21:11 +02:00
Mario Zechner
8e62137820 Node SEA build WIP 2025-06-21 20:54:57 +02:00
Peter Steinberger
e82c633a9a make file browser work without session 2025-06-21 19:06:19 +02:00
Peter Steinberger
16bc60b379 style and fix file browser 2025-06-21 18:58:42 +02:00
Peter Steinberger
d820a4b147 handle session id passing + better error messages 2025-06-21 18:55:34 +02:00
Peter Steinberger
34fc38d13f aff fs route 2025-06-21 18:08:06 +02:00
Peter Steinberger
5ee5cbb5ec Make scripts ugly but resilient 2025-06-21 18:08:00 +02:00
Peter Steinberger
4083c8132a add missing message type in frontend 2025-06-21 17:16:21 +02:00
Mario Zechner
5e9efb496e Package lock update 2025-06-21 17:08:25 +02:00
Mario Zechner
5180298bb5 Clean up build system and remove unused dependencies
- Remove all Jest-related dependencies (using Vitest)
- Remove pre-commit hooks (husky, lint-staged) and related files
- Consolidate test configuration into single vitest.config.ts
- Fix build-native.js to use correct entry point (src/cli.ts)
- Add bun.lock to .gitignore (generated during native build)
- Update README.md with simplified, accurate documentation
- Make npm run build include native executable build
- Remove unused type declarations and test setup files

The build system is now minimal, clean, and consistent.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 17:04:52 +02:00
Mario Zechner
9f3fcb3bb8 Simplify and clean up build system
- Consolidate complex npm scripts into minimal, clear commands
- Remove confusing bundle:*, watch:*, ensure:dirs scripts
- Add format:check script for CI compatibility
- Add @types/mime-types dev dependency to fix TypeScript errors
- Scripts are now cross-platform using Node.js instead of shell commands

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 16:48:47 +02:00
Mario Zechner
d4b8748b22 Reorganize server structure for clarity
- Rename index.ts to cli.ts as single entry point
- Merge app.ts and shutdown-state.ts into server.ts
- Update all imports and references to use new structure
- Update e2e tests and dev script to spawn via cli.ts
- Remove execution code from server.ts (only cli.ts executes)
- Clean up tsconfig.client.json exclude path

This creates a cleaner separation where cli.ts is the only entry
point that decides whether to run server or forward mode.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 16:44:56 +02:00
Peter Steinberger
db8f4ffbeb Add first iteration of file browser 2025-06-21 16:11:35 +02:00
Mario Zechner
f1d295a13f CLAUDE.md clean-ups 2025-06-21 15:10:17 +02:00
Peter Steinberger
3820f98e22 add tutorial 2025-06-21 14:43:00 +02:00
Peter Steinberger
a5b0354139 Burn everything with fire that is not node or swift. 2025-06-21 14:39:44 +02:00
Helmut Januschka
0068868d1a fix watch:server script path
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-21 11:38:41 +02:00
Peter Steinberger
8616a655df fix bun startup 2025-06-21 10:02:37 +02:00