Commit graph

1347 commits

Author SHA1 Message Date
Clay Warren
aabbd57aa2
feat: add gemini quick start button (#128) 2025-06-29 21:54:14 +01:00
Manuel Maly
b2a395fcd8
feat: add gemini and review-pr slash commands (#138) 2025-06-29 21:53:33 +01:00
Chris Reynolds
13b98308c9
fix: remove double shell-wrapping for aliases in vt script (#132) 2025-06-29 21:52:52 +01:00
Zhiqiang ZHOU
7a49ea5e46 chore: new access option with cloudflare quick tunnel
Signed-off-by: Zhiqiang ZHOU <im@strrl.dev>
2025-06-29 21:34:09 +01:00
Peter Steinberger
e04e9dd7b5 docs: Add branching workflow rule to CLAUDE.md
Clarify that new branches/PRs should not be created automatically when already on a branch. PRs can contain multiple features as part of the workflow.
2025-06-29 20:33:57 +01:00
Peter Steinberger
7f3fbe164a
feat: Add build output filtering to remove non-actionable warnings (#136) 2025-06-29 19:36:40 +01:00
Peter Steinberger
39a5933f9f
Fix frontend log streaming in no-auth mode (#130) 2025-06-29 18:41:40 +01:00
Manuel Maly
099a5fb427
fix: scrolling on web mobile (#129) 2025-06-29 17:39:16 +02:00
Peter Steinberger
38b7846605
Fix terminal width overflow causing flickering in native terminals (#123) 2025-06-29 11:43:29 +01:00
Peter Steinberger
4b74fdf89c
Fix URL detection to exclude numbered lists (#122) 2025-06-28 20:20:34 +02:00
Peter Steinberger
7f1c4ec9bb Update tests to match new behavior for Windows drive letter support
- Tests now expect all Windows drive letters (A-Z) to be replaced with ~
- This matches the updated regex pattern that supports any drive letter
- Tests verify D:, E:, Z:, and lowercase drive letters work correctly
2025-06-28 15:22:05 +02:00
Peter Steinberger
816247d8ad Fix Windows drive letter support in path formatting regex
- Update regex pattern to support all drive letters A-Z (not just C:)
- Fix linting warning about unnecessary escape in character class
- Now properly handles paths like D:\Users\, E:\Users\, etc.
2025-06-28 15:22:05 +02:00
Peter Steinberger
c8234ded90 Improve Claude comment cleanup to use GitHub's minimizeComment mutation
- Replace manual comment editing with GitHub's native minimizeComment GraphQL mutation
- Provides cleaner UI with "This comment has been minimized" instead of custom details/summary
- Keep fallback to original approach if GraphQL mutation fails
- Maintains same categorization logic for reviews, errors, and status comments
2025-06-28 15:22:05 +02:00
Peter Steinberger
dfb36f7cf8 Fix critical bug: revert path formatting in session-create-form input
The working directory input was displaying formatted paths (~/Documents) but
storing them as-is when edited, causing backend errors since it expects
absolute paths.

Reverted to showing raw paths in the input field. The file browser component
is unaffected as it correctly only formats for display, not for input.

This ensures workingDir always contains absolute paths as expected by the API.
2025-06-28 15:22:05 +02:00
Peter Steinberger
836db22a5e Apply path formatting to remaining frontend components
- Add formatPathForDisplay to session-create-form working directory input
- Add formatPathForDisplay to file-browser path display
- Users now see ~/Documents instead of /Users/username/Documents everywhere
- Maintains raw paths for editing and API calls, only formats for display
2025-06-28 15:22:05 +02:00
Peter Steinberger
039f27112e Remove unnecessary memoization from clickable-path component
- The formatPathForDisplay function is extremely cheap (single regex replace)
- LitElement already optimizes renders efficiently
- Removing memoization reduces code complexity and memory overhead
- The performance difference is negligible for such a simple operation
2025-06-28 15:22:05 +02:00
Peter Steinberger
f90478b74a Handle external contributor CI permissions gracefully
- Add continue-on-error to all comment-posting steps in lint-reporter
- Check for fork PRs and skip Claude reviews for external contributors
- Add permission checks to prevent CI failures on forks
- Create documentation explaining external contributor CI behavior
- Ensure all workflows handle permission errors without failing the build

This allows external contributors to submit PRs without CI failures due to
missing write permissions, while still running all tests and validations.
2025-06-28 15:22:05 +02:00
Peter Steinberger
520c3ea443 Update Claude cleanup script to delete error comments
- Error comments are now deleted instead of collapsed
- Only successful reviews and status comments are collapsed
- This keeps the PR comments cleaner by removing failed attempts
2025-06-28 15:22:05 +02:00
Peter Steinberger
dc646ae76e Address additional Claude review feedback
- Optimize path formatting with pre-compiled regex for better performance
- Add memoization to clickable-path component to avoid re-computations
- Add comprehensive tests for usernames with regex special characters
- Simplify clipboard tests for more reliable test execution
- Fix potential issues with special characters in usernames breaking regex patterns
2025-06-28 15:22:05 +02:00
Peter Steinberger
f7b725ff17 Fix path formatting issues identified by Claude review
- Handle Windows paths with forward slashes (C:/Users/username)
- Support case-insensitive Windows drive letters (c:\ vs C:\)
- Fix multiple home directory pattern replacement using single regex
- Add comprehensive tests for all edge cases
- Update JSDoc comments with proper formatting
2025-06-28 15:22:05 +02:00
Peter Steinberger
cb093ffd12 Add /cp and c+p as shorthands for commit and push 2025-06-28 15:22:05 +02:00
Peter Steinberger
7d7200f9a8 Update CLAUDE.md to use single command for commit and push 2025-06-28 15:22:05 +02:00
Peter Steinberger
c24749458c Fix Claude bot creating multiple PR comments
- Add automatic cleanup of old Claude comments after each review
- Create reusable cleanup script that intelligently handles different comment types
- Keep only the most recent successful review visible
- Collapse (not delete) old reviews, errors, and status messages
- Add manual cleanup workflow that can be triggered or run on schedule
- Preserve comment history while keeping PRs readable

This solves the issue where Claude creates new comments instead of updating
existing ones, since the anthropics/claude-code-action@beta doesn't support
comment updates natively.
2025-06-28 15:22:05 +02:00
Peter Steinberger
986154da7c Fix quality report formatting - remove empty line between title and status
- Changed lint-reporter action to display title and status on same line
- Before: Title on one line, empty line, then status on next line
- After: Title and status on same line for more compact display
- Affects all quality reports: Node.js linting, formatting, coverage, etc.
2025-06-28 15:22:05 +02:00
Peter Steinberger
dcfdfa62ac Add Playwright MCP as project config 2025-06-28 15:22:05 +02:00
Peter Steinberger
696b51e50c Fix iOS/macOS test coverage extraction in CI
- Add debugging steps to diagnose why coverage shows 0%
- Implement multiple fallback methods for coverage extraction:
  1. Standard xccov with --json flag
  2. Text parsing fallback without --json
  3. Test execution verification (0.1% if tests ran but coverage failed)
- Fix command order: put --json flag after xcresult path
- Add detailed logging to understand coverage extraction failures
- Check xcresult contents with xcresulttool for coverage data

This should resolve the "Failed to load coverage report" errors
and provide better visibility into what's happening in CI.
2025-06-28 15:22:05 +02:00
Peter Steinberger
8e94b644e7 Clarify that pnpm run check is the primary command for concurrent checking 2025-06-28 15:22:05 +02:00
Peter Steinberger
627599fb02 Fix race condition risks in code quality tools
- Keep parallel execution for read-only checks (format:check, lint, typecheck)
- Make check:fix run sequentially to prevent file write conflicts
- Add documentation explaining why sequential execution is needed
- Based on best practices: lint-staged and JavaScript community recommendations
2025-06-28 15:22:05 +02:00
Peter Steinberger
18e4648904 Add comprehensive tests and improve code quality workflow
- Add tests for formatPathForDisplay covering all platforms
- Create parallel code quality check script (pnpm run check)
- Add auto-fix command for format and lint issues (pnpm run check:fix)
- Document the improved workflow in DEVELOPMENT.md
- Update CLAUDE.md with the new commands
2025-06-28 15:22:05 +02:00
Peter Steinberger
d0c42107f3 Switch to client-side path formatting with regex
- Remove all server-side path formatting logic
- Implement simple regex-based client-side formatting
- Support macOS, Linux, Windows, and root user paths
- Simpler implementation with no API changes needed
- Better separation of concerns (UI formatting in UI layer)
2025-06-28 15:22:05 +02:00
Peter Steinberger
f2eb262384 Remove formatPathForDisplay function completely
- Delete formatPathForDisplay function from path-utils.ts
- Update all components to use displayWorkingDir from server
- Clean up imports in affected components
- Add refactoring philosophy note to CLAUDE.md
2025-06-28 15:22:05 +02:00
Peter Steinberger
856dc3ce91 Remove hardcoded home directory from client-side path formatting
- Deprecate client-side formatPathForDisplay function
- Remove hardcoded /Users/steipete path
- Add JSDoc comments explaining server-side formatting is preferred
- Add documentation to displayWorkingDir property in Session interface
2025-06-28 15:22:05 +02:00
Peter Steinberger
c05d91e1b2 Fix mobile header truncation and dynamic home directory display
- Replace hardcoded home directory with dynamic detection using os.homedir()
- Add server-side path formatting using existing abbreviatePath utility
- Add displayWorkingDir field to Session interface
- Fix mobile header overflow with proper width constraints
- Update clickable-path component to accept pre-formatted display paths

This fixes both the regression where ~ substitution was broken and the
mobile header pushing content off-screen when session paths are long.

Fixes #96
2025-06-28 15:22:05 +02:00
Michi Hoffmann
316cd28485 Update CONTRIBUTING.md 2025-06-28 14:28:12 +02:00
Michi Hoffmann
2afb69b81f npm -> pnpm 2025-06-28 14:28:12 +02:00
Helmut Januschka
bdfd46a915
Add keyboard shortcut highlighter to terminal (#114)
* Add keyboard shortcut highlighter to terminal

- Create keyboard-shortcut-highlighter.ts with comprehensive pattern matching
- Integrate highlighter into terminal component alongside URL highlighting
- Support clickable shortcuts like "Ctrl+R", "Ctrl+A", "esc to interrupt"
- Style shortcuts with greyish color and dotted underlines (not blue links)
- Send actual key sequences when shortcuts are clicked
- Handle overlapping matches and avoid double-processing

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix keyboard shortcut input handling - add missing event listener

The keyboard shortcut highlighter was dispatching 'terminal-input' events
but the session-view component wasn't listening for them. Added:

- @terminal-input event listener on vibe-terminal component
- handleTerminalInput method that forwards to inputManager.sendInputText()

Now clicked shortcuts like 'Ctrl+R' properly send input to the terminal.

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Add Claude Code interactive prompt support to keyboard shortcut highlighter

Make numbered options in Claude Code prompts clickable:
- Pattern: '❯ 1. Yes' or '  2. Yes, and don't ask again'
- Clicking sends the number (1, 2, 3, etc.) to terminal
- Handles both selected (❯) and unselected options
- Uses multiline regex matching for line-start patterns

Now users can click numbered options instead of typing numbers.

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Claude Code prompt patterns to handle indented options

Previous patterns required line-start anchors which failed for indented
options within bordered terminal output. Updated patterns:

- Remove restrictive line-start anchors (^)
- Add whitespace-flexible patterns for indented options
- Support both cursor-selected (❯) and plain numbered options
- Handle 'Yes, proceed' and 'No, exit' style options

Now correctly matches:
'❯ 1. Yes, proceed' and '  2. No, exit' patterns.

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Simplify Claude Code prompt patterns to be fully generic

Replace keyword-specific patterns with generic numbered option matching:

- ❯ 1. (cursor-selected options)
- 1. xxxxx (any numbered option with text)

Now matches any numbered list item regardless of content:
'1. Yes, proceed', '2. No, exit', '3. Maybe later', etc.

Much cleaner and more flexible than keyword-based matching.

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Claude Code prompt patterns to highlight full option lines

Changed from matching only first word to matching entire lines:
- /❯\s*(\d+)\.\s+.*/ - highlights complete cursor-selected option
- /(\d+)\.\s+.*/ - highlights complete numbered option

Now '1. Yes, proceed' and '2. No, exit' are fully underlined
instead of just '1. Yes' and '2. No'.

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

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-28 02:15:50 +02:00
Armin Ronacher
660880b396 Bring back the options for vt 2025-06-28 00:44:29 +02:00
Mario Zechner
2ffb0a3a62 Fix race conditions in PTY output handling with WriteQueue
Implement WriteQueue to serialize all async write operations and handle backpressure:
- Add shared WriteQueue utility class for serializing async operations
- Move write queue inside AsciinemaWriter to handle all write methods
- Add backpressure handling using stream 'drain' events
- Ensure all AsciinemaWriter methods (writeHeader, writeRawJson) use queue
- Add drain() method to wait for pending writes on close
- Store stdout queue reference in PtySession for cleanup on process exit

This prevents race conditions where concurrent fs.fsync calls could interleave,
causing out-of-order disk flushes and potential data corruption.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-27 22:21:05 +02:00
Helmut Januschka
6e98fa9ce6
Fix Japanese input duplication on iOS web (GitHub #99) (#102)
Added comprehensive IME composition support to prevent duplication of Japanese, Chinese, and Korean text input on mobile devices.

Changes:
- DirectKeyboardManager: Added composition event handlers to wait for final text
- MobileInputOverlay: Added composition state tracking to prevent intermediate updates
- Fixed null safety issues and unused parameter warnings
- Comprehensive documentation explaining IME implementation

Bug Fixed:
Previously, intermediate composition characters were sent to terminal during Japanese typing, causing duplicated text. Now properly waits for composition completion before sending final text to terminal.

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

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-27 21:37:43 +02:00
Helmut Januschka
b98a8d190e
Add Shift+Tab key to mobile QuickKeyboard (#111)
* Add Shift+Tab key to mobile QuickKeyboard per PR #105 feedback

Implements Peter's suggestion to add Shift+Tab key to mobile quick keyboard
for enhanced Claude Code planning mode support on mobile devices.

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Monaco Editor keyboard input cancellation

Enhanced isKeyboardShortcut detection to properly handle Monaco Editor
elements, preventing keyboard event interference while maintaining
terminal functionality.

- Added contentEditable detection
- Added .monaco-editor container detection
- Added data-keybinding-context detection
- Added .editor-container detection

This resolves the 'Canceled: Canceled' errors when typing in Monaco Editor
while preserving Shift+Tab functionality for Claude Code planning mode.

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

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-27 21:32:06 +02:00
Mario Zechner
4788afb7ed Clean-up of web/, updated spec.md 2025-06-27 21:13:55 +02:00
Helmut Januschka
98e922fd44
Fix shell alias expansion timing issue (GitHub #101) (#103)
Fixed the 'command not found' error for shell aliases like claude command.

Root Cause:
Previously, commands were executed as:
  /bin/zsh -c 'source ~/.zshrc 2>/dev/null || true; claude'

Shell alias expansion happens at parse time, before the source command runs,
so aliases defined in .zshrc were not available during command parsing.

Solution:
Use interactive mode with login shell flags:
  /bin/zsh -i -l -c 'claude'

The -i flag enables interactive mode (loads aliases)
The -l flag makes it a login shell (sources RC files)
This ensures aliases are properly loaded and expanded before command execution.

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

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-27 21:05:58 +02:00
Helmut Januschka
fc162ad55c
Prevent recursive VibeTunnel sessions (GitHub #95) (#104)
* Prevent recursive VibeTunnel sessions (GitHub #95)

Added detection and prevention of nested VibeTunnel sessions to avoid
recursive 'vt' command execution.

Changes:
- Set INSIDE_VIBETUNNEL and VIBETUNNEL_SESSION environment variables when creating PTY sessions
- Added check in vt script to detect if already inside a VibeTunnel session
- Shows helpful error message when recursive session is attempted

This prevents the confusing behavior where users could run 'vt' inside a
VibeTunnel session, creating nested terminal instances. Now users get a
clear error message explaining they're already in a VibeTunnel session.

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Improve recursive session prevention based on PR feedback

- Consolidate to single environment variable VIBETUNNEL_SESSION_ID
- Add session ID for debugging purposes as requested
- Show session ID in error message for better user feedback
- Remove redundant environment variables (INSIDE_VIBETUNNEL, VIBETUNNEL_SESSION)

This addresses feedback from PR #104 to use a single, more informative
environment variable that serves both purposes: preventing recursion
and providing debugging information.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-27 21:05:36 +02:00
Helmut Januschka
9aaac17150
Add Shift+Tab support for Claude Code planning mode (GitHub #100) (#105)
* Add Shift+Tab support for Claude Code planning mode (GitHub #100)

Added proper Shift+Tab key sequence handling to enable Claude Code mode switching.

Changes:
- Added 'shift_tab' to SpecialKey type definition
- Updated input-manager.ts to detect Shift+Tab combination (e.shiftKey)
- Updated direct-keyboard-manager.ts for mobile Shift+Tab support
- Added shift_tab mapping to PTY manager (sends \x1b[Z escape sequence)

This allows users to press Shift+Tab in VibeTunnel to switch between Claude Code
modes (autoaccept, planning, regular) as expected.

Technical Details:
- Shift+Tab sends the standard terminal escape sequence \x1b[Z (CSI Z)
- Both desktop and mobile input handlers now support the key combination
- Maintains backward compatibility with regular Tab functionality

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

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Shift+Tab not being sent as special key

Added 'shift_tab' to the special keys list in input-manager.ts so it gets
sent as {"key": "shift_tab"} instead of {"text": "shift_tab"}.

This was the missing piece - the frontend was correctly detecting Shift+Tab
but then sending it as text instead of a special key, so the server couldn't
map it to the \x1b[Z escape sequence.

Now Shift+Tab will properly send {"key": "shift_tab"} in the API request.

* Fix failing CI test in session-list.test.ts

Updated test expectation to check for 'compactMode' instead of
non-existent 'showCreateModal' property. This was a stale test
that was unrelated to the Shift+Tab changes but was blocking CI.

All tests now pass.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-27 21:00:09 +02:00
Armin Ronacher
47ee08c652 Fix out of order writes 2025-06-27 14:59:35 +02:00
Armin Ronacher
47e475b967 Claude knows how to flexbox 2025-06-27 12:26:42 +02:00
Armin Ronacher
ae2b8a2298 Fixed session status detection 2025-06-27 11:50:38 +02:00
Peter Steinberger
1ba8d24d12 Update appcast for v1.0.0-beta.4 release 2025-06-27 02:36:18 +02:00
Peter Steinberger
0e044c7980 Update CHANGELOG.md for 1.0.0-beta.4 with detailed release notes 2025-06-27 02:13:23 +02:00
Peter Steinberger
c43bea3402 Prepare for 1.0.0-beta.4 release (build 114) 2025-06-27 02:06:18 +02:00