Commit Graph
693 Commits
Author SHA1 Message Date
arkonandClaude Opus 4.6 67673d6f2e fix: README mobile layout — remove float that breaks narrow viewports
The Mobile-Optimized Web UI section used align="left" on a 280px image,
leaving only ~110px for text on 390px mobile screens. This caused
single-character-per-line text wrapping on GitHub mobile view. Changed
to stacked layout: text description above, centered image, then
comparison table below.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:50:24 +01:00
arkon eda1060063 chore: bump version to 0.1616 2026-02-24 13:44:15 +01:00
Ark0N f8ec7fb2b6 Update features list in README
Removed '24/7 Autonomous Sessions' and 'Ralph Loop Tracking' from the features list.
2026-02-24 13:42:07 +01:00
arkon 0f97d1fa8d chore: bump version to 0.1615 2026-02-24 13:39:44 +01:00
arkon 37af7ead20 chore: bump version to 0.1614 2026-02-24 13:36:42 +01:00
arkon 2e816f55e4 chore: bump version to 0.1613 2026-02-24 13:34:30 +01:00
arkon 3ce3b2bede chore: bump version to 0.1612 2026-02-24 13:30:17 +01:00
arkon b8c7b8df9e chore: bump version to 0.1611 2026-02-24 13:26:27 +01:00
arkon 76e5c4f512 chore: bump version to 0.1610 2026-02-24 13:25:26 +01:00
arkon 2097fd3989 chore: bump version to 0.1609 2026-02-24 13:23:00 +01:00
arkon 406135a7dd chore: bump version to 0.1608 2026-02-24 13:20:19 +01:00
arkon 439ccbe108 chore: bump version to 0.1607 2026-02-24 13:17:08 +01:00
arkon c7967ae21e chore: bump version to 0.1606 2026-02-24 13:15:01 +01:00
arkon 06e4a882fe chore: bump version to 0.1605 2026-02-24 13:07:18 +01:00
arkon 95823cb2bd chore: bump version to 0.1604 2026-02-24 13:00:54 +01:00
arkon 675cfeaf67 chore: bump version to 0.1603 2026-02-24 12:50:27 +01:00
arkon 649958f9ae chore: bump version to 0.1602 2026-02-22 13:46:57 +01:00
arkon 47775b0610 fix: correct anchor link to Published Packages section 2026-02-22 13:21:49 +01:00
arkonandClaude Opus 4.6 c8d3ca85a6 docs: fix repo URLs, rewrite npm README, add Published Packages to Claudeman README
- Fix repository URL: nicobailon/claudeman → Ark0N/Claudeman
- Rewrite xterm-zerolag-input README with badges, origin story, architecture
  diagrams, better API docs, integration patterns, and "Why This Is Hard"
- Add Published Packages section to Claudeman README with quick start example
- Add callout in Claudeman's local echo section linking to the npm package
- Publish as xterm-zerolag-input@0.1.2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-22 12:16:47 +01:00
arkon 0f43ba1b8e chore: fix npm homepage URL, bump xterm-zerolag-input to 0.1.1 2026-02-22 12:13:05 +01:00
arkonandClaude Opus 4.6 21b2a1191b feat: integrate xterm-zerolag-input library into Claudeman app.js
Replace the embedded 348-line LocalEchoOverlay class with the standalone
xterm-zerolag-input library (inlined as ZerolagInputAddon). A bridge
class `LocalEchoOverlay extends ZerolagInputAddon` preserves the
constructor API so existing `new LocalEchoOverlay(terminal)` call works.

All 43+ private property accesses (_flushedOffset, _bufferDetectDone,
_lastRenderKey, _render(), _detectBufferText(), etc.) replaced with
public library methods:

- Backspace: 60-line 3-branch handler → removeChar() returning
  'pending'|'flushed'|false + Map sync
- Tab completion: _bufferDetectDone/_detectBufferText/_flushedOffset
  → resetBufferDetection()/detectBufferText()/undoDetection()/rerender()
- Tab switch save: _flushedOffset/_flushedText reads → getFlushed()
- Tab switch restore: direct assignments → setFlushed(n, t, false)
- Buffer detection guard: _bufferDetectDone=true → suppressBufferDetection()
- Resize re-render: _lastRenderKey='';rerender() → rerender()
- Post-load render: _lastRenderKey='';_render() → rerender()

Verified with 9 Playwright integration tests + manual testing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-22 11:41:44 +01:00
arkonandClaude Opus 4.6 8dfcfe8d62 fix: eliminate 3 migration pitfalls in xterm-zerolag-input
Pitfall 3 (REAL BUG): setFlushed() called _render() unconditionally.
During tab switch, rendering against a stale buffer found the old
session's prompt and locked the column position via the flushed-text
column lock. After the new buffer loaded, rerender() kept the stale
column. Fix: add render parameter (default true), pass false during
tab-switch restore to defer rendering until buffer is loaded.

Pitfall 2: Tab completion "undo" required calling clearFlushed() +
resetBufferDetection() separately — easy to get wrong. Add
undoDetection() convenience method that atomically clears flushed
state and re-enables detection.

Pitfall 1: Backspace Map sync is app-specific (can't be fixed in lib),
but removeChar() return value + getFlushed() make the pattern clean.
Updated tab-switch test to demonstrate the correct pattern.

Tests: 78 total (+4 new)
- setFlushed render=false prevents stale column lock
- setFlushed render=false keeps overlay hidden
- undoDetection clears flushed + re-enables detection
- undoDetection preserves pending text

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-22 11:16:12 +01:00
arkon 36f0772c2f chore: bump version to 0.1600 2026-02-22 10:47:46 +01:00
arkonandClaude Opus 4.6 ce188e6279 fix: add suppressBufferDetection, comprehensive docs and tests
Second deep audit comparing all 43 integration points in Claudeman's
app.js against the library API found one critical gap:

- Add suppressBufferDetection() — needed when switching to sessions
  with UI framework text (Ink) after the prompt that would be falsely
  detected. Claudeman sets _bufferDetectDone=true externally; this
  method provides the public equivalent.

Tests: 74 total (+13 new)
- Tab-switch save/restore pattern (flushed state roundtrip)
- suppressBufferDetection blocks explicit, implicit (addChar), and
  cascade (removeChar) detection paths
- clear() resets suppression
- Methods safe before activate() and after dispose()
- addChar implicit buffer detection on first keystroke
- refreshFont with flushed-only text

README: rewritten from 207 to 459 lines with:
- removeChar cascade explanation with return value table
- Flushed text concept explained
- Integration patterns: buffered, char-at-a-time, tab switching,
  tab completion, Ink/TUI frameworks, SSE reconnect, resize, font
- Architecture diagram (keypress → DOM overlay → PTY echo flow)
- Prompt column locking, text wrapping, render cache, scroll awareness
- All known limitations documented

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-22 10:44:41 +01:00
arkonandClaude Opus 4.6 53132e3a38 fix: address 7 issues found in xterm-zerolag-input audit
1. Regex global flag safety — strip `g` flag before matching to prevent
   lastIndex mutation and missing .index on match results
2. state.visible false before activate — null overlay no longer reports
   visible: true
3. removeChar() returns 'pending' | 'flushed' | false instead of boolean
   so consumers can distinguish whether to send backspace to PTY
4. removeChar() implements buffer detection cascade (step 3) — detects
   existing prompt text when both pending and flushed are empty
5. RenderKey includes text content, not just length — prevents stale
   renders when setFlushed() called with same count but different text
6. Remove dead `import type { Terminal }` from test file
7. Remove internal `FontStyle` from public exports

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-22 10:24:03 +01:00
arkonandClaude Opus 4.6 d14ac9de65 feat: add xterm-zerolag-input standalone library
Extract Claudeman's local echo overlay into a reusable xterm.js addon
at packages/xterm-zerolag-input/. Provides instant keystroke feedback
via a DOM overlay, eliminating perceived input latency over high-RTT
connections (SSH, mobile, cloud IDEs).

- Zero dependencies, compatible with xterm v5.x and @xterm/xterm v5.4+
- Configurable prompt detection (character, regex, or custom function)
- Flushed text tracking for tab-switch / deferred echo scenarios
- Per-character grid-aligned rendering matching xterm's canvas output
- 56 tests passing (prompt finder, overlay renderer, full addon lifecycle)
- Dual CJS/ESM build with full TypeScript declarations

Claudeman source is unchanged — migration to consume this lib is a
separate follow-up.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-22 10:14:37 +01:00
arkon 4aa38c1bbb chore: bump version to 0.1599 2026-02-22 09:23:26 +01:00
arkon c78bb53968 chore: bump version to 0.1598 2026-02-22 07:34:33 +01:00
arkon 90b293ab3d chore: bump version to 0.1597 2026-02-22 06:04:37 +01:00
arkon 84c454cf40 chore: bump version to 0.1596 2026-02-22 05:52:25 +01:00
arkon 1a36ae15b8 chore: bump version to 0.1595 2026-02-22 05:46:56 +01:00
arkon 3a5ab330b7 chore: bump version to 0.1594 2026-02-22 05:45:04 +01:00
arkon 67b5c71019 chore: bump version to 0.1593 2026-02-22 05:34:52 +01:00
arkon ce49cd8c46 chore: bump version to 0.1592 2026-02-22 02:49:19 +01:00
arkonandClaude Opus 4.6 c060b72757 fix: local echo overlay — 5 bugs fixed, 39-test suite, wrapping text survives tab switch
Root cause bugs fixed in local echo overlay:
1. Stored flushed text as string (_flushedText, _flushedTexts Map) to avoid reading stale terminal buffer
2. Overlay stays visible when pendingText empties but flushed > 0
3. Backspace into flushed text has immediate visual feedback
4. _flushedTexts.delete() added alongside _flushedOffsets.delete() in Enter/Ctrl+C/cleanup
5. OSC terminal responses (xterm color queries) no longer clear flushed text state —
   was triggered by _handleColorEvent → triggerDataEvent during buffer load after tab switch

Added comprehensive test suite (test/local-echo-user-test.mjs): 39 tests across 9 groups
including line wrapping, tab switch round-trips, backspace into flushed text, and more.
All 6 test suites pass (133 total assertions).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 02:05:49 +01:00
arkon c820acc96e fix: make localEchoEnabled per-platform so desktop/mobile settings don't overwrite each other
Strip localEchoEnabled from server PUT payload (stays in device-specific
localStorage only). Add to displayKeys as safety net for stale server values.

chore: bump version to 0.1588
2026-02-21 23:37:29 +01:00
arkonandClaude Opus 4.6 6c75432d74 chore: bump version to 0.1587
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 14:35:43 +01:00
arkonandClaude Opus 4.6 7fbc60db9b chore: bump version to 0.1586
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 14:00:16 +01:00
arkon 0fe6251424 chore: bump version to 0.1585 2026-02-21 07:12:57 +01:00
arkonandClaude Opus 4.6 85ee601b5b chore: bump version to 0.1584
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 16:26:11 +01:00
arkonandClaude Opus 4.6 2de3c46f66 chore: bump version to 0.1583
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 16:18:43 +01:00
arkon c561c41146 chore: bump version to 0.1582 2026-02-20 15:58:28 +01:00
arkon bad074756d chore: bump version to 0.1581 2026-02-20 15:41:43 +01:00
arkonandClaude Opus 4.6 a34b1cf4ce fix: make brotli optional in build, update dist for perf changes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:07:54 +01:00
arkonandClaude Opus 4.6 819b1771c3 chore: bump version to 0.1580
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:04:45 +01:00
arkon 3f9632c8c7 chore: bump version to 0.1579 2026-02-20 14:33:06 +01:00
arkonandClaude Opus 4.6 663070f3f1 chore: bump version to 0.1578
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 14:04:16 +01:00
arkonandClaude Opus 4.6 ee5e070776 chore: bump version to 0.1576
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 13:06:45 +01:00
arkonandClaude Opus 4.6 06c4e3933b chore: bump version to 0.1575
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:53:02 +01:00
arkon 2528d98dce chore: bump version to 0.1574 2026-02-20 12:03:51 +01:00