Commit graph

576 commits

Author SHA1 Message Date
Peter Steinberger
978205da76 Add resize feature to Rust server 2025-06-19 14:32:14 +02:00
Peter Steinberger
720c81c704 Add resize feature to Hummingbird 2025-06-19 14:32:14 +02:00
Peter Steinberger
7707e6db3d Add port conflict resolver logic. 2025-06-19 14:32:14 +02:00
Peter Steinberger
87a9053833 whatever 2025-06-19 14:32:14 +02:00
Peter Steinberger
098cdf642d Up error logging 2025-06-19 14:32:14 +02:00
Mario Zechner
607090a1d3 Pty improvements 2025-06-19 14:07:59 +02:00
Peter Steinberger
0fb8f38761 disable logs 2025-06-19 13:20:32 +02:00
Peter Steinberger
57639639dd build release or debug version based on scheme 2025-06-19 13:02:15 +02:00
Peter Steinberger
0272d77e83 Increment build number to 107 for beta.2 release 2025-06-19 12:52:38 +02:00
Peter Steinberger
ef1d3d7c6e Fixes crash on Tahoe when opening Settings 2025-06-19 12:50:20 +02:00
Peter Steinberger
7f301d5368 was actually a circular dependency 2025-06-19 12:41:44 +02:00
Peter Steinberger
553f66fc4b Touched by Xcode 2025-06-19 12:35:42 +02:00
Peter Steinberger
f9cfdfe075 FML. This prevented Xcode from even starting the app 2025-06-19 12:35:30 +02:00
Peter Steinberger
02ee1ebdd1 Readd menu bar item key 2025-06-19 11:08:27 +02:00
Peter Steinberger
8c48d8db52 potential crash fix 2025-06-19 10:51:01 +02:00
Mario Zechner
812e0615cc Force fwd.ts to always use node-pty, never tty-fwd fallback
- Set implementation to 'node-pty' and disable fallback to tty-fwd
- Remove conditional logic since we always have direct PTY access
- Simplify input handling to always use direct PTY write
- Remove fallback session status monitoring
- fwd.ts is the Node.js replacement for tty-fwd, should never use tty-fwd itself

This makes fwd.ts behavior consistent and eliminates complexity from fallback paths.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 07:09:01 +02:00
Mario Zechner
a068d64ebc Improve fwd.ts exit detection using direct PTY process events
- Use PTY process onExit handler for immediate exit detection instead of asciinema stream monitoring
- Remove redundant asciinema exit event parsing - that's output format, not process state
- Make session status polling a fallback only when direct PTY access isn't available
- This provides faster, more reliable exit detection at the source (PTY process)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 07:06:41 +02:00
Mario Zechner
dc562f5f9e Fix fwd.ts hanging on process exit and remove redundant control pipe creation
- Add proper cleanup of all intervals and FIFO streams on exit
- Detect exit events directly from asciinema stream for faster response
- Reduce session monitoring polling from 1000ms to 500ms
- Remove redundant createControlPipeForExternalSession function
- fwd.ts now creates its own control pipe, PtyManager no longer needs to create them

This should eliminate the hanging issue when exiting processes wrapped with fwd.ts.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 07:01:36 +02:00
Mario Zechner
69e3a6d47e Fix critical input performance bottlenecks causing 1-2 second delays
- Replace blocking spawnSync calls with direct stdin pipe writes
- Change from 100ms polling to fs.watchFile for immediate file notifications
- Use appendFileSync instead of writeFileSync for better performance
- Add platform-specific key mapping for tty-fwd input path
- Reduce polling interval from 100ms to 50ms for watchFile

This eliminates the 5-second timeout blocking and improves input responsiveness from 1-2 seconds to near-instantaneous.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:42:03 +02:00
Mario Zechner
1c52ed79d8 Fix Windows enter key mapping to use carriage return
- Change enter key from \n (line feed) to \r (carriage return) on Windows
- Maintains \n for Unix/macOS compatibility
- Fixes enter key behavior in Windows terminals

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:38:10 +02:00
Mario Zechner
64e55147e5 Implement cross-platform control pipe and direct PTY access for fwd.ts
- Add platform detection for Windows vs Unix FIFO handling
- Implement polling fallback for Windows control pipes
- Add direct PTY process access for faster keyboard input
- Fix duplicate cleanup handlers and formatting issues

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:35:33 +02:00
Mario Zechner
eaf161706c Fix TypeScript type errors in control and stdin stream handling
- Add proper type guards for control message fields (cols, rows, signal)
- Handle string | Buffer types for stream data events correctly
- Fix null assignment issue in control pipe creation
- Add type conversion for chunk data in FIFO streams

All TypeScript errors resolved.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:28:53 +02:00
Mario Zechner
c86c514030 Fix control pipe to use FIFO streaming and rename to 'control'
- Create control as FIFO instead of regular file using mkfifo
- Use same read+write streaming approach as stdin FIFO
- Rename 'control-pipe' to 'control' for consistency
- Replace polling mechanism with continuous FIFO streaming
- Update session type to use 'control' field name
- Fix PtyManager to reference correct control field

This should fix the issue where resize only worked once due to
control pipe closing after first write.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:25:25 +02:00
Mario Zechner
7a37f7a231 Fix FIFO stdin handling by opening for read+write like tty-fwd
- Open stdin FIFO with 'r+' mode to keep it open continuously
- Use fs.openSync + createReadStream for proper FIFO handling
- Prevent FIFO from closing when external writers disconnect
- Follow tty-fwd pattern of opening FIFO for both read and write
- Remove problematic spawn('cat') approach that was exiting

This should fix the issue where stdin FIFO closes after first input.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:17:44 +02:00
Mario Zechner
a2b0ba77da Fix enter key mapping for proper command execution
- Change enter key from '\r' to '\n' for correct shell behavior
- Swap enter and ctrl_enter mappings to match terminal expectations
- Most shells expect newline (\n) to execute commands, not carriage return (\r)

This fixes the issue where commands typed in frontend would hang
after pressing enter instead of executing properly.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:06:27 +02:00
Mario Zechner
83011381c2 Fix external session input handling via stdin FIFO monitoring
- Add stdin FIFO monitoring to fwd.ts for web server input forwarding
- Create ReadStream to continuously read from stdin pipe
- Forward web server input to PTY process in real-time
- Prevent hanging when web server sends input to external sessions
- Maintain dual input sources: terminal keyboard + web frontend

This fixes the issue where fwd.ts would hang when receiving
input from the web server via the stdin FIFO pipe.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:02:50 +02:00
Mario Zechner
a4077fbac6 Add control pipe migration and SIGWINCH fallback for external sessions
- Add automatic control pipe creation for existing external sessions
- Update session.json retroactively when control pipe is created
- Implement SIGWINCH fallback when control pipe is not available
- Support resize operations for legacy external sessions

This enables resize functionality for sessions created before
the control pipe feature was implemented.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 06:00:26 +02:00
Mario Zechner
6c055013af Implement control pipe for external PTY session communication
- Add control-pipe field to session types for external command communication
- Create ResizeControlMessage and KillControlMessage interfaces
- Update PtyManager to send control messages via pipe for external sessions
- Enhance fwd.ts to create and monitor control pipe for resize/kill commands
- Support real-time resize operations for external sessions via IPC
- Add proper cleanup of control pipes on session exit

This enables full PTY control (resize, kill) for sessions created by
external tools like fwd.ts through a file-based IPC mechanism.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 05:57:13 +02:00
Mario Zechner
0fcddd2194 Fix PTY session operations to support external sessions
- Modify sendInput to write to stdin pipe for external sessions
- Update resizeSession to handle external sessions gracefully
- Fix killSession to work with sessions created by fwd.ts
- Check filesystem for session info when not in memory map
- Support both in-memory and disk-only session management

This fixes frontend operations failing with "Session not found"
when interacting with sessions created by external tools.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 05:51:00 +02:00
Mario Zechner
a229a7f360 Add interactive PTY forwarding tool with real-time I/O
- Create fwd.ts command-line tool for spawning PTY sessions
- Support both interactive and monitor-only modes
- Real-time bidirectional terminal communication
- Parse asciinema output format for clean terminal display
- Handle terminal raw mode and graceful cleanup
- Auto-detect PTY implementation (node-pty vs tty-fwd)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 05:42:55 +02:00
Mario Zechner
7cb80ec708 Center loading animation in viewport when no session selected
- Change from w-full h-full to fixed inset-0 for proper viewport centering
- Ensures loading spinner is centered relative to entire viewport
- Provides better visual positioning regardless of container constraints

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 05:29:31 +02:00
Mario Zechner
85a4811b65 Show loading animation when no session is selected
- Replace static "No session selected" text with animated loading spinner
- Use same loading animation style as session connection state
- Shows "Waiting for session..." message with spinning indicator
- Provides better visual feedback when waiting for session selection

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 05:27:19 +02:00
Peter Steinberger
e0758d1e8d Update appcast and version for 1.0.0-beta.2 release 2025-06-19 05:24:12 +02:00
Mario Zechner
b054a57fe3 Add ResizeObserver back in, fix rows/cols calc in terminal. 2025-06-19 05:22:07 +02:00
Peter Steinberger
e0132407ae Increment build number to 106 for beta.2 release 2025-06-19 05:18:17 +02:00
Peter Steinberger
3c31ae0692 Fixes a crash in macOS 26 2025-06-19 05:16:09 +02:00
Peter Steinberger
ba7d66aa88 Improve release scripts and documentation after successful beta 2 release
Major improvements:
- Add common.sh library for consistent error handling and logging
- Fix hardcoded values in scripts (signing identity, volume names, GitHub repo)
- Add comprehensive release documentation with lessons learned
- Create Sparkle key management guide
- Add clean.sh script for managing build artifacts
- Improve error handling and validation across all scripts
- Update lint.sh with proper documentation and better error handling
- Make generate-appcast.sh fail fast if private key is missing

Script improvements:
- release.sh: Add GitHub CLI auth check, remote tag validation
- notarize-app.sh: Auto-detect signing identity from keychain
- create-dmg.sh: Make volume name configurable
- generate-appcast.sh: Extract GitHub info from git remote
- All scripts: Add proper documentation headers

This ensures more reliable and maintainable release process.
2025-06-19 05:14:09 +02:00
Peter Steinberger
b2b340fd1e Fix EdDSA signatures with correct private key
- Update generate-appcast.sh to use private key file exclusively
- Add validation to ensure private key exists before signing
- Regenerate appcast signatures with correct key
- Add private/ directory to .gitignore for security
2025-06-19 04:58:53 +02:00
Mario Zechner
585a593ecc Fix mobile onscreen keyboard scroll position issue
- Add refreshTerminalAfterMobileInput() method to recalculate scroll position
- Call refresh after closing mobile input overlay (cancel, send, send+enter)
- Wait 300ms for viewport to settle before forcing scrollToBottom()
- Fixes issue where terminal scroll position gets confused after keyboard disappears

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 04:41:39 +02:00
Peter Steinberger
0606b6cec1 Update appcast and version for 1.0.0-beta.2 2025-06-19 04:40:25 +02:00
Peter Steinberger
bf243f7764 Fix Sparkle timestamp verification logic 2025-06-19 04:36:48 +02:00
Peter Steinberger
e046b74528 Fix timestamp verification to match actual codesign output format 2025-06-19 04:32:12 +02:00
Peter Steinberger
f820b69909 Fix Xcode project to use CURRENT_PROJECT_VERSION from version.xcconfig 2025-06-19 04:28:59 +02:00
Peter Steinberger
504d12634a Fix Sparkle signing issues and improve release verification
- Add --timestamp flag to all code signing operations
- Fix Sparkle XPC services signing to match VibeMeter approach
- Add comprehensive Sparkle component verification after signing
- Add post-DMG creation verification to ensure app is properly notarized
- Increment build number to 105 for clean beta 2 release
2025-06-19 04:26:54 +02:00
Mario Zechner
89e2dfe356 Remove mobile browser bar hiding code that was cutting off terminal
- Remove hideAddressBar() method and calls that were interfering with viewport
- Remove adjustTerminalForMobileButtons() method that was causing layout issues
- Terminal should now display properly on mobile without being cut off

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 04:23:18 +02:00
Peter Steinberger
8e55b348ac Update appcast and version for 1.0.0-beta.2 2025-06-19 04:14:44 +02:00
Peter Steinberger
f5a8b398dc improve release scripts 2025-06-19 04:10:18 +02:00
Mario Zechner
6711b3b721 Update project configuration and API documentation
- Update API.md with corrected server analysis and critical compatibility issues
- Update Xcode project configuration with version 104 and development settings
- Maintain comprehensive stream logging for debugging session exit issues

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 04:00:39 +02:00
Peter Steinberger
ac54aa6b1c Remove beta 2 from appcast and clean up for fresh release 2025-06-19 03:57:50 +02:00
Mario Zechner
62f0579d07 Implement cross-platform ProcessUtils for reliable process checking
- Add ProcessUtils class with Windows/Unix process detection methods
- Replace raw process.kill(pid, 0) calls with ProcessUtils.isProcessRunning()
- Support Windows tasklist and Unix kill signal 0 approaches
- Add process killing and waiting utilities for better process management
- Update SessionManager, PtyManager, and PtyService to use ProcessUtils
- Improves reliability of cmd.exe session detection on Windows

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 03:56:05 +02:00