Commit Graph
589 Commits
Author SHA1 Message Date
arkon 28b175c74a chore: bump version to 0.1521 2026-02-17 07:08:26 +01:00
arkon ea3e534607 chore: bump version to 0.1520 2026-02-16 21:19:16 +01:00
arkon 70a406a183 chore: bump version to 0.1519 2026-02-16 21:10:33 +01:00
arkonandClaude Opus 4.6 2c7382f8b7 chore: bump version to 0.1518
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 21:00:55 +01:00
arkon cd34d20e63 chore: bump version to 0.1517 2026-02-16 20:47:50 +01:00
arkonandClaude Opus 4.6 5832230091 chore: bump version to 0.1516
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:45:47 +01:00
arkon ffffb02325 chore: bump version to 0.1515 2026-02-16 15:47:03 +01:00
arkon 167902c628 chore: bump version to 0.1514 2026-02-16 14:09:32 +01:00
arkonandClaude Opus 4.6 659ccd001b fix: mobile keyboard hides terminal content when typing
Send SIGWINCH to server on keyboard open/close so Ink renders at the
correct terminal dimensions. Previously only local xterm was resized
while server resize was suppressed, causing Ink to redraw at the old
(larger) row count on each keystroke — pushing content off screen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:56:47 +01:00
arkonandClaude Opus 4.6 6b8f863666 fix: mobile keyboard accessory buttons — split text/Enter, double-tap confirm for clear/compact
- Remove confirm() dialog which dismissed keyboard and broke Enter delivery
- Send command text and Enter as separate requests with 120ms delay so Ink processes them as distinct events
- Add double-tap confirmation for /clear and /compact (amber "Tap again" state, 2s timeout)
- /init sends immediately (non-destructive)
- Refocus terminal after first tap on confirm buttons to keep keyboard open
- Match accessory button font size to toolbar buttons (0.65rem)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:43:18 +01:00
arkonandClaude Opus 4.6 da74ac248b fix: mobile keyboard layout — scroll-to-bottom on show, robust dismiss detection
Three bugs fixed in KeyboardHandler:
1. onKeyboardShow() used sessionData.terminal (always undefined) instead of app.terminal
2. Keyboard dismiss threshold (50px) too tight for iOS address bar drift — widened to 100px
3. No terminal refit on keyboard hide — caused black gap below terminal

Also added: dynamic baseline update for initialViewportHeight, safety check in
updateLayoutForKeyboard() that forces dismiss when keyboardOffset <= 0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:10:44 +01:00
arkon bd6d777294 chore: bump version to 0.1510 2026-02-15 06:02:19 +01:00
arkon c3e70dcfe0 chore: bump version to 0.1509 2026-02-15 05:58:13 +01:00
arkon 79b58c7807 chore: bump version to 0.1508 2026-02-15 05:55:18 +01:00
arkon 5bd08df80d chore: bump version to 0.1507 2026-02-15 05:34:18 +01:00
arkonandClaude Opus 4.6 9ab62adfa8 fix: medium severity audit fixes — races, leaks, perf, warnings
- Clear teams/teamTasks maps in handleInit() on SSE reconnect
- Fix saveNowAsync() race condition with in-flight promise guard
- Add setMaxListeners() on Session, WebServer, SubagentWatcher,
  ImageWatcher, TmuxManager to prevent MaxListenersExceeded warnings
- Debounce persistSessionState() per-session (100ms) to reduce
  redundant toState() serialization across 25+ call sites
- Cache getLightSessionsState() with 1s TTL to avoid re-serializing
  all sessions on every SSE connect and /api/sessions request

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 05:33:34 +01:00
arkon f783dd91f4 chore: bump version to 0.1506 2026-02-15 05:27:19 +01:00
arkonandClaude Opus 4.6 f223501164 fix: async I/O, map iteration bug, unified cleanup, Zod validation, error handling
- Convert sync readFileSync/statSync to async in subagent-watcher.ts to
  unblock event loop on hot paths (transcript reads, liveness checks)
- Fix Map mutation during iteration in closeSessionLogViewerWindows and
  closeSessionImagePopups (collect IDs first, then iterate to close)
- Unify session cleanup into shared _cleanupSessionData() method called
  from both closeSession() and session:deleted handler to prevent leaks
- Add Zod validation schemas for 20+ API routes that used raw type casts
- Add consecutive error tracking (5 errors/60s triggers exit for systemd
  restart) and SIGHUP handler for SSH disconnect safety

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 05:26:29 +01:00
arkon 20896ac173 chore: bump version to 0.1505 2026-02-13 21:40:08 +01:00
arkon 641fd28211 chore: bump version to 0.1504 2026-02-13 21:21:33 +01:00
arkon 26373aabd0 chore: bump version to 0.1503 2026-02-13 21:07:49 +01:00
arkon d63fe2063f chore: bump version to 0.1502 2026-02-13 20:25:56 +01:00
arkon 3523bbe3af chore: bump version to 0.1501 2026-02-13 18:46:20 +01:00
arkon 2b4b6abcb6 chore: bump version to 0.1500 2026-02-13 09:18:54 +01:00
arkon 9f24eeef9d chore: bump version to 0.1499 2026-02-13 08:35:58 +01:00
arkon 53e7e4822e chore: bump version to 0.1498 2026-02-13 08:28:06 +01:00
arkon 2e60b6d858 chore: bump version to 0.1497 2026-02-13 08:04:20 +01:00
arkon 3a77fe48e3 chore: bump version to 0.1496 2026-02-13 07:42:50 +01:00
arkon e6da0a22ff chore: bump version to 0.1495 2026-02-13 06:16:15 +01:00
arkon 806750fe77 chore: bump version to 0.1494 2026-02-13 06:02:12 +01:00
arkonandClaude Opus 4.6 7d2519cacb fix: subagent windows not opening — two cascading bugs
1. handleInit crash: commit cdc822d removed Map initializations for
   teammateTerminals, teammatePanesByName, teams, teamTasks, teammateMap
   from the constructor but left cleanup code that iterates them.
   cleanupAllFloatingWindows() crashed on "not iterable", preventing
   ALL frontend data (sessions, subagents) from loading.

2. claudeSessionId null on recovered sessions: only set inside
   startInteractive(), never in constructor or persisted. After server
   restart, recovered sessions had null claudeSessionId, so the
   hasMatchingTab check always failed → no subagent windows.

Fixes:
- Re-add all 5 missing Map initializations in app.js constructor
- Set _claudeSessionId = this.id in Session constructor (Claudeman
  always passes --session-id to Claude, so they always match)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 05:07:51 +01:00
arkonandClaude Opus 4.6 82a0da035c fix: actually jump into restored session on reload, not just highlight tab
handleInit is called twice on page load (loadState + SSE init). The second
call cleared terminal state but skipped selectSession because activeSessionId
was still set from the first call. Now reset activeSessionId before
re-selecting so the terminal buffer always gets reloaded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 20:17:10 +01:00
arkon f47ae4b80f chore: bump version to 0.1491 2026-02-12 20:14:01 +01:00
arkonandClaude Opus 4.6 9702739e67 fix: restore active session tab on page reload (mobile + desktop)
Save activeSessionId to localStorage on tab switch and restore it in
handleInit so reloading the page jumps back to the session you were
viewing instead of always selecting the first tab.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 20:07:36 +01:00
arkon 8f1eeca5b9 chore: bump version to 0.1490 2026-02-12 18:29:49 +01:00
arkonandClaude Opus 4.6 0314de7789 fix: bulletproof test safety — IS_TEST_MODE guards prevent tests from killing real tmux sessions
Added IS_TEST_MODE (process.env.VITEST) guards to every method in TmuxManager and
ScreenManager that touches real tmux/screen sessions. Tests can never create, kill,
discover, or send input to real sessions. Removed broken E2E test suite entirely.
Rewrote test/setup.ts from 459 lines to minimal cleanup. Rewrote tmux-related tests
to verify test-mode safety behavior.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:26:16 +01:00
arkon cdc822d657 fix: add Agent Teams types to types.ts, remove unused server imports 2026-02-12 14:42:58 +01:00
arkon e44f827473 chore: bump version to 0.1488 2026-02-12 14:41:27 +01:00
arkonandClaude Opus 4.6 2b685cea65 feat: full Agent Teams support with tmux split-pane mode
- Enable tmux mouse mode on session creation for click-to-select panes
- Auto-discover teammate panes via tmux list-panes when config.json lacks paneIds
- Enable mouse mode dynamically when team pane streams start (restored sessions)
- Suppress teammate subagent popup windows (false info); teammates use main tmux panes
- Remove standalone teammate terminal windows in favor of native tmux interaction

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 13:54:40 +01:00
arkonandClaude Opus 4.6 a4e778c7c4 chore: bump version to 0.1486
feat: interactive teammate tmux pane windows with xterm.js terminals
feat: auto-cleanup teams/subagents/pane windows on session delete
fix: only show agent/teammate windows when matching Claudeman tab exists
fix: UTF-8 encoding in teammate pane terminal output (Uint8Array)
fix: standalone pane window cleanup via subagentParentMap lookup
fix: xterm.js dimensions crash with deferred init + null-safe dispose

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 13:44:07 +01:00
arkon 59a8f6bd7d chore: bump version to 0.1485 2026-02-12 11:35:10 +01:00
arkon 336aff2d2c chore: bump version to 0.1484 2026-02-12 11:17:49 +01:00
arkon a687416798 chore: bump version to 0.1483 2026-02-12 11:13:05 +01:00
arkon 669a2b7773 chore: bump version to 0.1482 2026-02-12 11:11:06 +01:00
arkon 65f81667d0 chore: bump version to 0.1481 2026-02-12 10:29:57 +01:00
arkon 8a85064748 chore: bump version to 0.1480 2026-02-12 08:58:00 +01:00
arkonandClaude Opus 4.6 3145b3f9a3 chore: bump version to 0.1479
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 08:34:51 +01:00
arkonandClaude Opus 4.6 df84804189 docs: remove mobile-with-keyboard screenshot from README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 17:32:56 +01:00
arkonandClaude Opus 4.6 c2ab0c6a6f chore: bump version to 0.1478
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 17:29:53 +01:00
arkonandClaude Opus 4.5 8f0bbf33d6 chore: bump version to 0.1477
Location: Ko Samui

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 07:24:32 +01:00