Codeman maintainer
6d72b38db4
perf(capture): a grid tile's full capture reads no more history than it keeps
...
GET /api/sessions/:id/terminal?full=1 captured the whole tmux history
(capture-pane -S -<history limit>, 100,000 lines by default) and cut it to
`tail` only afterwards, all of it synchronous on the server's event loop.
A grid tile keeps TILE_SCROLLBACK lines plus its screen, so the rest was
captured to be thrown away, once per tile on every grid open, restore and
deploy reconnect. The route now takes an optional `lines=<n>` (an integer
of at least 1, clamped to the configured history limit) and passes it as
the capture's history bound (the existing historyLimitLines, so -S -<n>);
absent or malformed, the limit itself, so every existing caller gets the
same capture as before. Only full captures read it: the visible-frame path
(a shell tile's `tail=` load) reads no history and is untouched. The
capture still ends with its RELATIVE cursor move back to the caret, still
counts as a full capture (isFullCapture: the line-deleting transforms stay
off) and still reports captureCols/captureRows.
Grid tiles (boundedLoad) send lines=<scrollback + rows> on every full
capture of theirs: a TUI load and a shell history pull. The split's Pane B
asks for everything, as before.
Measured:
- A real haiku Claude pane on tileperf (about 3k lines of history):
bounded captures (lines=50, 500, 2000, 100000) against the unbounded
one, 4 PASS 0 FAIL: each a line-aligned suffix of it, ending in the
same relative cursor move (ESC[4A CR ESC[2C), same source
(mux-full-history) and capture geometry. Capture time there 72 ms both
ways, that history being shorter than the tile's bound. As a grid tile
(it sent lines=10047) its screen matched the pane row for row, 47 of
47 at the pane's own 77x47, caret on the composer.
- Six tiles restoring with Claude-style loads (full=1&tail=1MiB forced
on shells with about 19k lines of tmux history each, above the tile's
bound; n=3+3 interleaved, load 4.2 to 7.2): capture per tile med
219 ms [194 to 294] -> 155 ms [127 to 211]; server event-loop delay in
the capture window, max med 262 -> 201 ms; all painted 4.5 -> 3.6 s.
At checkpoint 1 a 30k-line history cost 713 ms per capture (event loop
blocked up to 765 ms each); the bound caps that at the tile's size.
Tests: the route passes lines= through, clamps it, ignores every malformed
form and leaves the visible-frame capture exactly as it was; a bounded
capture keeps its rows and ends in the cursor restore; grid tiles send it
on full captures and the split's Pane B does not. Mutation-checked six ways
(lines ignored, no clamp, a lenient parse, lines on the visible path, the
tile sending none, Pane B sending it). Documented in docs/api-reference.md
(/api/v1 is public).
Scope: PR 2 (the grid's loads; server route plus terminal-tile.js).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-07 07:44:56 +02:00
..
2026-08-22 14:13:57 +02:00
2026-09-14 23:46:28 +02:00
2026-09-28 15:23:22 +02:00
2026-10-06 19:46:04 +02:00
2026-10-07 07:44:56 +02:00
2026-09-06 21:53:38 +02:00
2026-09-22 17:11:33 +02:00
2026-06-10 01:38:40 +02:00
2026-07-20 17:35:40 +02:00
2026-08-10 12:29:00 +02:00
2026-10-04 23:52:41 +02:00
2026-09-07 19:09:24 +02:00
2026-09-28 16:28:29 +02:00
2026-08-12 02:30:08 +02:00
2026-09-02 08:26:45 +08:00
2026-09-07 19:09:24 +02:00
2026-08-08 22:30:39 +03:00
2026-08-21 02:37:58 +02:00
2026-08-05 01:40:37 +02:00
2026-01-27 23:15:25 +01:00
2026-06-09 20:02:15 +02:00
2026-09-24 01:57:35 +02:00
2026-09-22 08:10:05 +02:00
2026-07-12 17:50:21 +02:00
2026-06-14 12:46:58 -04:00
2026-06-19 17:58:06 -04:00
2026-06-19 17:58:06 -04:00
2026-09-06 23:11:01 +02:00
2026-09-04 16:08:57 -04:00
2026-02-12 13:44:07 +01:00
2026-10-05 20:00:30 +02:00
2026-03-07 07:33:44 +01:00
2026-02-26 16:44:34 +01:00
2026-09-22 18:53:46 +05:30
2026-09-18 16:43:04 +02:00
2026-10-05 19:51:59 +02:00
2026-10-05 20:00:30 +02:00
2026-10-05 19:51:59 +02:00
2026-09-28 16:28:56 +02:00
2026-08-07 16:41:39 +02:00
2026-08-10 11:19:51 +02:00
2026-07-20 02:48:14 +02:00
2026-09-24 01:48:33 +02:00
2026-08-20 11:21:29 +02:00
2026-03-01 16:50:23 +01:00
2026-09-02 08:26:45 +08:00
2026-09-13 17:43:13 +08:00
2026-08-22 14:36:23 +02:00
2026-09-24 01:48:26 +02:00
2026-09-24 01:48:26 +02:00
2026-10-03 11:19:42 +08:00
2026-09-02 08:26:45 +08:00
2026-09-24 01:48:26 +02:00
2026-09-28 16:18:27 +02:00
2026-10-04 23:52:41 +02:00
2026-09-04 14:20:11 +02:00
2026-08-22 14:13:57 +02:00
2026-06-14 12:46:58 -04:00
2026-08-26 18:43:52 +08:00
2026-08-09 05:02:14 +02:00
2026-10-01 17:16:18 +02:00
2026-09-06 21:53:38 +02:00
2026-08-21 08:23:31 -04:00
2026-06-10 22:47:02 +02:00
2026-09-06 21:53:38 +02:00
2026-10-01 11:18:56 +02:00
2026-07-12 18:42:36 +02:00
2026-08-09 15:56:44 +02:00
2026-09-06 23:05:26 +02:00
2026-09-28 17:10:12 +02:00
2026-06-29 11:35:56 +05:30
2026-10-06 15:46:49 +02:00
2026-09-16 20:47:12 +08:00
2026-09-19 12:32:50 +02:00
2026-09-17 13:41:19 +08:00
2026-09-17 13:41:19 +08:00
2026-09-17 12:22:45 +08:00
2026-09-20 21:19:42 +08:00
2026-09-21 04:30:01 +02:00
2026-09-17 11:09:24 +08:00
2026-09-04 16:08:57 -04:00
2026-03-01 16:50:23 +01:00
2026-08-24 18:00:52 +02:00
2026-09-13 17:42:35 +08:00
2026-08-24 18:00:52 +02:00
2026-08-25 18:30:41 +02:00
2026-08-25 03:08:15 +02:00
2026-10-05 19:51:59 +02:00
2026-08-22 14:13:57 +02:00
2026-08-18 23:24:22 +02:00
2026-09-23 11:40:03 +02:00
2026-09-16 16:51:00 +02:00
2026-09-14 23:56:19 +02:00
2026-09-14 23:56:19 +02:00
2026-09-13 17:43:14 +08:00
2026-09-02 19:33:32 +08:00
2026-09-28 16:28:29 +02:00
2026-08-27 19:38:38 +08:00
2026-07-20 02:36:02 +02:00
2026-09-23 14:44:26 +08:00
2026-09-04 14:36:35 +02:00
2026-10-05 19:51:59 +02:00
2026-10-05 19:51:59 +02:00
2026-06-14 08:43:57 +02:00
2026-06-14 08:43:57 +02:00
2026-06-12 09:09:14 -04:00
2026-07-12 17:50:21 +02:00
2026-09-23 11:40:03 +02:00
2026-09-02 20:41:24 -05:00
2026-06-07 04:33:11 +02:00
2026-09-10 02:57:40 +02:00
2026-08-09 22:39:07 +02:00
2026-08-23 21:40:10 -04:00
2026-09-22 13:22:28 +05:30
2026-08-05 08:44:47 +02:00
2026-06-10 01:30:43 +02:00
2026-08-29 23:31:28 -07:00
2026-09-04 16:08:57 -04:00
2026-10-01 11:19:46 +02:00
2026-09-04 16:08:57 -04:00
2026-08-19 23:35:45 +02:00
2026-06-09 20:02:15 +02:00
2026-10-06 15:46:49 +02:00
2026-09-21 04:39:28 +02:00
2026-09-24 01:48:26 +02:00
2026-09-01 12:30:48 +08:00
2026-06-19 13:10:17 -04:00
2026-07-12 17:50:21 +02:00
2026-09-23 14:44:26 +08:00
2026-09-28 16:28:56 +02:00
2026-10-05 19:51:59 +02:00
2026-10-05 19:51:59 +02:00
2026-08-23 08:39:03 +02:00
2026-08-23 08:39:03 +02:00
2026-07-12 18:06:59 +02:00
2026-10-06 23:23:55 +02:00
2026-08-10 03:15:13 +02:00
2026-09-25 19:05:16 -05:00
2026-08-10 11:16:58 +02:00
2026-09-24 22:18:07 +02:00
2026-09-21 18:00:30 +02:00
2026-08-09 14:04:34 +02:00
2026-10-04 21:36:44 +02:00
2026-09-18 22:46:11 +02:00
2026-08-23 14:46:10 -04:00
2026-08-14 00:14:21 +02:00
2026-10-07 06:45:16 +02:00
2026-10-07 02:11:01 +02:00
2026-10-06 09:09:51 +02:00
2026-06-12 09:09:14 -04:00
2026-10-05 09:47:08 -04:00
2026-09-14 23:56:19 +02:00
2026-08-17 01:46:48 +02:00
2026-10-06 08:55:05 +02:00
2026-10-06 08:55:05 +02:00
2026-09-13 17:43:13 +08:00
2026-09-21 03:03:31 +02:00
2026-09-02 20:41:24 -05:00
2026-08-09 18:03:13 +02:00
2026-10-04 23:52:41 +02:00
2026-09-22 19:02:55 +02:00
2026-08-16 20:34:34 +02:00
2026-08-23 08:39:03 +02:00
2026-09-02 08:26:45 +08:00
2026-03-07 07:33:44 +01:00
2026-09-28 15:22:37 -04:00
2026-10-04 23:52:41 +02:00
2026-10-04 23:52:41 +02:00
2026-08-16 20:34:34 +02:00
2026-02-26 16:44:34 +01:00
2026-09-08 00:56:39 -04:00
2026-10-04 23:52:41 +02:00
2026-10-04 23:52:41 +02:00
2026-09-26 22:47:48 -04:00
2026-08-19 19:14:52 +00:00
2026-09-24 01:48:26 +02:00
2026-09-22 13:22:28 +05:30
2026-09-14 23:30:14 +02:00
2026-09-28 15:23:22 +02:00
2026-09-08 00:56:39 -04:00
2026-07-20 12:33:12 +02:00
2026-02-18 12:51:35 +01:00
2026-08-09 13:23:24 +02:00
2026-06-08 11:01:34 -04:00
2026-07-19 15:32:45 +02:00
2026-02-12 13:44:07 +01:00
2026-08-04 15:02:46 +02:00
2026-07-28 23:20:01 +03:00
2026-08-28 11:32:30 -05:00
2026-09-12 05:15:41 +02:00
2026-08-28 13:45:12 -05:00
2026-09-07 22:11:54 -05:00
2026-09-21 04:37:45 +02:00
2026-09-02 20:41:24 -05:00
2026-03-21 19:23:37 +01:00
2026-03-21 07:20:18 +01:00
2026-09-14 23:56:19 +02:00
2026-07-20 04:02:46 +02:00
2026-09-24 22:18:07 +02:00
2026-09-24 22:18:07 +02:00
2026-08-09 16:16:54 +02:00
2026-09-10 12:42:33 +08:00
2026-09-20 07:18:49 +00:00
2026-06-08 10:27:18 -04:00
2026-02-26 16:44:34 +01:00
2026-08-21 02:37:58 +02:00
2026-08-13 17:23:27 +02:00
2026-09-01 11:32:18 +02:00
2026-09-14 15:59:00 +02:00
2026-08-26 18:43:52 +08:00
2026-09-14 14:28:57 +02:00
2026-08-07 01:34:47 +02:00
2026-02-12 18:26:16 +01:00
2026-06-09 20:02:17 +02:00
2026-08-09 16:03:27 +02:00
2026-07-28 04:15:30 +02:00
2026-09-24 01:35:23 +02:00
2026-01-21 22:36:45 +01:00
2026-09-02 20:41:24 -05:00
2026-02-19 14:00:10 +01:00
2026-08-20 12:58:17 -04:00
2026-06-10 18:06:45 +02:00
2026-03-01 16:50:23 +01:00
2026-08-09 23:05:11 +02:00
2026-08-09 23:05:11 +02:00
2026-09-08 00:56:39 -04:00
2026-08-09 23:05:11 +02:00
2026-09-24 22:18:07 +02:00
2026-09-14 23:56:19 +02:00
2026-10-06 08:55:05 +02:00
2026-09-04 13:50:22 +02:00
2026-07-17 16:03:03 -04:00
2026-09-14 23:42:06 +02:00
2026-09-15 14:20:31 +02:00
2026-07-17 15:54:32 -04:00
2026-09-07 21:30:31 -05:00
2026-09-14 23:42:06 +02:00
2026-08-07 05:05:41 +02:00
2026-09-19 12:18:40 +02:00
2026-09-24 01:48:26 +02:00
2026-08-21 02:25:43 +02:00
2026-03-07 07:33:44 +01:00
2026-02-26 16:44:34 +01:00
2026-06-10 20:41:34 +02:00
2026-03-07 07:33:44 +01:00
2026-03-07 07:33:44 +01:00
2026-08-09 15:31:02 +02:00
2026-07-12 18:21:42 +02:00
2026-01-25 07:52:40 +01:00
2026-09-23 11:40:27 +02:00
2026-08-18 10:59:44 -04:00
2026-03-01 14:33:18 +01:00
2026-09-24 01:35:23 +02:00
2026-08-19 19:14:52 +00:00
2026-09-28 15:22:37 -04:00
2026-09-12 05:15:41 +02:00
2026-08-21 02:25:43 +02:00
2026-09-01 12:30:48 +08:00
2026-10-04 19:05:43 +02:00
2026-07-17 16:26:28 -04:00
2026-08-18 10:46:21 -04:00
2026-09-24 01:48:26 +02:00
2026-09-20 21:37:05 +08:00
2026-10-05 20:00:30 +02:00
2026-08-23 14:46:10 -04:00
2026-06-10 03:41:04 +02:00
2026-02-18 18:14:13 +01:00
2026-08-10 03:15:13 +02:00
2026-06-09 20:02:15 +02:00
2026-09-24 01:35:27 +02:00
2026-08-16 20:34:34 +02:00
2026-09-24 01:48:26 +02:00
2026-08-09 01:34:55 +02:00
2026-09-07 22:42:20 +02:00
2026-07-12 19:49:58 +02:00
2026-09-15 17:59:16 +02:00
2026-06-10 20:41:34 +02:00
2026-09-28 16:18:27 +02:00
2026-09-07 08:48:31 +02:00
2026-09-02 20:41:24 -05:00
2026-08-09 01:18:03 +02:00
2026-08-17 22:54:46 +02:00
2026-09-21 18:21:21 +02:00
2026-08-10 03:15:13 +02:00
2026-08-23 12:21:02 -04:00
2026-08-24 22:58:28 +02:00
2026-09-22 17:59:45 +02:00
2026-09-14 23:46:28 +02:00
2026-10-04 23:52:41 +02:00
2026-08-23 12:21:02 -04:00
2026-08-23 12:21:02 -04:00
2026-08-23 14:46:10 -04:00
2026-07-17 16:21:16 -04:00
2026-08-16 05:11:00 +02:00
2026-10-07 02:07:27 +02:00
2026-09-22 09:19:55 +02:00
2026-07-17 16:25:29 -04:00
2026-09-22 18:53:46 +05:30
2026-10-06 16:24:52 +02:00
2026-08-23 12:21:02 -04:00
2026-09-23 11:40:27 +02:00
2026-02-26 16:44:34 +01:00
2026-09-15 17:59:16 +02:00
2026-09-19 11:38:59 +02:00
2026-09-01 02:31:26 +02:00
2026-08-09 01:18:03 +02:00
2026-09-28 16:28:29 +02:00
2026-08-09 21:32:04 -04:00
2026-06-10 01:30:43 +02:00
2026-09-24 01:35:23 +02:00
2026-09-28 16:30:40 +02:00
2026-08-05 01:40:37 +02:00
2026-10-06 09:28:08 +02:00
2026-10-06 09:28:08 +02:00
2026-08-10 03:59:43 +02:00
2026-09-23 11:40:03 +02:00
2026-09-21 04:53:19 +02:00
2026-09-20 13:10:26 -05:00
2026-09-20 13:10:34 -05:00
2026-09-20 13:10:27 -05:00
2026-09-20 13:10:30 -05:00
2026-09-20 13:10:32 -05:00
2026-09-20 13:10:29 -05:00
2026-10-06 09:28:08 +02:00
2026-08-07 01:31:50 +02:00
2026-09-15 21:01:53 +02:00
2026-09-02 20:41:24 -05:00
2026-08-13 17:28:35 +02:00
2026-06-09 20:02:15 +02:00
2026-09-18 22:46:11 +02:00
2026-08-13 17:28:35 +02:00
2026-09-02 20:41:24 -05:00
2026-10-07 07:11:08 +02:00
2026-03-07 07:33:44 +01:00
2026-08-23 14:46:10 -04:00
2026-08-23 14:46:10 -04:00
2026-08-18 23:24:22 +02:00
2026-09-14 15:59:00 +02:00
2026-01-22 11:30:10 +01:00
2026-05-12 10:11:47 +02:00
2026-06-15 01:43:15 +02:00
2026-09-22 12:25:36 +05:30
2026-10-04 23:52:41 +02:00
2026-10-04 20:10:32 -04:00
2026-10-04 20:21:44 -04:00
2026-10-05 19:51:59 +02:00
2026-08-23 14:46:10 -04:00
2026-08-23 14:46:10 -04:00
2026-10-04 20:10:32 -04:00
2026-08-23 14:46:10 -04:00
2026-08-24 00:59:48 +02:00
2026-08-23 14:46:10 -04:00
2026-08-23 14:46:10 -04:00
2026-10-05 19:51:59 +02:00
2026-08-23 12:21:02 -04:00
2026-08-10 03:06:23 +02:00
2026-09-12 06:09:28 +02:00
2026-08-23 12:21:02 -04:00
2026-08-25 18:26:07 +02:00
2026-02-28 17:39:44 +01:00
2026-02-28 17:39:44 +01:00
2026-01-21 07:19:49 +01:00
2026-02-26 16:44:34 +01:00
2026-06-10 18:06:45 +02:00
2026-08-20 10:46:11 +02:00
2026-09-18 21:38:40 +02:00
2026-09-22 19:02:55 +02:00
2026-08-05 02:38:57 +02:00
2026-09-07 19:11:20 -04:00
2026-09-18 21:34:42 +02:00
2026-09-22 13:22:28 +05:30
2026-10-06 10:07:40 +02:00
2026-09-14 14:09:13 +02:00
2026-06-30 19:52:49 -04:00
2026-07-12 12:39:46 +02:00
2026-09-18 13:42:44 +02:00
2026-09-16 09:26:30 +08:00
2026-06-09 15:39:03 -04:00
2026-10-06 10:20:25 +02:00
2026-08-19 19:41:43 +00:00
2026-02-26 16:44:34 +01:00
2026-09-23 11:40:03 +02:00
2026-09-22 13:07:33 +05:30
2026-09-22 13:22:28 +05:30
2026-09-28 16:30:40 +02:00
2026-09-14 23:56:19 +02:00
2026-10-06 19:46:04 +02:00
2026-10-07 06:00:41 +02:00
2026-09-28 16:30:40 +02:00
2026-09-24 01:35:23 +02:00
2026-08-18 19:55:23 +02:00
2026-10-06 18:09:18 +02:00
2026-10-07 02:48:40 +02:00
2026-10-07 02:48:40 +02:00
2026-10-07 02:48:40 +02:00
2026-10-06 16:24:52 +02:00
2026-10-06 17:59:16 +02:00
2026-10-06 23:23:55 +02:00
2026-10-07 02:48:40 +02:00
2026-10-06 23:18:29 +02:00
2026-10-07 07:44:56 +02:00
2026-10-06 23:23:55 +02:00
2026-10-07 06:30:09 +02:00
2026-10-06 23:28:47 +02:00
2026-10-07 02:48:40 +02:00
2026-10-06 23:18:29 +02:00
2026-10-07 06:57:54 +02:00
2026-10-06 23:23:55 +02:00
2026-10-06 23:23:55 +02:00
2026-10-07 07:11:08 +02:00
2026-10-06 17:59:16 +02:00
2026-06-09 15:39:03 -04:00
2026-09-19 10:44:35 +02:00
2026-09-24 22:18:07 +02:00
2026-07-12 19:49:58 +02:00
2026-07-10 11:14:26 -04:00
2026-05-25 23:28:58 +02:00
2026-08-09 18:03:13 +02:00
2026-07-20 03:26:21 +02:00
2026-10-06 16:24:52 +02:00
2026-06-10 20:41:34 +02:00
2026-09-14 15:59:00 +02:00
2026-07-20 02:58:51 +02:00
2026-01-22 11:30:10 +01:00
2026-09-14 15:57:08 +02:00
2026-10-06 09:09:51 +02:00
2026-08-10 11:19:51 +02:00
2026-09-23 11:40:03 +02:00
2026-07-12 12:42:36 +02:00
2026-10-04 23:52:41 +02:00
2026-10-04 23:52:41 +02:00
2026-10-04 23:52:41 +02:00
2026-09-14 23:38:54 +02:00
2026-09-04 15:21:13 +02:00
2026-09-04 15:21:12 +02:00
2026-09-04 15:21:12 +02:00
2026-09-14 23:38:54 +02:00
2026-09-14 23:38:54 +02:00
2026-07-29 09:01:18 +02:00
2026-08-09 04:06:23 +02:00
2026-09-14 23:38:54 +02:00
2026-09-26 22:45:35 -04:00
2026-08-23 14:12:38 -04:00
2026-07-21 00:04:40 +08:00
2026-10-05 20:00:30 +02:00
2026-07-12 18:42:36 +02:00
2026-07-12 18:42:36 +02:00
2026-07-12 18:42:36 +02:00
2026-09-23 11:40:03 +02:00