Commit Graph
100 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.6 cf0d9e7d83 chore: bump version to 0.1557
Lifecycle log window: draggable, resizable, wider (900px), hidden on mobile.
Fixed display toggle (block vs empty string).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:55:04 +01:00
arkonandClaude Opus 4.6 383ed5e5a0 feat: session lifecycle audit log — append-only JSONL at ~/.claudeman/session-lifecycle.jsonl
Records every session create, start, exit, delete, recover, stale-clean,
mux-died, and server start/stop with timestamps, names, reasons, and exit
codes. Survives server restarts (unlike in-memory RunSummary).

- New SessionLifecycleLog singleton (src/session-lifecycle-log.ts)
- LifecycleEventType + LifecycleEntry types in types.ts
- GET /api/session-lifecycle endpoint with sessionId/event/since/limit filters
- cleanupSession() now takes reason parameter for audit trail
- state-store cleanupStaleSessions returns cleaned session IDs+names
- UI: lifecycle log modal accessible from header clipboard icon
- Auto-trims to 8k entries when exceeding 10k on server start

chore: bump version to 0.1556

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:30:14 +01:00
arkonandClaude Opus 4.6 342a2add10 fix: local echo overlay — move box-shadow from zero-height container to first line div
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 15:07:21 +01:00
arkon 219f06001e chore: bump version to 0.1554 2026-02-19 15:01:52 +01:00
arkonandClaude Opus 4.6 e1cec2a405 feat: local echo multi-line wrapping — long input wraps to next rows matching terminal character-wrap behavior
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 15:00:44 +01:00
arkonandClaude Opus 4.6 8b96470cce fix: local echo overlay lost on mobile redraws — preserve pending text across SSE reconnect, terminal resets, and Ink redraws
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 14:52:39 +01:00
arkonandClaude Opus 4.6 fe1f665531 fix: ralph tracker — 3 bugs: first-occurrence completion, double-counting, TodoWrite pattern
Bug 1 (CRITICAL): canonicalCount >= 1 always fired on first <promise> tag
(prompt echo). Changed to >= 2 so only 2nd+ occurrence triggers completion.

Bug 2: checkMultiLinePatterns() re-detected complete tags already handled
by processLine(), double-counting. Now only tries completion when partial
buffer is non-empty (cross-chunk scenario).

Bug 3: TodoWrite ✔ patterns required "Task #N" but real Claude Code output
is plain "✔ content". Added TODO_PLAIN_CHECKMARK_PATTERN fallback.

Includes 71 new deep tests + real-life verification.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 14:00:10 +01:00
arkon 926e77b1c2 chore: bump version to 0.1550 2026-02-19 08:49:36 +01:00
arkon 1833a9ac2d chore: bump version to 0.1549 2026-02-18 23:14:39 +01:00
arkonandClaude Opus 4.6 bd188df08d fix: Ink status bar redraw garbling — never discard incomplete DEC sync blocks, always buffer cursor-up redraws
chore: bump version to 0.1548

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 22:40:24 +01:00
arkonandClaude Opus 4.6 1450b8ce57 docs: add local echo feature to README mobile section
Highlights zero-latency typing as the headline mobile feature.
Adds comparison table entry and detailed feature breakdown.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 22:28:43 +01:00
arkonandClaude Opus 4.6 287f44ad3f feat: local echo for mobile input — instant keystroke feedback over high-latency connections
DOM overlay captures keystrokes locally and sends edited text + Enter as separate
events (matching Ink's sendCommand pattern). Block cursor matches Claude Code's
native cursor style. Enabled by default on mobile touch devices.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 22:24:37 +01:00
arkonandClaude Opus 4.6 d7ad617d7f chore: bump version to 0.1545
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:53:34 +01:00
arkonandClaude Opus 4.6 989f8386b1 fix: mobile subagent dropdown — single-tap restore, position at top
- Move subagent dropdown to top (near badge) instead of bottom on mobile
- Fix iOS double-tap issue: wrap :hover styles in @media(hover:hover)
- Pin dropdown immediately on first tap (prevent mouseleave auto-close)
- Hide subagents panel by default on mobile (floating windows sufficient)
- Revert broken mobile auto-minimize (agents auto-pop up again)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 20:05:01 +01:00
arkonandClaude Opus 4.6 3bacc232b8 chore: bump version to 0.1543
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 19:38:51 +01:00
arkon a3d45820a5 fix: subagent tracking not syncing to mobile — feature toggles wrongly in displayKeys 2026-02-18 18:19:46 +01:00
arkon a1924b91e3 chore: bump version to 0.1541 2026-02-18 18:14:13 +01:00
arkonandClaude Opus 4.6 4a1de883d4 chore: bump version to 0.1540
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 16:19:21 +01:00
arkon f1c109cff9 chore: bump version to 0.1539 2026-02-18 12:55:16 +01:00
arkon 88422cab57 chore: bump version to 0.1538 2026-02-18 12:51:35 +01:00
arkonandClaude Opus 4.6 c548c2d6ee fix: mobile keyboard handlers killed on SSE reconnect — re-init after cleanup
handleInit() called KeyboardHandler.cleanup() and MobileDetection.cleanup()
on every SSE connect but never re-initialized them, breaking keyboard
scroll-into-view and the /init /clear accessory bar on mobile.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 11:59:42 +01:00
arkonandClaude Opus 4.6 ee22ef204f chore: bump version to 0.1536
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 11:28:34 +01:00
arkonandClaude Opus 4.6 d5a3806aa3 fix: tab folder visibility controlled by Tall Tabs setting + cache busting
- Renamed "Two-Row Tabs" to "Tall Tabs (Name + Folder)" for clarity
- Tab folder path now only rendered in JS when setting is ON (not just CSS hidden)
- CSS specificity fix: mobile.css now matches .tabs-two-rows specificity (0,2,0)
- Server settings sync: display keys seed from server on fresh localStorage
- Bumped cache buster versions to 0.1534 to force browser reload

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 11:15:15 +01:00
arkon 6fd6ff770f chore: remove debug test file 2026-02-18 10:48:08 +01:00
arkon 30d6115c00 chore: bump version to 0.1534 2026-02-18 10:47:56 +01:00
arkon f178d02f13 chore: bump version to 0.1533 2026-02-18 10:40:49 +01:00
arkon 5261f8c395 chore: bump version to 0.1532 2026-02-18 10:28:46 +01:00
arkon 62ddfdea36 chore: bump version to 0.1531 2026-02-18 10:23:10 +01:00
arkon e05811d69a chore: bump version to 0.1530 2026-02-18 09:36:05 +01:00
arkon 50b17184ee chore: bump version to 0.1529 2026-02-18 07:28:15 +01:00
arkonandClaude Opus 4.6 31d3e7bc70 chore: bump version to 0.1528
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 07:06:34 +01:00
arkon 9d67a571ba chore: bump version to 0.1527 2026-02-18 05:36:20 +01:00
arkonandClaude Opus 4.6 38c42fb7e5 chore: bump version to 0.1526
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 05:02:27 +01:00
arkon 36a9e96bd1 chore: bump version to 0.1525 2026-02-17 21:27:43 +01:00
arkon 4fd8174680 chore: bump version to 0.1524 2026-02-17 16:47:54 +01:00
arkon dd9d43935d chore: bump version to 0.1523 2026-02-17 15:07:11 +01:00
arkon 74a69ad861 chore: bump version to 0.1522 2026-02-17 08:14:34 +01:00
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
arkonandClaude Opus 4.5 99fa04df29 fix: revert broken selectSession optimization
The optimization introduced a duplicate 'session' variable declaration
that caused a SyntaxError, breaking the web UI entirely.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 05:14:18 +01:00
arkon 30f73871c6 chore: bump version to 0.1476 2026-02-02 05:09:23 +01:00
arkonandClaude Opus 4.5 b0d3dfe3a6 perf: optimize tab switching responsiveness
- Increase chunked write size from 64KB to 128KB (halves write time)
- Start buffer fetch immediately before other setup work
- Show "Loading session..." indicator during fetch
- Parallelize session attach with buffer fetch
- Fire-and-forget resize call (don't block on it)

Reduces perceived tab switch latency by ~50-100ms for large buffers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 05:08:51 +01:00
arkon efd00658aa chore: bump version to 0.1475 2026-02-02 04:50:08 +01:00
arkonandClaude Opus 4.5 e37d2f6f49 docs: add terminal anti-flicker system documentation
- Document 6-layer anti-flicker pipeline (server batching, DEC 2026,
  SSE broadcast, client rAF, sync parser, chunked loading)
- Add detailed implementation notes for server and client sides
- Document responsiveness considerations and latency sources
- Fix cross-session data bleed: clear pendingWrites and syncWaitTimeout
  on session switch and SSE reconnect
- Improve flicker filter to detect cursor-up patterns (ESC[nA)
- Add adaptive batching: extend batch window during rapid-fire events
- Update BATCH_FLUSH_THRESHOLD from 1KB to 32KB for effective batching

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 04:49:15 +01:00
arkonandClaude Opus 4.5 dc0b9f0fb6 fix: capture script now properly spawns subagents
- Fix input submission: add \r and useScreen:true for reliable input
- Link to real codebase instead of empty test case
- Select correct session tab before sending input
- Filter subagents by session for accurate tracking
- Screenshots now show real subagent windows with activity
- Optimized GIF to 3.9MB (was 62MB)

Commit from flight QR118 in an Airbus A350-1000, stable connection thanks to Starlink!

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:16:02 +01:00
arkonandClaude Opus 4.5 2186d16616 docs: replace ASCII art with tables in README
- Replace Respawn Controller state machine diagram with state table
- Replace Zero-Flicker pipeline ASCII with flow table
- Cleaner presentation that renders well on GitHub

Commit from flight QR118 in an Airbus A350-1000, stable connection thanks to Starlink!

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 00:37:21 +01:00
arkonandClaude Opus 4.5 cc7c188f1f feat: add subagent screenshot capture script and README images
- Add scripts/capture-subagent-screenshots.mjs for automated capture
- Creates real Claude sessions that spawn Task tool subagents
- Records video and converts to optimized GIF via FFmpeg
- Add subagent-spawn.png, subagent-demo.gif to docs/images
- Update README Live Agent Visualization with real screenshots
- Replace ASCII diagram with actual subagent window screenshots
- Add capture:subagents npm script
- Document both screenshot scripts in CLAUDE.md

Commit from flight QR118 in an Airbus A350-1000, stable connection thanks to Starlink!

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 00:35:18 +01:00
arkon 45f7381534 chore: bump version to 0.1474 2026-01-31 23:55:40 +01:00
arkonandClaude Opus 4.5 404092bd32 docs: improve CLAUDE.md with quick reference and gotchas
- Add Quick Reference table at top for common commands
- Add Common Gotchas section documenting 5 key pitfalls
- Add Import Conventions section for utilities/types/config
- Add test setup exported helpers to Testing section
- Fix port range inconsistency (now all say 3183-3193)
- Add missing files to core files table

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 23:52:44 +01:00
arkonandClaude Opus 4.5 eb7c005363 fix: memory leaks and performance optimizations
- WebServer: Store session listener refs for explicit cleanup on delete
- RespawnController: Fix clearInterval bug (was using clearTimeout)
- RespawnController: Add try/catch to interval callbacks
- PlanOrchestrator: Guarantee progressInterval cleanup with try/finally
- SubagentWatcher: Guard idle timer against deleted agents
- Session: Add threshold validation for auto-clear/compact (1k-500k)
- Session: Add token sum overflow check in restoreTokens
- Session: Use LRUMap for _recentTaskDescriptions auto-eviction

Commit from flight QR118 in an Airbus A350-1000, stable connection thanks to Starlink!

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 23:48:59 +01:00
arkonandClaude Opus 4.5 cd4905287e feat: add mobile case picker to toolbar
- Add Case button to mobile toolbar (between Run Claude and Run Shell)
- Add bottom sheet modal for case selection on mobile
- Show current case name on button (truncated)
- Allow creating new cases from mobile picker
- Sync selection with desktop dropdown

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:17:47 +01:00
arkonandClaude Opus 4.5 d7608a4885 fix: allow all display settings to work on mobile
- Remove display:none from CSS for all settings-controlled elements
- System stats, token count, monitor, subagents, project insights,
  file browser now respect user settings on mobile
- Settings already saved independently (mobile/desktop) via getSettingsStorageKey()
- Add compact mobile styling for each element instead of hiding

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 17:34:31 +01:00